[petsc4py] 02/08: Imported Upstream version 3.7.0

Drew Parsons dparsons at moszumanska.debian.org
Sun Jul 10 15:09:17 UTC 2016


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

dparsons pushed a commit to branch experimental
in repository petsc4py.

commit 24f643901bd8c01fd6d4f870e2034d783587c898
Author: Drew Parsons <dparsons at emerall.com>
Date:   Sun Jul 10 22:05:56 2016 +0800

    Imported Upstream version 3.7.0
---
 CHANGES.rst                                        |      6 +
 DESCRIPTION.rst                                    |      7 +-
 LICENSE.rst                                        |      2 +-
 PKG-INFO                                           |     11 +-
 README.rst                                         |      2 +-
 conf/baseconf.py                                   |     28 +-
 demo/dmplex/distribute_field.py                    |     74 +
 demo/perftest/driver.c                             |      9 +-
 demo/perftest/driver.py                            |      2 +
 docs/CHANGES.html                                  |      9 +-
 docs/LICENSE.html                                  |      4 +-
 docs/apiref/api-objects.txt                        |    337 +-
 docs/apiref/class-tree.html                        |     40 +-
 docs/apiref/class_hierarchy_for__dmcomposi.png     |    Bin 2099 -> 2097 bytes
 docs/apiref/class_hierarchy_for__dmda_vec_.png     |    Bin 1818 -> 1811 bytes
 docs/apiref/class_hierarchy_for__is_buffer.png     |    Bin 1070 -> 1069 bytes
 docs/apiref/class_hierarchy_for__mat_stenc.png     |    Bin 1416 -> 1418 bytes
 docs/apiref/class_hierarchy_for__vec_buffe.png     |    Bin 1162 -> 1265 bytes
 docs/apiref/class_hierarchy_for__vec_local.png     |    Bin 1578 -> 1581 bytes
 docs/apiref/class_hierarchy_for_ao.png             |    Bin 1741 -> 1985 bytes
 docs/apiref/class_hierarchy_for_asmtype.png        |    Bin 1638 -> 1639 bytes
 docs/apiref/class_hierarchy_for_assemblyty.png     |    Bin 1525 -> 1519 bytes
 docs/apiref/class_hierarchy_for_boundaryty.png     |    Bin 1702 -> 1703 bytes
 docs/apiref/class_hierarchy_for_comm.png           |    Bin 808 -> 785 bytes
 docs/apiref/class_hierarchy_for_compositet.png     |    Bin 1672 -> 1671 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_dm.png             |    Bin 6882 -> 7308 bytes
 docs/apiref/class_hierarchy_for_dmcomposit.png     |    Bin 3352 -> 3331 bytes
 docs/apiref/class_hierarchy_for_dmda.png           |    Bin 2296 -> 2303 bytes
 docs/apiref/class_hierarchy_for_dmplex.png         |    Bin 2499 -> 2549 bytes
 docs/apiref/class_hierarchy_for_dmshell.png        |    Bin 3041 -> 3043 bytes
 docs/apiref/class_hierarchy_for_elementtyp.png     |    Bin 1247 -> 1246 bytes
 docs/apiref/class_hierarchy_for_equationty.png     |    Bin 1641 -> 1631 bytes
 docs/apiref/class_hierarchy_for_error.png          |    Bin 8290 -> 8157 bytes
 docs/apiref/class_hierarchy_for_exactfinal.png     |    Bin 1966 -> 1379 bytes
 docs/apiref/class_hierarchy_for_factorshif.png     |    Bin 1861 -> 1862 bytes
 docs/apiref/class_hierarchy_for_format.png         |    Bin 930 -> 913 bytes
 docs/apiref/class_hierarchy_for_gamgtype.png       |    Bin 1521 -> 1520 bytes
 docs/apiref/class_hierarchy_for_gasmtype.png       |    Bin 1722 -> 1727 bytes
 docs/apiref/class_hierarchy_for_infotype.png       |    Bin 0 -> 1134 bytes
 docs/apiref/class_hierarchy_for_insertmode.png     |    Bin 1344 -> 1325 bytes
 docs/apiref/class_hierarchy_for_interpolat.png     |    Bin 1525 -> 1517 bytes
 docs/apiref/class_hierarchy_for_is.png             |    Bin 1570 -> 1810 bytes
 docs/apiref/class_hierarchy_for_ksp.png            |    Bin 1862 -> 2130 bytes
 docs/apiref/class_hierarchy_for_lgmap.png          |    Bin 2337 -> 2337 bytes
 docs/apiref/class_hierarchy_for_log.png            |    Bin 702 -> 699 bytes
 docs/apiref/class_hierarchy_for_logclass.png       |    Bin 1294 -> 1275 bytes
 docs/apiref/class_hierarchy_for_logevent.png       |    Bin 1211 -> 1194 bytes
 docs/apiref/class_hierarchy_for_logstage.png       |    Bin 1372 -> 1351 bytes
 docs/apiref/class_hierarchy_for_maptype.png        |    Bin 1241 -> 1368 bytes
 docs/apiref/class_hierarchy_for_mat.png            |    Bin 1708 -> 1944 bytes
 docs/apiref/class_hierarchy_for_mgtype.png         |    Bin 0 -> 1419 bytes
 docs/apiref/class_hierarchy_for_mode.png           |    Bin 945 -> 937 bytes
 docs/apiref/class_hierarchy_for_normschedu.png     |    Bin 1607 -> 1733 bytes
 docs/apiref/class_hierarchy_for_normtype.png       |    Bin 1347 -> 1347 bytes
 docs/apiref/class_hierarchy_for_normtype_2.png     |    Bin 1347 -> 1347 bytes
 docs/apiref/class_hierarchy_for_nullspace.png      |    Bin 2404 -> 2637 bytes
 docs/apiref/class_hierarchy_for_object.png         |    Bin 33366 -> 29622 bytes
 docs/apiref/class_hierarchy_for_option.png         |    Bin 1026 -> 1142 bytes
 docs/apiref/class_hierarchy_for_option_2.png       |    Bin 1026 -> 1142 bytes
 docs/apiref/class_hierarchy_for_options.png        |    Bin 1185 -> 1178 bytes
 docs/apiref/class_hierarchy_for_orderingty.png     |    Bin 1651 -> 1760 bytes
 docs/apiref/class_hierarchy_for_partitione.png     |    Bin 2419 -> 2404 bytes
 docs/apiref/class_hierarchy_for_partitione_2.png   |    Bin 1579 -> 1567 bytes
 docs/apiref/class_hierarchy_for_pc.png             |    Bin 1665 -> 1903 bytes
 docs/apiref/class_hierarchy_for_problemtyp.png     |    Bin 1445 -> 1459 bytes
 docs/apiref/class_hierarchy_for_random.png         |    Bin 2070 -> 2387 bytes
 docs/apiref/class_hierarchy_for_scatter.png        |    Bin 2369 -> 2377 bytes
 docs/apiref/class_hierarchy_for_scattermod.png     |    Bin 1763 -> 1764 bytes
 docs/apiref/class_hierarchy_for_schurfactt.png     |    Bin 1736 -> 1728 bytes
 docs/apiref/class_hierarchy_for_schurprety.png     |    Bin 1769 -> 1594 bytes
 docs/apiref/class_hierarchy_for_section.png        |    Bin 2143 -> 2420 bytes
 docs/apiref/class_hierarchy_for_sf.png             |    Bin 1622 -> 1882 bytes
 docs/apiref/class_hierarchy_for_side.png           |    Bin 988 -> 983 bytes
 docs/apiref/class_hierarchy_for_size.png           |    Bin 927 -> 927 bytes
 docs/apiref/class_hierarchy_for_snes.png           |    Bin 1789 -> 2050 bytes
 docs/apiref/class_hierarchy_for_sortype.png        |    Bin 1709 -> 1706 bytes
 docs/apiref/class_hierarchy_for_stenciltyp.png     |    Bin 1461 -> 1467 bytes
 docs/apiref/class_hierarchy_for_structure.png      |    Bin 1068 -> 1060 bytes
 docs/apiref/class_hierarchy_for_sys.png            |    Bin 919 -> 904 bytes
 docs/apiref/class_hierarchy_for_tao.png            |    Bin 1815 -> 2064 bytes
 docs/apiref/class_hierarchy_for_ts.png             |    Bin 1615 -> 1871 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_11.png        |    Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_12.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_vec.png            |    Bin 1780 -> 2051 bytes
 docs/apiref/class_hierarchy_for_viewer.png         |    Bin 3698 -> 3234 bytes
 docs/apiref/class_hierarchy_for_viewerhdf5.png     |    Bin 3561 -> 3209 bytes
 docs/apiref/help.html                              |      2 +-
 docs/apiref/identifier-index.html                  |   3452 +-
 docs/apiref/module-tree.html                       |      2 +-
 docs/apiref/petsc4py-module.html                   |      4 +-
 docs/apiref/petsc4py.PETSc-module.html             |     32 +-
 docs/apiref/petsc4py.PETSc.AO-class.html           |      6 +-
 docs/apiref/petsc4py.PETSc.AO.Type-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc.Comm-class.html         |      4 +-
 docs/apiref/petsc4py.PETSc.DM-class.html           |    277 +-
 .../petsc4py.PETSc.DM.BoundaryType-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc.DM.Type-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc.DMComposite-class.html  |     23 +-
 docs/apiref/petsc4py.PETSc.DMDA-class.html         |     93 +-
 .../petsc4py.PETSc.DMDA.ElementType-class.html     |      4 +-
 ...etsc4py.PETSc.DMDA.InterpolationType-class.html |      4 +-
 .../petsc4py.PETSc.DMDA.StencilType-class.html     |      4 +-
 docs/apiref/petsc4py.PETSc.DMPlex-class.html       |    293 +-
 docs/apiref/petsc4py.PETSc.DMShell-class.html      |     42 +-
 docs/apiref/petsc4py.PETSc.Error-class.html        |     12 +-
 docs/apiref/petsc4py.PETSc.IS-class.html           |      6 +-
 docs/apiref/petsc4py.PETSc.IS.Type-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc.InsertMode-class.html   |      4 +-
 docs/apiref/petsc4py.PETSc.KSP-class.html          |     44 +-
 .../petsc4py.PETSc.KSP.ConvergedReason-class.html  |      4 +-
 docs/apiref/petsc4py.PETSc.KSP.NormType-class.html |      4 +-
 docs/apiref/petsc4py.PETSc.KSP.Type-class.html     |     53 +-
 docs/apiref/petsc4py.PETSc.LGMap-class.html        |      6 +-
 .../apiref/petsc4py.PETSc.LGMap.MapType-class.html |      4 +-
 docs/apiref/petsc4py.PETSc.Log-class.html          |      6 +-
 docs/apiref/petsc4py.PETSc.LogClass-class.html     |      4 +-
 docs/apiref/petsc4py.PETSc.LogEvent-class.html     |     20 +-
 docs/apiref/petsc4py.PETSc.LogStage-class.html     |      4 +-
 docs/apiref/petsc4py.PETSc.Mat-class.html          |    208 +-
 .../petsc4py.PETSc.Mat.AssemblyType-class.html     |      4 +-
 .../petsc4py.PETSc.Mat.FactorShiftType-class.html  |      4 +-
 ...html => petsc4py.PETSc.Mat.InfoType-class.html} |     26 +-
 docs/apiref/petsc4py.PETSc.Mat.Option-class.html   |     17 +-
 .../petsc4py.PETSc.Mat.OrderingType-class.html     |     18 +-
 docs/apiref/petsc4py.PETSc.Mat.SORType-class.html  |     11 +-
 .../apiref/petsc4py.PETSc.Mat.Structure-class.html |      4 +-
 docs/apiref/petsc4py.PETSc.Mat.Type-class.html     |     32 +-
 docs/apiref/petsc4py.PETSc.NormType-class.html     |      4 +-
 docs/apiref/petsc4py.PETSc.NullSpace-class.html    |      6 +-
 docs/apiref/petsc4py.PETSc.Object-class.html       |     50 +-
 docs/apiref/petsc4py.PETSc.Options-class.html      |     69 +-
 docs/apiref/petsc4py.PETSc.PC-class.html           |    166 +-
 docs/apiref/petsc4py.PETSc.PC.ASMType-class.html   |      4 +-
 .../petsc4py.PETSc.PC.CompositeType-class.html     |      4 +-
 docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html  |      4 +-
 docs/apiref/petsc4py.PETSc.PC.GASMType-class.html  |      4 +-
 ...ss.html => petsc4py.PETSc.PC.MGType-class.html} |     26 +-
 .../petsc4py.PETSc.PC.SchurFactType-class.html     |      4 +-
 .../petsc4py.PETSc.PC.SchurPreType-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc.PC.Side-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc.PC.Type-class.html      |     11 +-
 docs/apiref/petsc4py.PETSc.Partitioner-class.html  |      6 +-
 .../petsc4py.PETSc.PartitionerType-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc.Random-class.html       |      6 +-
 docs/apiref/petsc4py.PETSc.Random.Type-class.html  |     11 +-
 docs/apiref/petsc4py.PETSc.SF-class.html           |      6 +-
 docs/apiref/petsc4py.PETSc.SF.Type-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc.SNES-class.html         |      6 +-
 .../petsc4py.PETSc.SNES.ConvergedReason-class.html |      4 +-
 .../petsc4py.PETSc.SNES.NormSchedule-class.html    |      4 +-
 docs/apiref/petsc4py.PETSc.SNES.Type-class.html    |      4 +-
 docs/apiref/petsc4py.PETSc.Scatter-class.html      |      6 +-
 docs/apiref/petsc4py.PETSc.ScatterMode-class.html  |      4 +-
 docs/apiref/petsc4py.PETSc.Section-class.html      |      6 +-
 docs/apiref/petsc4py.PETSc.Sys-class.html          |     38 +-
 docs/apiref/petsc4py.PETSc.TAO-class.html          |     91 +-
 docs/apiref/petsc4py.PETSc.TAO.Reason-class.html   |     16 +-
 docs/apiref/petsc4py.PETSc.TAO.Type-class.html     |      2 +-
 docs/apiref/petsc4py.PETSc.TS-class.html           |     80 +-
 .../petsc4py.PETSc.TS.ConvergedReason-class.html   |     18 +-
 .../petsc4py.PETSc.TS.EquationType-class.html      |      4 +-
 ...=> petsc4py.PETSc.TS.ExactFinalTime-class.html} |     27 +-
 .../petsc4py.PETSc.TS.ProblemType-class.html       |      4 +-
 docs/apiref/petsc4py.PETSc.TS.Type-class.html      |     32 +-
 docs/apiref/petsc4py.PETSc.Vec-class.html          |     31 +-
 docs/apiref/petsc4py.PETSc.Vec.Option-class.html   |      4 +-
 docs/apiref/petsc4py.PETSc.Vec.Type-class.html     |     31 +-
 docs/apiref/petsc4py.PETSc.Viewer-class.html       |     28 +-
 .../apiref/petsc4py.PETSc.Viewer.Format-class.html |     33 +-
 docs/apiref/petsc4py.PETSc.Viewer.Mode-class.html  |      4 +-
 docs/apiref/petsc4py.PETSc.Viewer.Size-class.html  |      4 +-
 docs/apiref/petsc4py.PETSc.Viewer.Type-class.html  |      4 +-
 docs/apiref/petsc4py.PETSc.ViewerHDF5-class.html   |     12 +-
 .../petsc4py.PETSc._DMComposite_access-class.html  |      4 +-
 .../petsc4py.PETSc._DMDA_Vec_array-class.html      |      4 +-
 docs/apiref/petsc4py.PETSc._IS_buffer-class.html   |      4 +-
 docs/apiref/petsc4py.PETSc._Mat_Stencil-class.html |      4 +-
 .../petsc4py.PETSc._Vec_LocalForm-class.html       |      4 +-
 docs/apiref/petsc4py.PETSc._Vec_buffer-class.html  |      4 +-
 docs/apiref/petsc4py.lib-module.html               |      2 +-
 docs/apiref/redirect.html                          |      2 +-
 docs/apiref/toc-everything.html                    |     10 +-
 docs/index.html                                    |     26 +-
 docs/index.rst                                     |     18 +-
 docs/petsc4py.1                                    |     61 +-
 docs/petsc4py.info                                 |    397 +-
 docs/petsc4py.pdf                                  |    Bin 96365 -> 98083 bytes
 docs/source/citing.rst                             |      7 +-
 docs/source/conf.py                                |      4 +-
 docs/source/index.rst                              |      4 +-
 docs/source/links.txt                              |      2 -
 docs/source/make.bat                               |    456 +-
 docs/source/overview.rst                           |     11 +-
 docs/usrman/.buildinfo                             |      4 +-
 docs/usrman/_sources/citing.txt                    |      7 +-
 docs/usrman/_sources/index.txt                     |      4 +-
 docs/usrman/_sources/overview.txt                  |     11 +-
 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                            |     25 +-
 docs/usrman/genindex.html                          |     19 +-
 docs/usrman/index.html                             |     30 +-
 docs/usrman/install.html                           |     66 +-
 docs/usrman/manual.html                            |     18 +-
 docs/usrman/objects.inv                            |    Bin 212 -> 252 bytes
 docs/usrman/overview.html                          |     33 +-
 docs/usrman/search.html                            |     20 +-
 docs/usrman/searchindex.js                         |      2 +-
 docs/usrman/tutorial.html                          |     18 +-
 petsc4py.egg-info/PKG-INFO                         |     11 +-
 petsc4py.egg-info/SOURCES.txt                      |     10 +-
 setup.cfg                                          |      1 -
 src/PETSc/CAPI.pyx                                 |     26 +
 src/PETSc/DM.pyx                                   |    100 +-
 src/PETSc/DMComposite.pyx                          |      6 +-
 src/PETSc/DMDA.pyx                                 |     40 +-
 src/PETSc/DMPlex.pyx                               |    135 +-
 src/PETSc/DMShell.pyx                              |     46 +-
 src/PETSc/IS.pyx                                   |      2 +
 src/PETSc/KSP.pyx                                  |     21 +
 src/PETSc/Log.pyx                                  |     16 +-
 src/PETSc/Mat.pyx                                  |    150 +-
 src/PETSc/Object.pyx                               |      1 +
 src/PETSc/Options.pyx                              |     60 +-
 src/PETSc/PC.pyx                                   |     56 +-
 src/PETSc/PETSc.pyx                                |      7 +-
 src/PETSc/Random.pyx                               |      7 +-
 src/PETSc/SF.pyx                                   |      2 +-
 src/PETSc/Section.pyx                              |      6 +-
 src/PETSc/Sys.pyx                                  |     26 +-
 src/PETSc/TAO.pyx                                  |    117 +-
 src/PETSc/TS.pyx                                   |     32 +-
 src/PETSc/Vec.pyx                                  |     62 +-
 src/PETSc/Viewer.pyx                               |     21 +-
 src/PETSc/petscdm.pxi                              |     25 +-
 src/PETSc/petscdmda.pxi                            |     16 +-
 src/PETSc/petscdmplex.pxi                          |     26 +-
 src/PETSc/petscdmshell.pxi                         |     30 +
 src/PETSc/petscksp.pxi                             |     50 +
 src/PETSc/petsclog.pxi                             |      2 +-
 src/PETSc/petscmat.pxi                             |     71 +-
 src/PETSc/petscopt.pxi                             |     73 +-
 src/PETSc/petscpc.pxi                              |     19 +
 src/PETSc/petscrand.pxi                            |      1 +
 src/PETSc/petscsec.pxi                             |      2 +-
 src/PETSc/petscsys.pxi                             |      1 +
 src/PETSc/petsctao.pxi                             |     23 +-
 src/PETSc/petscts.pxi                              |     10 +
 src/PETSc/petscvec.pxi                             |     20 +-
 src/PETSc/petscvwr.pxi                             |      1 +
 src/__init__.py                                    |      2 +-
 src/include/compat.h                               |      3 +
 src/include/compat/hypre.h                         |     33 +
 src/include/compat/mumps.h                         |     37 +
 src/include/compat/tao.h                           |     25 +
 src/include/custom.h                               |     20 +-
 src/include/petsc4py/petsc4py.PETSc.h              |      2 +
 src/include/petsc4py/petsc4py.PETSc_api.h          |    244 +-
 src/include/petsc4py/petsc4py.i                    |      4 +
 src/libpetsc4py/libpetsc4py.c                      |   9845 +-
 src/libpetsc4py/libpetsc4py.h                      |      2 +
 src/libpetsc4py/libpetsc4py.pyx                    |    148 +-
 src/petsc4py.PETSc.c                               | 117431 ++++++++++--------
 test/test_dmda.py                                  |      7 +
 test/test_dmplex.py                                |      9 +-
 test/test_mat_aij.py                               |     49 +
 test/test_ts.py                                    |      2 +
 test/test_ts_py.py                                 |      2 +
 288 files changed, 75594 insertions(+), 61676 deletions(-)

diff --git a/CHANGES.rst b/CHANGES.rst
index 9dcb782..720c1eb 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -6,6 +6,12 @@ CHANGES: PETSc for Python
 :Contact: dalcinl at gmail.com
 
 
+Release 3.7.0
+=============
+
+- Update to PETSc 3.7 release.
+
+
 Release 3.6.0
 =============
 
diff --git a/DESCRIPTION.rst b/DESCRIPTION.rst
index 7ace2b0..640e0d2 100644
--- a/DESCRIPTION.rst
+++ b/DESCRIPTION.rst
@@ -46,7 +46,8 @@ project.
   http://dx.doi.org/10.1016/j.advwatres.2011.04.013
 
 * S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
-  L. Dalcin, V. Eijkhout, W.D. Gropp, D. Kaushik, M.G. Knepley,
-  L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and H. Zhang,
-  *PETSc Users Manual*, ANL-95/11 - Revision 3.6, 2015.
+  L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+  M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+  H. Zhang, and H. Zhang,
+  *PETSc Users Manual*, ANL-95/11 - Revision 3.7, 2016.
   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
diff --git a/LICENSE.rst b/LICENSE.rst
index 79b7447..2a42c14 100644
--- a/LICENSE.rst
+++ b/LICENSE.rst
@@ -6,7 +6,7 @@ LICENSE: PETSc 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 3c194b3..ed8ef1e 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: petsc4py
-Version: 3.6.0
+Version: 3.7.0
 Summary: PETSc for Python
 Home-page: https://bitbucket.org/petsc/petsc4py/
 Author: Lisandro Dalcin
 Author-email: dalcinl at gmail.com
 License: BSD
-Download-URL: https://bitbucket.org/petsc/petsc4py/downloads/petsc4py-3.6.0.tar.gz
+Download-URL: https://bitbucket.org/petsc/petsc4py/downloads/petsc4py-3.7.0.tar.gz
 Description: PETSc for Python
         ================
         
@@ -55,9 +55,10 @@ Description: PETSc for Python
           http://dx.doi.org/10.1016/j.advwatres.2011.04.013
         
         * S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
-          L. Dalcin, V. Eijkhout, W.D. Gropp, D. Kaushik, M.G. Knepley,
-          L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and H. Zhang,
-          *PETSc Users Manual*, ANL-95/11 - Revision 3.6, 2015.
+          L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+          M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+          H. Zhang, and H. Zhang,
+          *PETSc Users Manual*, ANL-95/11 - Revision 3.7, 2016.
           http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
         
 Keywords: scientific computing,parallel computing,PETSc,MPI
diff --git a/README.rst b/README.rst
index 45bd3bb..423092d 100644
--- a/README.rst
+++ b/README.rst
@@ -17,7 +17,7 @@ Dependencies
 
 * A recent NumPy_ release.
 
-* To work with the in-development version, you need to install Cython_.
+* To work with the in-development version, you need Cython_.
 
 .. _PETSc:  http://www.mcs.anl.gov/petsc/
 .. _Python: http://www.python.org
diff --git a/conf/baseconf.py b/conf/baseconf.py
index 06cfd4a..9d396cf 100644
--- a/conf/baseconf.py
+++ b/conf/baseconf.py
@@ -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/demo/dmplex/distribute_field.py b/demo/dmplex/distribute_field.py
new file mode 100644
index 0000000..f954cef
--- /dev/null
+++ b/demo/dmplex/distribute_field.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Fri Dec 25 17:03:18 2015
+
+ at author: ale
+"""
+
+import sys,petsc4py
+petsc4py.init(sys.argv)
+from petsc4py import PETSc
+import numpy as np
+
+dim = 2
+if not PETSc.COMM_WORLD.rank:
+    coords = np.asarray([[0.0, 0.0],
+                         [0.5, 0.0],
+                         [1.0, 0.0],
+                         [0.0, 0.5],
+                         [0.5, 0.5],
+                         [1.0, 0.5],
+                         [0.0, 1.0],
+                         [0.5, 1.0],
+                         [1.0, 1.0]], dtype=float)
+    cells = np.asarray([[0,1,4,3],
+                        [1,2,5,4],
+                        [3,4,7,6],
+                        [4,5,8,7]], dtype=PETSc.IntType)
+else:
+    coords = np.zeros((0, 2), dtype=float)
+    cells = np.zeros((0, 4), dtype=PETSc.IntType)
+
+plex = PETSc.DMPlex().createFromCellList(dim, cells, coords, comm=PETSc.COMM_WORLD)
+
+pStart, pEnd = plex.getChart()
+plex.view()
+print "pStart, pEnd: ", pStart, pEnd  
+
+# Create section with 1 field with 1 DoF per vertex, edge amd cell
+numComp = 1
+# Start with an empty vector
+numDof = [0] * 3
+# Field defined on vertexes
+numDof[0] = 1
+# Field defined on edges
+numDof[1] = 1
+# Field defined on cells
+numDof[2] = 1
+
+origSect = plex.createSection(numComp, numDof)
+origSect.setFieldName(0, 'TestField')
+origSect.setUp()
+origSect.view()
+
+plex.setDefaultSection(origSect)
+origVec = plex.createGlobalVec()
+#origVec.view()
+
+if not PETSc.COMM_WORLD.rank:
+    origVec.setValues(range(pStart, pEnd), range(pStart, pEnd))
+    
+origVec.view()
+
+if PETSc.COMM_WORLD.size > 1:
+    sf = plex.distribute()
+    sf.view()        
+
+    newSect, newVec = plex.distributeField(sf, origSect, origVec)
+
+else:
+    newSect = origSect
+    newVec = origVec
+            
+newSect.view()
+newVec.view()
diff --git a/demo/perftest/driver.c b/demo/perftest/driver.c
index 41fc9b6..3ee5bc9 100644
--- a/demo/perftest/driver.c
+++ b/demo/perftest/driver.c
@@ -79,10 +79,11 @@ PetscErrorCode RunTest(int nx, int ny, int nz, int loops, double *wt)
   ierr = TSSetTimeStep(ts,0.01);CHKERRQ(ierr);
   ierr = TSSetTime(ts,0.0);CHKERRQ(ierr);
   ierr = TSSetDuration(ts,10,1.0);CHKERRQ(ierr);
+  ierr = TSSetExactFinalTime(ts,TS_EXACTFINALTIME_STEPOVER);CHKERRQ(ierr);
 
   ierr = TSSetSolution(ts,x);CHKERRQ(ierr);
   ierr = TSSetIFunction(ts,f,FormFunction,app);CHKERRQ(ierr);
-  ierr = PetscOptionsSetValue("-snes_mf","1");CHKERRQ(ierr);
+  ierr = PetscOptionsSetValue(NULL,"-snes_mf","1");CHKERRQ(ierr);
   {
     SNES snes;
     KSP  ksp;
@@ -97,11 +98,7 @@ PetscErrorCode RunTest(int nx, int ny, int nz, int loops, double *wt)
   while (loops-- > 0) {
     ierr = FormInitial(0.0,x,app);CHKERRQ(ierr);
     ierr = PetscTime(&t1);CHKERRQ(ierr);
-#if PETSC_VERSION_LE(3,3,0)
-    ierr = TSSolve(ts,x,PETSC_NULL);CHKERRQ(ierr);
-#else
     ierr = TSSolve(ts,x);CHKERRQ(ierr);
-#endif
     ierr = PetscTime(&t2);CHKERRQ(ierr);
     *wt = PetscMin(*wt,t2-t1);
   }
@@ -120,7 +117,7 @@ PetscErrorCode GetInt(const char* name, PetscInt *v, PetscInt defv)
   PetscErrorCode ierr;
   PetscFunctionBegin;
   *v = defv;
-  ierr = PetscOptionsGetInt(PETSC_NULL,name,v,PETSC_NULL);CHKERRQ(ierr);
+  ierr = PetscOptionsGetInt(NULL,NULL,name,v,NULL);CHKERRQ(ierr);
   PetscFunctionReturn(0);
 }
 
diff --git a/demo/perftest/driver.py b/demo/perftest/driver.py
index af9e296..babd78a 100644
--- a/demo/perftest/driver.py
+++ b/demo/perftest/driver.py
@@ -84,6 +84,8 @@ def run_test(nx,ny,nz,samples,plot=False):
     ts.setTime(0.0)
     ts.setMaxTime(1.0)
     ts.setMaxSteps(10)
+    eft = PETSc.TS.ExactFinalTime.STEPOVER
+    ts.setExactFinalTime(eft)
 
     x = PETSc.Vec().createSeq(nx*ny*nz)
     ts.setSolution(x)
diff --git a/docs/CHANGES.html b/docs/CHANGES.html
index 4274a6a..2cef845 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: PETSc 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 PETSc 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 ab8fc6e..146bd78 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: PETSc 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 2be863f..d20d7b6 100644
--- a/docs/apiref/api-objects.txt
+++ b/docs/apiref/api-objects.txt
@@ -107,15 +107,20 @@ petsc4py.PETSc.Comm.__le__	petsc4py.PETSc.Comm-class.html#__le__
 petsc4py.PETSc.Comm.__ge__	petsc4py.PETSc.Comm-class.html#__ge__
 petsc4py.PETSc.DM	petsc4py.PETSc.DM-class.html
 petsc4py.PETSc.DM.getLGMap	petsc4py.PETSc.DM-class.html#getLGMap
+petsc4py.PETSc.DM.getStratumIS	petsc4py.PETSc.DM-class.html#getStratumIS
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
-petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
+petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
-petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
+petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
+petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
 petsc4py.PETSc.DM.coarsen	petsc4py.PETSc.DM-class.html#coarsen
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
+petsc4py.PETSc.DM.getLabelValue	petsc4py.PETSc.DM-class.html#getLabelValue
+petsc4py.PETSc.DM.getStratumSize	petsc4py.PETSc.DM-class.html#getStratumSize
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
+petsc4py.PETSc.DM.getLabelIdIS	petsc4py.PETSc.DM-class.html#getLabelIdIS
 petsc4py.PETSc.DM.setOptionsPrefix	petsc4py.PETSc.DM-class.html#setOptionsPrefix
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.DM.createGlobalVector	petsc4py.PETSc.DM-class.html#createGlobalVector
@@ -123,6 +128,7 @@ petsc4py.PETSc.DM.getDefaultSF	petsc4py.PETSc.DM-class.html#getDefaultSF
 petsc4py.PETSc.DM.setFromOptions	petsc4py.PETSc.DM-class.html#setFromOptions
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.DM.setDimension	petsc4py.PETSc.DM-class.html#setDimension
+petsc4py.PETSc.DM.hasLabel	petsc4py.PETSc.DM-class.html#hasLabel
 petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.DM.setAppCtx	petsc4py.PETSc.DM-class.html#setAppCtx
@@ -131,29 +137,35 @@ petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.DM.view	petsc4py.PETSc.DM-class.html#view
 petsc4py.PETSc.DM.getDefaultSection	petsc4py.PETSc.DM-class.html#getDefaultSection
-petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
+petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 petsc4py.PETSc.DM.getBlockSize	petsc4py.PETSc.DM-class.html#getBlockSize
 petsc4py.PETSc.DM.refineHierarchy	petsc4py.PETSc.DM-class.html#refineHierarchy
 petsc4py.PETSc.DM.Type	petsc4py.PETSc.DM.Type-class.html
 petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.DM.getCoordinates	petsc4py.PETSc.DM-class.html#getCoordinates
 petsc4py.PETSc.DM.createInterpolation	petsc4py.PETSc.DM-class.html#createInterpolation
+petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.DM.setVecType	petsc4py.PETSc.DM-class.html#setVecType
 petsc4py.PETSc.DM.globalToLocal	petsc4py.PETSc.DM-class.html#globalToLocal
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
-petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
+petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
+petsc4py.PETSc.DM.getLabelName	petsc4py.PETSc.DM-class.html#getLabelName
 petsc4py.PETSc.DM.setUp	petsc4py.PETSc.DM-class.html#setUp
 petsc4py.PETSc.DM.getPointSF	petsc4py.PETSc.DM-class.html#getPointSF
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.DM.createLabel	petsc4py.PETSc.DM-class.html#createLabel
 petsc4py.PETSc.DM.getMatrix	petsc4py.PETSc.DM-class.html#getMatrix
 petsc4py.PETSc.DM.getDefaultGlobalSection	petsc4py.PETSc.DM-class.html#getDefaultGlobalSection
+petsc4py.PETSc.DM.clearLabelValue	petsc4py.PETSc.DM-class.html#clearLabelValue
 petsc4py.PETSc.DM.convert	petsc4py.PETSc.DM-class.html#convert
 petsc4py.PETSc.DM.setDefaultGlobalSection	petsc4py.PETSc.DM-class.html#setDefaultGlobalSection
 petsc4py.PETSc.DM.getCoordinatesLocal	petsc4py.PETSc.DM-class.html#getCoordinatesLocal
-petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
+petsc4py.PETSc.DM.getLabelOutput	petsc4py.PETSc.DM-class.html#getLabelOutput
+petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
+petsc4py.PETSc.DM.setLabelValue	petsc4py.PETSc.DM-class.html#setLabelValue
 petsc4py.PETSc.DM.setCoordinates	petsc4py.PETSc.DM-class.html#setCoordinates
 petsc4py.PETSc.DM.createAggregates	petsc4py.PETSc.DM-class.html#createAggregates
 petsc4py.PETSc.DM.createMat	petsc4py.PETSc.DM-class.html#createMat
@@ -164,6 +176,7 @@ petsc4py.PETSc.DM.setType	petsc4py.PETSc.DM-class.html#setType
 petsc4py.PETSc.DM.create	petsc4py.PETSc.DM-class.html#create
 petsc4py.PETSc.DM.BoundaryType	petsc4py.PETSc.DM.BoundaryType-class.html
 petsc4py.PETSc.DM.getCoordinateDM	petsc4py.PETSc.DM-class.html#getCoordinateDM
+petsc4py.PETSc.DM.getNumLabels	petsc4py.PETSc.DM-class.html#getNumLabels
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
 petsc4py.PETSc.DM.createInjection	petsc4py.PETSc.DM-class.html#createInjection
 petsc4py.PETSc.Object.getRefCount	petsc4py.PETSc.Object-class.html#getRefCount
@@ -182,6 +195,7 @@ petsc4py.PETSc.DM.refine	petsc4py.PETSc.DM-class.html#refine
 petsc4py.PETSc.DM.createLocalVec	petsc4py.PETSc.DM-class.html#createLocalVec
 petsc4py.PETSc.DM.localToLocal	petsc4py.PETSc.DM-class.html#localToLocal
 petsc4py.PETSc.DM.__new__	petsc4py.PETSc.DM-class.html#__new__
+petsc4py.PETSc.DM.getLabelSize	petsc4py.PETSc.DM-class.html#getLabelSize
 petsc4py.PETSc.DM.localToGlobal	petsc4py.PETSc.DM-class.html#localToGlobal
 petsc4py.PETSc.DM.coarsenHierarchy	petsc4py.PETSc.DM-class.html#coarsenHierarchy
 petsc4py.PETSc.DM.destroy	petsc4py.PETSc.DM-class.html#destroy
@@ -191,6 +205,7 @@ petsc4py.PETSc.DM.createDefaultSF	petsc4py.PETSc.DM-class.html#createDefaultSF
 petsc4py.PETSc.DM.setCoordinatesLocal	petsc4py.PETSc.DM-class.html#setCoordinatesLocal
 petsc4py.PETSc.DM.clone	petsc4py.PETSc.DM-class.html#clone
 petsc4py.PETSc.DM.setDefaultSection	petsc4py.PETSc.DM-class.html#setDefaultSection
+petsc4py.PETSc.DM.setLabelOutput	petsc4py.PETSc.DM-class.html#setLabelOutput
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
@@ -215,15 +230,20 @@ petsc4py.PETSc.DM.Type.MOAB	petsc4py.PETSc.DM.Type-class.html#MOAB
 petsc4py.PETSc.DM.Type.__qualname__	petsc4py.PETSc.DM.Type-class.html#__qualname__
 petsc4py.PETSc.DMComposite	petsc4py.PETSc.DMComposite-class.html
 petsc4py.PETSc.DM.getLGMap	petsc4py.PETSc.DM-class.html#getLGMap
+petsc4py.PETSc.DM.getStratumIS	petsc4py.PETSc.DM-class.html#getStratumIS
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
-petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
+petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
-petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
+petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
+petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
 petsc4py.PETSc.DM.coarsen	petsc4py.PETSc.DM-class.html#coarsen
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
+petsc4py.PETSc.DM.getLabelValue	petsc4py.PETSc.DM-class.html#getLabelValue
+petsc4py.PETSc.DM.getStratumSize	petsc4py.PETSc.DM-class.html#getStratumSize
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
+petsc4py.PETSc.DM.getLabelIdIS	petsc4py.PETSc.DM-class.html#getLabelIdIS
 petsc4py.PETSc.DM.setOptionsPrefix	petsc4py.PETSc.DM-class.html#setOptionsPrefix
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.DM.createGlobalVector	petsc4py.PETSc.DM-class.html#createGlobalVector
@@ -231,6 +251,7 @@ petsc4py.PETSc.DM.getDefaultSF	petsc4py.PETSc.DM-class.html#getDefaultSF
 petsc4py.PETSc.DM.setFromOptions	petsc4py.PETSc.DM-class.html#setFromOptions
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.DM.setDimension	petsc4py.PETSc.DM-class.html#setDimension
+petsc4py.PETSc.DM.hasLabel	petsc4py.PETSc.DM-class.html#hasLabel
 petsc4py.PETSc.DMComposite.getAccess	petsc4py.PETSc.DMComposite-class.html#getAccess
 petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
@@ -240,30 +261,36 @@ petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.DM.view	petsc4py.PETSc.DM-class.html#view
 petsc4py.PETSc.DM.getDefaultSection	petsc4py.PETSc.DM-class.html#getDefaultSection
-petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
+petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 petsc4py.PETSc.DM.getBlockSize	petsc4py.PETSc.DM-class.html#getBlockSize
 petsc4py.PETSc.DMComposite.getLGMaps	petsc4py.PETSc.DMComposite-class.html#getLGMaps
 petsc4py.PETSc.DM.Type	petsc4py.PETSc.DM.Type-class.html
 petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
 petsc4py.PETSc.DM.getCoordinates	petsc4py.PETSc.DM-class.html#getCoordinates
 petsc4py.PETSc.DM.createInterpolation	petsc4py.PETSc.DM-class.html#createInterpolation
+petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.DM.setVecType	petsc4py.PETSc.DM-class.html#setVecType
 petsc4py.PETSc.DM.globalToLocal	petsc4py.PETSc.DM-class.html#globalToLocal
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
-petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
+petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
+petsc4py.PETSc.DM.getLabelName	petsc4py.PETSc.DM-class.html#getLabelName
 petsc4py.PETSc.DM.setUp	petsc4py.PETSc.DM-class.html#setUp
 petsc4py.PETSc.DM.getPointSF	petsc4py.PETSc.DM-class.html#getPointSF
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
 petsc4py.PETSc.DMComposite.getLocalISs	petsc4py.PETSc.DMComposite-class.html#getLocalISs
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.DM.createLabel	petsc4py.PETSc.DM-class.html#createLabel
 petsc4py.PETSc.DM.getMatrix	petsc4py.PETSc.DM-class.html#getMatrix
 petsc4py.PETSc.DM.getDefaultGlobalSection	petsc4py.PETSc.DM-class.html#getDefaultGlobalSection
-petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.DM.clearLabelValue	petsc4py.PETSc.DM-class.html#clearLabelValue
 petsc4py.PETSc.DM.convert	petsc4py.PETSc.DM-class.html#convert
 petsc4py.PETSc.DM.setDefaultGlobalSection	petsc4py.PETSc.DM-class.html#setDefaultGlobalSection
 petsc4py.PETSc.DM.getCoordinatesLocal	petsc4py.PETSc.DM-class.html#getCoordinatesLocal
-petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
+petsc4py.PETSc.DM.getLabelOutput	petsc4py.PETSc.DM-class.html#getLabelOutput
+petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
+petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.DM.setLabelValue	petsc4py.PETSc.DM-class.html#setLabelValue
 petsc4py.PETSc.DM.setCoordinates	petsc4py.PETSc.DM-class.html#setCoordinates
 petsc4py.PETSc.DM.createAggregates	petsc4py.PETSc.DM-class.html#createAggregates
 petsc4py.PETSc.DM.createMat	petsc4py.PETSc.DM-class.html#createMat
@@ -274,6 +301,7 @@ petsc4py.PETSc.DM.setType	petsc4py.PETSc.DM-class.html#setType
 petsc4py.PETSc.DMComposite.create	petsc4py.PETSc.DMComposite-class.html#create
 petsc4py.PETSc.DM.BoundaryType	petsc4py.PETSc.DM.BoundaryType-class.html
 petsc4py.PETSc.DM.getCoordinateDM	petsc4py.PETSc.DM-class.html#getCoordinateDM
+petsc4py.PETSc.DM.getNumLabels	petsc4py.PETSc.DM-class.html#getNumLabels
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
 petsc4py.PETSc.DM.createInjection	petsc4py.PETSc.DM-class.html#createInjection
 petsc4py.PETSc.Object.getRefCount	petsc4py.PETSc.Object-class.html#getRefCount
@@ -298,6 +326,7 @@ petsc4py.PETSc.DMComposite.getNumberDM	petsc4py.PETSc.DMComposite-class.html#get
 petsc4py.PETSc.DM.refineHierarchy	petsc4py.PETSc.DM-class.html#refineHierarchy
 petsc4py.PETSc.DMComposite.__new__	petsc4py.PETSc.DMComposite-class.html#__new__
 petsc4py.PETSc.DMComposite.getNumber	petsc4py.PETSc.DMComposite-class.html#getNumber
+petsc4py.PETSc.DM.getLabelSize	petsc4py.PETSc.DM-class.html#getLabelSize
 petsc4py.PETSc.DM.localToGlobal	petsc4py.PETSc.DM-class.html#localToGlobal
 petsc4py.PETSc.DM.coarsenHierarchy	petsc4py.PETSc.DM-class.html#coarsenHierarchy
 petsc4py.PETSc.DM.destroy	petsc4py.PETSc.DM-class.html#destroy
@@ -309,6 +338,7 @@ petsc4py.PETSc.DM.clone	petsc4py.PETSc.DM-class.html#clone
 petsc4py.PETSc.DMComposite.addDM	petsc4py.PETSc.DMComposite-class.html#addDM
 petsc4py.PETSc.DM.localToLocal	petsc4py.PETSc.DM-class.html#localToLocal
 petsc4py.PETSc.DMComposite.getGlobalISs	petsc4py.PETSc.DMComposite-class.html#getGlobalISs
+petsc4py.PETSc.DM.setLabelOutput	petsc4py.PETSc.DM-class.html#setLabelOutput
 petsc4py.PETSc.DMComposite.gather	petsc4py.PETSc.DMComposite-class.html#gather
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
@@ -316,7 +346,8 @@ petsc4py.PETSc.DMDA	petsc4py.PETSc.DMDA-class.html
 petsc4py.PETSc.DM.getLGMap	petsc4py.PETSc.DM-class.html#getLGMap
 petsc4py.PETSc.DMDA.proc_sizes	petsc4py.PETSc.DMDA-class.html#proc_sizes
 petsc4py.PETSc.DMDA.StencilType	petsc4py.PETSc.DMDA.StencilType-class.html
-petsc4py.PETSc.DMDA.getElementType	petsc4py.PETSc.DMDA-class.html#getElementType
+petsc4py.PETSc.DM.getStratumIS	petsc4py.PETSc.DM-class.html#getStratumIS
+petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.DMDA.setRefinementFactor	petsc4py.PETSc.DMDA-class.html#setRefinementFactor
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
@@ -326,20 +357,28 @@ petsc4py.PETSc.DMDA.stencil_width	petsc4py.PETSc.DMDA-class.html#stencil_width
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
 petsc4py.PETSc.DMDA.getScatter	petsc4py.PETSc.DMDA-class.html#getScatter
+petsc4py.PETSc.DM.localToGlobal	petsc4py.PETSc.DM-class.html#localToGlobal
+petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
 petsc4py.PETSc.DM.coarsen	petsc4py.PETSc.DM-class.html#coarsen
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
+petsc4py.PETSc.DM.getLabelSize	petsc4py.PETSc.DM-class.html#getLabelSize
+petsc4py.PETSc.DM.getLabelValue	petsc4py.PETSc.DM-class.html#getLabelValue
+petsc4py.PETSc.DM.getStratumSize	petsc4py.PETSc.DM-class.html#getStratumSize
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
-petsc4py.PETSc.DM.localToGlobal	petsc4py.PETSc.DM-class.html#localToGlobal
+petsc4py.PETSc.DM.getLabelIdIS	petsc4py.PETSc.DM-class.html#getLabelIdIS
 petsc4py.PETSc.DM.setOptionsPrefix	petsc4py.PETSc.DM-class.html#setOptionsPrefix
 petsc4py.PETSc.DMDA.createNaturalVec	petsc4py.PETSc.DMDA-class.html#createNaturalVec
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.DMDA.setSizes	petsc4py.PETSc.DMDA-class.html#setSizes
 petsc4py.PETSc.DMDA.stencil_type	petsc4py.PETSc.DMDA-class.html#stencil_type
 petsc4py.PETSc.DM.getDefaultSF	petsc4py.PETSc.DM-class.html#getDefaultSF
+petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.DM.setFromOptions	petsc4py.PETSc.DM-class.html#setFromOptions
 petsc4py.PETSc.DM.destroy	petsc4py.PETSc.DM-class.html#destroy
 petsc4py.PETSc.DM.setDimension	petsc4py.PETSc.DM-class.html#setDimension
+petsc4py.PETSc.DM.hasLabel	petsc4py.PETSc.DM-class.html#hasLabel
 petsc4py.PETSc.DMDA.ElementType	petsc4py.PETSc.DMDA.ElementType-class.html
+petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.DMDA.setElementType	petsc4py.PETSc.DMDA-class.html#setElementType
 petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
 petsc4py.PETSc.DMDA.dim	petsc4py.PETSc.DMDA-class.html#dim
@@ -366,7 +405,7 @@ petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.DM.getCoordinates	petsc4py.PETSc.DM-class.html#getCoordinates
 petsc4py.PETSc.DM.createInterpolation	petsc4py.PETSc.DM-class.html#createInterpolation
 petsc4py.PETSc.DMDA.setUniformCoordinates	petsc4py.PETSc.DMDA-class.html#setUniformCoordinates
-petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
+petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.DM.setVecType	petsc4py.PETSc.DM-class.html#setVecType
 petsc4py.PETSc.DMDA.setBoundaryType	petsc4py.PETSc.DMDA-class.html#setBoundaryType
@@ -374,40 +413,46 @@ petsc4py.PETSc.DM.globalToLocal	petsc4py.PETSc.DM-class.html#globalToLocal
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
 petsc4py.PETSc.DMDA.getDof	petsc4py.PETSc.DMDA-class.html#getDof
+petsc4py.PETSc.DM.getLabelName	petsc4py.PETSc.DM-class.html#getLabelName
 petsc4py.PETSc.DM.setUp	petsc4py.PETSc.DM-class.html#setUp
 petsc4py.PETSc.DM.getPointSF	petsc4py.PETSc.DM-class.html#getPointSF
 petsc4py.PETSc.DMDA.ranges	petsc4py.PETSc.DMDA-class.html#ranges
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
 petsc4py.PETSc.DMDA.ghost_corners	petsc4py.PETSc.DMDA-class.html#ghost_corners
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.DM.createLabel	petsc4py.PETSc.DM-class.html#createLabel
 petsc4py.PETSc.DM.getMatrix	petsc4py.PETSc.DM-class.html#getMatrix
 petsc4py.PETSc.DM.getDefaultGlobalSection	petsc4py.PETSc.DM-class.html#getDefaultGlobalSection
-petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.DM.clearLabelValue	petsc4py.PETSc.DM-class.html#clearLabelValue
 petsc4py.PETSc.DM.convert	petsc4py.PETSc.DM-class.html#convert
 petsc4py.PETSc.DM.setDefaultGlobalSection	petsc4py.PETSc.DM-class.html#setDefaultGlobalSection
 petsc4py.PETSc.DM.getCoordinatesLocal	petsc4py.PETSc.DM-class.html#getCoordinatesLocal
-petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
-petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
+petsc4py.PETSc.DM.getLabelOutput	petsc4py.PETSc.DM-class.html#getLabelOutput
+petsc4py.PETSc.DMDA.setFieldName	petsc4py.PETSc.DMDA-class.html#setFieldName
 petsc4py.PETSc.DMDA.getBoundaryType	petsc4py.PETSc.DMDA-class.html#getBoundaryType
 petsc4py.PETSc.DMDA.getElements	petsc4py.PETSc.DMDA-class.html#getElements
 petsc4py.PETSc.DMDA.getProcSizes	petsc4py.PETSc.DMDA-class.html#getProcSizes
 petsc4py.PETSc.DMDA.setStencilType	petsc4py.PETSc.DMDA-class.html#setStencilType
+petsc4py.PETSc.DM.setLabelValue	petsc4py.PETSc.DM-class.html#setLabelValue
 petsc4py.PETSc.DMDA.ghost_ranges	petsc4py.PETSc.DMDA-class.html#ghost_ranges
 petsc4py.PETSc.DM.setCoordinates	petsc4py.PETSc.DM-class.html#setCoordinates
 petsc4py.PETSc.DM.createAggregates	petsc4py.PETSc.DM-class.html#createAggregates
 petsc4py.PETSc.DMDA.setStencil	petsc4py.PETSc.DMDA-class.html#setStencil
 petsc4py.PETSc.DM.createMat	petsc4py.PETSc.DM-class.html#createMat
 petsc4py.PETSc.DM.createLocalVector	petsc4py.PETSc.DM-class.html#createLocalVector
+petsc4py.PETSc.DMDA.setCoordinateName	petsc4py.PETSc.DMDA-class.html#setCoordinateName
 petsc4py.PETSc.DMDA.getStencil	petsc4py.PETSc.DMDA-class.html#getStencil
 petsc4py.PETSc.DM.getCoordinateSection	petsc4py.PETSc.DM-class.html#getCoordinateSection
 petsc4py.PETSc.DM.setMatType	petsc4py.PETSc.DM-class.html#setMatType
 petsc4py.PETSc.DM.setType	petsc4py.PETSc.DM-class.html#setType
 petsc4py.PETSc.DMDA.stencil	petsc4py.PETSc.DMDA-class.html#stencil
-petsc4py.PETSc.DMDA.create	petsc4py.PETSc.DMDA-class.html#create
+petsc4py.PETSc.DMDA.getElementType	petsc4py.PETSc.DMDA-class.html#getElementType
 petsc4py.PETSc.DMDA.setProcSizes	petsc4py.PETSc.DMDA-class.html#setProcSizes
 petsc4py.PETSc.DM.getCoordinateDM	petsc4py.PETSc.DM-class.html#getCoordinateDM
 petsc4py.PETSc.DMDA.duplicate	petsc4py.PETSc.DMDA-class.html#duplicate
+petsc4py.PETSc.DM.getNumLabels	petsc4py.PETSc.DM-class.html#getNumLabels
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
+petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
 petsc4py.PETSc.DM.createInjection	petsc4py.PETSc.DM-class.html#createInjection
 petsc4py.PETSc.Object.getRefCount	petsc4py.PETSc.Object-class.html#getRefCount
 petsc4py.PETSc.Object.incRef	petsc4py.PETSc.Object-class.html#incRef
@@ -419,6 +464,7 @@ petsc4py.PETSc.DM.getAppCtx	petsc4py.PETSc.DM-class.html#getAppCtx
 petsc4py.PETSc.DM.setPointSF	petsc4py.PETSc.DM-class.html#setPointSF
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
+petsc4py.PETSc.DMDA.getFieldName	petsc4py.PETSc.DMDA-class.html#getFieldName
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.DMDA.getDim	petsc4py.PETSc.DMDA-class.html#getDim
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
@@ -428,6 +474,7 @@ petsc4py.PETSc.DM.BoundaryType	petsc4py.PETSc.DM.BoundaryType-class.html
 petsc4py.PETSc.DM.refine	petsc4py.PETSc.DM-class.html#refine
 petsc4py.PETSc.DM.createLocalVec	petsc4py.PETSc.DM-class.html#createLocalVec
 petsc4py.PETSc.DMDA.getInterpolationType	petsc4py.PETSc.DMDA-class.html#getInterpolationType
+petsc4py.PETSc.DMDA.create	petsc4py.PETSc.DMDA-class.html#create
 petsc4py.PETSc.DM.localToLocal	petsc4py.PETSc.DM-class.html#localToLocal
 petsc4py.PETSc.DMDA.__new__	petsc4py.PETSc.DMDA-class.html#__new__
 petsc4py.PETSc.DMDA.getAO	petsc4py.PETSc.DMDA-class.html#getAO
@@ -449,10 +496,12 @@ petsc4py.PETSc.DMDA.getVecArray	petsc4py.PETSc.DMDA-class.html#getVecArray
 petsc4py.PETSc.DMDA.createNaturalVector	petsc4py.PETSc.DMDA-class.html#createNaturalVector
 petsc4py.PETSc.DMDA.setStencilWidth	petsc4py.PETSc.DMDA-class.html#setStencilWidth
 petsc4py.PETSc.DMDA.naturalToGlobal	petsc4py.PETSc.DMDA-class.html#naturalToGlobal
+petsc4py.PETSc.DM.setLabelOutput	petsc4py.PETSc.DM-class.html#setLabelOutput
 petsc4py.PETSc.DM.createGlobalVector	petsc4py.PETSc.DM-class.html#createGlobalVector
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.DMDA.dof	petsc4py.PETSc.DMDA-class.html#dof
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
+petsc4py.PETSc.DMDA.getCoordinateName	petsc4py.PETSc.DMDA-class.html#getCoordinateName
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.DMDA.getCorners	petsc4py.PETSc.DMDA-class.html#getCorners
 petsc4py.PETSc.DMDA.ElementType	petsc4py.PETSc.DMDA.ElementType-class.html
@@ -472,26 +521,27 @@ petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.DM.getLGMap	petsc4py.PETSc.DM-class.html#getLGMap
 petsc4py.PETSc.DMPlex.setSupportSize	petsc4py.PETSc.DMPlex-class.html#setSupportSize
 petsc4py.PETSc.DMPlex.setSupport	petsc4py.PETSc.DMPlex-class.html#setSupport
-petsc4py.PETSc.DMPlex.getStratumIS	petsc4py.PETSc.DMPlex-class.html#getStratumIS
+petsc4py.PETSc.DM.getStratumIS	petsc4py.PETSc.DM-class.html#getStratumIS
 petsc4py.PETSc.DMPlex.distribute	petsc4py.PETSc.DMPlex-class.html#distribute
 petsc4py.PETSc.DMPlex.createExodus	petsc4py.PETSc.DMPlex-class.html#createExodus
 petsc4py.PETSc.DMPlex.getChart	petsc4py.PETSc.DMPlex-class.html#getChart
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
-petsc4py.PETSc.DMPlex.clearLabelStratum	petsc4py.PETSc.DMPlex-class.html#clearLabelStratum
+petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
 petsc4py.PETSc.DMPlex.permute	petsc4py.PETSc.DMPlex-class.html#permute
+petsc4py.PETSc.DMPlex.createPointNumbering	petsc4py.PETSc.DMPlex-class.html#createPointNumbering
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.DMPlex.getSupport	petsc4py.PETSc.DMPlex-class.html#getSupport
-petsc4py.PETSc.DMPlex.removeLabel	petsc4py.PETSc.DMPlex-class.html#removeLabel
+petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
 petsc4py.PETSc.DMPlex.setConeOrientation	petsc4py.PETSc.DMPlex-class.html#setConeOrientation
 petsc4py.PETSc.DM.coarsen	petsc4py.PETSc.DM-class.html#coarsen
-petsc4py.PETSc.DMPlex.setLabelValue	petsc4py.PETSc.DMPlex-class.html#setLabelValue
+petsc4py.PETSc.DM.setLabelValue	petsc4py.PETSc.DM-class.html#setLabelValue
 petsc4py.PETSc.DMPlex.getDepthStratum	petsc4py.PETSc.DMPlex-class.html#getDepthStratum
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
-petsc4py.PETSc.DMPlex.getLabelValue	petsc4py.PETSc.DMPlex-class.html#getLabelValue
-petsc4py.PETSc.DMPlex.getStratumSize	petsc4py.PETSc.DMPlex-class.html#getStratumSize
+petsc4py.PETSc.DM.getLabelValue	petsc4py.PETSc.DM-class.html#getLabelValue
+petsc4py.PETSc.DM.getStratumSize	petsc4py.PETSc.DM-class.html#getStratumSize
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
-petsc4py.PETSc.DMPlex.getLabelIdIS	petsc4py.PETSc.DMPlex-class.html#getLabelIdIS
+petsc4py.PETSc.DM.getLabelIdIS	petsc4py.PETSc.DM-class.html#getLabelIdIS
 petsc4py.PETSc.DM.setOptionsPrefix	petsc4py.PETSc.DM-class.html#setOptionsPrefix
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.DM.createGlobalVector	petsc4py.PETSc.DM-class.html#createGlobalVector
@@ -500,7 +550,7 @@ petsc4py.PETSc.DMPlex.getRefinementUniform	petsc4py.PETSc.DMPlex-class.html#getR
 petsc4py.PETSc.DM.setFromOptions	petsc4py.PETSc.DM-class.html#setFromOptions
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.DM.setDimension	petsc4py.PETSc.DM-class.html#setDimension
-petsc4py.PETSc.DMPlex.hasLabel	petsc4py.PETSc.DMPlex-class.html#hasLabel
+petsc4py.PETSc.DM.hasLabel	petsc4py.PETSc.DM-class.html#hasLabel
 petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.DM.setAppCtx	petsc4py.PETSc.DM-class.html#setAppCtx
@@ -534,7 +584,7 @@ petsc4py.PETSc.DM.globalToLocal	petsc4py.PETSc.DM-class.html#globalToLocal
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
 petsc4py.PETSc.DMPlex.markBoundaryFaces	petsc4py.PETSc.DMPlex-class.html#markBoundaryFaces
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
-petsc4py.PETSc.DMPlex.getLabelName	petsc4py.PETSc.DMPlex-class.html#getLabelName
+petsc4py.PETSc.DM.getLabelName	petsc4py.PETSc.DM-class.html#getLabelName
 petsc4py.PETSc.DM.setUp	petsc4py.PETSc.DM-class.html#setUp
 petsc4py.PETSc.DM.getPointSF	petsc4py.PETSc.DM-class.html#getPointSF
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
@@ -545,11 +595,11 @@ petsc4py.PETSc.DMPlex.setTriangleOptions	petsc4py.PETSc.DMPlex-class.html#setTri
 petsc4py.PETSc.DMPlex.generate	petsc4py.PETSc.DMPlex-class.html#generate
 petsc4py.PETSc.DM.getMatrix	petsc4py.PETSc.DM-class.html#getMatrix
 petsc4py.PETSc.DM.getDefaultGlobalSection	petsc4py.PETSc.DM-class.html#getDefaultGlobalSection
-petsc4py.PETSc.DMPlex.clearLabelValue	petsc4py.PETSc.DMPlex-class.html#clearLabelValue
+petsc4py.PETSc.DM.clearLabelValue	petsc4py.PETSc.DM-class.html#clearLabelValue
 petsc4py.PETSc.DM.convert	petsc4py.PETSc.DM-class.html#convert
 petsc4py.PETSc.DM.setDefaultGlobalSection	petsc4py.PETSc.DM-class.html#setDefaultGlobalSection
 petsc4py.PETSc.DM.getCoordinatesLocal	petsc4py.PETSc.DM-class.html#getCoordinatesLocal
-petsc4py.PETSc.DMPlex.getLabelOutput	petsc4py.PETSc.DMPlex-class.html#getLabelOutput
+petsc4py.PETSc.DM.getLabelOutput	petsc4py.PETSc.DM-class.html#getLabelOutput
 petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.DMPlex.distributeOverlap	petsc4py.PETSc.DMPlex-class.html#distributeOverlap
 petsc4py.PETSc.DMPlex.insertCone	petsc4py.PETSc.DMPlex-class.html#insertCone
@@ -570,10 +620,10 @@ petsc4py.PETSc.DMPlex.getCellNumbering	petsc4py.PETSc.DMPlex-class.html#getCellN
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 petsc4py.PETSc.DMPlex.create	petsc4py.PETSc.DMPlex-class.html#create
 petsc4py.PETSc.DMPlex.computeCellGeometryFVM	petsc4py.PETSc.DMPlex-class.html#computeCellGeometryFVM
-petsc4py.PETSc.DMPlex.createLabel	petsc4py.PETSc.DMPlex-class.html#createLabel
+petsc4py.PETSc.DM.createLabel	petsc4py.PETSc.DM-class.html#createLabel
 petsc4py.PETSc.DM.getCoordinateDM	petsc4py.PETSc.DM-class.html#getCoordinateDM
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
-petsc4py.PETSc.DMPlex.getNumLabels	petsc4py.PETSc.DMPlex-class.html#getNumLabels
+petsc4py.PETSc.DM.getNumLabels	petsc4py.PETSc.DM-class.html#getNumLabels
 petsc4py.PETSc.DMPlex.createSection	petsc4py.PETSc.DMPlex-class.html#createSection
 petsc4py.PETSc.DMPlex.vecGetClosure	petsc4py.PETSc.DMPlex-class.html#vecGetClosure
 petsc4py.PETSc.Object.getRefCount	petsc4py.PETSc.Object-class.html#getRefCount
@@ -598,6 +648,7 @@ petsc4py.PETSc.DM.createInjection	petsc4py.PETSc.DM-class.html#createInjection
 petsc4py.PETSc.DMPlex.createCGNSFromFile	petsc4py.PETSc.DMPlex-class.html#createCGNSFromFile
 petsc4py.PETSc.DMPlex.createCohesiveSubmesh	petsc4py.PETSc.DMPlex-class.html#createCohesiveSubmesh
 petsc4py.PETSc.DMPlex.symmetrize	petsc4py.PETSc.DMPlex-class.html#symmetrize
+petsc4py.PETSc.DMPlex.distributeField	petsc4py.PETSc.DMPlex-class.html#distributeField
 petsc4py.PETSc.DMPlex.getPartitioner	petsc4py.PETSc.DMPlex-class.html#getPartitioner
 petsc4py.PETSc.DM.BoundaryType	petsc4py.PETSc.DM.BoundaryType-class.html
 petsc4py.PETSc.DM.refine	petsc4py.PETSc.DM-class.html#refine
@@ -605,7 +656,7 @@ petsc4py.PETSc.DM.createLocalVec	petsc4py.PETSc.DM-class.html#createLocalVec
 petsc4py.PETSc.DMPlex.setAdjacencyUseCone	petsc4py.PETSc.DMPlex-class.html#setAdjacencyUseCone
 petsc4py.PETSc.DM.localToLocal	petsc4py.PETSc.DM-class.html#localToLocal
 petsc4py.PETSc.DMPlex.__new__	petsc4py.PETSc.DMPlex-class.html#__new__
-petsc4py.PETSc.DMPlex.getLabelSize	petsc4py.PETSc.DMPlex-class.html#getLabelSize
+petsc4py.PETSc.DM.getLabelSize	petsc4py.PETSc.DM-class.html#getLabelSize
 petsc4py.PETSc.DM.localToGlobal	petsc4py.PETSc.DM-class.html#localToGlobal
 petsc4py.PETSc.DM.coarsenHierarchy	petsc4py.PETSc.DM-class.html#coarsenHierarchy
 petsc4py.PETSc.DM.destroy	petsc4py.PETSc.DM-class.html#destroy
@@ -618,7 +669,7 @@ petsc4py.PETSc.DM.setCoordinatesLocal	petsc4py.PETSc.DM-class.html#setCoordinate
 petsc4py.PETSc.DM.clone	petsc4py.PETSc.DM-class.html#clone
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
 petsc4py.PETSc.DM.setDefaultSection	petsc4py.PETSc.DM-class.html#setDefaultSection
-petsc4py.PETSc.DMPlex.setLabelOutput	petsc4py.PETSc.DMPlex-class.html#setLabelOutput
+petsc4py.PETSc.DM.setLabelOutput	petsc4py.PETSc.DM-class.html#setLabelOutput
 petsc4py.PETSc.DMPlex.createBoxMesh	petsc4py.PETSc.DMPlex-class.html#createBoxMesh
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
@@ -629,26 +680,33 @@ petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.DMPlex.setCone	petsc4py.PETSc.DMPlex-class.html#setCone
 petsc4py.PETSc.DMShell	petsc4py.PETSc.DMShell-class.html
 petsc4py.PETSc.DM.getLGMap	petsc4py.PETSc.DM-class.html#getLGMap
+petsc4py.PETSc.DM.getStratumIS	petsc4py.PETSc.DM-class.html#getStratumIS
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.DMShell.setGlobalToLocal	petsc4py.PETSc.DMShell-class.html#setGlobalToLocal
+petsc4py.PETSc.DMShell.setCreateSubDM	petsc4py.PETSc.DMShell-class.html#setCreateSubDM
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
-petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
-petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
+petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
+petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
 petsc4py.PETSc.DMShell.setCoarsen	petsc4py.PETSc.DMShell-class.html#setCoarsen
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
+petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
 petsc4py.PETSc.DM.coarsen	petsc4py.PETSc.DM-class.html#coarsen
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 petsc4py.PETSc.DMShell.setLocalVector	petsc4py.PETSc.DMShell-class.html#setLocalVector
+petsc4py.PETSc.DM.getLabelValue	petsc4py.PETSc.DM-class.html#getLabelValue
+petsc4py.PETSc.DM.getStratumSize	petsc4py.PETSc.DM-class.html#getStratumSize
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
+petsc4py.PETSc.DM.getLabelIdIS	petsc4py.PETSc.DM-class.html#getLabelIdIS
 petsc4py.PETSc.DM.setOptionsPrefix	petsc4py.PETSc.DM-class.html#setOptionsPrefix
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.DM.createGlobalVector	petsc4py.PETSc.DM-class.html#createGlobalVector
-petsc4py.PETSc.DM.getDefaultSF	petsc4py.PETSc.DM-class.html#getDefaultSF
+petsc4py.PETSc.DMShell.setCreateInterpolation	petsc4py.PETSc.DMShell-class.html#setCreateInterpolation
 petsc4py.PETSc.DM.setFromOptions	petsc4py.PETSc.DM-class.html#setFromOptions
 petsc4py.PETSc.DMShell.setGlobalToLocalVecScatter	petsc4py.PETSc.DMShell-class.html#setGlobalToLocalVecScatter
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.DM.setDimension	petsc4py.PETSc.DM-class.html#setDimension
+petsc4py.PETSc.DM.hasLabel	petsc4py.PETSc.DM-class.html#hasLabel
 petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.DM.setAppCtx	petsc4py.PETSc.DM-class.html#setAppCtx
@@ -659,34 +717,40 @@ petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.DMShell.setCreateInjection	petsc4py.PETSc.DMShell-class.html#setCreateInjection
 petsc4py.PETSc.DM.view	petsc4py.PETSc.DM-class.html#view
 petsc4py.PETSc.DM.getDefaultSection	petsc4py.PETSc.DM-class.html#getDefaultSection
-petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
+petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 petsc4py.PETSc.DMShell.setLocalToGlobal	petsc4py.PETSc.DMShell-class.html#setLocalToGlobal
+petsc4py.PETSc.DM.getDefaultSF	petsc4py.PETSc.DM-class.html#getDefaultSF
 petsc4py.PETSc.DM.getBlockSize	petsc4py.PETSc.DM-class.html#getBlockSize
 petsc4py.PETSc.DM.refineHierarchy	petsc4py.PETSc.DM-class.html#refineHierarchy
 petsc4py.PETSc.DM.Type	petsc4py.PETSc.DM.Type-class.html
-petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
+petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.DM.getCoordinates	petsc4py.PETSc.DM-class.html#getCoordinates
 petsc4py.PETSc.DM.createInterpolation	petsc4py.PETSc.DM-class.html#createInterpolation
+petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.DM.setVecType	petsc4py.PETSc.DM-class.html#setVecType
 petsc4py.PETSc.DMShell.setCreateGlobalVector	petsc4py.PETSc.DMShell-class.html#setCreateGlobalVector
 petsc4py.PETSc.DM.globalToLocal	petsc4py.PETSc.DM-class.html#globalToLocal
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
-petsc4py.PETSc.DMShell.setCreateInterpolation	petsc4py.PETSc.DMShell-class.html#setCreateInterpolation
-petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
+petsc4py.PETSc.DMShell.setCreateMatrix	petsc4py.PETSc.DMShell-class.html#setCreateMatrix
+petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
+petsc4py.PETSc.DM.getLabelName	petsc4py.PETSc.DM-class.html#getLabelName
 petsc4py.PETSc.DM.setUp	petsc4py.PETSc.DM-class.html#setUp
 petsc4py.PETSc.DM.getPointSF	petsc4py.PETSc.DM-class.html#getPointSF
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
-petsc4py.PETSc.DMShell.setLocalToGlobalVecScatter	petsc4py.PETSc.DMShell-class.html#setLocalToGlobalVecScatter
+petsc4py.PETSc.DM.createLabel	petsc4py.PETSc.DM-class.html#createLabel
 petsc4py.PETSc.DM.getMatrix	petsc4py.PETSc.DM-class.html#getMatrix
 petsc4py.PETSc.DM.getDefaultGlobalSection	petsc4py.PETSc.DM-class.html#getDefaultGlobalSection
+petsc4py.PETSc.DM.clearLabelValue	petsc4py.PETSc.DM-class.html#clearLabelValue
 petsc4py.PETSc.DM.convert	petsc4py.PETSc.DM-class.html#convert
 petsc4py.PETSc.DM.setDefaultGlobalSection	petsc4py.PETSc.DM-class.html#setDefaultGlobalSection
 petsc4py.PETSc.DM.getCoordinatesLocal	petsc4py.PETSc.DM-class.html#getCoordinatesLocal
+petsc4py.PETSc.DM.getLabelOutput	petsc4py.PETSc.DM-class.html#getLabelOutput
 petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.DMShell.setLocalToLocal	petsc4py.PETSc.DMShell-class.html#setLocalToLocal
+petsc4py.PETSc.DM.setLabelValue	petsc4py.PETSc.DM-class.html#setLabelValue
 petsc4py.PETSc.DMShell.setMatrix	petsc4py.PETSc.DMShell-class.html#setMatrix
 petsc4py.PETSc.DM.setCoordinates	petsc4py.PETSc.DM-class.html#setCoordinates
 petsc4py.PETSc.DM.createAggregates	petsc4py.PETSc.DM-class.html#createAggregates
@@ -697,13 +761,15 @@ petsc4py.PETSc.DM.setMatType	petsc4py.PETSc.DM-class.html#setMatType
 petsc4py.PETSc.DM.setType	petsc4py.PETSc.DM-class.html#setType
 petsc4py.PETSc.DMShell.create	petsc4py.PETSc.DMShell-class.html#create
 petsc4py.PETSc.DM.BoundaryType	petsc4py.PETSc.DM.BoundaryType-class.html
+petsc4py.PETSc.DMShell.setLocalToGlobalVecScatter	petsc4py.PETSc.DMShell-class.html#setLocalToGlobalVecScatter
 petsc4py.PETSc.DM.getCoordinateDM	petsc4py.PETSc.DM-class.html#getCoordinateDM
+petsc4py.PETSc.DM.getNumLabels	petsc4py.PETSc.DM-class.html#getNumLabels
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
 petsc4py.PETSc.DM.createInjection	petsc4py.PETSc.DM-class.html#createInjection
 petsc4py.PETSc.Object.getRefCount	petsc4py.PETSc.Object-class.html#getRefCount
 petsc4py.PETSc.Object.incRef	petsc4py.PETSc.Object-class.html#incRef
 petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
-petsc4py.PETSc.DMShell.setLocalToLocalVecScatter	petsc4py.PETSc.DMShell-class.html#setLocalToLocalVecScatter
+petsc4py.PETSc.DMShell.setCreateFieldDecomposition	petsc4py.PETSc.DMShell-class.html#setCreateFieldDecomposition
 petsc4py.PETSc.DM.getType	petsc4py.PETSc.DM-class.html#getType
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
 petsc4py.PETSc.DM.getAppCtx	petsc4py.PETSc.DM-class.html#getAppCtx
@@ -718,10 +784,11 @@ petsc4py.PETSc.DM.refine	petsc4py.PETSc.DM-class.html#refine
 petsc4py.PETSc.DM.createLocalVec	petsc4py.PETSc.DM-class.html#createLocalVec
 petsc4py.PETSc.DM.localToLocal	petsc4py.PETSc.DM-class.html#localToLocal
 petsc4py.PETSc.DMShell.__new__	petsc4py.PETSc.DMShell-class.html#__new__
+petsc4py.PETSc.DM.getLabelSize	petsc4py.PETSc.DM-class.html#getLabelSize
 petsc4py.PETSc.DM.localToGlobal	petsc4py.PETSc.DM-class.html#localToGlobal
 petsc4py.PETSc.DM.coarsenHierarchy	petsc4py.PETSc.DM-class.html#coarsenHierarchy
 petsc4py.PETSc.DM.destroy	petsc4py.PETSc.DM-class.html#destroy
-petsc4py.PETSc.DMShell.setCreateFieldDecomposition	petsc4py.PETSc.DMShell-class.html#setCreateFieldDecomposition
+petsc4py.PETSc.DMShell.setLocalToLocalVecScatter	petsc4py.PETSc.DMShell-class.html#setLocalToLocalVecScatter
 petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
 petsc4py.PETSc.DMShell.setGlobalVector	petsc4py.PETSc.DMShell-class.html#setGlobalVector
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
@@ -729,7 +796,7 @@ petsc4py.PETSc.DM.createDefaultSF	petsc4py.PETSc.DM-class.html#createDefaultSF
 petsc4py.PETSc.DM.setCoordinatesLocal	petsc4py.PETSc.DM-class.html#setCoordinatesLocal
 petsc4py.PETSc.DM.clone	petsc4py.PETSc.DM-class.html#clone
 petsc4py.PETSc.DM.setDefaultSection	petsc4py.PETSc.DM-class.html#setDefaultSection
-petsc4py.PETSc.DMShell.setCreateMatrix	petsc4py.PETSc.DMShell-class.html#setCreateMatrix
+petsc4py.PETSc.DM.setLabelOutput	petsc4py.PETSc.DM-class.html#setLabelOutput
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
@@ -912,6 +979,7 @@ petsc4py.PETSc.KSP.Type	petsc4py.PETSc.KSP.Type-class.html
 petsc4py.PETSc.KSP.setComputeEigenvalues	petsc4py.PETSc.KSP-class.html#setComputeEigenvalues
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
+petsc4py.PETSc.KSP.setComputeOperators	petsc4py.PETSc.KSP-class.html#setComputeOperators
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
 petsc4py.PETSc.KSP.setUp	petsc4py.PETSc.KSP-class.html#setUp
 petsc4py.PETSc.KSP.createPython	petsc4py.PETSc.KSP-class.html#createPython
@@ -919,6 +987,7 @@ petsc4py.PETSc.KSP.getDM	petsc4py.PETSc.KSP-class.html#getDM
 petsc4py.PETSc.KSP.getOptionsPrefix	petsc4py.PETSc.KSP-class.html#getOptionsPrefix
 petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.KSP.setComputeRHS	petsc4py.PETSc.KSP-class.html#setComputeRHS
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
 petsc4py.PETSc.KSP.buildSolution	petsc4py.PETSc.KSP-class.html#buildSolution
 petsc4py.PETSc.KSP.setResidualNorm	petsc4py.PETSc.KSP-class.html#setResidualNorm
@@ -927,7 +996,7 @@ petsc4py.PETSc.KSP.solveTranspose	petsc4py.PETSc.KSP-class.html#solveTranspose
 petsc4py.PETSc.KSP.getComputeEigenvalues	petsc4py.PETSc.KSP-class.html#getComputeEigenvalues
 petsc4py.PETSc.KSP.reason	petsc4py.PETSc.KSP-class.html#reason
 petsc4py.PETSc.KSP.setPCSide	petsc4py.PETSc.KSP-class.html#setPCSide
-petsc4py.PETSc.KSP.setIterationNumber	petsc4py.PETSc.KSP-class.html#setIterationNumber
+petsc4py.PETSc.KSP.buildResidual	petsc4py.PETSc.KSP-class.html#buildResidual
 petsc4py.PETSc.KSP.vec_rhs	petsc4py.PETSc.KSP-class.html#vec_rhs
 petsc4py.PETSc.KSP.getPythonContext	petsc4py.PETSc.KSP-class.html#getPythonContext
 petsc4py.PETSc.KSP.setType	petsc4py.PETSc.KSP-class.html#setType
@@ -973,7 +1042,7 @@ petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrea
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
 petsc4py.PETSc.KSP.getTolerances	petsc4py.PETSc.KSP-class.html#getTolerances
-petsc4py.PETSc.KSP.buildResidual	petsc4py.PETSc.KSP-class.html#buildResidual
+petsc4py.PETSc.KSP.setIterationNumber	petsc4py.PETSc.KSP-class.html#setIterationNumber
 petsc4py.PETSc.KSP.mat_pc	petsc4py.PETSc.KSP-class.html#mat_pc
 petsc4py.PETSc.KSP.setPythonType	petsc4py.PETSc.KSP-class.html#setPythonType
 petsc4py.PETSc.KSP.iterating	petsc4py.PETSc.KSP-class.html#iterating
@@ -1018,34 +1087,41 @@ petsc4py.PETSc.KSP.NormType.NORM_UNPRECONDITIONED	petsc4py.PETSc.KSP.NormType-cl
 petsc4py.PETSc.KSP.NormType.NORM_PRECONDITIONED	petsc4py.PETSc.KSP.NormType-class.html#NORM_PRECONDITIONED
 petsc4py.PETSc.KSP.NormType.__qualname__	petsc4py.PETSc.KSP.NormType-class.html#__qualname__
 petsc4py.PETSc.KSP.Type	petsc4py.PETSc.KSP.Type-class.html
+petsc4py.PETSc.KSP.Type.PIPEFGMRES	petsc4py.PETSc.KSP.Type-class.html#PIPEFGMRES
 petsc4py.PETSc.KSP.Type.TFQMR	petsc4py.PETSc.KSP.Type-class.html#TFQMR
 petsc4py.PETSc.KSP.Type.PYTHON	petsc4py.PETSc.KSP.Type-class.html#PYTHON
 petsc4py.PETSc.KSP.Type.PIPECR	petsc4py.PETSc.KSP.Type-class.html#PIPECR
 petsc4py.PETSc.KSP.Type.IBCGS	petsc4py.PETSc.KSP.Type-class.html#IBCGS
-petsc4py.PETSc.KSP.Type.FGMRES	petsc4py.PETSc.KSP.Type-class.html#FGMRES
+petsc4py.PETSc.KSP.Type.PIPECGRR	petsc4py.PETSc.KSP.Type-class.html#PIPECGRR
 petsc4py.PETSc.KSP.Type.STCG	petsc4py.PETSc.KSP.Type-class.html#STCG
 petsc4py.PETSc.KSP.Type.QCG	petsc4py.PETSc.KSP.Type-class.html#QCG
 petsc4py.PETSc.KSP.Type.PIPECG	petsc4py.PETSc.KSP.Type-class.html#PIPECG
 petsc4py.PETSc.KSP.Type.PGMRES	petsc4py.PETSc.KSP.Type-class.html#PGMRES
+petsc4py.PETSc.KSP.Type.CGLS	petsc4py.PETSc.KSP.Type-class.html#CGLS
 petsc4py.PETSc.KSP.Type.LGMRES	petsc4py.PETSc.KSP.Type-class.html#LGMRES
 petsc4py.PETSc.KSP.Type.FBCGS	petsc4py.PETSc.KSP.Type-class.html#FBCGS
 petsc4py.PETSc.KSP.Type.CGNE	petsc4py.PETSc.KSP.Type-class.html#CGNE
 petsc4py.PETSc.KSP.Type.MINRES	petsc4py.PETSc.KSP.Type-class.html#MINRES
-petsc4py.PETSc.KSP.Type.BICG	petsc4py.PETSc.KSP.Type-class.html#BICG
+petsc4py.PETSc.KSP.Type.FCG	petsc4py.PETSc.KSP.Type-class.html#FCG
 petsc4py.PETSc.KSP.Type.CGS	petsc4py.PETSc.KSP.Type-class.html#CGS
 petsc4py.PETSc.KSP.Type.DGMRES	petsc4py.PETSc.KSP.Type-class.html#DGMRES
-petsc4py.PETSc.KSP.Type.TCQMR	petsc4py.PETSc.KSP.Type-class.html#TCQMR
+petsc4py.PETSc.KSP.Type.CG	petsc4py.PETSc.KSP.Type-class.html#CG
 petsc4py.PETSc.KSP.Type.LSQR	petsc4py.PETSc.KSP.Type-class.html#LSQR
 petsc4py.PETSc.KSP.Type.GLTR	petsc4py.PETSc.KSP.Type-class.html#GLTR
-petsc4py.PETSc.KSP.Type.CG	petsc4py.PETSc.KSP.Type-class.html#CG
-petsc4py.PETSc.KSP.Type.FBCGSR	petsc4py.PETSc.KSP.Type-class.html#FBCGSR
+petsc4py.PETSc.KSP.Type.TCQMR	petsc4py.PETSc.KSP.Type-class.html#TCQMR
+petsc4py.PETSc.KSP.Type.BCGS	petsc4py.PETSc.KSP.Type-class.html#BCGS
+petsc4py.PETSc.KSP.Type.TSIRM	petsc4py.PETSc.KSP.Type-class.html#TSIRM
 petsc4py.PETSc.KSP.Type.GCR	petsc4py.PETSc.KSP.Type-class.html#GCR
+petsc4py.PETSc.KSP.Type.FGMRES	petsc4py.PETSc.KSP.Type-class.html#FGMRES
 petsc4py.PETSc.KSP.Type.GROPPCG	petsc4py.PETSc.KSP.Type-class.html#GROPPCG
 petsc4py.PETSc.KSP.Type.CR	petsc4py.PETSc.KSP.Type-class.html#CR
-petsc4py.PETSc.KSP.Type.BCGS	petsc4py.PETSc.KSP.Type-class.html#BCGS
+petsc4py.PETSc.KSP.Type.FBCGSR	petsc4py.PETSc.KSP.Type-class.html#FBCGSR
 petsc4py.PETSc.KSP.Type.CHEBYSHEV	petsc4py.PETSc.KSP.Type-class.html#CHEBYSHEV
 petsc4py.PETSc.KSP.Type.SYMMLQ	petsc4py.PETSc.KSP.Type-class.html#SYMMLQ
+petsc4py.PETSc.KSP.Type.PIPEGCR	petsc4py.PETSc.KSP.Type-class.html#PIPEGCR
+petsc4py.PETSc.KSP.Type.PIPEFCG	petsc4py.PETSc.KSP.Type-class.html#PIPEFCG
 petsc4py.PETSc.KSP.Type.BCGSL	petsc4py.PETSc.KSP.Type-class.html#BCGSL
+petsc4py.PETSc.KSP.Type.BICG	petsc4py.PETSc.KSP.Type-class.html#BICG
 petsc4py.PETSc.KSP.Type.__qualname__	petsc4py.PETSc.KSP.Type-class.html#__qualname__
 petsc4py.PETSc.KSP.Type.LCD	petsc4py.PETSc.KSP.Type-class.html#LCD
 petsc4py.PETSc.KSP.Type.PREONLY	petsc4py.PETSc.KSP.Type-class.html#PREONLY
@@ -1150,6 +1226,7 @@ petsc4py.PETSc.LogEvent	petsc4py.PETSc.LogEvent-class.html
 petsc4py.PETSc.LogEvent.__int__	petsc4py.PETSc.LogEvent-class.html#__int__
 petsc4py.PETSc.LogEvent.activate	petsc4py.PETSc.LogEvent-class.html#activate
 petsc4py.PETSc.LogEvent.getPerfInfo	petsc4py.PETSc.LogEvent-class.html#getPerfInfo
+petsc4py.PETSc.LogEvent.getActiveAll	petsc4py.PETSc.LogEvent-class.html#getActiveAll
 petsc4py.PETSc.LogEvent.active_all	petsc4py.PETSc.LogEvent-class.html#active_all
 petsc4py.PETSc.LogEvent.id	petsc4py.PETSc.LogEvent-class.html#id
 petsc4py.PETSc.LogEvent.end	petsc4py.PETSc.LogEvent-class.html#end
@@ -1158,10 +1235,10 @@ petsc4py.PETSc.LogEvent.deactivate	petsc4py.PETSc.LogEvent-class.html#deactivate
 petsc4py.PETSc.LogEvent.getName	petsc4py.PETSc.LogEvent-class.html#getName
 petsc4py.PETSc.LogEvent.__enter__	petsc4py.PETSc.LogEvent-class.html#__enter__
 petsc4py.PETSc.LogEvent.getActive	petsc4py.PETSc.LogEvent-class.html#getActive
-petsc4py.PETSc.LogEvent.setActiveAll	petsc4py.PETSc.LogEvent-class.html#setActiveAll
+petsc4py.PETSc.LogEvent.setActive	petsc4py.PETSc.LogEvent-class.html#setActive
 petsc4py.PETSc.LogEvent.begin	petsc4py.PETSc.LogEvent-class.html#begin
 petsc4py.PETSc.LogEvent.__exit__	petsc4py.PETSc.LogEvent-class.html#__exit__
-petsc4py.PETSc.LogEvent.setActive	petsc4py.PETSc.LogEvent-class.html#setActive
+petsc4py.PETSc.LogEvent.setActiveAll	petsc4py.PETSc.LogEvent-class.html#setActiveAll
 petsc4py.PETSc.LogEvent.active	petsc4py.PETSc.LogEvent-class.html#active
 petsc4py.PETSc.LogEvent.barrierEnd	petsc4py.PETSc.LogEvent-class.html#barrierEnd
 petsc4py.PETSc.LogEvent.barrierBegin	petsc4py.PETSc.LogEvent-class.html#barrierBegin
@@ -1217,6 +1294,7 @@ petsc4py.PETSc.Mat.isHermitianKnown	petsc4py.PETSc.Mat-class.html#isHermitianKno
 petsc4py.PETSc.Mat.setPythonContext	petsc4py.PETSc.Mat-class.html#setPythonContext
 petsc4py.PETSc.Mat.createSBAIJ	petsc4py.PETSc.Mat-class.html#createSBAIJ
 petsc4py.PETSc.Mat.__call__	petsc4py.PETSc.Mat-class.html#__call__
+petsc4py.PETSc.Mat.getMumpsRinfog	petsc4py.PETSc.Mat-class.html#getMumpsRinfog
 petsc4py.PETSc.Mat.norm	petsc4py.PETSc.Mat-class.html#norm
 petsc4py.PETSc.Mat.setValuesIJV	petsc4py.PETSc.Mat-class.html#setValuesIJV
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
@@ -1258,6 +1336,7 @@ petsc4py.PETSc.Mat.getValuesCSR	petsc4py.PETSc.Mat-class.html#getValuesCSR
 petsc4py.PETSc.Mat.view	petsc4py.PETSc.Mat-class.html#view
 petsc4py.PETSc.Mat.getOrdering	petsc4py.PETSc.Mat-class.html#getOrdering
 petsc4py.PETSc.Mat.setValuesBlockedLocalRCV	petsc4py.PETSc.Mat-class.html#setValuesBlockedLocalRCV
+petsc4py.PETSc.Mat.getMumpsInfo	petsc4py.PETSc.Mat-class.html#getMumpsInfo
 petsc4py.PETSc.Mat.createAIJ	petsc4py.PETSc.Mat-class.html#createAIJ
 petsc4py.PETSc.Mat.__truediv__	petsc4py.PETSc.Mat-class.html#__truediv__
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
@@ -1272,6 +1351,7 @@ petsc4py.PETSc.Mat.createVecRight	petsc4py.PETSc.Mat-class.html#createVecRight
 petsc4py.PETSc.Mat.zeroRowsLocal	petsc4py.PETSc.Mat-class.html#zeroRowsLocal
 petsc4py.PETSc.Mat.symmetric	petsc4py.PETSc.Mat-class.html#symmetric
 petsc4py.PETSc.Mat.assemblyEnd	petsc4py.PETSc.Mat-class.html#assemblyEnd
+petsc4py.PETSc.Mat.getSubMatrices	petsc4py.PETSc.Mat-class.html#getSubMatrices
 petsc4py.PETSc.Mat.getSubMatrix	petsc4py.PETSc.Mat-class.html#getSubMatrix
 petsc4py.PETSc.Mat.isTranspose	petsc4py.PETSc.Mat-class.html#isTranspose
 petsc4py.PETSc.Mat.createVecs	petsc4py.PETSc.Mat-class.html#createVecs
@@ -1288,7 +1368,7 @@ petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Mat.createPython	petsc4py.PETSc.Mat-class.html#createPython
 petsc4py.PETSc.Mat.getDenseArray	petsc4py.PETSc.Mat-class.html#getDenseArray
 petsc4py.PETSc.Mat.__setitem__	petsc4py.PETSc.Mat-class.html#__setitem__
-petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Mat.setMumpsCntl	petsc4py.PETSc.Mat-class.html#setMumpsCntl
 petsc4py.PETSc.Mat.createLRC	petsc4py.PETSc.Mat-class.html#createLRC
 petsc4py.PETSc.Mat.assemblyBegin	petsc4py.PETSc.Mat-class.html#assemblyBegin
 petsc4py.PETSc.Mat.setValuesBlocked	petsc4py.PETSc.Mat-class.html#setValuesBlocked
@@ -1296,6 +1376,7 @@ petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
 petsc4py.PETSc.Mat.assemble	petsc4py.PETSc.Mat-class.html#assemble
 petsc4py.PETSc.Mat.factorILU	petsc4py.PETSc.Mat-class.html#factorILU
 petsc4py.PETSc.Mat.owner_range	petsc4py.PETSc.Mat-class.html#owner_range
+petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.Mat.convert	petsc4py.PETSc.Mat-class.html#convert
 petsc4py.PETSc.Mat.solveTranspose	petsc4py.PETSc.Mat-class.html#solveTranspose
 petsc4py.PETSc.Mat.__imul__	petsc4py.PETSc.Mat-class.html#__imul__
@@ -1326,6 +1407,7 @@ petsc4py.PETSc.Mat.hermitian	petsc4py.PETSc.Mat-class.html#hermitian
 petsc4py.PETSc.Mat.__rsub__	petsc4py.PETSc.Mat-class.html#__rsub__
 petsc4py.PETSc.Mat.setValuesRCV	petsc4py.PETSc.Mat-class.html#setValuesRCV
 petsc4py.PETSc.Mat.block_size	petsc4py.PETSc.Mat-class.html#block_size
+petsc4py.PETSc.Mat.getValues	petsc4py.PETSc.Mat-class.html#getValues
 petsc4py.PETSc.Mat.isSymmetricKnown	petsc4py.PETSc.Mat-class.html#isSymmetricKnown
 petsc4py.PETSc.Mat.size	petsc4py.PETSc.Mat-class.html#size
 petsc4py.PETSc.Mat.invertBlockDiagonal	petsc4py.PETSc.Mat-class.html#invertBlockDiagonal
@@ -1339,11 +1421,13 @@ petsc4py.PETSc.Mat.matMultSymbolic	petsc4py.PETSc.Mat-class.html#matMultSymbolic
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 petsc4py.PETSc.Mat.mult	petsc4py.PETSc.Mat-class.html#mult
 petsc4py.PETSc.Mat.factorSymbolicILU	petsc4py.PETSc.Mat-class.html#factorSymbolicILU
+petsc4py.PETSc.Mat.getMumpsCntl	petsc4py.PETSc.Mat-class.html#getMumpsCntl
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
 petsc4py.PETSc.Mat.__itruediv__	petsc4py.PETSc.Mat-class.html#__itruediv__
 petsc4py.PETSc.Mat.__isub__	petsc4py.PETSc.Mat-class.html#__isub__
 petsc4py.PETSc.Mat.multTranspose	petsc4py.PETSc.Mat-class.html#multTranspose
 petsc4py.PETSc.Object.getRefCount	petsc4py.PETSc.Object-class.html#getRefCount
+petsc4py.PETSc.Mat.setLGMap	petsc4py.PETSc.Mat-class.html#setLGMap
 petsc4py.PETSc.Object.incRef	petsc4py.PETSc.Object-class.html#incRef
 petsc4py.PETSc.Mat.aypx	petsc4py.PETSc.Mat-class.html#aypx
 petsc4py.PETSc.Mat.setValueBlockedStencil	petsc4py.PETSc.Mat-class.html#setValueBlockedStencil
@@ -1356,8 +1440,10 @@ petsc4py.PETSc.Mat.setValuesLocalIJV	petsc4py.PETSc.Mat-class.html#setValuesLoca
 petsc4py.PETSc.Mat.setValues	petsc4py.PETSc.Mat-class.html#setValues
 petsc4py.PETSc.Mat.setValuesLocalRCV	petsc4py.PETSc.Mat-class.html#setValuesLocalRCV
 petsc4py.PETSc.Mat.increaseOverlap	petsc4py.PETSc.Mat-class.html#increaseOverlap
-petsc4py.PETSc.Mat.setLGMap	petsc4py.PETSc.Mat-class.html#setLGMap
+petsc4py.PETSc.Mat.getMumpsIcntl	petsc4py.PETSc.Mat-class.html#getMumpsIcntl
 petsc4py.PETSc.Mat.getDenseLocalMatrix	petsc4py.PETSc.Mat-class.html#getDenseLocalMatrix
+petsc4py.PETSc.Mat.setMumpsIcntl	petsc4py.PETSc.Mat-class.html#setMumpsIcntl
+petsc4py.PETSc.Mat.getInfo	petsc4py.PETSc.Mat-class.html#getInfo
 petsc4py.PETSc.Mat.getDiagonal	petsc4py.PETSc.Mat-class.html#getDiagonal
 petsc4py.PETSc.Mat.factorSymbolicCholesky	petsc4py.PETSc.Mat-class.html#factorSymbolicCholesky
 petsc4py.PETSc.Mat.getVecs	petsc4py.PETSc.Mat-class.html#getVecs
@@ -1369,6 +1455,7 @@ petsc4py.PETSc.Mat.transposeMatMult	petsc4py.PETSc.Mat-class.html#transposeMatMu
 petsc4py.PETSc.Mat.getRowSum	petsc4py.PETSc.Mat-class.html#getRowSum
 petsc4py.PETSc.Mat.__sub__	petsc4py.PETSc.Mat-class.html#__sub__
 petsc4py.PETSc.Mat.structsymm	petsc4py.PETSc.Mat-class.html#structsymm
+petsc4py.PETSc.Mat.getRedundantMatrix	petsc4py.PETSc.Mat-class.html#getRedundantMatrix
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.Mat.__rtruediv__	petsc4py.PETSc.Mat-class.html#__rtruediv__
@@ -1396,7 +1483,8 @@ petsc4py.PETSc.Mat.Structure	petsc4py.PETSc.Mat.Structure-class.html
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.Mat.factorLU	petsc4py.PETSc.Mat-class.html#factorLU
 petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
-petsc4py.PETSc.Mat.getValues	petsc4py.PETSc.Mat-class.html#getValues
+petsc4py.PETSc.Mat.getMumpsRinfo	petsc4py.PETSc.Mat-class.html#getMumpsRinfo
+petsc4py.PETSc.Mat.InfoType	petsc4py.PETSc.Mat.InfoType-class.html
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
 petsc4py.PETSc.Mat.__idiv__	petsc4py.PETSc.Mat-class.html#__idiv__
@@ -1408,6 +1496,7 @@ petsc4py.PETSc.Mat.getSizes	petsc4py.PETSc.Mat-class.html#getSizes
 petsc4py.PETSc.Mat.__new__	petsc4py.PETSc.Mat-class.html#__new__
 petsc4py.PETSc.Mat.setPythonType	petsc4py.PETSc.Mat-class.html#setPythonType
 petsc4py.PETSc.Mat.__radd__	petsc4py.PETSc.Mat-class.html#__radd__
+petsc4py.PETSc.Mat.getMumpsInfog	petsc4py.PETSc.Mat-class.html#getMumpsInfog
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Mat.storeValues	petsc4py.PETSc.Mat-class.html#storeValues
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
@@ -1435,6 +1524,11 @@ petsc4py.PETSc.Mat.FactorShiftType.__qualname__	petsc4py.PETSc.Mat.FactorShiftTy
 petsc4py.PETSc.Mat.FactorShiftType.NZ	petsc4py.PETSc.Mat.FactorShiftType-class.html#NZ
 petsc4py.PETSc.Mat.FactorShiftType.PD	petsc4py.PETSc.Mat.FactorShiftType-class.html#PD
 petsc4py.PETSc.Mat.FactorShiftType.INBLOCKS	petsc4py.PETSc.Mat.FactorShiftType-class.html#INBLOCKS
+petsc4py.PETSc.Mat.InfoType	petsc4py.PETSc.Mat.InfoType-class.html
+petsc4py.PETSc.Mat.InfoType.GLOBAL_SUM	petsc4py.PETSc.Mat.InfoType-class.html#GLOBAL_SUM
+petsc4py.PETSc.Mat.InfoType.__qualname__	petsc4py.PETSc.Mat.InfoType-class.html#__qualname__
+petsc4py.PETSc.Mat.InfoType.GLOBAL_MAX	petsc4py.PETSc.Mat.InfoType-class.html#GLOBAL_MAX
+petsc4py.PETSc.Mat.InfoType.LOCAL	petsc4py.PETSc.Mat.InfoType-class.html#LOCAL
 petsc4py.PETSc.Mat.Option	petsc4py.PETSc.Mat.Option-class.html
 petsc4py.PETSc.Mat.Option.IGNORE_OFF_PROC_ENTRIES	petsc4py.PETSc.Mat.Option-class.html#IGNORE_OFF_PROC_ENTRIES
 petsc4py.PETSc.Mat.Option.IGNORE_ZERO_ENTRIES	petsc4py.PETSc.Mat.Option-class.html#IGNORE_ZERO_ENTRIES
@@ -1448,8 +1542,9 @@ petsc4py.PETSc.Mat.Option.STRUCTURALLY_SYMMETRIC	petsc4py.PETSc.Mat.Option-class
 petsc4py.PETSc.Mat.Option.KEEP_NONZERO_PATTERN	petsc4py.PETSc.Mat.Option-class.html#KEEP_NONZERO_PATTERN
 petsc4py.PETSc.Mat.Option.USE_INODES	petsc4py.PETSc.Mat.Option-class.html#USE_INODES
 petsc4py.PETSc.Mat.Option.SYMMETRY_ETERNAL	petsc4py.PETSc.Mat.Option-class.html#SYMMETRY_ETERNAL
-petsc4py.PETSc.Mat.Option.NO_OFF_PROC_ZERO_ROWS	petsc4py.PETSc.Mat.Option-class.html#NO_OFF_PROC_ZERO_ROWS
+petsc4py.PETSc.Mat.Option.NEW_NONZERO_LOCATIONS	petsc4py.PETSc.Mat.Option-class.html#NEW_NONZERO_LOCATIONS
 petsc4py.PETSc.Mat.Option.ERROR_LOWER_TRIANGULAR	petsc4py.PETSc.Mat.Option-class.html#ERROR_LOWER_TRIANGULAR
+petsc4py.PETSc.Mat.Option.SUBSET_OFF_PROC_ENTRIES	petsc4py.PETSc.Mat.Option-class.html#SUBSET_OFF_PROC_ENTRIES
 petsc4py.PETSc.Mat.Option.IGNORE_LOWER_TRIANGULAR	petsc4py.PETSc.Mat.Option-class.html#IGNORE_LOWER_TRIANGULAR
 petsc4py.PETSc.Mat.Option.NO_OFF_PROC_ENTRIES	petsc4py.PETSc.Mat.Option-class.html#NO_OFF_PROC_ENTRIES
 petsc4py.PETSc.Mat.Option.UNUSED_NONZERO_LOCATION_ERR	petsc4py.PETSc.Mat.Option-class.html#UNUSED_NONZERO_LOCATION_ERR
@@ -1457,9 +1552,11 @@ petsc4py.PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR	petsc4py.PETSc.Mat.Option-c
 petsc4py.PETSc.Mat.Option.__qualname__	petsc4py.PETSc.Mat.Option-class.html#__qualname__
 petsc4py.PETSc.Mat.Option.HERMITIAN	petsc4py.PETSc.Mat.Option-class.html#HERMITIAN
 petsc4py.PETSc.Mat.Option.GETROW_UPPERTRIANGULAR	petsc4py.PETSc.Mat.Option-class.html#GETROW_UPPERTRIANGULAR
-petsc4py.PETSc.Mat.Option.NEW_NONZERO_LOCATIONS	petsc4py.PETSc.Mat.Option-class.html#NEW_NONZERO_LOCATIONS
+petsc4py.PETSc.Mat.Option.NO_OFF_PROC_ZERO_ROWS	petsc4py.PETSc.Mat.Option-class.html#NO_OFF_PROC_ZERO_ROWS
 petsc4py.PETSc.Mat.OrderingType	petsc4py.PETSc.Mat.OrderingType-class.html
 petsc4py.PETSc.Mat.OrderingType.RCM	petsc4py.PETSc.Mat.OrderingType-class.html#RCM
+petsc4py.PETSc.Mat.OrderingType.WBM	petsc4py.PETSc.Mat.OrderingType-class.html#WBM
+petsc4py.PETSc.Mat.OrderingType.SPECTRAL	petsc4py.PETSc.Mat.OrderingType-class.html#SPECTRAL
 petsc4py.PETSc.Mat.OrderingType.OWD	petsc4py.PETSc.Mat.OrderingType-class.html#OWD
 petsc4py.PETSc.Mat.OrderingType.ND	petsc4py.PETSc.Mat.OrderingType-class.html#ND
 petsc4py.PETSc.Mat.OrderingType.AMD	petsc4py.PETSc.Mat.OrderingType-class.html#AMD
@@ -1473,6 +1570,7 @@ petsc4py.PETSc.Mat.SORType.ZERO_INITIAL_GUESS	petsc4py.PETSc.Mat.SORType-class.h
 petsc4py.PETSc.Mat.SORType.EISENSTAT	petsc4py.PETSc.Mat.SORType-class.html#EISENSTAT
 petsc4py.PETSc.Mat.SORType.SYMMETRY_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#SYMMETRY_SWEEP
 petsc4py.PETSc.Mat.SORType.APPLY_UPPER	petsc4py.PETSc.Mat.SORType-class.html#APPLY_UPPER
+petsc4py.PETSc.Mat.SORType.LOCAL_SYMMETRIC_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#LOCAL_SYMMETRIC_SWEEP
 petsc4py.PETSc.Mat.SORType.LOCAL_FORWARD_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#LOCAL_FORWARD_SWEEP
 petsc4py.PETSc.Mat.SORType.FORWARD_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#FORWARD_SWEEP
 petsc4py.PETSc.Mat.SORType.BACKWARD_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#BACKWARD_SWEEP
@@ -1498,7 +1596,6 @@ petsc4py.PETSc.Mat.Type.NORMAL	petsc4py.PETSc.Mat.Type-class.html#NORMAL
 petsc4py.PETSc.Mat.Type.PYTHON	petsc4py.PETSc.Mat.Type-class.html#PYTHON
 petsc4py.PETSc.Mat.Type.NEST	petsc4py.PETSc.Mat.Type-class.html#NEST
 petsc4py.PETSc.Mat.Type.SEQAIJCUSP	petsc4py.PETSc.Mat.Type-class.html#SEQAIJCUSP
-petsc4py.PETSc.Mat.Type.AIJPTHREAD	petsc4py.PETSc.Mat.Type-class.html#AIJPTHREAD
 petsc4py.PETSc.Mat.Type.TRANSPOSEMAT	petsc4py.PETSc.Mat.Type-class.html#TRANSPOSEMAT
 petsc4py.PETSc.Mat.Type.SCHURCOMPLEMENT	petsc4py.PETSc.Mat.Type-class.html#SCHURCOMPLEMENT
 petsc4py.PETSc.Mat.Type.AIJCUSPARSE	petsc4py.PETSc.Mat.Type-class.html#AIJCUSPARSE
@@ -1536,7 +1633,7 @@ petsc4py.PETSc.Mat.Type.AIJCUSP	petsc4py.PETSc.Mat.Type-class.html#AIJCUSP
 petsc4py.PETSc.Mat.Type.SEQCUFFT	petsc4py.PETSc.Mat.Type-class.html#SEQCUFFT
 petsc4py.PETSc.Mat.Type.MPIAIJPERM	petsc4py.PETSc.Mat.Type-class.html#MPIAIJPERM
 petsc4py.PETSc.Mat.Type.LOCALREF	petsc4py.PETSc.Mat.Type-class.html#LOCALREF
-petsc4py.PETSc.Mat.Type.SEQAIJPTHREAD	petsc4py.PETSc.Mat.Type-class.html#SEQAIJPTHREAD
+petsc4py.PETSc.Mat.Type.MPIAIJCRL	petsc4py.PETSc.Mat.Type-class.html#MPIAIJCRL
 petsc4py.PETSc.Mat.Type.MPIAIJ	petsc4py.PETSc.Mat.Type-class.html#MPIAIJ
 petsc4py.PETSc.Mat.Type.LRC	petsc4py.PETSc.Mat.Type-class.html#LRC
 petsc4py.PETSc.Mat.Type.BLOCKMAT	petsc4py.PETSc.Mat.Type-class.html#BLOCKMAT
@@ -1550,7 +1647,8 @@ petsc4py.PETSc.Mat.Type.__qualname__	petsc4py.PETSc.Mat.Type-class.html#__qualna
 petsc4py.PETSc.Mat.Type.SEQDENSE	petsc4py.PETSc.Mat.Type-class.html#SEQDENSE
 petsc4py.PETSc.Mat.Type.MPIDENSE	petsc4py.PETSc.Mat.Type-class.html#MPIDENSE
 petsc4py.PETSc.Mat.Type.SEQMAIJ	petsc4py.PETSc.Mat.Type-class.html#SEQMAIJ
-petsc4py.PETSc.Mat.Type.MPIAIJCRL	petsc4py.PETSc.Mat.Type-class.html#MPIAIJCRL
+petsc4py.PETSc.Mat.Type.NORMALHERMITIAN	petsc4py.PETSc.Mat.Type-class.html#NORMALHERMITIAN
+petsc4py.PETSc.Mat.Type.PREALLOCATOR	petsc4py.PETSc.Mat.Type-class.html#PREALLOCATOR
 petsc4py.PETSc.Mat.Type.MAIJ	petsc4py.PETSc.Mat.Type-class.html#MAIJ
 petsc4py.PETSc.NormType	petsc4py.PETSc.NormType-class.html
 petsc4py.PETSc.NormType.FRB	petsc4py.PETSc.NormType-class.html#FRB
@@ -1671,8 +1769,10 @@ petsc4py.PETSc.Options.prefix	petsc4py.PETSc.Options-class.html#prefix
 petsc4py.PETSc.Options.__init__	petsc4py.PETSc.Options-class.html#__init__
 petsc4py.PETSc.Options.__new__	petsc4py.PETSc.Options-class.html#__new__
 petsc4py.PETSc.Options.__contains__	petsc4py.PETSc.Options-class.html#__contains__
+petsc4py.PETSc.Options.create	petsc4py.PETSc.Options-class.html#create
 petsc4py.PETSc.Options.hasName	petsc4py.PETSc.Options-class.html#hasName
 petsc4py.PETSc.Options.prefixPop	petsc4py.PETSc.Options-class.html#prefixPop
+petsc4py.PETSc.Options.destroy	petsc4py.PETSc.Options-class.html#destroy
 petsc4py.PETSc.Options.getReal	petsc4py.PETSc.Options-class.html#getReal
 petsc4py.PETSc.Options.setValue	petsc4py.PETSc.Options-class.html#setValue
 petsc4py.PETSc.Options.__getitem__	petsc4py.PETSc.Options-class.html#__getitem__
@@ -1681,7 +1781,9 @@ petsc4py.PETSc.Options.getInt	petsc4py.PETSc.Options-class.html#getInt
 petsc4py.PETSc.Options.__setitem__	petsc4py.PETSc.Options-class.html#__setitem__
 petsc4py.PETSc.Options.setFromOptions	petsc4py.PETSc.Options-class.html#setFromOptions
 petsc4py.PETSc.Options.__delitem__	petsc4py.PETSc.Options-class.html#__delitem__
+petsc4py.PETSc.Options.clear	petsc4py.PETSc.Options-class.html#clear
 petsc4py.PETSc.Options.getScalar	petsc4py.PETSc.Options-class.html#getScalar
+petsc4py.PETSc.Options.view	petsc4py.PETSc.Options-class.html#view
 petsc4py.PETSc.PC	petsc4py.PETSc.PC-class.html
 petsc4py.PETSc.PC.setDM	petsc4py.PETSc.PC-class.html#setDM
 petsc4py.PETSc.PC.getMGRScale	petsc4py.PETSc.PC-class.html#getMGRScale
@@ -1692,7 +1794,7 @@ petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.PC.setMGRScale	petsc4py.PETSc.PC-class.html#setMGRScale
-petsc4py.PETSc.PC.setMGCyclesOnLevel	petsc4py.PETSc.PC-class.html#setMGCyclesOnLevel
+petsc4py.PETSc.PC.getMGSmoother	petsc4py.PETSc.PC-class.html#getMGSmoother
 petsc4py.PETSc.PC.setFactorLevels	petsc4py.PETSc.PC-class.html#setFactorLevels
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 petsc4py.PETSc.PC.__call__	petsc4py.PETSc.PC-class.html#__call__
@@ -1714,6 +1816,7 @@ petsc4py.PETSc.PC.GAMGType	petsc4py.PETSc.PC.GAMGType-class.html
 petsc4py.PETSc.PC.setUpOnBlocks	petsc4py.PETSc.PC-class.html#setUpOnBlocks
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.PC.view	petsc4py.PETSc.PC-class.html#view
+petsc4py.PETSc.PC.getMGType	petsc4py.PETSc.PC-class.html#getMGType
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 petsc4py.PETSc.PC.getASMSubKSP	petsc4py.PETSc.PC-class.html#getASMSubKSP
 petsc4py.PETSc.PC.getFactorSolverPackage	petsc4py.PETSc.PC-class.html#getFactorSolverPackage
@@ -1724,12 +1827,14 @@ petsc4py.PETSc.PC.Type	petsc4py.PETSc.PC.Type-class.html
 petsc4py.PETSc.PC.setMGInterpolation	petsc4py.PETSc.PC-class.html#setMGInterpolation
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
+petsc4py.PETSc.PC.setMGType	petsc4py.PETSc.PC-class.html#setMGType
+petsc4py.PETSc.PC.MGType	petsc4py.PETSc.PC.MGType-class.html
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
 petsc4py.PETSc.PC.setUp	petsc4py.PETSc.PC-class.html#setUp
 petsc4py.PETSc.PC.createPython	petsc4py.PETSc.PC-class.html#createPython
 petsc4py.PETSc.PC.getDM	petsc4py.PETSc.PC-class.html#getDM
 petsc4py.PETSc.PC.getOptionsPrefix	petsc4py.PETSc.PC-class.html#getOptionsPrefix
-petsc4py.PETSc.PC.setFieldSplitSchurFactType	petsc4py.PETSc.PC-class.html#setFieldSplitSchurFactType
+petsc4py.PETSc.PC.getOperators	petsc4py.PETSc.PC-class.html#getOperators
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
 petsc4py.PETSc.PC.setCompositeType	petsc4py.PETSc.PC-class.html#setCompositeType
 petsc4py.PETSc.PC.setASMOverlap	petsc4py.PETSc.PC-class.html#setASMOverlap
@@ -1739,19 +1844,20 @@ petsc4py.PETSc.PC.setFieldSplitType	petsc4py.PETSc.PC-class.html#setFieldSplitTy
 petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.PC.setMGR	petsc4py.PETSc.PC-class.html#setMGR
 petsc4py.PETSc.PC.setMGX	petsc4py.PETSc.PC-class.html#setMGX
+petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.PC.getPythonContext	petsc4py.PETSc.PC-class.html#getPythonContext
 petsc4py.PETSc.PC.setGAMGSmooths	petsc4py.PETSc.PC-class.html#setGAMGSmooths
-petsc4py.PETSc.PC.Side	petsc4py.PETSc.PC.Side-class.html
 petsc4py.PETSc.PC.setCoordinates	petsc4py.PETSc.PC-class.html#setCoordinates
 petsc4py.PETSc.PC.GASMType	petsc4py.PETSc.PC.GASMType-class.html
-petsc4py.PETSc.PC.setFieldSplitFields	petsc4py.PETSc.PC-class.html#setFieldSplitFields
+petsc4py.PETSc.PC.setFactorOrdering	petsc4py.PETSc.PC-class.html#setFactorOrdering
+petsc4py.PETSc.PC.setHYPRESetBetaPoissonMatrix	petsc4py.PETSc.PC-class.html#setHYPRESetBetaPoissonMatrix
 petsc4py.PETSc.PC.setASMLocalSubdomains	petsc4py.PETSc.PC-class.html#setASMLocalSubdomains
 petsc4py.PETSc.PC.apply	petsc4py.PETSc.PC-class.html#apply
 petsc4py.PETSc.PC.setOperators	petsc4py.PETSc.PC-class.html#setOperators
 petsc4py.PETSc.PC.setGAMGLevels	petsc4py.PETSc.PC-class.html#setGAMGLevels
 petsc4py.PETSc.PC.setType	petsc4py.PETSc.PC-class.html#setType
 petsc4py.PETSc.PC.SchurFactType	petsc4py.PETSc.PC.SchurFactType-class.html
-petsc4py.PETSc.PC.getOperators	petsc4py.PETSc.PC-class.html#getOperators
+petsc4py.PETSc.PC.setFieldSplitSchurFactType	petsc4py.PETSc.PC-class.html#setFieldSplitSchurFactType
 petsc4py.PETSc.PC.create	petsc4py.PETSc.PC-class.html#create
 petsc4py.PETSc.PC.getMGSmootherUp	petsc4py.PETSc.PC-class.html#getMGSmootherUp
 petsc4py.PETSc.PC.addCompositePC	petsc4py.PETSc.PC-class.html#addCompositePC
@@ -1769,27 +1875,33 @@ petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.PC.reset	petsc4py.PETSc.PC-class.html#reset
 petsc4py.PETSc.PC.setFactorShift	petsc4py.PETSc.PC-class.html#setFactorShift
 petsc4py.PETSc.PC.applyTranspose	petsc4py.PETSc.PC-class.html#applyTranspose
+petsc4py.PETSc.PC.setHYPRESetAlphaPoissonMatrix	petsc4py.PETSc.PC-class.html#setHYPRESetAlphaPoissonMatrix
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.PC.setGAMGType	petsc4py.PETSc.PC-class.html#setGAMGType
 petsc4py.PETSc.PC.applySymmetricLeft	petsc4py.PETSc.PC-class.html#applySymmetricLeft
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
-petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
+petsc4py.PETSc.PC.setHYPREType	petsc4py.PETSc.PC-class.html#setHYPREType
+petsc4py.PETSc.PC.setHYPREDiscreteGradient	petsc4py.PETSc.PC-class.html#setHYPREDiscreteGradient
 petsc4py.PETSc.PC.setGASMOverlap	petsc4py.PETSc.PC-class.html#setGASMOverlap
 petsc4py.PETSc.PC.setReusePreconditioner	petsc4py.PETSc.PC-class.html#setReusePreconditioner
+petsc4py.PETSc.PC.setFactorPivot	petsc4py.PETSc.PC-class.html#setFactorPivot
 petsc4py.PETSc.PC.setFieldSplitIS	petsc4py.PETSc.PC-class.html#setFieldSplitIS
+petsc4py.PETSc.PC.getHYPREType	petsc4py.PETSc.PC-class.html#getHYPREType
 petsc4py.PETSc.PC.SchurPreType	petsc4py.PETSc.PC.SchurPreType-class.html
 petsc4py.PETSc.PC.setMGRestriction	petsc4py.PETSc.PC-class.html#setMGRestriction
+petsc4py.PETSc.PC.setHYPREDiscreteCurl	petsc4py.PETSc.PC-class.html#setHYPREDiscreteCurl
 petsc4py.PETSc.PC.__new__	petsc4py.PETSc.PC-class.html#__new__
-petsc4py.PETSc.PC.getMGSmoother	petsc4py.PETSc.PC-class.html#getMGSmoother
+petsc4py.PETSc.PC.setMGCyclesOnLevel	petsc4py.PETSc.PC-class.html#setMGCyclesOnLevel
 petsc4py.PETSc.PC.destroy	petsc4py.PETSc.PC-class.html#destroy
 petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
+petsc4py.PETSc.PC.setHYPRESetEdgeConstantVectors	petsc4py.PETSc.PC-class.html#setHYPRESetEdgeConstantVectors
 petsc4py.PETSc.PC.getKSP	petsc4py.PETSc.PC-class.html#getKSP
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.PC.getFactorMatrix	petsc4py.PETSc.PC-class.html#getFactorMatrix
-petsc4py.PETSc.PC.setFactorOrdering	petsc4py.PETSc.PC-class.html#setFactorOrdering
+petsc4py.PETSc.PC.setFieldSplitFields	petsc4py.PETSc.PC-class.html#setFieldSplitFields
 petsc4py.PETSc.PC.getFieldSplitSubKSP	petsc4py.PETSc.PC-class.html#getFieldSplitSubKSP
-petsc4py.PETSc.PC.setFactorPivot	petsc4py.PETSc.PC-class.html#setFactorPivot
+petsc4py.PETSc.PC.Side	petsc4py.PETSc.PC.Side-class.html
 petsc4py.PETSc.PC.setPythonType	petsc4py.PETSc.PC-class.html#setPythonType
 petsc4py.PETSc.PC.setFieldSplitSchurPreType	petsc4py.PETSc.PC-class.html#setFieldSplitSchurPreType
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
@@ -1820,6 +1932,12 @@ petsc4py.PETSc.PC.GASMType.NONE	petsc4py.PETSc.PC.GASMType-class.html#NONE
 petsc4py.PETSc.PC.GASMType.INTERPOLATE	petsc4py.PETSc.PC.GASMType-class.html#INTERPOLATE
 petsc4py.PETSc.PC.GASMType.RESTRICT	petsc4py.PETSc.PC.GASMType-class.html#RESTRICT
 petsc4py.PETSc.PC.GASMType.BASIC	petsc4py.PETSc.PC.GASMType-class.html#BASIC
+petsc4py.PETSc.PC.MGType	petsc4py.PETSc.PC.MGType-class.html
+petsc4py.PETSc.PC.MGType.KASKADE	petsc4py.PETSc.PC.MGType-class.html#KASKADE
+petsc4py.PETSc.PC.MGType.FULL	petsc4py.PETSc.PC.MGType-class.html#FULL
+petsc4py.PETSc.PC.MGType.ADDITIVE	petsc4py.PETSc.PC.MGType-class.html#ADDITIVE
+petsc4py.PETSc.PC.MGType.__qualname__	petsc4py.PETSc.PC.MGType-class.html#__qualname__
+petsc4py.PETSc.PC.MGType.MULTIPLICATIVE	petsc4py.PETSc.PC.MGType-class.html#MULTIPLICATIVE
 petsc4py.PETSc.PC.SchurFactType	petsc4py.PETSc.PC.SchurFactType-class.html
 petsc4py.PETSc.PC.SchurFactType.UPPER	petsc4py.PETSc.PC.SchurFactType-class.html#UPPER
 petsc4py.PETSc.PC.SchurFactType.LOWER	petsc4py.PETSc.PC.SchurFactType-class.html#LOWER
@@ -1872,6 +1990,7 @@ petsc4py.PETSc.PC.Type.JACOBI	petsc4py.PETSc.PC.Type-class.html#JACOBI
 petsc4py.PETSc.PC.Type.SHELL	petsc4py.PETSc.PC.Type-class.html#SHELL
 petsc4py.PETSc.PC.Type.REDUNDANT	petsc4py.PETSc.PC.Type-class.html#REDUNDANT
 petsc4py.PETSc.PC.Type.CP	petsc4py.PETSc.PC.Type-class.html#CP
+petsc4py.PETSc.PC.Type.TELESCOPE	petsc4py.PETSc.PC.Type-class.html#TELESCOPE
 petsc4py.PETSc.PC.Type.BICGSTABCUSP	petsc4py.PETSc.PC.Type-class.html#BICGSTABCUSP
 petsc4py.PETSc.PC.Type.MG	petsc4py.PETSc.PC.Type-class.html#MG
 petsc4py.PETSc.PC.Type.SPAI	petsc4py.PETSc.PC.Type-class.html#SPAI
@@ -1994,6 +2113,7 @@ petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Random.view	petsc4py.PETSc.Random-class.html#view
 petsc4py.PETSc.Random.Type	petsc4py.PETSc.Random.Type-class.html
+petsc4py.PETSc.Random.Type.RANDER48	petsc4py.PETSc.Random.Type-class.html#RANDER48
 petsc4py.PETSc.Random.Type.RAND	petsc4py.PETSc.Random.Type-class.html#RAND
 petsc4py.PETSc.Random.Type.RAND48	petsc4py.PETSc.Random.Type-class.html#RAND48
 petsc4py.PETSc.Random.Type.__qualname__	petsc4py.PETSc.Random.Type-class.html#__qualname__
@@ -2422,17 +2542,18 @@ petsc4py.PETSc.Sys.getVersion	petsc4py.PETSc.Sys-class.html#getVersion
 petsc4py.PETSc.Sys.__new__	petsc4py.PETSc.Sys-class.html#__new__
 petsc4py.PETSc.Sys.isFinalized	petsc4py.PETSc.Sys-class.html#isFinalized
 petsc4py.PETSc.Sys.splitOwnership	petsc4py.PETSc.Sys-class.html#splitOwnership
+petsc4py.PETSc.Sys.infoAllow	petsc4py.PETSc.Sys-class.html#infoAllow
 petsc4py.PETSc.Sys.isInitialized	petsc4py.PETSc.Sys-class.html#isInitialized
 petsc4py.PETSc.Sys.getVersionInfo	petsc4py.PETSc.Sys-class.html#getVersionInfo
 petsc4py.PETSc.Sys.setDefaultComm	petsc4py.PETSc.Sys-class.html#setDefaultComm
 petsc4py.PETSc.Sys.popErrorHandler	petsc4py.PETSc.Sys-class.html#popErrorHandler
 petsc4py.PETSc.Sys.syncPrint	petsc4py.PETSc.Sys-class.html#syncPrint
+petsc4py.PETSc.Sys.registerCitation	petsc4py.PETSc.Sys-class.html#registerCitation
 petsc4py.PETSc.TAO	petsc4py.PETSc.TAO-class.html
 petsc4py.PETSc.TAO.getFunctionValue	petsc4py.PETSc.TAO-class.html#getFunctionValue
 petsc4py.PETSc.TAO.setMonitor	petsc4py.PETSc.TAO-class.html#setMonitor
 petsc4py.PETSc.TAO.cancelMonitor	petsc4py.PETSc.TAO-class.html#cancelMonitor
 petsc4py.PETSc.TAO.setGradient	petsc4py.PETSc.TAO-class.html#setGradient
-petsc4py.PETSc.TAO.setFunctionTolerances	petsc4py.PETSc.TAO-class.html#setFunctionTolerances
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.TAO.computeObjectiveGradient	petsc4py.PETSc.TAO-class.html#computeObjectiveGradient
 petsc4py.PETSc.TAO.computeConstraints	petsc4py.PETSc.TAO-class.html#computeConstraints
@@ -2444,6 +2565,7 @@ petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.TAO.ksp	petsc4py.PETSc.TAO-class.html#ksp
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 petsc4py.PETSc.TAO.Reason	petsc4py.PETSc.TAO.Reason-class.html
+petsc4py.PETSc.TAO.reason	petsc4py.PETSc.TAO-class.html#reason
 petsc4py.PETSc.TAO.getConvergedReason	petsc4py.PETSc.TAO-class.html#getConvergedReason
 petsc4py.PETSc.TAO.getGradientNorm	petsc4py.PETSc.TAO-class.html#getGradientNorm
 petsc4py.PETSc.TAO.setConstraintTolerances	petsc4py.PETSc.TAO-class.html#setConstraintTolerances
@@ -2455,7 +2577,6 @@ petsc4py.PETSc.TAO.converged	petsc4py.PETSc.TAO-class.html#converged
 petsc4py.PETSc.TAO.computeGradient	petsc4py.PETSc.TAO-class.html#computeGradient
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.TAO.setConstraints	petsc4py.PETSc.TAO-class.html#setConstraints
-petsc4py.PETSc.TAO.getObjectiveTolerances	petsc4py.PETSc.TAO-class.html#getObjectiveTolerances
 petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.TAO.setAppCtx	petsc4py.PETSc.TAO-class.html#setAppCtx
@@ -2467,7 +2588,7 @@ petsc4py.PETSc.TAO.view	petsc4py.PETSc.TAO-class.html#view
 petsc4py.PETSc.TAO.ctol	petsc4py.PETSc.TAO-class.html#ctol
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 petsc4py.PETSc.TAO.setJacobian	petsc4py.PETSc.TAO-class.html#setJacobian
-petsc4py.PETSc.TAO.setGradientTolerances	petsc4py.PETSc.TAO-class.html#setGradientTolerances
+petsc4py.PETSc.TAO.setGradientNorm	petsc4py.PETSc.TAO-class.html#setGradientNorm
 petsc4py.PETSc.TAO.Type	petsc4py.PETSc.TAO.Type-class.html
 petsc4py.PETSc.TAO.setObjective	petsc4py.PETSc.TAO-class.html#setObjective
 petsc4py.PETSc.TAO.iterating	petsc4py.PETSc.TAO-class.html#iterating
@@ -2479,8 +2600,8 @@ petsc4py.PETSc.TAO.ftol	petsc4py.PETSc.TAO-class.html#ftol
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
 petsc4py.PETSc.TAO.computeJacobian	petsc4py.PETSc.TAO-class.html#computeJacobian
 petsc4py.PETSc.TAO.setUp	petsc4py.PETSc.TAO-class.html#setUp
-petsc4py.PETSc.TAO.getTolerances	petsc4py.PETSc.TAO-class.html#getTolerances
-petsc4py.PETSc.TAO.reason	petsc4py.PETSc.TAO-class.html#reason
+petsc4py.PETSc.TAO.getLMVMH0	petsc4py.PETSc.TAO-class.html#getLMVMH0
+petsc4py.PETSc.TAO.getOptionsPrefix	petsc4py.PETSc.TAO-class.html#getOptionsPrefix
 petsc4py.PETSc.TAO.setInitialTrustRegionRadius	petsc4py.PETSc.TAO-class.html#setInitialTrustRegionRadius
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
@@ -2491,9 +2612,10 @@ petsc4py.PETSc.TAO.gnorm	petsc4py.PETSc.TAO-class.html#gnorm
 petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.TAO.setHessian	petsc4py.PETSc.TAO-class.html#setHessian
 petsc4py.PETSc.TAO.getConstraintTolerances	petsc4py.PETSc.TAO-class.html#getConstraintTolerances
+petsc4py.PETSc.TAO.setLMVMH0	petsc4py.PETSc.TAO-class.html#setLMVMH0
 petsc4py.PETSc.TAO.setTolerances	petsc4py.PETSc.TAO-class.html#setTolerances
 petsc4py.PETSc.TAO.setInitial	petsc4py.PETSc.TAO-class.html#setInitial
-petsc4py.PETSc.TAO.getFunctionTolerances	petsc4py.PETSc.TAO-class.html#getFunctionTolerances
+petsc4py.PETSc.TAO.getSolutionNorm	petsc4py.PETSc.TAO-class.html#getSolutionNorm
 petsc4py.PETSc.TAO.setType	petsc4py.PETSc.TAO-class.html#setType
 petsc4py.PETSc.TAO.getVariableBounds	petsc4py.PETSc.TAO-class.html#getVariableBounds
 petsc4py.PETSc.TAO.create	petsc4py.PETSc.TAO-class.html#create
@@ -2507,11 +2629,11 @@ petsc4py.PETSc.Object.incRef	petsc4py.PETSc.Object-class.html#incRef
 petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
 petsc4py.PETSc.TAO.getType	petsc4py.PETSc.TAO-class.html#getType
 petsc4py.PETSc.TAO.getMonitor	petsc4py.PETSc.TAO-class.html#getMonitor
-petsc4py.PETSc.TAO.setObjectiveTolerances	petsc4py.PETSc.TAO-class.html#setObjectiveTolerances
 petsc4py.PETSc.TAO.computeDualVariables	petsc4py.PETSc.TAO-class.html#computeDualVariables
 petsc4py.PETSc.TAO.getAppCtx	petsc4py.PETSc.TAO-class.html#getAppCtx
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.TAO.computeHessian	petsc4py.PETSc.TAO-class.html#computeHessian
+petsc4py.PETSc.TAO.getLMVMH0KSP	petsc4py.PETSc.TAO-class.html#getLMVMH0KSP
 petsc4py.PETSc.TAO.setVariableBounds	petsc4py.PETSc.TAO-class.html#setVariableBounds
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.TAO.computeObjective	petsc4py.PETSc.TAO-class.html#computeObjective
@@ -2523,7 +2645,6 @@ petsc4py.PETSc.TAO.setObjectiveGradient	petsc4py.PETSc.TAO-class.html#setObjecti
 petsc4py.PETSc.TAO.setConvergedReason	petsc4py.PETSc.TAO-class.html#setConvergedReason
 petsc4py.PETSc.TAO.getSolution	petsc4py.PETSc.TAO-class.html#getSolution
 petsc4py.PETSc.TAO.diverged	petsc4py.PETSc.TAO-class.html#diverged
-petsc4py.PETSc.TAO.getOptionsPrefix	petsc4py.PETSc.TAO-class.html#getOptionsPrefix
 petsc4py.PETSc.TAO.__new__	petsc4py.PETSc.TAO-class.html#__new__
 petsc4py.PETSc.TAO.objective	petsc4py.PETSc.TAO-class.html#objective
 petsc4py.PETSc.TAO.destroy	petsc4py.PETSc.TAO-class.html#destroy
@@ -2532,9 +2653,8 @@ petsc4py.PETSc.TAO.getKSP	petsc4py.PETSc.TAO-class.html#getKSP
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
-petsc4py.PETSc.TAO.getGradientTolerances	petsc4py.PETSc.TAO-class.html#getGradientTolerances
+petsc4py.PETSc.TAO.getTolerances	petsc4py.PETSc.TAO-class.html#getTolerances
 petsc4py.PETSc.TAO.getSolutionStatus	petsc4py.PETSc.TAO-class.html#getSolutionStatus
-petsc4py.PETSc.TAO.getConstraintsNorm	petsc4py.PETSc.TAO-class.html#getConstraintsNorm
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.TAO.gtol	petsc4py.PETSc.TAO-class.html#gtol
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
@@ -2548,13 +2668,11 @@ petsc4py.PETSc.TAO.Reason.CONVERGED_MINF	petsc4py.PETSc.TAO.Reason-class.html#CO
 petsc4py.PETSc.TAO.Reason.CONVERGED_GATOL	petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_GATOL
 petsc4py.PETSc.TAO.Reason.CONVERGED_GRTOL	petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_GRTOL
 petsc4py.PETSc.TAO.Reason.ITERATING	petsc4py.PETSc.TAO.Reason-class.html#ITERATING
-petsc4py.PETSc.TAO.Reason.CONVERGED_STEPTOL	petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_STEPTOL
-petsc4py.PETSc.TAO.Reason.CONVERGED_FATOL	petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_FATOL
 petsc4py.PETSc.TAO.Reason.DIVERGED_TR_REDUCTION	petsc4py.PETSc.TAO.Reason-class.html#DIVERGED_TR_REDUCTION
-petsc4py.PETSc.TAO.Reason.DIVERGED_NAN	petsc4py.PETSc.TAO.Reason-class.html#DIVERGED_NAN
 petsc4py.PETSc.TAO.Reason.DIVERGED_USER	petsc4py.PETSc.TAO.Reason-class.html#DIVERGED_USER
+petsc4py.PETSc.TAO.Reason.CONVERGED_STEPTOL	petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_STEPTOL
+petsc4py.PETSc.TAO.Reason.DIVERGED_NAN	petsc4py.PETSc.TAO.Reason-class.html#DIVERGED_NAN
 petsc4py.PETSc.TAO.Reason.DIVERGED_MAXITS	petsc4py.PETSc.TAO.Reason-class.html#DIVERGED_MAXITS
-petsc4py.PETSc.TAO.Reason.CONVERGED_FRTOL	petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_FRTOL
 petsc4py.PETSc.TAO.Reason.CONTINUE_ITERATING	petsc4py.PETSc.TAO.Reason-class.html#CONTINUE_ITERATING
 petsc4py.PETSc.TAO.Reason.__qualname__	petsc4py.PETSc.TAO.Reason-class.html#__qualname__
 petsc4py.PETSc.TAO.Reason.CONVERGED_GTTOL	petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_GTTOL
@@ -2588,7 +2706,8 @@ petsc4py.PETSc.TS	petsc4py.PETSc.TS-class.html
 petsc4py.PETSc.TS.getConvergedReason	petsc4py.PETSc.TS-class.html#getConvergedReason
 petsc4py.PETSc.TS.setDM	petsc4py.PETSc.TS-class.html#setDM
 petsc4py.PETSc.TS.computeRHSJacobian	petsc4py.PETSc.TS-class.html#computeRHSJacobian
-petsc4py.PETSc.TS.setMonitor	petsc4py.PETSc.TS-class.html#setMonitor
+petsc4py.PETSc.TS.ExactFinalTime	petsc4py.PETSc.TS.ExactFinalTime-class.html
+petsc4py.PETSc.TS.getTime	petsc4py.PETSc.TS-class.html#getTime
 petsc4py.PETSc.TS.cancelMonitor	petsc4py.PETSc.TS-class.html#cancelMonitor
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.TS.getEquationType	petsc4py.PETSc.TS-class.html#getEquationType
@@ -2601,7 +2720,7 @@ petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.TS.monitor	petsc4py.PETSc.TS-class.html#monitor
 petsc4py.PETSc.TS.getStepRejections	petsc4py.PETSc.TS-class.html#getStepRejections
-petsc4py.PETSc.TS.getTime	petsc4py.PETSc.TS-class.html#getTime
+petsc4py.PETSc.TS.setMonitor	petsc4py.PETSc.TS-class.html#setMonitor
 petsc4py.PETSc.TS.rtol	petsc4py.PETSc.TS-class.html#rtol
 petsc4py.PETSc.TS.destroy	petsc4py.PETSc.TS-class.html#destroy
 petsc4py.PETSc.TS.computeRHSFunctionLinear	petsc4py.PETSc.TS-class.html#computeRHSFunctionLinear
@@ -2624,7 +2743,7 @@ petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
 petsc4py.PETSc.TS.setStepNumber	petsc4py.PETSc.TS-class.html#setStepNumber
 petsc4py.PETSc.TS.setDuration	petsc4py.PETSc.TS-class.html#setDuration
-petsc4py.PETSc.TS.ExactFinalTimeOption	petsc4py.PETSc.TS.ExactFinalTimeOption-class.html
+petsc4py.PETSc.TS.ExactFinalTimeOption	petsc4py.PETSc.TS.ExactFinalTime-class.html
 petsc4py.PETSc.TS.setPythonContext	petsc4py.PETSc.TS-class.html#setPythonContext
 petsc4py.PETSc.TS.ConvergedReason	petsc4py.PETSc.TS.ConvergedReason-class.html
 petsc4py.PETSc.TS.getKSPIterations	petsc4py.PETSc.TS-class.html#getKSPIterations
@@ -2645,7 +2764,7 @@ petsc4py.PETSc.TS.getPostStep	petsc4py.PETSc.TS-class.html#getPostStep
 petsc4py.PETSc.TS.setUp	petsc4py.PETSc.TS-class.html#setUp
 petsc4py.PETSc.TS.interpolate	petsc4py.PETSc.TS-class.html#interpolate
 petsc4py.PETSc.TS.getDM	petsc4py.PETSc.TS-class.html#getDM
-petsc4py.PETSc.TS.step	petsc4py.PETSc.TS-class.html#step
+petsc4py.PETSc.TS.reason	petsc4py.PETSc.TS-class.html#reason
 petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
 petsc4py.PETSc.TS.setSolution	petsc4py.PETSc.TS-class.html#setSolution
@@ -2656,12 +2775,13 @@ petsc4py.PETSc.TS.createPython	petsc4py.PETSc.TS-class.html#createPython
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.TS.getStepNumber	petsc4py.PETSc.TS-class.html#getStepNumber
 petsc4py.PETSc.TS.appctx	petsc4py.PETSc.TS-class.html#appctx
-petsc4py.PETSc.TS.reason	petsc4py.PETSc.TS-class.html#reason
+petsc4py.PETSc.TS.step	petsc4py.PETSc.TS-class.html#step
 petsc4py.PETSc.TS.setThetaEndpoint	petsc4py.PETSc.TS-class.html#setThetaEndpoint
 petsc4py.PETSc.TS.computeIJacobian	petsc4py.PETSc.TS-class.html#computeIJacobian
 petsc4py.PETSc.TS.setMaxStepRejections	petsc4py.PETSc.TS-class.html#setMaxStepRejections
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.TS.view	petsc4py.PETSc.TS-class.html#view
+petsc4py.PETSc.TS.load	petsc4py.PETSc.TS-class.html#load
 petsc4py.PETSc.TS.setTolerances	petsc4py.PETSc.TS-class.html#setTolerances
 petsc4py.PETSc.TS.getPythonContext	petsc4py.PETSc.TS-class.html#getPythonContext
 petsc4py.PETSc.TS.getIJacobian	petsc4py.PETSc.TS-class.html#getIJacobian
@@ -2688,6 +2808,7 @@ petsc4py.PETSc.TS.rollBack	petsc4py.PETSc.TS-class.html#rollBack
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.TS.reset	petsc4py.PETSc.TS-class.html#reset
 petsc4py.PETSc.TS.setPostStep	petsc4py.PETSc.TS-class.html#setPostStep
+petsc4py.PETSc.TS.getTotalSteps	petsc4py.PETSc.TS-class.html#getTotalSteps
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
 petsc4py.PETSc.TS.max_steps	petsc4py.PETSc.TS-class.html#max_steps
@@ -2707,6 +2828,7 @@ petsc4py.PETSc.TS.getPreStep	petsc4py.PETSc.TS-class.html#getPreStep
 petsc4py.PETSc.TS.setIFunction	petsc4py.PETSc.TS-class.html#setIFunction
 petsc4py.PETSc.TS.converged	petsc4py.PETSc.TS-class.html#converged
 petsc4py.PETSc.TS.setRHSJacobian	petsc4py.PETSc.TS-class.html#setRHSJacobian
+petsc4py.PETSc.TS.getPrevTime	petsc4py.PETSc.TS-class.html#getPrevTime
 petsc4py.PETSc.TS.equation_type	petsc4py.PETSc.TS-class.html#equation_type
 petsc4py.PETSc.TS.setEquationType	petsc4py.PETSc.TS-class.html#setEquationType
 petsc4py.PETSc.TS.EquationType	petsc4py.PETSc.TS.EquationType-class.html
@@ -2714,6 +2836,7 @@ petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrea
 petsc4py.PETSc.TS.getKSP	petsc4py.PETSc.TS-class.html#getKSP
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
+petsc4py.PETSc.TS.clone	petsc4py.PETSc.TS-class.html#clone
 petsc4py.PETSc.TS.setProblemType	petsc4py.PETSc.TS-class.html#setProblemType
 petsc4py.PETSc.TS.getTolerances	petsc4py.PETSc.TS-class.html#getTolerances
 petsc4py.PETSc.TS.getSNESIterations	petsc4py.PETSc.TS-class.html#getSNESIterations
@@ -2730,13 +2853,15 @@ petsc4py.PETSc.TS.max_time	petsc4py.PETSc.TS-class.html#max_time
 petsc4py.PETSc.TS.time	petsc4py.PETSc.TS-class.html#time
 petsc4py.PETSc.TS.setPreStep	petsc4py.PETSc.TS-class.html#setPreStep
 petsc4py.PETSc.TS.ConvergedReason	petsc4py.PETSc.TS.ConvergedReason-class.html
+petsc4py.PETSc.TS.ConvergedReason.DIVERGED_STEP_REJECTED	petsc4py.PETSc.TS.ConvergedReason-class.html#DIVERGED_STEP_REJECTED
+petsc4py.PETSc.TS.ConvergedReason.CONVERGED_USER	petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_USER
+petsc4py.PETSc.TS.ConvergedReason.CONVERGED_TIME	petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_TIME
+petsc4py.PETSc.TS.ConvergedReason.CONVERGED_EVENT	petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_EVENT
 petsc4py.PETSc.TS.ConvergedReason.ITERATING	petsc4py.PETSc.TS.ConvergedReason-class.html#ITERATING
 petsc4py.PETSc.TS.ConvergedReason.CONVERGED_ITS	petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_ITS
-petsc4py.PETSc.TS.ConvergedReason.__qualname__	petsc4py.PETSc.TS.ConvergedReason-class.html#__qualname__
-petsc4py.PETSc.TS.ConvergedReason.DIVERGED_STEP_REJECTED	petsc4py.PETSc.TS.ConvergedReason-class.html#DIVERGED_STEP_REJECTED
 petsc4py.PETSc.TS.ConvergedReason.CONVERGED_ITERATING	petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_ITERATING
-petsc4py.PETSc.TS.ConvergedReason.CONVERGED_TIME	petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_TIME
 petsc4py.PETSc.TS.ConvergedReason.DIVERGED_NONLINEAR_SOLVE	petsc4py.PETSc.TS.ConvergedReason-class.html#DIVERGED_NONLINEAR_SOLVE
+petsc4py.PETSc.TS.ConvergedReason.__qualname__	petsc4py.PETSc.TS.ConvergedReason-class.html#__qualname__
 petsc4py.PETSc.TS.EquationType	petsc4py.PETSc.TS.EquationType-class.html
 petsc4py.PETSc.TS.EquationType.DAE_IMPLICIT_INDEX3	petsc4py.PETSc.TS.EquationType-class.html#DAE_IMPLICIT_INDEX3
 petsc4py.PETSc.TS.EquationType.DAE_IMPLICIT_INDEX1	petsc4py.PETSc.TS.EquationType-class.html#DAE_IMPLICIT_INDEX1
@@ -2752,11 +2877,12 @@ petsc4py.PETSc.TS.EquationType.DAE_IMPLICIT_INDEXHI	petsc4py.PETSc.TS.EquationTy
 petsc4py.PETSc.TS.EquationType.UNSPECIFIED	petsc4py.PETSc.TS.EquationType-class.html#UNSPECIFIED
 petsc4py.PETSc.TS.EquationType.IMPLICIT	petsc4py.PETSc.TS.EquationType-class.html#IMPLICIT
 petsc4py.PETSc.TS.EquationType.ODE_IMPLICIT	petsc4py.PETSc.TS.EquationType-class.html#ODE_IMPLICIT
-petsc4py.PETSc.TS.ExactFinalTimeOption	petsc4py.PETSc.TS.ExactFinalTimeOption-class.html
-petsc4py.PETSc.TS.ExactFinalTimeOption.MATCHSTEP	petsc4py.PETSc.TS.ExactFinalTimeOption-class.html#MATCHSTEP
-petsc4py.PETSc.TS.ExactFinalTimeOption.INTERPOLATE	petsc4py.PETSc.TS.ExactFinalTimeOption-class.html#INTERPOLATE
-petsc4py.PETSc.TS.ExactFinalTimeOption.__qualname__	petsc4py.PETSc.TS.ExactFinalTimeOption-class.html#__qualname__
-petsc4py.PETSc.TS.ExactFinalTimeOption.STEPOVER	petsc4py.PETSc.TS.ExactFinalTimeOption-class.html#STEPOVER
+petsc4py.PETSc.TS.ExactFinalTime	petsc4py.PETSc.TS.ExactFinalTime-class.html
+petsc4py.PETSc.TS.ExactFinalTime.MATCHSTEP	petsc4py.PETSc.TS.ExactFinalTime-class.html#MATCHSTEP
+petsc4py.PETSc.TS.ExactFinalTime.INTERPOLATE	petsc4py.PETSc.TS.ExactFinalTime-class.html#INTERPOLATE
+petsc4py.PETSc.TS.ExactFinalTime.__qualname__	petsc4py.PETSc.TS.ExactFinalTime-class.html#__qualname__
+petsc4py.PETSc.TS.ExactFinalTime.UNSPECIFIED	petsc4py.PETSc.TS.ExactFinalTime-class.html#UNSPECIFIED
+petsc4py.PETSc.TS.ExactFinalTime.STEPOVER	petsc4py.PETSc.TS.ExactFinalTime-class.html#STEPOVER
 petsc4py.PETSc.TS.ProblemType	petsc4py.PETSc.TS.ProblemType-class.html
 petsc4py.PETSc.TS.ProblemType.NONLINEAR	petsc4py.PETSc.TS.ProblemType-class.html#NONLINEAR
 petsc4py.PETSc.TS.ProblemType.LINEAR	petsc4py.PETSc.TS.ProblemType-class.html#LINEAR
@@ -2764,13 +2890,17 @@ petsc4py.PETSc.TS.ProblemType.__qualname__	petsc4py.PETSc.TS.ProblemType-class.h
 petsc4py.PETSc.TS.Type	petsc4py.PETSc.TS.Type-class.html
 petsc4py.PETSc.TS.Type.BE	petsc4py.PETSc.TS.Type-class.html#BE
 petsc4py.PETSc.TS.Type.PYTHON	petsc4py.PETSc.TS.Type-class.html#PYTHON
+petsc4py.PETSc.TS.Type.MIMEX	petsc4py.PETSc.TS.Type-class.html#MIMEX
 petsc4py.PETSc.TS.Type.FE	petsc4py.PETSc.TS.Type-class.html#FE
 petsc4py.PETSc.TS.Type.EULER	petsc4py.PETSc.TS.Type-class.html#EULER
 petsc4py.PETSc.TS.Type.PSEUDO	petsc4py.PETSc.TS.Type-class.html#PSEUDO
 petsc4py.PETSc.TS.Type.ARKIMEX	petsc4py.PETSc.TS.Type-class.html#ARKIMEX
 petsc4py.PETSc.TS.Type.BEULER	petsc4py.PETSc.TS.Type-class.html#BEULER
+petsc4py.PETSc.TS.Type.TH	petsc4py.PETSc.TS.Type-class.html#TH
 petsc4py.PETSc.TS.Type.CRANK_NICOLSON	petsc4py.PETSc.TS.Type-class.html#CRANK_NICOLSON
 petsc4py.PETSc.TS.Type.RK	petsc4py.PETSc.TS.Type-class.html#RK
+petsc4py.PETSc.TS.Type.ALPHA2	petsc4py.PETSc.TS.Type-class.html#ALPHA2
+petsc4py.PETSc.TS.Type.BDF	petsc4py.PETSc.TS.Type-class.html#BDF
 petsc4py.PETSc.TS.Type.CN	petsc4py.PETSc.TS.Type-class.html#CN
 petsc4py.PETSc.TS.Type.SUNDIALS	petsc4py.PETSc.TS.Type-class.html#SUNDIALS
 petsc4py.PETSc.TS.Type.RUNGE_KUTTA	petsc4py.PETSc.TS.Type-class.html#RUNGE_KUTTA
@@ -2872,6 +3002,7 @@ petsc4py.PETSc.Vec.__imul__	petsc4py.PETSc.Vec-class.html#__imul__
 petsc4py.PETSc.Vec.getLocalSize	petsc4py.PETSc.Vec-class.html#getLocalSize
 petsc4py.PETSc.Vec.shift	petsc4py.PETSc.Vec-class.html#shift
 petsc4py.PETSc.Vec.equal	petsc4py.PETSc.Vec-class.html#equal
+petsc4py.PETSc.Vec.chop	petsc4py.PETSc.Vec-class.html#chop
 petsc4py.PETSc.Vec.setValueLocal	petsc4py.PETSc.Vec-class.html#setValueLocal
 petsc4py.PETSc.Vec.__mul__	petsc4py.PETSc.Vec-class.html#__mul__
 petsc4py.PETSc.Vec.maxpy	petsc4py.PETSc.Vec-class.html#maxpy
@@ -2970,19 +3101,16 @@ petsc4py.PETSc.Vec.Option.IGNORE_NEGATIVE_INDICES	petsc4py.PETSc.Vec.Option-clas
 petsc4py.PETSc.Vec.Option.IGNORE_OFF_PROC_ENTRIES	petsc4py.PETSc.Vec.Option-class.html#IGNORE_OFF_PROC_ENTRIES
 petsc4py.PETSc.Vec.Option.__qualname__	petsc4py.PETSc.Vec.Option-class.html#__qualname__
 petsc4py.PETSc.Vec.Type	petsc4py.PETSc.Vec.Type-class.html
-petsc4py.PETSc.Vec.Type.SEQPTHREAD	petsc4py.PETSc.Vec.Type-class.html#SEQPTHREAD
 petsc4py.PETSc.Vec.Type.NEST	petsc4py.PETSc.Vec.Type-class.html#NEST
-petsc4py.PETSc.Vec.Type.MPIPTHREAD	petsc4py.PETSc.Vec.Type-class.html#MPIPTHREAD
 petsc4py.PETSc.Vec.Type.SEQ	petsc4py.PETSc.Vec.Type-class.html#SEQ
-petsc4py.PETSc.Vec.Type.PTHREAD	petsc4py.PETSc.Vec.Type-class.html#PTHREAD
+petsc4py.PETSc.Vec.Type.SEQCUSP	petsc4py.PETSc.Vec.Type-class.html#SEQCUSP
 petsc4py.PETSc.Vec.Type.SEQVIENNACL	petsc4py.PETSc.Vec.Type-class.html#SEQVIENNACL
 petsc4py.PETSc.Vec.Type.CUSP	petsc4py.PETSc.Vec.Type-class.html#CUSP
-petsc4py.PETSc.Vec.Type.SEQCUSP	petsc4py.PETSc.Vec.Type-class.html#SEQCUSP
 petsc4py.PETSc.Vec.Type.STANDARD	petsc4py.PETSc.Vec.Type-class.html#STANDARD
-petsc4py.PETSc.Vec.Type.MPIVIENNACL	petsc4py.PETSc.Vec.Type-class.html#MPIVIENNACL
 petsc4py.PETSc.Vec.Type.MPICUSP	petsc4py.PETSc.Vec.Type-class.html#MPICUSP
 petsc4py.PETSc.Vec.Type.MPI	petsc4py.PETSc.Vec.Type-class.html#MPI
 petsc4py.PETSc.Vec.Type.__qualname__	petsc4py.PETSc.Vec.Type-class.html#__qualname__
+petsc4py.PETSc.Vec.Type.MPIVIENNACL	petsc4py.PETSc.Vec.Type-class.html#MPIVIENNACL
 petsc4py.PETSc.Vec.Type.SHARED	petsc4py.PETSc.Vec.Type-class.html#SHARED
 petsc4py.PETSc.Vec.Type.VIENNACL	petsc4py.PETSc.Vec.Type-class.html#VIENNACL
 petsc4py.PETSc.Viewer	petsc4py.PETSc.Viewer-class.html
@@ -3002,7 +3130,6 @@ petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.Viewer.createVTK	petsc4py.PETSc.Viewer-class.html#createVTK
 petsc4py.PETSc.Viewer.__new__	petsc4py.PETSc.Viewer-class.html#__new__
 petsc4py.PETSc.Viewer.Format	petsc4py.PETSc.Viewer.Format-class.html
-petsc4py.PETSc.Viewer.setFormat	petsc4py.PETSc.Viewer-class.html#setFormat
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.Viewer.create	petsc4py.PETSc.Viewer-class.html#create
 petsc4py.PETSc.Viewer.STDOUT	petsc4py.PETSc.Viewer-class.html#STDOUT
@@ -3079,6 +3206,7 @@ petsc4py.PETSc.Viewer.Format.DRAW_CONTOUR	petsc4py.PETSc.Viewer.Format-class.htm
 petsc4py.PETSc.Viewer.Format.ASCII_INFO	petsc4py.PETSc.Viewer.Format-class.html#ASCII_INFO
 petsc4py.PETSc.Viewer.Format.ASCII_MATLAB	petsc4py.PETSc.Viewer.Format-class.html#ASCII_MATLAB
 petsc4py.PETSc.Viewer.Format.ASCII_FACTOR_INFO	petsc4py.PETSc.Viewer.Format-class.html#ASCII_FACTOR_INFO
+petsc4py.PETSc.Viewer.Format.ASCII_XML	petsc4py.PETSc.Viewer.Format-class.html#ASCII_XML
 petsc4py.PETSc.Viewer.Format.ASCII_SYMMODU	petsc4py.PETSc.Viewer.Format-class.html#ASCII_SYMMODU
 petsc4py.PETSc.Viewer.Format.HDF5_VIZ	petsc4py.PETSc.Viewer.Format-class.html#HDF5_VIZ
 petsc4py.PETSc.Viewer.Format.ASCII_VTK_CELL	petsc4py.PETSc.Viewer.Format-class.html#ASCII_VTK_CELL
@@ -3170,7 +3298,6 @@ petsc4py.PETSc.Viewer.STDERR	petsc4py.PETSc.Viewer-class.html#STDERR
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.Viewer.pushFormat	petsc4py.PETSc.Viewer-class.html#pushFormat
 petsc4py.PETSc.Viewer.setType	petsc4py.PETSc.Viewer-class.html#setType
-petsc4py.PETSc.Viewer.setFormat	petsc4py.PETSc.Viewer-class.html#setFormat
 petsc4py.PETSc.ViewerHDF5.create	petsc4py.PETSc.ViewerHDF5-class.html#create
 petsc4py.PETSc.Viewer.clearDraw	petsc4py.PETSc.Viewer-class.html#clearDraw
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
diff --git a/docs/apiref/class-tree.html b/docs/apiref/class-tree.html
index 1a8cbf6..9713900 100644
--- a/docs/apiref/class-tree.html
+++ b/docs/apiref/class-tree.html
@@ -102,17 +102,17 @@ interpreter exiting.</em>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.PC.CompositeType-class.html">petsc4py.PETSc.PC.CompositeType</a></strong>
     </li>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">petsc4py.PETSc.SNES.ConvergedReason</a></strong>
+    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">petsc4py.PETSc.KSP.ConvergedReason</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html">petsc4py.PETSc.TS.ConvergedReason</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">petsc4py.PETSc.SNES.ConvergedReason</a></strong>
-    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.DMDA.ElementType-class.html">petsc4py.PETSc.DMDA.ElementType</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.TS.EquationType-class.html">petsc4py.PETSc.TS.EquationType</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html">petsc4py.PETSc.TS.ExactFinalTimeOption</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.TS.ExactFinalTime-class.html">petsc4py.PETSc.TS.ExactFinalTime</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">petsc4py.PETSc.Mat.FactorShiftType</a></strong>
     </li>
@@ -122,6 +122,8 @@ interpreter exiting.</em>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.PC.GASMType-class.html">petsc4py.PETSc.PC.GASMType</a></strong>
     </li>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.Mat.InfoType-class.html">petsc4py.PETSc.Mat.InfoType</a></strong>
+    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.InsertMode-class.html">petsc4py.PETSc.InsertMode</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.DMDA.InterpolationType-class.html">petsc4py.PETSc.DMDA.InterpolationType</a></strong>
@@ -134,16 +136,18 @@ interpreter exiting.</em>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.LogStage-class.html">petsc4py.PETSc.LogStage</a></strong>
     </li>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.PC.MGType-class.html">petsc4py.PETSc.PC.MGType</a></strong>
+    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.LGMap.MapType-class.html">petsc4py.PETSc.LGMap.MapType</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Viewer.Mode-class.html">petsc4py.PETSc.Viewer.Mode</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html">petsc4py.PETSc.SNES.NormSchedule</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.KSP.NormType-class.html">petsc4py.PETSc.KSP.NormType</a></strong>
-    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.NormType-class.html">petsc4py.PETSc.NormType</a></strong>
     </li>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.KSP.NormType-class.html">petsc4py.PETSc.KSP.NormType</a></strong>
+    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Object-class.html">petsc4py.PETSc.Object</a></strong>
     <ul>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.AO-class.html">petsc4py.PETSc.AO</a></strong>
@@ -199,10 +203,10 @@ interpreter exiting.</em>
     </li>
     </ul>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.Vec.Option-class.html">petsc4py.PETSc.Vec.Option</a></strong>
-    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Mat.Option-class.html">petsc4py.PETSc.Mat.Option</a></strong>
     </li>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.Vec.Option-class.html">petsc4py.PETSc.Vec.Option</a></strong>
+    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Options-class.html">petsc4py.PETSc.Options</a></strong>:
       <em class="summary">Options(prefix=None)</em>
     </li>
@@ -230,30 +234,30 @@ interpreter exiting.</em>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Sys-class.html">petsc4py.PETSc.Sys</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.Vec.Type-class.html">petsc4py.PETSc.Vec.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.TS.Type-class.html">petsc4py.PETSc.TS.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.AO.Type-class.html">petsc4py.PETSc.AO.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.IS.Type-class.html">petsc4py.PETSc.IS.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.SNES.Type-class.html">petsc4py.PETSc.SNES.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.Vec.Type-class.html">petsc4py.PETSc.Vec.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.PC.Type-class.html">petsc4py.PETSc.PC.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.DM.Type-class.html">petsc4py.PETSc.DM.Type</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Viewer.Type-class.html">petsc4py.PETSc.Viewer.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.Mat.Type-class.html">petsc4py.PETSc.Mat.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.PC.Type-class.html">petsc4py.PETSc.PC.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.TS.Type-class.html">petsc4py.PETSc.TS.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.AO.Type-class.html">petsc4py.PETSc.AO.Type</a></strong>
+    </li>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.SF.Type-class.html">petsc4py.PETSc.SF.Type</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.KSP.Type-class.html">petsc4py.PETSc.KSP.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.DM.Type-class.html">petsc4py.PETSc.DM.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.Mat.Type-class.html">petsc4py.PETSc.Mat.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.IS.Type-class.html">petsc4py.PETSc.IS.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.SNES.Type-class.html">petsc4py.PETSc.SNES.Type</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Random.Type-class.html">petsc4py.PETSc.Random.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.SF.Type-class.html">petsc4py.PETSc.SF.Type</a></strong>
-    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc._DMComposite_access-class.html" onclick="show_private();">petsc4py.PETSc._DMComposite_access</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">petsc4py.PETSc._DMDA_Vec_array</a></strong>
@@ -302,7 +306,7 @@ Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a>
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/class_hierarchy_for__dmcomposi.png b/docs/apiref/class_hierarchy_for__dmcomposi.png
index 8a2fea9..f4f102d 100644
Binary files a/docs/apiref/class_hierarchy_for__dmcomposi.png and b/docs/apiref/class_hierarchy_for__dmcomposi.png differ
diff --git a/docs/apiref/class_hierarchy_for__dmda_vec_.png b/docs/apiref/class_hierarchy_for__dmda_vec_.png
index de84000..e472977 100644
Binary files a/docs/apiref/class_hierarchy_for__dmda_vec_.png and b/docs/apiref/class_hierarchy_for__dmda_vec_.png differ
diff --git a/docs/apiref/class_hierarchy_for__is_buffer.png b/docs/apiref/class_hierarchy_for__is_buffer.png
index 9841ea3..555383d 100644
Binary files a/docs/apiref/class_hierarchy_for__is_buffer.png and b/docs/apiref/class_hierarchy_for__is_buffer.png differ
diff --git a/docs/apiref/class_hierarchy_for__mat_stenc.png b/docs/apiref/class_hierarchy_for__mat_stenc.png
index 3f8d0c1..4ca8468 100644
Binary files a/docs/apiref/class_hierarchy_for__mat_stenc.png and b/docs/apiref/class_hierarchy_for__mat_stenc.png differ
diff --git a/docs/apiref/class_hierarchy_for__vec_buffe.png b/docs/apiref/class_hierarchy_for__vec_buffe.png
index 1f0f006..cb5c929 100644
Binary files a/docs/apiref/class_hierarchy_for__vec_buffe.png and b/docs/apiref/class_hierarchy_for__vec_buffe.png differ
diff --git a/docs/apiref/class_hierarchy_for__vec_local.png b/docs/apiref/class_hierarchy_for__vec_local.png
index 3d4edba..961b56b 100644
Binary files a/docs/apiref/class_hierarchy_for__vec_local.png and b/docs/apiref/class_hierarchy_for__vec_local.png differ
diff --git a/docs/apiref/class_hierarchy_for_ao.png b/docs/apiref/class_hierarchy_for_ao.png
index 1561871..289ef8a 100644
Binary files a/docs/apiref/class_hierarchy_for_ao.png and b/docs/apiref/class_hierarchy_for_ao.png differ
diff --git a/docs/apiref/class_hierarchy_for_asmtype.png b/docs/apiref/class_hierarchy_for_asmtype.png
index 2934b90..2e8b1cc 100644
Binary files a/docs/apiref/class_hierarchy_for_asmtype.png and b/docs/apiref/class_hierarchy_for_asmtype.png differ
diff --git a/docs/apiref/class_hierarchy_for_assemblyty.png b/docs/apiref/class_hierarchy_for_assemblyty.png
index 88cfb58..bdb4778 100644
Binary files a/docs/apiref/class_hierarchy_for_assemblyty.png and b/docs/apiref/class_hierarchy_for_assemblyty.png differ
diff --git a/docs/apiref/class_hierarchy_for_boundaryty.png b/docs/apiref/class_hierarchy_for_boundaryty.png
index 1c33706..89333a8 100644
Binary files a/docs/apiref/class_hierarchy_for_boundaryty.png and b/docs/apiref/class_hierarchy_for_boundaryty.png differ
diff --git a/docs/apiref/class_hierarchy_for_comm.png b/docs/apiref/class_hierarchy_for_comm.png
index 898af97..49b324f 100644
Binary files a/docs/apiref/class_hierarchy_for_comm.png and b/docs/apiref/class_hierarchy_for_comm.png differ
diff --git a/docs/apiref/class_hierarchy_for_compositet.png b/docs/apiref/class_hierarchy_for_compositet.png
index 3d4d09c..32b495f 100644
Binary files a/docs/apiref/class_hierarchy_for_compositet.png and b/docs/apiref/class_hierarchy_for_compositet.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_dm.png b/docs/apiref/class_hierarchy_for_dm.png
index 0d029a0..0763c86 100644
Binary files a/docs/apiref/class_hierarchy_for_dm.png and b/docs/apiref/class_hierarchy_for_dm.png differ
diff --git a/docs/apiref/class_hierarchy_for_dmcomposit.png b/docs/apiref/class_hierarchy_for_dmcomposit.png
index d6e55d9..aea8679 100644
Binary files a/docs/apiref/class_hierarchy_for_dmcomposit.png and b/docs/apiref/class_hierarchy_for_dmcomposit.png differ
diff --git a/docs/apiref/class_hierarchy_for_dmda.png b/docs/apiref/class_hierarchy_for_dmda.png
index f891d21..f1a1aaa 100644
Binary files a/docs/apiref/class_hierarchy_for_dmda.png and b/docs/apiref/class_hierarchy_for_dmda.png differ
diff --git a/docs/apiref/class_hierarchy_for_dmplex.png b/docs/apiref/class_hierarchy_for_dmplex.png
index cbfc37a..954a61e 100644
Binary files a/docs/apiref/class_hierarchy_for_dmplex.png and b/docs/apiref/class_hierarchy_for_dmplex.png differ
diff --git a/docs/apiref/class_hierarchy_for_dmshell.png b/docs/apiref/class_hierarchy_for_dmshell.png
index e6eb793..f1c7613 100644
Binary files a/docs/apiref/class_hierarchy_for_dmshell.png and b/docs/apiref/class_hierarchy_for_dmshell.png differ
diff --git a/docs/apiref/class_hierarchy_for_elementtyp.png b/docs/apiref/class_hierarchy_for_elementtyp.png
index 3bda95d..ee2788f 100644
Binary files a/docs/apiref/class_hierarchy_for_elementtyp.png and b/docs/apiref/class_hierarchy_for_elementtyp.png differ
diff --git a/docs/apiref/class_hierarchy_for_equationty.png b/docs/apiref/class_hierarchy_for_equationty.png
index 5425e9d..9cfe768 100644
Binary files a/docs/apiref/class_hierarchy_for_equationty.png and b/docs/apiref/class_hierarchy_for_equationty.png differ
diff --git a/docs/apiref/class_hierarchy_for_error.png b/docs/apiref/class_hierarchy_for_error.png
index 2d868b9..d2590ef 100644
Binary files a/docs/apiref/class_hierarchy_for_error.png and b/docs/apiref/class_hierarchy_for_error.png differ
diff --git a/docs/apiref/class_hierarchy_for_exactfinal.png b/docs/apiref/class_hierarchy_for_exactfinal.png
index 099b6f5..d713d4b 100644
Binary files a/docs/apiref/class_hierarchy_for_exactfinal.png and b/docs/apiref/class_hierarchy_for_exactfinal.png differ
diff --git a/docs/apiref/class_hierarchy_for_factorshif.png b/docs/apiref/class_hierarchy_for_factorshif.png
index 29cf5da..5442156 100644
Binary files a/docs/apiref/class_hierarchy_for_factorshif.png and b/docs/apiref/class_hierarchy_for_factorshif.png differ
diff --git a/docs/apiref/class_hierarchy_for_format.png b/docs/apiref/class_hierarchy_for_format.png
index ebaf96e..eb7f3d9 100644
Binary files a/docs/apiref/class_hierarchy_for_format.png and b/docs/apiref/class_hierarchy_for_format.png differ
diff --git a/docs/apiref/class_hierarchy_for_gamgtype.png b/docs/apiref/class_hierarchy_for_gamgtype.png
index 6fb2937..52fef1e 100644
Binary files a/docs/apiref/class_hierarchy_for_gamgtype.png and b/docs/apiref/class_hierarchy_for_gamgtype.png differ
diff --git a/docs/apiref/class_hierarchy_for_gasmtype.png b/docs/apiref/class_hierarchy_for_gasmtype.png
index b8a8ec7..ace778a 100644
Binary files a/docs/apiref/class_hierarchy_for_gasmtype.png and b/docs/apiref/class_hierarchy_for_gasmtype.png differ
diff --git a/docs/apiref/class_hierarchy_for_infotype.png b/docs/apiref/class_hierarchy_for_infotype.png
new file mode 100644
index 0000000..f635c3a
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_infotype.png differ
diff --git a/docs/apiref/class_hierarchy_for_insertmode.png b/docs/apiref/class_hierarchy_for_insertmode.png
index e5a21ca..9253607 100644
Binary files a/docs/apiref/class_hierarchy_for_insertmode.png and b/docs/apiref/class_hierarchy_for_insertmode.png differ
diff --git a/docs/apiref/class_hierarchy_for_interpolat.png b/docs/apiref/class_hierarchy_for_interpolat.png
index 6a64ef2..33343dd 100644
Binary files a/docs/apiref/class_hierarchy_for_interpolat.png and b/docs/apiref/class_hierarchy_for_interpolat.png differ
diff --git a/docs/apiref/class_hierarchy_for_is.png b/docs/apiref/class_hierarchy_for_is.png
index cdbfbf6..1a18e2d 100644
Binary files a/docs/apiref/class_hierarchy_for_is.png and b/docs/apiref/class_hierarchy_for_is.png differ
diff --git a/docs/apiref/class_hierarchy_for_ksp.png b/docs/apiref/class_hierarchy_for_ksp.png
index ed50d28..7690057 100644
Binary files a/docs/apiref/class_hierarchy_for_ksp.png and b/docs/apiref/class_hierarchy_for_ksp.png differ
diff --git a/docs/apiref/class_hierarchy_for_lgmap.png b/docs/apiref/class_hierarchy_for_lgmap.png
index a320256..27efa3e 100644
Binary files a/docs/apiref/class_hierarchy_for_lgmap.png and b/docs/apiref/class_hierarchy_for_lgmap.png differ
diff --git a/docs/apiref/class_hierarchy_for_log.png b/docs/apiref/class_hierarchy_for_log.png
index 7e5d361..057e48a 100644
Binary files a/docs/apiref/class_hierarchy_for_log.png and b/docs/apiref/class_hierarchy_for_log.png differ
diff --git a/docs/apiref/class_hierarchy_for_logclass.png b/docs/apiref/class_hierarchy_for_logclass.png
index 5f8f3f1..46057bd 100644
Binary files a/docs/apiref/class_hierarchy_for_logclass.png and b/docs/apiref/class_hierarchy_for_logclass.png differ
diff --git a/docs/apiref/class_hierarchy_for_logevent.png b/docs/apiref/class_hierarchy_for_logevent.png
index 9b13c94..fb3982d 100644
Binary files a/docs/apiref/class_hierarchy_for_logevent.png and b/docs/apiref/class_hierarchy_for_logevent.png differ
diff --git a/docs/apiref/class_hierarchy_for_logstage.png b/docs/apiref/class_hierarchy_for_logstage.png
index 9400a97..df81513 100644
Binary files a/docs/apiref/class_hierarchy_for_logstage.png and b/docs/apiref/class_hierarchy_for_logstage.png differ
diff --git a/docs/apiref/class_hierarchy_for_maptype.png b/docs/apiref/class_hierarchy_for_maptype.png
index 7e3f9cd..532abc4 100644
Binary files a/docs/apiref/class_hierarchy_for_maptype.png and b/docs/apiref/class_hierarchy_for_maptype.png differ
diff --git a/docs/apiref/class_hierarchy_for_mat.png b/docs/apiref/class_hierarchy_for_mat.png
index 98f4cbe..de65e90 100644
Binary files a/docs/apiref/class_hierarchy_for_mat.png and b/docs/apiref/class_hierarchy_for_mat.png differ
diff --git a/docs/apiref/class_hierarchy_for_mgtype.png b/docs/apiref/class_hierarchy_for_mgtype.png
new file mode 100644
index 0000000..474aeb6
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_mgtype.png differ
diff --git a/docs/apiref/class_hierarchy_for_mode.png b/docs/apiref/class_hierarchy_for_mode.png
index 63295ef..18672d4 100644
Binary files a/docs/apiref/class_hierarchy_for_mode.png and b/docs/apiref/class_hierarchy_for_mode.png differ
diff --git a/docs/apiref/class_hierarchy_for_normschedu.png b/docs/apiref/class_hierarchy_for_normschedu.png
index 0b4eb32..932e9ea 100644
Binary files a/docs/apiref/class_hierarchy_for_normschedu.png and b/docs/apiref/class_hierarchy_for_normschedu.png differ
diff --git a/docs/apiref/class_hierarchy_for_normtype.png b/docs/apiref/class_hierarchy_for_normtype.png
index a8e6fcb..7a3468e 100644
Binary files a/docs/apiref/class_hierarchy_for_normtype.png and b/docs/apiref/class_hierarchy_for_normtype.png differ
diff --git a/docs/apiref/class_hierarchy_for_normtype_2.png b/docs/apiref/class_hierarchy_for_normtype_2.png
index a8e6fcb..7a3468e 100644
Binary files a/docs/apiref/class_hierarchy_for_normtype_2.png and b/docs/apiref/class_hierarchy_for_normtype_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_nullspace.png b/docs/apiref/class_hierarchy_for_nullspace.png
index 8222f2d..57fc0c6 100644
Binary files a/docs/apiref/class_hierarchy_for_nullspace.png and b/docs/apiref/class_hierarchy_for_nullspace.png differ
diff --git a/docs/apiref/class_hierarchy_for_object.png b/docs/apiref/class_hierarchy_for_object.png
index d4fed6e..fe6246a 100644
Binary files a/docs/apiref/class_hierarchy_for_object.png and b/docs/apiref/class_hierarchy_for_object.png differ
diff --git a/docs/apiref/class_hierarchy_for_option.png b/docs/apiref/class_hierarchy_for_option.png
index 27b3b29..35e1c07 100644
Binary files a/docs/apiref/class_hierarchy_for_option.png and b/docs/apiref/class_hierarchy_for_option.png differ
diff --git a/docs/apiref/class_hierarchy_for_option_2.png b/docs/apiref/class_hierarchy_for_option_2.png
index 27b3b29..35e1c07 100644
Binary files a/docs/apiref/class_hierarchy_for_option_2.png and b/docs/apiref/class_hierarchy_for_option_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_options.png b/docs/apiref/class_hierarchy_for_options.png
index 84020b6..61a0b46 100644
Binary files a/docs/apiref/class_hierarchy_for_options.png and b/docs/apiref/class_hierarchy_for_options.png differ
diff --git a/docs/apiref/class_hierarchy_for_orderingty.png b/docs/apiref/class_hierarchy_for_orderingty.png
index 99b1130..1c4ae5e 100644
Binary files a/docs/apiref/class_hierarchy_for_orderingty.png and b/docs/apiref/class_hierarchy_for_orderingty.png differ
diff --git a/docs/apiref/class_hierarchy_for_partitione.png b/docs/apiref/class_hierarchy_for_partitione.png
index 5d18904..525e78a 100644
Binary files a/docs/apiref/class_hierarchy_for_partitione.png and b/docs/apiref/class_hierarchy_for_partitione.png differ
diff --git a/docs/apiref/class_hierarchy_for_partitione_2.png b/docs/apiref/class_hierarchy_for_partitione_2.png
index f85da29..2d6142c 100644
Binary files a/docs/apiref/class_hierarchy_for_partitione_2.png and b/docs/apiref/class_hierarchy_for_partitione_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_pc.png b/docs/apiref/class_hierarchy_for_pc.png
index 50c9d08..181a53e 100644
Binary files a/docs/apiref/class_hierarchy_for_pc.png and b/docs/apiref/class_hierarchy_for_pc.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_random.png b/docs/apiref/class_hierarchy_for_random.png
index 7e1f980..741857a 100644
Binary files a/docs/apiref/class_hierarchy_for_random.png and b/docs/apiref/class_hierarchy_for_random.png differ
diff --git a/docs/apiref/class_hierarchy_for_scatter.png b/docs/apiref/class_hierarchy_for_scatter.png
index b5533b6..54c7320 100644
Binary files a/docs/apiref/class_hierarchy_for_scatter.png and b/docs/apiref/class_hierarchy_for_scatter.png differ
diff --git a/docs/apiref/class_hierarchy_for_scattermod.png b/docs/apiref/class_hierarchy_for_scattermod.png
index e5b392c..965a1e9 100644
Binary files a/docs/apiref/class_hierarchy_for_scattermod.png and b/docs/apiref/class_hierarchy_for_scattermod.png differ
diff --git a/docs/apiref/class_hierarchy_for_schurfactt.png b/docs/apiref/class_hierarchy_for_schurfactt.png
index 746ad42..b52f9c2 100644
Binary files a/docs/apiref/class_hierarchy_for_schurfactt.png and b/docs/apiref/class_hierarchy_for_schurfactt.png differ
diff --git a/docs/apiref/class_hierarchy_for_schurprety.png b/docs/apiref/class_hierarchy_for_schurprety.png
index 3c83287..a0cf3be 100644
Binary files a/docs/apiref/class_hierarchy_for_schurprety.png and b/docs/apiref/class_hierarchy_for_schurprety.png differ
diff --git a/docs/apiref/class_hierarchy_for_section.png b/docs/apiref/class_hierarchy_for_section.png
index 0fed4ca..d2ebbe9 100644
Binary files a/docs/apiref/class_hierarchy_for_section.png and b/docs/apiref/class_hierarchy_for_section.png differ
diff --git a/docs/apiref/class_hierarchy_for_sf.png b/docs/apiref/class_hierarchy_for_sf.png
index 6175ee9..5b26897 100644
Binary files a/docs/apiref/class_hierarchy_for_sf.png and b/docs/apiref/class_hierarchy_for_sf.png differ
diff --git a/docs/apiref/class_hierarchy_for_side.png b/docs/apiref/class_hierarchy_for_side.png
index 87934ff..5625602 100644
Binary files a/docs/apiref/class_hierarchy_for_side.png and b/docs/apiref/class_hierarchy_for_side.png differ
diff --git a/docs/apiref/class_hierarchy_for_size.png b/docs/apiref/class_hierarchy_for_size.png
index 6c05e22..d7fee28 100644
Binary files a/docs/apiref/class_hierarchy_for_size.png and b/docs/apiref/class_hierarchy_for_size.png differ
diff --git a/docs/apiref/class_hierarchy_for_snes.png b/docs/apiref/class_hierarchy_for_snes.png
index 885dd26..dd3c5d4 100644
Binary files a/docs/apiref/class_hierarchy_for_snes.png and b/docs/apiref/class_hierarchy_for_snes.png differ
diff --git a/docs/apiref/class_hierarchy_for_sortype.png b/docs/apiref/class_hierarchy_for_sortype.png
index e7d5d04..ae6f9d1 100644
Binary files a/docs/apiref/class_hierarchy_for_sortype.png and b/docs/apiref/class_hierarchy_for_sortype.png differ
diff --git a/docs/apiref/class_hierarchy_for_stenciltyp.png b/docs/apiref/class_hierarchy_for_stenciltyp.png
index 0282a55..f9b1ad2 100644
Binary files a/docs/apiref/class_hierarchy_for_stenciltyp.png and b/docs/apiref/class_hierarchy_for_stenciltyp.png differ
diff --git a/docs/apiref/class_hierarchy_for_structure.png b/docs/apiref/class_hierarchy_for_structure.png
index 117f976..040e730 100644
Binary files a/docs/apiref/class_hierarchy_for_structure.png and b/docs/apiref/class_hierarchy_for_structure.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_tao.png b/docs/apiref/class_hierarchy_for_tao.png
index 2cb81a7..efd32b9 100644
Binary files a/docs/apiref/class_hierarchy_for_tao.png and b/docs/apiref/class_hierarchy_for_tao.png differ
diff --git a/docs/apiref/class_hierarchy_for_ts.png b/docs/apiref/class_hierarchy_for_ts.png
index 44c1ff7..059e2de 100644
Binary files a/docs/apiref/class_hierarchy_for_ts.png and b/docs/apiref/class_hierarchy_for_ts.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_11.png b/docs/apiref/class_hierarchy_for_type_11.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_11.png and b/docs/apiref/class_hierarchy_for_type_11.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_12.png b/docs/apiref/class_hierarchy_for_type_12.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_12.png and b/docs/apiref/class_hierarchy_for_type_12.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_vec.png b/docs/apiref/class_hierarchy_for_vec.png
index 9cc4f6e..b97b63f 100644
Binary files a/docs/apiref/class_hierarchy_for_vec.png and b/docs/apiref/class_hierarchy_for_vec.png differ
diff --git a/docs/apiref/class_hierarchy_for_viewer.png b/docs/apiref/class_hierarchy_for_viewer.png
index 100dac8..0bbdfe1 100644
Binary files a/docs/apiref/class_hierarchy_for_viewer.png and b/docs/apiref/class_hierarchy_for_viewer.png differ
diff --git a/docs/apiref/class_hierarchy_for_viewerhdf5.png b/docs/apiref/class_hierarchy_for_viewerhdf5.png
index a1bd430..a4f9c54 100644
Binary files a/docs/apiref/class_hierarchy_for_viewerhdf5.png and b/docs/apiref/class_hierarchy_for_viewerhdf5.png differ
diff --git a/docs/apiref/help.html b/docs/apiref/help.html
index 04e140c..08da1d2 100644
--- a/docs/apiref/help.html
+++ b/docs/apiref/help.html
@@ -256,7 +256,7 @@ page was last updated. </p>
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 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 829a4f0..324df65 100644
--- a/docs/apiref/identifier-index.html
+++ b/docs/apiref/identifier-index.html
@@ -95,9 +95,9 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#A">A</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#ALPHA">ALPHA</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#ALPHA2">ALPHA2</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_INDEX">ASCII_INDEX</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_INFO">ASCII_INFO</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -105,7 +105,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#ALWAYS">ALWAYS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_INFO">ASCII_INFO</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_INFO_DETAIL">ASCII_INFO_DETAIL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -113,7 +113,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.OrderingType-class.html#AMD">AMD</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_INFO_DETAIL">ASCII_INFO_DETAIL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_LATEX">ASCII_LATEX</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -121,7 +121,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#ANDERSON">ANDERSON</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_LATEX">ASCII_LATEX</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_MATHEMATICA">ASCII_MATHEMATICA</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -129,7 +129,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html">AO</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_MATHEMATICA">ASCII_MATHEMATICA</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_MATLAB">ASCII_MATLAB</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -137,7 +137,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#app2petsc">app2petsc()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_MATLAB">ASCII_MATLAB</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_MATRIXMARKET">ASCII_MATRIXMARKET</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -145,7 +145,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#appctx">appctx</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_MATRIXMARKET">ASCII_MATRIXMARKET</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_PCICE">ASCII_PCICE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -153,7 +153,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#appctx">appctx</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_PCICE">ASCII_PCICE</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_PYTHON">ASCII_PYTHON</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -161,7 +161,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#appctx">appctx</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_PYTHON">ASCII_PYTHON</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_SYMMODU">ASCII_SYMMODU</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -169,7 +169,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#appctx">appctx</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_SYMMODU">ASCII_SYMMODU</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_VTK">ASCII_VTK</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -177,7 +177,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#APPEND">APPEND</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_VTK">ASCII_VTK</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_VTK_CELL">ASCII_VTK_CELL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -185,7 +185,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#APPEND_UPDATE">APPEND_UPDATE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_VTK_CELL">ASCII_VTK_CELL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_VTK_COORDS">ASCII_VTK_COORDS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -193,7 +193,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#apply">apply()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_VTK_COORDS">ASCII_VTK_COORDS</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_XML">ASCII_XML</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -285,31 +285,31 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.AO.Type-class.html#ADVANCED">ADVANCED</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.AO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.MGType-class.html#ADDITIVE">ADDITIVE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.MGType-class.html">MGType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#array">array</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#assemblyEnd">assemblyEnd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GAMGType-class.html#AGG">AGG</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.GAMGType-class.html">GAMGType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.AO.Type-class.html#ADVANCED">ADVANCED</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.AO.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#array">array</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.AssemblyType-class.html">AssemblyType</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJ">AIJ</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GAMGType-class.html#AGG">AGG</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.GAMGType-class.html">GAMGType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#array">array</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#atol">atol</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJCRL">AIJCRL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJ">AIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#array_r">array_r</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
@@ -317,7 +317,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJCUSP">AIJCUSP</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJCRL">AIJCRL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#array_w">array_w</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
@@ -325,7 +325,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJCUSPARSE">AIJCUSPARSE</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJCUSP">AIJCUSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#ASCII">ASCII</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
@@ -333,7 +333,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJPERM">AIJPERM</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJCUSPARSE">AIJCUSPARSE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#ASCII">ASCII()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
@@ -341,7 +341,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJPTHREAD">AIJPTHREAD</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJPERM">AIJPERM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_COMMON">ASCII_COMMON</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
@@ -372,6 +372,13 @@
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#aypx">aypx()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#ALPHA">ALPHA</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#ASCII_INDEX">ASCII_INDEX</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</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="B">B</a></h2></td>
@@ -382,87 +389,87 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#begin">begin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#block_size">block_size</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#block_size">block_size</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#BAIJ">BAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#BEULER">BEULER</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#block_size">block_size</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#block_sizes">block_sizes</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#Barrier">Barrier()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#BFBT">BFBT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#block_sizes">block_sizes</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#BLOCKMAT">BLOCKMAT</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#barrierBegin">barrierBegin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#BICG">BICG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#BLOCKMAT">BLOCKMAT</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#BMRM">BMRM</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#barrierEnd">barrierEnd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#BICGSTABCUSP">BICGSTABCUSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#BMRM">BMRM</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#boundary_type">boundary_type</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO.Type-class.html#BASIC">BASIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#BINARY">BINARY</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#boundary_type">boundary_type</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.ASMType-class.html#BASIC">BASIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.ASMType-class.html">ASMType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#BINARY">BINARY()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.StencilType-class.html#BOX">BOX</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA.StencilType-class.html">StencilType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GASMType-class.html#BASIC">BASIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.GASMType-class.html">GASMType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#BINARY_MATLAB">BINARY_MATLAB</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.StencilType-class.html#BOX">BOX</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA.StencilType-class.html">StencilType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#BQPIP">BQPIP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF.Type-class.html#BASIC">BASIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SF.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#BJACOBI">BJACOBI</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#BQPIP">BQPIP</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#BSTRM">BSTRM</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#BCGS">BCGS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#BLMVM">BLMVM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#BSTRM">BSTRM</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#buffer">buffer</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#BCGSL">BCGSL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS.Type-class.html#BLOCK">BLOCK</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#buffer">buffer</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#buffer_r">buffer_r</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
@@ -470,32 +477,38 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#block_indices">block_indices</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#buffer_r">buffer_r</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#buffer_w">buffer_w</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#BE">BE</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#BDF">BDF</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#block_info">block_info</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#buffer_w">buffer_w</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#buildResidual">buildResidual()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#begin">begin()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#BE">BE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#block_size">block_size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#buildResidual">buildResidual()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#buildSolution">buildSolution()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#begin">begin()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#begin">begin()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#block_size">block_size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#buildSolution">buildSolution()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#begin">begin()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#block_size">block_size</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"> </td>
 </tr>
 </table>
 </td></tr>
@@ -505,78 +518,86 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Mat_Stencil-class.html#c">c</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Mat_Stencil-class.html" onclick="show_private();">_Mat_Stencil</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#converged">converged</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createAIJWithArrays">createAIJWithArrays()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#converged">converged</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createAIJCRL">createAIJCRL()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#callConvergenceTest">callConvergenceTest()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ATOL">CONVERGED_ATOL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#createASCII">createASCII()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#converged">converged</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createAIJWithArrays">createAIJWithArrays()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#callConvergenceTest">callConvergenceTest()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ATOL_NORMAL">CONVERGED_ATOL_NORMAL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createBAIJ">createBAIJ()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#converged">converged</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#createASCII">createASCII()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_CG_CONSTRAINED">CONVERGED_CG_CONSTRAINED</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ATOL">CONVERGED_ATOL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#createBasic">createBasic()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createBAIJ">createBAIJ()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_CG_NEG_CURVE">CONVERGED_CG_NEG_CURVE</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ATOL_NORMAL">CONVERGED_ATOL_NORMAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#createBinary">createBinary()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#createBasic">createBasic()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_FATOL">CONVERGED_FATOL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#createBlock">createBlock()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_CG_CONSTRAINED">CONVERGED_CG_CONSTRAINED</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#createBinary">createBinary()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_FNORM_ABS">CONVERGED_FNORM_ABS</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createBoxMesh">createBoxMesh()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_CG_NEG_CURVE">CONVERGED_CG_NEG_CURVE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#createBlock">createBlock()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#CARTESIAN">CARTESIAN</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_FNORM_RELATIVE">CONVERGED_FNORM_RELATIVE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createCGNS">createCGNS()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_EVENT">CONVERGED_EVENT</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createBoxMesh">createBoxMesh()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#CG">CG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_FRTOL">CONVERGED_FRTOL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createCGNSFromFile">createCGNSFromFile()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_FNORM_ABS">CONVERGED_FNORM_ABS</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createCGNS">createCGNS()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#CG">CG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_FNORM_RELATIVE">CONVERGED_FNORM_RELATIVE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createCGNSFromFile">createCGNSFromFile()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#CGLS">CGLS</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_GATOL">CONVERGED_GATOL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createCoarsePointIS">createCoarsePointIS()</a><br />
@@ -631,55 +652,55 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#Class">Class()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#chop">chop()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createExodusFromFile">createExodusFromFile()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GAMGType-class.html#CLASSICAL">CLASSICAL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.GAMGType-class.html">GAMGType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#Class">Class()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ITS">CONVERGED_ITS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createFromCellList">createFromCellList()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#classid">classid</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GAMGType-class.html#CLASSICAL">CLASSICAL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.GAMGType-class.html">GAMGType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_ITS">CONVERGED_ITS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#createGeneral">createGeneral()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#clearDraw">clearDraw()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#classid">classid</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_ITS">CONVERGED_ITS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#createGhost">createGhost()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#clearLabelStratum">clearLabelStratum()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#clear">clear()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_MINF">CONVERGED_MINF</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#createGhostWithArray">createGhostWithArray()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#clearLabelValue">clearLabelValue()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#clearDraw">clearDraw()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_RTOL">CONVERGED_RTOL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#createGlobalSection">createGlobalSection()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#clone">clone()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#clearLabelStratum">clearLabelStratum()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_RTOL_NORMAL">CONVERGED_RTOL_NORMAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
@@ -687,352 +708,360 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#clone">clone()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#clearLabelValue">clearLabelValue()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_SNORM_RELATIVE">CONVERGED_SNORM_RELATIVE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createGmsh">createGmsh()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#CN">CN</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#clone">clone()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_STEP_LENGTH">CONVERGED_STEP_LENGTH</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#createHDF5">createHDF5()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#cnorm">cnorm</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#clone">clone()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_STEPTOL">CONVERGED_STEPTOL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createHexBoxMesh">createHexBoxMesh()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#coarsen">coarsen()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#clone">clone()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_TIME">CONVERGED_TIME</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#coarsenHierarchy">coarsenHierarchy()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#CN">CN</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_TR_DELTA">CONVERGED_TR_DELTA</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#createInterpolation">createInterpolation()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html">Comm</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#cnorm">cnorm</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_USER">CONVERGED_USER</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#createInverse">createInverse()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#comm">comm</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#coarsen">coarsen()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_USER">CONVERGED_USER</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#createIS">createIS()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#COMM_NULL">COMM_NULL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createLabel">createLabel()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#coarsenHierarchy">coarsenHierarchy()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#createLabel">createLabel()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#COMM_SELF">COMM_SELF</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html">Comm</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#createLocalVec">createLocalVec()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#COMM_WORLD">COMM_WORLD</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#convert">convert()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#comm">comm</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createLRC">createLRC()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#complement">complement()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#convert">convert()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#COMM_NULL">COMM_NULL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#convert">convert()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#createMapping">createMapping()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#compose">compose()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#copy">copy()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#COMM_SELF">COMM_SELF</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#convert">convert()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#createMat">createMat()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#COMPOSITE">COMPOSITE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#copy">copy()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#COMM_WORLD">COMM_WORLD</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#copy">copy()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#createMemoryScalable">createMemoryScalable()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#COMPOSITE">COMPOSITE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#copy">copy()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#complement">complement()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#copy">copy()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#createMPI">createMPI()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#COMPOSITE">COMPOSITE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#copy">copy()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#compose">compose()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#copy">copy()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#createMPIIO">createMPIIO()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#COMPOSITE">COMPOSITE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#corners">corners</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#COMPOSITE">COMPOSITE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#copy">copy()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#createNaturalVec">createNaturalVec()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#CP">CP</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#COMPOSITE">COMPOSITE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#corners">corners</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createNest">createNest()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#computeCellGeometryFVM">computeCellGeometryFVM()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#CR">CR</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#COMPOSITE">COMPOSITE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#CP">CP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#createNest">createNest()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeConstraints">computeConstraints()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#CRANK_NICOLSON">CRANK_NICOLSON</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#COMPOSITE">COMPOSITE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#CR">CR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#createNetCDF">createNetCDF()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeDualVariables">computeDualVariables()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#create">create()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#CRANK_NICOLSON">CRANK_NICOLSON</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createNormal">createNormal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#computeEigenvalues">computeEigenvalues()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#computeCellGeometryFVM">computeCellGeometryFVM()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#create">create()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createPointNumbering">createPointNumbering()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeConstraints">computeConstraints()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#createPython">createPython()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#computeExtremeSingularValues">computeExtremeSingularValues()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeDualVariables">computeDualVariables()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createPython">createPython()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#computeFunction">computeFunction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#computeEigenvalues">computeEigenvalues()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#createPython">createPython()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeGradient">computeGradient()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#computeExtremeSingularValues">computeExtremeSingularValues()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#createPython">createPython()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeHessian">computeHessian()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#computeFunction">computeFunction()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#createPython">createPython()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeIFunction">computeIFunction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeGradient">computeGradient()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#createRigidBody">createRigidBody()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeIJacobian">computeIJacobian()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeHessian">computeHessian()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createSBAIJ">createSBAIJ()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#computeJacobian">computeJacobian()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeIFunction">computeIFunction()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createScatter">createScatter()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeJacobian">computeJacobian()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeIJacobian">computeIJacobian()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createSection">createSection()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#computeObjective">computeObjective()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#computeJacobian">computeJacobian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#create">create()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#create">create()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#createSeq">createSeq()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeObjective">computeObjective()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeJacobian">computeJacobian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#create">create()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#create">create()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#createSF">createSF()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeObjectiveGradient">computeObjectiveGradient()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#computeObjective">computeObjective()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#create">create()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#createShared">createShared()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeObjective">computeObjective()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#createShared">createShared()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createSquareBoundary">createSquareBoundary()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeRHSFunction">computeRHSFunction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeObjectiveGradient">computeObjectiveGradient()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#createSquareBoundary">createSquareBoundary()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#createStride">createStride()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeRHSFunctionLinear">computeRHSFunctionLinear()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeRHSFunction">computeRHSFunction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#createStride">createStride()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createSubMatrix">createSubMatrix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeRHSJacobian">computeRHSJacobian()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeRHSFunctionLinear">computeRHSFunctionLinear()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createSubMatrix">createSubMatrix()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createTranspose">createTranspose()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeRHSJacobianConstant">computeRHSJacobianConstant()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeRHSJacobian">computeRHSJacobian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createTranspose">createTranspose()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createVecRight">createVecRight()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeSeparableObjective">computeSeparableObjective()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeRHSJacobianConstant">computeRHSJacobianConstant()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createVecRight">createVecRight()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createVecs">createVecs()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeVariableBounds">computeVariableBounds()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeSeparableObjective">computeSeparableObjective()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createVecs">createVecs()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#conjugate">conjugate()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#create">create()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#createVTK">createVTK()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#conjugate">conjugate()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#computeVariableBounds">computeVariableBounds()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#create">create()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#createWithArray">createWithArray()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONTINUE_ITERATING">CONTINUE_ITERATING</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#create">create()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#conjugate">conjugate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#create">create()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#ctol">ctol</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#converged">converged</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#createAggregates">createAggregates()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#conjugate">conjugate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#create">create()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#CUSP">CUSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#converged">converged</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createAIJ">createAIJ()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONTINUE_ITERATING">CONTINUE_ITERATING</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#createAggregates">createAggregates()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#converged">converged</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createAIJCRL">createAIJCRL()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#converged">converged</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createAIJ">createAIJ()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
@@ -1172,7 +1201,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html#DEFAULT">DEFAULT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#distributeOverlap">distributeOverlap()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#distributeField">distributeField()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html">DMDA</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
@@ -1180,47 +1209,47 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#DEFAULT">DEFAULT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#diverged">diverged</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#distributeOverlap">distributeOverlap()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#DEFAULT">DEFAULT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#diverged">diverged</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#diverged">diverged</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html">DMShell</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#delValue">delValue()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#diverged">diverged</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#diverged">diverged</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#dof">dof</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#DENSE">DENSE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#diverged">diverged</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#diverged">diverged</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#dot">dot()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#diverged">diverged</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#dotBegin">dotBegin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_BREAKDOWN_BICG">DIVERGED_BREAKDOWN_BICG</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#dotEnd">dotEnd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
@@ -1228,7 +1257,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_DTOL">DIVERGED_DTOL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_BREAKDOWN_BICG">DIVERGED_BREAKDOWN_BICG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#DRAW">DRAW</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
@@ -1236,15 +1265,15 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FNORM_NAN">DIVERGED_FNORM_NAN</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_DTOL">DIVERGED_DTOL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#DRAW">DRAW()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FUNCTION_COUNT">DIVERGED_FUNCTION_COUNT</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FNORM_NAN">DIVERGED_FNORM_NAN</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#DRAW_BASIC">DRAW_BASIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
@@ -1252,7 +1281,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FUNCTION_DOMAIN">DIVERGED_FUNCTION_DOMAIN</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FUNCTION_COUNT">DIVERGED_FUNCTION_COUNT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#DRAW_CONTOUR">DRAW_CONTOUR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
@@ -1260,15 +1289,15 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_INDEFINITE_MAT">DIVERGED_INDEFINITE_MAT</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FUNCTION_DOMAIN">DIVERGED_FUNCTION_DOMAIN</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#DRAW_LG">DRAW_LG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_INDEFINITE_PC">DIVERGED_INDEFINITE_PC</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_INDEFINITE_MAT">DIVERGED_INDEFINITE_MAT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#DRAW_PORTS">DRAW_PORTS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
@@ -1276,50 +1305,57 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_INNER">DIVERGED_INNER</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_INDEFINITE_PC">DIVERGED_INDEFINITE_PC</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap.MapType-class.html#DROP">DROP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap.MapType-class.html">MapType</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#destroy">destroy()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_INNER">DIVERGED_INNER</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#Dup">Dup()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_LINE_SEARCH">DIVERGED_LINE_SEARCH</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#Dup">Dup()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#duplicate">duplicate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_LOCAL_MIN">DIVERGED_LOCAL_MIN</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#duplicate">duplicate()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#duplicate">duplicate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#DIVERGED_LS_FAILURE">DIVERGED_LS_FAILURE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#duplicate">duplicate()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#duplicate">duplicate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_MAX_IT">DIVERGED_MAX_IT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#duplicate">duplicate()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#duplicate">duplicate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_MAX_IT">DIVERGED_MAX_IT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#duplicate">duplicate()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"> </td>
 </tr>
 </table>
 </td></tr>
@@ -1339,7 +1375,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#equal">equal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html">ExactFinalTimeOption</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTime-class.html">ExactFinalTime</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
@@ -1398,15 +1434,15 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#FE">FE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#fortran">fortran</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#FORWARD">FORWARD</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorICC">factorICC()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#FFT">FFT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#FORWARD">FORWARD</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#FORWARD_LOCAL">FORWARD_LOCAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
 </tr>
 <tr>
@@ -1414,48 +1450,48 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#FFTW">FFTW</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#FORWARD_LOCAL">FORWARD_LOCAL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#FORWARD_SWEEP">FORWARD_SWEEP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorLU">factorLU()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#FGMRES">FGMRES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#FORWARD_SWEEP">FORWARD_SWEEP</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#FRB">FRB</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorNumericCholesky">factorNumericCholesky()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Mat_Stencil-class.html#field">field</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Mat_Stencil-class.html" onclick="show_private();">_Mat_Stencil</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#FRB">FRB</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#Free">Free()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorNumericLU">factorNumericLU()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#FIELDSPLIT">FIELDSPLIT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#Free">Free()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#FROBENIUS">FROBENIUS</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">FactorShiftType</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.AssemblyType-class.html#FINAL">FINAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.AssemblyType-class.html">AssemblyType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#FROBENIUS">FROBENIUS</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#ftol">ftol</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorSymbolicCholesky">factorSymbolicCholesky()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.AssemblyType-class.html#FINAL_ASSEMBLY">FINAL_ASSEMBLY</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.AssemblyType-class.html">AssemblyType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#ftol">ftol</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.MGType-class.html#FULL">FULL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.MGType-class.html">MGType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorSymbolicICC">factorSymbolicICC()</a><br />
@@ -1504,6 +1540,13 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#FCG">FCG</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#fortran">fortran</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</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="G">G</a></h2></td>
@@ -1512,23 +1555,23 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#GALERKIN">GALERKIN</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFunction">getFunction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getGhostRanges">getGhostRanges()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getPythonContext">getPythonContext()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#GAMG">GAMG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFunctionEvaluations">getFunctionEvaluations()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getGlobalISs">getGlobalISs()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getPythonContext">getPythonContext()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GAMGType-class.html">GAMGType</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getFunctionValue">getFunctionValue()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getGradient">getGradient()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getPythonContext">getPythonContext()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
@@ -1536,159 +1579,167 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#GASM">GASM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getGhostCorners">getGhostCorners()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getGradientNorm">getGradientNorm()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getRanges">getRanges()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GASMType-class.html">GASMType</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getGhostRanges">getGhostRanges()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#getGraph">getGraph()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#getReal">getReal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#gather">gather()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getGlobalISs">getGlobalISs()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getRefCount">getRefCount()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#getGroup">getGroup()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getRedundantMatrix">getRedundantMatrix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#GCR">GCR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getGradient">getGradient()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getRefinementFactor">getRefinementFactor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getHeightStratum">getHeightStratum()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getRefCount">getRefCount()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS.Type-class.html#GENERAL">GENERAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getGradientNorm">getGradientNorm()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getRefinementLimit">getRefinementLimit()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getHYPREType">getHYPREType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getRefinementFactor">getRefinementFactor()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#generate">generate()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getGradientTolerances">getGradientTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getRefinementUniform">getRefinementUniform()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getIFunction">getIFunction()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getRefinementLimit">getRefinementLimit()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GAMGType-class.html#GEO">GEO</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.GAMGType-class.html">GAMGType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#getGraph">getGraph()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getResidualNorm">getResidualNorm()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getIJacobian">getIJacobian()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getRefinementUniform">getRefinementUniform()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py-module.html#get_include">get_include()</a><br />
 <span class="index-where">(in <a href="petsc4py-module.html">petsc4py</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#getGroup">getGroup()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getRhs">getRhs()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getIndices">getIndices()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getResidualNorm">getResidualNorm()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#Get_rank">Get_rank()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getHeightStratum">getHeightStratum()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getRhs">getRhs()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#getIndices">getIndices()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getRhs">getRhs()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getAccess">getAccess()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getIFunction">getIFunction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getRHSFunction">getRHSFunction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getInertia">getInertia()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getRhs">getRhs()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html#getActive">getActive()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getIJacobian">getIJacobian()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getRHSJacobian">getRHSJacobian()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getInfo">getInfo()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getRHSFunction">getRHSFunction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#getActive">getActive()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getIndices">getIndices()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getRow">getRow()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#getInfo">getInfo()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getRHSJacobian">getRHSJacobian()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#getActive">getActive()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#getIndices">getIndices()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getInfo">getInfo()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getRow">getRow()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#getActiveAll">getActiveAll()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.lib-module.html#getInitArgs">getInitArgs()</a><br />
+<span class="index-where">(in <a href="petsc4py.lib-module.html">petsc4py.lib</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#GETROW_UPPERTRIANGULAR">GETROW_UPPERTRIANGULAR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#getAll">getAll()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getInertia">getInertia()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getInitialGuess">getInitialGuess()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getRowIJ">getRowIJ()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getAlphaParams">getAlphaParams()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getInfo">getInfo()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getInitialGuessKnoll">getInitialGuessKnoll()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getRowSum">getRowSum()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getAO">getAO()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#getInfo">getInfo()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getInitialGuessNonzero">getInitialGuessNonzero()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#getScalar">getScalar()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getAppCtx">getAppCtx()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.lib-module.html#getInitArgs">getInitArgs()</a><br />
-<span class="index-where">(in <a href="petsc4py.lib-module.html">petsc4py.lib</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#getInt">getInt()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getScatter">getScatter()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getAppCtx">getAppCtx()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getInitialGuess">getInitialGuess()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getInterpolationType">getInterpolationType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#getSeed">getSeed()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getAppCtx">getAppCtx()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getInitialGuessKnoll">getInitialGuessKnoll()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#getInterval">getInterval()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#getSize">getSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getAppCtx">getAppCtx()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getInitialGuessNonzero">getInitialGuessNonzero()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getIterationNumber">getIterationNumber()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getSize">getSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
@@ -1696,797 +1747,837 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getAppCtx">getAppCtx()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#getInt">getInt()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getIterationNumber">getIterationNumber()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#getSize">getSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getArray">getArray()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getInterpolationType">getInterpolationType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getIterationNumber">getIterationNumber()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getSize">getSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getASMSubKSP">getASMSubKSP()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#getInterval">getInterval()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getJacobian">getJacobian()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getSize">getSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getAttr">getAttr()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getIterationNumber">getIterationNumber()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getJoin">getJoin()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getSizes">getSizes()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getBlockIndices">getBlockIndices()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getIterationNumber">getIterationNumber()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getKSP">getKSP()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getSizes">getSizes()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#getBlockIndices">getBlockIndices()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getIterationNumber">getIterationNumber()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getKSP">getKSP()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getSizes">getSizes()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#getBlockInfo">getBlockInfo()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getJacobian">getJacobian()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getKSP">getKSP()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getSizes">getSizes()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getBlockSize">getBlockSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getJoin">getJoin()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getKSP">getKSP()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getSNES">getSNES()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getBlockSize">getBlockSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getKSP">getKSP()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getKSPIterations">getKSPIterations()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getSNESFailures">getSNESFailures()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#getBlockSize">getBlockSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getKSP">getKSP()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getLabelIdIS">getLabelIdIS()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getSNESIterations">getSNESIterations()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getBlockSize">getBlockSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getKSP">getKSP()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getLabelName">getLabelName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getSolution">getSolution()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getBlockSize">getBlockSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getKSP">getKSP()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getLabelOutput">getLabelOutput()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getSolution">getSolution()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getBlockSizes">getBlockSizes()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getKSPIterations">getKSPIterations()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getLabelSize">getLabelSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getSolution">getSolution()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#getBool">getBool()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getLabelIdIS">getLabelIdIS()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getLabelValue">getLabelValue()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getSolution">getSolution()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getBoundaryType">getBoundaryType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getLabelName">getLabelName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getSolutionStatus">getSolutionStatus()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getLGMap">getLGMap()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getSolutionNorm">getSolutionNorm()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getBoundingBox">getBoundingBox()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getLabelOutput">getLabelOutput()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getSolutionUpdate">getSolutionUpdate()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getLGMaps">getLGMaps()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getSolutionStatus">getSolutionStatus()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getBuffer">getBuffer()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getLabelSize">getLabelSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getSolveTime">getSolveTime()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getLinearSolveFailures">getLinearSolveFailures()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getSolutionUpdate">getSolutionUpdate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getCellNumbering">getCellNumbering()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getLabelValue">getLabelValue()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getStencil">getStencil()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getLinearSolveIterations">getLinearSolveIterations()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getSolveTime">getSolveTime()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getChart">getChart()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getLGMap">getLGMap()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getStencilType">getStencilType()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getLMVMH0">getLMVMH0()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getStencil">getStencil()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getChart">getChart()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getLGMaps">getLGMaps()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getStencilWidth">getStencilWidth()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getLMVMH0KSP">getLMVMH0KSP()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getStencilType">getStencilType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getClassId">getClassId()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getLinearSolveFailures">getLinearSolveFailures()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getStepFailures">getStepFailures()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getLocalBoundingBox">getLocalBoundingBox()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getStencilWidth">getStencilWidth()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getClassName">getClassName()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getLinearSolveIterations">getLinearSolveIterations()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getLocalISs">getLocalISs()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getStepFailures">getStepFailures()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getStepNumber">getStepNumber()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getColumnIJ">getColumnIJ()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getLocalBoundingBox">getLocalBoundingBox()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getStepRejections">getStepRejections()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getLocalSize">getLocalSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getStepNumber">getStepNumber()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getColumnVector">getColumnVector()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getLocalISs">getLocalISs()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getStorageSize">getStorageSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getLocalSize">getLocalSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getStepRejections">getStepRejections()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getComm">getComm()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getLocalSize">getLocalSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getStratumIS">getStratumIS()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getLocalSize">getLocalSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getStorageSize">getStorageSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getCompositeNumber">getCompositeNumber()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getLocalSize">getLocalSize()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getLocalSubMatrix">getLocalSubMatrix()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getStratumSize">getStratumSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getStratumIS">getStratumIS()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getCompositePC">getCompositePC()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getLocalSize">getLocalSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getStride">getStride()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getMaxDof">getMaxDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getStratumSize">getStratumSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getCompositeSNES">getCompositeSNES()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getLocalSubMatrix">getLocalSubMatrix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#getString">getString()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getMaxFunctionEvaluations">getMaxFunctionEvaluations()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getStride">getStride()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getComputeEigenvalues">getComputeEigenvalues()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getMaxDof">getMaxDof()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getSubMatrix">getSubMatrix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getMaxKSPFailures">getMaxKSPFailures()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#getString">getString()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getComputeSingularValues">getComputeSingularValues()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getMaxFunctionEvaluations">getMaxFunctionEvaluations()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getSubVector">getSubVector()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getMaxSizes">getMaxSizes()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getSubMatrices">getSubMatrices()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getCone">getCone()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getMaxKSPFailures">getMaxKSPFailures()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getMaxStepFailures">getMaxStepFailures()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getSupport">getSupport()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getSubMatrix">getSubMatrix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getConeOrientation">getConeOrientation()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getMaxSizes">getMaxSizes()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getSupportSize">getSupportSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getMaxSteps">getMaxSteps()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getSubVector">getSubVector()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getConeSize">getConeSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getMaxStepFailures">getMaxStepFailures()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getTabLevel">getTabLevel()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getMaxTime">getMaxTime()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getSupport">getSupport()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getConstrainedStorageSize">getConstrainedStorageSize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getMaxSteps">getMaxSteps()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTheta">getTheta()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getMeet">getMeet()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getSupportSize">getSupportSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getConstraintDof">getConstraintDof()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getMaxTime">getMaxTime()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getThetaEndpoint">getThetaEndpoint()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGCoarseSolve">getMGCoarseSolve()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getTabLevel">getTabLevel()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getConstraintIndices">getConstraintIndices()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getMeet">getMeet()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#getTime">getTime()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getConstraintsNorm">getConstraintsNorm()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGCoarseSolve">getMGCoarseSolve()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGInterpolation">getMGInterpolation()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTime">getTime()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTheta">getTheta()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getConstraintTolerances">getConstraintTolerances()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGInterpolation">getMGInterpolation()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGLevels">getMGLevels()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTimeStep">getTimeStep()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getThetaEndpoint">getThetaEndpoint()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGLevels">getMGLevels()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGRestriction">getMGRestriction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#getTimestep">getTimestep()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#getTime">getTime()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGRestriction">getMGRestriction()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGRScale">getMGRScale()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getTolerances">getTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTime">getTime()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGRScale">getMGRScale()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGSmoother">getMGSmoother()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getTolerances">getTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTimeStep">getTimeStep()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGSmoother">getMGSmoother()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGSmootherDown">getMGSmootherDown()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getTolerances">getTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#getTimestep">getTimestep()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getConvergenceHistory">getConvergenceHistory()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGSmootherDown">getMGSmootherDown()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGSmootherUp">getMGSmootherUp()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTolerances">getTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getTolerances">getTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getConvergenceHistory">getConvergenceHistory()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGSmootherUp">getMGSmootherUp()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getMGType">getMGType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getTransitiveClosure">getTransitiveClosure()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getTolerances">getTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getConvergenceTest">getConvergenceTest()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getMonitor">getMonitor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getTolerances">getTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getConvergenceTest">getConvergenceTest()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getMonitor">getMonitor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTolerances">getTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getConvergenceTest">getConvergenceTest()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getMonitor">getMonitor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getTotalSteps">getTotalSteps()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getCoordinateDM">getCoordinateDM()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getMonitor">getMonitor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getTransitiveClosure">getTransitiveClosure()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getCoordinates">getCoordinates()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getCoordinateName">getCoordinateName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#getMulti">getMulti()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getType">getType()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getCoordinates">getCoordinates()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getMumpsCntl">getMumpsCntl()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getCoordinateSection">getCoordinateSection()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html#getName">getName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getMumpsIcntl">getMumpsIcntl()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getCoordinatesLocal">getCoordinatesLocal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#getName">getName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getMumpsInfo">getMumpsInfo()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getCorners">getCorners()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#getName">getName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getMumpsInfog">getMumpsInfog()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#getCPUTime">getCPUTime()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getName">getName()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getMumpsRinfo">getMumpsRinfo()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getType">getType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getCUDAHandle">getCUDAHandle()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getNearNullSpace">getNearNullSpace()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getMumpsRinfog">getMumpsRinfog()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#getDefaultComm">getDefaultComm()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getNestSubVecs">getNestSubVecs()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html#getName">getName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getDefaultGlobalSection">getDefaultGlobalSection()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getNormSchedule">getNormSchedule()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-</tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#getName">getName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+</tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getDefaultSection">getDefaultSection()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getNormType">getNormType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#getName">getName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getDefaultSF">getDefaultSF()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getNPC">getNPC()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getName">getName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getType">getType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getDenseArray">getDenseArray()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getNullSpace">getNullSpace()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getNearNullSpace">getNearNullSpace()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getDenseLocalMatrix">getDenseLocalMatrix()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getNumber">getNumber()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getUpdate">getUpdate()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getNestSubVecs">getNestSubVecs()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getDepth">getDepth()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getNumFields">getNumFields()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getUseEW">getUseEW()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getNormSchedule">getNormSchedule()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getDepthStratum">getDepthStratum()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getNumLabels">getNumLabels()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getUseFD">getUseFD()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getNormType">getNormType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getDiagonal">getDiagonal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getObjective">getObjective()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getNPC">getNPC()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getUseMF">getUseMF()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getUpdate">getUpdate()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getDiagonalBlock">getDiagonalBlock()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getObjectiveTolerances">getObjectiveTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getValue">getValue()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getNullSpace">getNullSpace()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getUseEW">getUseEW()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getDict">getDict()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getOffset">getOffset()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#getValue">getValue()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getNumber">getNumber()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getUseFD">getUseFD()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getDim">getDim()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getOffsetRange">getOffsetRange()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getNumFields">getNumFields()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getValue">getValue()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getUseMF">getUseMF()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getDimension">getDimension()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getOperators">getOperators()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getNumLabels">getNumLabels()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getValue">getValue()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getDM">getDM()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getObjective">getObjective()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#getValue">getValue()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getDM">getDM()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getOffset">getOffset()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getValue">getValue()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getDM">getDM()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getOffsetRange">getOffsetRange()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#getValueReal">getValueReal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getDM">getDM()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getDM">getDM()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getOperators">getOperators()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getOperators">getOperators()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getValues">getValues()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getDM">getDM()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getDof">getDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getOperators">getOperators()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getValues">getValues()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getDM">getDM()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getDof">getDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getValuesCSR">getValuesCSR()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getDM">getDM()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getDuration">getDuration()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getVariableBounds">getVariableBounds()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getDof">getDof()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getElements">getElements()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getVecArray">getVecArray()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getDof">getDof()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getElementType">getElementType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getVecLeft">getVecLeft()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getDuration">getDuration()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getEntries">getEntries()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#getVecs">getVecs()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getElements">getElements()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getEquationType">getEquationType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#getVersion">getVersion()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getElementType">getElementType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getFactorMatrix">getFactorMatrix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#getVersionInfo">getVersionInfo()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#getEntries">getEntries()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getOrdering">getOrdering()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getFactorSolverPackage">getFactorSolverPackage()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getVertexNumbering">getVertexNumbering()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getEquationType">getEquationType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOrdering">getOrdering()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASCoarseSolve">getFASCoarseSolve()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getOrdering">getOrdering()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getVIInactiveSet">getVIInactiveSet()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getFactorMatrix">getFactorMatrix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOwnershipIS">getOwnershipIS()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASCycleSNES">getFASCycleSNES()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOrdering">getOrdering()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#getVisible">getVisible()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getFactorSolverPackage">getFactorSolverPackage()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOwnershipRange">getOwnershipRange()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASInjection">getFASInjection()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOwnershipIS">getOwnershipIS()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getWorkVecs">getWorkVecs()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASCoarseSolve">getFASCoarseSolve()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASInterpolation">getFASInterpolation()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOwnershipRange">getOwnershipRange()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#ghost_corners">ghost_corners</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASLevels">getFASLevels()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getOwnershipRange">getOwnershipRange()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#ghost_corners">ghost_corners</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#ghost_ranges">ghost_ranges</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASCycleSNES">getFASCycleSNES()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASRestriction">getFASRestriction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOwnershipRangeColumn">getOwnershipRangeColumn()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#ghost_ranges">ghost_ranges</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html#GHOSTED">GHOSTED</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASInjection">getFASInjection()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASSmoother">getFASSmoother()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getOwnershipRanges">getOwnershipRanges()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html#GHOSTED">GHOSTED</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#ghostUpdate">ghostUpdate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASInterpolation">getFASInterpolation()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASSmootherDown">getFASSmootherDown()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOwnershipRanges">getOwnershipRanges()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#ghostUpdate">ghostUpdate()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#ghostUpdateBegin">ghostUpdateBegin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASLevels">getFASLevels()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASSmootherUp">getFASSmootherUp()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getOwnershipRanges">getOwnershipRanges()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#ghostUpdateBegin">ghostUpdateBegin()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#ghostUpdateEnd">ghostUpdateEnd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASRestriction">getFASRestriction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldComponents">getFieldComponents()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getOwnershipRangesColumn">getOwnershipRangesColumn()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#ghostUpdateEnd">ghostUpdateEnd()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#GL">GL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASSmoother">getFASSmoother()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldConstraintDof">getFieldConstraintDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getParamsEW">getParamsEW()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#GL">GL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.InfoType-class.html#GLOBAL_MAX">GLOBAL_MAX</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.InfoType-class.html">InfoType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASSmootherDown">getFASSmootherDown()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldConstraintIndices">getFieldConstraintIndices()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#getPartitioner">getPartitioner()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#globalToLocal">globalToLocal()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.InfoType-class.html#GLOBAL_SUM">GLOBAL_SUM</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.InfoType-class.html">InfoType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFASSmootherUp">getFASSmootherUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldDof">getFieldDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.lib-module.html#getPathArch">getPathArch()</a><br />
 <span class="index-where">(in <a href="petsc4py.lib-module.html">petsc4py.lib</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#globalToNatural">globalToNatural()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#globalToLocal">globalToLocal()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldComponents">getFieldComponents()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getFieldName">getFieldName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.lib-module.html#getPathArchPETSc">getPathArchPETSc()</a><br />
 <span class="index-where">(in <a href="petsc4py.lib-module.html">petsc4py.lib</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#GLTR">GLTR</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#globalToNatural">globalToNatural()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldConstraintDof">getFieldConstraintDof()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldName">getFieldName()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getPC">getPC()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#GMRES">GMRES</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#GLTR">GLTR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldConstraintIndices">getFieldConstraintIndices()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getFieldSplitSubKSP">getFieldSplitSubKSP()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getPCSide">getPCSide()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#gnorm">gnorm</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#GMRES">GMRES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldDof">getFieldDof()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#getFileMode">getFileMode()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#getPerfInfo">getPerfInfo()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#GPCG">GPCG</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#gnorm">gnorm</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#getFieldName">getFieldName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#getFileName">getFileName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getPointSF">getPointSF()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#GPCG">GPCG</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#getFlops">getFlops()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getPostStep">getPostStep()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#gradient">gradient</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#getFieldSplitSubKSP">getFieldSplitSubKSP()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getPostStep">getPostStep()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#getFormat">getFormat()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getPreStep">getPreStep()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#GROPPCG">GROPPCG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#getFileMode">getFileMode()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getPreStep">getPreStep()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#getFunction">getFunction()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getPrevTime">getPrevTime()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#gtol">gtol</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#getFileName">getFileName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFunction">getFunction()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getProblemType">getProblemType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#guess_knoll">guess_knoll</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#getFlops">getFlops()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#getFunctionEvaluations">getFunctionEvaluations()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getProcSizes">getProcSizes()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#guess_nonzero">guess_nonzero</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#getFormat">getFormat()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#getFunctionValue">getFunctionValue()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#getPythonContext">getPythonContext()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#getFunction">getFunction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#getGhostCorners">getGhostCorners()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getPythonContext">getPythonContext()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"> </td>
@@ -2529,8 +2620,8 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#hasLabel">hasLabel()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#hasLabel">hasLabel()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#hermitian">hermitian</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"> </td>
@@ -2550,47 +2641,47 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Mat_Stencil-class.html#i">i</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Mat_Stencil-class.html" onclick="show_private();">_Mat_Stencil</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#INFINITY">INFINITY</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#INFINITY">INFINITY</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#isAssembled">isAssembled()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#IBCGS">IBCGS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#INFINITY">INFINITY</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#info">info</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#isaxpy">isaxpy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#ICC">ICC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#info">info</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#infoAllow">infoAllow()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#isFinalized">isFinalized()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html#id">id</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py-module.html#init">init()</a><br />
-<span class="index-where">(in <a href="petsc4py-module.html">petsc4py</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.InfoType-class.html">InfoType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#isHermitian">isHermitian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#id">id</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#INITIAL_FINAL_ONLY">INITIAL_FINAL_ONLY</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py-module.html#init">init()</a><br />
+<span class="index-where">(in <a href="petsc4py-module.html">petsc4py</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#isHermitianKnown">isHermitianKnown()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#id">id</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#INITIAL_ONLY">INITIAL_ONLY</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#INITIAL_FINAL_ONLY">INITIAL_FINAL_ONLY</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#isIdentity">isIdentity()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
@@ -2598,15 +2689,15 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#identity">identity</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT">INSERT</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#INITIAL_ONLY">INITIAL_ONLY</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#isInitialized">isInitialized()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#IGNORE_LOWER_TRIANGULAR">IGNORE_LOWER_TRIANGULAR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_ALL">INSERT_ALL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT">INSERT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#isPermutation">isPermutation()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
@@ -2614,7 +2705,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Option-class.html#IGNORE_NEGATIVE_INDICES">IGNORE_NEGATIVE_INDICES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Option-class.html">Option</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_ALL_VALUES">INSERT_ALL_VALUES</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_ALL">INSERT_ALL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#isset">isset()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
@@ -2622,7 +2713,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#IGNORE_OFF_PROC_ENTRIES">IGNORE_OFF_PROC_ENTRIES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_BC">INSERT_BC</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_ALL_VALUES">INSERT_ALL_VALUES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#isSorted">isSorted()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
@@ -2630,7 +2721,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Option-class.html#IGNORE_OFF_PROC_ENTRIES">IGNORE_OFF_PROC_ENTRIES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Option-class.html">Option</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_BC_VALUES">INSERT_BC_VALUES</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_BC">INSERT_BC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#isStructurallySymmetric">isStructurallySymmetric()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
@@ -2638,7 +2729,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#IGNORE_ZERO_ENTRIES">IGNORE_ZERO_ENTRIES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_VALUES">INSERT_VALUES</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_BC_VALUES">INSERT_BC_VALUES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#isSymmetric">isSymmetric()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
@@ -2646,15 +2737,15 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#ILU">ILU</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#insertCone">insertCone()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#INSERT_VALUES">INSERT_VALUES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#isSymmetricKnown">isSymmetricKnown()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#imagPart">imagPart()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#insertConeOrientation">insertConeOrientation()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#insertCone">insertCone()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#isTranspose">isTranspose()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
@@ -2662,94 +2753,101 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.EquationType-class.html#IMPLICIT">IMPLICIT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.EquationType-class.html">EquationType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#insertConeOrientation">insertConeOrientation()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.lib-module.html#Import">Import()</a><br />
 <span class="index-where">(in <a href="petsc4py.lib-module.html">petsc4py.lib</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.ASMType-class.html#INTERPOLATE">INTERPOLATE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.ASMType-class.html">ASMType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#iterating">iterating</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.lib-module.html#ImportPETSc">ImportPETSc()</a><br />
 <span class="index-where">(in <a href="petsc4py.lib-module.html">petsc4py.lib</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GASMType-class.html#INTERPOLATE">INTERPOLATE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.GASMType-class.html">GASMType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.ASMType-class.html#INTERPOLATE">INTERPOLATE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.ASMType-class.html">ASMType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html#INBLOCKS">INBLOCKS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">FactorShiftType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html#INTERPOLATE">INTERPOLATE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html">ExactFinalTimeOption</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GASMType-class.html#INTERPOLATE">INTERPOLATE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.GASMType-class.html">GASMType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#iterating">iterating</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#increaseOverlap">increaseOverlap()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#interpolate">interpolate()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTime-class.html#INTERPOLATE">INTERPOLATE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html">ExactFinalTime</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#ITERATING">ITERATING</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#incRef">incRef()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.InterpolationType-class.html">InterpolationType</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#interpolate">interpolate()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#iterating">iterating</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#incrementTabLevel">incrementTabLevel()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#interval">interval</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.InterpolationType-class.html">InterpolationType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#incrementTimestep">incrementTimestep()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#invertBlockDiagonal">invertBlockDiagonal()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#interval">interval</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#iterating">iterating</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Mat_Stencil-class.html#index">index</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Mat_Stencil-class.html" onclick="show_private();">_Mat_Stencil</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#invertPermutation">invertPermutation()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#invertBlockDiagonal">invertBlockDiagonal()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#its">its</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#indices">indices</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#IPM">IPM</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#invertPermutation">invertPermutation()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#its">its</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#indices">indices</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html">IS</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#IPM">IPM</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#its">its</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#INF">INF</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html">IS</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#INFINITY">INFINITY</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#IS">IS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"> </td>
@@ -2775,14 +2873,22 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Mat_Stencil-class.html#k">k</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Mat_Stencil-class.html" onclick="show_private();">_Mat_Stencil</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#klass">klass</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#ksp">ksp</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#KACZMARZ">KACZMARZ</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html">KSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#ksp">ksp</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#KACZMARZ">KACZMARZ</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.MGType-class.html#KASKADE">KASKADE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.MGType-class.html">MGType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#KSP">KSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#KSPONLY">KSPONLY</a><br />
@@ -2795,13 +2901,6 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#klass">klass</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#ksp">ksp</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</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="L">L</a></h2></td>
@@ -2810,95 +2909,103 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#L">L</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.InfoType-class.html#LOCAL">LOCAL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.InfoType-class.html">InfoType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html">LogClass</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#LCD">LCD</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#LOCAL_BACKWARD_SWEEP">LOCAL_BACKWARD_SWEEP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#logConvergenceHistory">logConvergenceHistory()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#LCD">LCD</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#LCL">LCL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#LOCAL_FORWARD_SWEEP">LOCAL_FORWARD_SWEEP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#logConvergenceHistory">logConvergenceHistory()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#LCL">LCL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#LEFT">LEFT</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#local_size">local_size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#LEFT">LEFT</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html">LGMap</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#local_size">local_size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#logFlops">logFlops()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html">LGMap</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#LGMRES">LGMRES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#local_size">local_size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html">LogStage</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#LGMRES">LGMRES</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#localForm">localForm()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.lib-module.html">lib</a><br />
+<span class="index-where">(in <a href="petsc4py-module.html">petsc4py</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#LOCAL_SYMMETRIC_SWEEP">LOCAL_SYMMETRIC_SWEEP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurFactType-class.html#LOWER">LOWER</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurFactType-class.html">SchurFactType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.lib-module.html">lib</a><br />
-<span class="index-where">(in <a href="petsc4py-module.html">petsc4py</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#LOCALREF">LOCALREF</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ProblemType-class.html#LINEAR">LINEAR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#localForm">localForm()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#LRC">LRC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ProblemType-class.html#LINEAR">LINEAR</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.ProblemType-class.html">ProblemType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#localToGlobal">localToGlobal()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#LMVM">LMVM</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#LOCALREF">LOCALREF</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#LSC">LSC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#LMVM">LMVM</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#localToLocal">localToLocal()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#load">load()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#localToGlobal">localToGlobal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#LSQR">LSQR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#load">load()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html">Log</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#load">load()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#localToLocal">localToLocal()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#LU">LU</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#load">load()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#log">log()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#load">load()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html">Log</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#load">load()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html">LogClass</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#log">log()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -2909,23 +3016,23 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MAIJ">MAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#max_time">max_time</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#MAX_VALUES">MAX_VALUES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIAIJCUSPARSE">MPIAIJCUSPARSE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO.Type-class.html#MAPPING">MAPPING</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#MAX_VALUES">MAX_VALUES</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#maxPointwiseDivide">maxPointwiseDivide()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIAIJPERM">MPIAIJPERM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap.MapType-class.html">MapType</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#maxPointwiseDivide">maxPointwiseDivide()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#maxpy">maxpy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIAIJVIENNACL">MPIAIJVIENNACL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
@@ -2933,7 +3040,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#markBoundaryFaces">markBoundaryFaces()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#maxpy">maxpy()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mDot">mDot()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIBAIJ">MPIBAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
@@ -2941,7 +3048,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap.MapType-class.html#MASK">MASK</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap.MapType-class.html">MapType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mDot">mDot()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mDotBegin">mDotBegin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIBSTRM">MPIBSTRM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
@@ -2949,7 +3056,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html">Mat</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mDotBegin">mDotBegin()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mDotEnd">mDotEnd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#MPICUSP">MPICUSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
@@ -2957,127 +3064,127 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#MAT">MAT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mDotEnd">mDotEnd()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.AO.Type-class.html#MEMORYSCALABLE">MEMORYSCALABLE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.AO.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIDENSE">MPIDENSE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#mat_op">mat_op</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.AO.Type-class.html#MEMORYSCALABLE">MEMORYSCALABLE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.AO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MFFD">MFFD</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIMAIJ">MPIMAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#mat_pc">mat_pc</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MFFD">MFFD</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#MPIPTHREAD">MPIPTHREAD</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html#MATCHSTEP">MATCHSTEP</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html">ExactFinalTimeOption</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#MG">MG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPISBAIJ">MPISBAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#MATHEMATICA">MATHEMATICA</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#min">min()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTime-class.html#MATCHSTEP">MATCHSTEP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html">ExactFinalTime</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.MGType-class.html">MGType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPISBSTRM">MPISBSTRM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#MATLAB">MATLAB</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#MATHEMATICA">MATHEMATICA</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#MINRES">MINRES</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#MIMEX">MIMEX</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#MPIVIENNACL">MPIVIENNACL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matMult">matMult()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html#MIRROR">MIRROR</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#MATLAB">MATLAB</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#min">min()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#MS">MS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matMultNumeric">matMultNumeric()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matMult">matMult()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#ML">ML</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#MINRES">MINRES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mtDot">mtDot()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matMultSymbolic">matMultSymbolic()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matMultNumeric">matMultNumeric()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#MOAB">MOAB</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html#MIRROR">MIRROR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mtDotBegin">mtDotBegin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matSolve">matSolve()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matMultSymbolic">matMultSymbolic()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#ML">ML</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#mtDotEnd">mtDotEnd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matTransposeMult">matTransposeMult()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matSolve">matSolve()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#monitor">monitor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#MOAB">MOAB</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#mult">mult()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#matTransposeMult">matTransposeMult()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#multAdd">multAdd()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#MAX">MAX</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#monitor">monitor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#multAdd">multAdd()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#monitor">monitor()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#multHermitian">multHermitian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#MAX">MAX</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#monitor">monitor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#multHermitian">multHermitian()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#monitor">monitor()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#multHermitianAdd">multHermitianAdd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#max">max()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#MPI">MPI</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#multHermitianAdd">multHermitianAdd()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#monitor">monitor()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html#MULTIPLICATIVE">MULTIPLICATIVE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#max_funcs">max_funcs</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIADJ">MPIADJ</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html#MULTIPLICATIVE">MULTIPLICATIVE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#MPI">MPI</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.MGType-class.html#MULTIPLICATIVE">MULTIPLICATIVE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.MGType-class.html">MGType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#max_it">max_it</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIAIJ">MPIAIJ</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIADJ">MPIADJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#multTranspose">multTranspose()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
@@ -3085,7 +3192,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#max_it">max_it</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIAIJCRL">MPIAIJCRL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIAIJ">MPIAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#multTransposeAdd">multTransposeAdd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
@@ -3093,6 +3200,13 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#max_steps">max_steps</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIAIJCRL">MPIAIJCRL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#max_time">max_time</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#MPIAIJCUSP">MPIAIJCUSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"> </td>
@@ -3203,15 +3317,15 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GASMType-class.html#NONE">NONE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.GASMType-class.html">GASMType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#normalize">normalize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#NORMALHERMITIAN">NORMALHERMITIAN</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#NCG">NCG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#NONE">NONE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#normBegin">normBegin()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#normalize">normalize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
@@ -3219,7 +3333,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#NONE">NONE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#normEnd">normEnd()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#normBegin">normBegin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
@@ -3227,63 +3341,63 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ProblemType-class.html#NONLINEAR">NONLINEAR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.ProblemType-class.html">ProblemType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#normEnd">normEnd()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#NEST">NEST</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html#NONZERO">NONZERO</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">FactorShiftType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#NETCDF">NETCDF</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#norm">norm</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html">NormType</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#NETWORK">NETWORK</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#norm">norm()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#NOT_SET_VALUES">NOT_SET_VALUES</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html">NormType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#NEW_DIAGONALS">NEW_DIAGONALS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#norm">norm()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#npc">npc</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#NOT_SET_VALUES">NOT_SET_VALUES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#NEW_NONZERO_ALLOCATION_ERR">NEW_NONZERO_ALLOCATION_ERR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#NORM_1">NORM_1</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#NRICHARDSON">NRICHARDSON</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#npc">npc</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#NEW_NONZERO_LOCATION_ERR">NEW_NONZERO_LOCATION_ERR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#NORM_1_AND_2">NORM_1_AND_2</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#NTL">NTL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#NRICHARDSON">NRICHARDSON</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#NEW_NONZERO_LOCATIONS">NEW_NONZERO_LOCATIONS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#NORM_2">NORM_2</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#NTR">NTR</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#NTL">NTL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
@@ -3291,23 +3405,24 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_ALWAYS">NORM_ALWAYS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#NTR">NTR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#NEWTONTR">NEWTONTR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html#NORM_DEFAULT">NORM_DEFAULT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html#NZ">NZ</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">FactorShiftType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#NGMRES">NGMRES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_DEFAULT">NORM_DEFAULT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html#NZ">NZ</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">FactorShiftType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#NGS">NGS</a><br />
@@ -3369,158 +3484,167 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.ElementType-class.html#P1">P1</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA.ElementType-class.html">ElementType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PGMRES">PGMRES</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#prefixPop">prefixPop()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#PINFINITY">PINFINITY</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html#PRECONDITIONED">PRECONDITIONED</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PartitionerType-class.html#PARMETIS">PARMETIS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PartitionerType-class.html">PartitionerType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#PINFINITY">PINFINITY</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#prefixPush">prefixPush()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PIPECG">PIPECG</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#prefix">prefix</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#PARMS">PARMS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PIPECG">PIPECG</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PREONLY">PREONLY</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PIPECGRR">PIPECGRR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#prefix">prefix</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PIPECR">PIPECR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#Print">Print()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#prefixPop">prefixPop()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PartitionerType-class.html">PartitionerType</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#placeArray">placeArray()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#problem_type">problem_type</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PIPEFCG">PIPEFCG</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#prefixPush">prefixPush()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#PATCH">PATCH</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#PLEX">PLEX</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ProblemType-class.html">ProblemType</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PIPEFGMRES">PIPEFGMRES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PREONLY">PREONLY</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#PBJACOBI">PBJACOBI</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseDivide">pointwiseDivide()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#proc_sizes">proc_sizes</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PIPEGCR">PIPEGCR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#Print">Print()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#pc">pc</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseMax">pointwiseMax()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#placeArray">placeArray()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#PSEUDO">PSEUDO</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#problem_type">problem_type</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html">PC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseMaxAbs">pointwiseMaxAbs()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#PTHREAD">PTHREAD</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#PLEX">PLEX</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ProblemType-class.html">ProblemType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#pc_side">pc_side</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseMin">pointwiseMin()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseDivide">pointwiseDivide()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#push">push()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#proc_sizes">proc_sizes</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html#PD">PD</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">FactorShiftType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseMult">pointwiseMult()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseMax">pointwiseMax()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#pushErrorHandler">pushErrorHandler()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#PSEUDO">PSEUDO</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html#PERIODIC">PERIODIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#pop">pop()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseMaxAbs">pointwiseMaxAbs()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#push">push()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#pushFormat">pushFormat()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#permutation">permutation</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#popErrorHandler">popErrorHandler()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseMin">pointwiseMin()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#pushErrorHandler">pushErrorHandler()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#pushGroup">pushGroup()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#permute">permute()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#popFormat">popFormat()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#pointwiseMult">pointwiseMult()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#pushFormat">pushFormat()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PYTHON">PYTHON</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#permute">permute()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#popGroup">popGroup()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#pop">pop()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#pushGroup">pushGroup()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#PYTHON">PYTHON</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#permute">permute()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html#POSITIVE_DEFINITE">POSITIVE_DEFINITE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">FactorShiftType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#PYTHON">PYTHON</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#popErrorHandler">popErrorHandler()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PYTHON">PYTHON</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html">PETSc</a><br />
 <span class="index-where">(in <a href="petsc4py-module.html">petsc4py</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#POUNDERS">POUNDERS</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#PYTHON">PYTHON</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#popFormat">popFormat()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#PYTHON">PYTHON</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#petsc2app">petsc2app()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html#PRECONDITIONED">PRECONDITIONED</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#PYTHON">PYTHON</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py-module.html">petsc4py</a></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#prefix">prefix</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#popGroup">popGroup()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#PYTHON">PYTHON</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py-module.html">petsc4py</a></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.FactorShiftType-class.html#POSITIVE_DEFINITE">POSITIVE_DEFINITE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.FactorShiftType-class.html">FactorShiftType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#PYTHON">PYTHON</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#PFMG">PFMG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#prefix">prefix</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#POUNDERS">POUNDERS</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#PYTHON">PYTHON</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#PGMRES">PGMRES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#PREALLOCATOR">PREALLOCATOR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -3590,108 +3714,115 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html">Random</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random.Type-class.html#RANDER48">RANDER48</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#refineHierarchy">refineHierarchy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#REVERSE">REVERSE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html">Random</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#registerCitation">registerCitation()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#REVERSE_LOCAL">REVERSE_LOCAL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#ranges">ranges</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#remove">remove()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#REVERSE_LOCAL">REVERSE_LOCAL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#RICHARDSON">RICHARDSON</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#rank">rank</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#removeLabel">removeLabel()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#RICHARDSON">RICHARDSON</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#removeLabel">removeLabel()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#RIGHT">RIGHT</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.OrderingType-class.html#RCM">RCM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#reorderForNonzeroDiagonal">reorderForNonzeroDiagonal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#RIGHT">RIGHT</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#RK">RK</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#READ">READ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#RK">RK</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#rollBack">rollBack()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#realPart">realPart()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#rollBack">rollBack()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#ROSW">ROSW</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#reason">reason</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#ROSW">ROSW</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#ROW_ORIENTED">ROW_ORIENTED</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#reason">reason</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#ROW_ORIENTED">ROW_ORIENTED</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.OrderingType-class.html#ROWLENGTH">ROWLENGTH</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.OrderingType-class.html#ROWLENGTH">ROWLENGTH</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#rtol">rtol</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#reason">reason</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#rtol">rtol</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#rtol">rtol</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#reason">reason</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#resetArray">resetArray()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#rtol">rtol</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#rtol">rtol</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#reciprocal">reciprocal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#restoreCUDAHandle">restoreCUDAHandle()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#rtol">rtol</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#RUNGE_KUTTA">RUNGE_KUTTA</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#REDISTRIBUTE">REDISTRIBUTE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#restoreLocalSubMatrix">restoreLocalSubMatrix()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#RUNGE_KUTTA">RUNGE_KUTTA</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"> </td>
 </tr>
 </table>
 </td></tr>
@@ -3701,133 +3832,157 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#S">S</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#setFunction">setFunction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGAMGLevels">setGAMGLevels()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#SACUSP">SACUSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFunction">setFunction()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGAMGSmooths">setGAMGSmooths()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setType">setType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#SACUSPPOLY">SACUSPPOLY</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setFunctionTolerances">setFunctionTolerances()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGAMGType">setGAMGType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setType">setType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html#SAME">SAME</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGAMGLevels">setGAMGLevels()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGASMOverlap">setGASMOverlap()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setUnfactored">setUnfactored()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SAME">SAME</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGAMGSmooths">setGAMGSmooths()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGASMType">setGASMType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setUniformCoordinates">setUniformCoordinates()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html#SAME_NONZERO_PATTERN">SAME_NONZERO_PATTERN</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGAMGType">setGAMGType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setGlobalToLocal">setGlobalToLocal()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html#SAME_NZ">SAME_NZ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGASMOverlap">setGASMOverlap()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setGlobalToLocalVecScatter">setGlobalToLocalVecScatter()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setUnfactored">setUnfactored()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#SAWS">SAWS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setGASMType">setGASMType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setGlobalVector">setGlobalVector()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setUniformCoordinates">setUniformCoordinates()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SBAIJ">SBAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setGlobalToLocal">setGlobalToLocal()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setGMRESRestart">setGMRESRestart()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SBSTRM">SBSTRM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setGlobalToLocalVecScatter">setGlobalToLocalVecScatter()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setGradient">setGradient()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#scale">scale()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setGlobalVector">setGlobalVector()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setGradientNorm">setGradientNorm()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#scale">scale()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setGMRESRestart">setGMRESRestart()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setGraph">setGraph()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SCATTER">SCATTER</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setGradient">setGradient()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setHessian">setHessian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html">Scatter</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setGradientTolerances">setGradientTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setHYPREDiscreteCurl">setHYPREDiscreteCurl()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#scatter">scatter()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setGraph">setGraph()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setHYPREDiscreteGradient">setHYPREDiscreteGradient()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#scatter">scatter()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setHessian">setHessian()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setHYPRESetAlphaPoissonMatrix">setHYPRESetAlphaPoissonMatrix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_FORWARD">SCATTER_FORWARD</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setHYPRESetBetaPoissonMatrix">setHYPRESetBetaPoissonMatrix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setUp">setUp()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_FORWARD_LOCAL">SCATTER_FORWARD_LOCAL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setHYPRESetEdgeConstantVectors">setHYPRESetEdgeConstantVectors()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_LOCAL">SCATTER_LOCAL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setHYPREType">setHYPREType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setUp">setUp()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_FORWARD">SCATTER_FORWARD</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_REVERSE">SCATTER_REVERSE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setIdentity">setIdentity()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
@@ -3835,7 +3990,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_FORWARD_LOCAL">SCATTER_FORWARD_LOCAL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_REVERSE_LOCAL">SCATTER_REVERSE_LOCAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setIFunction">setIFunction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
@@ -3843,127 +3998,127 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_LOCAL">SCATTER_LOCAL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#scatterBegin">scatterBegin()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setIJacobian">setIJacobian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setUpOnBlocks">setUpOnBlocks()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_REVERSE">SCATTER_REVERSE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#scatterEnd">scatterEnd()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setIndices">setIndices()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setUseAmat">setUseAmat()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#SCATTER_REVERSE_LOCAL">SCATTER_REVERSE_LOCAL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setInitial">setInitial()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setUseEW">setUseEW()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#scatterBegin">scatterBegin()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html#SCHUR">SCHUR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setInitialGuess">setInitialGuess()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setUseFD">setUseFD()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#scatterEnd">scatterEnd()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SCHURCOMPLEMENT">SCHURCOMPLEMENT</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setInitialGuessKnoll">setInitialGuessKnoll()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setUseFischerGuess">setUseFischerGuess()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurFactType-class.html">SchurFactType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setInitialGuessNonzero">setInitialGuessNonzero()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setUseMF">setUseMF()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html#SCHUR">SCHUR</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setInitialTimeStep">setInitialTimeStep()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValue">setValue()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SCHURCOMPLEMENT">SCHURCOMPLEMENT</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html">Section</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setInitialTrustRegionRadius">setInitialTrustRegionRadius()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#setValue">setValue()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurFactType-class.html">SchurFactType</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#seed">seed</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setInterpolationType">setInterpolationType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setValue">setValue()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html#SELF">SELF</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#setInterval">setInterval()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValueBlockedStencil">setValueBlockedStencil()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html">Section</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html#SELFP">SELFP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setIterationNumber">setIterationNumber()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValueLocal">setValueLocal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#seed">seed</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#SEQ">SEQ</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setIterationNumber">setIterationNumber()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setValueLocal">setValueLocal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html#SELF">SELF</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJ">SEQAIJ</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setJacobian">setJacobian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValues">setValues()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html#SELFP">SELFP</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJCRL">SEQAIJCRL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setJacobian">setJacobian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setValues">setValues()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#SEQ">SEQ</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJCUSP">SEQAIJCUSP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setJacobianDesign">setJacobianDesign()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesBlocked">setValuesBlocked()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJ">SEQAIJ</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJCUSPARSE">SEQAIJCUSPARSE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setJacobianState">setJacobianState()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
@@ -3971,7 +4126,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJCRL">SEQAIJCRL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJPERM">SEQAIJPERM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setKSP">setKSP()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
@@ -3979,23 +4134,23 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJCUSP">SEQAIJCUSP</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJVIENNACL">SEQAIJVIENNACL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setLabelOutput">setLabelOutput()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setLabelOutput">setLabelOutput()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesBlockedIJV">setValuesBlockedIJV()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJCUSPARSE">SEQAIJCUSPARSE</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQBAIJ">SEQBAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setLabelValue">setLabelValue()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setLabelValue">setLabelValue()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesBlockedLocal">setValuesBlockedLocal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJPERM">SEQAIJPERM</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQBSTRM">SEQBSTRM</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setLGMap">setLGMap()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
@@ -4003,7 +4158,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJPTHREAD">SEQAIJPTHREAD</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQCUFFT">SEQCUFFT</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setLGMap">setLGMap()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
@@ -4011,985 +4166,994 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQAIJVIENNACL">SEQAIJVIENNACL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalToGlobal">setLocalToGlobal()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#SEQCUSP">SEQCUSP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setLMVMH0">setLMVMH0()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesBlockedLocalIJV">setValuesBlockedLocalIJV()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQBAIJ">SEQBAIJ</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQDENSE">SEQDENSE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalToGlobalVecScatter">setLocalToGlobalVecScatter()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalToGlobal">setLocalToGlobal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesBlockedLocalRCV">setValuesBlockedLocalRCV()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQBSTRM">SEQBSTRM</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQMAIJ">SEQMAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalToLocal">setLocalToLocal()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalToGlobalVecScatter">setLocalToGlobalVecScatter()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesBlockedRCV">setValuesBlockedRCV()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQCUFFT">SEQCUFFT</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQSBAIJ">SEQSBAIJ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalToLocalVecScatter">setLocalToLocalVecScatter()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalToLocal">setLocalToLocal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesCSR">setValuesCSR()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#SEQCUSP">SEQCUSP</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalVector">setLocalVector()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQSBSTRM">SEQSBSTRM</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalToLocalVecScatter">setLocalToLocalVecScatter()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesIJV">setValuesIJV()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQDENSE">SEQDENSE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setMatrix">setMatrix()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#SEQVIENNACL">SEQVIENNACL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setLocalVector">setLocalVector()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesLocal">setValuesLocal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQMAIJ">SEQMAIJ</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setMatType">setMatType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#set">set()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setMatrix">setMatrix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setValuesLocal">setValuesLocal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#SEQPTHREAD">SEQPTHREAD</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setMaxFunctionEvaluations">setMaxFunctionEvaluations()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html#setActive">setActive()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setMatType">setMatType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesLocalCSR">setValuesLocalCSR()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQSBAIJ">SEQSBAIJ</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setMaxLinearSolveFailures">setMaxLinearSolveFailures()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#setActive">setActive()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setMaxFunctionEvaluations">setMaxFunctionEvaluations()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesLocalIJV">setValuesLocalIJV()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SEQSBSTRM">SEQSBSTRM</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setMaxNonlinearStepFailures">setMaxNonlinearStepFailures()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#setActive">setActive()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setMaxLinearSolveFailures">setMaxLinearSolveFailures()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesLocalRCV">setValuesLocalRCV()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#SEQVIENNACL">SEQVIENNACL</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMaxSNESFailures">setMaxSNESFailures()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#setActiveAll">setActiveAll()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setMaxNonlinearStepFailures">setMaxNonlinearStepFailures()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesRCV">setValuesRCV()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#set">set()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMaxStepRejections">setMaxStepRejections()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setAdjacencyUseClosure">setAdjacencyUseClosure()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMaxSNESFailures">setMaxSNESFailures()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValueStencil">setValueStencil()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html#setActive">setActive()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMaxSteps">setMaxSteps()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setAdjacencyUseCone">setAdjacencyUseCone()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMaxStepRejections">setMaxStepRejections()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setVariableBounds">setVariableBounds()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#setActive">setActive()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMaxTime">setMaxTime()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setAlphaParams">setAlphaParams()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMaxSteps">setMaxSteps()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setVariableBounds">setVariableBounds()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#setActive">setActive()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGCyclesOnLevel">setMGCyclesOnLevel()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setAlphaRadius">setAlphaRadius()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMaxTime">setMaxTime()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setVecType">setVecType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#setActiveAll">setActiveAll()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGInterpolation">setMGInterpolation()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setAppCtx">setAppCtx()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGCyclesOnLevel">setMGCyclesOnLevel()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#setVisible">setVisible()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setAdjacencyUseClosure">setAdjacencyUseClosure()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGR">setMGR()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setAppCtx">setAppCtx()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGInterpolation">setMGInterpolation()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html">SF</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setAdjacencyUseCone">setAdjacencyUseCone()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGRestriction">setMGRestriction()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setAppCtx">setAppCtx()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGR">setMGR()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#shape">shape</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setAlphaParams">setAlphaParams()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGRhs">setMGRhs()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setAppCtx">setAppCtx()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGRestriction">setMGRestriction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#SHARED">SHARED</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setAlphaRadius">setAlphaRadius()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setAppCtx">setAppCtx()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGRScale">setMGRScale()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGRhs">setMGRhs()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#SHELL">SHELL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setAppCtx">setAppCtx()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGX">setMGX()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setArray">setArray()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGRScale">setMGRScale()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SHELL">SHELL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setAppCtx">setAppCtx()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setMonitor">setMonitor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setASMLocalSubdomains">setASMLocalSubdomains()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGType">setMGType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#SHELL">SHELL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setAppCtx">setAppCtx()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setMonitor">setMonitor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setASMOverlap">setASMOverlap()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGX">setMGX()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PartitionerType-class.html#SHELL">SHELL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PartitionerType-class.html">PartitionerType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setAppCtx">setAppCtx()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setMonitor">setMonitor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setASMTotalSubdomains">setASMTotalSubdomains()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setMonitor">setMonitor()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#SHELL">SHELL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setAppCtx">setAppCtx()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMonitor">setMonitor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setASMType">setASMType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setMonitor">setMonitor()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#shift">shift()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setArray">setArray()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setMPIGhost">setMPIGhost()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setMonitor">setMonitor()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#shift">shift()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setASMLocalSubdomains">setASMLocalSubdomains()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setName">setName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setBlockIndices">setBlockIndices()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setMonitor">setMonitor()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html">Side</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setASMOverlap">setASMOverlap()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setNearNullSpace">setNearNullSpace()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setBlockSize">setBlockSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setMPIGhost">setMPIGhost()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#size">size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setASMTotalSubdomains">setASMTotalSubdomains()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setNestSubVecs">setNestSubVecs()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setBlockSize">setBlockSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setMumpsCntl">setMumpsCntl()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#size">size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setASMType">setASMType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setNormSchedule">setNormSchedule()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setBlockSize">setBlockSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setMumpsIcntl">setMumpsIcntl()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#size">size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setBlockSizes">setBlockSizes()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setName">setName()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setNormType">setNormType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#size">size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setBlockIndices">setBlockIndices()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setNPC">setNPC()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setBoundaryType">setBoundaryType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setNearNullSpace">setNearNullSpace()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#size">size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setBlockSize">setBlockSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setNullSpace">setNullSpace()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setChart">setChart()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setNestSubVecs">setNestSubVecs()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Size-class.html">Size</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setBlockSize">setBlockSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setNumFields">setNumFields()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setChart">setChart()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#sizes">sizes</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setNormSchedule">setNormSchedule()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#sizes">sizes</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setBlockSize">setBlockSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setObjective">setObjective()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCoarsen">setCoarsen()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setNormType">setNormType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#sizes">sizes</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setBlockSizes">setBlockSizes()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setObjective">setObjective()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setCompositeType">setCompositeType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setNPC">setNPC()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#sizes">sizes</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setBoundaryType">setBoundaryType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setObjectiveGradient">setObjectiveGradient()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setComputeEigenvalues">setComputeEigenvalues()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setNullSpace">setNullSpace()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#sizes">sizes</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setChart">setChart()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setOffset">setOffset()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setComputeOperators">setComputeOperators()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setNumFields">setNumFields()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#sizes">sizes</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setChart">setChart()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setOperators">setOperators()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setComputeRHS">setComputeRHS()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setObjective">setObjective()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#sleep">sleep()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCoarsen">setCoarsen()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setOperators">setOperators()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setComputeSingularValues">setComputeSingularValues()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setObjective">setObjective()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#SLICED">SLICED</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setCompositeType">setCompositeType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setOption">setOption()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setCone">setCone()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setObjectiveGradient">setObjectiveGradient()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html">SNES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setComputeEigenvalues">setComputeEigenvalues()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setOption">setOption()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setConeOrientation">setConeOrientation()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setOffset">setOffset()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#snes">snes</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setComputeSingularValues">setComputeSingularValues()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setConeSize">setConeSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setOperators">setOperators()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#SOCKET">SOCKET</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setCone">setCone()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setConstraintDof">setConstraintDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setOperators">setOperators()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#solution">solution</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setConeOrientation">setConeOrientation()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setConstraintIndices">setConstraintIndices()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setOption">setOption()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#solve">solve()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setConeSize">setConeSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setConstraints">setConstraints()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setOption">setOption()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#solve">solve()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setConstraintDof">setConstraintDof()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setConstraintTolerances">setConstraintTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#solve">solve()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setConstraintIndices">setConstraintIndices()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setConvergedReason">setConvergedReason()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#solve">solve()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setConstraints">setConstraints()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setConvergedReason">setConvergedReason()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#solve">solve()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setConstraintTolerances">setConstraintTolerances()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setConvergedReason">setConvergedReason()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#solveAdd">solveAdd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setConvergedReason">setConvergedReason()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setConvergedReason">setConvergedReason()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#solveBackward">solveBackward()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setConvergedReason">setConvergedReason()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setParamsEW">setParamsEW()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setConvergenceHistory">setConvergenceHistory()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#solveForward">solveForward()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setConvergedReason">setConvergedReason()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setConvergenceHistory">setConvergenceHistory()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setPC">setPC()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#solveTranspose">solveTranspose()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setConvergedReason">setConvergedReason()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setPCSide">setPCSide()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setConvergenceTest">setConvergenceTest()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#solveTranspose">solveTranspose()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setConvergenceHistory">setConvergenceHistory()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setPermutation">setPermutation()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setConvergenceTest">setConvergenceTest()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#solveTransposeAdd">solveTransposeAdd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setConvergenceHistory">setConvergenceHistory()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setConvergenceTest">setConvergenceTest()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setParamsEW">setParamsEW()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setPointSF">setPointSF()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#SOR">SOR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setConvergenceTest">setConvergenceTest()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setCoordinateName">setCoordinateName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setPC">setPC()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setPostStep">setPostStep()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#SOR">SOR()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setConvergenceTest">setConvergenceTest()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPreallocationCSR">setPreallocationCSR()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setCoordinates">setCoordinates()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setPCSide">setPCSide()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#sort">sort()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setConvergenceTest">setConvergenceTest()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPreallocationDense">setPreallocationDense()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setCoordinates">setCoordinates()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setPermutation">setPermutation()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#sorted">sorted</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setCoordinates">setCoordinates()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setCoordinatesLocal">setCoordinatesLocal()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setPointSF">setPointSF()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPreallocationNNZ">setPreallocationNNZ()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setCoordinates">setCoordinates()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setPreStep">setPreStep()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateFieldDecomposition">setCreateFieldDecomposition()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setPostStep">setPostStep()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#SPAI">SPAI</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setCoordinatesLocal">setCoordinatesLocal()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setProblemType">setProblemType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateGlobalVector">setCreateGlobalVector()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPreallocationCSR">setPreallocationCSR()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#SPD">SPD</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateFieldDecomposition">setCreateFieldDecomposition()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateInjection">setCreateInjection()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setProcSizes">setProcSizes()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPreallocationDense">setPreallocationDense()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html#SPECIAL">SPECIAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateGlobalVector">setCreateGlobalVector()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateInterpolation">setCreateInterpolation()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setPythonContext">setPythonContext()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPreallocationNNZ">setPreallocationNNZ()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.OrderingType-class.html#SPECTRAL">SPECTRAL</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateLocalVector">setCreateLocalVector()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setPreStep">setPreStep()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#splitOwnership">splitOwnership()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateInjection">setCreateInjection()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateMatrix">setCreateMatrix()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPythonContext">setPythonContext()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setProblemType">setProblemType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random.Type-class.html#SPRNG">SPRNG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateInterpolation">setCreateInterpolation()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateSubDM">setCreateSubDM()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setPythonContext">setPythonContext()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setProcSizes">setProcSizes()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#sqrtabs">sqrtabs()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateLocalVector">setCreateLocalVector()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setPythonContext">setPythonContext()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#setDefaultComm">setDefaultComm()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setPythonContext">setPythonContext()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#SSFLS">SSFLS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateMatrix">setCreateMatrix()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setPythonContext">setPythonContext()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setDefaultGlobalSection">setDefaultGlobalSection()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPythonContext">setPythonContext()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#SSILS">SSILS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#setDefaultComm">setDefaultComm()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setPythonType">setPythonType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setDefaultSection">setDefaultSection()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setPythonContext">setPythonContext()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#SSP">SSP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setDefaultGlobalSection">setDefaultGlobalSection()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPythonType">setPythonType()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setDiagonal">setDiagonal()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setPythonContext">setPythonContext()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#Stage">Stage()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setDefaultSection">setDefaultSection()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setPythonType">setPythonType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setDim">setDim()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setPythonContext">setPythonContext()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#STANDARD">STANDARD</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setDiagonal">setDiagonal()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setPythonType">setPythonType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setDimension">setDimension()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setPythonType">setPythonType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.StencilType-class.html#STAR">STAR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA.StencilType-class.html">StencilType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setDim">setDim()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setPythonType">setPythonType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setDM">setDM()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setPythonType">setPythonType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#starts">starts</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setDimension">setDimension()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setRandom">setRandom()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setDM">setDM()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setPythonType">setPythonType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setDM">setDM()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setRankOrder">setRankOrder()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setDM">setDM()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setPythonType">setPythonType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#STCG">STCG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setDM">setDM()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setRefine">setRefine()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setDM">setDM()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setPythonType">setPythonType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#STDERR">STDERR()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setDM">setDM()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setRefinementFactor">setRefinementFactor()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setDMActive">setDMActive()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setRandom">setRandom()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#STDOUT">STDOUT()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setDM">setDM()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setRefinementLimit">setRefinementLimit()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setDof">setDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setRankOrder">setRankOrder()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#stencil">stencil</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setDMActive">setDMActive()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setRefinementUniform">setRefinementUniform()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setDof">setDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setRefine">setRefine()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#stencil_type">stencil_type</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setDof">setDof()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setDrawInfo">setDrawInfo()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setRefinementFactor">setRefinementFactor()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setResetCounters">setResetCounters()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#stencil_width">stencil_width</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setDof">setDof()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setResidualNorm">setResidualNorm()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setDuration">setDuration()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setRefinementLimit">setRefinementLimit()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.StencilType-class.html">StencilType</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setDrawInfo">setDrawInfo()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setReusePreconditioner">setReusePreconditioner()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setElementType">setElementType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setRefinementUniform">setRefinementUniform()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#step">step()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setDuration">setDuration()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setRHSFunction">setRHSFunction()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setEquationType">setEquationType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setResetCounters">setResetCounters()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#step_number">step_number</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setElementType">setElementType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setRHSJacobian">setRHSJacobian()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setErrorIfStepFails">setErrorIfStepFails()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html#STEPOVER">STEPOVER</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html">ExactFinalTimeOption</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setResidualNorm">setResidualNorm()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTime-class.html#STEPOVER">STEPOVER</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html">ExactFinalTime</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setEquationType">setEquationType()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setExactFinalTime">setExactFinalTime()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#setSeed">setSeed()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setReusePreconditioner">setReusePreconditioner()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#stol">stol</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setErrorIfStepFails">setErrorIfStepFails()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorLevels">setFactorLevels()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setRHSFunction">setRHSFunction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setSeparableObjective">setSeparableObjective()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#storeValues">storeValues()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setExactFinalTime">setExactFinalTime()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorOrdering">setFactorOrdering()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setRHSJacobian">setRHSJacobian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#setShellPartition">setShellPartition()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#stratify">stratify()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorLevels">setFactorLevels()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorPivot">setFactorPivot()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setSizes">setSizes()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#setSeed">setSeed()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS.Type-class.html#STRIDE">STRIDE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorOrdering">setFactorOrdering()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorShift">setFactorShift()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setSizes">setSizes()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setSeparableObjective">setSeparableObjective()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#strideGather">strideGather()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorPivot">setFactorPivot()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorSolverPackage">setFactorSolverPackage()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setSizes">setSizes()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#setShellPartition">setShellPartition()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#strideMax">strideMax()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorShift">setFactorShift()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setSolution">setSolution()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASInjection">setFASInjection()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setSizes">setSizes()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#strideMin">strideMin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFactorSolverPackage">setFactorSolverPackage()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setSolution">setSolution()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASInterpolation">setFASInterpolation()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setSizes">setSizes()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#strideNorm">strideNorm()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASInjection">setFASInjection()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASLevels">setFASLevels()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setStateDesignIS">setStateDesignIS()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setSizes">setSizes()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#strides">strides</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASInterpolation">setFASInterpolation()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASRestriction">setFASRestriction()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setSolution">setSolution()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setStencil">setStencil()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#strideScale">strideScale()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASLevels">setFASLevels()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASRScale">setFASRScale()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setStencil">setStencil()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setSolution">setSolution()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#strideScatter">strideScatter()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASRestriction">setFASRestriction()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setStencilType">setStencilType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldComponents">setFieldComponents()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setStateDesignIS">setStateDesignIS()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#strideSum">strideSum()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFASRScale">setFASRScale()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setStencilWidth">setStencilWidth()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldConstraintDof">setFieldConstraintDof()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setStencil">setStencil()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#STRING">STRING</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldComponents">setFieldComponents()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldConstraintIndices">setFieldConstraintIndices()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setStepNumber">setStepNumber()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setStencil">setStencil()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#structsymm">structsymm</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldConstraintDof">setFieldConstraintDof()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldDof">setFieldDof()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setStride">setStride()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setStencilType">setStencilType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#STRUCTURALLY_SYMMETRIC">STRUCTURALLY_SYMMETRIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldConstraintIndices">setFieldConstraintIndices()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setSupport">setSupport()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setFieldName">setFieldName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#setStencilWidth">setStencilWidth()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldDof">setFieldDof()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldName">setFieldName()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setSupportSize">setSupportSize()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setStepNumber">setStepNumber()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#SUBMATRIX">SUBMATRIX</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#setFieldName">setFieldName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitFields">setFieldSplitFields()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setStride">setStride()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html#SUBSET">SUBSET</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitFields">setFieldSplitFields()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitIS">setFieldSplitIS()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setTetGenOptions">setTetGenOptions()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setSupport">setSupport()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html#SUBSET_NONZERO_PATTERN">SUBSET_NONZERO_PATTERN</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitIS">setFieldSplitIS()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitSchurFactType">setFieldSplitSchurFactType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setTheta">setTheta()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setSupportSize">setSupportSize()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html#SUBSET_NZ">SUBSET_NZ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitSchurFactType">setFieldSplitSchurFactType()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitSchurPreType">setFieldSplitSchurPreType()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setThetaEndpoint">setThetaEndpoint()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#SUBSET_OFF_PROC_ENTRIES">SUBSET_OFF_PROC_ENTRIES</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitType">setFieldSplitType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setTetGenOptions">setTetGenOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#sum">sum()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitSchurPreType">setFieldSplitSchurPreType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setTime">setTime()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setFileMode">setFileMode()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setTheta">setTheta()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#sum">sum()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFieldSplitType">setFieldSplitType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setTimeStep">setTimeStep()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setFileName">setFileName()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setThetaEndpoint">setThetaEndpoint()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#SUNDIALS">SUNDIALS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setFileMode">setFileMode()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#setTimestep">setTimestep()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setTime">setTime()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#SVD">SVD</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setFileName">setFileName()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setTolerances">setTolerances()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setTimeStep">setTimeStep()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#swap">swap()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#setFormat">setFormat()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setTolerances">setTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#setTimestep">setTimestep()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#SYMMETRIC">SYMMETRIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setTolerances">setTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setTolerances">setTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#symmetric">symmetric</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setTolerances">setTolerances()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setTolerances">setTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#SYMMETRIC">SYMMETRIC</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setTriangleOptions">setTriangleOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setTolerances">setTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html#SYMMETRIC_MULTIPLICATIVE">SYMMETRIC_MULTIPLICATIVE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setTolerances">setTolerances()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#symmetrize">symmetrize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setTriangleOptions">setTriangleOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#SYMMETRY_ETERNAL">SYMMETRY_ETERNAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#SYMMETRY_SWEEP">SYMMETRY_SWEEP</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#SYMMLQ">SYMMLQ</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#syncFlush">syncFlush()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#syncPrint">syncPrint()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setFromOptions">setFromOptions()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html">Sys</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#setFunction">setFunction()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#SYSPFMG">SYSPFMG</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setType">setType()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setFunction">setFunction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"> </td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setFromOptions">setFromOptions()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -5000,21 +5164,29 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html">TAO</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#time">time</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html">Type</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#TCQMR">TCQMR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#time_step">time_step</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS.Type-class.html">Type</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#TCQMR">TCQMR</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#tDot">tDot()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#toAll">toAll()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html">Type</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#tDot">tDot()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#tDotBegin">tDotBegin()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#toGeneral">toGeneral()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
@@ -5022,7 +5194,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#tDotBegin">tDotBegin()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#tDotEnd">tDotEnd()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#tompi4py">tompi4py()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
@@ -5030,8 +5202,8 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#tDotEnd">tDotEnd()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#TELESCOPE">TELESCOPE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#toZero">toZero()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html">Type</a><br />
@@ -5070,7 +5242,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#THETA">THETA</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#TH">TH</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html">TS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
@@ -5078,26 +5250,26 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#THETA">THETA</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#TSIRM">TSIRM</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html">Type</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Size-class.html#THIRD">THIRD</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Size-class.html">Size</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html#TWIST">TWIST</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html">Type</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Size-class.html#THIRD_SIZE">THIRD_SIZE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Size-class.html">Size</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO.Type-class.html">Type</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#time">time</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html">Type</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -5108,42 +5280,43 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#U">U</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTime-class.html#UNSPECIFIED">UNSPECIFIED</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html">ExactFinalTime</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#use_fd">use_fd</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#UA">UA</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#UNUSED_NONZERO_LOCATION_ERR">UNUSED_NONZERO_LOCATION_ERR</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#USE_HASH_TABLE">USE_HASH_TABLE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#UA">UA</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#union">union()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#UPDATE">UPDATE</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#USE_INODES">USE_INODES</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#union">union()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html#UNPRECONDITIONED">UNPRECONDITIONED</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurFactType-class.html#UPPER">UPPER</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurFactType-class.html">SchurFactType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#use_mf">use_mf</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html#UNPRECONDITIONED">UNPRECONDITIONED</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.EquationType-class.html#UNSPECIFIED">UNSPECIFIED</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.EquationType-class.html">EquationType</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#use_ew">use_ew</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html#USER">USER</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a>)</span></td>
 </tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.EquationType-class.html#UNSPECIFIED">UNSPECIFIED</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.EquationType-class.html">EquationType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#use_fd">use_fd</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</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="V">V</a></h2></td>
@@ -5152,49 +5325,49 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html">Vec</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#view">view()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#view">view()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#vec_rhs">vec_rhs</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#vec_rhs">vec_rhs</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#vec_rhs">vec_rhs</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#vec_sol">vec_sol</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#vec_rhs">vec_rhs</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html">Viewer</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#vec_sol">vec_sol</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#vec_sol">vec_sol</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#vec_sol">vec_sol</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#view">view()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#VINEWTONRSLS">VINEWTONRSLS</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#vec_sol">vec_sol</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#VINEWTONRSLS">VINEWTONRSLS</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#VINEWTONSSLS">VINEWTONSSLS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
@@ -5202,31 +5375,31 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#VINEWTONSSLS">VINEWTONSSLS</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#visible">visible</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#vecGetClosure">vecGetClosure()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#visible">visible</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#VTK">VTK</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#VIENNACL">VIENNACL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#VTK">VTK</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#VTK_VTR">VTK_VTR</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#VTK_VTR">VTK_VTR</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#VTK_VTS">VTK_VTS</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -5234,7 +5407,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#VTK_VTS">VTK_VTS</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#VTK_VTU">VTK_VTU</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
@@ -5242,16 +5415,22 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#VTK_VTU">VTK_VTU</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#VU">VU</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#view">view()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#VU">VU</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#view">view()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#view">view()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
+<td width="33%" class="link-index"> </td>
 </tr>
 </table>
 </td></tr>
@@ -5261,15 +5440,16 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#W">W</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF.Type-class.html#WINDOW">WINDOW</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.OrderingType-class.html#WBM">WBM</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#WRITE">WRITE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#waxpy">waxpy()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#WRITE">WRITE</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF.Type-class.html#WINDOW">WINDOW</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -5335,295 +5515,295 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#__long__">__long__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.InfoType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.InfoType-class.html">InfoType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__array_interface__">__array_interface__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#__lt__">__lt__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.OrderingType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._IS_buffer-class.html#__array_interface__">__array_interface__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._IS_buffer-class.html" onclick="show_private();">_IS_buffer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#__lt__">__lt__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.OrderingType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.OrderingType-class.html">OrderingType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_buffer-class.html#__array_interface__">__array_interface__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Vec_buffer-class.html" onclick="show_private();">_Vec_buffer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__mul__">__mul__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.SORType-class.html">SORType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__mul__">__mul__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Structure-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Structure-class.html">Structure</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#__ne__">__ne__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#__ne__">__ne__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.ASMType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.ASMType-class.html">ASMType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__neg__">__neg__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.ASMType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.ASMType-class.html">ASMType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__neg__">__neg__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GAMGType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.GAMGType-class.html">GAMGType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.CompositeType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.CompositeType-class.html">CompositeType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO-class.html">AO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GASMType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.GASMType-class.html">GASMType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GAMGType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.GAMGType-class.html">GAMGType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurFactType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurFactType-class.html">SchurFactType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.GASMType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.GASMType-class.html">GASMType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.MGType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.MGType-class.html">MGType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#__contains__">__contains__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMComposite-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurFactType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurFactType-class.html">SchurFactType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#__copy__">__copy__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA-class.html">DMDA</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.SchurPreType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.SchurPreType-class.html">SchurPreType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py-module.html#__credits__">__credits__</a><br />
 <span class="index-where">(in <a href="petsc4py-module.html">petsc4py</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.PartitionerType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.PartitionerType-class.html">PartitionerType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Side-class.html">Side</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#__deepcopy__">__deepcopy__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Random.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__delitem__">__delitem__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SF.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PartitionerType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PartitionerType-class.html">PartitionerType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#__delitem__">__delitem__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP-class.html">KSP</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Random.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Random.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__delitem__">__delitem__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SF.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SF.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#__delitem__">__delitem__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Log-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Log-class.html">Log</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__div__">__div__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.NormSchedule-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__div__">__div__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.SNES.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.ScatterMode-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.ScatterMode-class.html">ScatterMode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Reason-class.html">Reason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NullSpace-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.EquationType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.EquationType-class.html">EquationType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TAO.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html">ExactFinalTimeOption</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMComposite_access-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMComposite_access-class.html" onclick="show_private();">_DMComposite_access</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ProblemType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.EquationType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.EquationType-class.html">EquationType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ExactFinalTime-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html">ExactFinalTime</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._IS_buffer-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._IS_buffer-class.html" onclick="show_private();">_IS_buffer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Partitioner-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Partitioner-class.html">Partitioner</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Option-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Option-class.html">Option</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.ProblemType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.ProblemType-class.html">ProblemType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_LocalForm-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Vec_LocalForm-class.html" onclick="show_private();">_Vec_LocalForm</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Random-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Random-class.html">Random</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_buffer-class.html#__enter__">__enter__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Vec_buffer-class.html" onclick="show_private();">_Vec_buffer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SF-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SF-class.html">SF</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Option-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Option-class.html">Option</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#__eq__">__eq__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#__eq__">__eq__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Scatter-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Scatter-class.html">Scatter</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Size-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Size-class.html">Size</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Format-class.html">Format</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#__exit__">__exit__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS-class.html">IS</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Mode-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Mode-class.html">Mode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#__exit__">__exit__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Sys-class.html">Sys</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__radd__">__radd__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Size-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Size-class.html">Size</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#__exit__">__exit__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__radd__">__radd__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Viewer.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__exit__">__exit__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__rdiv__">__rdiv__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__radd__">__radd__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
@@ -5631,7 +5811,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc._DMComposite_access-class.html" onclick="show_private();">_DMComposite_access</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__rdiv__">__rdiv__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__radd__">__radd__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
@@ -5639,31 +5819,31 @@
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__rdiv__">__rdiv__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._IS_buffer-class.html#__exit__">__exit__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._IS_buffer-class.html" onclick="show_private();">_IS_buffer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.ViewerHDF5-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__rmul__">__rmul__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__rdiv__">__rdiv__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_LocalForm-class.html#__exit__">__exit__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Vec_LocalForm-class.html" onclick="show_private();">_Vec_LocalForm</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMComposite_access-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMComposite_access-class.html" onclick="show_private();">_DMComposite_access</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__rmul__">__rmul__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#__repr__">__repr__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_buffer-class.html#__exit__">__exit__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Vec_buffer-class.html" onclick="show_private();">_Vec_buffer</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__rsub__">__rsub__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__rmul__">__rmul__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
@@ -5671,7 +5851,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._IS_buffer-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._IS_buffer-class.html" onclick="show_private();">_IS_buffer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__rsub__">__rsub__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__rmul__">__rmul__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
@@ -5679,7 +5859,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Mat_Stencil-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Mat_Stencil-class.html" onclick="show_private();">_Mat_Stencil</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__rtruediv__">__rtruediv__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__rsub__">__rsub__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
@@ -5687,7 +5867,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_LocalForm-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Vec_LocalForm-class.html" onclick="show_private();">_Vec_LocalForm</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__rtruediv__">__rtruediv__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__rsub__">__rsub__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
@@ -5695,7 +5875,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_buffer-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._Vec_buffer-class.html" onclick="show_private();">_Vec_buffer</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__setitem__">__setitem__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__rtruediv__">__rtruediv__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
@@ -5703,55 +5883,55 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#__nonzero__">__nonzero__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#__setitem__">__setitem__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__rtruediv__">__rtruediv__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#__getitem__">__getitem__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#__nonzero__">__nonzero__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__setitem__">__setitem__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__setitem__">__setitem__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Comm-class.html#__gt__">__gt__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Comm-class.html">Comm</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#__nonzero__">__nonzero__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#__setitem__">__setitem__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#__setitem__">__setitem__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#__gt__">__gt__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#__package__">__package__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#__str__">__str__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__setitem__">__setitem__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__iadd__">__iadd__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py-module.html#__package__">__package__</a><br />
 <span class="index-where">(in <a href="petsc4py-module.html">petsc4py</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__sub__">__sub__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html#__setitem__">__setitem__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" onclick="show_private();">_DMDA_Vec_array</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__iadd__">__iadd__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.lib-module.html#__package__">__package__</a><br />
 <span class="index-where">(in <a href="petsc4py.lib-module.html">petsc4py.lib</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__sub__">__sub__()</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__idiv__">__idiv__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__pos__">__pos__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__truediv__">__truediv__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__sub__">__sub__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
@@ -5759,7 +5939,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__pos__">__pos__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__truediv__">__truediv__()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__sub__">__sub__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
@@ -5767,23 +5947,23 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#__pyx_capi__">__pyx_capi__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#__type_registry__">__type_registry__</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__truediv__">__truediv__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__imul__">__imul__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.AO.Type-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.AO.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc._DMComposite_access-class.html">_DMComposite_access</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__truediv__">__truediv__()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.BoundaryType-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.BoundaryType-class.html">BoundaryType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html">_DMDA_Vec_array</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#__type_registry__">__type_registry__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
@@ -5791,7 +5971,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Options-class.html">Options</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DM.Type-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#_finalize">_finalize()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc._DMComposite_access-class.html">_DMComposite_access</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
@@ -5799,7 +5979,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc._Vec_LocalForm-class.html" onclick="show_private();">_Vec_LocalForm</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.ElementType-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA.ElementType-class.html">ElementType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#_initialize">_initialize()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc._DMDA_Vec_array-class.html">_DMDA_Vec_array</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
@@ -5807,7 +5987,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogClass-class.html">LogClass</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.InterpolationType-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA.InterpolationType-class.html">InterpolationType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc._IS_buffer-class.html">_IS_buffer</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#_finalize">_finalize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
@@ -5815,7 +5995,7 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogEvent-class.html">LogEvent</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.DMDA.StencilType-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMDA.StencilType-class.html">StencilType</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc._Mat_Stencil-class.html">_Mat_Stencil</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#_initialize">_initialize()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
@@ -5823,15 +6003,15 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#_traceback_">_traceback_</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc._IS_buffer-class.html">_IS_buffer</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__isub__">__isub__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.IS.Type-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.IS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_buffer-class.html">_Vec_buffer</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc._Mat_Stencil-class.html">_Mat_Stencil</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
@@ -5839,22 +6019,24 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.InsertMode-class.html">InsertMode</a>)</span></td>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_LocalForm-class.html">_Vec_LocalForm</a><br />
-<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Error-class.html#_traceback_">_traceback_</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.Error-class.html">Error</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__itruediv__">__itruediv__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_buffer-class.html">_Vec_buffer</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__itruediv__">__itruediv__()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.KSP.NormType-class.html">NormType</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc._Vec_LocalForm-class.html">_Vec_LocalForm</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc-module.html">petsc4py.PETSc</a>)</span></td>
 </tr>
 </table>
 </td></tr>
@@ -5890,7 +6072,7 @@
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 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 9a6daec..8fdcad0 100644
--- a/docs/apiref/module-tree.html
+++ b/docs/apiref/module-tree.html
@@ -98,7 +98,7 @@
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py-module.html b/docs/apiref/petsc4py-module.html
index bed6561..85694d7 100644
--- a/docs/apiref/petsc4py-module.html
+++ b/docs/apiref/petsc4py-module.html
@@ -69,7 +69,7 @@ communication.</p>
 
 <hr />
 <div class="fields">      <p><strong>Version:</strong>
-        3.6.0
+        3.7.0
       </p>
       <p><strong>Author:</strong>
         Lisandro Dalcin
@@ -291,7 +291,7 @@ Extension('extension_name', ...
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc-module.html b/docs/apiref/petsc4py.PETSc-module.html
index bd59dff..891d211 100644
--- a/docs/apiref/petsc4py.PETSc-module.html
+++ b/docs/apiref/petsc4py.PETSc-module.html
@@ -458,21 +458,21 @@ Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a>
     <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 0x2043b50>"><petsc4py.PETSc.Comm object at 0x2043b50></code>
+        <a name="COMM_NULL"></a><span class="summary-name">COMM_NULL</span> = <code title="<petsc4py.PETSc.Comm object at 0x7fea2aa4c510>"><petsc4py.PETSc.Comm object at 0x7fea2aa4c510></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 0x2043b90>"><petsc4py.PETSc.Comm object at 0x2043b90></code>
+        <a name="COMM_SELF"></a><span class="summary-name">COMM_SELF</span> = <code title="<petsc4py.PETSc.Comm object at 0x7fea2aa4c550>"><petsc4py.PETSc.Comm object at 0x7fea2aa4c550></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 0x2043bd0>"><petsc4py.PETSc.Comm object at 0x2043bd0></code>
+        <a name="COMM_WORLD"></a><span class="summary-name">COMM_WORLD</span> = <code title="<petsc4py.PETSc.Comm object at 0x7fea2aa4c590>"><petsc4py.PETSc.Comm object at 0x7fea2aa4c590></code>
     </td>
   </tr>
 <tr>
@@ -535,14 +535,14 @@ Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="petsc4py.PETSc-module.html#__pyx_capi__" class="summary-name">__pyx_capi__</a> = <code title="{'GetComm': <capsule object "MPI_Comm (PyObject *, MPI_Comm)" at 0x7f8\
-81dfc9450>,
- 'GetCommDefault': <capsule object "MPI_Comm (void)" at 0x7f881dfc94b0\
+        <a href="petsc4py.PETSc-module.html#__pyx_capi__" class="summary-name">__pyx_capi__</a> = <code title="{'GetComm': <capsule object "MPI_Comm (PyObject *, MPI_Comm)" at 0x7fe\
+a3f702960>,
+ 'GetCommDefault': <capsule object "MPI_Comm (void)" at 0x7fea3f7029c0\
 >,
- 'PyPetscAO_Get': <capsule object "AO (PyObject *)" at 0x7f881dfc9b40>\
+ 'PyPetscAO_Get': <capsule object "AO (PyObject *)" at 0x7fea3f706150>\
 ,
- 'PyPetscAO_New': <capsule object "PyObject *(AO)" at 0x7f881dfc9b10>,
- 'PyPetscComm_Get': <capsule object "MPI_Comm (PyObject *)" at 0x7f881\
+ 'PyPetscAO_New': <capsule object "PyObject *(AO)" at 0x7fea3f706120>,
+ 'PyPetscComm_Get': <capsule object "MPI_Comm (PyObject *)" at 0x7fea3\
 ..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">GetComm</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "MPI_Comm (PyObject<code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
@@ -592,14 +592,14 @@ Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a>
   <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">GetComm</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "MPI_Comm (PyObject *, MPI_Comm)" at 0x7f8<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-81dfc9450><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">GetCommDefault</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "MPI_Comm (void)" at 0x7f881dfc94b0<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">GetComm</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "MPI_Comm (PyObject *, MPI_Comm)" at 0x7fe<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+a3f702960><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">GetCommDefault</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "MPI_Comm (void)" at 0x7fea3f7029c0<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
 ><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PyPetscAO_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "AO (PyObject *)" at 0x7f881dfc9b40><code class="variable-op"></code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+ <code class="variable-quote">'</code><code class="variable-string">PyPetscAO_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "AO (PyObject *)" at 0x7fea3f706150><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">PyPetscAO_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(AO)" at 0x7f881dfc9b10><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PyPetscComm_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "MPI_Comm (PyObject *)" at 0x7f881<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+ <code class="variable-quote">'</code><code class="variable-string">PyPetscAO_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(AO)" at 0x7fea3f706120><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">PyPetscComm_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "MPI_Comm (PyObject *)" at 0x7fea3<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
 <code class="variable-ellipsis">...</code>
 </pre></td></tr></table>
 </dd>
@@ -664,7 +664,7 @@ Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a>
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.AO-class.html b/docs/apiref/petsc4py.PETSc.AO-class.html
index 2228f40..becba16 100644
--- a/docs/apiref/petsc4py.PETSc.AO-class.html
+++ b/docs/apiref/petsc4py.PETSc.AO-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class AO</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_ao" name="class_hierarchy_for_ao">
-<area shape="rect" id="node1" href="petsc4py.PETSc.AO-class.html" title="AO" alt="" coords="14,62,55,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.AO-class.html" title="AO" alt="" coords="15,60,56,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
 </map>
   <img src="class_hierarchy_for_ao.png" alt='' usemap="#class_hierarchy_for_ao" ismap="ismap" class="graph-without-title" />
 </center>
@@ -497,7 +497,7 @@
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.AO.Type-class.html b/docs/apiref/petsc4py.PETSc.AO.Type-class.html
index 187760a..9680be4 100644
--- a/docs/apiref/petsc4py.PETSc.AO.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.AO.Type-class.html
@@ -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="petsc4py.PETSc.AO.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.AO.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>
@@ -217,7 +217,7 @@
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Comm-class.html b/docs/apiref/petsc4py.PETSc.Comm-class.html
index cb033aa..34500c9 100644
--- a/docs/apiref/petsc4py.PETSc.Comm-class.html
+++ b/docs/apiref/petsc4py.PETSc.Comm-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class Comm</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_comm" name="class_hierarchy_for_comm">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Comm-class.html" title="Comm" alt="" coords="5,6,67,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Comm-class.html" title="Comm" alt="" coords="5,5,67,31"/>
 </map>
   <img src="class_hierarchy_for_comm.png" alt='' usemap="#class_hierarchy_for_comm" ismap="ismap" class="graph-without-title" />
 </center>
@@ -554,7 +554,7 @@
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DM-class.html b/docs/apiref/petsc4py.PETSc.DM-class.html
index 3c45e41..2b4a9ff 100644
--- a/docs/apiref/petsc4py.PETSc.DM-class.html
+++ b/docs/apiref/petsc4py.PETSc.DM-class.html
@@ -64,12 +64,12 @@
 <h1 class="epydoc">Class DM</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_dm" name="class_hierarchy_for_dm">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="192,62,235,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.DMComposite-class.html" title="DMComposite" alt="" coords="5,118,112,143"/>
-<area shape="rect" id="node3" href="petsc4py.PETSc.DMDA-class.html" title="DMDA" alt="" coords="137,118,199,143"/>
-<area shape="rect" id="node4" href="petsc4py.PETSc.DMPlex-class.html" title="DMPlex" alt="" coords="224,118,293,143"/>
-<area shape="rect" id="node5" href="petsc4py.PETSc.DMShell-class.html" title="DMShell" alt="" coords="317,118,389,143"/>
-<area shape="rect" id="node6" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="183,6,243,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="192,60,235,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.DMComposite-class.html" title="DMComposite" alt="" coords="5,115,112,140"/>
+<area shape="rect" id="node3" href="petsc4py.PETSc.DMDA-class.html" title="DMDA" alt="" coords="137,115,199,140"/>
+<area shape="rect" id="node4" href="petsc4py.PETSc.DMPlex-class.html" title="DMPlex" alt="" coords="224,115,293,140"/>
+<area shape="rect" id="node5" href="petsc4py.PETSc.DMShell-class.html" title="DMShell" alt="" coords="317,115,389,140"/>
+<area shape="rect" id="node6" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="183,5,243,31"/>
 </map>
   <img src="class_hierarchy_for_dm.png" alt='' usemap="#class_hierarchy_for_dm" ismap="ismap" class="graph-without-title" />
 </center>
@@ -147,6 +147,43 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="clearLabelStratum"></a><span class="summary-sig-name">clearLabelStratum</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">value</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 name="clearLabelValue"></a><span class="summary-sig-name">clearLabelValue</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">point</span>,
+        <span class="summary-sig-arg">value</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 name="clone"></a><span class="summary-sig-name">clone</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -332,6 +369,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="createLabel"></a><span class="summary-sig-name">createLabel</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</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 name="createLocalVec"></a><span class="summary-sig-name">createLocalVec</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -588,6 +642,92 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getLabelIdIS"></a><span class="summary-sig-name">getLabelIdIS</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</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 name="getLabelName"></a><span class="summary-sig-name">getLabelName</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">index</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 name="getLabelOutput"></a><span class="summary-sig-name">getLabelOutput</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</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 name="getLabelSize"></a><span class="summary-sig-name">getLabelSize</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</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 name="getLabelValue"></a><span class="summary-sig-name">getLabelValue</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">point</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 name="getMatrix"></a><span class="summary-sig-name">getMatrix</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -604,6 +744,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getNumLabels"></a><span class="summary-sig-name">getNumLabels</span>(<span class="summary-sig-arg">self</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 name="getPointSF"></a><span class="summary-sig-name">getPointSF</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -620,6 +776,42 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getStratumIS"></a><span class="summary-sig-name">getStratumIS</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">value</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 name="getStratumSize"></a><span class="summary-sig-name">getStratumSize</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">value</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="petsc4py.PETSc.DM-class.html#getType" class="summary-sig-name">getType</a>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -655,6 +847,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="hasLabel"></a><span class="summary-sig-name">hasLabel</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</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 name="localToGlobal"></a><span class="summary-sig-name">localToGlobal</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Vec vl</span>,
         <span class="summary-sig-arg">Vec vg</span>,
@@ -727,6 +936,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="removeLabel"></a><span class="summary-sig-name">removeLabel</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</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 name="setAppCtx"></a><span class="summary-sig-name">setAppCtx</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">appctx</span>)</span></td>
           <td align="right" valign="top">
@@ -845,6 +1071,43 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setLabelOutput"></a><span class="summary-sig-name">setLabelOutput</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">output</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 name="setLabelValue"></a><span class="summary-sig-name">setLabelValue</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">point</span>,
+        <span class="summary-sig-arg">value</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 name="setMatType"></a><span class="summary-sig-name">setMatType</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">mat_type</span>)</span><br />
       Set matrix type to be used by DM.createMat</td>
@@ -1228,7 +1491,7 @@
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DM.BoundaryType-class.html b/docs/apiref/petsc4py.PETSc.DM.BoundaryType-class.html
index 314a801..7c40762 100644
--- a/docs/apiref/petsc4py.PETSc.DM.BoundaryType-class.html
+++ b/docs/apiref/petsc4py.PETSc.DM.BoundaryType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class BoundaryType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_boundaryty" name="class_hierarchy_for_boundaryty">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DM.BoundaryType-class.html" title="BoundaryType" alt="" coords="5,6,112,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DM.BoundaryType-class.html" title="BoundaryType" alt="" coords="5,5,112,31"/>
 </map>
   <img src="class_hierarchy_for_boundaryty.png" alt='' usemap="#class_hierarchy_for_boundaryty" ismap="ismap" class="graph-without-title" />
 </center>
@@ -224,7 +224,7 @@
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DM.Type-class.html b/docs/apiref/petsc4py.PETSc.DM.Type-class.html
index df69e23..1ac2ddd 100644
--- a/docs/apiref/petsc4py.PETSc.DM.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.DM.Type-class.html
@@ -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="petsc4py.PETSc.DM.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DM.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>
@@ -259,7 +259,7 @@
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DMComposite-class.html b/docs/apiref/petsc4py.PETSc.DMComposite-class.html
index 04a7ea8..77cb455 100644
--- a/docs/apiref/petsc4py.PETSc.DMComposite-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMComposite-class.html
@@ -64,9 +64,9 @@
 <h1 class="epydoc">Class DMComposite</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_dmcomposit" name="class_hierarchy_for_dmcomposit">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="37,62,80,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.DMComposite-class.html" title="DMComposite" alt="" coords="5,118,112,143"/>
-<area shape="rect" id="node3" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="29,6,88,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="37,60,80,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.DMComposite-class.html" title="DMComposite" alt="" coords="5,115,112,140"/>
+<area shape="rect" id="node3" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="29,5,89,31"/>
 </map>
   <img src="class_hierarchy_for_dmcomposit.png" alt='' usemap="#class_hierarchy_for_dmcomposit" ismap="ismap" class="graph-without-title" />
 </center>
@@ -328,6 +328,8 @@
   <tr>
     <td colspan="2" class="summary">
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="petsc4py.PETSc.DM-class.html">DM</a></code></b>:
+      <code><a href="petsc4py.PETSc.DM-class.html#clearLabelStratum">clearLabelStratum</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#clearLabelValue">clearLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#clone">clone</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#coarsen">coarsen</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#coarsenHierarchy">coarsenHierarchy</a></code>,
@@ -338,6 +340,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVector">createGlobalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInterpolation">createInterpolation</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#createLabel">createLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createLocalVec">createLocalVec</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createLocalVector">createLocalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createMat">createMat</a></code>,
@@ -354,14 +357,24 @@
       <code><a href="petsc4py.PETSc.DM-class.html#getDefaultSection">getDefaultSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getDimension">getDimension</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getLGMap">getLGMap</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelIdIS">getLabelIdIS</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelName">getLabelName</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelOutput">getLabelOutput</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelSize">getLabelSize</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelValue">getLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getMatrix">getMatrix</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getNumLabels">getNumLabels</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getPointSF">getPointSF</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getStratumIS">getStratumIS</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getStratumSize">getStratumSize</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getType">getType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#globalToLocal">globalToLocal</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#hasLabel">hasLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#localToGlobal">localToGlobal</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#localToLocal">localToLocal</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#refine">refine</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#refineHierarchy">refineHierarchy</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#removeLabel">removeLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setAppCtx">setAppCtx</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setCoordinates">setCoordinates</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setCoordinatesLocal">setCoordinatesLocal</a></code>,
@@ -369,6 +382,8 @@
       <code><a href="petsc4py.PETSc.DM-class.html#setDefaultSection">setDefaultSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setDimension">setDimension</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setFromOptions">setFromOptions</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setLabelOutput">setLabelOutput</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setLabelValue">setLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setMatType">setMatType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setPointSF">setPointSF</a></code>,
@@ -579,7 +594,7 @@ Use via 'with' context manager (PEP 343).</blockquote>
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DMDA-class.html b/docs/apiref/petsc4py.PETSc.DMDA-class.html
index 0cd1865..d25c438 100644
--- a/docs/apiref/petsc4py.PETSc.DMDA-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMDA-class.html
@@ -64,9 +64,9 @@
 <h1 class="epydoc">Class DMDA</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_dmda" name="class_hierarchy_for_dmda">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="15,62,57,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.DMDA-class.html" title="DMDA" alt="" coords="5,118,67,143"/>
-<area shape="rect" id="node3" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="6,6,65,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="15,60,58,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.DMDA-class.html" title="DMDA" alt="" coords="5,115,68,140"/>
+<area shape="rect" id="node3" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="7,5,67,31"/>
 </map>
   <img src="class_hierarchy_for_dmda.png" alt='' usemap="#class_hierarchy_for_dmda" ismap="ismap" class="graph-without-title" />
 </center>
@@ -285,6 +285,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getCoordinateName"></a><span class="summary-sig-name">getCoordinateName</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">index</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 name="getCorners"></a><span class="summary-sig-name">getCorners</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -366,6 +383,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getFieldName"></a><span class="summary-sig-name">getFieldName</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">field</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 name="getGhostCorners"></a><span class="summary-sig-name">getGhostCorners</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -646,6 +680,24 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setCoordinateName"></a><span class="summary-sig-name">setCoordinateName</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">index</span>,
+        <span class="summary-sig-arg">name</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 name="setDim"></a><span class="summary-sig-name">setDim</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">dim</span>)</span></td>
           <td align="right" valign="top">
@@ -697,6 +749,24 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setFieldName"></a><span class="summary-sig-name">setFieldName</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">field</span>,
+        <span class="summary-sig-arg">name</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 name="setInterpolationType"></a><span class="summary-sig-name">setInterpolationType</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">interp_type</span>)</span></td>
           <td align="right" valign="top">
@@ -838,6 +908,8 @@
   <tr>
     <td colspan="2" class="summary">
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="petsc4py.PETSc.DM-class.html">DM</a></code></b>:
+      <code><a href="petsc4py.PETSc.DM-class.html#clearLabelStratum">clearLabelStratum</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#clearLabelValue">clearLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#clone">clone</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#coarsen">coarsen</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#coarsenHierarchy">coarsenHierarchy</a></code>,
@@ -848,6 +920,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVector">createGlobalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInterpolation">createInterpolation</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#createLabel">createLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createLocalVec">createLocalVec</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createLocalVector">createLocalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createMat">createMat</a></code>,
@@ -864,14 +937,24 @@
       <code><a href="petsc4py.PETSc.DM-class.html#getDefaultSection">getDefaultSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getDimension">getDimension</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getLGMap">getLGMap</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelIdIS">getLabelIdIS</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelName">getLabelName</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelOutput">getLabelOutput</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelSize">getLabelSize</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelValue">getLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getMatrix">getMatrix</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getNumLabels">getNumLabels</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getPointSF">getPointSF</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getStratumIS">getStratumIS</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getStratumSize">getStratumSize</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getType">getType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#globalToLocal">globalToLocal</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#hasLabel">hasLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#localToGlobal">localToGlobal</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#localToLocal">localToLocal</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#refine">refine</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#refineHierarchy">refineHierarchy</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#removeLabel">removeLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setAppCtx">setAppCtx</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setCoordinates">setCoordinates</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setCoordinatesLocal">setCoordinatesLocal</a></code>,
@@ -879,6 +962,8 @@
       <code><a href="petsc4py.PETSc.DM-class.html#setDefaultSection">setDefaultSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setDimension">setDimension</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setFromOptions">setFromOptions</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setLabelOutput">setLabelOutput</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setLabelValue">setLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setMatType">setMatType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setPointSF">setPointSF</a></code>,
@@ -1159,7 +1244,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DMDA.ElementType-class.html b/docs/apiref/petsc4py.PETSc.DMDA.ElementType-class.html
index 9d99eda..e4fb0b9 100644
--- a/docs/apiref/petsc4py.PETSc.DMDA.ElementType-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMDA.ElementType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ElementType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_elementtyp" name="class_hierarchy_for_elementtyp">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DMDA.ElementType-class.html" title="ElementType" alt="" coords="5,6,104,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DMDA.ElementType-class.html" title="ElementType" alt="" coords="5,5,104,31"/>
 </map>
   <img src="class_hierarchy_for_elementtyp.png" alt='' usemap="#class_hierarchy_for_elementtyp" ismap="ismap" class="graph-without-title" />
 </center>
@@ -203,7 +203,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DMDA.InterpolationType-class.html b/docs/apiref/petsc4py.PETSc.DMDA.InterpolationType-class.html
index 67de7ff..ee20d87 100644
--- a/docs/apiref/petsc4py.PETSc.DMDA.InterpolationType-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMDA.InterpolationType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class InterpolationType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_interpolat" name="class_hierarchy_for_interpolat">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DMDA.InterpolationType-class.html" title="InterpolationType" alt="" coords="5,6,128,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DMDA.InterpolationType-class.html" title="InterpolationType" alt="" coords="5,5,128,31"/>
 </map>
   <img src="class_hierarchy_for_interpolat.png" alt='' usemap="#class_hierarchy_for_interpolat" ismap="ismap" class="graph-without-title" />
 </center>
@@ -203,7 +203,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DMDA.StencilType-class.html b/docs/apiref/petsc4py.PETSc.DMDA.StencilType-class.html
index 370896f..138b7fe 100644
--- a/docs/apiref/petsc4py.PETSc.DMDA.StencilType-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMDA.StencilType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class StencilType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_stenciltyp" name="class_hierarchy_for_stenciltyp">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DMDA.StencilType-class.html" title="StencilType" alt="" coords="5,6,96,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DMDA.StencilType-class.html" title="StencilType" alt="" coords="5,5,96,31"/>
 </map>
   <img src="class_hierarchy_for_stenciltyp.png" alt='' usemap="#class_hierarchy_for_stenciltyp" ismap="ismap" class="graph-without-title" />
 </center>
@@ -203,7 +203,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DMPlex-class.html b/docs/apiref/petsc4py.PETSc.DMPlex-class.html
index 14e2967..a71f66f 100644
--- a/docs/apiref/petsc4py.PETSc.DMPlex-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMPlex-class.html
@@ -64,9 +64,9 @@
 <h1 class="epydoc">Class DMPlex</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_dmplex" name="class_hierarchy_for_dmplex">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="19,62,61,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.DMPlex-class.html" title="DMPlex" alt="" coords="5,118,75,143"/>
-<area shape="rect" id="node3" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="10,6,69,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="19,60,61,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.DMPlex-class.html" title="DMPlex" alt="" coords="5,115,75,140"/>
+<area shape="rect" id="node3" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="10,5,70,31"/>
 </map>
   <img src="class_hierarchy_for_dmplex.png" alt='' usemap="#class_hierarchy_for_dmplex" ismap="ismap" class="graph-without-title" />
 </center>
@@ -138,43 +138,6 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="clearLabelStratum"></a><span class="summary-sig-name">clearLabelStratum</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</span>,
-        <span class="summary-sig-arg">value</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 name="clearLabelValue"></a><span class="summary-sig-name">clearLabelValue</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</span>,
-        <span class="summary-sig-arg">point</span>,
-        <span class="summary-sig-arg">value</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 name="computeCellGeometryFVM"></a><span class="summary-sig-name">computeCellGeometryFVM</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">cell</span>)</span></td>
           <td align="right" valign="top">
@@ -416,8 +379,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="createLabel"></a><span class="summary-sig-name">createLabel</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</span>)</span></td>
+          <td><span class="summary-sig"><a name="createPointNumbering"></a><span class="summary-sig-name">createPointNumbering</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -491,6 +453,27 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="distributeField"></a><span class="summary-sig-name">distributeField</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">SF sf</span>,
+        <span class="summary-sig-arg">Section sec</span>,
+        <span class="summary-sig-arg">Vec vec</span>,
+        <span class="summary-sig-arg">Section newsec</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">Vec newvec</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 name="distributeOverlap"></a><span class="summary-sig-name">distributeOverlap</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">overlap</span>=<span class="summary-sig-default">0</span>)</span></td>
           <td align="right" valign="top">
@@ -677,92 +660,6 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getLabelIdIS"></a><span class="summary-sig-name">getLabelIdIS</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</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 name="getLabelName"></a><span class="summary-sig-name">getLabelName</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">index</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 name="getLabelOutput"></a><span class="summary-sig-name">getLabelOutput</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</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 name="getLabelSize"></a><span class="summary-sig-name">getLabelSize</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</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 name="getLabelValue"></a><span class="summary-sig-name">getLabelValue</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</span>,
-        <span class="summary-sig-arg">point</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 name="getMaxSizes"></a><span class="summary-sig-name">getMaxSizes</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -796,22 +693,6 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getNumLabels"></a><span class="summary-sig-name">getNumLabels</span>(<span class="summary-sig-arg">self</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 name="getOrdering"></a><span class="summary-sig-name">getOrdering</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">otype</span>)</span></td>
           <td align="right" valign="top">
@@ -877,42 +758,6 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getStratumIS"></a><span class="summary-sig-name">getStratumIS</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</span>,
-        <span class="summary-sig-arg">value</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 name="getStratumSize"></a><span class="summary-sig-name">getStratumSize</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</span>,
-        <span class="summary-sig-arg">value</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 name="getSupport"></a><span class="summary-sig-name">getSupport</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">p</span>)</span></td>
           <td align="right" valign="top">
@@ -981,23 +826,6 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="hasLabel"></a><span class="summary-sig-name">hasLabel</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</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 name="insertCone"></a><span class="summary-sig-name">insertCone</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">p</span>,
         <span class="summary-sig-arg">conePos</span>,
@@ -1086,23 +914,6 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="removeLabel"></a><span class="summary-sig-name">removeLabel</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</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 name="setAdjacencyUseClosure"></a><span class="summary-sig-name">setAdjacencyUseClosure</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">useClosure</span>=<span class="summary-sig-default">True</span>)</span></td>
           <td align="right" valign="top">
@@ -1210,43 +1021,6 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setLabelOutput"></a><span class="summary-sig-name">setLabelOutput</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</span>,
-        <span class="summary-sig-arg">output</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 name="setLabelValue"></a><span class="summary-sig-name">setLabelValue</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">name</span>,
-        <span class="summary-sig-arg">point</span>,
-        <span class="summary-sig-arg">value</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 name="setRefinementLimit"></a><span class="summary-sig-name">setRefinementLimit</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">refinementLimit</span>)</span></td>
           <td align="right" valign="top">
@@ -1399,6 +1173,8 @@
   <tr>
     <td colspan="2" class="summary">
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="petsc4py.PETSc.DM-class.html">DM</a></code></b>:
+      <code><a href="petsc4py.PETSc.DM-class.html#clearLabelStratum">clearLabelStratum</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#clearLabelValue">clearLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#clone">clone</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#coarsen">coarsen</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#coarsenHierarchy">coarsenHierarchy</a></code>,
@@ -1409,6 +1185,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVector">createGlobalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInterpolation">createInterpolation</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#createLabel">createLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createLocalVec">createLocalVec</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createLocalVector">createLocalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createMat">createMat</a></code>,
@@ -1425,14 +1202,24 @@
       <code><a href="petsc4py.PETSc.DM-class.html#getDefaultSection">getDefaultSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getDimension">getDimension</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getLGMap">getLGMap</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelIdIS">getLabelIdIS</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelName">getLabelName</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelOutput">getLabelOutput</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelSize">getLabelSize</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelValue">getLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getMatrix">getMatrix</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getNumLabels">getNumLabels</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getPointSF">getPointSF</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getStratumIS">getStratumIS</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getStratumSize">getStratumSize</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getType">getType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#globalToLocal">globalToLocal</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#hasLabel">hasLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#localToGlobal">localToGlobal</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#localToLocal">localToLocal</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#refine">refine</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#refineHierarchy">refineHierarchy</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#removeLabel">removeLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setAppCtx">setAppCtx</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setCoordinates">setCoordinates</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setCoordinatesLocal">setCoordinatesLocal</a></code>,
@@ -1440,6 +1227,8 @@
       <code><a href="petsc4py.PETSc.DM-class.html#setDefaultSection">setDefaultSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setDimension">setDimension</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setFromOptions">setFromOptions</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setLabelOutput">setLabelOutput</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setLabelValue">setLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setMatType">setMatType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setPointSF">setPointSF</a></code>,
@@ -1627,7 +1416,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.DMShell-class.html b/docs/apiref/petsc4py.PETSc.DMShell-class.html
index b2e79d1..6c3a8ad 100644
--- a/docs/apiref/petsc4py.PETSc.DMShell-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMShell-class.html
@@ -64,9 +64,9 @@
 <h1 class="epydoc">Class DMShell</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_dmshell" name="class_hierarchy_for_dmshell">
-<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="20,62,63,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.DMShell-class.html" title="DMShell" alt="" coords="5,118,77,143"/>
-<area shape="rect" id="node3" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="11,6,71,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="20,60,63,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.DMShell-class.html" title="DMShell" alt="" coords="5,115,77,140"/>
+<area shape="rect" id="node3" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="11,5,71,31"/>
 </map>
   <img src="class_hierarchy_for_dmshell.png" alt='' usemap="#class_hierarchy_for_dmshell" ismap="ismap" class="graph-without-title" />
 </center>
@@ -288,6 +288,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setCreateSubDM"></a><span class="summary-sig-name">setCreateSubDM</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">create_subdm</span>,
+        <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">kargs</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 name="setGlobalToLocal"></a><span class="summary-sig-name">setGlobalToLocal</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">begin</span>,
         <span class="summary-sig-arg">end</span>,
@@ -472,6 +491,8 @@
   <tr>
     <td colspan="2" class="summary">
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="petsc4py.PETSc.DM-class.html">DM</a></code></b>:
+      <code><a href="petsc4py.PETSc.DM-class.html#clearLabelStratum">clearLabelStratum</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#clearLabelValue">clearLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#clone">clone</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#coarsen">coarsen</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#coarsenHierarchy">coarsenHierarchy</a></code>,
@@ -482,6 +503,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVector">createGlobalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInterpolation">createInterpolation</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#createLabel">createLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createLocalVec">createLocalVec</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createLocalVector">createLocalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createMat">createMat</a></code>,
@@ -498,14 +520,24 @@
       <code><a href="petsc4py.PETSc.DM-class.html#getDefaultSection">getDefaultSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getDimension">getDimension</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getLGMap">getLGMap</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelIdIS">getLabelIdIS</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelName">getLabelName</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelOutput">getLabelOutput</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelSize">getLabelSize</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getLabelValue">getLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getMatrix">getMatrix</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getNumLabels">getNumLabels</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getPointSF">getPointSF</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getStratumIS">getStratumIS</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getStratumSize">getStratumSize</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getType">getType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#globalToLocal">globalToLocal</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#hasLabel">hasLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#localToGlobal">localToGlobal</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#localToLocal">localToLocal</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#refine">refine</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#refineHierarchy">refineHierarchy</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#removeLabel">removeLabel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setAppCtx">setAppCtx</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setCoordinates">setCoordinates</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setCoordinatesLocal">setCoordinatesLocal</a></code>,
@@ -513,6 +545,8 @@
       <code><a href="petsc4py.PETSc.DM-class.html#setDefaultSection">setDefaultSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setDimension">setDimension</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setFromOptions">setFromOptions</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setLabelOutput">setLabelOutput</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setLabelValue">setLabelValue</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setMatType">setMatType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setPointSF">setPointSF</a></code>,
@@ -700,7 +734,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Error-class.html b/docs/apiref/petsc4py.PETSc.Error-class.html
index a762229..8e281fa 100644
--- a/docs/apiref/petsc4py.PETSc.Error-class.html
+++ b/docs/apiref/petsc4py.PETSc.Error-class.html
@@ -64,11 +64,11 @@
 <h1 class="epydoc">Class Error</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_error" name="class_hierarchy_for_error">
-<area shape="rect" id="node1" href="javascript:void(0);" title="exceptions.BaseException" alt="" coords="5,6,181,31"/>
-<area shape="rect" id="node2" href="javascript:void(0);" title="exceptions.Exception" alt="" coords="20,62,167,87"/>
-<area shape="rect" id="node4" href="javascript:void(0);" title="exceptions.StandardError" alt="" coords="9,118,177,143"/>
-<area shape="rect" id="node3" href="javascript:void(0);" title="exceptions.RuntimeError" alt="" coords="10,174,176,199"/>
-<area shape="rect" id="node5" href="petsc4py.PETSc.Error-class.html" title="Error" alt="" coords="68,230,119,255"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="exceptions.BaseException" alt="" coords="5,5,183,31"/>
+<area shape="rect" id="node2" href="javascript:void(0);" title="exceptions.Exception" alt="" coords="21,60,167,85"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="exceptions.StandardError" alt="" coords="9,115,179,140"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="exceptions.RuntimeError" alt="" coords="11,169,177,195"/>
+<area shape="rect" id="node5" href="petsc4py.PETSc.Error-class.html" title="Error" alt="" coords="69,224,119,249"/>
 </map>
   <img src="class_hierarchy_for_error.png" alt='' usemap="#class_hierarchy_for_error" ismap="ismap" class="graph-without-title" />
 </center>
@@ -363,7 +363,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.IS-class.html b/docs/apiref/petsc4py.PETSc.IS-class.html
index 20c33dd..3f2668e 100644
--- a/docs/apiref/petsc4py.PETSc.IS-class.html
+++ b/docs/apiref/petsc4py.PETSc.IS-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class IS</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_is" name="class_hierarchy_for_is">
-<area shape="rect" id="node1" href="petsc4py.PETSc.IS-class.html" title="IS" alt="" coords="17,62,52,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.IS-class.html" title="IS" alt="" coords="18,60,53,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
 </map>
   <img src="class_hierarchy_for_is.png" alt='' usemap="#class_hierarchy_for_is" ismap="ismap" class="graph-without-title" />
 </center>
@@ -1115,7 +1115,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.IS.Type-class.html b/docs/apiref/petsc4py.PETSc.IS.Type-class.html
index 447769a..9a33068 100644
--- a/docs/apiref/petsc4py.PETSc.IS.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.IS.Type-class.html
@@ -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="petsc4py.PETSc.IS.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.IS.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>
@@ -210,7 +210,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.InsertMode-class.html b/docs/apiref/petsc4py.PETSc.InsertMode-class.html
index 73461d6..ab4e3fd 100644
--- a/docs/apiref/petsc4py.PETSc.InsertMode-class.html
+++ b/docs/apiref/petsc4py.PETSc.InsertMode-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class InsertMode</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_insertmode" name="class_hierarchy_for_insertmode">
-<area shape="rect" id="node1" href="petsc4py.PETSc.InsertMode-class.html" title="InsertMode" alt="" coords="5,6,91,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.InsertMode-class.html" title="InsertMode" alt="" coords="5,5,92,31"/>
 </map>
   <img src="class_hierarchy_for_insertmode.png" alt='' usemap="#class_hierarchy_for_insertmode" ismap="ismap" class="graph-without-title" />
 </center>
@@ -293,7 +293,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.KSP-class.html b/docs/apiref/petsc4py.PETSc.KSP-class.html
index 8779e9c..0cffc62 100644
--- a/docs/apiref/petsc4py.PETSc.KSP-class.html
+++ b/docs/apiref/petsc4py.PETSc.KSP-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class KSP</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_ksp" name="class_hierarchy_for_ksp">
-<area shape="rect" id="node1" href="petsc4py.PETSc.KSP-class.html" title="KSP" alt="" coords="10,62,59,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.KSP-class.html" title="KSP" alt="" coords="11,60,60,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
 </map>
   <img src="class_hierarchy_for_ksp.png" alt='' usemap="#class_hierarchy_for_ksp" ismap="ismap" class="graph-without-title" />
 </center>
@@ -772,6 +772,44 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setComputeOperators"></a><span class="summary-sig-name">setComputeOperators</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">operators</span>,
+        <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">kargs</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 name="setComputeRHS"></a><span class="summary-sig-name">setComputeRHS</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">rhs</span>,
+        <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">kargs</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 name="setComputeSingularValues"></a><span class="summary-sig-name">setComputeSingularValues</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">bool flag</span>)</span></td>
           <td align="right" valign="top">
@@ -1696,7 +1734,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.KSP.ConvergedReason-class.html b/docs/apiref/petsc4py.PETSc.KSP.ConvergedReason-class.html
index 41fa8e6..c9179c8 100644
--- a/docs/apiref/petsc4py.PETSc.KSP.ConvergedReason-class.html
+++ b/docs/apiref/petsc4py.PETSc.KSP.ConvergedReason-class.html
@@ -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="petsc4py.PETSc.KSP.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,6,136,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.KSP.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>
@@ -329,7 +329,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.KSP.NormType-class.html b/docs/apiref/petsc4py.PETSc.KSP.NormType-class.html
index 9b460af..2c35c58 100644
--- a/docs/apiref/petsc4py.PETSc.KSP.NormType-class.html
+++ b/docs/apiref/petsc4py.PETSc.KSP.NormType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class NormType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_normtype" name="class_hierarchy_for_normtype">
-<area shape="rect" id="node1" href="petsc4py.PETSc.KSP.NormType-class.html" title="NormType" alt="" coords="5,6,88,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.KSP.NormType-class.html" title="NormType" alt="" coords="5,5,88,31"/>
 </map>
   <img src="class_hierarchy_for_normtype.png" alt='' usemap="#class_hierarchy_for_normtype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -266,7 +266,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.KSP.Type-class.html b/docs/apiref/petsc4py.PETSc.KSP.Type-class.html
index ff2324b..013063a 100644
--- a/docs/apiref/petsc4py.PETSc.KSP.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.KSP.Type-class.html
@@ -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="petsc4py.PETSc.KSP.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.KSP.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>
@@ -157,6 +157,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="CGLS"></a><span class="summary-name">CGLS</span> = <code title="'cgls'"><code class="variable-quote">'</code><code class="variable-string">cgls</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="CGNE"></a><span class="summary-name">CGNE</span> = <code title="'cgne'"><code class="variable-quote">'</code><code class="variable-string">cgne</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -206,6 +213,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="FCG"></a><span class="summary-name">FCG</span> = <code title="'fcg'"><code class="variable-quote">'</code><code class="variable-string">fcg</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="FGMRES"></a><span class="summary-name">FGMRES</span> = <code title="'fgmres'"><code class="variable-quote">'</code><code class="variable-string">fgmres</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -297,6 +311,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="PIPECGRR"></a><span class="summary-name">PIPECGRR</span> = <code title="'pipecgrr'"><code class="variable-quote">'</code><code class="variable-string">pipecgrr</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="PIPECR"></a><span class="summary-name">PIPECR</span> = <code title="'pipecr'"><code class="variable-quote">'</code><code class="variable-string">pipecr</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -304,6 +325,27 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="PIPEFCG"></a><span class="summary-name">PIPEFCG</span> = <code title="'pipefcg'"><code class="variable-quote">'</code><code class="variable-string">pipefcg</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="PIPEFGMRES"></a><span class="summary-name">PIPEFGMRES</span> = <code title="'pipefgmres'"><code class="variable-quote">'</code><code class="variable-string">pipefgmres</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="PIPEGCR"></a><span class="summary-name">PIPEGCR</span> = <code title="'pipegcr'"><code class="variable-quote">'</code><code class="variable-string">pipegcr</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="PREONLY"></a><span class="summary-name">PREONLY</span> = <code title="'preonly'"><code class="variable-quote">'</code><code class="variable-string">preonly</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -360,6 +402,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="TSIRM"></a><span class="summary-name">TSIRM</span> = <code title="'tsirm'"><code class="variable-quote">'</code><code class="variable-string">tsirm</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="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'KSPType'"><code class="variable-quote">'</code><code class="variable-string">KSPType</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -420,7 +469,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.LGMap-class.html b/docs/apiref/petsc4py.PETSc.LGMap-class.html
index 5765ed0..860d2cb 100644
--- a/docs/apiref/petsc4py.PETSc.LGMap-class.html
+++ b/docs/apiref/petsc4py.PETSc.LGMap-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class LGMap</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_lgmap" name="class_hierarchy_for_lgmap">
-<area shape="rect" id="node1" href="petsc4py.PETSc.LGMap-class.html" title="LGMap" alt="" coords="5,62,69,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="7,6,67,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.LGMap-class.html" title="LGMap" alt="" coords="5,60,69,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="7,5,67,31"/>
 </map>
   <img src="class_hierarchy_for_lgmap.png" alt='' usemap="#class_hierarchy_for_lgmap" ismap="ismap" class="graph-without-title" />
 </center>
@@ -666,7 +666,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html b/docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html
index a6afd53..ceee697 100644
--- a/docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html
+++ b/docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class MapType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_maptype" name="class_hierarchy_for_maptype">
-<area shape="rect" id="node1" href="petsc4py.PETSc.LGMap.MapType-class.html" title="MapType" alt="" coords="5,6,80,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.LGMap.MapType-class.html" title="MapType" alt="" coords="5,5,81,31"/>
 </map>
   <img src="class_hierarchy_for_maptype.png" alt='' usemap="#class_hierarchy_for_maptype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -203,7 +203,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Log-class.html b/docs/apiref/petsc4py.PETSc.Log-class.html
index c7a04f7..4d203a2 100644
--- a/docs/apiref/petsc4py.PETSc.Log-class.html
+++ b/docs/apiref/petsc4py.PETSc.Log-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class Log</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_log" name="class_hierarchy_for_log">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Log-class.html" title="Log" alt="" coords="5,6,48,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Log-class.html" title="Log" alt="" coords="5,5,48,31"/>
 </map>
   <img src="class_hierarchy_for_log.png" alt='' usemap="#class_hierarchy_for_log" ismap="ismap" class="graph-without-title" />
 </center>
@@ -277,7 +277,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="view"></a><span class="summary-sig-name">view</span>(<span class="summary-sig-arg">type self</span>,
+          <td><span class="summary-sig"><a name="view"></a><span class="summary-sig-name">view</span>(<span class="summary-sig-arg">type cls</span>,
         <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
@@ -406,7 +406,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.LogClass-class.html b/docs/apiref/petsc4py.PETSc.LogClass-class.html
index fc66406..eb45180 100644
--- a/docs/apiref/petsc4py.PETSc.LogClass-class.html
+++ b/docs/apiref/petsc4py.PETSc.LogClass-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class LogClass</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_logclass" name="class_hierarchy_for_logclass">
-<area shape="rect" id="node1" href="petsc4py.PETSc.LogClass-class.html" title="LogClass" alt="" coords="5,6,83,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.LogClass-class.html" title="LogClass" alt="" coords="5,5,83,31"/>
 </map>
   <img src="class_hierarchy_for_logclass.png" alt='' usemap="#class_hierarchy_for_logclass" ismap="ismap" class="graph-without-title" />
 </center>
@@ -356,7 +356,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.LogEvent-class.html b/docs/apiref/petsc4py.PETSc.LogEvent-class.html
index 4f5a4ee..47a7e3a 100644
--- a/docs/apiref/petsc4py.PETSc.LogEvent-class.html
+++ b/docs/apiref/petsc4py.PETSc.LogEvent-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class LogEvent</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_logevent" name="class_hierarchy_for_logevent">
-<area shape="rect" id="node1" href="petsc4py.PETSc.LogEvent-class.html" title="LogEvent" alt="" coords="5,6,83,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.LogEvent-class.html" title="LogEvent" alt="" coords="5,5,83,31"/>
 </map>
   <img src="class_hierarchy_for_logevent.png" alt='' usemap="#class_hierarchy_for_logevent" ismap="ismap" class="graph-without-title" />
 </center>
@@ -293,6 +293,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getActiveAll"></a><span class="summary-sig-name">getActiveAll</span>(<span class="summary-sig-arg">self</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 name="getName"></a><span class="summary-sig-name">getName</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -500,7 +516,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.LogStage-class.html b/docs/apiref/petsc4py.PETSc.LogStage-class.html
index 40a24c9..0401b9b 100644
--- a/docs/apiref/petsc4py.PETSc.LogStage-class.html
+++ b/docs/apiref/petsc4py.PETSc.LogStage-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class LogStage</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_logstage" name="class_hierarchy_for_logstage">
-<area shape="rect" id="node1" href="petsc4py.PETSc.LogStage-class.html" title="LogStage" alt="" coords="5,6,83,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.LogStage-class.html" title="LogStage" alt="" coords="5,5,83,31"/>
 </map>
   <img src="class_hierarchy_for_logstage.png" alt='' usemap="#class_hierarchy_for_logstage" ismap="ismap" class="graph-without-title" />
 </center>
@@ -461,7 +461,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat-class.html b/docs/apiref/petsc4py.PETSc.Mat-class.html
index 295cbe2..cc64f95 100644
--- a/docs/apiref/petsc4py.PETSc.Mat-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class Mat</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_mat" name="class_hierarchy_for_mat">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Mat-class.html" title="Mat" alt="" coords="13,62,56,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat-class.html" title="Mat" alt="" coords="13,60,57,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
 </map>
   <img src="class_hierarchy_for_mat.png" alt='' usemap="#class_hierarchy_for_mat" ismap="ismap" class="graph-without-title" />
 </center>
@@ -106,6 +106,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a href="petsc4py.PETSc.Mat.InfoType-class.html" class="summary-name">InfoType</a>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a href="petsc4py.PETSc.Mat.Option-class.html" class="summary-name">Option</a>
     </td>
   </tr>
@@ -344,7 +351,7 @@
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a name="__itruediv__"></a><span class="summary-sig-name">__itruediv__</span>(<span class="summary-sig-arg">y</span>)</span><br />
-      x/y</td>
+      x/=y</td>
           <td align="right" valign="top">
             
             
@@ -1445,6 +1452,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getInfo"></a><span class="summary-sig-name">getInfo</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">info</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 name="getLocalSize"></a><span class="summary-sig-name">getLocalSize</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -1480,6 +1504,108 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getMumpsCntl"></a><span class="summary-sig-name">getMumpsCntl</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">icntl</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 name="getMumpsIcntl"></a><span class="summary-sig-name">getMumpsIcntl</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">icntl</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 name="getMumpsInfo"></a><span class="summary-sig-name">getMumpsInfo</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">icntl</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 name="getMumpsInfog"></a><span class="summary-sig-name">getMumpsInfog</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">icntl</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 name="getMumpsRinfo"></a><span class="summary-sig-name">getMumpsRinfo</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">icntl</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 name="getMumpsRinfog"></a><span class="summary-sig-name">getMumpsRinfog</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">icntl</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 name="getNearNullSpace"></a><span class="summary-sig-name">getNearNullSpace</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -1641,6 +1767,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getRedundantMatrix"></a><span class="summary-sig-name">getRedundantMatrix</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">nsubcomm</span>,
+        <span class="summary-sig-arg">subcomm</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">Mat out</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 name="getRow"></a><span class="summary-sig-name">getRow</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">row</span>)</span></td>
           <td align="right" valign="top">
@@ -1725,6 +1870,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getSubMatrices"></a><span class="summary-sig-name">getSubMatrices</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">isrows</span>,
+        <span class="summary-sig-arg">iscols</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">submats</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 name="getSubMatrix"></a><span class="summary-sig-name">getSubMatrix</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">IS isrow</span>,
         <span class="summary-sig-arg">IS iscol</span>=<span class="summary-sig-default">None</span>,
@@ -2459,6 +2623,42 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setMumpsCntl"></a><span class="summary-sig-name">setMumpsCntl</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">icntl</span>,
+        <span class="summary-sig-arg">val</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 name="setMumpsIcntl"></a><span class="summary-sig-name">setMumpsIcntl</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">icntl</span>,
+        <span class="summary-sig-arg">ival</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 name="setNearNullSpace"></a><span class="summary-sig-name">setNearNullSpace</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">NullSpace nsp</span>)</span></td>
           <td align="right" valign="top">
@@ -3737,7 +3937,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat.AssemblyType-class.html b/docs/apiref/petsc4py.PETSc.Mat.AssemblyType-class.html
index a8848f5..fa3577e 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.AssemblyType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.AssemblyType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class AssemblyType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_assemblyty" name="class_hierarchy_for_assemblyty">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.AssemblyType-class.html" title="AssemblyType" alt="" coords="5,6,115,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.AssemblyType-class.html" title="AssemblyType" alt="" coords="5,5,115,31"/>
 </map>
   <img src="class_hierarchy_for_assemblyty.png" alt='' usemap="#class_hierarchy_for_assemblyty" ismap="ismap" class="graph-without-title" />
 </center>
@@ -217,7 +217,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat.FactorShiftType-class.html b/docs/apiref/petsc4py.PETSc.Mat.FactorShiftType-class.html
index cfb0dda..af9befd 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.FactorShiftType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.FactorShiftType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class FactorShiftType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_factorshif" name="class_hierarchy_for_factorshif">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.FactorShiftType-class.html" title="FactorShiftType" alt="" coords="5,6,120,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.FactorShiftType-class.html" title="FactorShiftType" alt="" coords="5,5,120,31"/>
 </map>
   <img src="class_hierarchy_for_factorshif.png" alt='' usemap="#class_hierarchy_for_factorshif" ismap="ismap" class="graph-without-title" />
 </center>
@@ -231,7 +231,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TS.ExactFinalTimeOption-class.html b/docs/apiref/petsc4py.PETSc.Mat.InfoType-class.html
similarity index 85%
copy from docs/apiref/petsc4py.PETSc.TS.ExactFinalTimeOption-class.html
copy to docs/apiref/petsc4py.PETSc.Mat.InfoType-class.html
index 84702ad..deda331 100644
--- a/docs/apiref/petsc4py.PETSc.TS.ExactFinalTimeOption-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.InfoType-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>petsc4py.PETSc.TS.ExactFinalTimeOption</title>
+  <title>petsc4py.PETSc.Mat.InfoType</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -44,8 +44,8 @@
       <span class="breadcrumbs">
         <a href="petsc4py-module.html">Package petsc4py</a> ::
         <a href="petsc4py.PETSc-module.html">Module PETSc</a> ::
-        <a href="petsc4py.PETSc.TS-class.html">Class TS</a> ::
-        Class ExactFinalTimeOption
+        <a href="petsc4py.PETSc.Mat-class.html">Class Mat</a> ::
+        Class InfoType
       </span>
     </td>
     <td>
@@ -55,19 +55,19 @@
     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="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html"
+            >] | <a href="petsc4py.PETSc.Mat.InfoType-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ExactFinalTimeOption</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class InfoType</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_exactfinal" name="class_hierarchy_for_exactfinal">
-<area shape="rect" id="node1" href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html" title="ExactFinalTimeOption" alt="" coords="5,6,155,31"/>
+<center>  <map id="class_hierarchy_for_infotype" name="class_hierarchy_for_infotype">
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.InfoType-class.html" title="InfoType" alt="" coords="5,5,79,31"/>
 </map>
-  <img src="class_hierarchy_for_exactfinal.png" alt='' usemap="#class_hierarchy_for_exactfinal" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_infotype.png" alt='' usemap="#class_hierarchy_for_infotype" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -129,28 +129,28 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="INTERPOLATE"></a><span class="summary-name">INTERPOLATE</span> = <code title="1">1</code>
+        <a name="GLOBAL_MAX"></a><span class="summary-name">GLOBAL_MAX</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="MATCHSTEP"></a><span class="summary-name">MATCHSTEP</span> = <code title="2">2</code>
+        <a name="GLOBAL_SUM"></a><span class="summary-name">GLOBAL_SUM</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="STEPOVER"></a><span class="summary-name">STEPOVER</span> = <code title="0">0</code>
+        <a name="LOCAL"></a><span class="summary-name">LOCAL</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="'TSExactFinalTimeOption'"><code class="variable-quote">'</code><code class="variable-string">TSExactFinalTimeOption</code><code class="variable-quote">'</code></code>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'MatInfoType'"><code class="variable-quote">'</code><code class="variable-string">MatInfoType</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -210,7 +210,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat.Option-class.html b/docs/apiref/petsc4py.PETSc.Mat.Option-class.html
index de9ff3f..42ee539 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.Option-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.Option-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Option</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_option" name="class_hierarchy_for_option">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.Option-class.html" title="Option" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.Option-class.html" title="Option" alt="" coords="5,5,65,31"/>
 </map>
   <img src="class_hierarchy_for_option.png" alt='' usemap="#class_hierarchy_for_option" ismap="ismap" class="graph-without-title" />
 </center>
@@ -185,7 +185,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NEW_NONZERO_ALLOCATION_ERR"></a><span class="summary-name">NEW_NONZERO_ALLOCATION_ERR</span> = <code title="-2">-2</code>
+        <a name="NEW_NONZERO_ALLOCATION_ERR"></a><span class="summary-name">NEW_NONZERO_ALLOCATION_ERR</span> = <code title="19">19</code>
     </td>
   </tr>
 <tr>
@@ -199,7 +199,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NEW_NONZERO_LOCATION_ERR"></a><span class="summary-name">NEW_NONZERO_LOCATION_ERR</span> = <code title="-4">-4</code>
+        <a name="NEW_NONZERO_LOCATION_ERR"></a><span class="summary-name">NEW_NONZERO_LOCATION_ERR</span> = <code title="11">11</code>
     </td>
   </tr>
 <tr>
@@ -241,6 +241,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="SUBSET_OFF_PROC_ENTRIES"></a><span class="summary-name">SUBSET_OFF_PROC_ENTRIES</span> = <code title="20">20</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="SYMMETRIC"></a><span class="summary-name">SYMMETRIC</span> = <code title="1">1</code>
     </td>
   </tr>
@@ -255,7 +262,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="UNUSED_NONZERO_LOCATION_ERR"></a><span class="summary-name">UNUSED_NONZERO_LOCATION_ERR</span> = <code title="-3">-3</code>
+        <a name="UNUSED_NONZERO_LOCATION_ERR"></a><span class="summary-name">UNUSED_NONZERO_LOCATION_ERR</span> = <code title="-2">-2</code>
     </td>
   </tr>
 <tr>
@@ -336,7 +343,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat.OrderingType-class.html b/docs/apiref/petsc4py.PETSc.Mat.OrderingType-class.html
index 5f4e3a5..859841c 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.OrderingType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.OrderingType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class OrderingType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_orderingty" name="class_hierarchy_for_orderingty">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.OrderingType-class.html" title="OrderingType" alt="" coords="5,6,104,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.OrderingType-class.html" title="OrderingType" alt="" coords="5,5,105,31"/>
 </map>
   <img src="class_hierarchy_for_orderingty.png" alt='' usemap="#class_hierarchy_for_orderingty" ismap="ismap" class="graph-without-title" />
 </center>
@@ -178,6 +178,20 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="SPECTRAL"></a><span class="summary-name">SPECTRAL</span> = <code title="'spectral'"><code class="variable-quote">'</code><code class="variable-string">spectral</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="WBM"></a><span class="summary-name">WBM</span> = <code title="'wbm'"><code class="variable-quote">'</code><code class="variable-string">wbm</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="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'MatOrderingType'"><code class="variable-quote">'</code><code class="variable-string">MatOrderingType</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -238,7 +252,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat.SORType-class.html b/docs/apiref/petsc4py.PETSc.Mat.SORType-class.html
index 1948f1c..7740b30 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.SORType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.SORType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class SORType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_sortype" name="class_hierarchy_for_sortype">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.SORType-class.html" title="SORType" alt="" coords="5,6,85,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.SORType-class.html" title="SORType" alt="" coords="5,5,85,31"/>
 </map>
   <img src="class_hierarchy_for_sortype.png" alt='' usemap="#class_hierarchy_for_sortype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -178,6 +178,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="LOCAL_SYMMETRIC_SWEEP"></a><span class="summary-name">LOCAL_SYMMETRIC_SWEEP</span> = <code title="12">12</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="SYMMETRY_SWEEP"></a><span class="summary-name">SYMMETRY_SWEEP</span> = <code title="3">3</code>
     </td>
   </tr>
@@ -252,7 +259,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat.Structure-class.html b/docs/apiref/petsc4py.PETSc.Mat.Structure-class.html
index 2cdbc87..38dfefc 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.Structure-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.Structure-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Structure</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_structure" name="class_hierarchy_for_structure">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.Structure-class.html" title="Structure" alt="" coords="5,6,80,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.Structure-class.html" title="Structure" alt="" coords="5,5,80,31"/>
 </map>
   <img src="class_hierarchy_for_structure.png" alt='' usemap="#class_hierarchy_for_structure" ismap="ismap" class="graph-without-title" />
 </center>
@@ -252,7 +252,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat.Type-class.html b/docs/apiref/petsc4py.PETSc.Mat.Type-class.html
index ad2e0ce..6f901c3 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.Type-class.html
@@ -65,7 +65,7 @@
 <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="petsc4py.PETSc.Mat.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Mat.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>
@@ -164,13 +164,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="AIJPTHREAD"></a><span class="summary-name">AIJPTHREAD</span> = <code title="'aijpthread'"><code class="variable-quote">'</code><code class="variable-string">aijpthread</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="AIJVIENNACL"></a><span class="summary-name">AIJVIENNACL</span> = <code title="'aijviennacl'"><code class="variable-quote">'</code><code class="variable-string">aijviennacl</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -395,6 +388,20 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="NORMALHERMITIAN"></a><span class="summary-name">NORMALHERMITIAN</span> = <code title="'normalh'"><code class="variable-quote">'</code><code class="variable-string">normalh</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="PREALLOCATOR"></a><span class="summary-name">PREALLOCATOR</span> = <code title="'preallocator'"><code class="variable-quote">'</code><code class="variable-string">preallocator</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="PYTHON"></a><span class="summary-name">PYTHON</span> = <code title="'python'"><code class="variable-quote">'</code><code class="variable-string">python</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -472,13 +479,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="SEQAIJPTHREAD"></a><span class="summary-name">SEQAIJPTHREAD</span> = <code title="'seqaijpthread'"><code class="variable-quote">'</code><code class="variable-string">seqaijpthread</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="SEQAIJVIENNACL"></a><span class="summary-name">SEQAIJVIENNACL</span> = <code title="'seqaijviennacl'"><code class="variable-quote">'</code><code class="variable-string">seqaijviennacl</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -616,7 +616,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.NormType-class.html b/docs/apiref/petsc4py.PETSc.NormType-class.html
index 47799d7..1a77935 100644
--- a/docs/apiref/petsc4py.PETSc.NormType-class.html
+++ b/docs/apiref/petsc4py.PETSc.NormType-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class NormType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_normtype_2" name="class_hierarchy_for_normtype_2">
-<area shape="rect" id="node1" href="petsc4py.PETSc.NormType-class.html" title="NormType" alt="" coords="5,6,88,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.NormType-class.html" title="NormType" alt="" coords="5,5,88,31"/>
 </map>
   <img src="class_hierarchy_for_normtype_2.png" alt='' usemap="#class_hierarchy_for_normtype_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -286,7 +286,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.NullSpace-class.html b/docs/apiref/petsc4py.PETSc.NullSpace-class.html
index ab63011..ab70470 100644
--- a/docs/apiref/petsc4py.PETSc.NullSpace-class.html
+++ b/docs/apiref/petsc4py.PETSc.NullSpace-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class NullSpace</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_nullspace" name="class_hierarchy_for_nullspace">
-<area shape="rect" id="node1" href="petsc4py.PETSc.NullSpace-class.html" title="NullSpace" alt="" coords="5,62,88,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="17,6,76,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.NullSpace-class.html" title="NullSpace" alt="" coords="5,60,88,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="17,5,77,31"/>
 </map>
   <img src="class_hierarchy_for_nullspace.png" alt='' usemap="#class_hierarchy_for_nullspace" ismap="ismap" class="graph-without-title" />
 </center>
@@ -480,7 +480,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Object-class.html b/docs/apiref/petsc4py.PETSc.Object-class.html
index c2600c9..f03dfb1 100644
--- a/docs/apiref/petsc4py.PETSc.Object-class.html
+++ b/docs/apiref/petsc4py.PETSc.Object-class.html
@@ -64,30 +64,30 @@
 <h1 class="epydoc">Class Object</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_object" name="class_hierarchy_for_object">
-<area shape="rect" id="node1" href="petsc4py.PETSc.AO-class.html" title="AO" alt="" coords="126,62,167,87"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="192,62,235,87"/>
-<area shape="rect" id="node3" href="petsc4py.PETSc.DMComposite-class.html" title="DMComposite" alt="" coords="5,118,112,143"/>
-<area shape="rect" id="node4" href="petsc4py.PETSc.DMDA-class.html" title="DMDA" alt="" coords="137,118,199,143"/>
-<area shape="rect" id="node5" href="petsc4py.PETSc.DMPlex-class.html" title="DMPlex" alt="" coords="224,118,293,143"/>
-<area shape="rect" id="node6" href="petsc4py.PETSc.DMShell-class.html" title="DMShell" alt="" coords="317,118,389,143"/>
-<area shape="rect" id="node7" href="petsc4py.PETSc.IS-class.html" title="IS" alt="" coords="259,62,293,87"/>
-<area shape="rect" id="node8" href="petsc4py.PETSc.KSP-class.html" title="KSP" alt="" coords="318,62,367,87"/>
-<area shape="rect" id="node9" href="petsc4py.PETSc.LGMap-class.html" title="LGMap" alt="" coords="392,62,456,87"/>
-<area shape="rect" id="node10" href="petsc4py.PETSc.Mat-class.html" title="Mat" alt="" coords="481,62,524,87"/>
-<area shape="rect" id="node11" href="petsc4py.PETSc.NullSpace-class.html" title="NullSpace" alt="" coords="549,62,632,87"/>
-<area shape="rect" id="node12" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="782,6,841,31"/>
-<area shape="rect" id="node13" href="petsc4py.PETSc.PC-class.html" title="PC" alt="" coords="657,62,697,87"/>
-<area shape="rect" id="node14" href="petsc4py.PETSc.Partitioner-class.html" title="Partitioner" alt="" coords="722,62,803,87"/>
-<area shape="rect" id="node15" href="petsc4py.PETSc.Random-class.html" title="Random" alt="" coords="827,62,897,87"/>
-<area shape="rect" id="node16" href="petsc4py.PETSc.SF-class.html" title="SF" alt="" coords="922,62,960,87"/>
-<area shape="rect" id="node17" href="petsc4py.PETSc.SNES-class.html" title="SNES" alt="" coords="985,62,1044,87"/>
-<area shape="rect" id="node18" href="petsc4py.PETSc.Scatter-class.html" title="Scatter" alt="" coords="1068,62,1132,87"/>
-<area shape="rect" id="node19" href="petsc4py.PETSc.Section-class.html" title="Section" alt="" coords="1156,62,1223,87"/>
-<area shape="rect" id="node20" href="petsc4py.PETSc.TAO-class.html" title="TAO" alt="" coords="1247,62,1296,87"/>
-<area shape="rect" id="node21" href="petsc4py.PETSc.TS-class.html" title="TS" alt="" coords="1321,62,1359,87"/>
-<area shape="rect" id="node22" href="petsc4py.PETSc.Vec-class.html" title="Vec" alt="" coords="1384,62,1429,87"/>
-<area shape="rect" id="node23" href="petsc4py.PETSc.Viewer-class.html" title="Viewer" alt="" coords="1454,62,1516,87"/>
-<area shape="rect" id="node24" href="petsc4py.PETSc.ViewerHDF5-class.html" title="ViewerHDF5" alt="" coords="1437,118,1533,143"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.AO-class.html" title="AO" alt="" coords="126,60,167,85"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.DM-class.html" title="DM" alt="" coords="192,60,235,85"/>
+<area shape="rect" id="node3" href="petsc4py.PETSc.DMComposite-class.html" title="DMComposite" alt="" coords="5,115,112,140"/>
+<area shape="rect" id="node4" href="petsc4py.PETSc.DMDA-class.html" title="DMDA" alt="" coords="137,115,199,140"/>
+<area shape="rect" id="node5" href="petsc4py.PETSc.DMPlex-class.html" title="DMPlex" alt="" coords="224,115,293,140"/>
+<area shape="rect" id="node6" href="petsc4py.PETSc.DMShell-class.html" title="DMShell" alt="" coords="317,115,389,140"/>
+<area shape="rect" id="node7" href="petsc4py.PETSc.IS-class.html" title="IS" alt="" coords="259,60,293,85"/>
+<area shape="rect" id="node8" href="petsc4py.PETSc.KSP-class.html" title="KSP" alt="" coords="318,60,367,85"/>
+<area shape="rect" id="node9" href="petsc4py.PETSc.LGMap-class.html" title="LGMap" alt="" coords="392,60,456,85"/>
+<area shape="rect" id="node10" href="petsc4py.PETSc.Mat-class.html" title="Mat" alt="" coords="481,60,525,85"/>
+<area shape="rect" id="node11" href="petsc4py.PETSc.NullSpace-class.html" title="NullSpace" alt="" coords="549,60,632,85"/>
+<area shape="rect" id="node12" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="782,5,842,31"/>
+<area shape="rect" id="node13" href="petsc4py.PETSc.PC-class.html" title="PC" alt="" coords="657,60,698,85"/>
+<area shape="rect" id="node14" href="petsc4py.PETSc.Partitioner-class.html" title="Partitioner" alt="" coords="722,60,803,85"/>
+<area shape="rect" id="node15" href="petsc4py.PETSc.Random-class.html" title="Random" alt="" coords="827,60,898,85"/>
+<area shape="rect" id="node16" href="petsc4py.PETSc.SF-class.html" title="SF" alt="" coords="922,60,961,85"/>
+<area shape="rect" id="node17" href="petsc4py.PETSc.SNES-class.html" title="SNES" alt="" coords="985,60,1044,85"/>
+<area shape="rect" id="node18" href="petsc4py.PETSc.Scatter-class.html" title="Scatter" alt="" coords="1068,60,1132,85"/>
+<area shape="rect" id="node19" href="petsc4py.PETSc.Section-class.html" title="Section" alt="" coords="1156,60,1223,85"/>
+<area shape="rect" id="node20" href="petsc4py.PETSc.TAO-class.html" title="TAO" alt="" coords="1247,60,1297,85"/>
+<area shape="rect" id="node21" href="petsc4py.PETSc.TS-class.html" title="TS" alt="" coords="1321,60,1359,85"/>
+<area shape="rect" id="node22" href="petsc4py.PETSc.Vec-class.html" title="Vec" alt="" coords="1384,60,1429,85"/>
+<area shape="rect" id="node23" href="petsc4py.PETSc.Viewer-class.html" title="Viewer" alt="" coords="1454,60,1517,85"/>
+<area shape="rect" id="node24" href="petsc4py.PETSc.ViewerHDF5-class.html" title="ViewerHDF5" alt="" coords="1437,115,1534,140"/>
 </map>
   <img src="class_hierarchy_for_object.png" alt='' usemap="#class_hierarchy_for_object" ismap="ismap" class="graph-without-title" />
 </center>
@@ -840,7 +840,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Options-class.html b/docs/apiref/petsc4py.PETSc.Options-class.html
index 47d770f..191e92d 100644
--- a/docs/apiref/petsc4py.PETSc.Options-class.html
+++ b/docs/apiref/petsc4py.PETSc.Options-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class Options</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_options" name="class_hierarchy_for_options">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Options-class.html" title="Options" alt="" coords="5,6,72,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Options-class.html" title="Options" alt="" coords="5,5,72,31"/>
 </map>
   <img src="class_hierarchy_for_options.png" alt='' usemap="#class_hierarchy_for_options" ismap="ismap" class="graph-without-title" />
 </center>
@@ -198,6 +198,38 @@ Options(prefix=None)
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="clear"></a><span class="summary-sig-name">clear</span>(<span class="summary-sig-arg">self</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 name="create"></a><span class="summary-sig-name">create</span>(<span class="summary-sig-arg">self</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 name="delValue"></a><span class="summary-sig-name">delValue</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">name</span>)</span></td>
           <td align="right" valign="top">
@@ -215,6 +247,22 @@ Options(prefix=None)
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="destroy"></a><span class="summary-sig-name">destroy</span>(<span class="summary-sig-arg">self</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 name="getAll"></a><span class="summary-sig-name">getAll</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -399,6 +447,23 @@ Options(prefix=None)
       
     </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="view"></a><span class="summary-sig-name">view</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span></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>object</code></b>:
@@ -546,7 +611,7 @@ Options(prefix=None)
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC-class.html b/docs/apiref/petsc4py.PETSc.PC-class.html
index 29dcc07..4738e5c 100644
--- a/docs/apiref/petsc4py.PETSc.PC-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class PC</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_pc" name="class_hierarchy_for_pc">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.PC-class.html" title="PC" alt="" coords="14,62,55,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.PC-class.html" title="PC" alt="" coords="15,60,56,85"/>
 </map>
   <img src="class_hierarchy_for_pc.png" alt='' usemap="#class_hierarchy_for_pc" ismap="ismap" class="graph-without-title" />
 </center>
@@ -120,6 +120,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a href="petsc4py.PETSc.PC.MGType-class.html" class="summary-name">MGType</a>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a href="petsc4py.PETSc.PC.SchurFactType-class.html" class="summary-name">SchurFactType</a>
     </td>
   </tr>
@@ -438,6 +445,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getHYPREType"></a><span class="summary-sig-name">getHYPREType</span>(<span class="summary-sig-arg">self</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 name="getKSP"></a><span class="summary-sig-name">getKSP</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -588,6 +611,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getMGType"></a><span class="summary-sig-name">getMGType</span>(<span class="summary-sig-arg">self</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 name="getOperators"></a><span class="summary-sig-name">getOperators</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -1064,6 +1103,110 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setHYPREDiscreteCurl"></a><span class="summary-sig-name">setHYPREDiscreteCurl</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat mat</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 name="setHYPREDiscreteGradient"></a><span class="summary-sig-name">setHYPREDiscreteGradient</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat mat</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 name="setHYPRESetAlphaPoissonMatrix"></a><span class="summary-sig-name">setHYPRESetAlphaPoissonMatrix</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat mat</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 name="setHYPRESetBetaPoissonMatrix"></a><span class="summary-sig-name">setHYPRESetBetaPoissonMatrix</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat mat</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 name="setHYPRESetEdgeConstantVectors"></a><span class="summary-sig-name">setHYPRESetEdgeConstantVectors</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec ozz</span>,
+        <span class="summary-sig-arg">Vec zoz</span>,
+        <span class="summary-sig-arg">Vec zzo</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 name="setHYPREType"></a><span class="summary-sig-name">setHYPREType</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">hypretype</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 name="setMGCyclesOnLevel"></a><span class="summary-sig-name">setMGCyclesOnLevel</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">level</span>,
         <span class="summary-sig-arg">ncycle</span>)</span></td>
@@ -1172,6 +1315,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setMGType"></a><span class="summary-sig-name">setMGType</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">mgtype</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 name="setMGX"></a><span class="summary-sig-name">setMGX</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">level</span>,
         <span class="summary-sig-arg">Vec x</span>)</span></td>
@@ -1644,7 +1804,7 @@
 <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 10:20:31 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.ASMType-class.html b/docs/apiref/petsc4py.PETSc.PC.ASMType-class.html
index 28f00dc..bc161e8 100644
--- a/docs/apiref/petsc4py.PETSc.PC.ASMType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.ASMType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ASMType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_asmtype" name="class_hierarchy_for_asmtype">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PC.ASMType-class.html" title="ASMType" alt="" coords="5,6,85,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.ASMType-class.html" title="ASMType" alt="" coords="5,5,85,31"/>
 </map>
   <img src="class_hierarchy_for_asmtype.png" alt='' usemap="#class_hierarchy_for_asmtype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -217,7 +217,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.CompositeType-class.html b/docs/apiref/petsc4py.PETSc.PC.CompositeType-class.html
index eba7ecc..34b551f 100644
--- a/docs/apiref/petsc4py.PETSc.PC.CompositeType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.CompositeType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class CompositeType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_compositet" name="class_hierarchy_for_compositet">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PC.CompositeType-class.html" title="CompositeType" alt="" coords="5,6,120,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.CompositeType-class.html" title="CompositeType" alt="" coords="5,5,120,31"/>
 </map>
   <img src="class_hierarchy_for_compositet.png" alt='' usemap="#class_hierarchy_for_compositet" ismap="ismap" class="graph-without-title" />
 </center>
@@ -224,7 +224,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html b/docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html
index 3332691..e9fc255 100644
--- a/docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class GAMGType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_gamgtype" name="class_hierarchy_for_gamgtype">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PC.GAMGType-class.html" title="GAMGType" alt="" coords="5,6,96,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.GAMGType-class.html" title="GAMGType" alt="" coords="5,5,96,31"/>
 </map>
   <img src="class_hierarchy_for_gamgtype.png" alt='' usemap="#class_hierarchy_for_gamgtype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -210,7 +210,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.GASMType-class.html b/docs/apiref/petsc4py.PETSc.PC.GASMType-class.html
index b87a958..ccc1116 100644
--- a/docs/apiref/petsc4py.PETSc.PC.GASMType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.GASMType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class GASMType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_gasmtype" name="class_hierarchy_for_gasmtype">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PC.GASMType-class.html" title="GASMType" alt="" coords="5,6,96,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.GASMType-class.html" title="GASMType" alt="" coords="5,5,96,31"/>
 </map>
   <img src="class_hierarchy_for_gasmtype.png" alt='' usemap="#class_hierarchy_for_gasmtype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -217,7 +217,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html b/docs/apiref/petsc4py.PETSc.PC.MGType-class.html
similarity index 87%
copy from docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html
copy to docs/apiref/petsc4py.PETSc.PC.MGType-class.html
index 40ae35a..c6c3dd0 100644
--- a/docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.MGType-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>petsc4py.PETSc.PC.SchurFactType</title>
+  <title>petsc4py.PETSc.PC.MGType</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -45,7 +45,7 @@
         <a href="petsc4py-module.html">Package petsc4py</a> ::
         <a href="petsc4py.PETSc-module.html">Module PETSc</a> ::
         <a href="petsc4py.PETSc.PC-class.html">Class PC</a> ::
-        Class SchurFactType
+        Class MGType
       </span>
     </td>
     <td>
@@ -55,19 +55,19 @@
     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="petsc4py.PETSc.PC.SchurFactType-class.html"
+            >] | <a href="petsc4py.PETSc.PC.MGType-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class SchurFactType</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class MGType</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_schurfactt" name="class_hierarchy_for_schurfactt">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PC.SchurFactType-class.html" title="SchurFactType" alt="" coords="5,6,115,31"/>
+<center>  <map id="class_hierarchy_for_mgtype" name="class_hierarchy_for_mgtype">
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.MGType-class.html" title="MGType" alt="" coords="5,5,77,31"/>
 </map>
-  <img src="class_hierarchy_for_schurfactt.png" alt='' usemap="#class_hierarchy_for_schurfactt" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_mgtype.png" alt='' usemap="#class_hierarchy_for_mgtype" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -129,35 +129,35 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIAG"></a><span class="summary-name">DIAG</span> = <code title="0">0</code>
+        <a name="ADDITIVE"></a><span class="summary-name">ADDITIVE</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="FULL"></a><span class="summary-name">FULL</span> = <code title="3">3</code>
+        <a name="FULL"></a><span class="summary-name">FULL</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="LOWER"></a><span class="summary-name">LOWER</span> = <code title="1">1</code>
+        <a name="KASKADE"></a><span class="summary-name">KASKADE</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="UPPER"></a><span class="summary-name">UPPER</span> = <code title="2">2</code>
+        <a name="MULTIPLICATIVE"></a><span class="summary-name">MULTIPLICATIVE</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="'PCFieldSplitSchurFactType'"><code class="variable-quote">'</code><code class="variable-string">PCFieldSplitSchurFactType</code><code class="variable-quote">'</code></code>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'PCMGType'"><code class="variable-quote">'</code><code class="variable-string">PCMGType</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -217,7 +217,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html b/docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html
index 40ae35a..b9c3d2f 100644
--- a/docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class SchurFactType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_schurfactt" name="class_hierarchy_for_schurfactt">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PC.SchurFactType-class.html" title="SchurFactType" alt="" coords="5,6,115,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.SchurFactType-class.html" title="SchurFactType" alt="" coords="5,5,116,31"/>
 </map>
   <img src="class_hierarchy_for_schurfactt.png" alt='' usemap="#class_hierarchy_for_schurfactt" ismap="ismap" class="graph-without-title" />
 </center>
@@ -217,7 +217,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.SchurPreType-class.html b/docs/apiref/petsc4py.PETSc.PC.SchurPreType-class.html
index e01b368..a14239b 100644
--- a/docs/apiref/petsc4py.PETSc.PC.SchurPreType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.SchurPreType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class SchurPreType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_schurprety" name="class_hierarchy_for_schurprety">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PC.SchurPreType-class.html" title="SchurPreType" alt="" coords="5,6,109,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.SchurPreType-class.html" title="SchurPreType" alt="" coords="5,5,111,31"/>
 </map>
   <img src="class_hierarchy_for_schurprety.png" alt='' usemap="#class_hierarchy_for_schurprety" ismap="ismap" class="graph-without-title" />
 </center>
@@ -224,7 +224,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.Side-class.html b/docs/apiref/petsc4py.PETSc.PC.Side-class.html
index 7598a5e..8128eaa 100644
--- a/docs/apiref/petsc4py.PETSc.PC.Side-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.Side-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Side</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_side" name="class_hierarchy_for_side">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PC.Side-class.html" title="Side" alt="" coords="5,6,53,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.Side-class.html" title="Side" alt="" coords="5,5,53,31"/>
 </map>
   <img src="class_hierarchy_for_side.png" alt='' usemap="#class_hierarchy_for_side" ismap="ismap" class="graph-without-title" />
 </center>
@@ -231,7 +231,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.Type-class.html b/docs/apiref/petsc4py.PETSc.PC.Type-class.html
index 9c2062f..c96cbf4 100644
--- a/docs/apiref/petsc4py.PETSc.PC.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.Type-class.html
@@ -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="petsc4py.PETSc.PC.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PC.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>
@@ -416,6 +416,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="TELESCOPE"></a><span class="summary-name">TELESCOPE</span> = <code title="'telescope'"><code class="variable-quote">'</code><code class="variable-string">telescope</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="TFS"></a><span class="summary-name">TFS</span> = <code title="'tfs'"><code class="variable-quote">'</code><code class="variable-string">tfs</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -483,7 +490,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Partitioner-class.html b/docs/apiref/petsc4py.PETSc.Partitioner-class.html
index f030136..b0b9e28 100644
--- a/docs/apiref/petsc4py.PETSc.Partitioner-class.html
+++ b/docs/apiref/petsc4py.PETSc.Partitioner-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class Partitioner</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_partitione" name="class_hierarchy_for_partitione">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="15,6,75,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Partitioner-class.html" title="Partitioner" alt="" coords="5,62,85,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="16,5,76,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Partitioner-class.html" title="Partitioner" alt="" coords="5,60,87,85"/>
 </map>
   <img src="class_hierarchy_for_partitione.png" alt='' usemap="#class_hierarchy_for_partitione" ismap="ismap" class="graph-without-title" />
 </center>
@@ -512,7 +512,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PartitionerType-class.html b/docs/apiref/petsc4py.PETSc.PartitionerType-class.html
index 14b7d35..2a04dbc 100644
--- a/docs/apiref/petsc4py.PETSc.PartitionerType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PartitionerType-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class PartitionerType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_partitione_2" name="class_hierarchy_for_partitione_2">
-<area shape="rect" id="node1" href="petsc4py.PETSc.PartitionerType-class.html" title="PartitionerType" alt="" coords="5,6,115,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.PartitionerType-class.html" title="PartitionerType" alt="" coords="5,5,116,31"/>
 </map>
   <img src="class_hierarchy_for_partitione_2.png" alt='' usemap="#class_hierarchy_for_partitione_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -209,7 +209,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Random-class.html b/docs/apiref/petsc4py.PETSc.Random-class.html
index b456942..410088b 100644
--- a/docs/apiref/petsc4py.PETSc.Random-class.html
+++ b/docs/apiref/petsc4py.PETSc.Random-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class Random</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_random" name="class_hierarchy_for_random">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="10,6,69,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Random-class.html" title="Random" alt="" coords="5,62,75,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="11,5,71,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Random-class.html" title="Random" alt="" coords="5,60,76,85"/>
 </map>
   <img src="class_hierarchy_for_random.png" alt='' usemap="#class_hierarchy_for_random" ismap="ismap" class="graph-without-title" />
 </center>
@@ -605,7 +605,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Random.Type-class.html b/docs/apiref/petsc4py.PETSc.Random.Type-class.html
index bda61f0..121f39e 100644
--- a/docs/apiref/petsc4py.PETSc.Random.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.Random.Type-class.html
@@ -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="petsc4py.PETSc.Random.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Random.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>
@@ -143,6 +143,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="RANDER48"></a><span class="summary-name">RANDER48</span> = <code title="'rander48'"><code class="variable-quote">'</code><code class="variable-string">rander48</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="SPRNG"></a><span class="summary-name">SPRNG</span> = <code title="'sprng'"><code class="variable-quote">'</code><code class="variable-string">sprng</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -210,7 +217,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.SF-class.html b/docs/apiref/petsc4py.PETSc.SF-class.html
index 417b05a..55eee29 100644
--- a/docs/apiref/petsc4py.PETSc.SF-class.html
+++ b/docs/apiref/petsc4py.PETSc.SF-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class SF</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_sf" name="class_hierarchy_for_sf">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.SF-class.html" title="SF" alt="" coords="15,62,53,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.SF-class.html" title="SF" alt="" coords="16,60,55,85"/>
 </map>
   <img src="class_hierarchy_for_sf.png" alt='' usemap="#class_hierarchy_for_sf" ismap="ismap" class="graph-without-title" />
 </center>
@@ -594,7 +594,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.SF.Type-class.html b/docs/apiref/petsc4py.PETSc.SF.Type-class.html
index 99c48af..8a47236 100644
--- a/docs/apiref/petsc4py.PETSc.SF.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.SF.Type-class.html
@@ -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="petsc4py.PETSc.SF.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.SF.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>
@@ -203,7 +203,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.SNES-class.html b/docs/apiref/petsc4py.PETSc.SNES-class.html
index 260d2bc..387add8 100644
--- a/docs/apiref/petsc4py.PETSc.SNES-class.html
+++ b/docs/apiref/petsc4py.PETSc.SNES-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class SNES</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_snes" name="class_hierarchy_for_snes">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.SNES-class.html" title="SNES" alt="" coords="5,62,64,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.SNES-class.html" title="SNES" alt="" coords="6,60,65,85"/>
 </map>
   <img src="class_hierarchy_for_snes.png" alt='' usemap="#class_hierarchy_for_snes" ismap="ismap" class="graph-without-title" />
 </center>
@@ -2314,7 +2314,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.SNES.ConvergedReason-class.html b/docs/apiref/petsc4py.PETSc.SNES.ConvergedReason-class.html
index 111dd17..a09f306 100644
--- a/docs/apiref/petsc4py.PETSc.SNES.ConvergedReason-class.html
+++ b/docs/apiref/petsc4py.PETSc.SNES.ConvergedReason-class.html
@@ -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="petsc4py.PETSc.SNES.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,6,136,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.SNES.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>
@@ -287,7 +287,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.SNES.NormSchedule-class.html b/docs/apiref/petsc4py.PETSc.SNES.NormSchedule-class.html
index 7d8ccb2..d2e6a7c 100644
--- a/docs/apiref/petsc4py.PETSc.SNES.NormSchedule-class.html
+++ b/docs/apiref/petsc4py.PETSc.SNES.NormSchedule-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class NormSchedule</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_normschedu" name="class_hierarchy_for_normschedu">
-<area shape="rect" id="node1" href="petsc4py.PETSc.SNES.NormSchedule-class.html" title="NormSchedule" alt="" coords="5,6,112,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.SNES.NormSchedule-class.html" title="NormSchedule" alt="" coords="5,5,113,31"/>
 </map>
   <img src="class_hierarchy_for_normschedu.png" alt='' usemap="#class_hierarchy_for_normschedu" ismap="ismap" class="graph-without-title" />
 </center>
@@ -273,7 +273,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.SNES.Type-class.html b/docs/apiref/petsc4py.PETSc.SNES.Type-class.html
index a23204d..707057e 100644
--- a/docs/apiref/petsc4py.PETSc.SNES.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.SNES.Type-class.html
@@ -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="petsc4py.PETSc.SNES.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.SNES.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>
@@ -322,7 +322,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Scatter-class.html b/docs/apiref/petsc4py.PETSc.Scatter-class.html
index 503abeb..cd34b2e 100644
--- a/docs/apiref/petsc4py.PETSc.Scatter-class.html
+++ b/docs/apiref/petsc4py.PETSc.Scatter-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class Scatter</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_scatter" name="class_hierarchy_for_scatter">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="7,6,67,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Scatter-class.html" title="Scatter" alt="" coords="5,62,69,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="7,5,67,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Scatter-class.html" title="Scatter" alt="" coords="5,60,69,85"/>
 </map>
   <img src="class_hierarchy_for_scatter.png" alt='' usemap="#class_hierarchy_for_scatter" ismap="ismap" class="graph-without-title" />
 </center>
@@ -555,7 +555,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.ScatterMode-class.html b/docs/apiref/petsc4py.PETSc.ScatterMode-class.html
index d3f45f3..8b098bf 100644
--- a/docs/apiref/petsc4py.PETSc.ScatterMode-class.html
+++ b/docs/apiref/petsc4py.PETSc.ScatterMode-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class ScatterMode</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_scattermod" name="class_hierarchy_for_scattermod">
-<area shape="rect" id="node1" href="petsc4py.PETSc.ScatterMode-class.html" title="ScatterMode" alt="" coords="5,6,101,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.ScatterMode-class.html" title="ScatterMode" alt="" coords="5,5,101,31"/>
 </map>
   <img src="class_hierarchy_for_scattermod.png" alt='' usemap="#class_hierarchy_for_scattermod" ismap="ismap" class="graph-without-title" />
 </center>
@@ -251,7 +251,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Section-class.html b/docs/apiref/petsc4py.PETSc.Section-class.html
index 1fb3055..5fdcb8d 100644
--- a/docs/apiref/petsc4py.PETSc.Section-class.html
+++ b/docs/apiref/petsc4py.PETSc.Section-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class Section</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_section" name="class_hierarchy_for_section">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="9,6,68,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Section-class.html" title="Section" alt="" coords="5,62,72,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="9,5,69,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Section-class.html" title="Section" alt="" coords="5,60,72,85"/>
 </map>
   <img src="class_hierarchy_for_section.png" alt='' usemap="#class_hierarchy_for_section" ismap="ismap" class="graph-without-title" />
 </center>
@@ -952,7 +952,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Sys-class.html b/docs/apiref/petsc4py.PETSc.Sys-class.html
index 4ab8fb3..8c6d4d1 100644
--- a/docs/apiref/petsc4py.PETSc.Sys-class.html
+++ b/docs/apiref/petsc4py.PETSc.Sys-class.html
@@ -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="petsc4py.PETSc.Sys-class.html" title="Sys" alt="" coords="5,6,51,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.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>
@@ -180,6 +180,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="infoAllow"></a><span class="summary-sig-name">infoAllow</span>(<span class="summary-sig-arg">type cls</span>,
+        <span class="summary-sig-arg">flag</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 name="isFinalized"></a><span class="summary-sig-name">isFinalized</span>(<span class="summary-sig-arg">type cls</span>)</span></td>
           <td align="right" valign="top">
             
@@ -245,6 +262,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="registerCitation"></a><span class="summary-sig-name">registerCitation</span>(<span class="summary-sig-arg">type cls</span>,
+        <span class="summary-sig-arg">citation</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 name="setDefaultComm"></a><span class="summary-sig-name">setDefaultComm</span>(<span class="summary-sig-arg">type cls</span>,
         <span class="summary-sig-arg">comm</span>)</span></td>
           <td align="right" valign="top">
@@ -445,7 +479,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TAO-class.html b/docs/apiref/petsc4py.PETSc.TAO-class.html
index a4f1a99..3236ffc 100644
--- a/docs/apiref/petsc4py.PETSc.TAO-class.html
+++ b/docs/apiref/petsc4py.PETSc.TAO-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class TAO</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_tao" name="class_hierarchy_for_tao">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.TAO-class.html" title="TAO" alt="" coords="10,62,59,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.TAO-class.html" title="TAO" alt="" coords="11,60,60,85"/>
 </map>
   <img src="class_hierarchy_for_tao.png" alt='' usemap="#class_hierarchy_for_tao" ismap="ismap" class="graph-without-title" />
 </center>
@@ -391,22 +391,6 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getConstraintsNorm"></a><span class="summary-sig-name">getConstraintsNorm</span>(<span class="summary-sig-arg">self</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 name="getConvergedReason"></a><span class="summary-sig-name">getConvergedReason</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -439,7 +423,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getFunctionTolerances"></a><span class="summary-sig-name">getFunctionTolerances</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getFunctionValue"></a><span class="summary-sig-name">getFunctionValue</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -455,7 +439,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getFunctionValue"></a><span class="summary-sig-name">getFunctionValue</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getGradient"></a><span class="summary-sig-name">getGradient</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -471,7 +455,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getGradient"></a><span class="summary-sig-name">getGradient</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getGradientNorm"></a><span class="summary-sig-name">getGradientNorm</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -487,7 +471,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getGradientNorm"></a><span class="summary-sig-name">getGradientNorm</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getIterationNumber"></a><span class="summary-sig-name">getIterationNumber</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -503,7 +487,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getGradientTolerances"></a><span class="summary-sig-name">getGradientTolerances</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getKSP"></a><span class="summary-sig-name">getKSP</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -519,7 +503,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getIterationNumber"></a><span class="summary-sig-name">getIterationNumber</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getLMVMH0"></a><span class="summary-sig-name">getLMVMH0</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -535,7 +519,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getKSP"></a><span class="summary-sig-name">getKSP</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getLMVMH0KSP"></a><span class="summary-sig-name">getLMVMH0KSP</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -567,7 +551,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getObjectiveTolerances"></a><span class="summary-sig-name">getObjectiveTolerances</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getObjectiveValue"></a><span class="summary-sig-name">getObjectiveValue</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -583,7 +567,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getObjectiveValue"></a><span class="summary-sig-name">getObjectiveValue</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a href="petsc4py.PETSc.TAO-class.html#getOptionsPrefix" class="summary-sig-name">getOptionsPrefix</a>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -599,7 +583,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="petsc4py.PETSc.TAO-class.html#getOptionsPrefix" class="summary-sig-name">getOptionsPrefix</a>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getSolution"></a><span class="summary-sig-name">getSolution</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -615,7 +599,7 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getSolution"></a><span class="summary-sig-name">getSolution</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getSolutionNorm"></a><span class="summary-sig-name">getSolutionNorm</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -802,24 +786,6 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setFunctionTolerances"></a><span class="summary-sig-name">setFunctionTolerances</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">fatol</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">frtol</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 name="setGradient"></a><span class="summary-sig-name">setGradient</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">gradient</span>,
         <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
@@ -839,10 +805,8 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setGradientTolerances"></a><span class="summary-sig-name">setGradientTolerances</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">gatol</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">grtol</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">gttol</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td><span class="summary-sig"><a name="setGradientNorm"></a><span class="summary-sig-name">setGradientNorm</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat mat</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -976,10 +940,8 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setMonitor"></a><span class="summary-sig-name">setMonitor</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">monitor</span>,
-        <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">kargs</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td><span class="summary-sig"><a name="setLMVMH0"></a><span class="summary-sig-name">setLMVMH0</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat mat</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -995,8 +957,8 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setObjective"></a><span class="summary-sig-name">setObjective</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">objective</span>,
+          <td><span class="summary-sig"><a name="setMonitor"></a><span class="summary-sig-name">setMonitor</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">monitor</span>,
         <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">kargs</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
@@ -1014,8 +976,8 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setObjectiveGradient"></a><span class="summary-sig-name">setObjectiveGradient</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">objgrad</span>,
+          <td><span class="summary-sig"><a name="setObjective"></a><span class="summary-sig-name">setObjective</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">objective</span>,
         <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">kargs</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
@@ -1033,9 +995,10 @@ TAO Solver
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setObjectiveTolerances"></a><span class="summary-sig-name">setObjectiveTolerances</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">fatol</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">frtol</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td><span class="summary-sig"><a name="setObjectiveGradient"></a><span class="summary-sig-name">setObjectiveGradient</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">objgrad</span>,
+        <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">kargs</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -1107,8 +1070,6 @@ TAO Solver
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a name="setTolerances"></a><span class="summary-sig-name">setTolerances</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">fatol</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">frtol</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">gatol</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">grtol</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">gttol</span>=<span class="summary-sig-default">None</span>)</span></td>
@@ -1610,7 +1571,7 @@ TAO Solver
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TAO.Reason-class.html b/docs/apiref/petsc4py.PETSc.TAO.Reason-class.html
index 6601f0f..9ca2fcd 100644
--- a/docs/apiref/petsc4py.PETSc.TAO.Reason-class.html
+++ b/docs/apiref/petsc4py.PETSc.TAO.Reason-class.html
@@ -93,20 +93,6 @@ TAO Solver Termination Reasons
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CONVERGED_FATOL"></a><span class="summary-name">CONVERGED_FATOL</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="CONVERGED_FRTOL"></a><span class="summary-name">CONVERGED_FRTOL</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_GATOL"></a><span class="summary-name">CONVERGED_GATOL</span> = <code title="3">3</code>
     </td>
   </tr>
@@ -240,7 +226,7 @@ TAO Solver Termination Reasons
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TAO.Type-class.html b/docs/apiref/petsc4py.PETSc.TAO.Type-class.html
index 20488de..8f6fcda 100644
--- a/docs/apiref/petsc4py.PETSc.TAO.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.TAO.Type-class.html
@@ -261,7 +261,7 @@ TAO Solver Types
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TS-class.html b/docs/apiref/petsc4py.PETSc.TS-class.html
index 6825ae8..224d2b3 100644
--- a/docs/apiref/petsc4py.PETSc.TS-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class TS</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_ts" name="class_hierarchy_for_ts">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.TS-class.html" title="TS" alt="" coords="15,62,53,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.TS-class.html" title="TS" alt="" coords="16,60,55,85"/>
 </map>
   <img src="class_hierarchy_for_ts.png" alt='' usemap="#class_hierarchy_for_ts" ismap="ismap" class="graph-without-title" />
 </center>
@@ -106,7 +106,14 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html" class="summary-name">ExactFinalTimeOption</a>
+        <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html" class="summary-name">ExactFinalTime</a>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html" class="summary-name">ExactFinalTimeOption</a>
     </td>
   </tr>
 <tr>
@@ -180,6 +187,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="clone"></a><span class="summary-sig-name">clone</span>(<span class="summary-sig-arg">self</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 name="computeIFunction"></a><span class="summary-sig-name">computeIFunction</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">t</span>,
         <span class="summary-sig-arg">Vec x</span>,
@@ -609,6 +632,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getPrevTime"></a><span class="summary-sig-name">getPrevTime</span>(<span class="summary-sig-arg">self</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 name="getProblemType"></a><span class="summary-sig-name">getProblemType</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -865,6 +904,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getTotalSteps"></a><span class="summary-sig-name">getTotalSteps</span>(<span class="summary-sig-arg">self</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="petsc4py.PETSc.TS-class.html#getType" class="summary-sig-name">getType</a>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -899,6 +954,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="load"></a><span class="summary-sig-name">load</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Viewer viewer</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 name="monitor"></a><span class="summary-sig-name">monitor</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">step</span>,
         <span class="summary-sig-arg">time</span>,
@@ -2029,7 +2101,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TS.ConvergedReason-class.html b/docs/apiref/petsc4py.PETSc.TS.ConvergedReason-class.html
index 51468ba..4e82b1d 100644
--- a/docs/apiref/petsc4py.PETSc.TS.ConvergedReason-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.ConvergedReason-class.html
@@ -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="petsc4py.PETSc.TS.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,6,136,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.TS.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,6 +129,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="CONVERGED_EVENT"></a><span class="summary-name">CONVERGED_EVENT</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="CONVERGED_ITERATING"></a><span class="summary-name">CONVERGED_ITERATING</span> = <code title="0">0</code>
     </td>
   </tr>
@@ -150,6 +157,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="CONVERGED_USER"></a><span class="summary-name">CONVERGED_USER</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="DIVERGED_NONLINEAR_SOLVE"></a><span class="summary-name">DIVERGED_NONLINEAR_SOLVE</span> = <code title="-1">-1</code>
     </td>
   </tr>
@@ -231,7 +245,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TS.EquationType-class.html b/docs/apiref/petsc4py.PETSc.TS.EquationType-class.html
index b5e5f49..4b90f21 100644
--- a/docs/apiref/petsc4py.PETSc.TS.EquationType-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.EquationType-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class EquationType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_equationty" name="class_hierarchy_for_equationty">
-<area shape="rect" id="node1" href="petsc4py.PETSc.TS.EquationType-class.html" title="EquationType" alt="" coords="5,6,107,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.TS.EquationType-class.html" title="EquationType" alt="" coords="5,5,108,31"/>
 </map>
   <img src="class_hierarchy_for_equationty.png" alt='' usemap="#class_hierarchy_for_equationty" ismap="ismap" class="graph-without-title" />
 </center>
@@ -280,7 +280,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TS.ExactFinalTimeOption-class.html b/docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-class.html
similarity index 90%
rename from docs/apiref/petsc4py.PETSc.TS.ExactFinalTimeOption-class.html
rename to docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-class.html
index 84702ad..cedb858 100644
--- a/docs/apiref/petsc4py.PETSc.TS.ExactFinalTimeOption-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-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>petsc4py.PETSc.TS.ExactFinalTimeOption</title>
+  <title>petsc4py.PETSc.TS.ExactFinalTime</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -45,7 +45,7 @@
         <a href="petsc4py-module.html">Package petsc4py</a> ::
         <a href="petsc4py.PETSc-module.html">Module PETSc</a> ::
         <a href="petsc4py.PETSc.TS-class.html">Class TS</a> ::
-        Class ExactFinalTimeOption
+        Class ExactFinalTime
       </span>
     </td>
     <td>
@@ -55,17 +55,17 @@
     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="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html"
+            >] | <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ExactFinalTimeOption</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class ExactFinalTime</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_exactfinal" name="class_hierarchy_for_exactfinal">
-<area shape="rect" id="node1" href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html" title="ExactFinalTimeOption" alt="" coords="5,6,155,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.TS.ExactFinalTime-class.html" title="ExactFinalTime" alt="" coords="5,5,119,31"/>
 </map>
   <img src="class_hierarchy_for_exactfinal.png" alt='' usemap="#class_hierarchy_for_exactfinal" ismap="ismap" class="graph-without-title" />
 </center>
@@ -129,28 +129,35 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="INTERPOLATE"></a><span class="summary-name">INTERPOLATE</span> = <code title="1">1</code>
+        <a name="INTERPOLATE"></a><span class="summary-name">INTERPOLATE</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="MATCHSTEP"></a><span class="summary-name">MATCHSTEP</span> = <code title="2">2</code>
+        <a name="MATCHSTEP"></a><span class="summary-name">MATCHSTEP</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="STEPOVER"></a><span class="summary-name">STEPOVER</span> = <code title="0">0</code>
+        <a name="STEPOVER"></a><span class="summary-name">STEPOVER</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="'TSExactFinalTimeOption'"><code class="variable-quote">'</code><code class="variable-string">TSExactFinalTimeOption</code><code class="variable-quote">'</code></code>
+        <a name="UNSPECIFIED"></a><span class="summary-name">UNSPECIFIED</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="'TSExactFinalTime'"><code class="variable-quote">'</code><code class="variable-string">TSExactFinalTime</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -210,7 +217,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html b/docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
index 3c4ae88..b1840db 100644
--- a/docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
@@ -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="petsc4py.PETSc.TS.ProblemType-class.html" title="ProblemType" alt="" coords="5,6,104,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.TS.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>
@@ -203,7 +203,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TS.Type-class.html b/docs/apiref/petsc4py.PETSc.TS.Type-class.html
index 6827c32..e69ff54 100644
--- a/docs/apiref/petsc4py.PETSc.TS.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.Type-class.html
@@ -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="petsc4py.PETSc.TS.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.TS.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>
@@ -136,6 +136,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="ALPHA2"></a><span class="summary-name">ALPHA2</span> = <code title="'alpha2'"><code class="variable-quote">'</code><code class="variable-string">alpha2</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="ARKIMEX"></a><span class="summary-name">ARKIMEX</span> = <code title="'arkimex'"><code class="variable-quote">'</code><code class="variable-string">arkimex</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -143,6 +150,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="BDF"></a><span class="summary-name">BDF</span> = <code title="'bdf'"><code class="variable-quote">'</code><code class="variable-string">bdf</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="BE"></a><span class="summary-name">BE</span> = <code title="'beuler'"><code class="variable-quote">'</code><code class="variable-string">beuler</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -199,6 +213,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="MIMEX"></a><span class="summary-name">MIMEX</span> = <code title="'mimex'"><code class="variable-quote">'</code><code class="variable-string">mimex</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="PSEUDO"></a><span class="summary-name">PSEUDO</span> = <code title="'pseudo'"><code class="variable-quote">'</code><code class="variable-string">pseudo</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -248,6 +269,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="TH"></a><span class="summary-name">TH</span> = <code title="'theta'"><code class="variable-quote">'</code><code class="variable-string">theta</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="THETA"></a><span class="summary-name">THETA</span> = <code title="'theta'"><code class="variable-quote">'</code><code class="variable-string">theta</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -315,7 +343,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Vec-class.html b/docs/apiref/petsc4py.PETSc.Vec-class.html
index 7c56b49..28103ec 100644
--- a/docs/apiref/petsc4py.PETSc.Vec-class.html
+++ b/docs/apiref/petsc4py.PETSc.Vec-class.html
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class Vec</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_vec" name="class_hierarchy_for_vec">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,6,64,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Vec-class.html" title="Vec" alt="" coords="12,62,57,87"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="5,5,65,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Vec-class.html" title="Vec" alt="" coords="13,60,58,85"/>
 </map>
   <img src="class_hierarchy_for_vec.png" alt='' usemap="#class_hierarchy_for_vec" ismap="ismap" class="graph-without-title" />
 </center>
@@ -312,7 +312,7 @@
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a name="__itruediv__"></a><span class="summary-sig-name">__itruediv__</span>(<span class="summary-sig-arg">y</span>)</span><br />
-      x/y</td>
+      x/=y</td>
           <td align="right" valign="top">
             
             
@@ -652,6 +652,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="chop"></a><span class="summary-sig-name">chop</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tol</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 name="conjugate"></a><span class="summary-sig-name">conjugate</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -1006,7 +1023,8 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getCUDAHandle"></a><span class="summary-sig-name">getCUDAHandle</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getCUDAHandle"></a><span class="summary-sig-name">getCUDAHandle</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">mode</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -1745,7 +1763,8 @@
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a name="restoreCUDAHandle"></a><span class="summary-sig-name">restoreCUDAHandle</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">handle</span>)</span></td>
+        <span class="summary-sig-arg">handle</span>,
+        <span class="summary-sig-arg">mode</span>=<span class="summary-sig-default">'rw'</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -2807,7 +2826,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Vec.Option-class.html b/docs/apiref/petsc4py.PETSc.Vec.Option-class.html
index a6064af..3e4ee0b 100644
--- a/docs/apiref/petsc4py.PETSc.Vec.Option-class.html
+++ b/docs/apiref/petsc4py.PETSc.Vec.Option-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Option</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_option_2" name="class_hierarchy_for_option_2">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Vec.Option-class.html" title="Option" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Vec.Option-class.html" title="Option" alt="" coords="5,5,65,31"/>
 </map>
   <img src="class_hierarchy_for_option_2.png" alt='' usemap="#class_hierarchy_for_option_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -203,7 +203,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Vec.Type-class.html b/docs/apiref/petsc4py.PETSc.Vec.Type-class.html
index 117973f..4f4f7c0 100644
--- a/docs/apiref/petsc4py.PETSc.Vec.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.Vec.Type-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_11" name="class_hierarchy_for_type_11">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Vec.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Vec.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_11.png" alt='' usemap="#class_hierarchy_for_type_11" ismap="ismap" class="graph-without-title" />
 </center>
@@ -129,7 +129,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CUSP"></a><span class="summary-name">CUSP</span> = <code title="'cusp'"><code class="variable-quote">'</code><code class="variable-string">cusp</code><code class="variable-quote">'</code></code>
+        <a name="CUSP"></a><span class="summary-name">CUSP</span> = <code title="'cuda'"><code class="variable-quote">'</code><code class="variable-string">cuda</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 <tr>
@@ -143,14 +143,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="MPICUSP"></a><span class="summary-name">MPICUSP</span> = <code title="'mpicusp'"><code class="variable-quote">'</code><code class="variable-string">mpicusp</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="MPIPTHREAD"></a><span class="summary-name">MPIPTHREAD</span> = <code title="'mpipthread'"><code class="variable-quote">'</code><code class="variable-string">mpipthread</code><code class="variable-quote">'</code></code>
+        <a name="MPICUSP"></a><span class="summary-name">MPICUSP</span> = <code title="'mpicuda'"><code class="variable-quote">'</code><code class="variable-string">mpicuda</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 <tr>
@@ -171,13 +164,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="PTHREAD"></a><span class="summary-name">PTHREAD</span> = <code title="'pthread'"><code class="variable-quote">'</code><code class="variable-string">pthread</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="SEQ"></a><span class="summary-name">SEQ</span> = <code title="'seq'"><code class="variable-quote">'</code><code class="variable-string">seq</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -185,14 +171,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="SEQCUSP"></a><span class="summary-name">SEQCUSP</span> = <code title="'seqcusp'"><code class="variable-quote">'</code><code class="variable-string">seqcusp</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="SEQPTHREAD"></a><span class="summary-name">SEQPTHREAD</span> = <code title="'seqpthread'"><code class="variable-quote">'</code><code class="variable-string">seqpthread</code><code class="variable-quote">'</code></code>
+        <a name="SEQCUSP"></a><span class="summary-name">SEQCUSP</span> = <code title="'seqcuda'"><code class="variable-quote">'</code><code class="variable-string">seqcuda</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 <tr>
@@ -287,7 +266,7 @@
 <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 10:20:32 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Viewer-class.html b/docs/apiref/petsc4py.PETSc.Viewer-class.html
index 8969fb6..1602142 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer-class.html
@@ -64,9 +64,9 @@
 <h1 class="epydoc">Class Viewer</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_viewer" name="class_hierarchy_for_viewer">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="23,6,83,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Viewer-class.html" title="Viewer" alt="" coords="22,62,84,87"/>
-<area shape="rect" id="node3" href="petsc4py.PETSc.ViewerHDF5-class.html" title="ViewerHDF5" alt="" coords="5,118,101,143"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="24,5,84,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Viewer-class.html" title="Viewer" alt="" coords="23,60,85,85"/>
+<area shape="rect" id="node3" href="petsc4py.PETSc.ViewerHDF5-class.html" title="ViewerHDF5" alt="" coords="5,115,103,140"/>
 </map>
   <img src="class_hierarchy_for_viewer.png" alt='' usemap="#class_hierarchy_for_viewer" ismap="ismap" class="graph-without-title" />
 </center>
@@ -296,7 +296,6 @@
           <td><span class="summary-sig"><a name="createASCII"></a><span class="summary-sig-name">createASCII</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">name</span>,
         <span class="summary-sig-arg">mode</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">format</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">comm</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
@@ -316,7 +315,6 @@
           <td><span class="summary-sig"><a name="createBinary"></a><span class="summary-sig-name">createBinary</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">name</span>,
         <span class="summary-sig-arg">mode</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">format</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">comm</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
@@ -376,7 +374,6 @@
           <td><span class="summary-sig"><a name="createMPIIO"></a><span class="summary-sig-name">createMPIIO</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">name</span>,
         <span class="summary-sig-arg">mode</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">format</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">comm</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
@@ -614,23 +611,6 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setFormat"></a><span class="summary-sig-name">setFormat</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">format</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 name="setType"></a><span class="summary-sig-name">setType</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">vwr_type</span>)</span></td>
           <td align="right" valign="top">
@@ -886,7 +866,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Viewer.Format-class.html b/docs/apiref/petsc4py.PETSc.Viewer.Format-class.html
index 9aefda2..88dd674 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer.Format-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer.Format-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Format</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_format" name="class_hierarchy_for_format">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Viewer.Format-class.html" title="Format" alt="" coords="5,6,67,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Viewer.Format-class.html" title="Format" alt="" coords="5,5,68,31"/>
 </map>
   <img src="class_hierarchy_for_format.png" alt='' usemap="#class_hierarchy_for_format" ismap="ismap" class="graph-without-title" />
 </center>
@@ -248,7 +248,14 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="BINARY_MATLAB"></a><span class="summary-name">BINARY_MATLAB</span> = <code title="25">25</code>
+        <a name="ASCII_XML"></a><span class="summary-name">ASCII_XML</span> = <code title="18">18</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="BINARY_MATLAB"></a><span class="summary-name">BINARY_MATLAB</span> = <code title="26">26</code>
     </td>
   </tr>
 <tr>
@@ -262,70 +269,70 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DRAW_BASIC"></a><span class="summary-name">DRAW_BASIC</span> = <code title="18">18</code>
+        <a name="DRAW_BASIC"></a><span class="summary-name">DRAW_BASIC</span> = <code title="19">19</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DRAW_CONTOUR"></a><span class="summary-name">DRAW_CONTOUR</span> = <code title="20">20</code>
+        <a name="DRAW_CONTOUR"></a><span class="summary-name">DRAW_CONTOUR</span> = <code title="21">21</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DRAW_LG"></a><span class="summary-name">DRAW_LG</span> = <code title="19">19</code>
+        <a name="DRAW_LG"></a><span class="summary-name">DRAW_LG</span> = <code title="20">20</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DRAW_PORTS"></a><span class="summary-name">DRAW_PORTS</span> = <code title="21">21</code>
+        <a name="DRAW_PORTS"></a><span class="summary-name">DRAW_PORTS</span> = <code title="22">22</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="HDF5_VIZ"></a><span class="summary-name">HDF5_VIZ</span> = <code title="27">27</code>
+        <a name="HDF5_VIZ"></a><span class="summary-name">HDF5_VIZ</span> = <code title="28">28</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NATIVE"></a><span class="summary-name">NATIVE</span> = <code title="26">26</code>
+        <a name="NATIVE"></a><span class="summary-name">NATIVE</span> = <code title="27">27</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NOFORMAT"></a><span class="summary-name">NOFORMAT</span> = <code title="28">28</code>
+        <a name="NOFORMAT"></a><span class="summary-name">NOFORMAT</span> = <code title="29">29</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="VTK_VTR"></a><span class="summary-name">VTK_VTR</span> = <code title="23">23</code>
+        <a name="VTK_VTR"></a><span class="summary-name">VTK_VTR</span> = <code title="24">24</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="VTK_VTS"></a><span class="summary-name">VTK_VTS</span> = <code title="22">22</code>
+        <a name="VTK_VTS"></a><span class="summary-name">VTK_VTS</span> = <code title="23">23</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="VTK_VTU"></a><span class="summary-name">VTK_VTU</span> = <code title="24">24</code>
+        <a name="VTK_VTU"></a><span class="summary-name">VTK_VTU</span> = <code title="25">25</code>
     </td>
   </tr>
 <tr>
@@ -392,7 +399,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Viewer.Mode-class.html b/docs/apiref/petsc4py.PETSc.Viewer.Mode-class.html
index 7b2778e..43e8a37 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer.Mode-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer.Mode-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Mode</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_mode" name="class_hierarchy_for_mode">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Viewer.Mode-class.html" title="Mode" alt="" coords="5,6,59,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Viewer.Mode-class.html" title="Mode" alt="" coords="5,5,60,31"/>
 </map>
   <img src="class_hierarchy_for_mode.png" alt='' usemap="#class_hierarchy_for_mode" ismap="ismap" class="graph-without-title" />
 </center>
@@ -266,7 +266,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Viewer.Size-class.html b/docs/apiref/petsc4py.PETSc.Viewer.Size-class.html
index ca72061..d0c6626 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer.Size-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer.Size-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Size</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_size" name="class_hierarchy_for_size">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Viewer.Size-class.html" title="Size" alt="" coords="5,6,53,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Viewer.Size-class.html" title="Size" alt="" coords="5,5,53,31"/>
 </map>
   <img src="class_hierarchy_for_size.png" alt='' usemap="#class_hierarchy_for_size" ismap="ismap" class="graph-without-title" />
 </center>
@@ -245,7 +245,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Viewer.Type-class.html b/docs/apiref/petsc4py.PETSc.Viewer.Type-class.html
index 6cc5912..55fd30a 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer.Type-class.html
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_12" name="class_hierarchy_for_type_12">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Viewer.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Viewer.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_12.png" alt='' usemap="#class_hierarchy_for_type_12" ismap="ismap" class="graph-without-title" />
 </center>
@@ -273,7 +273,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.ViewerHDF5-class.html b/docs/apiref/petsc4py.PETSc.ViewerHDF5-class.html
index 1c5349b..ca9f504 100644
--- a/docs/apiref/petsc4py.PETSc.ViewerHDF5-class.html
+++ b/docs/apiref/petsc4py.PETSc.ViewerHDF5-class.html
@@ -64,9 +64,9 @@
 <h1 class="epydoc">Class ViewerHDF5</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_viewerhdf5" name="class_hierarchy_for_viewerhdf5">
-<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="23,6,83,31"/>
-<area shape="rect" id="node2" href="petsc4py.PETSc.Viewer-class.html" title="Viewer" alt="" coords="22,62,84,87"/>
-<area shape="rect" id="node3" href="petsc4py.PETSc.ViewerHDF5-class.html" title="ViewerHDF5" alt="" coords="5,118,101,143"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc.Object-class.html" title="Object" alt="" coords="24,5,84,31"/>
+<area shape="rect" id="node2" href="petsc4py.PETSc.Viewer-class.html" title="Viewer" alt="" coords="23,60,85,85"/>
+<area shape="rect" id="node3" href="petsc4py.PETSc.ViewerHDF5-class.html" title="ViewerHDF5" alt="" coords="5,115,103,140"/>
 </map>
   <img src="class_hierarchy_for_viewerhdf5.png" alt='' usemap="#class_hierarchy_for_viewerhdf5" ismap="ismap" class="graph-without-title" />
 </center>
@@ -191,8 +191,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="incrementTimestep"></a><span class="summary-sig-name">incrementTimestep</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">timestep</span>)</span></td>
+          <td><span class="summary-sig"><a name="incrementTimestep"></a><span class="summary-sig-name">incrementTimestep</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -280,7 +279,6 @@
       <code><a href="petsc4py.PETSc.Viewer-class.html#setDrawInfo">setDrawInfo</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#setFileMode">setFileMode</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#setFileName">setFileName</a></code>,
-      <code><a href="petsc4py.PETSc.Viewer-class.html#setFormat">setFormat</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#setType">setType</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#view">view</a></code>
       </p>
@@ -467,7 +465,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc._DMComposite_access-class.html b/docs/apiref/petsc4py.PETSc._DMComposite_access-class.html
index 1ce5288..cb3fcb7 100644
--- a/docs/apiref/petsc4py.PETSc._DMComposite_access-class.html
+++ b/docs/apiref/petsc4py.PETSc._DMComposite_access-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class _DMComposite_access</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for__dmcomposi" name="class_hierarchy_for__dmcomposi">
-<area shape="rect" id="node1" href="petsc4py.PETSc._DMComposite_access-class.html" title="_DMComposite_access" alt="" coords="5,6,168,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc._DMComposite_access-class.html" title="_DMComposite_access" alt="" coords="5,5,168,31"/>
 </map>
   <img src="class_hierarchy_for__dmcomposi.png" alt='' usemap="#class_hierarchy_for__dmcomposi" ismap="ismap" class="graph-without-title" />
 </center>
@@ -255,7 +255,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc._DMDA_Vec_array-class.html b/docs/apiref/petsc4py.PETSc._DMDA_Vec_array-class.html
index b5cb4c4..d9fde80 100644
--- a/docs/apiref/petsc4py.PETSc._DMDA_Vec_array-class.html
+++ b/docs/apiref/petsc4py.PETSc._DMDA_Vec_array-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class _DMDA_Vec_array</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for__dmda_vec_" name="class_hierarchy_for__dmda_vec_">
-<area shape="rect" id="node1" href="petsc4py.PETSc._DMDA_Vec_array-class.html" title="_DMDA_Vec_array" alt="" coords="5,6,139,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc._DMDA_Vec_array-class.html" title="_DMDA_Vec_array" alt="" coords="5,5,140,31"/>
 </map>
   <img src="class_hierarchy_for__dmda_vec_.png" alt='' usemap="#class_hierarchy_for__dmda_vec_" ismap="ismap" class="graph-without-title" />
 </center>
@@ -342,7 +342,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc._IS_buffer-class.html b/docs/apiref/petsc4py.PETSc._IS_buffer-class.html
index dd4d14e..7264e75 100644
--- a/docs/apiref/petsc4py.PETSc._IS_buffer-class.html
+++ b/docs/apiref/petsc4py.PETSc._IS_buffer-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class _IS_buffer</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for__is_buffer" name="class_hierarchy_for__is_buffer">
-<area shape="rect" id="node1" href="petsc4py.PETSc._IS_buffer-class.html" title="_IS_buffer" alt="" coords="5,6,88,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc._IS_buffer-class.html" title="_IS_buffer" alt="" coords="5,5,88,31"/>
 </map>
   <img src="class_hierarchy_for__is_buffer.png" alt='' usemap="#class_hierarchy_for__is_buffer" ismap="ismap" class="graph-without-title" />
 </center>
@@ -262,7 +262,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc._Mat_Stencil-class.html b/docs/apiref/petsc4py.PETSc._Mat_Stencil-class.html
index 62d2a83..846127b 100644
--- a/docs/apiref/petsc4py.PETSc._Mat_Stencil-class.html
+++ b/docs/apiref/petsc4py.PETSc._Mat_Stencil-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class _Mat_Stencil</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for__mat_stenc" name="class_hierarchy_for__mat_stenc">
-<area shape="rect" id="node1" href="petsc4py.PETSc._Mat_Stencil-class.html" title="_Mat_Stencil" alt="" coords="5,6,104,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc._Mat_Stencil-class.html" title="_Mat_Stencil" alt="" coords="5,5,104,31"/>
 </map>
   <img src="class_hierarchy_for__mat_stenc.png" alt='' usemap="#class_hierarchy_for__mat_stenc" ismap="ismap" class="graph-without-title" />
 </center>
@@ -264,7 +264,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc._Vec_LocalForm-class.html b/docs/apiref/petsc4py.PETSc._Vec_LocalForm-class.html
index e154e3f..100c374 100644
--- a/docs/apiref/petsc4py.PETSc._Vec_LocalForm-class.html
+++ b/docs/apiref/petsc4py.PETSc._Vec_LocalForm-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class _Vec_LocalForm</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for__vec_local" name="class_hierarchy_for__vec_local">
-<area shape="rect" id="node1" href="petsc4py.PETSc._Vec_LocalForm-class.html" title="_Vec_LocalForm" alt="" coords="5,6,125,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc._Vec_LocalForm-class.html" title="_Vec_LocalForm" alt="" coords="5,5,125,31"/>
 </map>
   <img src="class_hierarchy_for__vec_local.png" alt='' usemap="#class_hierarchy_for__vec_local" ismap="ismap" class="graph-without-title" />
 </center>
@@ -297,7 +297,7 @@ Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a>
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc._Vec_buffer-class.html b/docs/apiref/petsc4py.PETSc._Vec_buffer-class.html
index 0ae30ae..f12a68b 100644
--- a/docs/apiref/petsc4py.PETSc._Vec_buffer-class.html
+++ b/docs/apiref/petsc4py.PETSc._Vec_buffer-class.html
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class _Vec_buffer</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for__vec_buffe" name="class_hierarchy_for__vec_buffe">
-<area shape="rect" id="node1" href="petsc4py.PETSc._Vec_buffer-class.html" title="_Vec_buffer" alt="" coords="5,6,96,31"/>
+<area shape="rect" id="node1" href="petsc4py.PETSc._Vec_buffer-class.html" title="_Vec_buffer" alt="" coords="5,5,97,31"/>
 </map>
   <img src="class_hierarchy_for__vec_buffe.png" alt='' usemap="#class_hierarchy_for__vec_buffe" ismap="ismap" class="graph-without-title" />
 </center>
@@ -262,7 +262,7 @@
 <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 10:20:33 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.lib-module.html b/docs/apiref/petsc4py.lib-module.html
index 6df4fbf..bff73bf 100644
--- a/docs/apiref/petsc4py.lib-module.html
+++ b/docs/apiref/petsc4py.lib-module.html
@@ -238,7 +238,7 @@ environmental variable, or a configuration file.</p>
 <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 10:20:30 2015
+    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 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 3ac9595..a35ce72 100644
--- a/docs/apiref/redirect.html
+++ b/docs/apiref/redirect.html
@@ -7,7 +7,7 @@
 <body>
 <script type="text/javascript">
 <!--
-var pages = ["petsc4py.PETSc.TS.ExactFinalTimeOption-c", "petsc4py.PETSc.DMDA.InterpolationType-c", "petsc4py.PETSc.SNES.ConvergedReason-c", "petsc4py.PETSc.KSP.ConvergedReason-c", "petsc4py.PETSc.Mat.FactorShiftType-c", "petsc4py.PETSc._DMComposite_access-c", "petsc4py.PETSc.TS.ConvergedReason-c", "petsc4py.PETSc.SNES.NormSchedule-c", "petsc4py.PETSc.DMDA.ElementType-c", "petsc4py.PETSc.DMDA.StencilType-c", "petsc4py.PETSc.Mat.AssemblyType-c", "petsc4py.PETSc.Mat.OrderingType-c", "petsc [...]
+var pages = ["petsc4py.PETSc.DMDA.InterpolationType-c", "petsc4py.PETSc.SNES.ConvergedReason-c", "petsc4py.PETSc.KSP.ConvergedReason-c", "petsc4py.PETSc.Mat.FactorShiftType-c", "petsc4py.PETSc._DMComposite_access-c", "petsc4py.PETSc.TS.ConvergedReason-c", "petsc4py.PETSc.SNES.NormSchedule-c", "petsc4py.PETSc.TS.ExactFinalTime-c", "petsc4py.PETSc.DMDA.ElementType-c", "petsc4py.PETSc.DMDA.StencilType-c", "petsc4py.PETSc.Mat.AssemblyType-c", "petsc4py.PETSc.Mat.OrderingType-c", "petsc4py.PE [...]
 var dottedName = get_anchor();
 if (dottedName) {
     var target = redirect_url(dottedName);
diff --git a/docs/apiref/toc-everything.html b/docs/apiref/toc-everything.html
index 71087ad..2bcb093 100644
--- a/docs/apiref/toc-everything.html
+++ b/docs/apiref/toc-everything.html
@@ -43,7 +43,8 @@
      >petsc4py.PETSc.LogStage</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat-class.html"
      >petsc4py.PETSc.Mat</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat.AssemblyType-class.html"
      >petsc4py.PETSc.Mat.AssemblyType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat.FactorShiftType-class.html"
-     >petsc4py.PETSc.Mat.FactorShiftType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat.Option-class.html"
+     >petsc4py.PETSc.Mat.FactorShiftType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat.InfoType-class.html"
+     >petsc4py.PETSc.Mat.InfoType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat.Option-class.html"
      >petsc4py.PETSc.Mat.Option</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat.OrderingType-class.html"
      >petsc4py.PETSc.Mat.OrderingType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat.SORType-class.html"
      >petsc4py.PETSc.Mat.SORType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Mat.Structure-class.html"
@@ -57,7 +58,8 @@
      >petsc4py.PETSc.PC.ASMType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.CompositeType-class.html"
      >petsc4py.PETSc.PC.CompositeType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.GAMGType-class.html"
      >petsc4py.PETSc.PC.GAMGType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.GASMType-class.html"
-     >petsc4py.PETSc.PC.GASMType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.SchurFactType-class.html"
+     >petsc4py.PETSc.PC.GASMType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.MGType-class.html"
+     >petsc4py.PETSc.PC.MGType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.SchurFactType-class.html"
      >petsc4py.PETSc.PC.SchurFactType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.SchurPreType-class.html"
      >petsc4py.PETSc.PC.SchurPreType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.Side-class.html"
      >petsc4py.PETSc.PC.Side</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.Type-class.html"
@@ -81,8 +83,8 @@
      >petsc4py.PETSc.TAO.Type</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS-class.html"
      >petsc4py.PETSc.TS</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS.ConvergedReason-class.html"
      >petsc4py.PETSc.TS.ConvergedReason</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS.EquationType-class.html"
-     >petsc4py.PETSc.TS.EquationType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS.ExactFinalTimeOption-class.html"
-     >petsc4py.PETSc.TS.ExactFinalTimeOption</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS.ProblemType-class.html"
+     >petsc4py.PETSc.TS.EquationType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS.ExactFinalTime-class.html"
+     >petsc4py.PETSc.TS.ExactFinalTime</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS.ProblemType-class.html"
      >petsc4py.PETSc.TS.ProblemType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS.Type-class.html"
      >petsc4py.PETSc.TS.Type</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Vec-class.html"
      >petsc4py.PETSc.Vec</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Vec.Option-class.html"
diff --git a/docs/index.html b/docs/index.html
index 4b5d87b..7aa73c6 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>PETSc 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">
@@ -401,14 +393,22 @@ project.</p>
 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">S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
+L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+H. Zhang, and H. Zhang,
+<em>PETSc Users Manual</em>, ANL-95/11 - Revision 3.7, 2016.
+<a class="reference external" href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf">http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf</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 38b081b..bef6486 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -4,8 +4,6 @@ PETSc 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
@@ -50,11 +48,19 @@ project.
   Advances in Water Resources, 34(9):1124-1139, 2011.
   http://dx.doi.org/10.1016/j.advwatres.2011.04.013
 
+* S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
+  L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+  M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+  H. Zhang, and H. Zhang,
+  *PETSc Users Manual*, ANL-95/11 - Revision 3.7, 2016.
+  http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
+
 
 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/petsc4py.1 b/docs/petsc4py.1
index b4b3186..7716428 100644
--- a/docs/petsc4py.1
+++ b/docs/petsc4py.1
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PETSC4PY" "1" "July 05, 2015" "3.6" "PETSc for Python"
+.TH "PETSC4PY" "1" "May 01, 2016" "3.7" "PETSc for Python"
 .SH NAME
 petsc4py \- PETSc for Python
 .
@@ -30,52 +30,19 @@ 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
+.B Author
 Lisandro Dalcin
 .TP
 .B Contact
 \fI\%dalcinl at gmail.com\fP
 .TP
-.B Organization
-\fI\%CIMEC\fP
-.TP
-.B Address
-CCT CONICET, 3000 Santa Fe, Argentina
-.TP
 .B Web Site
 \fI\%https://bitbucket.org/petsc/petsc4py\fP
 .TP
 .B Date
-July 05, 2015
+May 01, 2016
 .UNINDENT
 .SS Abstract
 .sp
@@ -136,11 +103,12 @@ mechanisms needed within parallel application codes, such as simple
 parallel matrix and vector assembly routines that allow the overlap of
 communication and computation.
 .IP [petsc-user-ref] 5
-Satish Balay, Kris Buschelman, Victor Eijkhout,
-William D. Gropp, Dinesh Kaushik, Matthew G. Knepley, Lois Curfman
-McInnes, Barry F. Smith and Hong Zhang. PETSc Users
-Manual. ANL\-95/11 \- Revision 2.1.5. Argonne National
-Laboratory. 2004
+S. Balay, S. Abhyankar, M.F. Adams, J. Brown,
+P. Brune, K. Buschelman, L. Dalcin, V. Eijkhout, W.D. Gropp,
+D. Karpeyev, D. Kaushik, M.G. Knepley, L. Curfman McInnes, K. Rupp,
+B.F. Smith, S. Zampini, H. Zhang, and H. Zhang,
+\fIPETSc Users Manual\fP, ANL\-95/11 \- Revision 3.7, 2016.
+\fI\%http://www.mcs.anl.gov/petsc/petsc\-current/docs/manual.pdf\fP
 .IP [petsc-efficient] 5
 Satish Balay, Victor Eijkhout, William D. Gropp,
 Lois Curfman McInnes and Barry F. Smith. Efficient Management of
@@ -430,14 +398,15 @@ 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
 S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
-L. Dalcin, V. Eijkhout, W.D. Gropp, D. Kaushik, M.G. Knepley,
-L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and H. Zhang,
-\fIPETSc Users Manual\fP, ANL\-95/11 \- Revision 3.6, 2015.
-\fI\%http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf\fP
+L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+H. Zhang, and H. Zhang,
+\fIPETSc Users Manual\fP, ANL\-95/11 \- Revision 3.7, 2016.
+\fI\%http://www.mcs.anl.gov/petsc/petsc\-current/docs/manual.pdf\fP
 .UNINDENT
 .SH AUTHOR
 Lisandro Dalcin
 .SH COPYRIGHT
-2015, Lisandro Dalcin
+2016, Lisandro Dalcin
 .\" Generated by docutils manpage writer.
 .
diff --git a/docs/petsc4py.info b/docs/petsc4py.info
index f7e8dc1..0fe2ad9 100644
--- a/docs/petsc4py.info
+++ b/docs/petsc4py.info
@@ -1,11 +1,11 @@
-This is petsc4py.info, produced by makeinfo version 5.1 from
+This is petsc4py.info, produced by makeinfo version 6.0 from
 petsc4py.texi.
 
-     PETSc for Python 3.6.0, July 05, 2015
+     PETSc for Python 3.7.0, May 01, 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: petsc4py.info,  Node: Top,  Next: Contents,  Up: (dir)
@@ -21,48 +21,48 @@ File: petsc4py.info,  Node: Top,  Next: Contents,  Up: (dir)
 PETSc for Python
 ****************
 
-     PETSc for Python 3.6.0, July 05, 2015
+     PETSc for Python 3.7.0, May 01, 2016
 
      Lisandro Dalcin
 
-     Copyright © 2015, Lisandro Dalcin
+     Copyright © 2016, Lisandro Dalcin
 
-     Authors: Lisandro Dalcin
 
-     Contact: <dalcinl at gmail.com>
+Author: Lisandro Dalcin
 
-     Organization: CIMEC(1)
 
-     Address: CCT CONICET, 3000 Santa Fe, Argentina
+Contact: <dalcinl at gmail.com>
 
-     Web Site: ‘https://bitbucket.org/petsc/petsc4py’
 
-     Date: July 05, 2015
+Web Site: ‘https://bitbucket.org/petsc/petsc4py’
+
+
+Date: May 01, 2016
 
 Abstract
 ========
 
-This document describes petsc4py(2), a Python(3) port to the PETSc(4)
+This document describes petsc4py(1), a Python(2) port to the PETSc(3)
 libraries.
 
-  PETSc(5) (the Portable, Extensible Toolkit for Scientific Computation)
+PETSc(4) (the Portable, Extensible Toolkit for Scientific Computation)
 is a suite of data structures and routines for the scalable (parallel)
 solution of scientific applications modeled by partial differential
-equations.  It employs the MPI(6) standard for all message-passing
+equations.  It employs the MPI(5) standard for all message-passing
 communication.
 
-  This package provides an important subset of PETSc functionalities and
-uses NumPy(7) to efficiently manage input and output of array data.
+This package provides an important subset of PETSc functionalities and
+uses NumPy(6) to efficiently manage input and output of array data.
 
-  A _good friend_ of petsc4py is:
+A `good friend' of petsc4py is:
 
-        * mpi4py(8): Python bindings for MPI(9), the _Message Passing
-          Interface_.
+        * mpi4py(7): Python bindings for MPI(8), the `Message Passing
+          Interface'.
 
-  Other projects depends on petsc4py:
+Other projects depends on petsc4py:
 
-        * slepc4py(10): Python bindings for SLEPc(11), the _Scalable
-          Library for Eigenvalue Problem Computations_.
+        * slepc4py(9): Python bindings for SLEPc(10), the `Scalable
+          Library for Eigenvalue Problem Computations'.
 
 * Menu:
 
@@ -97,27 +97,25 @@ Using distutils
 
    ---------- Footnotes ----------
 
-   (1) http://www.cimec.org.ar
+   (1) http://bitbucket.org/petsc/petsc4py
 
-   (2) http://bitbucket.org/petsc/petsc4py
+   (2) http://www.python.org
 
-   (3) http://www.python.org
+   (3) http://www.mcs.anl.gov/petsc/
 
    (4) http://www.mcs.anl.gov/petsc/
 
-   (5) http://www.mcs.anl.gov/petsc/
-
-   (6) http://www.mpi-forum.org
+   (5) http://www.mpi-forum.org
 
-   (7) http://www.numpy.org
+   (6) http://www.numpy.org
 
-   (8) http://bitbucket.org/mpi4py/mpi4py
+   (7) http://bitbucket.org/mpi4py/mpi4py
 
-   (9) http://www.mpi-forum.org
+   (8) http://www.mpi-forum.org
 
-   (10) http://bitbucket.org/slepc/slepc4py
+   (9) http://bitbucket.org/slepc/slepc4py
 
-   (11) http://slepc.upv.es
+   (10) http://slepc.upv.es
 
 
 File: petsc4py.info,  Node: Contents,  Next: Index,  Prev: Top,  Up: Top
@@ -132,22 +130,6 @@ File: petsc4py.info,  Node: Contents,  Next: Index,  Prev: Top,  Up: Top
 * Tutorial:: 
 * Citations:: 
 
-Overview
-
-* Components:: 
-
-Installation
-
-* Using pip or easy_install:: 
-* Using distutils:: 
-
-Using distutils
-
-* Requirements:: 
-* Downloading:: 
-* Building:: 
-* Installing:: 
-
 
 File: petsc4py.info,  Node: Overview,  Next: Installation,  Up: Contents
 
@@ -159,30 +141,31 @@ PETSc(1) is a suite of data structures and routines for the scalable
 differential equations.  It employs the MPI(2) standard for all
 message-passing communication.
 
-  PETSc is intended for use in large-scale application projects *note
+PETSc is intended for use in large-scale application projects *note
 [petsc-efficient]: 5, and several ongoing computational science projects
 are built around the PETSc libraries.  With strict attention to
 component interoperability, PETSc facilitates the integration of
 independently developed application modules, which often most naturally
 employ different coding styles and data structures.
 
-  PETSc is easy to use for beginners *note [petsc-user-ref]: 6.
-Moreover, its careful design allows advanced users to have detailed
-control over the solution process.  PETSc includes an expanding suite of
-parallel linear and nonlinear equation solvers that are easily used in
+PETSc is easy to use for beginners *note [petsc-user-ref]: 6.  Moreover,
+its careful design allows advanced users to have detailed control over
+the solution process.  PETSc includes an expanding suite of parallel
+linear and nonlinear equation solvers that are easily used in
 application codes written in C, C++, and Fortran.  PETSc provides many
 of the mechanisms needed within parallel application codes, such as
 simple parallel matrix and vector assembly routines that allow the
-overlap of communication and computation.  (petsc-user-ref) Satish
-Balay, Kris Buschelman, Victor Eijkhout, William D. Gropp, Dinesh
-Kaushik, Matthew G. Knepley, Lois Curfman McInnes, Barry F. Smith and
-Hong Zhang.  PETSc Users Manual.  ANL-95/11 - Revision 2.1.5.  Argonne
-National Laboratory.  2004 (petsc-efficient) Satish Balay, Victor
-Eijkhout, William D. Gropp, Lois Curfman McInnes and Barry F. Smith.
-Efficient Management of Parallelism in Object Oriented Numerical
-Software Libraries.  Modern Software Tools in Scientific Computing.  E.
-Arge, A. M. Bruaset and H. P. Langtangen, editors.  163–202.  Birkhauser
-Press.  1997.
+overlap of communication and computation.  (petsc-user-ref) S. Balay, S.
+Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman, L. Dalcin, V.
+Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik, M.G. Knepley, L. Curfman
+McInnes, K. Rupp, B.F. Smith, S. Zampini, H. Zhang, and H. Zhang, `PETSc
+Users Manual', ANL-95/11 - Revision 3.7, 2016.
+‘http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf’
+(petsc-efficient) Satish Balay, Victor Eijkhout, William D. Gropp, Lois
+Curfman McInnes and Barry F. Smith.  Efficient Management of Parallelism
+in Object Oriented Numerical Software Libraries.  Modern Software Tools
+in Scientific Computing.  E. Arge, A. M. Bruaset and H. P. Langtangen,
+editors.  163–202.  Birkhauser Press.  1997.
 
 * Menu:
 
@@ -206,42 +189,46 @@ be chosen at runtime.  Those objects are managed through handles to
 opaque data structures which are created, accessed and destroyed by
 calling appropriate library routines.
 
-  PETSc consists of a variety of components.  Each component manipulates
-a particular family of objects and the operations one would like to
+PETSc consists of a variety of components.  Each component manipulates a
+particular family of objects and the operations one would like to
 perform on these objects.  These components provide the functionality
 required for many parallel solutions of PDEs.
 
-     Vec: Provides the vector operations required for setting up and
-     solving large-scale linear and nonlinear problems.  Includes
-     easy-to-use parallel scatter and gather operations, as well as
-     special-purpose code for handling ghost points for regular data
-     structures.
-
-     Mat: A large suite of data structures and code for the manipulation
-     of parallel sparse matrices.  Includes four different parallel
-     matrix data structures, each appropriate for a different class of
-     problems.
-
-     PC: A collection of sequential and parallel preconditioners,
-     including (sequential) ILU(k), LU, and (both sequential and
-     parallel) block Jacobi, overlapping additive Schwarz methods and
-     (through BlockSolve95) ILU(0) and ICC(0).
-
-     KSP: Parallel implementations of many popular Krylov subspace
-     iterative methods, including GMRES, CG, CGS, Bi-CG-Stab, two
-     variants of TFQMR, CR, and LSQR. All are coded so that they are
-     immediately usable with any preconditioners and any matrix data
-     structures, including matrix-free methods.
-
-     SNES: Data-structure-neutral implementations of Newton-like methods
-     for nonlinear systems.  Includes both line search and trust region
-     techniques with a single interface.  Employs by default the above
-     data structures and linear solvers.  Users can set custom
-     monitoring routines, convergence criteria, etc.
-
-     TS: Code for the time evolution of solutions of PDEs.  In addition,
-     provides pseudo-transient continuation techniques for computing
-     steady-state solutions.
+
+Vec: Provides the vector operations required for setting up and solving
+large-scale linear and nonlinear problems.  Includes easy-to-use
+parallel scatter and gather operations, as well as special-purpose code
+for handling ghost points for regular data structures.
+
+
+Mat: A large suite of data structures and code for the manipulation of
+parallel sparse matrices.  Includes four different parallel matrix data
+structures, each appropriate for a different class of problems.
+
+
+PC: A collection of sequential and parallel preconditioners, including
+(sequential) ILU(k), LU, and (both sequential and parallel) block
+Jacobi, overlapping additive Schwarz methods and (through BlockSolve95)
+ILU(0) and ICC(0).
+
+
+KSP: Parallel implementations of many popular Krylov subspace iterative
+methods, including GMRES, CG, CGS, Bi-CG-Stab, two variants of TFQMR,
+CR, and LSQR. All are coded so that they are immediately usable with any
+preconditioners and any matrix data structures, including matrix-free
+methods.
+
+
+SNES: Data-structure-neutral implementations of Newton-like methods for
+nonlinear systems.  Includes both line search and trust region
+techniques with a single interface.  Employs by default the above data
+structures and linear solvers.  Users can set custom monitoring
+routines, convergence criteria, etc.
+
+
+TS: Code for the time evolution of solutions of PDEs.  In addition,
+provides pseudo-transient continuation techniques for computing
+steady-state solutions.
 
 
 File: petsc4py.info,  Node: Installation,  Next: Tutorial,  Prev: Overview,  Up: Contents
@@ -257,22 +244,22 @@ File: petsc4py.info,  Node: Installation,  Next: Tutorial,  Prev: Overview,  Up:
 
 File: petsc4py.info,  Node: Using pip or easy_install,  Next: Using distutils,  Up: Installation
 
-1.2.1 Using *pip* or *easy_install*
+1.2.1 Using `pip' or `easy_install'
 -----------------------------------
 
-You can use *pip* to install ‘petsc4py’ and its dependencies (‘mpi4py’
+You can use `pip' to install ‘petsc4py’ and its dependencies (‘mpi4py’
 is optional but highly recommended):
 
      $ pip install [--user] numpy mpi4py
      $ pip install [--user] petsc petsc4py
 
-  Alternatively, you can use *easy_install* (deprecated):
+Alternatively, you can use `easy_install' (deprecated):
 
      $ easy_install petsc4py
 
-  If you already have a working PETSc installation, set environment
+If you already have a working PETSc installation, set environment
 variables ‘PETSC_DIR’ and ‘PETSC_ARCH’ to appropriate values and next
-use *pip*:
+use `pip':
 
      $ export PETSC_DIR=/path/to/petsc
      $ export PETSC_ARCH=arch-linux2-c-opt
@@ -281,7 +268,7 @@ use *pip*:
 
 File: petsc4py.info,  Node: Using distutils,  Prev: Using pip or easy_install,  Up: Installation
 
-1.2.2 Using *distutils*
+1.2.2 Using `distutils'
 -----------------------
 
 * Menu:
@@ -298,7 +285,7 @@ File: petsc4py.info,  Node: Requirements,  Next: Downloading,  Up: Using distuti
 ....................
 
 You need to have the following software properly installed in order to
-build _PETSc for Python_:
+build `PETSc for Python':
 
    * Any MPI(1) implementation (2) (e.g., MPICH(3) or Open MPI(4)),
      built with shared libraries.
@@ -328,15 +315,15 @@ File: petsc4py.info,  Node: Downloading,  Next: Building,  Prev: Requirements,
 1.2.2.2 Downloading
 ...................
 
-The _PETSc for Python_ package is available for download at the project
-website generously hosted by Bitbucket.  You can use *curl* or *wget* to
+The `PETSc 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/petsc/petsc4py/petsc4py-X.Y.tar.gz
 
-   * Using *wget*:
+   * Using `wget':
 
           $ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
 
@@ -351,13 +338,13 @@ After unpacking the release tarball:
      $ tar -zxf petsc4py-X.Y.tar.gz
      $ cd petsc4py-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:
 
@@ -365,15 +352,15 @@ After unpacking the release tarball:
           $ export SDKROOT=/
           $ export ARCHFLAGS='-arch x86_64'
 
-  Some environment configuration is needed to inform the location of
-PETSc.  You can set (using *setenv*, *export* or what applies to you
+Some environment configuration is needed to inform the location of
+PETSc.  You can set (using `setenv', `export' or what applies to you
 shell or system) the environment variables ‘PETSC_DIR’, and ‘PETSC_ARCH’
 indicating where you have built/installed PETSc:
 
      $ 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]
@@ -381,7 +368,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
 
@@ -393,17 +380,17 @@ File: petsc4py.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 _PETSc 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 `PETSc for Python' in your system
 for all users, just do:
 
      $ python setup.py install
 
-  The previous steps will install the ‘petsc4py’ package at standard
-location ‘_prefix_/lib/python_X_._X_/site-packages’.
+The previous steps will install the ‘petsc4py’ package at standard
+location ‘`prefix'/lib/python`X'.`X'/site-packages’.
 
-  If you do not have root privileges or you want to install _PETSc for
-Python_ for your private use, just do:
+If you do not have root privileges or you want to install `PETSc for
+Python' for your private use, just do:
 
      $ python setup.py install --user
 
@@ -425,15 +412,16 @@ If PETSc 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’
 
    * S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K.
-     Buschelman, L. Dalcin, V. Eijkhout, W.D. Gropp, D. Kaushik, M.G.
-     Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and
-     H. Zhang, _PETSc Users Manual_, ANL-95/11 - Revision 3.6, 2015.
+     Buschelman, L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D.
+     Kaushik, M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S.
+     Zampini, H. Zhang, and H. Zhang, `PETSc Users Manual', ANL-95/11 -
+     Revision 3.7, 2016.
      ‘http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf’
 
 
@@ -467,83 +455,82 @@ Index
 
 
 Tag Table:
-Node: Top335
-Ref: index doc541
-Ref: 0541
-Ref: Top-Footnote-11962
-Ref: Top-Footnote-21994
-Ref: Top-Footnote-32038
-Ref: Top-Footnote-42068
-Ref: Top-Footnote-52106
-Ref: Top-Footnote-62144
-Ref: Top-Footnote-72177
-Ref: Top-Footnote-82206
-Ref: Top-Footnote-92249
-Ref: Top-Footnote-102282
-Ref: Top-Footnote-112327
-Node: Contents2356
-Ref: index contents2432
-Ref: 12432
-Ref: index petsc-for-python2432
-Ref: 22432
-Node: Overview2703
-Ref: overview overview2779
-Ref: 32779
-Ref: overview doc2779
-Ref: 42779
-Ref: overview petsc-user-ref3957
-Ref: 63957
-Ref: overview petsc-efficient4216
-Ref: 54216
-Ref: Overview-Footnote-14614
-Ref: Overview-Footnote-24652
-Node: Components4685
-Ref: overview cimec4742
-Ref: 74742
-Ref: overview components4742
-Ref: 84742
-Node: Installation6936
-Ref: install installation7029
-Ref: 97029
-Ref: install doc7029
-Ref: a7029
-Node: Using pip or easy_install7126
-Ref: install using-pip-or-easy-install7226
-Ref: b7226
-Node: Using distutils7859
-Ref: install using-distutils7959
-Ref: c7959
-Node: Requirements8083
-Ref: install requirements8169
-Ref: d8169
-Ref: Requirements-Footnote-18539
-Ref: Requirements-Footnote-28572
-Ref: Requirements-Footnote-38688
-Ref: Requirements-Footnote-48718
-Ref: Requirements-Footnote-58750
-Ref: Requirements-Footnote-68788
-Node: Downloading8817
-Ref: install cimec8920
-Ref: e8920
-Ref: install downloading8920
-Ref: f8920
-Node: Building9323
-Ref: install building9424
-Ref: 109424
-Node: Installing10860
-Ref: install installing10941
-Ref: 1110941
-Node: Tutorial11522
-Ref: tutorial doc11616
-Ref: 1211616
-Ref: tutorial tutorial11616
-Ref: 1311616
-Node: Citations11693
-Ref: citing citations11766
-Ref: 1411766
-Ref: citing doc11766
-Ref: 1511766
-Node: Index12501
+Node: Top334
+Ref: index doc539
+Ref: 0539
+Ref: Top-Footnote-11851
+Ref: Top-Footnote-21895
+Ref: Top-Footnote-31925
+Ref: Top-Footnote-41963
+Ref: Top-Footnote-52001
+Ref: Top-Footnote-62034
+Ref: Top-Footnote-72063
+Ref: Top-Footnote-82106
+Ref: Top-Footnote-92139
+Ref: Top-Footnote-102183
+Node: Contents2212
+Ref: index contents2288
+Ref: 12288
+Ref: index petsc-for-python2288
+Ref: 22288
+Node: Overview2382
+Ref: overview overview2458
+Ref: 32458
+Ref: overview doc2458
+Ref: 42458
+Ref: overview petsc-user-ref3633
+Ref: 63633
+Ref: overview petsc-efficient3993
+Ref: 53993
+Ref: Overview-Footnote-14392
+Ref: Overview-Footnote-24430
+Node: Components4463
+Ref: overview components4520
+Ref: 74520
+Ref: overview slepc4py4520
+Ref: 84520
+Node: Installation6588
+Ref: install installation6681
+Ref: 96681
+Ref: install doc6681
+Ref: a6681
+Node: Using pip or easy_install6778
+Ref: install using-pip-or-easy-install6878
+Ref: b6878
+Node: Using distutils7507
+Ref: install using-distutils7607
+Ref: c7607
+Node: Requirements7731
+Ref: install requirements7817
+Ref: d7817
+Ref: Requirements-Footnote-18187
+Ref: Requirements-Footnote-28220
+Ref: Requirements-Footnote-38336
+Ref: Requirements-Footnote-48366
+Ref: Requirements-Footnote-58398
+Ref: Requirements-Footnote-68436
+Node: Downloading8465
+Ref: install downloading8568
+Ref: e8568
+Ref: install slepc4py8568
+Ref: f8568
+Node: Building8971
+Ref: install building9072
+Ref: 109072
+Node: Installing10500
+Ref: install installing10581
+Ref: 1110581
+Node: Tutorial11156
+Ref: tutorial doc11250
+Ref: 1211250
+Ref: tutorial tutorial11250
+Ref: 1311250
+Node: Citations11327
+Ref: citing citations11400
+Ref: 1411400
+Ref: citing doc11400
+Ref: 1511400
+Node: Index12163
 
 End Tag Table
 
diff --git a/docs/petsc4py.pdf b/docs/petsc4py.pdf
index 8e48731..bbf7f61 100644
Binary files a/docs/petsc4py.pdf and b/docs/petsc4py.pdf differ
diff --git a/docs/source/citing.rst b/docs/source/citing.rst
index f598e21..f60ae27 100644
--- a/docs/source/citing.rst
+++ b/docs/source/citing.rst
@@ -11,7 +11,8 @@ project.
   http://dx.doi.org/10.1016/j.advwatres.2011.04.013
 
 * S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
-  L. Dalcin, V. Eijkhout, W.D. Gropp, D. Kaushik, M.G. Knepley,
-  L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and H. Zhang,
-  *PETSc Users Manual*, ANL-95/11 - Revision 3.6, 2015.
+  L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+  M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+  H. Zhang, and H. Zhang,
+  *PETSc Users Manual*, ANL-95/11 - Revision 3.7, 2016.
   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
diff --git a/docs/source/conf.py b/docs/source/conf.py
index d2b1d04..1de773f 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'PETSc 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'petsc4py'
 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'petsc4py'
diff --git a/docs/source/index.rst b/docs/source/index.rst
index f011a35..d2e2fc8 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -2,10 +2,8 @@
 PETSc for Python
 ================
 
-:Authors:      Lisandro Dalcin
+:Author:       Lisandro Dalcin
 :Contact:      dalcinl at gmail.com
-:Organization: CIMEC_
-:Address:      CCT CONICET, 3000 Santa Fe, Argentina
 :Web Site:     https://bitbucket.org/petsc/petsc4py
 :Date:         |today|
 
diff --git a/docs/source/links.txt b/docs/source/links.txt
index d586119..2fe4fec 100644
--- a/docs/source/links.txt
+++ b/docs/source/links.txt
@@ -19,5 +19,3 @@
 .. _petsc4py:     http://bitbucket.org/petsc/petsc4py
 
 .. _slepc4py:     http://bitbucket.org/slepc/slepc4py
-
-.. _CIMEC:        http://www.cimec.org.ar
diff --git a/docs/source/make.bat b/docs/source/make.bat
index 0b8e026..04057f3 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\petsc4py.qhcp
-	echo.To view the help file:
-	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\petsc4py.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\petsc4py.qhcp
+	echo.To view the help file:
+	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\petsc4py.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/source/overview.rst b/docs/source/overview.rst
index 0f5bee0..23d6d56 100644
--- a/docs/source/overview.rst
+++ b/docs/source/overview.rst
@@ -22,11 +22,12 @@ mechanisms needed within parallel application codes, such as simple
 parallel matrix and vector assembly routines that allow the overlap of
 communication and computation.
 
-.. [petsc-user-ref] Satish Balay, Kris Buschelman, Victor Eijkhout,
-   William D. Gropp, Dinesh Kaushik, Matthew G. Knepley, Lois Curfman
-   McInnes, Barry F. Smith and Hong Zhang. PETSc Users
-   Manual. ANL-95/11 - Revision 2.1.5. Argonne National
-   Laboratory. 2004
+.. [petsc-user-ref] S. Balay, S. Abhyankar, M.F. Adams, J. Brown,
+   P. Brune, K. Buschelman, L. Dalcin, V. Eijkhout, W.D. Gropp,
+   D. Karpeyev, D. Kaushik, M.G. Knepley, L. Curfman McInnes, K. Rupp,
+   B.F. Smith, S. Zampini, H. Zhang, and H. Zhang,
+   *PETSc Users Manual*, ANL-95/11 - Revision 3.7, 2016.
+   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
 
 .. [petsc-efficient] Satish Balay, Victor Eijkhout, William D. Gropp,
    Lois Curfman McInnes and Barry F. Smith. Efficient Management of
diff --git a/docs/usrman/.buildinfo b/docs/usrman/.buildinfo
index 77c49f1..263491e 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: 38f074a399c5ce8d55b25001a4d9b39a
-tags: fbb0d17656682115ca4d033fb2f83ba1
+config: b59cf89f477e7df72172e47fbf2b557f
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/usrman/_sources/citing.txt b/docs/usrman/_sources/citing.txt
index f598e21..f60ae27 100644
--- a/docs/usrman/_sources/citing.txt
+++ b/docs/usrman/_sources/citing.txt
@@ -11,7 +11,8 @@ project.
   http://dx.doi.org/10.1016/j.advwatres.2011.04.013
 
 * S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
-  L. Dalcin, V. Eijkhout, W.D. Gropp, D. Kaushik, M.G. Knepley,
-  L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and H. Zhang,
-  *PETSc Users Manual*, ANL-95/11 - Revision 3.6, 2015.
+  L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+  M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+  H. Zhang, and H. Zhang,
+  *PETSc Users Manual*, ANL-95/11 - Revision 3.7, 2016.
   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
diff --git a/docs/usrman/_sources/index.txt b/docs/usrman/_sources/index.txt
index f011a35..d2e2fc8 100644
--- a/docs/usrman/_sources/index.txt
+++ b/docs/usrman/_sources/index.txt
@@ -2,10 +2,8 @@
 PETSc for Python
 ================
 
-:Authors:      Lisandro Dalcin
+:Author:       Lisandro Dalcin
 :Contact:      dalcinl at gmail.com
-:Organization: CIMEC_
-:Address:      CCT CONICET, 3000 Santa Fe, Argentina
 :Web Site:     https://bitbucket.org/petsc/petsc4py
 :Date:         |today|
 
diff --git a/docs/usrman/_sources/overview.txt b/docs/usrman/_sources/overview.txt
index 0f5bee0..23d6d56 100644
--- a/docs/usrman/_sources/overview.txt
+++ b/docs/usrman/_sources/overview.txt
@@ -22,11 +22,12 @@ mechanisms needed within parallel application codes, such as simple
 parallel matrix and vector assembly routines that allow the overlap of
 communication and computation.
 
-.. [petsc-user-ref] Satish Balay, Kris Buschelman, Victor Eijkhout,
-   William D. Gropp, Dinesh Kaushik, Matthew G. Knepley, Lois Curfman
-   McInnes, Barry F. Smith and Hong Zhang. PETSc Users
-   Manual. ANL-95/11 - Revision 2.1.5. Argonne National
-   Laboratory. 2004
+.. [petsc-user-ref] S. Balay, S. Abhyankar, M.F. Adams, J. Brown,
+   P. Brune, K. Buschelman, L. Dalcin, V. Eijkhout, W.D. Gropp,
+   D. Karpeyev, D. Kaushik, M.G. Knepley, L. Curfman McInnes, K. Rupp,
+   B.F. Smith, S. Zampini, H. Zhang, and H. Zhang,
+   *PETSc Users Manual*, ANL-95/11 - Revision 3.7, 2016.
+   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
 
 .. [petsc-efficient] Satish Balay, Victor Eijkhout, William D. Gropp,
    Lois Curfman McInnes and Barry F. Smith. Efficient Management of
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 ce356bc..43e186f 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 — PETSc for Python 3.6.0 documentation</title>
+    <title>Citations — PETSc 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="PETSc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="PETSc for Python 3.7.0 documentation" href="index.html" />
     <link rel="prev" title="Tutorial" href="tutorial.html" /> 
   </head>
   <body>
@@ -38,7 +36,7 @@
         <li class="right" >
           <a href="tutorial.html" title="Tutorial"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -58,9 +56,10 @@ project.</p>
 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>S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
-L. Dalcin, V. Eijkhout, W.D. Gropp, D. Kaushik, M.G. Knepley,
-L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and H. Zhang,
-<em>PETSc Users Manual</em>, ANL-95/11 - Revision 3.6, 2015.
+L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+H. Zhang, and H. Zhang,
+<em>PETSc Users Manual</em>, ANL-95/11 - Revision 3.7, 2016.
 <a class="reference external" href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf">http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf</a></li>
 </ul>
 </div>
@@ -105,12 +104,12 @@ L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and H. Zhang,
         <li class="right" >
           <a href="tutorial.html" title="Tutorial"
              >previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc 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 ad05b8b..ee7fbad 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 — PETSc for Python 3.6.0 documentation</title>
+    <title>Index — PETSc 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="PETSc for Python 3.6.0 documentation" href="index.html" /> 
+    <link rel="top" title="PETSc 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">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -168,12 +165,12 @@
         <li class="right" style="margin-right: 10px">
           <a href="#" title="General Index"
              >index</a></li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc 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 2a3a83f..0b29102 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>PETSc for Python — PETSc for Python 3.6.0 documentation</title>
+    <title>PETSc for Python — PETSc 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="PETSc for Python 3.6.0 documentation" href="#" />
+    <link rel="top" title="PETSc 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="#">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="#">PETSc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -53,17 +51,13 @@
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Authors:</th><td class="field-body">Lisandro Dalcin</td>
+<tr class="field-odd field"><th class="field-name">Author:</th><td class="field-body">Lisandro Dalcin</td>
 </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></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></td>
-</tr>
-<tr class="field-even field"><th class="field-name">Address:</th><td class="field-body">CCT CONICET, 3000 Santa Fe, Argentina</td>
-</tr>
 <tr class="field-odd field"><th class="field-name">Web Site:</th><td class="field-body"><a class="reference external" href="https://bitbucket.org/petsc/petsc4py">https://bitbucket.org/petsc/petsc4py</a></td>
 </tr>
-<tr class="field-even 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 01, 2016</td>
 </tr>
 </tbody>
 </table>
@@ -122,9 +116,7 @@ the <em>Scalable Library for Eigenvalue Problem Computations</em>.</li>
   <h3><a href="#">Table Of Contents</a></h3>
   <ul>
 <li><a class="reference internal" href="#">PETSc 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>
@@ -163,12 +155,12 @@ the <em>Scalable Library for Eigenvalue Problem Computations</em>.</li>
         <li class="right" >
           <a href="overview.html" title="Overview"
              >next</a> |</li>
-        <li><a href="#">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="#">PETSc 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 e985ca5..98dce84 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 — PETSc for Python 3.6.0 documentation</title>
+    <title>Installation — PETSc 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="PETSc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="PETSc for Python 3.7.0 documentation" href="index.html" />
     <link rel="next" title="Tutorial" href="tutorial.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">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -57,18 +55,21 @@
 <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">petsc4py</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
-$ pip install [--user] petsc petsc4py</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ pip install [--user] numpy mpi4py
+$ pip install [--user] petsc petsc4py
+</pre></div>
 </div>
 <p>Alternatively, you can use <strong class="program">easy_install</strong> (deprecated):</p>
-<div class="highlight-python"><pre>$ easy_install petsc4py</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ easy_install petsc4py
+</pre></div>
 </div>
 <p>If you already have a working PETSc installation, set environment
 variables <span class="target" id="index-0"></span><tt class="xref std std-envvar docutils literal"><span class="pre">PETSC_DIR</span></tt> and <span class="target" id="index-1"></span><tt class="xref std std-envvar docutils literal"><span class="pre">PETSC_ARCH</span></tt> to appropriate
 values and next use <strong class="program">pip</strong>:</p>
-<div class="highlight-python"><pre>$ export PETSC_DIR=/path/to/petsc
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ export PETSC_DIR=/path/to/petsc
 $ export PETSC_ARCH=arch-linux2-c-opt
-$ pip install petsc4py</pre>
+$ pip install petsc4py
+</pre></div>
 </div>
 </div>
 <div class="section" id="using-distutils">
@@ -105,11 +106,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/petsc/petsc4py/petsc4py-X.Y.tar.gz</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ curl -O https://bitbucket.org/petsc/petsc4py/petsc4py-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/petsc/petsc4py/petsc4py-X.Y.tar.gz</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
+</pre></div>
 </div>
 </li>
 </ul>
@@ -117,8 +120,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 petsc4py-X.Y.tar.gz
-$ cd petsc4py-X.Y</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ tar -zxf petsc4py-X.Y.tar.gz
+$ cd petsc4py-X.Y
+</pre></div>
 </div>
 <p>the distribution is ready for building.</p>
 <div class="admonition note">
@@ -131,9 +135,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
@@ -141,18 +146,21 @@ PETSc. You can set (using <strong class="command">setenv</strong>, <strong class
 applies to you shell or system) the environment variables
 <span class="target" id="index-5"></span><tt class="xref std std-envvar docutils literal"><span class="pre">PETSC_DIR</span></tt>, and <span class="target" id="index-6"></span><tt class="xref std std-envvar docutils literal"><span class="pre">PETSC_ARCH</span></tt> indicating where you
 have built/installed PETSc:</p>
-<div class="highlight-python"><pre>$ export PETSC_DIR=/usr/local/petsc
-$ export PETSC_ARCH=arch-linux2-c-opt</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ export PETSC_DIR=/usr/local/petsc
+$ 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]
 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">
@@ -161,13 +169,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>PETSc 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">petsc4py</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>PETSc 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>
@@ -234,12 +244,12 @@ Python</em> for your private use, just do:</p>
         <li class="right" >
           <a href="overview.html" title="Overview"
              >previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc 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 a17089a..4a657a2 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>PETSc for Python — PETSc for Python 3.6.0 documentation</title>
+    <title>PETSc for Python — PETSc 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="PETSc for Python 3.6.0 documentation" href="index.html" /> 
+    <link rel="top" title="PETSc 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">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -122,12 +120,12 @@ the <em>Scalable Library for Eigenvalue Problem Computations</em>.</li>
         <li class="right" style="margin-right: 10px">
           <a href="genindex.html" title="General Index"
              >index</a></li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc 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 a4c68f8..3e33240 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 449f716..3bdb43d 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 — PETSc for Python 3.6.0 documentation</title>
+    <title>Overview — PETSc 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="PETSc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="PETSc for Python 3.7.0 documentation" href="index.html" />
     <link rel="next" title="Installation" href="install.html" />
     <link rel="prev" title="PETSc for Python" href="index.html" /> 
   </head>
@@ -42,7 +40,7 @@
         <li class="right" >
           <a href="index.html" title="PETSc for Python"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -58,12 +56,12 @@ scalable (parallel) solution of scientific applications modeled by
 partial differential equations. It employs the <a class="reference external" href="http://www.mpi-forum.org">MPI</a> standard for all
 message-passing communication.</p>
 <p>PETSc is intended for use in large-scale application projects
-<a class="reference internal" href="#petsc-efficient">[petsc-efficient]</a>, and several ongoing computational science projects
+<a class="reference internal" href="#petsc-efficient" id="id1">[petsc-efficient]</a>, and several ongoing computational science projects
 are built around the PETSc libraries. With strict attention to
 component interoperability, PETSc facilitates the integration of
 independently developed application modules, which often most
 naturally employ different coding styles and data structures.</p>
-<p>PETSc is easy to use for beginners <a class="reference internal" href="#petsc-user-ref">[petsc-user-ref]</a>. Moreover, its
+<p>PETSc is easy to use for beginners <a class="reference internal" href="#petsc-user-ref" id="id2">[petsc-user-ref]</a>. Moreover, its
 careful design allows advanced users to have detailed control over the
 solution process. PETSc includes an expanding suite of parallel linear
 and nonlinear equation solvers that are easily used in application
@@ -74,11 +72,12 @@ communication and computation.</p>
 <table class="docutils citation" frame="void" id="petsc-user-ref" rules="none">
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[petsc-user-ref]</a></td><td>Satish Balay, Kris Buschelman, Victor Eijkhout,
-William D. Gropp, Dinesh Kaushik, Matthew G. Knepley, Lois Curfman
-McInnes, Barry F. Smith and Hong Zhang. PETSc Users
-Manual. ANL-95/11 - Revision 2.1.5. Argonne National
-Laboratory. 2004</td></tr>
+<tr><td class="label"><a class="fn-backref" href="#id2">[petsc-user-ref]</a></td><td>S. Balay, S. Abhyankar, M.F. Adams, J. Brown,
+P. Brune, K. Buschelman, L. Dalcin, V. Eijkhout, W.D. Gropp,
+D. Karpeyev, D. Kaushik, M.G. Knepley, L. Curfman McInnes, K. Rupp,
+B.F. Smith, S. Zampini, H. Zhang, and H. Zhang,
+<em>PETSc Users Manual</em>, ANL-95/11 - Revision 3.7, 2016.
+<a class="reference external" href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf">http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf</a></td></tr>
 </tbody>
 </table>
 <table class="docutils citation" frame="void" id="petsc-efficient" rules="none">
@@ -197,12 +196,12 @@ steady-state solutions.</td>
         <li class="right" >
           <a href="index.html" title="PETSc for Python"
              >previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc 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 014d620..6e88321 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 — PETSc for Python 3.6.0 documentation</title>
+    <title>Search — PETSc 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="PETSc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="PETSc 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">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc 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">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc 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 bd0b196..a6c3d03 100644
--- a/docs/usrman/searchindex.js
+++ b/docs/usrman/searchindex.js
@@ -1 +1 @@
-Search.setIndex({objects:{},terms:{all:[0,2,4,1],code:1,partial:[0,2,1],precondition:1,four:1,prefix:4,follow:4,privat:4,depend:[0,2,4],vec:1,larg:1,cimec:0,brown:3,zhang:[1,3],mpi:[0,2,4,1],mechan:1,solver:1,signific:3,iter:1,vector:1,pleas:3,x86_64:4,cfg:4,design:1,pass:[0,2,1],download:4,lisandro:0,port:[0,2],victor:1,what:4,nonlinear:1,section:4,access:1,version:4,method:1,ongo:1,gener:4,kler:3,address:0,path:4,modifi:4,interpret:4,search:1,host:4,converg:1,implement:[1,4],portabl:[0 [...]
\ No newline at end of file
+Search.setIndex({envversion:42,terms:{all:[0,2,4,1],code:1,partial:[0,2,1],precondition:1,four:1,prefix:4,follow:4,privat:4,depend:[0,2,4],vec:1,petsc_dir:4,brown:[1,3],zhang:[1,3],mpi:[0,2,4,1],mechan:1,solver:1,signific:3,iter:1,vector:1,pleas:3,x86_64:4,cfg:4,design:1,pass:[0,2,1],lisandro:0,port:[0,2],victor:1,what:4,nonlinear:1,section:4,current:[1,3],version:4,method:1,ongo:1,gener:4,kler:3,path:4,modifi:4,interpret:4,search:1,step:4,converg:1,implement:[1,4],portabl:[0,2],overrid: [...]
\ No newline at end of file
diff --git a/docs/usrman/tutorial.html b/docs/usrman/tutorial.html
index 261908f..0550beb 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 — PETSc for Python 3.6.0 documentation</title>
+    <title>Tutorial — PETSc 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="PETSc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="PETSc for Python 3.7.0 documentation" href="index.html" />
     <link rel="next" title="Citations" href="citing.html" />
     <link rel="prev" title="Installation" href="install.html" /> 
   </head>
@@ -42,7 +40,7 @@
         <li class="right" >
           <a href="install.html" title="Installation"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -102,12 +100,12 @@
         <li class="right" >
           <a href="install.html" title="Installation"
              >previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">PETSc 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/petsc4py.egg-info/PKG-INFO b/petsc4py.egg-info/PKG-INFO
index 3c194b3..ed8ef1e 100644
--- a/petsc4py.egg-info/PKG-INFO
+++ b/petsc4py.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: petsc4py
-Version: 3.6.0
+Version: 3.7.0
 Summary: PETSc for Python
 Home-page: https://bitbucket.org/petsc/petsc4py/
 Author: Lisandro Dalcin
 Author-email: dalcinl at gmail.com
 License: BSD
-Download-URL: https://bitbucket.org/petsc/petsc4py/downloads/petsc4py-3.6.0.tar.gz
+Download-URL: https://bitbucket.org/petsc/petsc4py/downloads/petsc4py-3.7.0.tar.gz
 Description: PETSc for Python
         ================
         
@@ -55,9 +55,10 @@ Description: PETSc for Python
           http://dx.doi.org/10.1016/j.advwatres.2011.04.013
         
         * S. Balay, S. Abhyankar, M.F. Adams, J. Brown, P. Brune, K. Buschelman,
-          L. Dalcin, V. Eijkhout, W.D. Gropp, D. Kaushik, M.G. Knepley,
-          L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini, and H. Zhang,
-          *PETSc Users Manual*, ANL-95/11 - Revision 3.6, 2015.
+          L. Dalcin, V. Eijkhout, W.D. Gropp, D. Karpeyev, D. Kaushik,
+          M.G. Knepley, L. Curfman McInnes, K. Rupp, B.F. Smith, S. Zampini,
+          H. Zhang, and H. Zhang,
+          *PETSc Users Manual*, ANL-95/11 - Revision 3.7, 2016.
           http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
         
 Keywords: scientific computing,parallel computing,PETSc,MPI
diff --git a/petsc4py.egg-info/SOURCES.txt b/petsc4py.egg-info/SOURCES.txt
index 1a8bf6b..8b7996d 100644
--- a/petsc4py.egg-info/SOURCES.txt
+++ b/petsc4py.egg-info/SOURCES.txt
@@ -21,6 +21,7 @@ demo/bratu2d/bratu2dnpy.py
 demo/bratu2d/makefile
 demo/bratu3d/bratu3d.py
 demo/bratu3d/makefile
+demo/dmplex/distribute_field.py
 demo/kspsolve/makefile
 demo/kspsolve/petsc-cg.py
 demo/kspsolve/petsc-ksp.py
@@ -105,6 +106,7 @@ docs/apiref/class_hierarchy_for_factorshif.png
 docs/apiref/class_hierarchy_for_format.png
 docs/apiref/class_hierarchy_for_gamgtype.png
 docs/apiref/class_hierarchy_for_gasmtype.png
+docs/apiref/class_hierarchy_for_infotype.png
 docs/apiref/class_hierarchy_for_insertmode.png
 docs/apiref/class_hierarchy_for_interpolat.png
 docs/apiref/class_hierarchy_for_is.png
@@ -116,6 +118,7 @@ docs/apiref/class_hierarchy_for_logevent.png
 docs/apiref/class_hierarchy_for_logstage.png
 docs/apiref/class_hierarchy_for_maptype.png
 docs/apiref/class_hierarchy_for_mat.png
+docs/apiref/class_hierarchy_for_mgtype.png
 docs/apiref/class_hierarchy_for_mode.png
 docs/apiref/class_hierarchy_for_normschedu.png
 docs/apiref/class_hierarchy_for_normtype.png
@@ -201,6 +204,7 @@ docs/apiref/petsc4py.PETSc.LogStage-class.html
 docs/apiref/petsc4py.PETSc.Mat-class.html
 docs/apiref/petsc4py.PETSc.Mat.AssemblyType-class.html
 docs/apiref/petsc4py.PETSc.Mat.FactorShiftType-class.html
+docs/apiref/petsc4py.PETSc.Mat.InfoType-class.html
 docs/apiref/petsc4py.PETSc.Mat.Option-class.html
 docs/apiref/petsc4py.PETSc.Mat.OrderingType-class.html
 docs/apiref/petsc4py.PETSc.Mat.SORType-class.html
@@ -215,6 +219,7 @@ docs/apiref/petsc4py.PETSc.PC.ASMType-class.html
 docs/apiref/petsc4py.PETSc.PC.CompositeType-class.html
 docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html
 docs/apiref/petsc4py.PETSc.PC.GASMType-class.html
+docs/apiref/petsc4py.PETSc.PC.MGType-class.html
 docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html
 docs/apiref/petsc4py.PETSc.PC.SchurPreType-class.html
 docs/apiref/petsc4py.PETSc.PC.Side-class.html
@@ -239,7 +244,7 @@ docs/apiref/petsc4py.PETSc.TAO.Type-class.html
 docs/apiref/petsc4py.PETSc.TS-class.html
 docs/apiref/petsc4py.PETSc.TS.ConvergedReason-class.html
 docs/apiref/petsc4py.PETSc.TS.EquationType-class.html
-docs/apiref/petsc4py.PETSc.TS.ExactFinalTimeOption-class.html
+docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-class.html
 docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
 docs/apiref/petsc4py.PETSc.TS.Type-class.html
 docs/apiref/petsc4py.PETSc.Vec-class.html
@@ -393,7 +398,10 @@ src/include/initpkg.h
 src/include/pep3118.h
 src/include/scalar.h
 src/include/compat/hdf5.h
+src/include/compat/hypre.h
 src/include/compat/mpi.h
+src/include/compat/mumps.h
+src/include/compat/tao.h
 src/include/petsc4py/PETSc.pxd
 src/include/petsc4py/__init__.pxd
 src/include/petsc4py/__init__.pyx
diff --git a/setup.cfg b/setup.cfg
index cf5f719..197d5bb 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -13,7 +13,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/src/PETSc/CAPI.pyx b/src/PETSc/CAPI.pyx
index ffd9d5b..3d17104 100644
--- a/src/PETSc/CAPI.pyx
+++ b/src/PETSc/CAPI.pyx
@@ -143,6 +143,19 @@ cdef api PetscScatter PyPetscScatter_Get(object arg) except ? NULL:
     retv = ob.sct
     return retv
 
+# -- Section --
+
+cdef api object PyPetscSection_New(PetscSection arg):
+    cdef Section retv = Section()
+    setref(&retv.sec, arg)
+    return retv
+
+cdef api PetscSection PyPetscSection_Get(object arg) except ? NULL:
+    cdef PetscSection retv = NULL
+    cdef Section ob = <Section?> arg
+    retv = ob.sec
+    return retv
+
 # -- Mat --
 
 cdef api object PyPetscMat_New(PetscMat arg):
@@ -208,6 +221,19 @@ cdef api PetscTS PyPetscTS_Get(object arg) except ? NULL:
     retv = ob.ts
     return retv
 
+# -- TAO --
+
+cdef api object PyPetscTAO_New(PetscTAO arg):
+    cdef TAO retv = TAO()
+    setref(&retv.tao, arg)
+    return retv
+
+cdef api PetscTAO PyPetscTAO_Get(object arg) except ? NULL:
+    cdef PetscTAO retv = NULL
+    cdef TAO ob = <TAO?> arg
+    retv = ob.tao
+    return retv
+
 # -- AO --
 
 cdef api object PyPetscAO_New(PetscAO arg):
diff --git a/src/PETSc/DM.pyx b/src/PETSc/DM.pyx
index 70d1661..88cbe91 100644
--- a/src/PETSc/DM.pyx
+++ b/src/PETSc/DM.pyx
@@ -173,7 +173,7 @@ cdef class DM(Object):
     def setMatType(self, mat_type):
         """Set matrix type to be used by DM.createMat"""
         cdef PetscMatType mtype = NULL
-        vec_type = str2bytes(mat_type, &mtype)
+        mat_type = str2bytes(mat_type, &mtype)
         CHKERR( DMSetMatType(self.dm, mtype) )
 
     def createMat(self):
@@ -291,6 +291,104 @@ cdef class DM(Object):
     def setPointSF(self, SF sf not None):
         CHKERR( DMSetPointSF(self.dm, sf.sf) )
 
+    def getNumLabels(self):
+        cdef PetscInt nLabels = 0
+        CHKERR( DMGetNumLabels(self.dm, &nLabels) )
+        return toInt(nLabels)
+
+    def getLabelName(self, index):
+        cdef PetscInt cindex = asInt(index)
+        cdef const_char *cname = NULL
+        CHKERR( DMGetLabelName(self.dm, cindex, &cname) )
+        return bytes2str(cname)
+
+    def hasLabel(self, name):
+        cdef PetscBool flag = PETSC_FALSE
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMHasLabel(self.dm, cname, &flag) )
+        return <bint> flag
+
+    def createLabel(self, name):
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMCreateLabel(self.dm, cname) )
+
+    def removeLabel(self, name):
+        cdef const_char *cname = NULL
+        cdef PetscDMLabel clbl = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMRemoveLabel(self.dm, cname, &clbl) )
+        # CHKERR( DMLabelDestroy(&clbl) )
+
+    def getLabelValue(self, name, point):
+        cdef PetscInt cpoint = asInt(point), value = 0
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMGetLabelValue(self.dm, cname, cpoint, &value) )
+        return toInt(value)
+
+    def setLabelValue(self, name, point, value):
+        cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )
+
+    def clearLabelValue(self, name, point, value):
+        cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )
+
+    def getLabelSize(self, name):
+        cdef PetscInt size = 0
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMGetLabelSize(self.dm, cname, &size) )
+        return toInt(size)
+
+    def getLabelIdIS(self, name):
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        cdef IS lis = IS()
+        CHKERR( DMGetLabelIdIS(self.dm, cname, &lis.iset) )
+        return lis
+
+    def getStratumSize(self, name, value):
+        cdef PetscInt size = 0
+        cdef PetscInt cvalue = asInt(value)
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMGetStratumSize(self.dm, cname, cvalue, &size) )
+        return toInt(size)
+
+    def getStratumIS(self, name, value):
+        cdef PetscInt cvalue = asInt(value)
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        cdef IS sis = IS()
+        CHKERR( DMGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
+        return sis
+
+    def clearLabelStratum(self, name, value):
+        cdef PetscInt cvalue = asInt(value)
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )
+
+    def setLabelOutput(self, name, output):
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        cdef PetscBool coutput = output
+        CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )
+
+    def getLabelOutput(self, name):
+        cdef const_char *cname = NULL
+        name = str2bytes(name, &cname)
+        cdef PetscBool coutput = PETSC_FALSE
+        CHKERR( DMGetLabelOutput(self.dm, cname, &coutput) )
+        return coutput
+
     # backward compatibility
     createGlobalVector = createGlobalVec
     createLocalVector = createLocalVec
diff --git a/src/PETSc/DMComposite.pyx b/src/PETSc/DMComposite.pyx
index 796687b..f3e9245 100644
--- a/src/PETSc/DMComposite.pyx
+++ b/src/PETSc/DMComposite.pyx
@@ -29,7 +29,7 @@ cdef class DMComposite(DM):
         cdef PetscInt i, n = 0
         cdef PetscDM *cdms = NULL
         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
-        cdef object cdms_mem = oarray_p(empty_p(n), NULL, <void**>&cdms)
+        cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&cdms)
         CHKERR( DMCompositeGetEntriesArray(self.dm, cdms) )
         cdef DM entry = None
         cdef list entries = []
@@ -45,7 +45,7 @@ cdef class DMComposite(DM):
         cdef PetscInt i, n = 0
         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
         cdef PetscVec *clvecs = NULL
-        cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+        cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
         for i from 0 <= i < n:
             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
         CHKERR( DMCompositeScatterArray(self.dm, gvec.vec, clvecs) )
@@ -56,7 +56,7 @@ cdef class DMComposite(DM):
         cdef PetscInt i, n = 0
         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
         cdef PetscVec *clvecs = NULL
-        cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+        cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
         for i from 0 <= i < n:
             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
         CHKERR( DMCompositeGatherArray(self.dm, gvec.vec, cimode, clvecs) )
diff --git a/src/PETSc/DMDA.pyx b/src/PETSc/DMDA.pyx
index 6c8601f..89dc219 100644
--- a/src/PETSc/DMDA.pyx
+++ b/src/PETSc/DMDA.pyx
@@ -60,9 +60,9 @@ cdef class DMDA(DM):
         if ndof==PETSC_DECIDE: ndof = 1
         # vertex distribution
         if ownership_ranges is not None:
-            oranges = asOwnershipRanges(ownership_ranges,
-                                        ndim, &m, &n, &p,
-                                        &lx, &ly, &lz)
+            ownership_ranges = asOwnershipRanges(ownership_ranges,
+                                                 ndim, &m, &n, &p,
+                                                 &lx, &ly, &lz)
         # periodicity, stencil type & width
         if boundary_type is not None:
             asBoundary(boundary_type, &btx, &bty, &btz)
@@ -204,7 +204,7 @@ cdef class DMDA(DM):
         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
         asBoundary(boundary_type, &btx, &bty, &btz)
         CHKERR( DMDASetBoundaryType(self.dm, btx, bty, btz) )
-        
+
     def getBoundaryType(self):
         cdef PetscInt dim = 0
         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
@@ -222,7 +222,7 @@ cdef class DMDA(DM):
     def setStencilType(self, stencil_type):
         cdef PetscDMDAStencilType stype = asStencil(stencil_type)
         CHKERR( DMDASetStencilType(self.dm, stype) )
-        
+
     def getStencilType(self):
         cdef PetscDMDAStencilType stype = DMDA_STENCIL_BOX
         CHKERR( DMDAGetInfo(self.dm,
@@ -254,7 +254,7 @@ cdef class DMDA(DM):
         cdef PetscInt swidth = asInt(stencil_width)
         CHKERR( DMDASetStencilType(self.dm, stype) )
         CHKERR( DMDASetStencilWidth(self.dm, swidth) )
-        
+
     def getStencil(self):
         cdef PetscDMDAStencilType stype = DMDA_STENCIL_BOX
         cdef PetscInt swidth = 0
@@ -290,7 +290,7 @@ cdef class DMDA(DM):
                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
 
     def getOwnershipRanges(self):
-        cdef PetscInt dim=0, m, n, p
+        cdef PetscInt dim=0, m=0, n=0, p=0
         cdef const_PetscInt *lx = NULL, *ly = NULL, *lz = NULL
         CHKERR( DMDAGetInfo(self.dm,
                             &dim,
@@ -322,6 +322,20 @@ cdef class DMDA(DM):
 
     #
 
+    def setFieldName(self, field, name):
+        cdef PetscInt ival = asInt(field)
+        cdef const_char *cval = NULL
+        name = str2bytes(name, &cval)
+        CHKERR( DMDASetFieldName(self.dm, ival, cval) )
+
+    def getFieldName(self, field):
+        cdef PetscInt ival = asInt(field)
+        cdef const_char *cval = NULL
+        CHKERR( DMDAGetFieldName(self.dm, ival, &cval) )
+        return bytes2str(cval)
+
+    #
+
     def getVecArray(self, Vec vec not None):
         return _DMDA_Vec_array(self, vec)
 
@@ -339,6 +353,18 @@ cdef class DMDA(DM):
                                           _ymin, _ymax,
                                           _zmin, _zmax) )
 
+    def setCoordinateName(self, index, name):
+        cdef PetscInt ival = asInt(index)
+        cdef const_char *cval = NULL
+        name = str2bytes(name, &cval)
+        CHKERR( DMDASetCoordinateName(self.dm, ival, cval) )
+
+    def getCoordinateName(self, index):
+        cdef PetscInt ival = asInt(index)
+        cdef const_char *cval = NULL
+        CHKERR( DMDAGetCoordinateName(self.dm, ival, &cval) )
+        return bytes2str(cval)
+
     def getBoundingBox(self):
         cdef PetscInt i,dim=0
         CHKERR( DMDAGetDim(self.dm, &dim) )
diff --git a/src/PETSc/DMPlex.pyx b/src/PETSc/DMPlex.pyx
index cd640e0..4b7d937 100644
--- a/src/PETSc/DMPlex.pyx
+++ b/src/PETSc/DMPlex.pyx
@@ -10,7 +10,6 @@ cdef class DMPlex(DM):
         return self
 
     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):
-        cdef DMPlex    dm = <DMPlex>type(self)()
         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscBool interp = interpolate
         cdef PetscDM   newdm = NULL
@@ -53,7 +52,7 @@ cdef class DMPlex(DM):
 
     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):
         cdef PetscInt dim = 0, *icells = NULL
-        cells = iarray_i(numcells, &dim, &icells)
+        cdef object tmp = iarray_i(numcells, &dim, &icells)
         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
@@ -66,7 +65,6 @@ cdef class DMPlex(DM):
         return self
 
     def createCGNS(self, cgid, interpolate=True, comm=None):
-        cdef DMPlex    dm = <DMPlex>type(self)()
         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscBool interp = interpolate
         cdef PetscDM   newdm = NULL
@@ -76,7 +74,6 @@ cdef class DMPlex(DM):
         return self
 
     def createCGNSFromFile(self, filename, interpolate=True, comm=None):
-        cdef DMPlex    dm = <DMPlex>type(self)()
         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscBool interp = interpolate
         cdef PetscDM   newdm = NULL
@@ -87,7 +84,6 @@ cdef class DMPlex(DM):
         return self
 
     def createExodusFromFile(self, filename, interpolate=True, comm=None):
-        cdef DMPlex    dm = <DMPlex>type(self)()
         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscBool interp = interpolate
         cdef PetscDM   newdm = NULL
@@ -98,7 +94,6 @@ cdef class DMPlex(DM):
         return self
 
     def createExodus(self, exoid, interpolate=True, comm=None):
-        cdef DMPlex    dm = <DMPlex>type(self)()
         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscBool interp = interpolate
         cdef PetscDM   newdm = NULL
@@ -108,7 +103,6 @@ cdef class DMPlex(DM):
         return self
 
     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):
-        cdef DMPlex    dm = <DMPlex>type(self)()
         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscBool interp = interpolate
         cdef PetscDM   newdm = NULL
@@ -281,102 +275,10 @@ cdef class DMPlex(DM):
         PetscINCREF(iset.obj)
         return iset
 
-    def getNumLabels(self):
-        cdef PetscInt nLabels = 0
-        CHKERR( DMPlexGetNumLabels(self.dm, &nLabels) )
-        return toInt(nLabels)
-
-    def getLabelName(self, index):
-        cdef PetscInt cindex = asInt(index)
-        cdef const_char *cname = NULL
-        CHKERR( DMPlexGetLabelName(self.dm, cindex, &cname) )
-        return bytes2str(cname)
-
-    def hasLabel(self, name):
-        cdef PetscBool flag = PETSC_FALSE
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexHasLabel(self.dm, cname, &flag) )
-        return <bint> flag
-
-    def createLabel(self, name):
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexCreateLabel(self.dm, cname) )
-
-    def removeLabel(self, name):
-        cdef const_char *cname = NULL
-        cdef PetscDMLabel clbl = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexRemoveLabel(self.dm, cname, &clbl) )
-
-    def getLabelValue(self, name, point):
-        cdef PetscInt cpoint = asInt(point), value = 0
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexGetLabelValue(self.dm, cname, cpoint, &value) )
-        return toInt(value)
-
-    def setLabelValue(self, name, point, value):
-        cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexSetLabelValue(self.dm, cname, cpoint, cvalue) )
-
-    def clearLabelValue(self, name, point, value):
-        cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexClearLabelValue(self.dm, cname, cpoint, cvalue) )
-
-    def getLabelSize(self, name):
-        cdef PetscInt size = 0
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexGetLabelSize(self.dm, cname, &size) )
-        return toInt(size)
-
-    def getLabelIdIS(self, name):
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        cdef IS lis = IS()
-        CHKERR( DMPlexGetLabelIdIS(self.dm, cname, &lis.iset) )
-        return lis
-
-    def setLabelOutput(self, name, output):
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        cdef PetscBool coutput = output
-        CHKERR( DMPlexSetLabelOutput(self.dm, cname, coutput) )
-
-    def getLabelOutput(self, name):
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        cdef PetscBool coutput = PETSC_FALSE
-        CHKERR( DMPlexGetLabelOutput(self.dm, cname, &coutput) )
-        return coutput
-
-    def getStratumSize(self, name, value):
-        cdef PetscInt size = 0
-        cdef PetscInt cvalue = asInt(value)
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexGetStratumSize(self.dm, cname, cvalue, &size) )
-        return toInt(size)
-
-    def getStratumIS(self, name, value):
-        cdef PetscInt cvalue = asInt(value)
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        cdef IS sis = IS()
-        CHKERR( DMPlexGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
-        return sis
-
-    def clearLabelStratum(self, name, value):
-        cdef PetscInt cvalue = asInt(value)
-        cdef const_char *cname = NULL
-        name = str2bytes(name, &cname)
-        CHKERR( DMPlexClearLabelStratum(self.dm, cname, cvalue) )
+    def createPointNumbering(self):
+        cdef IS iset = IS()
+        CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )
+        return iset
 
     def getDepth(self):
         cdef PetscInt depth = 0
@@ -443,7 +345,6 @@ cdef class DMPlex(DM):
         return closure
 
     def generate(self, DMPlex boundary, name=None, interpolate=True):
-        cdef DMPlex dm = <DMPlex>type(self)()
         cdef PetscBool interp = interpolate
         cdef const_char *cname = NULL
         if name: name = str2bytes(name, &cname)
@@ -463,7 +364,6 @@ cdef class DMPlex(DM):
         CHKERR( DMPlexTetgenSetOptions(self.dm, copts) )
 
     def createSquareBoundary(self, lower, upper, edges):
-        cdef DMPlex    dm = <DMPlex>type(self)()
         cdef PetscInt nlow = 0, nup = 0, nedg = 0
         cdef PetscInt *iedg = NULL
         cdef PetscReal *ilow = NULL, *iup = NULL
@@ -474,13 +374,12 @@ cdef class DMPlex(DM):
         return self
 
     def createCubeBoundary(self, lower, upper, faces):
-        cdef DMPlex    dm = <DMPlex>type(self)()
         cdef PetscInt nlow = 0, nup = 0, nfac = 0
         cdef PetscInt *ifac = NULL
         cdef PetscReal *ilow = NULL, *iup = NULL
         lower = iarray_r(lower, &nlow, &ilow)
         upper = iarray_r(upper, &nup,  &iup)
-        edges = iarray_i(faces, &nfac, &ifac)
+        faces = iarray_i(faces, &nfac, &ifac)
         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )
         return self
 
@@ -490,7 +389,7 @@ cdef class DMPlex(DM):
         cdef const_char *cval = NULL
         label = str2bytes(label, &cval)
         cdef PetscDMLabel clbl = NULL
-        CHKERR( DMPlexGetLabel(self.dm, cval, &clbl) )
+        CHKERR( DMGetLabel(self.dm, cval, &clbl) )
         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )
 
     def setAdjacencyUseCone(self, useCone=True):
@@ -524,6 +423,23 @@ cdef class DMPlex(DM):
         PetscCLEAR(self.obj); self.dm = dmOverlap
         return sf
 
+    def distributeField(self, SF sf not None,
+                        Section sec not None, Vec vec not None,
+                        Section newsec=None, Vec newvec=None):
+        cdef MPI_Comm ccomm = MPI_COMM_NULL
+        if newsec is None: newsec = Section()
+        if newvec is None: newvec = Vec()
+        if newsec.sec == NULL:
+            CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
+            CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
+        if newvec.vec == NULL:
+            CHKERR( PetscObjectGetComm(<PetscObject>vec.vec, &ccomm) )
+            CHKERR( VecCreate(ccomm, &newvec.vec) )
+        CHKERR( DMPlexDistributeField(self.dm, sf.sf,
+                                      sec.sec, vec.vec,
+                                      newsec.sec, newvec.vec))
+        return (newsec, newvec)
+
     def createCoarsePointIS(self):
         cdef IS fpoint = IS()
         CHKERR( DMPlexCreateCoarsePointIS(self.dm, &fpoint.iset) )
@@ -595,9 +511,10 @@ cdef class DMPlex(DM):
 
     def getOrdering(self, otype):
         cdef PetscMatOrderingType cval = NULL
+        cdef PetscDMLabel label = NULL
         otype = str2bytes(otype, &cval)
         cdef IS perm = IS()
-        CHKERR( DMPlexGetOrdering(self.dm, cval, &perm.iset) )
+        CHKERR( DMPlexGetOrdering(self.dm, cval, label, &perm.iset) )
         return perm
 
     def permute(self, IS perm not None):
diff --git a/src/PETSc/DMShell.pyx b/src/PETSc/DMShell.pyx
index 24d5bac..4de8547 100644
--- a/src/PETSc/DMShell.pyx
+++ b/src/PETSc/DMShell.pyx
@@ -40,15 +40,15 @@ cdef class DMShell(DM):
                          end_args=None, end_kargs=None):
         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL
         if begin is not None:
-            if begin_args  is None: args = ()
-            if begin_kargs is None: kargs = {}
-            context = (begin, args, kargs)
+            if begin_args  is None: begin_args = ()
+            if begin_kargs is None: begin_kargs = {}
+            context = (begin, begin_args, begin_kargs)
             self.set_attr('__g2l_begin__', context)
             cbegin = &DMSHELL_GlobalToLocalBegin
         if end is not None:
-            if end_args  is None: args = ()
-            if end_kargs is None: kargs = {}
-            context = (end, args, kargs)
+            if end_args  is None: end_args = ()
+            if end_kargs is None: end_kargs = {}
+            context = (end, end_args, end_kargs)
             self.set_attr('__g2l_end__', context)
             cend = &DMSHELL_GlobalToLocalEnd
         CHKERR( DMShellSetGlobalToLocal(self.dm, cbegin, cend) )
@@ -60,15 +60,15 @@ cdef class DMShell(DM):
                          end_args=None, end_kargs=None):
         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL
         if begin is not None:
-            if begin_args  is None: args = ()
-            if begin_kargs is None: kargs = {}
-            context = (begin, args, kargs)
+            if begin_args  is None: begin_args = ()
+            if begin_kargs is None: begin_kargs = {}
+            context = (begin, begin_args, begin_kargs)
             self.set_attr('__l2g_begin__', context)
             cbegin = &DMSHELL_LocalToGlobalBegin
         if end is not None:
-            if end_args  is None: args = ()
-            if end_kargs is None: kargs = {}
-            context = (end, args, kargs)
+            if end_args  is None: end_args = ()
+            if end_kargs is None: end_kargs = {}
+            context = (end, end_args, end_kargs)
             self.set_attr('__l2g_end__', context)
             cend = &DMSHELL_LocalToGlobalEnd
         CHKERR( DMShellSetLocalToGlobal(self.dm, cbegin, cend) )
@@ -82,15 +82,15 @@ cdef class DMShell(DM):
         cbegin = NULL
         cend = NULL
         if begin is not None:
-            if begin_args  is None: args = ()
-            if begin_kargs is None: kargs = {}
-            context = (begin, args, kargs)
+            if begin_args  is None: begin_args = ()
+            if begin_kargs is None: begin_kargs = {}
+            context = (begin, begin_args, begin_kargs)
             self.set_attr('__l2l_begin__', context)
             cbegin = &DMSHELL_LocalToLocalBegin
         if end is not None:
-            if end_args  is None: args = ()
-            if end_kargs is None: kargs = {}
-            context = (end, args, kargs)
+            if end_args  is None: end_args = ()
+            if end_kargs is None: end_kargs = {}
+            context = (end, end_args, end_kargs)
             self.set_attr('__l2l_end__', context)
             cend = &DMSHELL_LocalToLocalEnd
         CHKERR( DMShellSetLocalToLocal(self.dm, cbegin, cend) )
@@ -157,3 +157,13 @@ cdef class DMShell(DM):
             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )
         else:
             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
+
+    def setCreateSubDM(self, create_subdm, args=None, kargs=None):
+        if create_subdm is not None:
+            if args  is None: args = ()
+            if kargs is None: kargs = {}
+            context = (create_subdm, args, kargs)
+            self.set_attr('__create_subdm__', context)
+            CHKERR( DMShellSetCreateSubDM(self.dm, DMSHELL_CreateSubDM) )
+        else:
+            CHKERR( DMShellSetCreateSubDM(self.dm, NULL) )
diff --git a/src/PETSc/IS.pyx b/src/PETSc/IS.pyx
index be6bbd1..539e770 100644
--- a/src/PETSc/IS.pyx
+++ b/src/PETSc/IS.pyx
@@ -26,6 +26,8 @@ cdef class IS(Object):
     def __releasebuffer__(self, Py_buffer *view):
         cdef _IS_buffer buf = <_IS_buffer>(view.obj)
         buf.releasebuffer(view)
+        <void>self # unused
+
 
     # 'with' statement (PEP 343)
 
diff --git a/src/PETSc/KSP.pyx b/src/PETSc/KSP.pyx
index 0aac62b..db15522 100644
--- a/src/PETSc/KSP.pyx
+++ b/src/PETSc/KSP.pyx
@@ -6,11 +6,15 @@ class KSPType(object):
     CG         = S_(KSPCG)
     GROPPCG    = S_(KSPGROPPCG)
     PIPECG     = S_(KSPPIPECG)
+    PIPECGRR   = S_(KSPPIPECGRR)
     CGNE       = S_(KSPCGNE)
     NASH       = S_(KSPNASH)
     STCG       = S_(KSPSTCG)
     GLTR       = S_(KSPGLTR)
+    FCG        = S_(KSPFCG)
+    PIPEFCG    = S_(KSPPIPEFCG)
     GMRES      = S_(KSPGMRES)
+    PIPEFGMRES = S_(KSPPIPEFGMRES)
     FGMRES     = S_(KSPFGMRES)
     LGMRES     = S_(KSPLGMRES)
     DGMRES     = S_(KSPDGMRES)
@@ -34,6 +38,9 @@ class KSPType(object):
     LCD        = S_(KSPLCD)
     PYTHON     = S_(KSPPYTHON)
     GCR        = S_(KSPGCR)
+    PIPEGCR    = S_(KSPPIPEGCR)
+    TSIRM      = S_(KSPTSIRM)
+    CGLS       = S_(KSPCGLS)
 
 class KSPNormType(object):
     # native
@@ -163,6 +170,20 @@ cdef class KSP(Object):
 
     # --- operators and preconditioner ---
 
+    def setComputeRHS(self, rhs, args=None, kargs=None):
+        if args  is None: args  = ()
+        if kargs is None: kargs = {}
+        context = (rhs, args, kargs)
+        self.set_attr('__rhs__', context)
+        CHKERR( KSPSetComputeRHS(self.ksp, KSP_ComputeRHS, <void*>context) )
+
+    def setComputeOperators(self, operators, args=None, kargs=None):
+        if args  is None: args  = ()
+        if kargs is None: kargs = {}
+        context = (operators, args, kargs)
+        self.set_attr('__operators__', context)
+        CHKERR( KSPSetComputeOperators(self.ksp, KSP_ComputeOps, <void*>context) )
+
     def setOperators(self, Mat A=None, Mat P=None):
         cdef PetscMat amat=NULL
         if A is not None: amat = A.mat
diff --git a/src/PETSc/Log.pyx b/src/PETSc/Log.pyx
index f43ab4d..9aa08ec 100644
--- a/src/PETSc/Log.pyx
+++ b/src/PETSc/Log.pyx
@@ -49,10 +49,10 @@ cdef class Log:
     @classmethod
     def begin(cls, all=False):
         if all: CHKERR( PetscLogAllBegin() )
-        else:   CHKERR( PetscLogBegin() )
+        else:   CHKERR( PetscLogDefaultBegin() )
 
     @classmethod
-    def view(self, Viewer viewer=None):
+    def view(cls, Viewer viewer=None):
         cdef PetscViewer vwr = NULL
         if viewer is not None: vwr = viewer.vwr
         if vwr == NULL: vwr = PETSC_VIEWER_STDOUT_WORLD
@@ -115,6 +115,7 @@ cdef class LogStage:
         CHKERR( PetscLogStagePush(self.id) )
 
     def pop(self):
+        <void>self # unused
         CHKERR( PetscLogStagePop() )
 
     #
@@ -128,6 +129,7 @@ cdef class LogStage:
         def __get__(self):
             return self.getName()
         def __set__(self, value):
+            <void>self; <void>value; # unused
             raise TypeError("readonly attribute")
 
     #
@@ -207,6 +209,7 @@ cdef class LogClass:
         def __get__(self):
             return self.getName()
         def __set__(self, value):
+            <void>self; <void>value; # unused
             raise TypeError("readonly attribute")
 
     #
@@ -218,6 +221,7 @@ cdef class LogClass:
         CHKERR( PetscLogClassDeactivate(self.id) )
 
     def getActive(self):
+        <void>self # unused
         raise NotImplementedError
 
     def setActive(self, flag):
@@ -300,6 +304,7 @@ cdef class LogEvent:
         def __get__(self):
             return self.getName()
         def __set__(self, value):
+            <void>self; <void>value; # unused
             raise TypeError("readonly attribute")
 
     #
@@ -311,6 +316,7 @@ cdef class LogEvent:
         CHKERR( PetscLogEventDeactivate(self.id) )
 
     def getActive(self):
+        <void>self # unused
         raise NotImplementedError
 
     def setActive(self, flag):
@@ -325,6 +331,10 @@ cdef class LogEvent:
         def __set__(self, value):
             self.setActive(value)
 
+    def getActiveAll(self):
+        <void>self # unused
+        raise NotImplementedError
+
     def setActiveAll(self, flag):
         cdef PetscBool tval = PETSC_FALSE
         if flag: tval = PETSC_TRUE
@@ -332,7 +342,7 @@ cdef class LogEvent:
 
     property active_all:
         def __get__(self):
-            raise NotImplementedError
+            self.getActiveAll()
         def __set__(self, value):
             self.setActiveAll(value)
 
diff --git a/src/PETSc/Mat.pyx b/src/PETSc/Mat.pyx
index f019dfb..2f34ff5 100644
--- a/src/PETSc/Mat.pyx
+++ b/src/PETSc/Mat.pyx
@@ -8,8 +8,6 @@ class MatType(object):
     IS              = S_(MATIS)
     AIJ             = S_(MATAIJ)
     SEQAIJ          = S_(MATSEQAIJ)
-    SEQAIJPTHREAD   = S_(MATSEQAIJPTHREAD)
-    AIJPTHREAD      = S_(MATAIJPTHREAD)
     MPIAIJ          = S_(MATMPIAIJ)
     AIJCRL          = S_(MATAIJCRL)
     SEQAIJCRL       = S_(MATSEQAIJCRL)
@@ -47,6 +45,7 @@ class MatType(object):
     DAAD            = S_(MATDAAD)
     MFFD            = S_(MATMFFD)
     NORMAL          = S_(MATNORMAL)
+    NORMALHERMITIAN = S_(MATNORMALHERMITIAN)
     LRC             = S_(MATLRC)
     SCATTER         = S_(MATSCATTER)
     BLOCKMAT        = S_(MATBLOCKMAT)
@@ -62,11 +61,10 @@ class MatType(object):
     SUBMATRIX       = S_(MATSUBMATRIX)
     LOCALREF        = S_(MATLOCALREF)
     NEST            = S_(MATNEST)
+    PREALLOCATOR    = S_(MATPREALLOCATOR)
 
 class MatOption(object):
-    NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
-    NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
     ROW_ORIENTED                = MAT_ROW_ORIENTED
     SYMMETRIC                   = MAT_SYMMETRIC
     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
@@ -78,7 +76,7 @@ class MatOption(object):
     USE_INODES                  = MAT_USE_INODES
     HERMITIAN                   = MAT_HERMITIAN
     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL
-    # DUMMY                       = MAT_DUMMY
+    NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR
     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR
     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
@@ -86,6 +84,8 @@ class MatOption(object):
     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES
     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
+    NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
+    SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES
 
 class MatAssemblyType(object):
     # native
@@ -95,6 +95,11 @@ class MatAssemblyType(object):
     FINAL = FINAL_ASSEMBLY
     FLUSH = FLUSH_ASSEMBLY
 
+class MatInfoType(object):
+    LOCAL = MAT_LOCAL
+    GLOBAL_MAX = MAT_GLOBAL_MAX
+    GLOBAL_SUM = MAT_GLOBAL_SUM
+
 class MatStructure(object):
     # native
     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
@@ -112,6 +117,8 @@ class MatOrderingType(object):
     RCM         = S_(MATORDERINGRCM)
     QMD         = S_(MATORDERINGQMD)
     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
+    WBM         = S_(MATORDERINGWBM)
+    SPECTRAL    = S_(MATORDERINGSPECTRAL)
     AMD         = S_(MATORDERINGAMD)
 
 class MatFactorShiftType(object):
@@ -125,15 +132,16 @@ class MatFactorShiftType(object):
     PD = MAT_SHIFT_POSITIVE_DEFINITE
 
 class MatSORType(object):
-    FORWARD_SWEEP        = SOR_FORWARD_SWEEP
-    BACKWARD_SWEEP       = SOR_BACKWARD_SWEEP
-    SYMMETRY_SWEEP       = SOR_SYMMETRIC_SWEEP
-    LOCAL_FORWARD_SWEEP  = SOR_LOCAL_FORWARD_SWEEP
-    LOCAL_BACKWARD_SWEEP = SOR_LOCAL_BACKWARD_SWEEP
-    ZERO_INITIAL_GUESS   = SOR_ZERO_INITIAL_GUESS
-    EISENSTAT            = SOR_EISENSTAT
-    APPLY_UPPER          = SOR_APPLY_UPPER
-    APPLY_LOWER          = SOR_APPLY_LOWER
+    FORWARD_SWEEP         = SOR_FORWARD_SWEEP
+    BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
+    SYMMETRY_SWEEP        = SOR_SYMMETRIC_SWEEP
+    LOCAL_FORWARD_SWEEP   = SOR_LOCAL_FORWARD_SWEEP
+    LOCAL_BACKWARD_SWEEP  = SOR_LOCAL_BACKWARD_SWEEP
+    LOCAL_SYMMETRIC_SWEEP = SOR_LOCAL_SYMMETRIC_SWEEP
+    ZERO_INITIAL_GUESS    = SOR_ZERO_INITIAL_GUESS
+    EISENSTAT             = SOR_EISENSTAT
+    APPLY_UPPER           = SOR_APPLY_UPPER
+    APPLY_LOWER           = SOR_APPLY_LOWER
 
 # --------------------------------------------------------------------
 
@@ -142,6 +150,7 @@ cdef class Mat(Object):
     Type            = MatType
     Option          = MatOption
     AssemblyType    = MatAssemblyType
+    InfoType        = MatInfoType
     Structure       = MatStructure
     OrderingType    = MatOrderingType
     FactorShiftType = MatFactorShiftType
@@ -431,6 +440,7 @@ cdef class Mat(Object):
         return self
 
     def createNest(self, mats, isrows=None, iscols=None, comm=None):
+        cdef object mat
         mats = [list(mat) for mat in mats]
         if isrows:
             isrows = list(isrows)
@@ -454,7 +464,8 @@ cdef class Mat(Object):
         tmp1 = oarray_p(empty_p(nr*nc), NULL, <void**>&cmats)
         for i from 0 <= i < mr:
             for j from 0 <= j < mc:
-                cmats[i*mc+j] = (<Mat?>mats[i][j]).mat
+                mat = mats[i][j]
+                cmats[i*mc+j] = (<Mat?>mat).mat if mat is not None else NULL
         if isrows is not None:
             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)
             for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset
@@ -598,6 +609,12 @@ cdef class Mat(Object):
         CHKERR( MatGetOwnershipIS(self.mat, &rows.iset, &cols.iset) )
         return (rows, cols)
 
+    def getInfo(self, info=None):
+        cdef PetscMatInfoType itype = infotype(info)
+        cdef PetscMatInfo cinfo
+        CHKERR( MatGetInfo(self.mat, itype, &cinfo) )
+        return cinfo
+
     def duplicate(self, copy=False):
         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES
         if copy: flag = MAT_COPY_VALUES
@@ -990,6 +1007,16 @@ cdef class Mat(Object):
             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
         CHKERR( MatGetColumnVector(self.mat, result.vec, ival) )
         return result
+    
+    def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):
+        cdef PetscInt _nsubcomm   = asInt(nsubcomm)
+        cdef MPI_Comm _subcomm    = MPI_COMM_NULL
+        if subcomm:   _subcomm    = def_Comm(subcomm, PETSC_COMM_DEFAULT)
+        cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX
+        if out is None: out       = Mat()
+        if out.mat != NULL: reuse = MAT_REUSE_MATRIX
+        CHKERR( MatCreateRedundantMatrix(self.mat, _nsubcomm, _subcomm, reuse, &out.mat))
+        return out
 
     def getDiagonal(self, Vec result=None):
         if result is None:
@@ -1101,6 +1128,38 @@ cdef class Mat(Object):
                                 reuse, &submat.mat) )
         return submat
 
+    def getSubMatrices(self, isrows not None, iscols=None, submats=None):
+        if iscols is None: iscols = isrows
+        isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
+        iscols = [iscols] if isinstance(iscols, IS) else list(iscols)
+        assert len(isrows) == len(iscols)
+        cdef Py_ssize_t i, n = len(isrows)
+        cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+        cdef PetscIS  *cisrows = NULL
+        cdef PetscIS  *ciscols = NULL
+        cdef PetscMat *cmats   = NULL
+        cdef object tmp1, tmp2
+        cdef Mat mat
+        tmp1 = oarray_p(empty_p(n), NULL, <void**>&cisrows)
+        for i from 0 <= i < n: cisrows[i] = (<IS?>isrows[i]).iset
+        tmp2 = oarray_p(empty_p(n), NULL, <void**>&ciscols)
+        for i from 0 <= i < n: ciscols[i] = (<IS?>iscols[i]).iset
+        if submats is not None:
+            reuse = MAT_REUSE_MATRIX
+            submats = list(submats)
+            assert len(submats) == len(isrows)
+            CHKERR( PetscMalloc(<size_t>(n+1)*sizeof(PetscMat), &cmats) )
+            for i from 0 <= i < n: cmats[i] = (<Mat?>submats[i]).mat
+        CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )
+        for i from 0 <= i < n: PetscINCREF(<PetscObject*>&cmats[i])
+        if reuse == MAT_INITIAL_MATRIX:
+            submats = [None] * n
+            for i from 0 <= i < n:
+                submats[i] = mat = Mat()
+                mat.mat = cmats[i]
+        CHKERR( MatDestroyMatrices(<PetscInt>n, &cmats) )
+        return submats
+
     #
 
     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):
@@ -1214,17 +1273,17 @@ cdef class Mat(Object):
         matfactorinfo(PETSC_FALSE, PETSC_FALSE, options, &info)
         CHKERR( MatLUFactor(self.mat, isrow.iset, iscol.iset, &info) )
     def factorSymbolicLU(self, Mat mat not None, IS isrow not None, IS iscol not None, options=None):
-        mat = isrow = iscol = options = None
+        <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
         raise NotImplementedError
     def factorNumericLU(self, Mat mat not None, options=None):
-        mat = options = None
+        <void>self; <void>mat; <void>options; # unused
         raise NotImplementedError
     def factorILU(self, IS isrow not None, IS iscol not None, options=None):
         cdef PetscMatFactorInfo info
         matfactorinfo(PETSC_TRUE, PETSC_FALSE, options, &info)
         CHKERR( MatILUFactor(self.mat, isrow.iset, iscol.iset, &info) )
     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):
-        isrow = iscol = options = None
+        <void>self; <void>isrow; <void>iscol; <void>options; # unused
         raise NotImplementedError
 
     def factorCholesky(self, IS isperm not None, options=None):
@@ -1232,17 +1291,17 @@ cdef class Mat(Object):
         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)
         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )
     def factorSymbolicCholesky(self, IS isperm not None, options=None):
-        isperm = options = None
+        <void>self; <void>isperm; <void>options; # unused
         raise NotImplementedError
     def factorNumericCholesky(self, Mat mat not None, options=None):
-        mat = options = None
+        <void>self; <void>mat; <void>options; # unused
         raise NotImplementedError
     def factorICC(self, IS isperm not None, options=None):
         cdef PetscMatFactorInfo info
         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)
         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )
     def factorSymbolicICC(self, IS isperm not None, options=None):
-        isperm = options = None
+        <void>self; <void>isperm; <void>options; # unused
         raise NotImplementedError
 
     def getInertia(self):
@@ -1253,6 +1312,54 @@ cdef class Mat(Object):
     def setUnfactored(self):
         CHKERR( MatSetUnfactored(self.mat) )
 
+    # MUMPS
+
+    def setMumpsIcntl(self, icntl, ival):
+        cdef PetscInt _icntl = asInt(icntl)
+        cdef PetscInt _ival = asInt(ival)
+        CHKERR( MatMumpsSetIcntl(self.mat, _icntl, _ival) );
+
+    def getMumpsIcntl(self, icntl):
+        cdef PetscInt _icntl = asInt(icntl)
+        cdef PetscInt ival = 0
+        CHKERR( MatMumpsGetIcntl(self.mat, _icntl, &ival) );
+        return toInt(ival)
+
+    def setMumpsCntl(self, icntl, val):
+        cdef PetscInt _icntl = asInt(icntl)
+        cdef PetscReal _val = asReal(val)
+        CHKERR( MatMumpsSetCntl(self.mat, _icntl, _val) );
+
+    def getMumpsCntl(self, icntl):
+        cdef PetscInt _icntl = asInt(icntl)
+        cdef PetscReal val = 0
+        CHKERR( MatMumpsGetCntl(self.mat, _icntl, &val) );
+        return toReal(val)
+
+    def getMumpsInfo(self, icntl):
+        cdef PetscInt _icntl = asInt(icntl)
+        cdef PetscInt ival = 0
+        CHKERR( MatMumpsGetInfo(self.mat, _icntl, &ival) );
+        return toInt(ival)
+
+    def getMumpsInfog(self, icntl):
+        cdef PetscInt _icntl = asInt(icntl)
+        cdef PetscInt ival = 0
+        CHKERR( MatMumpsGetInfog(self.mat, _icntl, &ival) );
+        return toInt(ival)
+
+    def getMumpsRinfo(self, icntl):
+        cdef PetscInt _icntl = asInt(icntl)
+        cdef PetscReal val = 0
+        CHKERR( MatMumpsGetRinfo(self.mat, _icntl, &val) );
+        return toReal(val)
+
+    def getMumpsRinfog(self, icntl):
+        cdef PetscInt _icntl = asInt(icntl)
+        cdef PetscReal val = 0
+        CHKERR( MatMumpsGetRinfog(self.mat, _icntl, &val) );
+        return toReal(val)
+
     # solve
 
     def solveForward(self, Vec b not None, Vec x not None):
@@ -1436,6 +1543,7 @@ cdef class NullSpace(Object):
 del MatType
 del MatOption
 del MatAssemblyType
+del MatInfoType
 del MatStructure
 del MatOrderingType
 del MatFactorShiftType
diff --git a/src/PETSc/Object.pyx b/src/PETSc/Object.pyx
index 33b2735..8e6626d 100644
--- a/src/PETSc/Object.pyx
+++ b/src/PETSc/Object.pyx
@@ -37,6 +37,7 @@ cdef class Object:
             obj_copy = self.copy
         except AttributeError:
             raise NotImplementedError
+        <void>memo # unused
         return obj_copy()
 
     # --- attribute management ---
diff --git a/src/PETSc/Options.pyx b/src/PETSc/Options.pyx
index 5161947..d5b41fc 100644
--- a/src/PETSc/Options.pyx
+++ b/src/PETSc/Options.pyx
@@ -2,11 +2,17 @@
 
 cdef class Options:
 
-    cdef object _prefix
+    cdef PetscOptions opt
+    cdef object       _prefix
 
     def __init__(self, prefix=None):
+        self.opt = NULL
         self.prefix  = prefix
 
+    def __dealloc__(self):
+        if self.opt == NULL: return
+        CHKERR( PetscOptionsDestroy(&self.opt) )
+
     def __contains__(self, item):
         return self.hasName(item)
 
@@ -28,18 +34,38 @@ cdef class Options:
             self._prefix = None
     #
 
+    def create(self):
+        if self.opt != NULL: return
+        CHKERR( PetscOptionsCreate(&self.opt) )
+        return self
+
+    def destroy(self):
+        if self.opt == NULL: return
+        CHKERR( PetscOptionsDestroy(&self.opt) )
+        return self
+
+    def clear(self):
+        if self.opt == NULL: return
+        CHKERR( PetscOptionsClear(self.opt) )
+        return self
+
+    def view(self, Viewer viewer=None):
+        cdef PetscViewer vwr = NULL
+        if viewer is not None: vwr = viewer.vwr
+        CHKERR( PetscOptionsView(self.opt, vwr) )
+
     def setFromOptions(self):
-        CHKERR( PetscOptionsSetFromOptions() )
+        CHKERR( PetscOptionsSetFromOptions(self.opt) )
     #
 
     def prefixPush(self, prefix):
         prefix = getprefix(prefix)
         cdef const_char *cprefix = NULL
         prefix = str2bytes(prefix, &cprefix)
-        CHKERR( PetscOptionsPrefixPush(cprefix) )
+        CHKERR( PetscOptionsPrefixPush(self.opt, cprefix) )
 
     def prefixPop(self):
-        CHKERR( PetscOptionsPrefixPop() )
+        CHKERR( PetscOptionsPrefixPop(self.opt) )
     #
 
     def hasName(self, name):
@@ -47,7 +73,7 @@ cdef class Options:
         cdef const_char *nm = NULL
         tmp = getpair(self.prefix, name, &pr, &nm)
         cdef PetscBool flag = PETSC_FALSE
-        CHKERR( PetscOptionsHasName(pr, nm, &flag) )
+        CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )
         return <bint> flag
 
     def setValue(self, name, value):
@@ -62,11 +88,11 @@ cdef class Options:
             value = str(value).lower()
         elif value is not None : 
             value = str(value)
-        cdef const_char *opt = NULL
+        cdef const_char *key = NULL
         cdef const_char *val = NULL
-        option = str2bytes(option, &opt)
+        option = str2bytes(option, &key)
         value  = str2bytes(value,  &val)
-        CHKERR( PetscOptionsSetValue(opt, val) )
+        CHKERR( PetscOptionsSetValue(self.opt, key, val) )
 
     def delValue(self, name):
         cdef const_char *pr = NULL
@@ -76,30 +102,30 @@ cdef class Options:
             option = bytes2str(nm)
         else: 
             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))
-        cdef const_char *opt = NULL
-        option = str2bytes(option, &opt)
-        CHKERR( PetscOptionsClearValue(opt) )
+        cdef const_char *key = NULL
+        option = str2bytes(option, &key)
+        CHKERR( PetscOptionsClearValue(self.opt, key) )
 
     #
 
     def getBool(self, name, default=None):
-        return getopt(OPT_BOOL, self.prefix, name, default)
+        return getopt(self.opt, OPT_BOOL, self.prefix, name, default)
 
     def getInt(self, name, default=None):
-        return getopt(OPT_INT, self.prefix, name, default)
+        return getopt(self.opt, OPT_INT, self.prefix, name, default)
 
     def getReal(self, name, default=None):
-        return getopt(OPT_REAL, self.prefix, name, default)
+        return getopt(self.opt, OPT_REAL, self.prefix, name, default)
 
     def getScalar(self, name, default=None):
-        return getopt(OPT_SCALAR, self.prefix, name, default)
+        return getopt(self.opt, OPT_SCALAR, self.prefix, name, default)
 
     def getString(self, name, default=None):
-        return getopt(OPT_STRING, self.prefix, name, default)
+        return getopt(self.opt, OPT_STRING, self.prefix, name, default)
 
     def getAll(self):
         cdef char *allopts = NULL
-        CHKERR( PetscOptionsGetAll(&allopts) )
+        CHKERR( PetscOptionsGetAll(self.opt, &allopts) )
         options = bytes2str(allopts)
         CHKERR( PetscFree(allopts) )
         return parseopt(options, self.prefix)
diff --git a/src/PETSc/PC.pyx b/src/PETSc/PC.pyx
index 3252d13..23cc95c 100644
--- a/src/PETSc/PC.pyx
+++ b/src/PETSc/PC.pyx
@@ -44,6 +44,7 @@ class PCType(object):
     AINVCUSP     = S_(PCAINVCUSP)
     BDDC         = S_(PCBDDC)
     KACZMARZ     = S_(PCKACZMARZ)
+    TELESCOPE    = S_(PCTELESCOPE)
 
 class PCSide(object):
     # native
@@ -67,6 +68,12 @@ class PCGASMType(object):
     RESTRICT    = PC_GASM_RESTRICT
     INTERPOLATE = PC_GASM_INTERPOLATE
 
+class PCMGType(object):
+    MULTIPLICATIVE = PC_MG_MULTIPLICATIVE
+    ADDITIVE       = PC_MG_ADDITIVE
+    FULL           = PC_MG_FULL
+    KASKADE        = PC_MG_KASKADE
+
 class PCGAMGType(object):
     AGG       = S_(PCGAMGAGG)
     GEO       = S_(PCGAMGGEO)
@@ -101,6 +108,7 @@ cdef class PC(Object):
 
     ASMType       = PCASMType
     GASMType      = PCGASMType
+    MGType        = PCMGType
     GAMGType      = PCGAMGType
     CompositeType = PCCompositeType
     SchurFactType = PCFieldSplitSchurFactType
@@ -299,6 +307,39 @@ cdef class PC(Object):
         cdef PetscInt ival = asInt(smooths)
         CHKERR( PCGAMGSetNSmooths(self.pc, ival) )
 
+    # --- Hypre ---
+
+    def getHYPREType(self):
+        cdef PetscPCHYPREType cval = NULL
+        CHKERR( PCHYPREGetType(self.pc, &cval) )
+        return bytes2str(cval)
+
+    def setHYPREType(self, hypretype):
+        cdef PetscPCHYPREType cval = NULL
+        hypretype = str2bytes(hypretype, &cval)
+        CHKERR( PCHYPRESetType(self.pc, cval) )
+
+    def setHYPREDiscreteCurl(self, Mat mat not None):
+        CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
+
+    def setHYPREDiscreteGradient(self, Mat mat not None):
+        CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
+
+    def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):
+        CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
+
+    def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):
+        cdef PetscMat pmat = NULL
+        if mat is not None: pmat = mat.mat
+        CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )
+
+    def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,
+                                       Vec zoz not None, Vec zzo=None):
+        cdef PetscVec zzo_vec = NULL
+        if zzo is not None: zzo_vec = zzo.vec
+        CHKERR( PCHYPRESetEdgeConstantVectors(self.pc, ozz.vec, zoz.vec,
+                                              zzo_vec) )
+
     # --- Factor ---
 
     def setFactorSolverPackage(self, solver):
@@ -332,7 +373,7 @@ cdef class PC(Object):
             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
         cdef PetscBool bval = PETSC_FALSE
         if inblocks is not None:
-            bval2 = PETSC_TRUE if inblocks else PETSC_FALSE
+            bval = PETSC_TRUE if inblocks else PETSC_FALSE
             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )
 
     def setFactorShift(self, shift_type=None, amount=None):
@@ -436,8 +477,18 @@ cdef class PC(Object):
         return ksp
 
     # --- MG ---
+
+    def getMGType(self):
+        cdef PetscPCMGType cval = PC_MG_ADDITIVE
+        CHKERR( PCMGGetType(self.pc, &cval) )
+        return cval
+
+    def setMGType(self, mgtype):
+        cdef PetscPCMGType cval = mgtype
+        CHKERR( PCMGSetType(self.pc, cval) )
+
     def getMGLevels(self):
-        cdef PetscInt levels
+        cdef PetscInt levels = 0
         CHKERR( PCMGGetLevels(self.pc, &levels) )
         return toInt(levels)
 
@@ -524,6 +575,7 @@ del PCType
 del PCSide
 del PCASMType
 del PCGASMType
+del PCMGType
 del PCGAMGType
 del PCCompositeType
 del PCFieldSplitSchurPreType
diff --git a/src/PETSc/PETSc.pyx b/src/PETSc/PETSc.pyx
index 61b281f..cde7cd0 100644
--- a/src/PETSc/PETSc.pyx
+++ b/src/PETSc/PETSc.pyx
@@ -221,6 +221,7 @@ cdef int traceback(MPI_Comm       comm,
         PetscErrorMessage(n, &text, NULL)
     if text != NULL: tbl.append(bytes2str(text))
     if mess != NULL: tbl.append(bytes2str(mess))
+    <void>comm; <void>ctx; # unused
     return n
 
 cdef int PetscPythonErrorHandler(
@@ -337,8 +338,8 @@ cdef int initialize(object args, object comm) except -1:
     CHKERR( PetscPushErrorHandler(handler, NULL) )
     # register finalization function
     if Py_AtExit(finalize) < 0:
-        PySys_WriteStderr("warning: could not register"
-                          "PetscFinalize() with Py_AtExit()", 0)
+        PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
+                          b"PetscFinalize()")
     return 1 # and we are done, enjoy !!
 
 cdef extern from *:
@@ -448,5 +449,7 @@ def _finalize():
     class_registry.clear()
     global event_registry
     event_registry.clear()
+    global citations_registry
+    citations_registry.clear()
 
 # --------------------------------------------------------------------
diff --git a/src/PETSc/Random.pyx b/src/PETSc/Random.pyx
index f6711e3..3dccc80 100644
--- a/src/PETSc/Random.pyx
+++ b/src/PETSc/Random.pyx
@@ -1,9 +1,10 @@
 # --------------------------------------------------------------------
 
 class RandomType(object):
-    RAND   = S_(PETSCRAND)
-    RAND48 = S_(PETSCRAND48)
-    SPRNG  = S_(PETSCSPRNG)
+    RAND     = S_(PETSCRAND)
+    RAND48   = S_(PETSCRAND48)
+    SPRNG    = S_(PETSCSPRNG)
+    RANDER48 = S_(PETSCRANDER48)
 
 # --------------------------------------------------------------------
 
diff --git a/src/PETSc/SF.pyx b/src/PETSc/SF.pyx
index caf9bc1..1951cf7 100644
--- a/src/PETSc/SF.pyx
+++ b/src/PETSc/SF.pyx
@@ -58,7 +58,7 @@ cdef class SF(Object):
     def getGraph(self):
         cdef PetscInt nroots = 0, nleaves = 0
         cdef const_PetscInt *ilocal = NULL
-        cdef const_PetscSFNode *iremote
+        cdef const_PetscSFNode *iremote = NULL
         CHKERR( PetscSFGetGraph(self.sf, &nroots, &nleaves, &ilocal, &iremote) )
         local = array_i(nleaves, ilocal)
         remote = []
diff --git a/src/PETSc/Section.pyx b/src/PETSc/Section.pyx
index 8064b4a..9472dc9 100644
--- a/src/PETSc/Section.pyx
+++ b/src/PETSc/Section.pyx
@@ -59,7 +59,7 @@ cdef class Section(Object):
         CHKERR( PetscSectionSetFieldName(self.sec,cfield,cname) )
 
     def getFieldComponents(self,field):
-        cdef PetscInt cfield = asInt(field), cnumComp
+        cdef PetscInt cfield = asInt(field), cnumComp = 0
         CHKERR( PetscSectionGetFieldComponents(self.sec,cfield,&cnumComp) )
         return toInt(cnumComp)
 
@@ -79,7 +79,7 @@ cdef class Section(Object):
         CHKERR( PetscSectionSetChart(self.sec, cStart, cEnd) )
 
     def getDof(self,point):
-        cdef PetscInt cpoint = asInt(point), cnumDof
+        cdef PetscInt cpoint = asInt(point), cnumDof = 0
         CHKERR( PetscSectionGetDof(self.sec,cpoint,&cnumDof) )
         return toInt(cnumDof)
 
@@ -210,5 +210,5 @@ cdef class Section(Object):
 
     def createGlobalSection(self, SF sf not None):
         cdef Section gsec = Section()
-        CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,&gsec.sec) )
+        CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )
         return gsec
diff --git a/src/PETSc/Sys.pyx b/src/PETSc/Sys.pyx
index d85d6ef..073288d 100644
--- a/src/PETSc/Sys.pyx
+++ b/src/PETSc/Sys.pyx
@@ -163,5 +163,29 @@ cdef class Sys:
     @classmethod
     def popErrorHandler(cls):
         CHKERR( PetscPopErrorHandler() )
-    
+
+    @classmethod
+    def infoAllow(cls, flag):
+        cdef PetscBool tval = PETSC_FALSE
+        if flag: tval = PETSC_TRUE
+        CHKERR( PetscInfoAllow(tval, NULL) )
+
+    @classmethod
+    def registerCitation(cls, citation):
+        if not citation: raise ValueError("empty citation")
+        cdef const_char *cit = NULL
+        citation = str2bytes(citation, &cit)
+        cdef PetscBool set = get_citation(citation)
+        CHKERR( PetscCitationsRegister(cit, &set) )
+        set_citation(citation, <bint>set)
+
+cdef dict citations_registry = { }
+
+cdef PetscBool get_citation(object citation):
+    cdef bint is_set = citations_registry.get(citation)
+    return PETSC_TRUE if is_set else PETSC_FALSE
+
+cdef set_citation(object citation, bint is_set):
+    citations_registry[citation] = is_set
+
 # --------------------------------------------------------------------
diff --git a/src/PETSc/TAO.pyx b/src/PETSc/TAO.pyx
index 9d5d275..c359b10 100644
--- a/src/PETSc/TAO.pyx
+++ b/src/PETSc/TAO.pyx
@@ -34,8 +34,6 @@ class TAOConvergedReason:
     CONVERGED_ITERATING   = TAO_CONTINUE_ITERATING    # iterating
     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
     # converged
-    CONVERGED_FATOL       = TAO_CONVERGED_FATOL       # f(X)-f(X*) <= fatol
-    CONVERGED_FRTOL       = TAO_CONVERGED_FRTOL       # |F(X)-f(X*)|/|f(X)| < frtol
     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
@@ -65,9 +63,6 @@ cdef class TAO(Object):
         self.obj = <PetscObject*> &self.tao
         self.tao = NULL
 
-    def __dealloc__(self):
-        pass
-
     def view(self, Viewer viewer=None):
         """
         """
@@ -347,65 +342,20 @@ cdef class TAO(Object):
 
     #
 
-    def setTolerances(self,
-                      fatol=None, frtol=None,
-                      gatol=None, grtol=None, gttol=None):
+    def setTolerances(self, gatol=None, grtol=None, gttol=None):
         """
         """
-        cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
-        if fatol is not None: _fatol = asReal(fatol)
-        if frtol is not None: _frtol = asReal(frtol)
         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
         if gatol is not None: _gatol = asReal(gatol)
         if grtol is not None: _grtol = asReal(grtol)
         if gttol is not None: _gttol = asReal(gttol)
-        CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
+        CHKERR( TaoSetTolerances(self.tao, _gatol, _grtol, _gttol) )
 
     def getTolerances(self):
         """
         """
-        cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
-        cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
-        CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
-        return (toReal(_fatol), toReal(_frtol),
-                toReal(_gatol), toReal(_grtol), toReal(_gttol))
-
-    def setObjectiveTolerances(self, fatol=None, frtol=None):
-        """
-        """
-        cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
-        cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
-        if fatol is not None: _fatol = asReal(fatol)
-        if frtol is not None: _frtol = asReal(frtol)
-        CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
-
-    def getObjectiveTolerances(self):
-        """
-        """
-        cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
-        cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
-        CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
-        return (toReal(_fatol), toReal(_frtol))
-
-    setFunctionTolerances = setObjectiveTolerances
-    getFunctionTolerances = getObjectiveTolerances
-
-    def setGradientTolerances(self, gatol=None, grtol=None, gttol=None):
-        """
-        """
-        cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
-        if gatol is not None: _gatol = asReal(gatol)
-        if grtol is not None: _grtol = asReal(grtol)
-        if gttol is not None: _gttol = asReal(gttol)
-        CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
-
-    def getGradientTolerances(self):
-        """
-        """
-        cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
-        cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
-        CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
+        CHKERR( TaoGetTolerances(self.tao, &_gatol, &_grtol, &_gttol) )
         return (toReal(_gatol), toReal(_grtol), toReal(_gttol))
 
     def setConstraintTolerances(self, catol=None, crtol=None):
@@ -502,6 +452,40 @@ cdef class TAO(Object):
         PetscINCREF(vec.obj)
         return vec
 
+    def setGradientNorm(self, Mat mat):
+        """
+        """
+        CHKERR( TaoSetGradientNorm(self.tao, mat.mat) )
+
+    def getGradientNorm(self):
+        """
+        """
+        cdef Mat mat = Mat()
+        CHKERR( TaoGetGradientNorm(self.tao, &mat.mat) )
+        PetscINCREF(mat.obj)
+        return mat
+
+    def setLMVMH0(self, Mat mat):
+        """
+        """
+        CHKERR( TaoLMVMSetH0(self.tao, mat.mat) )
+
+    def getLMVMH0(self):
+        """
+        """
+        cdef Mat mat = Mat()
+        CHKERR( TaoLMVMGetH0(self.tao, &mat.mat) )
+        PetscINCREF(mat.obj)
+        return mat
+
+    def getLMVMH0KSP(self):
+        """
+        """
+        cdef KSP ksp = KSP()
+        CHKERR( TaoLMVMGetH0KSP(self.tao, &ksp.ksp) )
+        PetscINCREF(ksp.obj)
+        return ksp
+
     def getVariableBounds(self):
         """
         """
@@ -526,20 +510,6 @@ cdef class TAO(Object):
 
     getFunctionValue = getObjectiveValue
 
-    def getGradientNorm(self):
-        """
-        """
-        cdef PetscReal gnorm=0
-        CHKERR( TaoGetSolutionStatus(self.tao, NULL, NULL, &gnorm, NULL, NULL, NULL) )
-        return toReal(gnorm)
-
-    def getConstraintsNorm(self):
-        """
-        """
-        cdef PetscReal cnorm=0
-        CHKERR( TaoGetSolutionStatus(self.tao, NULL, NULL, NULL, &cnorm, NULL, NULL) )
-        return toReal(cnorm)
-
     def getConvergedReason(self):
         """
         """
@@ -547,6 +517,15 @@ cdef class TAO(Object):
         CHKERR( TaoGetConvergedReason(self.tao, &reason) )
         return reason
 
+    def getSolutionNorm(self):
+        """
+        """
+        cdef PetscReal gnorm=0
+        cdef PetscReal cnorm=0
+        cdef PetscReal fval=0
+        CHKERR( TaoGetSolutionStatus(self.tao, NULL, &fval, &gnorm, &cnorm, NULL, NULL) )
+        return (toReal(fval), toReal(gnorm), toReal(cnorm))
+
     def getSolutionStatus(self):
         """
         """
@@ -625,11 +604,11 @@ cdef class TAO(Object):
 
     property gnorm:
         def __get__(self):
-            return self.getGradientNorm()
+            return self.getSolutionNorm()[1]
 
     property cnorm:
         def __get__(self):
-            return self.getConstraintNorm()
+            return self.getSolutionNorm()[2]
 
     property solution:
         def __get__(self):
diff --git a/src/PETSc/TS.pyx b/src/PETSc/TS.pyx
index 54b6b87..ae62dc0 100644
--- a/src/PETSc/TS.pyx
+++ b/src/PETSc/TS.pyx
@@ -11,14 +11,18 @@ class TSType(object):
     PYTHON   = S_(TSPYTHON)
     THETA    = S_(TSTHETA)
     ALPHA    = S_(TSALPHA)
+    ALPHA2  = S_(TSALPHA2)
     GL       = S_(TSGL)
     SSP      = S_(TSSSP)
     ARKIMEX  = S_(TSARKIMEX)
     ROSW     = S_(TSROSW)
     EIMEX    = S_(TSEIMEX)
+    MIMEX    = S_(TSMIMEX)
+    BDF      = S_(TSBDF)
     # aliases
     FE = EULER
     BE = BEULER
+    TH = THETA
     CRANK_NICOLSON = CN
     RUNGE_KUTTA    = RK
 
@@ -41,7 +45,8 @@ class TSEquationType(object):
     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3
     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
 
-class TSExactFinalTimeOption(object):
+class TSExactFinalTime(object):
+    UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
@@ -53,6 +58,8 @@ class TSConvergedReason(object):
     # converged
     CONVERGED_TIME           = TS_CONVERGED_TIME
     CONVERGED_ITS            = TS_CONVERGED_ITS
+    CONVERGED_USER           = TS_CONVERGED_USER
+    CONVERGED_EVENT          = TS_CONVERGED_EVENT
     # diverged
     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE
     DIVERGED_STEP_REJECTED   = TS_DIVERGED_STEP_REJECTED
@@ -64,7 +71,8 @@ cdef class TS(Object):
     Type = TSType
     ProblemType = TSProblemType
     EquationType = TSEquationType
-    ExactFinalTimeOption = TSExactFinalTimeOption
+    ExactFinalTime = TSExactFinalTime
+    ExactFinalTimeOption = TSExactFinalTime
     ConvergedReason = TSConvergedReason
 
     # --- xxx ---
@@ -80,6 +88,9 @@ cdef class TS(Object):
         if viewer is not None: cviewer = viewer.vwr
         CHKERR( TSView(self.ts, cviewer) )
 
+    def load(self, Viewer viewer not None):
+        CHKERR( TSLoad(self.ts, viewer.vwr) )
+
     def destroy(self):
         CHKERR( TSDestroy(&self.ts) )
         return self
@@ -91,6 +102,11 @@ cdef class TS(Object):
         PetscCLEAR(self.obj); self.ts = newts
         return self
 
+    def clone(self):
+        cdef TS ts = TS()
+        CHKERR( TSClone(self.ts, &ts.ts) )
+        return ts
+
     def setType(self, ts_type):
         cdef const_char *cval = NULL
         ts_type = str2bytes(ts_type, &cval)
@@ -310,6 +326,11 @@ cdef class TS(Object):
         CHKERR( TSGetTime(self.ts, &rval) )
         return toReal(rval)
 
+    def getPrevTime(self):
+        cdef PetscReal rval = 0
+        CHKERR( TSGetPrevTime(self.ts, &rval) )
+        return toReal(rval)
+
     def getSolveTime(self):
         cdef PetscReal rval = 0
         CHKERR( TSGetSolveTime(self.ts, &rval) )
@@ -374,6 +395,11 @@ cdef class TS(Object):
         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
         return (toReal(rval), toInt(ival))
 
+    def getTotalSteps(self):
+        cdef PetscInt ival = 0
+        CHKERR( TSGetTotalSteps(self.ts, &ival) )
+        return toInt(ival)
+
     def getSNESIterations(self):
         cdef PetscInt n = 0
         CHKERR( TSGetSNESIterations(self.ts, &n) )
@@ -722,7 +748,7 @@ cdef class TS(Object):
 del TSType
 del TSProblemType
 del TSEquationType
-del TSExactFinalTimeOption
+del TSExactFinalTime
 del TSConvergedReason
 
 # -----------------------------------------------------------------------------
diff --git a/src/PETSc/Vec.pyx b/src/PETSc/Vec.pyx
index d14f836..b0a8981 100644
--- a/src/PETSc/Vec.pyx
+++ b/src/PETSc/Vec.pyx
@@ -11,10 +11,10 @@ class VecType(object):
     SEQVIENNACL= S_(VECSEQVIENNACL)
     MPIVIENNACL= S_(VECMPIVIENNACL)
     VIENNACL   = S_(VECVIENNACL)
+    SEQCUSP    = S_(VECSEQCUDA)
+    MPICUSP    = S_(VECMPICUDA)
+    CUSP       = S_(VECCUDA)
     NEST       = S_(VECNEST)
-    SEQPTHREAD = S_(VECSEQPTHREAD)
-    MPIPTHREAD = S_(VECMPIPTHREAD)
-    PTHREAD    = S_(VECPTHREAD)
 
 class VecOption(object):
     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES
@@ -115,6 +115,7 @@ cdef class Vec(Object):
     def __releasebuffer__(self, Py_buffer *view):
         cdef _Vec_buffer buf = <_Vec_buffer>(view.obj)
         buf.releasebuffer(view)
+        <void>self # unused
 
     # 'with' statement (PEP 343)
 
@@ -391,15 +392,32 @@ cdef class Vec(Object):
         self.set_attr('__placed_array__', None)
         return array
 
-    def getCUDAHandle(self):
+    def getCUDAHandle(self, mode=None):
         cdef PetscScalar *hdl = NULL
-        CHKERR( VecCUSPGetCUDAArray(self.vec, &hdl) )
+        cdef const_char *m = NULL
+        if mode is not None: mode = str2bytes(mode, &m)
+        if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+            CHKERR( VecCUSPGetCUDAArrayReadWrite(self.vec, &hdl) )
+        elif m[0] == c'r':
+            CHKERR( VecCUSPGetCUDAArrayRead(self.vec, &hdl) )
+        elif m[0] == c'w':
+            CHKERR( VecCUSPGetCUDAArrayWrite(self.vec, &hdl) )
+        else:
+            raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")
         return <Py_uintptr_t>hdl
 
-    def restoreCUDAHandle(self, handle):
-        cdef PetscScalar *hdl = NULL
-        hdl = <PetscScalar*>(<Py_uintptr_t>handle)
-        CHKERR( VecCUSPRestoreCUDAArray(self.vec, &hdl) )
+    def restoreCUDAHandle(self, handle, mode='rw'):
+        cdef PetscScalar *hdl = <PetscScalar*>(<Py_uintptr_t>handle)
+        cdef const_char *m = NULL
+        if mode is not None: mode = str2bytes(mode, &m)
+        if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+            CHKERR( VecCUSPRestoreCUDAArrayReadWrite(self.vec, &hdl) )
+        elif m[0] == c'r':
+            CHKERR( VecCUSPRestoreCUDAArrayRead(self.vec, &hdl) )
+        elif m[0] == c'w':
+            CHKERR( VecCUSPRestoreCUDAArrayWrite(self.vec, &hdl) )
+        else:
+            raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")
 
     def duplicate(self, array=None):
         cdef Vec vec = type(self)()
@@ -416,6 +434,10 @@ cdef class Vec(Object):
         CHKERR( VecCopy(self.vec, result.vec) )
         return result
 
+    def chop(self, tol):
+        cdef PetscReal rval = asReal(tol)
+        CHKERR( VecChop(self.vec, rval) )
+
     def load(self, Viewer viewer not None):
         cdef MPI_Comm comm = MPI_COMM_NULL
         cdef PetscObject obj = <PetscObject>(viewer.vwr)
@@ -459,27 +481,27 @@ cdef class Vec(Object):
         return toScalar(sval)
 
     def mDot(self, vecs, out=None):
-        vecs = out = None
+        <void>self; <void>vecs; <void>out; # unused
         raise NotImplementedError
 
     def mDotBegin(self, vecs, out=None):
-        vecs = out = None
+        <void>self; <void>vecs; <void>out; # unused
         raise NotImplementedError
 
     def mDotEnd(self, vecs, out=None):
-        vecs = out = None
+        <void>self; <void>vecs; <void>out; # unused
         raise NotImplementedError
 
     def mtDot(self, vecs, out=None):
-        vecs = out = None
+        <void>self; <void>vecs; <void>out; # unused
         raise NotImplementedError
 
     def mtDotBegin(self, vecs, out=None):
-        vecs = out = None
+        <void>self; <void>vecs; <void>out; # unused
         raise NotImplementedError
 
     def mtDotEnd(self, vecs, out=None):
-        vecs = out = None
+        <void>self; <void>vecs; <void>out; # unused
         raise NotImplementedError
 
     def norm(self, norm_type=None):
@@ -575,6 +597,10 @@ cdef class Vec(Object):
         cdef PetscScalar sval = asScalar(alpha)
         CHKERR( VecShift(self.vec, sval) )
 
+    def chop(self, tol):
+        cdef PetscReal rval = asReal(tol)
+        CHKERR( VecChop(self.vec, rval) )
+
     def swap(self, Vec vec not None):
         CHKERR( VecSwap(self.vec, vec.vec) )
 
@@ -753,7 +779,7 @@ cdef class Vec(Object):
 
     def setMPIGhost(self, ghosts):
         "Alternative to createGhost()"
-        cdef PetscInt ng, *ig=NULL
+        cdef PetscInt ng=0, *ig=NULL
         ghosts = iarray_i(ghosts, &ng, &ig)
         CHKERR( VecMPISetGhost(self.vec, ng, ig) )
 
@@ -769,8 +795,8 @@ cdef class Vec(Object):
         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )
 
     def getNestSubVecs(self):
-        cdef PetscInt N
-        cdef PetscVec* sx
+        cdef PetscInt N=0
+        cdef PetscVec* sx=NULL
         CHKERR( VecNestGetSubVecs(self.vec, &N, &sx) )
         output = []
         for i in range(N):
diff --git a/src/PETSc/Viewer.pyx b/src/PETSc/Viewer.pyx
index 3eb02cc..f255d8b 100644
--- a/src/PETSc/Viewer.pyx
+++ b/src/PETSc/Viewer.pyx
@@ -33,6 +33,7 @@ class ViewerFormat(object):
     ASCII_PYTHON      = PETSC_VIEWER_ASCII_PYTHON
     ASCII_FACTOR_INFO = PETSC_VIEWER_ASCII_FACTOR_INFO
     ASCII_LATEX       = PETSC_VIEWER_ASCII_LATEX
+    ASCII_XML         = PETSC_VIEWER_ASCII_XML
     DRAW_BASIC        = PETSC_VIEWER_DRAW_BASIC
     DRAW_LG           = PETSC_VIEWER_DRAW_LG
     DRAW_CONTOUR      = PETSC_VIEWER_DRAW_CONTOUR
@@ -109,43 +110,35 @@ cdef class Viewer(Object):
         PetscCLEAR(self.obj); self.vwr = newvwr
         return self
 
-    def createASCII(self, name, mode=None, format=None, comm=None):
+    def createASCII(self, name, mode=None, comm=None):
         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef const_char *cname = NULL
         name = str2bytes(name, &cname)
         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE
         if mode is not None: filemode(mode)
-        cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
-        if format is not None: cvfmt = format
         cdef PetscViewer newvwr = NULL
         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
         PetscCLEAR(self.obj); self.vwr = newvwr
         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERASCII) )
         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
-        CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
         return self
 
-    def createBinary(self, name, mode=None, format=None, comm=None):
+    def createBinary(self, name, mode=None, comm=None):
         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef const_char *cname = NULL
         name = str2bytes(name, &cname)
         cdef PetscFileMode cmode = filemode(mode)
-        cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
-        if format is not None: cvfmt = format
         cdef PetscViewer newvwr = NULL
         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )
         PetscCLEAR(self.obj); self.vwr = newvwr
-        CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
         return self
 
-    def createMPIIO(self, name, mode=None, format=None, comm=None):
+    def createMPIIO(self, name, mode=None, comm=None):
         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef const_char *cname = NULL
         name = str2bytes(name, &cname)
         cdef PetscFileMode cmode = filemode(mode)
-        cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
-        if format is not None: cvfmt = format
         cdef PetscViewer newvwr = NULL
         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
         PetscCLEAR(self.obj); self.vwr = newvwr
@@ -153,7 +146,6 @@ cdef class Viewer(Object):
         CHKERR( PetscViewerBinarySetUseMPIIO(self.vwr, PETSC_TRUE) )
         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
-        CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
         return self
 
     def createVTK(self, name, mode=None, comm=None):
@@ -227,9 +219,6 @@ cdef class Viewer(Object):
         CHKERR( PetscViewerGetType(self.vwr, &cval) )
         return bytes2str(cval)
 
-    def setFormat(self, format):
-        CHKERR( PetscViewerSetFormat(self.vwr, format) )
-
     def getFormat(self):
         cdef PetscViewerFormat format = PETSC_VIEWER_DEFAULT
         CHKERR( PetscViewerGetFormat(self.vwr, &format) )
@@ -353,7 +342,7 @@ cdef class ViewerHDF5(Viewer):
     def setTimestep(self, timestep):
         CHKERR( PetscViewerHDF5SetTimestep(self.vwr, asInt(timestep)) )
 
-    def incrementTimestep(self, timestep):
+    def incrementTimestep(self):
         CHKERR( PetscViewerHDF5IncrementTimestep(self.vwr) )
 
     def pushGroup(self, group):
diff --git a/src/PETSc/petscdm.pxi b/src/PETSc/petscdm.pxi
index 07b201c..eee61ff 100644
--- a/src/PETSc/petscdm.pxi
+++ b/src/PETSc/petscdm.pxi
@@ -22,6 +22,9 @@ cdef extern from * nogil:
         DM_BOUNDARY_PERIODIC
         DM_BOUNDARY_TWIST
 
+    struct _n_DMLabel
+    ctypedef _n_DMLabel* PetscDMLabel "DMLabel"
+
     int DMCreate(MPI_Comm,PetscDM*)
     int DMClone(PetscDM,PetscDM*)
     int DMDestroy(PetscDM*)
@@ -77,6 +80,26 @@ cdef extern from * nogil:
     int DMGetPointSF(PetscDM,PetscSF*)
     int DMSetPointSF(PetscDM,PetscSF)
 
+    int DMCreateLabel(PetscDM,const_char[])
+    int DMGetLabelValue(PetscDM,const_char[],PetscInt,PetscInt*)
+    int DMSetLabelValue(PetscDM,const_char[],PetscInt,PetscInt)
+    int DMHasLabel(PetscDM,const_char[],PetscBool*)
+    int DMClearLabelValue(PetscDM,const_char[],PetscInt,PetscInt)
+    int DMGetLabelSize(PetscDM,const_char[],PetscInt*)
+    int DMGetLabelIdIS(PetscDM,const_char[],PetscIS*)
+    int DMGetStratumSize(PetscDM,const_char[],PetscInt,PetscInt*)
+    int DMGetStratumIS(PetscDM,const_char[],PetscInt,PetscIS*)
+    int DMClearLabelStratum(PetscDM,const_char[],PetscInt)
+    int DMSetLabelOutput(PetscDM,const_char[],PetscBool)
+    int DMGetLabelOutput(PetscDM,const_char[],PetscBool*)
+    int DMGetNumLabels(PetscDM,PetscInt*)
+    int DMGetLabelName(PetscDM,PetscInt,const_char**)
+    int DMHasLabel(PetscDM,const_char[],PetscBool*)
+    int DMGetLabel(PetscDM,const_char*,PetscDMLabel*)
+    int DMAddLabel(PetscDM,PetscDMLabel)
+    int DMRemoveLabel(PetscDM,const_char[],PetscDMLabel*)
+    #int DMCopyLabels(PetscDM,PetscDM)
+
     int DMShellSetGlobalVector(PetscDM,PetscVec)
     int DMShellSetLocalVector(PetscDM,PetscVec)
 
@@ -106,7 +129,7 @@ cdef inline PetscInt asBoundary(object boundary,
                                 PetscDMBoundaryType *_y,
                                 PetscDMBoundaryType *_z) except? -1:
     cdef PetscInt dim = PETSC_DECIDE
-    cdef object x, y, z
+    cdef object x=None, y=None, z=None
     if (boundary is None or
         isinstance(boundary, str) or
         isinstance(boundary, int)):
diff --git a/src/PETSc/petscdmda.pxi b/src/PETSc/petscdmda.pxi
index e137694..b17b538 100644
--- a/src/PETSc/petscdmda.pxi
+++ b/src/PETSc/petscdmda.pxi
@@ -78,8 +78,10 @@ cdef extern from * nogil:
     int DMDAGetElements(PetscDM,PetscInt*,PetscInt*,const_PetscInt**)
     int DMDARestoreElements(PetscDM,PetscInt*,PetscInt*,const_PetscInt**)
 
-    #int DMDASetFieldName"DMDASetFieldName"(PetscDM,PetscInt,const_char[])
-    #int DMDAGetFieldName"DMDAGetFieldName"(PetscDM,PetscInt,const_char*[])
+    int DMDASetFieldName(PetscDM,PetscInt,const_char[])
+    int DMDAGetFieldName(PetscDM,PetscInt,const_char*[])
+    int DMDASetCoordinateName(PetscDM,PetscInt,const_char[])
+    int DMDAGetCoordinateName(PetscDM,PetscInt,const_char*[])
 
 # --------------------------------------------------------------------
 
@@ -124,7 +126,7 @@ cdef inline PetscInt asDims(dims,
                             PetscInt *_N,
                             PetscInt *_P) except? -1:
     cdef PetscInt dim = PETSC_DECIDE
-    cdef object M, N, P
+    cdef object M=None, N=None, P=None
     dims = tuple(dims)
     dim = <PetscInt>len(dims)
     if   dim == 0: pass
@@ -151,9 +153,9 @@ cdef inline tuple asOwnershipRanges(object ownership_ranges,
                                     PetscInt **_x,
                                     PetscInt **_y,
                                     PetscInt **_z):
-    cdef PetscInt rdim, nlx, nly, nlz
-    ranges = list(ownership_ranges)
-    rdim = <PetscInt>len(ranges)
+    cdef object ranges = list(ownership_ranges)
+    cdef PetscInt rdim = <PetscInt>len(ranges)
+    cdef PetscInt nlx=0, nly=0, nlz=0
     if dim == PETSC_DECIDE: dim = rdim
     elif dim != rdim: raise ValueError(
         "number of dimensions %d and number ownership ranges %d" %
@@ -188,7 +190,7 @@ cdef inline tuple toOwnershipRanges(PetscInt dim,
     if dim > 1:
         ranges.append(array_i(n, ly))
     if dim > 2:
-        ranges.append(array_i(p, ly))
+        ranges.append(array_i(p, lz))
     return tuple(ranges)
 
 # --------------------------------------------------------------------
diff --git a/src/PETSc/petscdmplex.pxi b/src/PETSc/petscdmplex.pxi
index 8e2d19d..3afbdad 100644
--- a/src/PETSc/petscdmplex.pxi
+++ b/src/PETSc/petscdmplex.pxi
@@ -2,9 +2,6 @@
 
 cdef extern from * nogil:
 
-    struct _n_DMLabel
-    ctypedef _n_DMLabel* PetscDMLabel "DMLabel"
-
     int DMPlexCreate(MPI_Comm,PetscDM*)
     int DMPlexCreateCohesiveSubmesh(PetscDM,PetscBool,const_char[],PetscInt,PetscDM*)
     int DMPlexCreateFromCellList(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscBool,int[],PetscInt,double[],PetscDM*)
@@ -47,27 +44,11 @@ cdef extern from * nogil:
     #int DMPlexPointGlobalRef(PetscDM,PetscInt,PetscScalar*,void*)
     #int DMPlexPointGlobalRead(PetscDM,PetscInt,const_PetscScalar*,const_void*)
 
-    int DMPlexCreateLabel(PetscDM,const_char[])
-    int DMPlexGetLabelValue(PetscDM,const_char[],PetscInt,PetscInt*)
-    int DMPlexSetLabelValue(PetscDM,const_char[],PetscInt,PetscInt)
-    int DMPlexClearLabelValue(PetscDM,const_char[],PetscInt,PetscInt)
-    int DMPlexGetLabelSize(PetscDM,const_char[],PetscInt*)
-    int DMPlexGetLabelIdIS(PetscDM,const_char[],PetscIS*)
-    int DMPlexGetStratumSize(PetscDM,const_char[],PetscInt,PetscInt*)
-    int DMPlexGetStratumIS(PetscDM,const_char[],PetscInt,PetscIS*)
-    int DMPlexClearLabelStratum(PetscDM,const_char[],PetscInt)
-    int DMPlexSetLabelOutput(PetscDM,const_char[],PetscBool)
-    int DMPlexGetLabelOutput(PetscDM,const_char[],PetscBool*)
     #int PetscSectionCreateGlobalSectionLabel(PetscSection,PetscSF,PetscBool,PetscDMLabel,PetscInt,PetscSection*)
 
-    int DMPlexGetNumLabels(PetscDM,PetscInt*)
-    int DMPlexGetLabelName(PetscDM,PetscInt,const_char**)
-    int DMPlexHasLabel(PetscDM,const_char[],PetscBool*)
-    int DMPlexGetLabel(PetscDM,const_char*,PetscDMLabel*)
-    #int DMPlexAddLabel(PetscDM,PetscDMLabel)
-    int DMPlexRemoveLabel(PetscDM,const_char[],PetscDMLabel*)
     int DMPlexGetCellNumbering(PetscDM,PetscIS*)
     int DMPlexGetVertexNumbering(PetscDM,PetscIS*)
+    int DMPlexCreatePointNumbering(PetscDM,PetscIS*)
 
     int DMPlexGetDepth(PetscDM,PetscInt*)
     #int DMPlexGetDepthLabel(PetscDM,PetscDMLabel*)
@@ -89,7 +70,6 @@ cdef extern from * nogil:
     int DMPlexTriangleSetOptions(PetscDM,const_char*)
     int DMPlexTetgenSetOptions(PetscDM,const_char*)
     #int DMPlexCopyCoordinates(PetscDM,PetscDM)
-    #int DMPlexCopyLabels(PetscDM,PetscDM)
     #int DMPlexCreateDoublet(MPI_Comm,PetscInt,PetscBool,PetscBool,PetscBool,PetscReal,PetscDM*)
     int DMPlexCreateSquareBoundary(PetscDM,const_PetscReal[],const_PetscReal[],const_PetscInt[])
     int DMPlexCreateCubeBoundary(PetscDM,const_PetscReal[],const_PetscReal[],const_PetscInt[])
@@ -115,10 +95,10 @@ cdef extern from * nogil:
     int DMPlexDistribute(PetscDM,PetscInt,PetscSF*,PetscDM*)
     int DMPlexDistributeOverlap(PetscDM,PetscInt,PetscSF*,PetscDM*)
     int DMPlexGetPartitioner(PetscDM,PetscPartitioner*)
-    #int DMPlexDistributeField(PetscDM,PetscSF,PetscSection,Vec,PetscSection,Vec)
+    int DMPlexDistributeField(PetscDM,PetscSF,PetscSection,PetscVec,PetscSection,PetscVec)
     #int DMPlexDistributeData(PetscDM,PetscSF,PetscSection,MPI_Datatype,void*,PetscSection,void**)
 
-    int DMPlexGetOrdering(PetscDM,PetscMatOrderingType,PetscIS*)
+    int DMPlexGetOrdering(PetscDM,PetscMatOrderingType,PetscDMLabel,PetscIS*)
     int DMPlexPermute(PetscDM,PetscIS,PetscDM*)
 
     #int DMPlexCreateSubmesh(PetscDM,PetscDMLabel,PetscInt,PetscDM*)
diff --git a/src/PETSc/petscdmshell.pxi b/src/PETSc/petscdmshell.pxi
index 97c1a74..f4d45f4 100644
--- a/src/PETSc/petscdmshell.pxi
+++ b/src/PETSc/petscdmshell.pxi
@@ -22,6 +22,11 @@ cdef extern from * nogil:
                                                                  char***,
                                                                  PetscIS**,
                                                                  PetscDM**) except PETSC_ERR_PYTHON
+    ctypedef int (*PetscDMShellCreateSubDM)(PetscDM,
+                                            PetscInt,
+                                            PetscInt[],
+                                            PetscIS*,
+                                            PetscDM*) except PETSC_ERR_PYTHON
     int DMShellCreate(MPI_Comm,PetscDM*)
     int DMShellSetMatrix(PetscDM,PetscMat)
     int DMShellSetGlobalVector(PetscDM,PetscVec)
@@ -40,6 +45,7 @@ cdef extern from * nogil:
     int DMShellSetCreateInterpolation(PetscDM,PetscDMShellCreateInterpolationFunction)
     int DMShellSetCreateInjection(PetscDM,PetscDMShellCreateInjectionFunction)
     int DMShellSetCreateFieldDecomposition(PetscDM,PetscDMShellCreateFieldDecompositionFunction)
+    int DMShellSetCreateSubDM(PetscDM,PetscDMShellCreateSubDM)
 
 cdef int DMSHELL_CreateGlobalVector(
     PetscDM dm,
@@ -306,3 +312,27 @@ cdef int DMSHELL_CreateFieldDecomposition(
             dmlist[0][i] = (<DM?>dms[i]).dm
             PetscINCREF((<DM?>dms[i]).obj)
     return 0
+
+cdef int DMSHELL_CreateSubDM(
+    PetscDM cdm,
+    PetscInt numFields,
+    PetscInt cfields[],
+    PetscIS *ciset,
+    PetscDM *csubdm) except PETSC_ERR_PYTHON with gil:
+    cdef DM dm = subtype_DM(cdm)()
+    cdef IS iset
+    cdef DM subdm
+    dm.dm = cdm
+    PetscINCREF(dm.obj)
+    context = dm.get_attr('__create_subdm__')
+    assert context is not None and type(context) is tuple
+    (create_subdm, args, kargs) = context
+
+    fields = array_i(numFields, cfields)
+
+    iset, subdm = create_subdm(dm, fields, *args, **kargs)
+
+    PetscINCREF(iset.obj)
+    PetscINCREF(subdm.obj)
+    ciset[0] = iset.iset
+    csubdm[0] = subdm.dm
diff --git a/src/PETSc/petscksp.pxi b/src/PETSc/petscksp.pxi
index 288cf38..c1d5869 100644
--- a/src/PETSc/petscksp.pxi
+++ b/src/PETSc/petscksp.pxi
@@ -6,11 +6,15 @@ cdef extern from * nogil:
     PetscKSPType KSPCG
     PetscKSPType   KSPGROPPCG
     PetscKSPType   KSPPIPECG
+    PetscKSPType   KSPPIPECGRR
     PetscKSPType   KSPCGNE
     PetscKSPType   KSPNASH
     PetscKSPType   KSPSTCG
     PetscKSPType   KSPGLTR
+    PetscKSPType KSPFCG
+    PetscKSPType KSPPIPEFCG
     PetscKSPType KSPGMRES
+    PetscKSPType KSPPIPEFGMRES
     PetscKSPType   KSPFGMRES
     PetscKSPType   KSPLGMRES
     PetscKSPType   KSPDGMRES
@@ -34,6 +38,9 @@ cdef extern from * nogil:
     PetscKSPType KSPLCD
     #PetscKSPType KSPPYTHON
     PetscKSPType KSPGCR
+    PetscKSPType KSPPIPEGCR
+    PetscKSPType KSPTSIRM
+    PetscKSPType KSPCGLS
 
     ctypedef enum PetscKSPNormType "KSPNormType":
         KSP_NORM_DEFAULT
@@ -79,6 +86,15 @@ cdef extern from * nogil:
                                             PetscReal,
                                             void*) except PETSC_ERR_PYTHON
 
+    ctypedef int (*PetscKSPComputeRHSFunction)(PetscKSP,
+                                               PetscVec,
+                                               void*) except PETSC_ERR_PYTHON
+
+    ctypedef int (*PetscKSPComputeOpsFunction)(PetscKSP,
+                                               PetscMat,
+                                               PetscMat,
+                                               void*) except PETSC_ERR_PYTHON
+
     int KSPCreate(MPI_Comm,PetscKSP* CREATE)
     int KSPDestroy(PetscKSP*)
     int KSPView(PetscKSP,PetscViewer OPTIONAL)
@@ -122,6 +138,8 @@ cdef extern from * nogil:
     int KSPGetComputeSingularValues(PetscKSP,PetscBool*)
     int KSPSetComputeSingularValues(PetscKSP,PetscBool)
 
+    int KSPSetComputeRHS(PetscKSP,PetscKSPComputeRHSFunction,void*)
+    int KSPSetComputeOperators(PetscKSP,PetscKSPComputeOpsFunction,void*)
     int KSPSetOperators(PetscKSP,PetscMat,PetscMat)
     int KSPGetOperators(PetscKSP,PetscMat*,PetscMat*)
     int KSPGetOperatorsSet(PetscKSP,PetscBool*,PetscBool*)
@@ -215,3 +233,35 @@ cdef int KSP_Monitor(
     return 0
 
 # -----------------------------------------------------------------------------
+
+cdef int KSP_ComputeRHS(
+    PetscKSP ksp,
+    PetscVec rhs,
+    void*    ctx,
+    ) except PETSC_ERR_PYTHON with gil:
+    cdef KSP Ksp = ref_KSP(ksp)
+    cdef Vec Rhs = ref_Vec(rhs)
+    cdef object context = Ksp.get_attr('__rhs__')
+    if context is None and ctx != NULL: context = <object>ctx
+    assert context is not None and type(context) is tuple # sanity check
+    (computerhs, args, kargs) = context
+    computerhs(Ksp, Rhs, *args, **kargs)
+    return 0
+
+cdef int KSP_ComputeOps(
+    PetscKSP ksp,
+    PetscMat A,
+    PetscMat B,
+    void*    ctx,
+    ) except PETSC_ERR_PYTHON with gil:
+    cdef KSP Ksp  = ref_KSP(ksp)
+    cdef Mat Amat = ref_Mat(A)
+    cdef Mat Bmat = ref_Mat(B)
+    cdef object context = Ksp.get_attr('__operators__')
+    if context is None and ctx != NULL: context = <object>ctx
+    assert context is not None and type(context) is tuple # sanity check
+    (computeops, args, kargs) = context
+    computeops(Ksp, Amat, Bmat, *args, **kargs)
+    return 0
+
+# -----------------------------------------------------------------------------
diff --git a/src/PETSc/petsclog.pxi b/src/PETSc/petsclog.pxi
index 4686bd5..c2ed807 100644
--- a/src/PETSc/petsclog.pxi
+++ b/src/PETSc/petsclog.pxi
@@ -8,7 +8,7 @@ cdef extern from * nogil:
         PetscLogDouble messageLength
         PetscLogDouble numReductions
 
-    int PetscLogBegin()
+    int PetscLogDefaultBegin()
     int PetscLogAllBegin()
     int PetscLogView(PetscViewer)
     int PetscLogDestroy()
diff --git a/src/PETSc/petscmat.pxi b/src/PETSc/petscmat.pxi
index 9171e60..71737f7 100644
--- a/src/PETSc/petscmat.pxi
+++ b/src/PETSc/petscmat.pxi
@@ -8,8 +8,6 @@ cdef extern from * nogil:
     PetscMatType MATIS
     PetscMatType MATAIJ
     PetscMatType   MATSEQAIJ
-    PetscMatType   MATSEQAIJPTHREAD
-    PetscMatType   MATAIJPTHREAD
     PetscMatType   MATMPIAIJ
     PetscMatType     MATAIJCRL
     PetscMatType       MATSEQAIJCRL
@@ -47,6 +45,7 @@ cdef extern from * nogil:
     PetscMatType MATDAAD
     PetscMatType MATMFFD
     PetscMatType MATNORMAL
+    PetscMatType MATNORMALHERMITIAN
     PetscMatType MATLRC
     PetscMatType MATSCATTER
     PetscMatType MATBLOCKMAT
@@ -62,6 +61,7 @@ cdef extern from * nogil:
     PetscMatType MATSUBMATRIX
     PetscMatType MATLOCALREF
     PetscMatType MATNEST
+    PetscMatType MATPREALLOCATOR
 
     ctypedef char* PetscMatOrderingType "const char*"
     PetscMatOrderingType MATORDERINGNATURAL
@@ -70,6 +70,8 @@ cdef extern from * nogil:
     PetscMatOrderingType MATORDERINGRCM
     PetscMatOrderingType MATORDERINGQMD
     PetscMatOrderingType MATORDERINGROWLENGTH
+    PetscMatOrderingType MATORDERINGWBM
+    PetscMatOrderingType MATORDERINGSPECTRAL
     PetscMatOrderingType MATORDERINGAMD
 
     ctypedef enum PetscMatReuse "MatReuse":
@@ -98,6 +100,11 @@ cdef extern from * nogil:
         MAT_FLUSH_ASSEMBLY
         MAT_FINAL_ASSEMBLY
 
+    ctypedef enum PetscMatInfoType "MatInfoType":
+        MAT_LOCAL
+        MAT_GLOBAL_MAX
+        MAT_GLOBAL_SUM
+
     ctypedef enum  PetscMatStructure "MatStructure":
         MAT_SAME_NONZERO_PATTERN      "SAME_NONZERO_PATTERN"
         MAT_DIFFERENT_NONZERO_PATTERN "DIFFERENT_NONZERO_PATTERN"
@@ -108,9 +115,7 @@ cdef extern from * nogil:
         MAT_REUSE_MATRIX
 
     ctypedef enum PetscMatOption "MatOption":
-        MAT_NEW_NONZERO_LOCATION_ERR
         MAT_UNUSED_NONZERO_LOCATION_ERR
-        MAT_NEW_NONZERO_ALLOCATION_ERR
         MAT_ROW_ORIENTED
         MAT_SYMMETRIC
         MAT_STRUCTURALLY_SYMMETRIC
@@ -122,7 +127,7 @@ cdef extern from * nogil:
         MAT_USE_INODES
         MAT_HERMITIAN
         MAT_SYMMETRY_ETERNAL
-        MAT_DUMMY
+        MAT_NEW_NONZERO_LOCATION_ERR
         MAT_IGNORE_LOWER_TRIANGULAR
         MAT_ERROR_LOWER_TRIANGULAR
         MAT_GETROW_UPPERTRIANGULAR
@@ -130,6 +135,8 @@ cdef extern from * nogil:
         MAT_NO_OFF_PROC_ZERO_ROWS
         MAT_NO_OFF_PROC_ENTRIES
         MAT_NEW_NONZERO_LOCATIONS
+        MAT_NEW_NONZERO_ALLOCATION_ERR
+        MAT_SUBSET_OFF_PROC_ENTRIES
 
     int MatView(PetscMat,PetscViewer)
     int MatDestroy(PetscMat*)
@@ -146,6 +153,7 @@ cdef extern from * nogil:
     int MatCreateTranspose(PetscMat,PetscMat*)
     int MatCreateLRC(PetscMat,PetscMat,PetscMat,PetscMat*)
     int MatCreateSubMatrix(PetscMat,PetscIS,PetscIS,PetscMat*)
+    int MatCreateRedundantMatrix(PetscMat,PetscInt,MPI_Comm,PetscMatReuse,PetscMat*)
     int MatCreateNest(MPI_Comm,PetscInt,PetscIS[],PetscInt,PetscIS[],PetscMat[],PetscMat*)
     int MatCreateShell(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,void*,PetscMat*)
 
@@ -264,6 +272,7 @@ cdef extern from * nogil:
     int MatGetDiagonalBlock(PetscMat,PetscMat*)
     int MatGetLocalSubMatrix(PetscMat,PetscIS,PetscIS,PetscMat*)
     int MatRestoreLocalSubMatrix(PetscMat,PetscIS,PetscIS,PetscMat*)
+    int MatDestroyMatrices(PetscInt,PetscMat*[])
 
     int MatConjugate(PetscMat)
     int MatRealPart(PetscMat)
@@ -313,6 +322,18 @@ cdef extern from * nogil:
         PetscReal usedt, dt, dtcol, dtcount
         PetscReal zeropivot, pivotinblocks
         PetscReal shifttype, shiftamount
+
+    ctypedef struct PetscMatInfo "MatInfo":
+        PetscLogDouble block_size
+        PetscLogDouble nz_allocated, nz_used, nz_unneeded
+        PetscLogDouble memory
+        PetscLogDouble assemblies
+        PetscLogDouble mallocs
+        PetscLogDouble fill_ratio_given, fill_ratio_needed
+        PetscLogDouble factor_mallocs
+
+    int MatGetInfo(PetscMat,PetscMatInfoType,PetscMatInfo*)
+
     int MatFactorInfoInitialize(PetscMatFactorInfo*)
 
     int MatCholeskyFactor(PetscMat,PetscIS,PetscMatFactorInfo*)
@@ -329,6 +350,15 @@ cdef extern from * nogil:
     int MatGetInertia(PetscMat,PetscInt*,PetscInt*,PetscInt*)
     int MatSetUnfactored(PetscMat)
 
+    int MatMumpsSetIcntl(PetscMat,PetscInt,PetscInt)
+    int MatMumpsGetIcntl(PetscMat,PetscInt,PetscInt*)
+    int MatMumpsSetCntl(PetscMat,PetscInt,PetscReal)
+    int MatMumpsGetCntl(PetscMat,PetscInt,PetscReal*)
+    int MatMumpsGetInfo(PetscMat,PetscInt,PetscInt*)
+    int MatMumpsGetInfog(PetscMat,PetscInt,PetscInt*)
+    int MatMumpsGetRinfo(PetscMat,PetscInt,PetscReal*)
+    int MatMumpsGetRinfog(PetscMat,PetscInt,PetscReal*)
+
     int MatForwardSolve(PetscMat,PetscVec,PetscVec)
     int MatBackwardSolve(PetscMat,PetscVec,PetscVec)
     int MatSolve(PetscMat,PetscVec,PetscVec)
@@ -425,7 +455,7 @@ cdef Mat mat_iadd(Mat self, other):
         self.axpy(1, other)
     elif isinstance(other, (tuple, list)):
         alpha, mat = other
-        self.axpy(alpha, other)
+        self.axpy(alpha, mat)
     elif isinstance(other, Vec):
         self.setDiagonal(other, PETSC_ADD_VALUES)
     else:
@@ -437,7 +467,7 @@ cdef Mat mat_isub(Mat self, other):
         self.axpy(-1, other)
     elif isinstance(other, (tuple, list)):
         alpha, mat = other
-        self.axpy(-alpha, other)
+        self.axpy(-alpha, mat)
     elif isinstance(other, Vec):
         diag = other.copy()
         diag.scale(-1)
@@ -506,6 +536,7 @@ cdef Mat mat_rmul(Mat self, other):
     return mat_mul(self, other)
 
 cdef Mat mat_rdiv(Mat self, other):
+    <void>self; <void>other; # unused
     raise NotImplementedError
 
 # -----------------------------------------------------------------------------
@@ -524,6 +555,11 @@ cdef inline PetscMatAssemblyType assemblytype(object assembly) \
     elif assembly is True:  return MAT_FLUSH_ASSEMBLY
     else:                   return assembly
 
+cdef inline PetscMatInfoType infotype(object info) \
+    except <PetscMatInfoType>(-1):
+    if   info is None: return MAT_GLOBAL_SUM
+    else:              return info
+
 # -----------------------------------------------------------------------------
 
 cdef inline int Mat_Sizes(
@@ -576,7 +612,7 @@ cdef inline int Mat_Create(
 
 cdef inline int Mat_AllocAIJ_NNZ( PetscMat A, object NNZ) except -1:
     #
-    cdef PetscBool aij, baij, sbaij
+    cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE
     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))
     # local row size and block size
     cdef PetscInt m=0, bs=1
@@ -625,7 +661,7 @@ cdef inline int Mat_AllocAIJ_NNZ( PetscMat A, object NNZ) except -1:
 
 cdef inline int Mat_AllocAIJ_CSR(PetscMat A, object CSR) except -1:
     #
-    cdef PetscBool aij, baij, sbaij
+    cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE
     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))
     # local row size and block size
     cdef PetscInt m=0, bs = 1
@@ -723,9 +759,9 @@ cdef inline int matsetvalues(PetscMat A,
     cdef PetscInt nj=0, *j=NULL
     cdef PetscInt nv=0
     cdef PetscScalar *v=NULL
-    cdef object ai = iarray_i(oi, &ni, &i)
-    cdef object aj = iarray_i(oj, &nj, &j)
-    cdef object av = iarray_s(ov, &nv, &v)
+    oi = iarray_i(oi, &ni, &i)
+    oj = iarray_i(oj, &nj, &j)
+    ov = iarray_s(ov, &nv, &v)
     if ni*nj*rbs*cbs != nv: raise ValueError(
         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
         (toInt(ni), toInt(nj), toInt(nv)) )
@@ -809,15 +845,14 @@ cdef inline int matsetvalues_ijv(PetscMat A,
     cdef PetscInt nj=0, *j=NULL
     cdef PetscInt nv=0
     cdef PetscScalar *v=NULL
-    cdef object ai = iarray_i(oi, &ni, &i)
-    cdef object aj = iarray_i(oj, &nj, &j)
-    cdef object av = iarray_s(ov, &nv, &v)
+    oi = iarray_i(oi, &ni, &i)
+    oj = iarray_i(oj, &nj, &j)
+    ov = iarray_s(ov, &nv, &v)
     # row indices
-    cdef object am = None
     cdef PetscInt nm=0, *m=NULL
     cdef PetscInt rs=0, re=ni-1
     if om is not None:
-        am = iarray_i(om, &nm, &m)
+        om = iarray_i(om, &nm, &m)
     else:
         if not local:
             CHKERR( MatGetOwnershipRange(A, &rs, &re) )
@@ -1014,7 +1049,7 @@ cdef matsetvaluestencil(PetscMat A,
     # values
     cdef PetscInt    nv = 1
     cdef PetscScalar *v = NULL
-    cdef object av = iarray_s(value, &nv, &v)
+    value = iarray_s(value, &nv, &v)
     if rbs*cbs != nv: raise ValueError(
         "incompatible array sizes: nv=%d" % toInt(nv) )
     if blocked:
diff --git a/src/PETSc/petscopt.pxi b/src/PETSc/petscopt.pxi
index a4356e9..3125d51 100644
--- a/src/PETSc/petscopt.pxi
+++ b/src/PETSc/petscopt.pxi
@@ -1,34 +1,37 @@
 cdef extern from * nogil:
 
-    int PetscOptionsCreate()
-    int PetscOptionsDestroy()
-    int PetscOptionsSetFromOptions()
+    ctypedef struct _n_PetscOptions
+    ctypedef _n_PetscOptions* PetscOptions
 
-    int PetscOptionsPrefixPush(char[])
-    int PetscOptionsPrefixPop()
+    int PetscOptionsCreate(PetscOptions*)
+    int PetscOptionsDestroy(PetscOptions*)
+    int PetscOptionsView(PetscOptions,PetscViewer)
+    int PetscOptionsClear(PetscOptions)
+    int PetscOptionsSetFromOptions(PetscOptions)
 
-    int PetscOptionsHasName(char[],char[],PetscBool*)
-    int PetscOptionsSetAlias(char[],char[])
-    int PetscOptionsSetValue(char[],char[])
-    int PetscOptionsClearValue(char[])
-    int PetscOptionsClear()
+    int PetscOptionsPrefixPush(PetscOptions,char[])
+    int PetscOptionsPrefixPop(PetscOptions)
 
-    int PetscOptionsInsertString(char[])
-    int PetscOptionsInsertFile(char[])
-    int PetscOptionsGetAll(char*[])
+    int PetscOptionsHasName(PetscOptions,char[],char[],PetscBool*)
+    int PetscOptionsSetAlias(PetscOptions,char[],char[])
+    int PetscOptionsSetValue(PetscOptions,char[],char[])
+    int PetscOptionsClearValue(PetscOptions,char[])
 
-    int PetscOptionsGetBool(char[],char[],PetscBool*,PetscBool*)
-    int PetscOptionsGetInt(char[],char[],PetscInt*,PetscBool*)
-    int PetscOptionsGetReal(char[],char[],PetscReal*,PetscBool*)
-    int PetscOptionsGetScalar(char[],char[],PetscScalar*,PetscBool*)
-    int PetscOptionsGetString(char[],char[],char[],size_t,PetscBool*)
+    int PetscOptionsInsertString(PetscOptions,char[])
+    int PetscOptionsInsertFile(PetscOptions,char[])
+    int PetscOptionsGetAll(PetscOptions,char*[])
+
+    int PetscOptionsGetBool(PetscOptions,char[],char[],PetscBool*,PetscBool*)
+    int PetscOptionsGetInt(PetscOptions,char[],char[],PetscInt*,PetscBool*)
+    int PetscOptionsGetReal(PetscOptions,char[],char[],PetscReal*,PetscBool*)
+    int PetscOptionsGetScalar(PetscOptions,char[],char[],PetscScalar*,PetscBool*)
+    int PetscOptionsGetString(PetscOptions,char[],char[],char[],size_t,PetscBool*)
 
     ctypedef struct _p_PetscToken
     ctypedef _p_PetscToken* PetscToken
     int PetscTokenCreate(char[],char,PetscToken*)
     int PetscTokenDestroy(PetscToken*)
     int PetscTokenFind(PetscToken,char*[])
-
     int PetscOptionsValidKey(char[],PetscBool*)
 
 #
@@ -57,42 +60,42 @@ cdef opt2str(const_char *pre, const_char *name):
     n = bytes2str(name) if name[0]!=c'-' else bytes2str(&name[1])
     return '(prefix:%s, name:%s)' % (p, n)
 
-cdef getopt_Bool(const_char *pre, const_char *name, object deft):
+cdef getopt_Bool(PetscOptions opt, const_char *pre, const_char *name, object deft):
     cdef PetscBool value = PETSC_FALSE
     cdef PetscBool flag  = PETSC_FALSE
-    CHKERR( PetscOptionsGetBool(pre, name, &value, &flag) )
+    CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
     if flag==PETSC_TRUE: return <bint>value
     if deft is not None: return deft
     raise KeyError(opt2str(pre, name))
 
-cdef getopt_Int(const_char *pre, const_char *name, object deft):
+cdef getopt_Int(PetscOptions opt, const_char *pre, const_char *name, object deft):
     cdef PetscInt value = 0
     cdef PetscBool flag = PETSC_FALSE
-    CHKERR( PetscOptionsGetInt(pre, name, &value, &flag) )
+    CHKERR( PetscOptionsGetInt(opt, pre, name, &value, &flag) )
     if flag==PETSC_TRUE: return toInt(value)
     if deft is not None: return deft
     raise KeyError(opt2str(pre, name))
 
-cdef getopt_Real(const_char *pre, const_char *name, object deft):
+cdef getopt_Real(PetscOptions opt, const_char *pre, const_char *name, object deft):
     cdef PetscReal value = 0
     cdef PetscBool flag = PETSC_FALSE
-    CHKERR( PetscOptionsGetReal(pre, name, &value, &flag) )
+    CHKERR( PetscOptionsGetReal(opt, pre, name, &value, &flag) )
     if flag==PETSC_TRUE: return toReal(value)
     if deft is not None: return deft
     raise KeyError(opt2str(pre, name))
 
-cdef getopt_Scalar(const_char *pre, const_char *name, object deft):
+cdef getopt_Scalar(PetscOptions opt, const_char *pre, const_char *name, object deft):
     cdef PetscScalar value = 0
     cdef PetscBool flag = PETSC_FALSE
-    CHKERR( PetscOptionsGetScalar(pre, name, &value, &flag) )
+    CHKERR( PetscOptionsGetScalar(opt, pre, name, &value, &flag) )
     if flag==PETSC_TRUE: return toScalar(value)
     if deft is not None: return deft
     raise KeyError(opt2str(pre, name))
 
-cdef getopt_String(const_char *pre, const_char *name, object deft):
+cdef getopt_String(PetscOptions opt, const_char *pre, const_char *name, object deft):
     cdef char value[1024+1]
     cdef PetscBool flag = PETSC_FALSE
-    CHKERR( PetscOptionsGetString(pre, name, value, 1024, &flag) )
+    CHKERR( PetscOptionsGetString(opt, pre, name, value, 1024, &flag) )
     if flag==PETSC_TRUE: return bytes2str(value)
     if deft is not None: return deft
     raise KeyError(opt2str(pre, name))
@@ -122,15 +125,15 @@ cdef getpair(prefix, name, const_char **pr, const_char **nm):
     nm[0] = n
     return (prefix, name)
 
-cdef getopt(PetscOptType otype, prefix, name, deft):
+cdef getopt(PetscOptions opt, PetscOptType otype, prefix, name, deft):
     cdef const_char *pr = NULL
     cdef const_char *nm = NULL
     tmp = getpair(prefix, name, &pr, &nm)
-    if otype == OPT_BOOL   : return getopt_Bool   (pr, nm, deft)
-    if otype == OPT_INT    : return getopt_Int    (pr, nm, deft)
-    if otype == OPT_REAL   : return getopt_Real   (pr, nm, deft)
-    if otype == OPT_SCALAR : return getopt_Scalar (pr, nm, deft)
-    if otype == OPT_STRING : return getopt_String (pr, nm, deft)
+    if otype == OPT_BOOL   : return getopt_Bool   (opt, pr, nm, deft)
+    if otype == OPT_INT    : return getopt_Int    (opt, pr, nm, deft)
+    if otype == OPT_REAL   : return getopt_Real   (opt, pr, nm, deft)
+    if otype == OPT_SCALAR : return getopt_Scalar (opt, pr, nm, deft)
+    if otype == OPT_STRING : return getopt_String (opt, pr, nm, deft)
 
 
 # simple minded options parser
diff --git a/src/PETSc/petscpc.pxi b/src/PETSc/petscpc.pxi
index c44ee1b..9669878 100644
--- a/src/PETSc/petscpc.pxi
+++ b/src/PETSc/petscpc.pxi
@@ -43,6 +43,7 @@ cdef extern from * nogil:
     PetscPCType PCAINVCUSP
     PetscPCType PCBDDC
     PetscPCType PCKACZMARZ
+    PetscPCType PCTELESCOPE
 
     ctypedef enum PetscPCSide "PCSide":
         PC_SIDE_DEFAULT
@@ -62,11 +63,19 @@ cdef extern from * nogil:
         PC_GASM_INTERPOLATE
         PC_GASM_NONE
 
+    ctypedef enum PetscPCMGType "PCMGType":
+        PC_MG_MULTIPLICATIVE
+        PC_MG_ADDITIVE
+        PC_MG_FULL
+        PC_MG_KASKADE
+
     ctypedef char* PetscPCGAMGType "const char*"
     PetscPCGAMGType PCGAMGAGG
     PetscPCGAMGType PCGAMGGEO
     PetscPCGAMGType PCGAMGCLASSICAL
 
+    ctypedef char* PetscPCHYPREType "const char*"
+
     ctypedef enum PetscPCCompositeType "PCCompositeType":
         PC_COMPOSITE_ADDITIVE
         PC_COMPOSITE_MULTIPLICATIVE
@@ -143,6 +152,14 @@ cdef extern from * nogil:
     int PCGAMGSetNlevels(PetscPC,PetscInt)
     int PCGAMGSetNSmooths(PetscPC,PetscInt)
 
+    int PCHYPREGetType(PetscPC,PetscPCHYPREType*)
+    int PCHYPRESetType(PetscPC,PetscPCHYPREType)
+    int PCHYPRESetDiscreteCurl(PetscPC,PetscMat);
+    int PCHYPRESetDiscreteGradient(PetscPC,PetscMat);
+    int PCHYPRESetAlphaPoissonMatrix(PetscPC,PetscMat);
+    int PCHYPRESetBetaPoissonMatrix(PetscPC,PetscMat);
+    int PCHYPRESetEdgeConstantVectors(PetscPC,PetscVec,PetscVec,PetscVec);
+
     int PCFactorGetMatrix(PetscPC,PetscMat*)
     int PCFactorSetZeroPivot(PetscPC,PetscReal)
     int PCFactorSetShiftType(PetscPC,PetscMatFactorShiftType)
@@ -180,6 +197,8 @@ cdef extern from * nogil:
     int PCSetReusePreconditioner(PetscPC,PetscBool)
 
     # --- MG ---
+    int PCMGSetType(PetscPC,PetscPCMGType)
+    int PCMGGetType(PetscPC,PetscPCMGType*)
     int PCMGSetInterpolation(PetscPC,PetscInt,PetscMat)
     int PCMGGetInterpolation(PetscPC,PetscInt,PetscMat*)
     int PCMGSetRestriction(PetscPC,PetscInt,PetscMat)
diff --git a/src/PETSc/petscrand.pxi b/src/PETSc/petscrand.pxi
index bbf80b4..99d39cb 100644
--- a/src/PETSc/petscrand.pxi
+++ b/src/PETSc/petscrand.pxi
@@ -4,6 +4,7 @@ cdef extern from * nogil:
     PetscRandomType PETSCRAND
     PetscRandomType PETSCRAND48
     PetscRandomType PETSCSPRNG
+    PetscRandomType PETSCRANDER48
 
     int PetscRandomCreate(MPI_Comm,PetscRandom*)
     int PetscRandomDestroy(PetscRandom*)
diff --git a/src/PETSc/petscsec.pxi b/src/PETSc/petscsec.pxi
index acaba9c..d5a88d2 100644
--- a/src/PETSc/petscsec.pxi
+++ b/src/PETSc/petscsec.pxi
@@ -45,7 +45,7 @@ cdef extern from * nogil:
     int PetscSectionGetFieldOffset(PetscSection,PetscInt,PetscInt,PetscInt*)
     int PetscSectionSetFieldOffset(PetscSection,PetscInt,PetscInt,PetscInt)
     int PetscSectionGetOffsetRange(PetscSection,PetscInt*,PetscInt*)
-    int PetscSectionCreateGlobalSection(PetscSection,PetscSF,PetscBool,PetscSection*)
+    int PetscSectionCreateGlobalSection(PetscSection,PetscSF,PetscBool,PetscBool,PetscSection*)
     #int PetscSectionCreateGlobalSectionCensored(PetscSection,PetscSF,PetscBool,PetscInt,const_PetscInt[],PetscSection*)
     int PetscSectionCreateSubsection(PetscSection,PetscInt,PetscInt[],PetscSection*)
     int PetscSectionCreateSubmeshSection(PetscSection,IS,PetscSection*)
diff --git a/src/PETSc/petscsys.pxi b/src/PETSc/petscsys.pxi
index f46c9b8..97f6e40 100644
--- a/src/PETSc/petscsys.pxi
+++ b/src/PETSc/petscsys.pxi
@@ -33,6 +33,7 @@ cdef extern from * nogil:
     PetscErrorHandlerFunction PetscIgnoreErrorHandler
     int PetscPushErrorHandler(PetscErrorHandlerFunction,void*)
     int PetscPopErrorHandler()
+    int PetscInfoAllow(PetscBool, char*)
 
     int PetscErrorMessage(int,char*[],char**)
 
diff --git a/src/PETSc/petsctao.pxi b/src/PETSc/petsctao.pxi
index 420e0f4..3d90662 100644
--- a/src/PETSc/petsctao.pxi
+++ b/src/PETSc/petsctao.pxi
@@ -26,8 +26,6 @@ cdef extern from * nogil:
         #iterating
         TAO_CONTINUE_ITERATING
         # converged
-        TAO_CONVERGED_FATOL
-        TAO_CONVERGED_FRTOL
         TAO_CONVERGED_GATOL
         TAO_CONVERGED_GRTOL
         TAO_CONVERGED_GTTOL
@@ -54,8 +52,8 @@ cdef extern from * nogil:
     int TaoSetUp(PetscTAO)
     int TaoSolve(PetscTAO)
 
-    int TaoSetTolerances(PetscTAO,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal)
-    int TaoGetTolerances(PetscTAO,PetscReal*,PetscReal*,PetscReal*,PetscReal*,PetscReal*)
+    int TaoSetTolerances(PetscTAO,PetscReal,PetscReal,PetscReal)
+    int TaoGetTolerances(PetscTAO,PetscReal*,PetscReal*,PetscReal*)
     int TaoSetConstraintTolerances(PetscTAO,PetscReal,PetscReal)
     int TaoGetConstraintTolerances(PetscTAO,PetscReal*,PetscReal*)
 
@@ -105,6 +103,11 @@ cdef extern from * nogil:
 
     int TaoGetSolutionVector(PetscTAO,PetscVec*)
     int TaoGetGradientVector(PetscTAO,PetscVec*)
+    int TaoSetGradientNorm(PetscTAO,PetscMat)
+    int TaoGetGradientNorm(PetscTAO,PetscMat*)
+    int TaoLMVMSetH0(PetscTAO,PetscMat)
+    int TaoLMVMGetH0(PetscTAO,PetscMat*)
+    int TaoLMVMGetH0KSP(PetscTAO,PetscKSP*)
     int TaoGetVariableBounds(PetscTAO,PetscVec*,PetscVec*)
     #int TaoGetConstraintsVec(PetscTAO,PetscVec*)
     #int TaoGetVariableBoundVecs(PetscTAO,PetscVec*,PetscVec*)
@@ -158,7 +161,7 @@ cdef inline TAO ref_TAO(PetscTAO tao):
 
 cdef int TAO_Objective(PetscTAO _tao,
                        PetscVec _x, PetscReal *_f,
-                       void *_ctx) except PETSC_ERR_PYTHON with gil:
+                       void *ctx) except PETSC_ERR_PYTHON with gil:
 
     cdef TAO tao = ref_TAO(_tao)
     cdef Vec x   = ref_Vec(_x)
@@ -169,7 +172,7 @@ cdef int TAO_Objective(PetscTAO _tao,
 
 cdef int TAO_SeparableObjective(PetscTAO _tao,
                                 PetscVec _x, PetscVec _f,
-                                void *_ctx) except PETSC_ERR_PYTHON with gil:
+                                void *ctx) except PETSC_ERR_PYTHON with gil:
 
     cdef TAO tao = ref_TAO(_tao)
     cdef Vec x   = ref_Vec(_x)
@@ -180,7 +183,7 @@ cdef int TAO_SeparableObjective(PetscTAO _tao,
 
 cdef int TAO_Gradient(PetscTAO _tao,
                       PetscVec _x, PetscVec _g,
-                      void *_ctx) except PETSC_ERR_PYTHON with gil:
+                      void *ctx) except PETSC_ERR_PYTHON with gil:
 
     cdef TAO tao = ref_TAO(_tao)
     cdef Vec x   = ref_Vec(_x)
@@ -192,7 +195,7 @@ cdef int TAO_Gradient(PetscTAO _tao,
 
 cdef int TAO_ObjGrad(PetscTAO _tao,
                      PetscVec _x, PetscReal *_f, PetscVec _g,
-                     void *_ctx) except PETSC_ERR_PYTHON with gil:
+                     void *ctx) except PETSC_ERR_PYTHON with gil:
 
     cdef TAO tao = ref_TAO(_tao)
     cdef Vec x   = ref_Vec(_x)
@@ -204,7 +207,7 @@ cdef int TAO_ObjGrad(PetscTAO _tao,
 
 cdef int TAO_Constraints(PetscTAO _tao,
                          PetscVec _x, PetscVec _r,
-                         void *_ctx) except PETSC_ERR_PYTHON with gil:
+                         void *ctx) except PETSC_ERR_PYTHON with gil:
 
     cdef TAO tao = ref_TAO(_tao)
     cdef Vec x   = ref_Vec(_x)
@@ -215,7 +218,7 @@ cdef int TAO_Constraints(PetscTAO _tao,
 
 cdef int TAO_VarBounds(PetscTAO _tao,
                        PetscVec _xl, PetscVec _xu,
-                       void *_ctx) except PETSC_ERR_PYTHON with gil:
+                       void *ctx) except PETSC_ERR_PYTHON with gil:
 
     cdef TAO tao = ref_TAO(_tao)
     cdef Vec xl  = ref_Vec(_xl)
diff --git a/src/PETSc/petscts.pxi b/src/PETSc/petscts.pxi
index 0f6948e..0c3b86f 100644
--- a/src/PETSc/petscts.pxi
+++ b/src/PETSc/petscts.pxi
@@ -10,11 +10,14 @@ cdef extern from * nogil:
     #PetscTSType TSPYTHON
     PetscTSType TSTHETA
     PetscTSType TSALPHA
+    PetscTSType TSALPHA2
     PetscTSType TSGL
     PetscTSType TSSSP
     PetscTSType TSARKIMEX
     PetscTSType TSROSW
     PetscTSType TSEIMEX
+    PetscTSType TSMIMEX
+    PetscTSType TSBDF
 
     ctypedef enum PetscTSProblemType "TSProblemType":
       TS_LINEAR
@@ -41,11 +44,14 @@ cdef extern from * nogil:
       # converged
       TS_CONVERGED_TIME
       TS_CONVERGED_ITS
+      TS_CONVERGED_USER
+      TS_CONVERGED_EVENT
       # diverged
       TS_DIVERGED_NONLINEAR_SOLVE
       TS_DIVERGED_STEP_REJECTED
 
     ctypedef enum PetscTSExactFinalTimeOption "TSExactFinalTimeOption":
+      TS_EXACTFINALTIME_UNSPECIFIED
       TS_EXACTFINALTIME_STEPOVER
       TS_EXACTFINALTIME_INTERPOLATE
       TS_EXACTFINALTIME_MATCHSTEP
@@ -90,8 +96,10 @@ cdef extern from * nogil:
     ctypedef int (*PetscTSPostStepFunction) (PetscTS) except PETSC_ERR_PYTHON
 
     int TSCreate(MPI_Comm comm,PetscTS*)
+    int TSClone(PetscTS,PetscTS*)
     int TSDestroy(PetscTS*)
     int TSView(PetscTS,PetscViewer)
+    int TSLoad(PetscTS,PetscViewer)
 
     int TSSetProblemType(PetscTS,PetscTSProblemType)
     int TSGetProblemType(PetscTS,PetscTSProblemType*)
@@ -133,6 +141,7 @@ cdef extern from * nogil:
 
     int TSSetTime(PetscTS,PetscReal)
     int TSGetTime(PetscTS,PetscReal*)
+    int TSGetPrevTime(PetscTS,PetscReal*)
     int TSSetInitialTimeStep(PetscTS,PetscReal,PetscReal)
     int TSSetTimeStep(PetscTS,PetscReal)
     int TSGetTimeStep(PetscTS,PetscReal*)
@@ -142,6 +151,7 @@ cdef extern from * nogil:
     int TSSetExactFinalTime(PetscTS,PetscTSExactFinalTimeOption)
     int TSSetConvergedReason(PetscTS,PetscTSConvergedReason)
     int TSGetConvergedReason(PetscTS,PetscTSConvergedReason*)
+    int TSGetTotalSteps(PetscTS,PetscInt*)
     int TSGetSNESIterations(PetscTS,PetscInt*)
     int TSGetKSPIterations(PetscTS,PetscInt*)
     int TSGetStepRejections(PetscTS,PetscInt*)
diff --git a/src/PETSc/petscvec.pxi b/src/PETSc/petscvec.pxi
index 8d5d171..884dc3d 100644
--- a/src/PETSc/petscvec.pxi
+++ b/src/PETSc/petscvec.pxi
@@ -14,9 +14,9 @@ cdef extern from * nogil:
     PetscVecType VECSEQVIENNACL
     PetscVecType VECMPIVIENNACL
     PetscVecType VECVIENNACL
-    PetscVecType VECSEQPTHREAD
-    PetscVecType VECMPIPTHREAD
-    PetscVecType VECPTHREAD
+    PetscVecType VECSEQCUDA
+    PetscVecType VECMPICUDA
+    PetscVecType VECCUDA
 
     ctypedef enum PetscVecOption "VecOption":
         VEC_IGNORE_OFF_PROC_ENTRIES
@@ -64,6 +64,7 @@ cdef extern from * nogil:
 
     int VecDuplicate(PetscVec,PetscVec*)
     int VecCopy(PetscVec,PetscVec)
+    int VecChop(PetscVec,PetscReal)
 
     int VecDuplicateVecs(PetscVec,PetscInt,PetscVec*[])
     int VecDestroyVecs(PetscInt,PetscVec*[])
@@ -122,6 +123,7 @@ cdef extern from * nogil:
     int VecPointwiseDivide(PetscVec,PetscVec,PetscVec)
     int VecMaxPointwiseDivide(PetscVec,PetscVec,PetscReal*)
     int VecShift(PetscVec,PetscScalar)
+    int VecChop(PetscVec,PetscReal)
     int VecReciprocal(PetscVec)
     int VecPermute(PetscVec,PetscIS,PetscBool)
     int VecExp(PetscVec)
@@ -152,8 +154,12 @@ cdef extern from * nogil:
     int VecISAXPY(PetscVec,PetscIS,PetscScalar,PetscVec)
     int VecISSet(PetscVec,PetscIS,PetscScalar)
 
-    int VecCUSPGetCUDAArray(PetscVec,PetscScalar*[])
-    int VecCUSPRestoreCUDAArray(PetscVec,PetscScalar*[])
+    int VecCUSPGetCUDAArrayRead(PetscVec,PetscScalar*[])
+    int VecCUSPGetCUDAArrayWrite(PetscVec,PetscScalar*[])
+    int VecCUSPGetCUDAArrayReadWrite(PetscVec,PetscScalar*[])
+    int VecCUSPRestoreCUDAArrayRead(PetscVec,PetscScalar*[])
+    int VecCUSPRestoreCUDAArrayWrite(PetscVec,PetscScalar*[])
+    int VecCUSPRestoreCUDAArrayReadWrite(PetscVec,PetscScalar*[])
 
 # --------------------------------------------------------------------
 
@@ -294,8 +300,8 @@ cdef inline int vecsetvalues(PetscVec V,
     cdef PetscInt ni=0, nv=0
     cdef PetscInt    *i=NULL
     cdef PetscScalar *v=NULL
-    cdef object ai = iarray_i(oi, &ni, &i)
-    cdef object av = iarray_s(ov, &nv, &v)
+    cdef object tmp1 = iarray_i(oi, &ni, &i)
+    cdef object tmp2 = iarray_s(ov, &nv, &v)
     if ni*bs != nv: raise ValueError(
         "incompatible array sizes: ni=%d, nv=%d, bs=%d" %
         (toInt(ni), toInt(nv), toInt(bs)) )
diff --git a/src/PETSc/petscvwr.pxi b/src/PETSc/petscvwr.pxi
index 50e8834..4327030 100644
--- a/src/PETSc/petscvwr.pxi
+++ b/src/PETSc/petscvwr.pxi
@@ -33,6 +33,7 @@ cdef extern from * nogil:
         PETSC_VIEWER_ASCII_PYTHON
         PETSC_VIEWER_ASCII_FACTOR_INFO
         PETSC_VIEWER_ASCII_LATEX
+        PETSC_VIEWER_ASCII_XML
         PETSC_VIEWER_DRAW_BASIC
         PETSC_VIEWER_DRAW_LG
         PETSC_VIEWER_DRAW_CONTOUR
diff --git a/src/__init__.py b/src/__init__.py
index e21d87c..a6868b9 100644
--- a/src/__init__.py
+++ b/src/__init__.py
@@ -21,7 +21,7 @@ communication.
 """
 
 __author__    = 'Lisandro Dalcin'
-__version__   = '3.6.0'
+__version__   = '3.7.0'
 __credits__   = 'PETSc Team <petsc-maint at mcs.anl.gov>'
 
 # --------------------------------------------------------------------
diff --git a/src/include/compat.h b/src/include/compat.h
index 7f0c846..d211376 100644
--- a/src/include/compat.h
+++ b/src/include/compat.h
@@ -4,5 +4,8 @@
 #include <petsc.h>
 #include "compat/mpi.h"
 #include "compat/hdf5.h"
+#include "compat/mumps.h"
+#include "compat/hypre.h"
+#include "compat/tao.h"
 
 #endif/*PETSC4PY_COMPAT_H*/
diff --git a/src/include/compat/hypre.h b/src/include/compat/hypre.h
new file mode 100644
index 0000000..08e5816
--- /dev/null
+++ b/src/include/compat/hypre.h
@@ -0,0 +1,33 @@
+#ifndef PETSC4PY_COMPAT_HYPRE_H
+#define PETSC4PY_COMPAT_HYPRE_H
+
+#if !defined(PETSC_HAVE_HYPRE)
+#define PetscPCHYPREError do { \
+    PetscFunctionBegin; \
+    SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires HYPRE"); \
+    PetscFunctionReturn(PETSC_ERR_SUP);} while (0)
+#undef __FUNCT__
+#define __FUNCT__ "PCHYPREGetType"
+PetscErrorCode PCHYPREGetType(PETSC_UNUSED PC pc,PETSC_UNUSED const char *name[]){PetscPCHYPREError;}
+#undef __FUNCT__
+#define __FUNCT__ "PCHYPRESetType"
+PetscErrorCode PCHYPRESetType(PETSC_UNUSED PC pc,PETSC_UNUSED const char name[]){PetscPCHYPREError;}
+#undef __FUNCT__
+#define __FUNCT__ "PCHYPRESetDiscreteCurl"
+PetscErrorCode PCHYPRESetDiscreteCurl(PETSC_UNUSED PC pc,PETSC_UNUSED Mat C){PetscPCHYPREError;}
+#undef __FUNCT__
+#define __FUNCT__ "PCHYPRESetDiscreteGradient"
+PetscErrorCode PCHYPRESetDiscreteGradient(PETSC_UNUSED PC pc,PETSC_UNUSED Mat G){PetscPCHYPREError;}
+#undef __FUNCT__
+#define __FUNCT__ "PCHYPRESetAlphaPoissonMatrix"
+PetscErrorCode PCHYPRESetAlphaPoissonMatrix(PETSC_UNUSED PC pc,PETSC_UNUSED Mat A){PetscPCHYPREError;}
+#undef __FUNCT__
+#define __FUNCT__ "PCHYPRESetBetaPoissonMatrix"
+PetscErrorCode PCHYPRESetBetaPoissonMatrix(PETSC_UNUSED PC pc,PETSC_UNUSED Mat B){PetscPCHYPREError;}
+#undef __FUNCT__
+#define __FUNCT__ "PCHYPRESetEdgeConstantVectors"
+PetscErrorCode PCHYPRESetEdgeConstantVectors(PETSC_UNUSED PC pc,PETSC_UNUSED Vec ozz,PETSC_UNUSED Vec zoz,PETSC_UNUSED Vec zzo){PetscPCHYPREError;}
+#undef PetscPCHYPREError
+#endif
+
+#endif/*PETSC4PY_COMPAT_HYPRE_H*/
diff --git a/src/include/compat/mumps.h b/src/include/compat/mumps.h
new file mode 100644
index 0000000..dbc2e89
--- /dev/null
+++ b/src/include/compat/mumps.h
@@ -0,0 +1,37 @@
+#ifndef PETSC4PY_COMPAT_MUMPS_H
+#define PETSC4PY_COMPAT_MUMPS_H
+
+#include <petscmat.h>
+#if !defined(PETSC_HAVE_MUMPS)
+#define PetscMUMPSError do { \
+    PetscFunctionBegin; \
+    SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires MUMPS"); \
+    PetscFunctionReturn(PETSC_ERR_SUP);} while (0)
+#undef __FUNCT__
+#define __FUNCT__ "MatMumpsSetIcntl"
+PetscErrorCode MatMumpsSetIcntl(PETSC_UNUSED Mat F,PETSC_UNUSED PetscInt icntl,PETSC_UNUSED PetscInt ival){PetscMUMPSError;}
+#undef __FUNCT__
+#define __FUNCT__ "MatMumpsGetIcntl"
+PetscErrorCode MatMumpsGetIcntl(PETSC_UNUSED Mat F,PETSC_UNUSED PetscInt icntl,PETSC_UNUSED PetscInt *ival){PetscMUMPSError;}
+#undef __FUNCT__
+#define __FUNCT__ "MatMumpsSetCntl"
+PetscErrorCode MatMumpsSetCntl(PETSC_UNUSED Mat F,PETSC_UNUSED PetscInt icntl,PETSC_UNUSED PetscReal val){PetscMUMPSError;}
+#undef __FUNCT__
+#define __FUNCT__ "MatMumpsGetCntl"
+PetscErrorCode MatMumpsGetCntl(PETSC_UNUSED Mat F,PETSC_UNUSED PetscInt icntl,PETSC_UNUSED PetscReal *val){PetscMUMPSError;}
+#undef __FUNCT__
+#define __FUNCT__ "MatMumpsGetInfo"
+PetscErrorCode MatMumpsGetInfo(PETSC_UNUSED Mat F,PETSC_UNUSED PetscInt icntl,PETSC_UNUSED PetscInt *ival){PetscMUMPSError;}
+#undef __FUNCT__
+#define __FUNCT__ "MatMumpsGetInfog"
+PetscErrorCode MatMumpsGetInfog(PETSC_UNUSED Mat F,PETSC_UNUSED PetscInt icntl,PETSC_UNUSED PetscInt *ival){PetscMUMPSError;}
+#undef __FUNCT__
+#define __FUNCT__ "MatMumpsGetRinfo"
+PetscErrorCode MatMumpsGetRinfo(PETSC_UNUSED Mat F,PETSC_UNUSED PetscInt icntl,PETSC_UNUSED PetscReal *val){PetscMUMPSError;}
+#undef __FUNCT__
+#define __FUNCT__ "MatMumpsGetRinfog"
+PetscErrorCode MatMumpsGetRinfog(PETSC_UNUSED Mat F,PETSC_UNUSED PetscInt icntl,PETSC_UNUSED PetscReal *val){PetscMUMPSError;}
+#undef PetscMUMPSError
+#endif
+
+#endif/*PETSC4PY_COMPAT_MUMPS_H*/
diff --git a/src/include/compat/tao.h b/src/include/compat/tao.h
new file mode 100644
index 0000000..b4b70ee
--- /dev/null
+++ b/src/include/compat/tao.h
@@ -0,0 +1,25 @@
+#ifndef PETSC4PY_COMPAT_TAO_H
+#define PETSC4PY_COMPAT_TAO_H
+#if defined(PETSC_USE_COMPLEX)
+
+#define PetscTaoError do { \
+    PetscFunctionBegin; \
+    SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() not supported with complex scalars"); \
+    PetscFunctionReturn(PETSC_ERR_SUP);} while (0)
+
+#undef __FUNCT__
+#define __FUNCT__ "TaoLMVMSetH0"
+PetscErrorCode TaoLMVMSetH0(PETSC_UNUSED Tao tao,PETSC_UNUSED Mat mat) {PetscTaoError;}
+
+#undef __FUNCT__
+#define __FUNCT__ "TaoLMVMGetH0"
+PetscErrorCode TaoLMVMGetH0(PETSC_UNUSED Tao tao,PETSC_UNUSED Mat *mat) {PetscTaoError;}
+
+#undef __FUNCT__
+#define __FUNCT__ "TaoLMVMGetH0KSP"
+PetscErrorCode TaoLMVMGetH0KSP(PETSC_UNUSED Tao tao,PETSC_UNUSED KSP *ksp) {PetscTaoError;}
+
+#undef PetscTaoError
+
+#endif/*PETSC_USE_COMPLEX*/
+#endif/*PETSC4PY_COMPAT_TAO_H*/
diff --git a/src/include/custom.h b/src/include/custom.h
index cb28d92..d4b544d 100644
--- a/src/include/custom.h
+++ b/src/include/custom.h
@@ -156,6 +156,7 @@ PetscLogEventFindName(PetscLogEvent eventid,
 /* ---------------------------------------------------------------- */
 
 #if !defined(PETSC_HAVE_CUSP)
+
 #undef  __FUNCT__
 #define __FUNCT__ "VecCUSPGetCUDAArray"
 PETSC_STATIC_INLINE PetscErrorCode
@@ -168,6 +169,10 @@ VecCUSPGetCUDAArray(Vec v,PetscScalar **a)
   SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires CUSP");
   PetscFunctionReturn(PETSC_ERR_SUP);
 }
+#define VecCUSPGetCUDAArrayRead      VecCUSPGetCUDAArray
+#define VecCUSPGetCUDAArrayWrite     VecCUSPGetCUDAArray
+#define VecCUSPGetCUDAArrayReadWrite VecCUSPGetCUDAArray
+
 #undef  __FUNCT__
 #define __FUNCT__ "VecCUSPRestoreCUDAArray"
 PETSC_STATIC_INLINE PetscErrorCode
@@ -180,6 +185,10 @@ VecCUSPRestoreCUDAArray(Vec v,PetscScalar **a)
   SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires CUSP");
   PetscFunctionReturn(PETSC_ERR_SUP);
 }
+#define VecCUSPRestoreCUDAArrayRead      VecCUSPRestoreCUDAArray
+#define VecCUSPRestoreCUDAArrayWrite     VecCUSPRestoreCUDAArray
+#define VecCUSPRestoreCUDAArrayReadWrite VecCUSPRestoreCUDAArray
+
 #endif
 
 #undef  __FUNCT__
@@ -380,17 +389,6 @@ SNESConvergenceTestCall(SNES snes, PetscInt its,
 }
 
 #undef __FUNCT__
-#define __FUNCT__ "SNESSetConvergedReason"
-static PetscErrorCode
-SNESSetConvergedReason(SNES snes, SNESConvergedReason reason)
-{
-  PetscFunctionBegin;
-  PetscValidHeaderSpecific(snes,SNES_CLASSID,1);
-  snes->reason = reason;
-  PetscFunctionReturn(0);
-}
-
-#undef __FUNCT__
 #define __FUNCT__ "SNESGetUseMFFD"
 static PetscErrorCode
 SNESGetUseMFFD(SNES snes,PetscBool *flag)
diff --git a/src/include/petsc4py/petsc4py.PETSc.h b/src/include/petsc4py/petsc4py.PETSc.h
index fee899d..dc55231 100644
--- a/src/include/petsc4py/petsc4py.PETSc.h
+++ b/src/include/petsc4py/petsc4py.PETSc.h
@@ -1,3 +1,5 @@
+/* Generated by Cython 0.24 */
+
 #ifndef __PYX_HAVE__petsc4py__PETSc
 #define __PYX_HAVE__petsc4py__PETSc
 
diff --git a/src/include/petsc4py/petsc4py.PETSc_api.h b/src/include/petsc4py/petsc4py.PETSc_api.h
index afb168d..46b6589 100644
--- a/src/include/petsc4py/petsc4py.PETSc_api.h
+++ b/src/include/petsc4py/petsc4py.PETSc_api.h
@@ -1,3 +1,5 @@
+/* Generated by Cython 0.24 */
+
 #ifndef __PYX_HAVE_API__petsc4py__PETSc
 #define __PYX_HAVE_API__petsc4py__PETSc
 #include "Python.h"
@@ -44,80 +46,88 @@ static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_DM = 0;
 static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_Partitioner = 0;
 #define PyPetscPartitioner_Type (*__pyx_ptype_8petsc4py_5PETSc_Partitioner)
 
-static int (*__pyx_f_8petsc4py_5PETSc_PyPetscError_Set)(int) = 0;
-#define PyPetscError_Set __pyx_f_8petsc4py_5PETSc_PyPetscError_Set
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscComm_New)(MPI_Comm) = 0;
-#define PyPetscComm_New __pyx_f_8petsc4py_5PETSc_PyPetscComm_New
-static MPI_Comm (*__pyx_f_8petsc4py_5PETSc_PyPetscComm_Get)(PyObject *) = 0;
-#define PyPetscComm_Get __pyx_f_8petsc4py_5PETSc_PyPetscComm_Get
-static MPI_Comm *(*__pyx_f_8petsc4py_5PETSc_PyPetscComm_GetPtr)(PyObject *) = 0;
-#define PyPetscComm_GetPtr __pyx_f_8petsc4py_5PETSc_PyPetscComm_GetPtr
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscObject_New)(PetscObject) = 0;
-#define PyPetscObject_New __pyx_f_8petsc4py_5PETSc_PyPetscObject_New
-static PetscObject (*__pyx_f_8petsc4py_5PETSc_PyPetscObject_Get)(PyObject *) = 0;
-#define PyPetscObject_Get __pyx_f_8petsc4py_5PETSc_PyPetscObject_Get
-static PetscObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscObject_GetPtr)(PyObject *) = 0;
-#define PyPetscObject_GetPtr __pyx_f_8petsc4py_5PETSc_PyPetscObject_GetPtr
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscViewer_New)(PetscViewer) = 0;
-#define PyPetscViewer_New __pyx_f_8petsc4py_5PETSc_PyPetscViewer_New
-static PetscViewer (*__pyx_f_8petsc4py_5PETSc_PyPetscViewer_Get)(PyObject *) = 0;
-#define PyPetscViewer_Get __pyx_f_8petsc4py_5PETSc_PyPetscViewer_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscRandom_New)(PetscRandom) = 0;
-#define PyPetscRandom_New __pyx_f_8petsc4py_5PETSc_PyPetscRandom_New
-static PetscRandom (*__pyx_f_8petsc4py_5PETSc_PyPetscRandom_Get)(PyObject *) = 0;
-#define PyPetscRandom_Get __pyx_f_8petsc4py_5PETSc_PyPetscRandom_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscIS_New)(IS) = 0;
-#define PyPetscIS_New __pyx_f_8petsc4py_5PETSc_PyPetscIS_New
-static IS (*__pyx_f_8petsc4py_5PETSc_PyPetscIS_Get)(PyObject *) = 0;
-#define PyPetscIS_Get __pyx_f_8petsc4py_5PETSc_PyPetscIS_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_New)(ISLocalToGlobalMapping) = 0;
-#define PyPetscLGMap_New __pyx_f_8petsc4py_5PETSc_PyPetscLGMap_New
-static ISLocalToGlobalMapping (*__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_Get)(PyObject *) = 0;
-#define PyPetscLGMap_Get __pyx_f_8petsc4py_5PETSc_PyPetscLGMap_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscSF_New)(PetscSF) = 0;
-#define PyPetscSF_New __pyx_f_8petsc4py_5PETSc_PyPetscSF_New
-static PetscSF (*__pyx_f_8petsc4py_5PETSc_PyPetscSF_Get)(PyObject *) = 0;
-#define PyPetscSF_Get __pyx_f_8petsc4py_5PETSc_PyPetscSF_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscVec_New)(Vec) = 0;
-#define PyPetscVec_New __pyx_f_8petsc4py_5PETSc_PyPetscVec_New
-static Vec (*__pyx_f_8petsc4py_5PETSc_PyPetscVec_Get)(PyObject *) = 0;
-#define PyPetscVec_Get __pyx_f_8petsc4py_5PETSc_PyPetscVec_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscScatter_New)(VecScatter) = 0;
-#define PyPetscScatter_New __pyx_f_8petsc4py_5PETSc_PyPetscScatter_New
-static VecScatter (*__pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get)(PyObject *) = 0;
-#define PyPetscScatter_Get __pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscMat_New)(Mat) = 0;
-#define PyPetscMat_New __pyx_f_8petsc4py_5PETSc_PyPetscMat_New
-static Mat (*__pyx_f_8petsc4py_5PETSc_PyPetscMat_Get)(PyObject *) = 0;
-#define PyPetscMat_Get __pyx_f_8petsc4py_5PETSc_PyPetscMat_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscPC_New)(PC) = 0;
-#define PyPetscPC_New __pyx_f_8petsc4py_5PETSc_PyPetscPC_New
-static PC (*__pyx_f_8petsc4py_5PETSc_PyPetscPC_Get)(PyObject *) = 0;
-#define PyPetscPC_Get __pyx_f_8petsc4py_5PETSc_PyPetscPC_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscKSP_New)(KSP) = 0;
-#define PyPetscKSP_New __pyx_f_8petsc4py_5PETSc_PyPetscKSP_New
-static KSP (*__pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get)(PyObject *) = 0;
-#define PyPetscKSP_Get __pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New)(SNES) = 0;
-#define PyPetscSNES_New __pyx_f_8petsc4py_5PETSc_PyPetscSNES_New
-static SNES (*__pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get)(PyObject *) = 0;
-#define PyPetscSNES_Get __pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscTS_New)(TS) = 0;
-#define PyPetscTS_New __pyx_f_8petsc4py_5PETSc_PyPetscTS_New
-static TS (*__pyx_f_8petsc4py_5PETSc_PyPetscTS_Get)(PyObject *) = 0;
-#define PyPetscTS_Get __pyx_f_8petsc4py_5PETSc_PyPetscTS_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscAO_New)(AO) = 0;
-#define PyPetscAO_New __pyx_f_8petsc4py_5PETSc_PyPetscAO_New
-static AO (*__pyx_f_8petsc4py_5PETSc_PyPetscAO_Get)(PyObject *) = 0;
-#define PyPetscAO_Get __pyx_f_8petsc4py_5PETSc_PyPetscAO_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscDM_New)(DM) = 0;
-#define PyPetscDM_New __pyx_f_8petsc4py_5PETSc_PyPetscDM_New
-static DM (*__pyx_f_8petsc4py_5PETSc_PyPetscDM_Get)(PyObject *) = 0;
-#define PyPetscDM_Get __pyx_f_8petsc4py_5PETSc_PyPetscDM_Get
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New)(PetscPartitioner) = 0;
-#define PyPetscPartitioner_New __pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New
-static PetscPartitioner (*__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get)(PyObject *) = 0;
-#define PyPetscPartitioner_Get __pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get
+static int (*__pyx_api_f_8petsc4py_5PETSc_PyPetscError_Set)(int) = 0;
+#define PyPetscError_Set __pyx_api_f_8petsc4py_5PETSc_PyPetscError_Set
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscComm_New)(MPI_Comm) = 0;
+#define PyPetscComm_New __pyx_api_f_8petsc4py_5PETSc_PyPetscComm_New
+static MPI_Comm (*__pyx_api_f_8petsc4py_5PETSc_PyPetscComm_Get)(PyObject *) = 0;
+#define PyPetscComm_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscComm_Get
+static MPI_Comm *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscComm_GetPtr)(PyObject *) = 0;
+#define PyPetscComm_GetPtr __pyx_api_f_8petsc4py_5PETSc_PyPetscComm_GetPtr
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscObject_New)(PetscObject) = 0;
+#define PyPetscObject_New __pyx_api_f_8petsc4py_5PETSc_PyPetscObject_New
+static PetscObject (*__pyx_api_f_8petsc4py_5PETSc_PyPetscObject_Get)(PyObject *) = 0;
+#define PyPetscObject_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscObject_Get
+static PetscObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscObject_GetPtr)(PyObject *) = 0;
+#define PyPetscObject_GetPtr __pyx_api_f_8petsc4py_5PETSc_PyPetscObject_GetPtr
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscViewer_New)(PetscViewer) = 0;
+#define PyPetscViewer_New __pyx_api_f_8petsc4py_5PETSc_PyPetscViewer_New
+static PetscViewer (*__pyx_api_f_8petsc4py_5PETSc_PyPetscViewer_Get)(PyObject *) = 0;
+#define PyPetscViewer_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscViewer_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscRandom_New)(PetscRandom) = 0;
+#define PyPetscRandom_New __pyx_api_f_8petsc4py_5PETSc_PyPetscRandom_New
+static PetscRandom (*__pyx_api_f_8petsc4py_5PETSc_PyPetscRandom_Get)(PyObject *) = 0;
+#define PyPetscRandom_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscRandom_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscIS_New)(IS) = 0;
+#define PyPetscIS_New __pyx_api_f_8petsc4py_5PETSc_PyPetscIS_New
+static IS (*__pyx_api_f_8petsc4py_5PETSc_PyPetscIS_Get)(PyObject *) = 0;
+#define PyPetscIS_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscIS_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscLGMap_New)(ISLocalToGlobalMapping) = 0;
+#define PyPetscLGMap_New __pyx_api_f_8petsc4py_5PETSc_PyPetscLGMap_New
+static ISLocalToGlobalMapping (*__pyx_api_f_8petsc4py_5PETSc_PyPetscLGMap_Get)(PyObject *) = 0;
+#define PyPetscLGMap_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscLGMap_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscSF_New)(PetscSF) = 0;
+#define PyPetscSF_New __pyx_api_f_8petsc4py_5PETSc_PyPetscSF_New
+static PetscSF (*__pyx_api_f_8petsc4py_5PETSc_PyPetscSF_Get)(PyObject *) = 0;
+#define PyPetscSF_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscSF_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscVec_New)(Vec) = 0;
+#define PyPetscVec_New __pyx_api_f_8petsc4py_5PETSc_PyPetscVec_New
+static Vec (*__pyx_api_f_8petsc4py_5PETSc_PyPetscVec_Get)(PyObject *) = 0;
+#define PyPetscVec_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscVec_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscScatter_New)(VecScatter) = 0;
+#define PyPetscScatter_New __pyx_api_f_8petsc4py_5PETSc_PyPetscScatter_New
+static VecScatter (*__pyx_api_f_8petsc4py_5PETSc_PyPetscScatter_Get)(PyObject *) = 0;
+#define PyPetscScatter_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscScatter_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscSection_New)(PetscSection) = 0;
+#define PyPetscSection_New __pyx_api_f_8petsc4py_5PETSc_PyPetscSection_New
+static PetscSection (*__pyx_api_f_8petsc4py_5PETSc_PyPetscSection_Get)(PyObject *) = 0;
+#define PyPetscSection_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscSection_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscMat_New)(Mat) = 0;
+#define PyPetscMat_New __pyx_api_f_8petsc4py_5PETSc_PyPetscMat_New
+static Mat (*__pyx_api_f_8petsc4py_5PETSc_PyPetscMat_Get)(PyObject *) = 0;
+#define PyPetscMat_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscMat_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscPC_New)(PC) = 0;
+#define PyPetscPC_New __pyx_api_f_8petsc4py_5PETSc_PyPetscPC_New
+static PC (*__pyx_api_f_8petsc4py_5PETSc_PyPetscPC_Get)(PyObject *) = 0;
+#define PyPetscPC_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscPC_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscKSP_New)(KSP) = 0;
+#define PyPetscKSP_New __pyx_api_f_8petsc4py_5PETSc_PyPetscKSP_New
+static KSP (*__pyx_api_f_8petsc4py_5PETSc_PyPetscKSP_Get)(PyObject *) = 0;
+#define PyPetscKSP_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscKSP_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscSNES_New)(SNES) = 0;
+#define PyPetscSNES_New __pyx_api_f_8petsc4py_5PETSc_PyPetscSNES_New
+static SNES (*__pyx_api_f_8petsc4py_5PETSc_PyPetscSNES_Get)(PyObject *) = 0;
+#define PyPetscSNES_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscSNES_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscTS_New)(TS) = 0;
+#define PyPetscTS_New __pyx_api_f_8petsc4py_5PETSc_PyPetscTS_New
+static TS (*__pyx_api_f_8petsc4py_5PETSc_PyPetscTS_Get)(PyObject *) = 0;
+#define PyPetscTS_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscTS_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscTAO_New)(Tao) = 0;
+#define PyPetscTAO_New __pyx_api_f_8petsc4py_5PETSc_PyPetscTAO_New
+static Tao (*__pyx_api_f_8petsc4py_5PETSc_PyPetscTAO_Get)(PyObject *) = 0;
+#define PyPetscTAO_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscTAO_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscAO_New)(AO) = 0;
+#define PyPetscAO_New __pyx_api_f_8petsc4py_5PETSc_PyPetscAO_New
+static AO (*__pyx_api_f_8petsc4py_5PETSc_PyPetscAO_Get)(PyObject *) = 0;
+#define PyPetscAO_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscAO_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscDM_New)(DM) = 0;
+#define PyPetscDM_New __pyx_api_f_8petsc4py_5PETSc_PyPetscDM_New
+static DM (*__pyx_api_f_8petsc4py_5PETSc_PyPetscDM_Get)(PyObject *) = 0;
+#define PyPetscDM_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscDM_Get
+static PyObject *(*__pyx_api_f_8petsc4py_5PETSc_PyPetscPartitioner_New)(PetscPartitioner) = 0;
+#define PyPetscPartitioner_New __pyx_api_f_8petsc4py_5PETSc_PyPetscPartitioner_New
+static PetscPartitioner (*__pyx_api_f_8petsc4py_5PETSc_PyPetscPartitioner_Get)(PyObject *) = 0;
+#define PyPetscPartitioner_Get __pyx_api_f_8petsc4py_5PETSc_PyPetscPartitioner_Get
 #if !defined(__Pyx_PyIdentifier_FromString)
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
@@ -242,14 +252,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;
@@ -265,43 +275,47 @@ static int import_petsc4py__PETSc(void) {
   PyObject *module = 0;
   module = __Pyx_ImportModule("petsc4py.PETSc");
   if (!module) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscError_Set", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscError_Set, "int (int)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscComm_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscComm_New, "PyObject *(MPI_Comm)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscComm_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscComm_Get, "MPI_Comm (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscComm_GetPtr", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscComm_GetPtr, "MPI_Comm *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscObject_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscObject_New, "PyObject *(PetscObject)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscObject_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscObject_Get, "PetscObject (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscObject_GetPtr", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscObject_GetPtr, "PetscObject *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscViewer_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscViewer_New, "PyObject *(PetscViewer)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscViewer_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscViewer_Get, "PetscViewer (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscRandom_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscRandom_New, "PyObject *(PetscRandom)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscRandom_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscRandom_Get, "PetscRandom (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscIS_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscIS_New, "PyObject *(IS)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscIS_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscIS_Get, "IS (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscLGMap_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_New, "PyObject *(ISLocalToGlobalMapping)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscLGMap_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_Get, "ISLocalToGlobalMapping (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscSF_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscSF_New, "PyObject *(PetscSF)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscSF_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscSF_Get, "PetscSF (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscVec_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscVec_New, "PyObject *(Vec)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscVec_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscVec_Get, "Vec (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscScatter_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscScatter_New, "PyObject *(VecScatter)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscScatter_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get, "VecScatter (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscMat_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscMat_New, "PyObject *(Mat)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscMat_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscMat_Get, "Mat (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscPC_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscPC_New, "PyObject *(PC)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscPC_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscPC_Get, "PC (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscKSP_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscKSP_New, "PyObject *(KSP)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscKSP_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get, "KSP (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscSNES_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New, "PyObject *(SNES)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscSNES_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get, "SNES (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscTS_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscTS_New, "PyObject *(TS)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscTS_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscTS_Get, "TS (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscAO_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscAO_New, "PyObject *(AO)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscAO_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscAO_Get, "AO (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscDM_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscDM_New, "PyObject *(DM)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscDM_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscDM_Get, "DM (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscPartitioner_New", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New, "PyObject *(PetscPartitioner)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PyPetscPartitioner_Get", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get, "PetscPartitioner (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscError_Set", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscError_Set, "int (int)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscComm_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscComm_New, "PyObject *(MPI_Comm)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscComm_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscComm_Get, "MPI_Comm (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscComm_GetPtr", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscComm_GetPtr, "MPI_Comm *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscObject_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscObject_New, "PyObject *(PetscObject)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscObject_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscObject_Get, "PetscObject (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscObject_GetPtr", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscObject_GetPtr, "PetscObject *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscViewer_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscViewer_New, "PyObject *(PetscViewer)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscViewer_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscViewer_Get, "PetscViewer (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscRandom_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscRandom_New, "PyObject *(PetscRandom)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscRandom_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscRandom_Get, "PetscRandom (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscIS_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscIS_New, "PyObject *(IS)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscIS_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscIS_Get, "IS (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscLGMap_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscLGMap_New, "PyObject *(ISLocalToGlobalMapping)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscLGMap_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscLGMap_Get, "ISLocalToGlobalMapping (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscSF_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscSF_New, "PyObject *(PetscSF)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscSF_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscSF_Get, "PetscSF (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscVec_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscVec_New, "PyObject *(Vec)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscVec_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscVec_Get, "Vec (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscScatter_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscScatter_New, "PyObject *(VecScatter)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscScatter_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscScatter_Get, "VecScatter (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscSection_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscSection_New, "PyObject *(PetscSection)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscSection_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscSection_Get, "PetscSection (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscMat_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscMat_New, "PyObject *(Mat)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscMat_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscMat_Get, "Mat (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscPC_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscPC_New, "PyObject *(PC)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscPC_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscPC_Get, "PC (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscKSP_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscKSP_New, "PyObject *(KSP)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscKSP_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscKSP_Get, "KSP (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscSNES_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscSNES_New, "PyObject *(SNES)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscSNES_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscSNES_Get, "SNES (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscTS_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscTS_New, "PyObject *(TS)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscTS_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscTS_Get, "TS (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscTAO_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscTAO_New, "PyObject *(Tao)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscTAO_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscTAO_Get, "Tao (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscAO_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscAO_New, "PyObject *(AO)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscAO_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscAO_Get, "AO (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscDM_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscDM_New, "PyObject *(DM)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscDM_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscDM_Get, "DM (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscPartitioner_New", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscPartitioner_New, "PyObject *(PetscPartitioner)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PyPetscPartitioner_Get", (void (**)(void))&__pyx_api_f_8petsc4py_5PETSc_PyPetscPartitioner_Get, "PetscPartitioner (PyObject *)") < 0) goto bad;
   Py_DECREF(module); module = 0;
   __pyx_ptype_8petsc4py_5PETSc_Comm = __Pyx_ImportType("petsc4py.PETSc", "Comm", sizeof(struct PyPetscCommObject), 1); if (!__pyx_ptype_8petsc4py_5PETSc_Comm) goto bad;
   __pyx_ptype_8petsc4py_5PETSc_Object = __Pyx_ImportType("petsc4py.PETSc", "Object", sizeof(struct PyPetscObjectObject), 1); if (!__pyx_ptype_8petsc4py_5PETSc_Object) goto bad;
diff --git a/src/include/petsc4py/petsc4py.i b/src/include/petsc4py/petsc4py.i
index dbc42c9..ef90150 100644
--- a/src/include/petsc4py/petsc4py.i
+++ b/src/include/petsc4py/petsc4py.i
@@ -443,6 +443,7 @@ SWIG_From_dec(Type)(Type v) {
 %define SWIG_TYPECHECK_PETSC_SF            512 %enddef
 %define SWIG_TYPECHECK_PETSC_VEC           513 %enddef
 %define SWIG_TYPECHECK_PETSC_VEC_SCATTER   514 %enddef
+%define SWIG_TYPECHECK_PETSC_SECTION       515 %enddef
 
 %define SWIG_TYPECHECK_PETSC_MAT           520 %enddef
 %define SWIG_TYPECHECK_PETSC_MAT_NULLSPACE 521 %enddef
@@ -451,6 +452,7 @@ SWIG_From_dec(Type)(Type v) {
 %define SWIG_TYPECHECK_PETSC_PC            531 %enddef
 %define SWIG_TYPECHECK_PETSC_SNES          532 %enddef
 %define SWIG_TYPECHECK_PETSC_TS            533 %enddef
+%define SWIG_TYPECHECK_PETSC_TAO           534 %enddef
 
 %define SWIG_TYPECHECK_PETSC_AO            540 %enddef
 %define SWIG_TYPECHECK_PETSC_DM            541 %enddef
@@ -561,12 +563,14 @@ SWIG_From_dec(Type)(Type v) {
 %petsc4py_objt( Petsc , SF          , SF                     , PETSC_SF            )
 %petsc4py_objt( Petsc , Vec         , Vec                    , PETSC_VEC           )
 %petsc4py_objt( Petsc , Scatter     , VecScatter             , PETSC_VEC_SCATTER   )
+%petsc4py_objt( Petsc , Section     , PetscSection           , PETSC_SECTION       )
 %petsc4py_objt( Petsc , Mat         , Mat                    , PETSC_MAT           )
 %petsc4py_objt( Petsc , NullSpace   , MatNullSpace           , PETSC_MAT_NULLSPACE )
 %petsc4py_objt( Petsc , KSP         , KSP                    , PETSC_KSP           )
 %petsc4py_objt( Petsc , PC          , PC                     , PETSC_PC            )
 %petsc4py_objt( Petsc , SNES        , SNES                   , PETSC_SNES          )
 %petsc4py_objt( Petsc , TS          , TS                     , PETSC_TS            )
+%petsc4py_objt( Petsc , TAO         , Tao                    , PETSC_TAO           )
 %petsc4py_objt( Petsc , AO          , AO                     , PETSC_AO            )
 %petsc4py_objt( Petsc , DM          , DM                     , PETSC_DM            )
 %petsc4py_objt( Petsc , Partitioner , PetscPartitioner       , PETSC_PARTITIONER   )
diff --git a/src/libpetsc4py/libpetsc4py.c b/src/libpetsc4py/libpetsc4py.c
index 815737c..acbe5f9 100644
--- a/src/libpetsc4py/libpetsc4py.c
+++ b/src/libpetsc4py/libpetsc4py.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__libpetsc4py
 #define __PYX_HAVE_API__libpetsc4py
 #include "petsc.h"
@@ -282,7 +291,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
@@ -290,16 +299,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))
@@ -334,10 +361,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
@@ -346,6 +374,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) {
@@ -436,6 +470,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__;
@@ -781,7 +816,7 @@ typedef struct PyPetscPartitionerObject PyPetscPartitionerObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPartitioner_Type;
 
-/* "libpetsc4py.pyx":282
+/* "libpetsc4py.pyx":284
  * 
  * @cython.internal
  * cdef class _PyObj:             # <<<<<<<<<<<<<<
@@ -796,7 +831,7 @@ struct __pyx_obj_11libpetsc4py__PyObj {
 };
 
 
-/* "libpetsc4py.pyx":509
+/* "libpetsc4py.pyx":512
  * 
  * @cython.internal
  * cdef class _PyMat(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -808,7 +843,7 @@ struct __pyx_obj_11libpetsc4py__PyMat {
 };
 
 
-/* "libpetsc4py.pyx":1141
+/* "libpetsc4py.pyx":1152
  * 
  * @cython.internal
  * cdef class _PyPC(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -820,7 +855,7 @@ struct __pyx_obj_11libpetsc4py__PyPC {
 };
 
 
-/* "libpetsc4py.pyx":1416
+/* "libpetsc4py.pyx":1427
  * 
  * @cython.internal
  * cdef class _PyKSP(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -832,7 +867,7 @@ struct __pyx_obj_11libpetsc4py__PyKSP {
 };
 
 
-/* "libpetsc4py.pyx":1770
+/* "libpetsc4py.pyx":1782
  * 
  * @cython.internal
  * cdef class _PySNES(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -844,7 +879,7 @@ struct __pyx_obj_11libpetsc4py__PySNES {
 };
 
 
-/* "libpetsc4py.pyx":2099
+/* "libpetsc4py.pyx":2117
  * 
  * @cython.internal
  * cdef class _PyTS(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1144,7 +1179,7 @@ struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner {
 static struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner *__pyx_vtabptr_8petsc4py_5PETSc_Partitioner;
 
 
-/* "libpetsc4py.pyx":282
+/* "libpetsc4py.pyx":284
  * 
  * @cython.internal
  * cdef class _PyObj:             # <<<<<<<<<<<<<<
@@ -1161,7 +1196,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyObj {
 static struct __pyx_vtabstruct_11libpetsc4py__PyObj *__pyx_vtabptr_11libpetsc4py__PyObj;
 
 
-/* "libpetsc4py.pyx":509
+/* "libpetsc4py.pyx":512
  * 
  * @cython.internal
  * cdef class _PyMat(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1175,7 +1210,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyMat {
 static struct __pyx_vtabstruct_11libpetsc4py__PyMat *__pyx_vtabptr_11libpetsc4py__PyMat;
 
 
-/* "libpetsc4py.pyx":1141
+/* "libpetsc4py.pyx":1152
  * 
  * @cython.internal
  * cdef class _PyPC(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1189,7 +1224,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyPC {
 static struct __pyx_vtabstruct_11libpetsc4py__PyPC *__pyx_vtabptr_11libpetsc4py__PyPC;
 
 
-/* "libpetsc4py.pyx":1416
+/* "libpetsc4py.pyx":1427
  * 
  * @cython.internal
  * cdef class _PyKSP(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1203,7 +1238,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyKSP {
 static struct __pyx_vtabstruct_11libpetsc4py__PyKSP *__pyx_vtabptr_11libpetsc4py__PyKSP;
 
 
-/* "libpetsc4py.pyx":1770
+/* "libpetsc4py.pyx":1782
  * 
  * @cython.internal
  * cdef class _PySNES(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1217,7 +1252,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PySNES {
 static struct __pyx_vtabstruct_11libpetsc4py__PySNES *__pyx_vtabptr_11libpetsc4py__PySNES;
 
 
-/* "libpetsc4py.pyx":2099
+/* "libpetsc4py.pyx":2117
  * 
  * @cython.internal
  * cdef class _PyTS(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1231,6 +1266,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyTS {
 static struct __pyx_vtabstruct_11libpetsc4py__PyTS *__pyx_vtabptr_11libpetsc4py__PyTS;
 
 /* --- Runtime support code (head) --- */
+/* Refnanny.proto */
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
@@ -1247,19 +1283,19 @@ static struct __pyx_vtabstruct_11libpetsc4py__PyTS *__pyx_vtabptr_11libpetsc4py_
   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__)
@@ -1282,17 +1318,18 @@ static struct __pyx_vtabstruct_11libpetsc4py__PyTS *__pyx_vtabptr_11libpetsc4py_
   #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);
@@ -1308,31 +1345,59 @@ 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);
 
+/* 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);
 
+/* tp_new.proto */
 #define __Pyx_tp_new(type_obj, args) __Pyx_tp_new_kwargs(type_obj, args, NULL)
 static CYTHON_INLINE PyObject* __Pyx_tp_new_kwargs(PyObject* type_obj, PyObject* args, PyObject* kwargs) {
     return (PyObject*) (((PyTypeObject*)type_obj)->tp_new((PyTypeObject*)type_obj, args, kwargs));
 }
 
+/* ExtTypeTest.proto */
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
 
+/* 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,
@@ -1342,25 +1407,32 @@ 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
 
+/* 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);
 
-static CYTHON_INLINE int __Pyx_PyDict_Contains(PyObject* item, PyObject* dict, int eq) {
+/* PyDictContains.proto */
+static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) {
     int result = PyDict_Contains(dict, item);
     return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
 }
 
+/* DictGetItem.proto */
 #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     PyObject *value;
@@ -1381,6 +1453,7 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
 #endif
 
+/* 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) {
@@ -1398,42 +1471,73 @@ static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr
 #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
 #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
 
+/* 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
 
+/* SwapException.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
 static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
+#endif
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb);
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb);
+/* 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
 
+/* GetAttr.proto */
 static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
 
+/* GetAttr3.proto */
 static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);
 
-static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
-
-static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) {
+/* PySequenceContains.proto */
+static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
     int result = PySequence_Contains(seq, item);
     return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
 }
 
+/* SetVTable.proto */
 static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
+/* GetVTable.proto */
 static void* __Pyx_GetVtable(PyObject *dict);
 
+/* Import.proto */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+/* ImportFrom.proto */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
+/* PyIdentifierFromString.proto */
 #if !defined(__Pyx_PyIdentifier_FromString)
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
@@ -1442,14 +1546,17 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 #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;
@@ -1461,34 +1568,54 @@ 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);
-
+/* None.proto */
 static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void); /* proto */
 
+/* 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_long(long value);
 
+/* PyExec.proto */
 static PyObject* __Pyx_PyExec3(PyObject*, PyObject*, PyObject*);
 static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject*, PyObject*);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscBool(PetscBool value);
+
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatSORType(MatSORType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NormType(NormType value);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *);
+
+/* CIntFromPy.proto */
 static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
+/* CIntFromPy.proto */
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
 
+/* CheckBinaryVersion.proto */
 static int __Pyx_check_binary_version(void);
 
+/* 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);
 
 static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4py__PyObj *__pyx_v_self, void *__pyx_v_ctx, struct PyPetscObjectObject *__pyx_v_base); /* proto*/
@@ -1519,7 +1646,7 @@ static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_TAO = 0;
 static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_AO = 0;
 static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_DM = 0;
 static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_Partitioner = 0;
-static PyObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup)(int); /*proto*/
+static PyTypeObject *(*__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup)(int); /*proto*/
 
 /* Module declarations from 'libpetsc4py' */
 static PyTypeObject *__pyx_ptype_11libpetsc4py__PyObj = 0;
@@ -1529,7 +1656,7 @@ static PyTypeObject *__pyx_ptype_11libpetsc4py__PyKSP = 0;
 static PyTypeObject *__pyx_ptype_11libpetsc4py__PySNES = 0;
 static PyTypeObject *__pyx_ptype_11libpetsc4py__PyTS = 0;
 static char *__pyx_v_11libpetsc4py_FUNCT;
-static char *__pyx_v_11libpetsc4py_fstack[1024];
+static char *__pyx_v_11libpetsc4py_fstack[0x400];
 static int __pyx_v_11libpetsc4py_istack;
 static PyObject *__pyx_v_11libpetsc4py_PetscError = 0;
 static PyObject *__pyx_v_11libpetsc4py_module_cache = 0;
@@ -1570,7 +1697,7 @@ __PYX_EXTERN_C DL_EXPORT(PetscErrorCode) MatPythonSetContext(Mat, void *); /*pro
 static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat, char *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat); /*proto*/
-static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOptions *, Mat); /*proto*/
+static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOptionItems *, Mat); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat, PetscViewer); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat, MatDuplicateOption, Mat *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat, Mat, MatStructure); /*proto*/
@@ -1611,7 +1738,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC); /*proto*/
-static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptions *, PC); /*proto*/
+static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionItems *, PC); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC, PetscViewer); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC, KSP, Vec, Vec); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC, KSP, Vec, Vec); /*proto*/
@@ -1627,7 +1754,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP); /*proto*/
-static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOptions *, KSP); /*proto*/
+static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOptionItems *, KSP); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP, PetscViewer); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP, Vec, Vec *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP, Vec, Vec, Vec *); /*proto*/
@@ -1644,7 +1771,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES); /*proto*/
-static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptions *, SNES); /*proto*/
+static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptionItems *, SNES); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES, PetscViewer); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES); /*proto*/
@@ -1660,7 +1787,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS); /*proto*/
-static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptions *, TS); /*proto*/
+static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionItems *, TS); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS, PetscViewer); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS); /*proto*/
@@ -1679,235 +1806,93 @@ int __pyx_module_is_main_libpetsc4py = 0;
 /* Implementation of 'libpetsc4py' */
 static PyObject *__pyx_builtin_open;
 static PyObject *__pyx_builtin_compile;
-static PyObject *__pyx_pf_11libpetsc4py_6_PyObj___getattr__(struct __pyx_obj_11libpetsc4py__PyObj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */
-static PyObject *__pyx_tp_new_11libpetsc4py__PyObj(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_11libpetsc4py__PyMat(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_11libpetsc4py__PyPC(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_11libpetsc4py__PyKSP(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_11libpetsc4py__PySNES(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_11libpetsc4py__PyTS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static char __pyx_k_[] = "";
-static char __pyx_k_s[] = "%s";
-static char __pyx_k__2[] = ":";
-static char __pyx_k__4[] = ".";
-static char __pyx_k__6[] = ",";
-static char __pyx_k_rU[] = "rU";
-static char __pyx_k_SOR[] = "SOR";
-static char __pyx_k_copy[] = "copy";
-static char __pyx_k_dict[] = "__dict__";
-static char __pyx_k_exec[] = "exec";
-static char __pyx_k_file[] = "__file__";
-static char __pyx_k_main[] = "__main__";
-static char __pyx_k_mult[] = "mult";
-static char __pyx_k_name[] = "__name__";
-static char __pyx_k_norm[] = "norm";
-static char __pyx_k_open[] = "open";
-static char __pyx_k_read[] = "read";
-static char __pyx_k_step[] = "step";
-static char __pyx_k_view[] = "view";
-static char __pyx_k_Error[] = "Error";
-static char __pyx_k_apply[] = "apply";
-static char __pyx_k_class[] = "__class__";
-static char __pyx_k_close[] = "close";
-static char __pyx_k_petsc[] = "__petsc__";
-static char __pyx_k_reset[] = "reset";
-static char __pyx_k_scale[] = "scale";
-static char __pyx_k_setUp[] = "setUp";
-static char __pyx_k_shift[] = "shift";
-static char __pyx_k_solve[] = "solve";
-static char __pyx_k_split[] = "split";
-static char __pyx_k_create[] = "create";
-static char __pyx_k_encode[] = "encode";
-static char __pyx_k_import[] = "__import__";
-static char __pyx_k_module[] = "__module__";
-static char __pyx_k_rsplit[] = "rsplit";
-static char __pyx_k_compile[] = "compile";
-static char __pyx_k_destroy[] = "destroy";
-static char __pyx_k_monitor[] = "monitor";
-static char __pyx_k_multAdd[] = "multAdd";
-static char __pyx_k_package[] = "__package__";
-static char __pyx_k_preStep[] = "preStep";
-static char __pyx_k_unknown[] = "<unknown>";
-static char __pyx_k_Python_s[] = "  Python: %s\n";
-static char __pyx_k_assembly[] = "assembly";
-static char __pyx_k_builtins[] = "__builtins__";
-static char __pyx_k_imagPart[] = "imagPart";
-static char __pyx_k_method_s[] = "method %s()";
-static char __pyx_k_postStep[] = "postStep";
-static char __pyx_k_preSolve[] = "preSolve";
-static char __pyx_k_realPart[] = "realPart";
-static char __pyx_k_rollback[] = "rollback";
-static char __pyx_k_solveAdd[] = "solveAdd";
-static char __pyx_k_adaptStep[] = "adaptStep";
-static char __pyx_k_conjugate[] = "conjugate";
-static char __pyx_k_duplicate[] = "duplicate";
-static char __pyx_k_postSolve[] = "postSolve";
-static char __pyx_k_setOption[] = "setOption";
-static char __pyx_k_solveStep[] = "solveStep";
-static char __pyx_k_createVecs[] = "createVecs";
-static char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
-static char __pyx_k_setMonitor[] = "setMonitor";
-static char __pyx_k_ts_vec_dot[] = "@ts.vec_dot";
-static char __pyx_k_assemblyEnd[] = "assemblyEnd";
-static char __pyx_k_getDiagonal[] = "getDiagonal";
-static char __pyx_k_interpolate[] = "interpolate";
-static char __pyx_k_setDiagonal[] = "setDiagonal";
-static char __pyx_k_zeroEntries[] = "zeroEntries";
-static char __pyx_k_evaluatestep[] = "evaluatestep";
-static char __pyx_k_getSubMatrix[] = "getSubMatrix";
-static char __pyx_k_MatSOR_Python[] = "MatSOR_Python";
-static char __pyx_k_PCView_Python[] = "PCView_Python";
-static char __pyx_k_TSStep_Python[] = "TSStep_Python";
-static char __pyx_k_TSView_Python[] = "TSView_Python";
-static char __pyx_k_assemblyBegin[] = "assemblyBegin";
-static char __pyx_k_buildResidual[] = "buildResidual";
-static char __pyx_k_buildSolution[] = "buildSolution";
-static char __pyx_k_diagonalScale[] = "diagonalScale";
-static char __pyx_k_multHermitian[] = "multHermitian";
-static char __pyx_k_multTranspose[] = "multTranspose";
-static char __pyx_k_stepTranspose[] = "stepTranspose";
-static char __pyx_k_ts_vec_update[] = "@ts.vec_update";
-static char __pyx_k_KSPStep_Python[] = "KSPStep_Python";
-static char __pyx_k_KSPView_Python[] = "KSPView_Python";
-static char __pyx_k_MatCopy_Python[] = "MatCopy_Python";
-static char __pyx_k_MatMult_Python[] = "MatMult_Python";
-static char __pyx_k_MatNorm_Python[] = "MatNorm_Python";
-static char __pyx_k_MatView_Python[] = "MatView_Python";
-static char __pyx_k_PCApply_Python[] = "PCApply_Python";
-static char __pyx_k_PCReset_Python[] = "PCReset_Python";
-static char __pyx_k_PCSetUp_Python[] = "PCSetUp_Python";
-static char __pyx_k_TSReset_Python[] = "TSReset_Python";
-static char __pyx_k_TSSetUp_Python[] = "TSSetUp_Python";
-static char __pyx_k_applyTranspose[] = "applyTranspose";
-static char __pyx_k_pc_python_type[] = "-pc_python_type";
-static char __pyx_k_petsc4py_PETSc[] = "petsc4py.PETSc";
-static char __pyx_k_setFromOptions[] = "setFromOptions";
-static char __pyx_k_solveTranspose[] = "solveTranspose";
-static char __pyx_k_ts_python_type[] = "-ts_python_type";
-static char __pyx_k_KSPReset_Python[] = "KSPReset_Python";
-static char __pyx_k_KSPSetUp_Python[] = "KSPSetUp_Python";
-static char __pyx_k_KSPSolve_Python[] = "KSPSolve_Python";
-static char __pyx_k_MatScale_Python[] = "MatScale_Python";
-static char __pyx_k_MatSetUp_Python[] = "MatSetUp_Python";
-static char __pyx_k_MatShift_Python[] = "MatShift_Python";
-static char __pyx_k_MatSolve_Python[] = "MatSolve_Python";
-static char __pyx_k_PCCreate_Python[] = "PCCreate_Python";
-static char __pyx_k_PCPythonSetType[] = "PCPythonSetType";
-static char __pyx_k_SNESStep_Python[] = "SNESStep_Python";
-static char __pyx_k_SNESView_Python[] = "SNESView_Python";
-static char __pyx_k_TSCreate_Python[] = "TSCreate_Python";
-static char __pyx_k_TSPythonSetType[] = "TSPythonSetType";
-static char __pyx_k_ksp_python_type[] = "-ksp_python_type";
-static char __pyx_k_mat_python_type[] = "-mat_python_type";
-static char __pyx_k_KSPCreate_Python[] = "KSPCreate_Python";
-static char __pyx_k_KSPPythonSetType[] = "KSPPythonSetType";
-static char __pyx_k_MatCreate_Python[] = "MatCreate_Python";
-static char __pyx_k_MatPythonSetType[] = "MatPythonSetType";
-static char __pyx_k_PCDestroy_Python[] = "PCDestroy_Python";
-static char __pyx_k_SNESReset_Python[] = "SNESReset_Python";
-static char __pyx_k_SNESSetUp_Python[] = "SNESSetUp_Python";
-static char __pyx_k_SNESSolve_Python[] = "SNESSolve_Python";
-static char __pyx_k_TSDestroy_Python[] = "TSDestroy_Python";
-static char __pyx_k_formSNESFunction[] = "formSNESFunction";
-static char __pyx_k_formSNESJacobian[] = "formSNESJacobian";
-static char __pyx_k_getDiagonalBlock[] = "getDiagonalBlock";
-static char __pyx_k_ksp_vec_work_res[] = "@ksp.vec_work_res";
-static char __pyx_k_ksp_vec_work_sol[] = "@ksp.vec_work_sol";
-static char __pyx_k_multHermitianAdd[] = "multHermitianAdd";
-static char __pyx_k_multTransposeAdd[] = "multTransposeAdd";
-static char __pyx_k_snes_python_type[] = "-snes_python_type";
-static char __pyx_k_KSPDestroy_Python[] = "KSPDestroy_Python";
-static char __pyx_k_KSPPreStep_Python[] = "KSPPreStep_Python";
-static char __pyx_k_MatDestroy_Python[] = "MatDestroy_Python";
-static char __pyx_k_MatMultAdd_Python[] = "MatMultAdd_Python";
-static char __pyx_k_PCPreSolve_Python[] = "PCPreSolve_Python";
-static char __pyx_k_PCPythonSetType_C[] = "PCPythonSetType_C";
-static char __pyx_k_SNESCreate_Python[] = "SNESCreate_Python";
-static char __pyx_k_SNESPythonSetType[] = "SNESPythonSetType";
-static char __pyx_k_TSPythonSetType_C[] = "TSPythonSetType_C";
-static char __pyx_k_TSRollBack_Python[] = "TSRollBack_Python";
-static char __pyx_k_multDiagonalBlock[] = "multDiagonalBlock";
-static char __pyx_k_solveTransposeAdd[] = "solveTransposeAdd";
-static char __pyx_k_KSPPostStep_Python[] = "KSPPostStep_Python";
-static char __pyx_k_KSPPythonSetType_C[] = "KSPPythonSetType_C";
-static char __pyx_k_MatImagPart_Python[] = "MatImagPart_Python";
-static char __pyx_k_MatPythonSetType_C[] = "MatPythonSetType_C";
-static char __pyx_k_MatRealPart_Python[] = "MatRealPart_Python";
-static char __pyx_k_MatSolveAdd_Python[] = "MatSolveAdd_Python";
-static char __pyx_k_PCPostSolve_Python[] = "PCPostSolve_Python";
-static char __pyx_k_PCPythonGetContext[] = "PCPythonGetContext";
-static char __pyx_k_PCPythonSetContext[] = "PCPythonSetContext";
-static char __pyx_k_SNESDestroy_Python[] = "SNESDestroy_Python";
-static char __pyx_k_SNESPreStep_Python[] = "SNESPreStep_Python";
-static char __pyx_k_TSAdaptStep_Python[] = "TSAdaptStep_Python";
-static char __pyx_k_TSPythonGetContext[] = "TSPythonGetContext";
-static char __pyx_k_TSPythonSetContext[] = "TSPythonSetContext";
-static char __pyx_k_TSSolveStep_Python[] = "TSSolveStep_Python";
-static char __pyx_k_applySymmetricLeft[] = "applySymmetricLeft";
-static char __pyx_k_unknown_no_yet_set[] = "unknown/no yet set";
-static char __pyx_k_KSPPythonGetContext[] = "KSPPythonGetContext";
-static char __pyx_k_KSPPythonSetContext[] = "KSPPythonSetContext";
-static char __pyx_k_MatConjugate_Python[] = "MatConjugate_Python";
-static char __pyx_k_MatDuplicate_Python[] = "MatDuplicate_Python";
-static char __pyx_k_MatPythonGetContext[] = "MatPythonGetContext";
-static char __pyx_k_MatPythonSetContext[] = "MatPythonSetContext";
-static char __pyx_k_MatSetOption_Python[] = "MatSetOption_Python";
-static char __pyx_k_SNESPostStep_Python[] = "SNESPostStep_Python";
-static char __pyx_k_SNESPythonSetType_C[] = "SNESPythonSetType_C";
-static char __pyx_k_applySymmetricRight[] = "applySymmetricRight";
-static char __pyx_k_Cannot_evaluate_step[] = "Cannot evaluate step";
-static char __pyx_k_MatCreateVecs_Python[] = "MatCreateVecs_Python";
-static char __pyx_k_SNESPythonGetContext[] = "SNESPythonGetContext ";
-static char __pyx_k_SNESPythonSetContext[] = "SNESPythonSetContext ";
-static char __pyx_k_MatAssemblyEnd_Python[] = "MatAssemblyEnd_Python";
-static char __pyx_k_MatGetDiagonalBlock_C[] = "MatGetDiagonalBlock_C";
-static char __pyx_k_MatGetDiagonal_Python[] = "MatGetDiagonal_Python";
-static char __pyx_k_MatSetDiagonal_Python[] = "MatSetDiagonal_Python";
-static char __pyx_k_MatZeroEntries_Python[] = "MatZeroEntries_Python";
-static char __pyx_k_TSInterpolate__Python[] = "TSInterpolate _Python";
-static char __pyx_k_TSStep_Python_default[] = "TSStep_Python_default";
-static char __pyx_k_PCPythonSetType_PYTHON[] = "PCPythonSetType_PYTHON";
-static char __pyx_k_PetscPythonRegisterAll[] = "PetscPythonRegisterAll";
-static char __pyx_k_TSEvaluateStep__Python[] = "TSEvaluateStep _Python";
-static char __pyx_k_TSPythonSetType_PYTHON[] = "TSPythonSetType_PYTHON";
-static char __pyx_k_KSPBuildResidual_Python[] = "KSPBuildResidual_Python";
-static char __pyx_k_KSPBuildSolution_Python[] = "KSPBuildSolution_Python";
-static char __pyx_k_KSPPythonSetType_PYTHON[] = "KSPPythonSetType_PYTHON";
-static char __pyx_k_KSPSolve_Python_default[] = "KSPSolve_Python_default";
-static char __pyx_k_MatAssemblyBegin_Python[] = "MatAssemblyBegin_Python";
-static char __pyx_k_MatDiagonalScale_Python[] = "MatDiagonalScale_Python";
-static char __pyx_k_MatMultHermitian_Python[] = "MatMultHermitian_Python";
-static char __pyx_k_MatMultTranspose_Python[] = "MatMultTranspose_Python";
-static char __pyx_k_MatPythonSetType_PYTHON[] = "MatPythonSetType_PYTHON";
-static char __pyx_k_PCApplyTranspose_Python[] = "PCApplyTranspose_Python";
-static char __pyx_k_PCSetFromOptions_Python[] = "PCSetFromOptions_Python";
-static char __pyx_k_SNESStep_Python_default[] = "SNESStep_Python_default";
-static char __pyx_k_TSSetFromOptions_Python[] = "TSSetFromOptions_Python";
-static char __pyx_k_KSPSetFromOptions_Python[] = "KSPSetFromOptions_Python";
-static char __pyx_k_MatSetFromOptions_Python[] = "MatSetFromOptions_Python";
-static char __pyx_k_MatSolveTranspose_Python[] = "MatSolveTranspose_Python";
-static char __pyx_k_SNESPythonSetType_PYTHON[] = "SNESPythonSetType_PYTHON";
-static char __pyx_k_SNESSolve_Python_default[] = "SNESSolve_Python_default";
-static char __pyx_k_SNESSetFromOptions_Python[] = "SNESSetFromOptions_Python";
-static char __pyx_k_MatGetDiagonalBlock_Python[] = "MatGetDiagonalBlock_Python";
-static char __pyx_k_MatMultHermitianAdd_Python[] = "MatMultHermitianAdd_Python";
-static char __pyx_k_MatMultTransposeAdd_Python[] = "MatMultTransposeAdd_Python";
-static char __pyx_k_MatMultDiagonalBlock_Python[] = "MatMultDiagonalBlock_Python";
-static char __pyx_k_MatSolveTransposeAdd_Python[] = "MatSolveTransposeAdd_Python";
-static char __pyx_k_PCApplySymmetricLeft_Python[] = "PCApplySymmetricLeft_Python";
-static char __pyx_k_PCApplySymmetricRight_Python[] = "PCApplySymmetricRight_Python";
-static char __pyx_k_PetscPythonMonitorSet_Python[] = "PetscPythonMonitorSet_Python";
-static char __pyx_k_Python_context_not_set_call_one[] = "Python context not set, call one of \n * MatPythonSetType(mat,\"[package.]module.class\")\n * MatSetFromOptions(mat) and pass option -mat_python_type [package.]module.class";
-static char __pyx_k_Python_package_module_class_func[] = "Python [package.]module[.{class|function}]";
-static char __pyx_k_Python_context_not_set_call_one_2[] = "Python context not set, call one of \n * PCPythonSetType(pc,\"[package.]module.class\")\n * PCSetFromOptions(pc) and pass option -pc_python_type [package.]module.class";
-static char __pyx_k_Python_context_not_set_call_one_3[] = "Python context not set, call one of \n * KSPPythonSetType(ksp,\"[package.]module.class\")\n * KSPSetFromOptions(ksp) and pass option -ksp_python_type [package.]module.class";
-static char __pyx_k_Python_context_not_set_call_one_4[] = "Python context not set, call one of \n * SNESPythonSetType(snes,\"[package.]module.class\")\n * SNESSetFromOptions(snes) and pass option -snes_python_type [package.]module.class";
-static char __pyx_k_Python_context_not_set_call_one_5[] = "Python context not set, call one of \n * TSPythonSetType(ts,\"[package.]module.class\")\n * TSSetFromOptions(ts) and pass option -ts_python_type [package.]module.class";
+static const char __pyx_k_[] = ":";
+static const char __pyx_k__3[] = ".";
+static const char __pyx_k__5[] = ",";
+static const char __pyx_k_rU[] = "rU";
+static const char __pyx_k_SOR[] = "SOR";
+static const char __pyx_k_copy[] = "copy";
+static const char __pyx_k_dict[] = "__dict__";
+static const char __pyx_k_exec[] = "exec";
+static const char __pyx_k_file[] = "__file__";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_mult[] = "mult";
+static const char __pyx_k_name[] = "__name__";
+static const char __pyx_k_norm[] = "norm";
+static const char __pyx_k_open[] = "open";
+static const char __pyx_k_read[] = "read";
+static const char __pyx_k_step[] = "step";
+static const char __pyx_k_view[] = "view";
+static const char __pyx_k_Error[] = "Error";
+static const char __pyx_k_apply[] = "apply";
+static const char __pyx_k_class[] = "__class__";
+static const char __pyx_k_close[] = "close";
+static const char __pyx_k_reset[] = "reset";
+static const char __pyx_k_scale[] = "scale";
+static const char __pyx_k_setUp[] = "setUp";
+static const char __pyx_k_shift[] = "shift";
+static const char __pyx_k_solve[] = "solve";
+static const char __pyx_k_split[] = "split";
+static const char __pyx_k_create[] = "create";
+static const char __pyx_k_encode[] = "encode";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_module[] = "__module__";
+static const char __pyx_k_rsplit[] = "rsplit";
+static const char __pyx_k_compile[] = "compile";
+static const char __pyx_k_destroy[] = "destroy";
+static const char __pyx_k_monitor[] = "monitor";
+static const char __pyx_k_multAdd[] = "multAdd";
+static const char __pyx_k_package[] = "__package__";
+static const char __pyx_k_preStep[] = "preStep";
+static const char __pyx_k_assembly[] = "assembly";
+static const char __pyx_k_builtins[] = "__builtins__";
+static const char __pyx_k_imagPart[] = "imagPart";
+static const char __pyx_k_postStep[] = "postStep";
+static const char __pyx_k_preSolve[] = "preSolve";
+static const char __pyx_k_realPart[] = "realPart";
+static const char __pyx_k_rollback[] = "rollback";
+static const char __pyx_k_solveAdd[] = "solveAdd";
+static const char __pyx_k_adaptStep[] = "adaptStep";
+static const char __pyx_k_conjugate[] = "conjugate";
+static const char __pyx_k_duplicate[] = "duplicate";
+static const char __pyx_k_postSolve[] = "postSolve";
+static const char __pyx_k_setOption[] = "setOption";
+static const char __pyx_k_solveStep[] = "solveStep";
+static const char __pyx_k_createVecs[] = "createVecs";
+static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+static const char __pyx_k_setMonitor[] = "setMonitor";
+static const char __pyx_k_assemblyEnd[] = "assemblyEnd";
+static const char __pyx_k_getDiagonal[] = "getDiagonal";
+static const char __pyx_k_interpolate[] = "interpolate";
+static const char __pyx_k_setDiagonal[] = "setDiagonal";
+static const char __pyx_k_zeroEntries[] = "zeroEntries";
+static const char __pyx_k_evaluatestep[] = "evaluatestep";
+static const char __pyx_k_getSubMatrix[] = "getSubMatrix";
+static const char __pyx_k_assemblyBegin[] = "assemblyBegin";
+static const char __pyx_k_buildResidual[] = "buildResidual";
+static const char __pyx_k_buildSolution[] = "buildSolution";
+static const char __pyx_k_diagonalScale[] = "diagonalScale";
+static const char __pyx_k_multHermitian[] = "multHermitian";
+static const char __pyx_k_multTranspose[] = "multTranspose";
+static const char __pyx_k_stepTranspose[] = "stepTranspose";
+static const char __pyx_k_applyTranspose[] = "applyTranspose";
+static const char __pyx_k_petsc4py_PETSc[] = "petsc4py.PETSc";
+static const char __pyx_k_setFromOptions[] = "setFromOptions";
+static const char __pyx_k_solveTranspose[] = "solveTranspose";
+static const char __pyx_k_formSNESFunction[] = "formSNESFunction";
+static const char __pyx_k_formSNESJacobian[] = "formSNESJacobian";
+static const char __pyx_k_getDiagonalBlock[] = "getDiagonalBlock";
+static const char __pyx_k_multHermitianAdd[] = "multHermitianAdd";
+static const char __pyx_k_multTransposeAdd[] = "multTransposeAdd";
+static const char __pyx_k_multDiagonalBlock[] = "multDiagonalBlock";
+static const char __pyx_k_solveTransposeAdd[] = "solveTransposeAdd";
+static const char __pyx_k_applySymmetricLeft[] = "applySymmetricLeft";
+static const char __pyx_k_applySymmetricRight[] = "applySymmetricRight";
+static PyObject *__pyx_kp_s_;
 static PyObject *__pyx_n_s_Error;
 static PyObject *__pyx_n_s_SOR;
-static PyObject *__pyx_kp_s__2;
-static PyObject *__pyx_kp_s__4;
-static PyObject *__pyx_kp_s__6;
+static PyObject *__pyx_kp_s__3;
+static PyObject *__pyx_kp_s__5;
 static PyObject *__pyx_n_s_adaptStep;
 static PyObject *__pyx_n_s_apply;
 static PyObject *__pyx_n_s_applySymmetricLeft;
@@ -1985,10 +1970,17 @@ static PyObject *__pyx_n_s_step;
 static PyObject *__pyx_n_s_stepTranspose;
 static PyObject *__pyx_n_s_view;
 static PyObject *__pyx_n_s_zeroEntries;
+static PyObject *__pyx_pf_11libpetsc4py_6_PyObj___getattr__(struct __pyx_obj_11libpetsc4py__PyObj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */
+static PyObject *__pyx_tp_new_11libpetsc4py__PyObj(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_11libpetsc4py__PyMat(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_11libpetsc4py__PyPC(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_11libpetsc4py__PyKSP(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_11libpetsc4py__PySNES(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_11libpetsc4py__PyTS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_int_1;
-static PyObject *__pyx_tuple__3;
-static PyObject *__pyx_tuple__5;
-static PyObject *__pyx_tuple__7;
+static PyObject *__pyx_tuple__2;
+static PyObject *__pyx_tuple__4;
+static PyObject *__pyx_tuple__6;
 
 /* "libpetsc4py.pyx":28
  *     void initlibpetsc4py() nogil except *
@@ -2000,9 +1992,6 @@ static PyObject *__pyx_tuple__7;
 
 int import_libpetsc4py(void) {
   int __pyx_r;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
 
   /* "libpetsc4py.pyx":29
  * 
@@ -2011,7 +2000,7 @@ int import_libpetsc4py(void) {
  *     return 0
  * 
  */
-  initlibpetsc4py(); if (unlikely(__Pyx_ErrOccurredWithGIL())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  initlibpetsc4py(); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 29, __pyx_L1_error)
 
   /* "libpetsc4py.pyx":30
  * cdef public int import_libpetsc4py() nogil except -1:
@@ -2047,7 +2036,7 @@ int import_libpetsc4py(void) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":81
+/* "libpetsc4py.pyx":83
  *     PetscErrorCode PetscViewerStringSPrintf(PetscViewer,char[],...)
  * 
  * cdef inline object      toInt(PetscInt value):          return value             # <<<<<<<<<<<<<<
@@ -2059,12 +2048,9 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toInt(PetscInt __pyx_v_valu
   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);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2081,7 +2067,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toInt(PetscInt __pyx_v_valu
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":82
+/* "libpetsc4py.pyx":84
  * 
  * cdef inline object      toInt(PetscInt value):          return value
  * cdef inline PetscInt    asInt(object value)  except?-1: return value             # <<<<<<<<<<<<<<
@@ -2093,24 +2079,21 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_asInt(PyObject *__pyx_v_valu
   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);
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __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(0, 84, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("libpetsc4py.asInt", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __pyx_r = -1L;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":83
+/* "libpetsc4py.pyx":85
  * cdef inline object      toInt(PetscInt value):          return value
  * cdef inline PetscInt    asInt(object value)  except?-1: return value
  * cdef inline object      toReal(PetscReal value):        return value             # <<<<<<<<<<<<<<
@@ -2122,12 +2105,9 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toReal(PetscReal __pyx_v_va
   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);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2144,7 +2124,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toReal(PetscReal __pyx_v_va
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":84
+/* "libpetsc4py.pyx":86
  * cdef inline PetscInt    asInt(object value)  except?-1: return value
  * cdef inline object      toReal(PetscReal value):        return value
  * cdef inline PetscReal   asReal(object value) except?-1: return value             # <<<<<<<<<<<<<<
@@ -2156,11 +2136,8 @@ static CYTHON_INLINE PetscReal __pyx_f_11libpetsc4py_asReal(PyObject *__pyx_v_va
   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);
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __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(0, 86, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
@@ -2173,7 +2150,7 @@ static CYTHON_INLINE PetscReal __pyx_f_11libpetsc4py_asReal(PyObject *__pyx_v_va
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":101
+/* "libpetsc4py.pyx":103
  * cdef int   istack = 0
  * 
  * cdef inline void FunctionBegin(char name[]) nogil:             # <<<<<<<<<<<<<<
@@ -2184,7 +2161,7 @@ static CYTHON_INLINE PetscReal __pyx_f_11libpetsc4py_asReal(PyObject *__pyx_v_va
 static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name) {
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":103
+  /* "libpetsc4py.pyx":105
  * cdef inline void FunctionBegin(char name[]) nogil:
  *     global FUNCT
  *     FUNCT = name             # <<<<<<<<<<<<<<
@@ -2193,7 +2170,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
   __pyx_v_11libpetsc4py_FUNCT = __pyx_v_name;
 
-  /* "libpetsc4py.pyx":105
+  /* "libpetsc4py.pyx":107
  *     FUNCT = name
  *     global fstack, istack
  *     fstack[istack] = FUNCT             # <<<<<<<<<<<<<<
@@ -2202,7 +2179,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
   (__pyx_v_11libpetsc4py_fstack[__pyx_v_11libpetsc4py_istack]) = __pyx_v_11libpetsc4py_FUNCT;
 
-  /* "libpetsc4py.pyx":106
+  /* "libpetsc4py.pyx":108
  *     global fstack, istack
  *     fstack[istack] = FUNCT
  *     istack += 1             # <<<<<<<<<<<<<<
@@ -2211,17 +2188,17 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
   __pyx_v_11libpetsc4py_istack = (__pyx_v_11libpetsc4py_istack + 1);
 
-  /* "libpetsc4py.pyx":107
+  /* "libpetsc4py.pyx":109
  *     fstack[istack] = FUNCT
  *     istack += 1
  *     if istack >= 1024:             # <<<<<<<<<<<<<<
  *         istack = 0
  *     return
  */
-  __pyx_t_1 = ((__pyx_v_11libpetsc4py_istack >= 1024) != 0);
+  __pyx_t_1 = ((__pyx_v_11libpetsc4py_istack >= 0x400) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":108
+    /* "libpetsc4py.pyx":110
  *     istack += 1
  *     if istack >= 1024:
  *         istack = 0             # <<<<<<<<<<<<<<
@@ -2229,11 +2206,17 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  * 
  */
     __pyx_v_11libpetsc4py_istack = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":109
+ *     fstack[istack] = FUNCT
+ *     istack += 1
+ *     if istack >= 1024:             # <<<<<<<<<<<<<<
+ *         istack = 0
+ *     return
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":109
+  /* "libpetsc4py.pyx":111
  *     if istack >= 1024:
  *         istack = 0
  *     return             # <<<<<<<<<<<<<<
@@ -2242,7 +2225,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":101
+  /* "libpetsc4py.pyx":103
  * cdef int   istack = 0
  * 
  * cdef inline void FunctionBegin(char name[]) nogil:             # <<<<<<<<<<<<<<
@@ -2254,7 +2237,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
   __pyx_L0:;
 }
 
-/* "libpetsc4py.pyx":111
+/* "libpetsc4py.pyx":113
  *     return
  * 
  * cdef inline PetscErrorCode FunctionEnd() nogil:             # <<<<<<<<<<<<<<
@@ -2266,7 +2249,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
   PetscErrorCode __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":113
+  /* "libpetsc4py.pyx":115
  * cdef inline PetscErrorCode FunctionEnd() nogil:
  *     global FUNCT
  *     FUNCT = NULL             # <<<<<<<<<<<<<<
@@ -2275,7 +2258,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
  */
   __pyx_v_11libpetsc4py_FUNCT = NULL;
 
-  /* "libpetsc4py.pyx":115
+  /* "libpetsc4py.pyx":117
  *     FUNCT = NULL
  *     global fstack, istack
  *     istack -= 1             # <<<<<<<<<<<<<<
@@ -2284,7 +2267,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
  */
   __pyx_v_11libpetsc4py_istack = (__pyx_v_11libpetsc4py_istack - 1);
 
-  /* "libpetsc4py.pyx":116
+  /* "libpetsc4py.pyx":118
  *     global fstack, istack
  *     istack -= 1
  *     if istack < 0:             # <<<<<<<<<<<<<<
@@ -2294,19 +2277,25 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
   __pyx_t_1 = ((__pyx_v_11libpetsc4py_istack < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":117
+    /* "libpetsc4py.pyx":119
  *     istack -= 1
  *     if istack < 0:
  *         istack = 1024             # <<<<<<<<<<<<<<
  *     FUNCT = fstack[istack]
  *     return 0
  */
-    __pyx_v_11libpetsc4py_istack = 1024;
-    goto __pyx_L3;
+    __pyx_v_11libpetsc4py_istack = 0x400;
+
+    /* "libpetsc4py.pyx":118
+ *     global fstack, istack
+ *     istack -= 1
+ *     if istack < 0:             # <<<<<<<<<<<<<<
+ *         istack = 1024
+ *     FUNCT = fstack[istack]
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":118
+  /* "libpetsc4py.pyx":120
  *     if istack < 0:
  *         istack = 1024
  *     FUNCT = fstack[istack]             # <<<<<<<<<<<<<<
@@ -2315,7 +2304,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
  */
   __pyx_v_11libpetsc4py_FUNCT = (__pyx_v_11libpetsc4py_fstack[__pyx_v_11libpetsc4py_istack]);
 
-  /* "libpetsc4py.pyx":119
+  /* "libpetsc4py.pyx":121
  *         istack = 1024
  *     FUNCT = fstack[istack]
  *     return 0             # <<<<<<<<<<<<<<
@@ -2325,7 +2314,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":111
+  /* "libpetsc4py.pyx":113
  *     return
  * 
  * cdef inline PetscErrorCode FunctionEnd() nogil:             # <<<<<<<<<<<<<<
@@ -2338,7 +2327,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":121
+/* "libpetsc4py.pyx":123
  *     return 0
  * 
  * cdef PetscErrorCode PetscSETERR(PetscErrorCode ierr,char msg[]) nogil:             # <<<<<<<<<<<<<<
@@ -2349,7 +2338,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
 static PetscErrorCode __pyx_f_11libpetsc4py_PetscSETERR(PetscErrorCode __pyx_v_ierr, char *__pyx_v_msg) {
   PetscErrorCode __pyx_r;
 
-  /* "libpetsc4py.pyx":123
+  /* "libpetsc4py.pyx":125
  * cdef PetscErrorCode PetscSETERR(PetscErrorCode ierr,char msg[]) nogil:
  *     global fstack, istack
  *     istack = 0; fstack[istack] = NULL;             # <<<<<<<<<<<<<<
@@ -2359,7 +2348,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscSETERR(PetscErrorCode __pyx_v_i
   __pyx_v_11libpetsc4py_istack = 0;
   (__pyx_v_11libpetsc4py_fstack[__pyx_v_11libpetsc4py_istack]) = NULL;
 
-  /* "libpetsc4py.pyx":125
+  /* "libpetsc4py.pyx":127
  *     istack = 0; fstack[istack] = NULL;
  *     global FUNCT
  *     return PetscERROR(PETSC_COMM_SELF,FUNCT,ierr,             # <<<<<<<<<<<<<<
@@ -2369,7 +2358,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscSETERR(PetscErrorCode __pyx_v_i
   __pyx_r = PetscERROR(PETSC_COMM_SELF, __pyx_v_11libpetsc4py_FUNCT, __pyx_v_ierr, PETSC_ERROR_INITIAL, __pyx_v_msg, NULL);
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":121
+  /* "libpetsc4py.pyx":123
  *     return 0
  * 
  * cdef PetscErrorCode PetscSETERR(PetscErrorCode ierr,char msg[]) nogil:             # <<<<<<<<<<<<<<
@@ -2382,7 +2371,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscSETERR(PetscErrorCode __pyx_v_i
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":128
+/* "libpetsc4py.pyx":130
  *                       PETSC_ERROR_INITIAL, msg, NULL)
  * 
  * cdef PetscErrorCode PetscCHKERR(PetscErrorCode ierr) nogil:             # <<<<<<<<<<<<<<
@@ -2393,7 +2382,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscSETERR(PetscErrorCode __pyx_v_i
 static PetscErrorCode __pyx_f_11libpetsc4py_PetscCHKERR(PetscErrorCode __pyx_v_ierr) {
   PetscErrorCode __pyx_r;
 
-  /* "libpetsc4py.pyx":130
+  /* "libpetsc4py.pyx":132
  * cdef PetscErrorCode PetscCHKERR(PetscErrorCode ierr) nogil:
  *     global fstack, istack
  *     istack = 0; fstack[istack] = NULL;             # <<<<<<<<<<<<<<
@@ -2403,17 +2392,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscCHKERR(PetscErrorCode __pyx_v_i
   __pyx_v_11libpetsc4py_istack = 0;
   (__pyx_v_11libpetsc4py_fstack[__pyx_v_11libpetsc4py_istack]) = NULL;
 
-  /* "libpetsc4py.pyx":132
+  /* "libpetsc4py.pyx":134
  *     istack = 0; fstack[istack] = NULL;
  *     global FUNCT
  *     return PetscERROR(PETSC_COMM_SELF,FUNCT,ierr,             # <<<<<<<<<<<<<<
  *                       PETSC_ERROR_REPEAT, b"", NULL)
  * 
  */
-  __pyx_r = PetscERROR(PETSC_COMM_SELF, __pyx_v_11libpetsc4py_FUNCT, __pyx_v_ierr, PETSC_ERROR_REPEAT, __pyx_k_, NULL);
+  __pyx_r = PetscERROR(PETSC_COMM_SELF, __pyx_v_11libpetsc4py_FUNCT, __pyx_v_ierr, PETSC_ERROR_REPEAT, ((char *)""), NULL);
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":128
+  /* "libpetsc4py.pyx":130
  *                       PETSC_ERROR_INITIAL, msg, NULL)
  * 
  * cdef PetscErrorCode PetscCHKERR(PetscErrorCode ierr) nogil:             # <<<<<<<<<<<<<<
@@ -2426,7 +2415,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscCHKERR(PetscErrorCode __pyx_v_i
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":143
+/* "libpetsc4py.pyx":145
  * from petsc4py.PETSc import Error as PetscError
  * 
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:             # <<<<<<<<<<<<<<
@@ -2439,15 +2428,12 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
   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("PythonSETERR", 0);
 
-  /* "libpetsc4py.pyx":144
+  /* "libpetsc4py.pyx":146
  * 
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:
  *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
@@ -2457,7 +2443,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
   __pyx_t_1 = ((((void *)__pyx_v_11libpetsc4py_PetscError) != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":145
+    /* "libpetsc4py.pyx":147
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:
  *     if (<void*>PetscError) != NULL:
  *         PyErr_SetObject(PetscError, <long>ierr)             # <<<<<<<<<<<<<<
@@ -2466,25 +2452,33 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
  */
     __pyx_t_2 = __pyx_v_11libpetsc4py_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[0]; __pyx_lineno = 145; __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(0, 147, __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;
+
+    /* "libpetsc4py.pyx":146
+ * 
+ * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:
+ *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
+ *         PyErr_SetObject(PetscError, <long>ierr)
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":147
+  /* "libpetsc4py.pyx":149
  *         PyErr_SetObject(PetscError, <long>ierr)
  *     else:
  *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)             # <<<<<<<<<<<<<<
  * 
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:
  */
+  /*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[0]; __pyx_lineno = 147; __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(0, 149, __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;
@@ -2492,7 +2486,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":143
+  /* "libpetsc4py.pyx":145
  * from petsc4py.PETSc import Error as PetscError
  * 
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:             # <<<<<<<<<<<<<<
@@ -2513,7 +2507,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
   #endif
 }
 
-/* "libpetsc4py.pyx":149
+/* "libpetsc4py.pyx":151
  *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
  * 
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:             # <<<<<<<<<<<<<<
@@ -2525,7 +2519,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":150
+  /* "libpetsc4py.pyx":152
  * 
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:
  *     if ierr == 0:             # <<<<<<<<<<<<<<
@@ -2535,7 +2529,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   __pyx_t_1 = ((__pyx_v_ierr == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":151
+    /* "libpetsc4py.pyx":153
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:
  *     if ierr == 0:
  *         return 0             # <<<<<<<<<<<<<<
@@ -2544,9 +2538,17 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  */
     __pyx_r = 0;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":152
+ * 
+ * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:
+ *     if ierr == 0:             # <<<<<<<<<<<<<<
+ *         return 0
+ *     if ierr == PETSC_ERR_PYTHON:
+ */
   }
 
-  /* "libpetsc4py.pyx":152
+  /* "libpetsc4py.pyx":154
  *     if ierr == 0:
  *         return 0
  *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
@@ -2556,7 +2558,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   __pyx_t_1 = ((__pyx_v_ierr == PETSC_ERR_PYTHON) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":154
+    /* "libpetsc4py.pyx":156
  *     if ierr == PETSC_ERR_PYTHON:
  *         #PetscCHKERR(ierr)
  *         return -1             # <<<<<<<<<<<<<<
@@ -2565,9 +2567,17 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  */
     __pyx_r = -1;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":154
+ *     if ierr == 0:
+ *         return 0
+ *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
+ *         #PetscCHKERR(ierr)
+ *         return -1
+ */
   }
 
-  /* "libpetsc4py.pyx":155
+  /* "libpetsc4py.pyx":157
  *         #PetscCHKERR(ierr)
  *         return -1
  *     if Py_IsInitialized():             # <<<<<<<<<<<<<<
@@ -2577,7 +2587,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   __pyx_t_1 = (Py_IsInitialized() != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":156
+    /* "libpetsc4py.pyx":158
  *         return -1
  *     if Py_IsInitialized():
  *         PythonSETERR(ierr)             # <<<<<<<<<<<<<<
@@ -2585,11 +2595,17 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  *     return -1
  */
     __pyx_f_11libpetsc4py_PythonSETERR(__pyx_v_ierr);
-    goto __pyx_L5;
+
+    /* "libpetsc4py.pyx":157
+ *         #PetscCHKERR(ierr)
+ *         return -1
+ *     if Py_IsInitialized():             # <<<<<<<<<<<<<<
+ *         PythonSETERR(ierr)
+ *     PetscCHKERR(ierr)
+ */
   }
-  __pyx_L5:;
 
-  /* "libpetsc4py.pyx":157
+  /* "libpetsc4py.pyx":159
  *     if Py_IsInitialized():
  *         PythonSETERR(ierr)
  *     PetscCHKERR(ierr)             # <<<<<<<<<<<<<<
@@ -2598,7 +2614,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  */
   __pyx_f_11libpetsc4py_PetscCHKERR(__pyx_v_ierr);
 
-  /* "libpetsc4py.pyx":158
+  /* "libpetsc4py.pyx":160
  *         PythonSETERR(ierr)
  *     PetscCHKERR(ierr)
  *     return -1             # <<<<<<<<<<<<<<
@@ -2608,7 +2624,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   __pyx_r = -1;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":149
+  /* "libpetsc4py.pyx":151
  *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
  * 
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:             # <<<<<<<<<<<<<<
@@ -2621,7 +2637,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":160
+/* "libpetsc4py.pyx":162
  *     return -1
  * 
  * cdef PetscErrorCode UNSUPPORTED(char msg[]) nogil:             # <<<<<<<<<<<<<<
@@ -2632,17 +2648,17 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
 static PetscErrorCode __pyx_f_11libpetsc4py_UNSUPPORTED(char *__pyx_v_msg) {
   PetscErrorCode __pyx_r;
 
-  /* "libpetsc4py.pyx":162
+  /* "libpetsc4py.pyx":164
  * cdef PetscErrorCode UNSUPPORTED(char msg[]) nogil:
  *     global FUNCT
  *     return PetscERROR(PETSC_COMM_SELF,FUNCT,PETSC_ERR_USER,             # <<<<<<<<<<<<<<
  *                       PETSC_ERROR_INITIAL,b"method %s()",msg)
  * 
  */
-  __pyx_r = PetscERROR(PETSC_COMM_SELF, __pyx_v_11libpetsc4py_FUNCT, PETSC_ERR_USER, PETSC_ERROR_INITIAL, __pyx_k_method_s, __pyx_v_msg);
+  __pyx_r = PetscERROR(PETSC_COMM_SELF, __pyx_v_11libpetsc4py_FUNCT, PETSC_ERR_USER, PETSC_ERROR_INITIAL, ((char *)"method %s()"), __pyx_v_msg);
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":160
+  /* "libpetsc4py.pyx":162
  *     return -1
  * 
  * cdef PetscErrorCode UNSUPPORTED(char msg[]) nogil:             # <<<<<<<<<<<<<<
@@ -2655,7 +2671,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_UNSUPPORTED(char *__pyx_v_msg) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":167
+/* "libpetsc4py.pyx":169
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscInt getRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2668,7 +2684,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
   PetscInt __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":168
+  /* "libpetsc4py.pyx":170
  * 
  * cdef inline PetscInt getRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2677,7 +2693,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":169
+  /* "libpetsc4py.pyx":171
  * cdef inline PetscInt getRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return 0             # <<<<<<<<<<<<<<
@@ -2689,20 +2705,20 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
     __pyx_r = 0;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":170
+  /* "libpetsc4py.pyx":172
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return 0
  *     else: return obj.refct             # <<<<<<<<<<<<<<
  * 
  * cdef inline void addRef(void *pobj) nogil:
  */
+  /*else*/ {
     __pyx_r = __pyx_v_obj->refct;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":167
+  /* "libpetsc4py.pyx":169
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscInt getRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2715,7 +2731,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":172
+/* "libpetsc4py.pyx":174
  *     else: return obj.refct
  * 
  * cdef inline void addRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2727,7 +2743,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_addRef(void *__pyx_v_pobj) {
   PetscObject __pyx_v_obj;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":173
+  /* "libpetsc4py.pyx":175
  * 
  * cdef inline void addRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2736,7 +2752,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_addRef(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":174
+  /* "libpetsc4py.pyx":176
  * cdef inline void addRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj != NULL: obj.refct += 1             # <<<<<<<<<<<<<<
@@ -2746,11 +2762,9 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_addRef(void *__pyx_v_pobj) {
   __pyx_t_1 = ((__pyx_v_obj != NULL) != 0);
   if (__pyx_t_1) {
     __pyx_v_obj->refct = (__pyx_v_obj->refct + 1);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":172
+  /* "libpetsc4py.pyx":174
  *     else: return obj.refct
  * 
  * cdef inline void addRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2761,7 +2775,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_addRef(void *__pyx_v_pobj) {
   /* function exit code */
 }
 
-/* "libpetsc4py.pyx":176
+/* "libpetsc4py.pyx":178
  *     if obj != NULL: obj.refct += 1
  * 
  * cdef inline void delRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2773,7 +2787,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_delRef(void *__pyx_v_pobj) {
   PetscObject __pyx_v_obj;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":177
+  /* "libpetsc4py.pyx":179
  * 
  * cdef inline void delRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2782,7 +2796,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_delRef(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":178
+  /* "libpetsc4py.pyx":180
  * cdef inline void delRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj != NULL: obj.refct -= 1             # <<<<<<<<<<<<<<
@@ -2792,11 +2806,9 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_delRef(void *__pyx_v_pobj) {
   __pyx_t_1 = ((__pyx_v_obj != NULL) != 0);
   if (__pyx_t_1) {
     __pyx_v_obj->refct = (__pyx_v_obj->refct - 1);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":176
+  /* "libpetsc4py.pyx":178
  *     if obj != NULL: obj.refct += 1
  * 
  * cdef inline void delRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2807,7 +2819,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_delRef(void *__pyx_v_pobj) {
   /* function exit code */
 }
 
-/* "libpetsc4py.pyx":180
+/* "libpetsc4py.pyx":182
  *     if obj != NULL: obj.refct -= 1
  * 
  * cdef inline PetscObject newRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2821,7 +2833,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
   PetscObject __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":181
+  /* "libpetsc4py.pyx":183
  * 
  * cdef inline PetscObject newRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2830,7 +2842,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":182
+  /* "libpetsc4py.pyx":184
  * cdef inline PetscObject newRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     cdef int ierr = 0             # <<<<<<<<<<<<<<
@@ -2839,7 +2851,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
  */
   __pyx_v_ierr = 0;
 
-  /* "libpetsc4py.pyx":183
+  /* "libpetsc4py.pyx":185
  *     cdef PetscObject obj = <PetscObject>pobj
  *     cdef int ierr = 0
  *     if obj != NULL:             # <<<<<<<<<<<<<<
@@ -2849,7 +2861,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
   __pyx_t_1 = ((__pyx_v_obj != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":184
+    /* "libpetsc4py.pyx":186
  *     cdef int ierr = 0
  *     if obj != NULL:
  *         ierr = PetscObjectReference(obj)             # <<<<<<<<<<<<<<
@@ -2858,7 +2870,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
  */
     __pyx_v_ierr = PetscObjectReference(__pyx_v_obj);
 
-    /* "libpetsc4py.pyx":185
+    /* "libpetsc4py.pyx":187
  *     if obj != NULL:
  *         ierr = PetscObjectReference(obj)
  *         if ierr: return NULL # XXX warning!             # <<<<<<<<<<<<<<
@@ -2870,11 +2882,17 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
       __pyx_r = NULL;
       goto __pyx_L0;
     }
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":185
+ *     cdef PetscObject obj = <PetscObject>pobj
+ *     cdef int ierr = 0
+ *     if obj != NULL:             # <<<<<<<<<<<<<<
+ *         ierr = PetscObjectReference(obj)
+ *         if ierr: return NULL # XXX warning!
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":186
+  /* "libpetsc4py.pyx":188
  *         ierr = PetscObjectReference(obj)
  *         if ierr: return NULL # XXX warning!
  *     return obj             # <<<<<<<<<<<<<<
@@ -2884,7 +2902,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
   __pyx_r = __pyx_v_obj;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":180
+  /* "libpetsc4py.pyx":182
  *     if obj != NULL: obj.refct -= 1
  * 
  * cdef inline PetscObject newRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2897,7 +2915,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":188
+/* "libpetsc4py.pyx":190
  *     return obj
  * 
  * cdef inline char* getPrefix(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2910,7 +2928,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
   char *__pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":189
+  /* "libpetsc4py.pyx":191
  * 
  * cdef inline char* getPrefix(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2919,7 +2937,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":190
+  /* "libpetsc4py.pyx":192
  * cdef inline char* getPrefix(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return NULL             # <<<<<<<<<<<<<<
@@ -2932,7 +2950,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":191
+  /* "libpetsc4py.pyx":193
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return NULL
  *     return obj.prefix             # <<<<<<<<<<<<<<
@@ -2942,7 +2960,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
   __pyx_r = __pyx_v_obj->prefix;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":188
+  /* "libpetsc4py.pyx":190
  *     return obj
  * 
  * cdef inline char* getPrefix(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2955,7 +2973,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":193
+/* "libpetsc4py.pyx":195
  *     return obj.prefix
  * 
  * cdef inline int getCommSize(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2969,7 +2987,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":194
+  /* "libpetsc4py.pyx":196
  * 
  * cdef inline int getCommSize(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2978,7 +2996,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":195
+  /* "libpetsc4py.pyx":197
  * cdef inline int getCommSize(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return 0             # <<<<<<<<<<<<<<
@@ -2991,7 +3009,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":196
+  /* "libpetsc4py.pyx":198
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return 0
  *     cdef int size = 0             # <<<<<<<<<<<<<<
@@ -3000,7 +3018,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
  */
   __pyx_v_size = 0;
 
-  /* "libpetsc4py.pyx":197
+  /* "libpetsc4py.pyx":199
  *     if obj == NULL: return 0
  *     cdef int size = 0
  *     MPI_Comm_size(obj.comm,&size)             # <<<<<<<<<<<<<<
@@ -3009,7 +3027,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
  */
   MPI_Comm_size(__pyx_v_obj->comm, (&__pyx_v_size));
 
-  /* "libpetsc4py.pyx":198
+  /* "libpetsc4py.pyx":200
  *     cdef int size = 0
  *     MPI_Comm_size(obj.comm,&size)
  *     return size             # <<<<<<<<<<<<<<
@@ -3019,7 +3037,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
   __pyx_r = __pyx_v_size;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":193
+  /* "libpetsc4py.pyx":195
  *     return obj.prefix
  * 
  * cdef inline int getCommSize(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -3032,7 +3050,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":200
+/* "libpetsc4py.pyx":202
  *     return size
  * 
  * cdef inline Viewer Viewer_(PetscViewer p):             # <<<<<<<<<<<<<<
@@ -3045,25 +3063,22 @@ static CYTHON_INLINE struct PyPetscViewerObject *__pyx_f_11libpetsc4py_Viewer_(P
   struct PyPetscViewerObject *__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("Viewer_", 0);
 
-  /* "libpetsc4py.pyx":201
+  /* "libpetsc4py.pyx":203
  * 
  * cdef inline Viewer Viewer_(PetscViewer p):
  *     cdef Viewer ob = Viewer.__new__(Viewer)             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(p)
  *     return ob
  */
-  __pyx_t_1 = __Pyx_tp_new(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) __PYX_ERR(0, 203, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscViewerObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":202
+  /* "libpetsc4py.pyx":204
  * cdef inline Viewer Viewer_(PetscViewer p):
  *     cdef Viewer ob = Viewer.__new__(Viewer)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3072,7 +3087,7 @@ static CYTHON_INLINE struct PyPetscViewerObject *__pyx_f_11libpetsc4py_Viewer_(P
  */
   (__pyx_v_ob->__pyx_base.obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_p);
 
-  /* "libpetsc4py.pyx":203
+  /* "libpetsc4py.pyx":205
  *     cdef Viewer ob = Viewer.__new__(Viewer)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3084,7 +3099,7 @@ static CYTHON_INLINE struct PyPetscViewerObject *__pyx_f_11libpetsc4py_Viewer_(P
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":200
+  /* "libpetsc4py.pyx":202
  *     return size
  * 
  * cdef inline Viewer Viewer_(PetscViewer p):             # <<<<<<<<<<<<<<
@@ -3104,7 +3119,7 @@ static CYTHON_INLINE struct PyPetscViewerObject *__pyx_f_11libpetsc4py_Viewer_(P
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":205
+/* "libpetsc4py.pyx":207
  *     return ob
  * 
  * cdef inline IS IS_(PetscIS p):             # <<<<<<<<<<<<<<
@@ -3117,25 +3132,22 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_11libpetsc4py_IS_(IS __pyx_
   struct PyPetscISObject *__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("IS_", 0);
 
-  /* "libpetsc4py.pyx":206
+  /* "libpetsc4py.pyx":208
  * 
  * cdef inline IS IS_(PetscIS p):
  *     cdef IS ob = IS.__new__(IS)             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(p)
  *     return ob
  */
-  __pyx_t_1 = __Pyx_tp_new(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(0, 208, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":207
+  /* "libpetsc4py.pyx":209
  * cdef inline IS IS_(PetscIS p):
  *     cdef IS ob = IS.__new__(IS)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3144,7 +3156,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_11libpetsc4py_IS_(IS __pyx_
  */
   (__pyx_v_ob->__pyx_base.obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_p);
 
-  /* "libpetsc4py.pyx":208
+  /* "libpetsc4py.pyx":210
  *     cdef IS ob = IS.__new__(IS)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3156,7 +3168,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_11libpetsc4py_IS_(IS __pyx_
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":205
+  /* "libpetsc4py.pyx":207
  *     return ob
  * 
  * cdef inline IS IS_(PetscIS p):             # <<<<<<<<<<<<<<
@@ -3176,7 +3188,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_11libpetsc4py_IS_(IS __pyx_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":210
+/* "libpetsc4py.pyx":212
  *     return ob
  * 
  * cdef inline Vec Vec_(PetscVec p):             # <<<<<<<<<<<<<<
@@ -3189,25 +3201,22 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_11libpetsc4py_Vec_(Vec __p
   struct PyPetscVecObject *__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("Vec_", 0);
 
-  /* "libpetsc4py.pyx":211
+  /* "libpetsc4py.pyx":213
  * 
  * cdef inline Vec Vec_(PetscVec p):
  *     cdef Vec ob = Vec.__new__(Vec)             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(p)
  *     return ob
  */
-  __pyx_t_1 = __Pyx_tp_new(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(0, 213, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":212
+  /* "libpetsc4py.pyx":214
  * cdef inline Vec Vec_(PetscVec p):
  *     cdef Vec ob = Vec.__new__(Vec)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3216,7 +3225,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_11libpetsc4py_Vec_(Vec __p
  */
   (__pyx_v_ob->__pyx_base.obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_p);
 
-  /* "libpetsc4py.pyx":213
+  /* "libpetsc4py.pyx":215
  *     cdef Vec ob = Vec.__new__(Vec)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3228,7 +3237,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_11libpetsc4py_Vec_(Vec __p
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":210
+  /* "libpetsc4py.pyx":212
  *     return ob
  * 
  * cdef inline Vec Vec_(PetscVec p):             # <<<<<<<<<<<<<<
@@ -3248,7 +3257,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_11libpetsc4py_Vec_(Vec __p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":215
+/* "libpetsc4py.pyx":217
  *     return ob
  * 
  * cdef inline Mat Mat_(PetscMat p):             # <<<<<<<<<<<<<<
@@ -3261,25 +3270,22 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_11libpetsc4py_Mat_(Mat __p
   struct PyPetscMatObject *__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("Mat_", 0);
 
-  /* "libpetsc4py.pyx":216
+  /* "libpetsc4py.pyx":218
  * 
  * cdef inline Mat Mat_(PetscMat p):
  *     cdef Mat ob = Mat.__new__(Mat)             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(p)
  *     return ob
  */
-  __pyx_t_1 = __Pyx_tp_new(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __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 = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(0, 218, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":217
+  /* "libpetsc4py.pyx":219
  * cdef inline Mat Mat_(PetscMat p):
  *     cdef Mat ob = Mat.__new__(Mat)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3288,7 +3294,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_11libpetsc4py_Mat_(Mat __p
  */
   (__pyx_v_ob->__pyx_base.obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_p);
 
-  /* "libpetsc4py.pyx":218
+  /* "libpetsc4py.pyx":220
  *     cdef Mat ob = Mat.__new__(Mat)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3300,7 +3306,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_11libpetsc4py_Mat_(Mat __p
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":215
+  /* "libpetsc4py.pyx":217
  *     return ob
  * 
  * cdef inline Mat Mat_(PetscMat p):             # <<<<<<<<<<<<<<
@@ -3320,7 +3326,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_11libpetsc4py_Mat_(Mat __p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":220
+/* "libpetsc4py.pyx":222
  *     return ob
  * 
  * cdef inline PC PC_(PetscPC p):             # <<<<<<<<<<<<<<
@@ -3333,25 +3339,22 @@ static CYTHON_INLINE struct PyPetscPCObject *__pyx_f_11libpetsc4py_PC_(PC __pyx_
   struct PyPetscPCObject *__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("PC_", 0);
 
-  /* "libpetsc4py.pyx":221
+  /* "libpetsc4py.pyx":223
  * 
  * cdef inline PC PC_(PetscPC p):
  *     cdef PC ob = PC.__new__(PC)             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(p)
  *     return ob
  */
-  __pyx_t_1 = __Pyx_tp_new(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_PC)), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_PC)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_PC)))) __PYX_ERR(0, 223, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscPCObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":222
+  /* "libpetsc4py.pyx":224
  * cdef inline PC PC_(PetscPC p):
  *     cdef PC ob = PC.__new__(PC)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3360,7 +3363,7 @@ static CYTHON_INLINE struct PyPetscPCObject *__pyx_f_11libpetsc4py_PC_(PC __pyx_
  */
   (__pyx_v_ob->__pyx_base.obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_p);
 
-  /* "libpetsc4py.pyx":223
+  /* "libpetsc4py.pyx":225
  *     cdef PC ob = PC.__new__(PC)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3372,7 +3375,7 @@ static CYTHON_INLINE struct PyPetscPCObject *__pyx_f_11libpetsc4py_PC_(PC __pyx_
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":220
+  /* "libpetsc4py.pyx":222
  *     return ob
  * 
  * cdef inline PC PC_(PetscPC p):             # <<<<<<<<<<<<<<
@@ -3392,7 +3395,7 @@ static CYTHON_INLINE struct PyPetscPCObject *__pyx_f_11libpetsc4py_PC_(PC __pyx_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":225
+/* "libpetsc4py.pyx":227
  *     return ob
  * 
  * cdef inline KSP KSP_(PetscKSP p):             # <<<<<<<<<<<<<<
@@ -3405,25 +3408,22 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_11libpetsc4py_KSP_(KSP __p
   struct PyPetscKSPObject *__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("KSP_", 0);
 
-  /* "libpetsc4py.pyx":226
+  /* "libpetsc4py.pyx":228
  * 
  * cdef inline KSP KSP_(PetscKSP p):
  *     cdef KSP ob = KSP.__new__(KSP)             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(p)
  *     return ob
  */
-  __pyx_t_1 = __Pyx_tp_new(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_KSP)), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_KSP)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_KSP)))) __PYX_ERR(0, 228, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":227
+  /* "libpetsc4py.pyx":229
  * cdef inline KSP KSP_(PetscKSP p):
  *     cdef KSP ob = KSP.__new__(KSP)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3432,7 +3432,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_11libpetsc4py_KSP_(KSP __p
  */
   (__pyx_v_ob->__pyx_base.obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_p);
 
-  /* "libpetsc4py.pyx":228
+  /* "libpetsc4py.pyx":230
  *     cdef KSP ob = KSP.__new__(KSP)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3444,7 +3444,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_11libpetsc4py_KSP_(KSP __p
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":225
+  /* "libpetsc4py.pyx":227
  *     return ob
  * 
  * cdef inline KSP KSP_(PetscKSP p):             # <<<<<<<<<<<<<<
@@ -3464,7 +3464,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_11libpetsc4py_KSP_(KSP __p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":230
+/* "libpetsc4py.pyx":232
  *     return ob
  * 
  * cdef inline SNES SNES_(PetscSNES p):             # <<<<<<<<<<<<<<
@@ -3477,25 +3477,22 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_11libpetsc4py_SNES_(SNES
   struct PyPetscSNESObject *__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("SNES_", 0);
 
-  /* "libpetsc4py.pyx":231
+  /* "libpetsc4py.pyx":233
  * 
  * cdef inline SNES SNES_(PetscSNES p):
  *     cdef SNES ob = SNES.__new__(SNES)             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(p)
  *     return ob
  */
-  __pyx_t_1 = __Pyx_tp_new(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 233, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_SNES)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_SNES)))) __PYX_ERR(0, 233, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":232
+  /* "libpetsc4py.pyx":234
  * cdef inline SNES SNES_(PetscSNES p):
  *     cdef SNES ob = SNES.__new__(SNES)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3504,7 +3501,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_11libpetsc4py_SNES_(SNES
  */
   (__pyx_v_ob->__pyx_base.obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_p);
 
-  /* "libpetsc4py.pyx":233
+  /* "libpetsc4py.pyx":235
  *     cdef SNES ob = SNES.__new__(SNES)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3516,7 +3513,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_11libpetsc4py_SNES_(SNES
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":230
+  /* "libpetsc4py.pyx":232
  *     return ob
  * 
  * cdef inline SNES SNES_(PetscSNES p):             # <<<<<<<<<<<<<<
@@ -3536,7 +3533,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_11libpetsc4py_SNES_(SNES
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":235
+/* "libpetsc4py.pyx":237
  *     return ob
  * 
  * cdef inline TS TS_(PetscTS p):             # <<<<<<<<<<<<<<
@@ -3549,25 +3546,22 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_11libpetsc4py_TS_(TS __pyx_
   struct PyPetscTSObject *__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("TS_", 0);
 
-  /* "libpetsc4py.pyx":236
+  /* "libpetsc4py.pyx":238
  * 
  * cdef inline TS TS_(PetscTS p):
  *     cdef TS ob = TS.__new__(TS)             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(p)
  *     return ob
  */
-  __pyx_t_1 = __Pyx_tp_new(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_TS)), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_TS)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_TS)))) __PYX_ERR(0, 238, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":237
+  /* "libpetsc4py.pyx":239
  * cdef inline TS TS_(PetscTS p):
  *     cdef TS ob = TS.__new__(TS)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3576,7 +3570,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_11libpetsc4py_TS_(TS __pyx_
  */
   (__pyx_v_ob->__pyx_base.obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_p);
 
-  /* "libpetsc4py.pyx":238
+  /* "libpetsc4py.pyx":240
  *     cdef TS ob = TS.__new__(TS)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3588,7 +3582,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_11libpetsc4py_TS_(TS __pyx_
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":235
+  /* "libpetsc4py.pyx":237
  *     return ob
  * 
  * cdef inline TS TS_(PetscTS p):             # <<<<<<<<<<<<<<
@@ -3608,7 +3602,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_11libpetsc4py_TS_(TS __pyx_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":245
+/* "libpetsc4py.pyx":247
  *     ctypedef char const_char "const char"
  * 
  * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
@@ -3623,12 +3617,9 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
   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);
 
-  /* "libpetsc4py.pyx":246
+  /* "libpetsc4py.pyx":248
  * 
  * cdef inline object bytes2str(const_char p[]):
  *     if p == NULL: return None             # <<<<<<<<<<<<<<
@@ -3643,19 +3634,19 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":247
+  /* "libpetsc4py.pyx":249
  * cdef inline object bytes2str(const_char p[]):
  *     if p == NULL: return None
  *     cdef bytes s = <char*>p             # <<<<<<<<<<<<<<
  *     if not isinstance(s, str):
  *         return s.decode()
  */
-  __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_p)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_p)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_s = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":248
+  /* "libpetsc4py.pyx":250
  *     if p == NULL: return None
  *     cdef bytes s = <char*>p
  *     if not isinstance(s, str):             # <<<<<<<<<<<<<<
@@ -3666,7 +3657,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
   __pyx_t_3 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":249
+    /* "libpetsc4py.pyx":251
  *     cdef bytes s = <char*>p
  *     if not isinstance(s, str):
  *         return s.decode()             # <<<<<<<<<<<<<<
@@ -3674,28 +3665,36 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
  *         return s
  */
     __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[0]; __pyx_lineno = 249; __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(0, 251, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":250
+ *     if p == NULL: return None
+ *     cdef bytes s = <char*>p
+ *     if not isinstance(s, str):             # <<<<<<<<<<<<<<
+ *         return s.decode()
+ *     else:
+ */
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":251
+  /* "libpetsc4py.pyx":253
  *         return s.decode()
  *     else:
  *         return s             # <<<<<<<<<<<<<<
  * 
  * cdef object parse_url(object url):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(__pyx_v_s);
     __pyx_r = __pyx_v_s;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":245
+  /* "libpetsc4py.pyx":247
  *     ctypedef char const_char "const char"
  * 
  * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
@@ -3715,7 +3714,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":253
+/* "libpetsc4py.pyx":255
  *         return s
  * 
  * cdef object parse_url(object url):             # <<<<<<<<<<<<<<
@@ -3733,21 +3732,18 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *(*__pyx_t_5)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("parse_url", 0);
 
-  /* "libpetsc4py.pyx":254
+  /* "libpetsc4py.pyx":256
  * 
  * cdef object parse_url(object url):
  *     path, name = url.rsplit(":", 1)             # <<<<<<<<<<<<<<
  *     return (path, name)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_url, __pyx_n_s_rsplit); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_url, __pyx_n_s_rsplit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
@@ -3760,7 +3756,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 256, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -3773,15 +3769,15 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 256, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 256, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
@@ -3789,7 +3785,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
     __Pyx_GOTREF(__pyx_t_1);
     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_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 256, __pyx_L1_error)
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -3797,7 +3793,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(0, 256, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_path = __pyx_t_1;
@@ -3805,7 +3801,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
   __pyx_v_name = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":255
+  /* "libpetsc4py.pyx":257
  * cdef object parse_url(object url):
  *     path, name = url.rsplit(":", 1)
  *     return (path, name)             # <<<<<<<<<<<<<<
@@ -3813,7 +3809,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
  * cdef dict module_cache = {}
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_path);
   __Pyx_GIVEREF(__pyx_v_path);
@@ -3825,7 +3821,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":253
+  /* "libpetsc4py.pyx":255
  *         return s
  * 
  * cdef object parse_url(object url):             # <<<<<<<<<<<<<<
@@ -3849,7 +3845,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":259
+/* "libpetsc4py.pyx":261
  * cdef dict module_cache = {}
  * 
  * cdef object load_module(object path):             # <<<<<<<<<<<<<<
@@ -3881,12 +3877,9 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
   PyObject *__pyx_t_15 = NULL;
   PyObject *__pyx_t_16 = NULL;
   PyObject *__pyx_t_17 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("load_module", 0);
 
-  /* "libpetsc4py.pyx":260
+  /* "libpetsc4py.pyx":262
  * 
  * cdef object load_module(object path):
  *     if path in module_cache:             # <<<<<<<<<<<<<<
@@ -3895,13 +3888,13 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  */
   if (unlikely(__pyx_v_11libpetsc4py_module_cache == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(0, 262, __pyx_L1_error)
   }
-  __pyx_t_1 = (__Pyx_PyDict_Contains(__pyx_v_path, __pyx_v_11libpetsc4py_module_cache, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_path, __pyx_v_11libpetsc4py_module_cache, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 262, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":261
+    /* "libpetsc4py.pyx":263
  * cdef object load_module(object path):
  *     if path in module_cache:
  *         return module_cache[path]             # <<<<<<<<<<<<<<
@@ -3911,46 +3904,54 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_11libpetsc4py_module_cache == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 263, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":262
+ * 
+ * cdef object load_module(object path):
+ *     if path in module_cache:             # <<<<<<<<<<<<<<
+ *         return module_cache[path]
+ *     module = PyModule_New("__petsc__")
+ */
   }
 
-  /* "libpetsc4py.pyx":262
+  /* "libpetsc4py.pyx":264
  *     if path in module_cache:
  *         return module_cache[path]
  *     module = PyModule_New("__petsc__")             # <<<<<<<<<<<<<<
  *     module.__file__ = path
  *     module.__package__ = None
  */
-  __pyx_t_3 = PyModule_New(__pyx_k_petsc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyModule_New(((char *)"__petsc__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_module = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":263
+  /* "libpetsc4py.pyx":265
  *         return module_cache[path]
  *     module = PyModule_New("__petsc__")
  *     module.__file__ = path             # <<<<<<<<<<<<<<
  *     module.__package__ = None
  *     module_cache[path] = module
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_module, __pyx_n_s_file, __pyx_v_path) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_module, __pyx_n_s_file, __pyx_v_path) < 0) __PYX_ERR(0, 265, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":264
+  /* "libpetsc4py.pyx":266
  *     module = PyModule_New("__petsc__")
  *     module.__file__ = path
  *     module.__package__ = None             # <<<<<<<<<<<<<<
  *     module_cache[path] = module
  *     try:
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_module, __pyx_n_s_package, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_module, __pyx_n_s_package, Py_None) < 0) __PYX_ERR(0, 266, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":265
+  /* "libpetsc4py.pyx":267
  *     module.__file__ = path
  *     module.__package__ = None
  *     module_cache[path] = module             # <<<<<<<<<<<<<<
@@ -3959,11 +3960,11 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  */
   if (unlikely(__pyx_v_11libpetsc4py_module_cache == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(0, 267, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path, __pyx_v_module) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(PyDict_SetItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path, __pyx_v_module) < 0)) __PYX_ERR(0, 267, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":266
+  /* "libpetsc4py.pyx":268
  *     module.__package__ = None
  *     module_cache[path] = module
  *     try:             # <<<<<<<<<<<<<<
@@ -3971,20 +3972,22 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  *         try:
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
     __Pyx_XGOTREF(__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_5);
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "libpetsc4py.pyx":267
+      /* "libpetsc4py.pyx":269
  *     module_cache[path] = module
  *     try:
  *         source = open(path, 'rU')             # <<<<<<<<<<<<<<
  *         try:
  *             code = compile(source.read(), path, 'exec')
  */
-      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_v_path);
       __Pyx_GIVEREF(__pyx_v_path);
@@ -3992,13 +3995,13 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
       __Pyx_INCREF(__pyx_n_s_rU);
       __Pyx_GIVEREF(__pyx_n_s_rU);
       PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_rU);
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 269, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_v_source = __pyx_t_7;
       __pyx_t_7 = 0;
 
-      /* "libpetsc4py.pyx":268
+      /* "libpetsc4py.pyx":270
  *     try:
  *         source = open(path, 'rU')
  *         try:             # <<<<<<<<<<<<<<
@@ -4007,14 +4010,14 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  */
       /*try:*/ {
 
-        /* "libpetsc4py.pyx":269
+        /* "libpetsc4py.pyx":271
  *         source = open(path, 'rU')
  *         try:
  *             code = compile(source.read(), path, 'exec')             # <<<<<<<<<<<<<<
  *         finally:
  *             source.close()
  */
-        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L15_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_8 = NULL;
         if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -4027,14 +4030,14 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
           }
         }
         if (__pyx_t_8) {
-          __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+          __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L15_error)
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         } else {
-          __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+          __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L15_error)
         }
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+        __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L15_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_GIVEREF(__pyx_t_7);
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7);
@@ -4045,14 +4048,14 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
         __Pyx_GIVEREF(__pyx_n_s_exec);
         PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_exec);
         __pyx_t_7 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_compile, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_compile, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L15_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_v_code = __pyx_t_7;
         __pyx_t_7 = 0;
       }
 
-      /* "libpetsc4py.pyx":271
+      /* "libpetsc4py.pyx":273
  *             code = compile(source.read(), path, 'exec')
  *         finally:
  *             source.close()             # <<<<<<<<<<<<<<
@@ -4061,7 +4064,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  */
       /*finally:*/ {
         /*normal exit:*/{
-          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L4_error)
           __Pyx_GOTREF(__pyx_t_3);
           __pyx_t_8 = NULL;
           if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -4074,10 +4077,10 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
             }
           }
           if (__pyx_t_8) {
-            __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+            __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L4_error)
             __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
           } else {
-            __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+            __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L4_error)
           }
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -4085,8 +4088,10 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
           goto __pyx_L16;
         }
         /*exception exit:*/{
+          __Pyx_PyThreadState_declare
           __pyx_L15_error:;
           __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
+          __Pyx_PyThreadState_assign
           __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -4100,7 +4105,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
           __Pyx_XGOTREF(__pyx_t_17);
           __pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
           {
-            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
+            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L20_error)
             __Pyx_GOTREF(__pyx_t_3);
             __pyx_t_8 = NULL;
             if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -4113,15 +4118,16 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
               }
             }
             if (__pyx_t_8) {
-              __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
+              __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L20_error)
               __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
             } else {
-              __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
+              __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L20_error)
             }
             __Pyx_GOTREF(__pyx_t_7);
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           }
+          __Pyx_PyThreadState_assign
           if (PY_MAJOR_VERSION >= 3) {
             __Pyx_XGIVEREF(__pyx_t_15);
             __Pyx_XGIVEREF(__pyx_t_16);
@@ -4136,6 +4142,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
           __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
           goto __pyx_L4_error;
           __pyx_L20_error:;
+          __Pyx_PyThreadState_assign
           if (PY_MAJOR_VERSION >= 3) {
             __Pyx_XGIVEREF(__pyx_t_15);
             __Pyx_XGIVEREF(__pyx_t_16);
@@ -4151,19 +4158,19 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
         __pyx_L16:;
       }
 
-      /* "libpetsc4py.pyx":272
+      /* "libpetsc4py.pyx":274
  *         finally:
  *             source.close()
  *         namespace = module.__dict__             # <<<<<<<<<<<<<<
  *         exec code in namespace
  *     except:
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_module, __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_module, __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 274, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_v_namespace = __pyx_t_7;
       __pyx_t_7 = 0;
 
-      /* "libpetsc4py.pyx":273
+      /* "libpetsc4py.pyx":275
  *             source.close()
  *         namespace = module.__dict__
  *         exec code in namespace             # <<<<<<<<<<<<<<
@@ -4171,20 +4178,29 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  *         del module_cache[path]
  */
       __pyx_t_7 = __Pyx_PyExec3(__pyx_v_code, __pyx_v_namespace, 0);
-      if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+      /* "libpetsc4py.pyx":268
+ *     module.__package__ = None
+ *     module_cache[path] = module
+ *     try:             # <<<<<<<<<<<<<<
+ *         source = open(path, 'rU')
+ *         try:
+ */
     }
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L11_try_end;
     __pyx_L4_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "libpetsc4py.pyx":274
+    /* "libpetsc4py.pyx":276
  *         namespace = module.__dict__
  *         exec code in namespace
  *     except:             # <<<<<<<<<<<<<<
@@ -4193,12 +4209,12 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  */
     /*except:*/ {
       __Pyx_AddTraceback("libpetsc4py.load_module", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
+      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 276, __pyx_L6_except_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_t_8);
 
-      /* "libpetsc4py.pyx":275
+      /* "libpetsc4py.pyx":277
  *         exec code in namespace
  *     except:
  *         del module_cache[path]             # <<<<<<<<<<<<<<
@@ -4207,11 +4223,11 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  */
       if (unlikely(__pyx_v_11libpetsc4py_module_cache == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
+        __PYX_ERR(0, 277, __pyx_L6_except_error)
       }
-      if (PyDict_DelItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
+      if (unlikely(PyDict_DelItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path) < 0)) __PYX_ERR(0, 277, __pyx_L6_except_error)
 
-      /* "libpetsc4py.pyx":276
+      /* "libpetsc4py.pyx":278
  *     except:
  *         del module_cache[path]
  *         raise             # <<<<<<<<<<<<<<
@@ -4221,11 +4237,20 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
       __Pyx_GIVEREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_3);
       __Pyx_XGIVEREF(__pyx_t_8);
-      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_3, __pyx_t_8);
+      __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_3, __pyx_t_8);
       __pyx_t_7 = 0; __pyx_t_3 = 0; __pyx_t_8 = 0; 
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
+      __PYX_ERR(0, 278, __pyx_L6_except_error)
     }
     __pyx_L6_except_error:;
+
+    /* "libpetsc4py.pyx":268
+ *     module.__package__ = None
+ *     module_cache[path] = module
+ *     try:             # <<<<<<<<<<<<<<
+ *         source = open(path, 'rU')
+ *         try:
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
@@ -4234,7 +4259,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
     __pyx_L11_try_end:;
   }
 
-  /* "libpetsc4py.pyx":277
+  /* "libpetsc4py.pyx":279
  *         del module_cache[path]
  *         raise
  *     return module             # <<<<<<<<<<<<<<
@@ -4246,7 +4271,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
   __pyx_r = __pyx_v_module;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":259
+  /* "libpetsc4py.pyx":261
  * cdef dict module_cache = {}
  * 
  * cdef object load_module(object path):             # <<<<<<<<<<<<<<
@@ -4271,7 +4296,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":287
+/* "libpetsc4py.pyx":289
  *     cdef bytes  name
  * 
  *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
@@ -4297,12 +4322,9 @@ static PyObject *__pyx_pf_11libpetsc4py_6_PyObj___getattr__(struct __pyx_obj_11l
   __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("__getattr__", 0);
 
-  /* "libpetsc4py.pyx":288
+  /* "libpetsc4py.pyx":290
  * 
  *     def __getattr__(self, attr):
  *         return getattr(self.self, attr, None)             # <<<<<<<<<<<<<<
@@ -4312,14 +4334,14 @@ static PyObject *__pyx_pf_11libpetsc4py_6_PyObj___getattr__(struct __pyx_obj_11l
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __pyx_v_self->self;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_v_attr, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_v_attr, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __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;
 
-  /* "libpetsc4py.pyx":287
+  /* "libpetsc4py.pyx":289
  *     cdef bytes  name
  * 
  *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
@@ -4339,7 +4361,7 @@ static PyObject *__pyx_pf_11libpetsc4py_6_PyObj___getattr__(struct __pyx_obj_11l
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":290
+/* "libpetsc4py.pyx":292
  *         return getattr(self.self, attr, None)
  * 
  *     cdef int setcontext(self, void *ctx, Object base) except -1:             # <<<<<<<<<<<<<<
@@ -4358,12 +4380,9 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   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("setcontext", 0);
 
-  /* "libpetsc4py.pyx":292
+  /* "libpetsc4py.pyx":294
  *     cdef int setcontext(self, void *ctx, Object base) except -1:
  *         #
  *         if ctx == <void*>self.self:             # <<<<<<<<<<<<<<
@@ -4373,7 +4392,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   __pyx_t_1 = ((__pyx_v_ctx == ((void *)__pyx_v_self->self)) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":293
+    /* "libpetsc4py.pyx":295
  *         #
  *         if ctx == <void*>self.self:
  *             return 0             # <<<<<<<<<<<<<<
@@ -4382,21 +4401,29 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
     __pyx_r = 0;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":294
+ *     cdef int setcontext(self, void *ctx, Object base) except -1:
+ *         #
+ *         if ctx == <void*>self.self:             # <<<<<<<<<<<<<<
+ *             return 0
+ *         #
+ */
   }
 
-  /* "libpetsc4py.pyx":295
+  /* "libpetsc4py.pyx":297
  *             return 0
  *         #
  *         cdef object destroy = self.destroy             # <<<<<<<<<<<<<<
  *         if destroy is not None:
  *             destroy(base)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_destroy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_destroy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 297, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_destroy = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":296
+  /* "libpetsc4py.pyx":298
  *         #
  *         cdef object destroy = self.destroy
  *         if destroy is not None:             # <<<<<<<<<<<<<<
@@ -4407,7 +4434,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":297
+    /* "libpetsc4py.pyx":299
  *         cdef object destroy = self.destroy
  *         if destroy is not None:
  *             destroy(base)             # <<<<<<<<<<<<<<
@@ -4426,23 +4453,23 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_base)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_base)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 299, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 299, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
       __Pyx_INCREF(((PyObject *)__pyx_v_base));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_base));
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, ((PyObject *)__pyx_v_base));
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 299, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":298
+    /* "libpetsc4py.pyx":300
  *         if destroy is not None:
  *             destroy(base)
  *             destroy = None             # <<<<<<<<<<<<<<
@@ -4451,11 +4478,17 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_destroy, Py_None);
-    goto __pyx_L4;
+
+    /* "libpetsc4py.pyx":298
+ *         #
+ *         cdef object destroy = self.destroy
+ *         if destroy is not None:             # <<<<<<<<<<<<<<
+ *             destroy(base)
+ *             destroy = None
+ */
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":300
+  /* "libpetsc4py.pyx":302
  *             destroy = None
  *         #
  *         if ctx == NULL:             # <<<<<<<<<<<<<<
@@ -4465,7 +4498,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   __pyx_t_3 = ((__pyx_v_ctx == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":301
+    /* "libpetsc4py.pyx":303
  *         #
  *         if ctx == NULL:
  *             self.self = None             # <<<<<<<<<<<<<<
@@ -4478,7 +4511,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
     __Pyx_DECREF(__pyx_v_self->self);
     __pyx_v_self->self = Py_None;
 
-    /* "libpetsc4py.pyx":302
+    /* "libpetsc4py.pyx":304
  *         if ctx == NULL:
  *             self.self = None
  *             self.name = None             # <<<<<<<<<<<<<<
@@ -4491,7 +4524,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
     __Pyx_DECREF(__pyx_v_self->name);
     __pyx_v_self->name = ((PyObject*)Py_None);
 
-    /* "libpetsc4py.pyx":303
+    /* "libpetsc4py.pyx":305
  *             self.self = None
  *             self.name = None
  *             return 0             # <<<<<<<<<<<<<<
@@ -4500,9 +4533,17 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
     __pyx_r = 0;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":302
+ *             destroy = None
+ *         #
+ *         if ctx == NULL:             # <<<<<<<<<<<<<<
+ *             self.self = None
+ *             self.name = None
+ */
   }
 
-  /* "libpetsc4py.pyx":305
+  /* "libpetsc4py.pyx":307
  *             return 0
  *         #
  *         self.self = <object>ctx             # <<<<<<<<<<<<<<
@@ -4517,7 +4558,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   __pyx_v_self->self = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":306
+  /* "libpetsc4py.pyx":308
  *         #
  *         self.self = <object>ctx
  *         self.name = None             # <<<<<<<<<<<<<<
@@ -4530,19 +4571,19 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)Py_None);
 
-  /* "libpetsc4py.pyx":307
+  /* "libpetsc4py.pyx":309
  *         self.self = <object>ctx
  *         self.name = None
  *         cdef object create = self.create             # <<<<<<<<<<<<<<
  *         if create is not None:
  *             create(base)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_create = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":308
+  /* "libpetsc4py.pyx":310
  *         self.name = None
  *         cdef object create = self.create
  *         if create is not None:             # <<<<<<<<<<<<<<
@@ -4553,7 +4594,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   __pyx_t_1 = (__pyx_t_3 != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":309
+    /* "libpetsc4py.pyx":311
  *         cdef object create = self.create
  *         if create is not None:
  *             create(base)             # <<<<<<<<<<<<<<
@@ -4572,23 +4613,23 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_base)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_base)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 311, __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 = NULL;
       __Pyx_INCREF(((PyObject *)__pyx_v_base));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_base));
       PyTuple_SET_ITEM(__pyx_t_5, 0+1, ((PyObject *)__pyx_v_base));
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":310
+    /* "libpetsc4py.pyx":312
  *         if create is not None:
  *             create(base)
  *             create = None             # <<<<<<<<<<<<<<
@@ -4597,11 +4638,17 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_create, Py_None);
-    goto __pyx_L6;
+
+    /* "libpetsc4py.pyx":310
+ *         self.name = None
+ *         cdef object create = self.create
+ *         if create is not None:             # <<<<<<<<<<<<<<
+ *             create(base)
+ *             create = None
+ */
   }
-  __pyx_L6:;
 
-  /* "libpetsc4py.pyx":311
+  /* "libpetsc4py.pyx":313
  *             create(base)
  *             create = None
  *         return 0             # <<<<<<<<<<<<<<
@@ -4611,7 +4658,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":290
+  /* "libpetsc4py.pyx":292
  *         return getattr(self.self, attr, None)
  * 
  *     cdef int setcontext(self, void *ctx, Object base) except -1:             # <<<<<<<<<<<<<<
@@ -4634,7 +4681,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":313
+/* "libpetsc4py.pyx":315
  *         return 0
  * 
  *     cdef int getcontext(self, void **ctx) except -1:             # <<<<<<<<<<<<<<
@@ -4649,7 +4696,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getcontext", 0);
 
-  /* "libpetsc4py.pyx":314
+  /* "libpetsc4py.pyx":316
  * 
  *     cdef int getcontext(self, void **ctx) except -1:
  *         if ctx == NULL: return 0             # <<<<<<<<<<<<<<
@@ -4662,7 +4709,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":315
+  /* "libpetsc4py.pyx":317
  *     cdef int getcontext(self, void **ctx) except -1:
  *         if ctx == NULL: return 0
  *         if self.self is not None:             # <<<<<<<<<<<<<<
@@ -4673,7 +4720,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":316
+    /* "libpetsc4py.pyx":318
  *         if ctx == NULL: return 0
  *         if self.self is not None:
  *             ctx[0] = <void*> self.self             # <<<<<<<<<<<<<<
@@ -4681,22 +4728,30 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
  *             ctx[0] = NULL
  */
     (__pyx_v_ctx[0]) = ((void *)__pyx_v_self->self);
+
+    /* "libpetsc4py.pyx":317
+ *     cdef int getcontext(self, void **ctx) except -1:
+ *         if ctx == NULL: return 0
+ *         if self.self is not None:             # <<<<<<<<<<<<<<
+ *             ctx[0] = <void*> self.self
+ *         else:
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":318
+  /* "libpetsc4py.pyx":320
  *             ctx[0] = <void*> self.self
  *         else:
  *             ctx[0] = NULL             # <<<<<<<<<<<<<<
  *         return 0
  * 
  */
+  /*else*/ {
     (__pyx_v_ctx[0]) = NULL;
   }
   __pyx_L4:;
 
-  /* "libpetsc4py.pyx":319
+  /* "libpetsc4py.pyx":321
  *         else:
  *             ctx[0] = NULL
  *         return 0             # <<<<<<<<<<<<<<
@@ -4706,7 +4761,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":313
+  /* "libpetsc4py.pyx":315
  *         return 0
  * 
  *     cdef int getcontext(self, void **ctx) except -1:             # <<<<<<<<<<<<<<
@@ -4720,7 +4775,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":321
+/* "libpetsc4py.pyx":323
  *         return 0
  * 
  *     cdef int setname(self, char name[]) except -1:             # <<<<<<<<<<<<<<
@@ -4734,12 +4789,9 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   int __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("setname", 0);
 
-  /* "libpetsc4py.pyx":322
+  /* "libpetsc4py.pyx":324
  * 
  *     cdef int setname(self, char name[]) except -1:
  *         if name != NULL and name[0] != 0:             # <<<<<<<<<<<<<<
@@ -4757,31 +4809,39 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":323
+    /* "libpetsc4py.pyx":325
  *     cdef int setname(self, char name[]) except -1:
  *         if name != NULL and name[0] != 0:
  *             self.name = name             # <<<<<<<<<<<<<<
  *         else:
  *             self.name = None
  */
-    __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 325, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __Pyx_GOTREF(__pyx_v_self->name);
     __Pyx_DECREF(__pyx_v_self->name);
     __pyx_v_self->name = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
+
+    /* "libpetsc4py.pyx":324
+ * 
+ *     cdef int setname(self, char name[]) except -1:
+ *         if name != NULL and name[0] != 0:             # <<<<<<<<<<<<<<
+ *             self.name = name
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":325
+  /* "libpetsc4py.pyx":327
  *             self.name = name
  *         else:
  *             self.name = None             # <<<<<<<<<<<<<<
  *         return 0
  * 
  */
+  /*else*/ {
     __Pyx_INCREF(Py_None);
     __Pyx_GIVEREF(Py_None);
     __Pyx_GOTREF(__pyx_v_self->name);
@@ -4790,7 +4850,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":326
+  /* "libpetsc4py.pyx":328
  *         else:
  *             self.name = None
  *         return 0             # <<<<<<<<<<<<<<
@@ -4800,7 +4860,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":321
+  /* "libpetsc4py.pyx":323
  *         return 0
  * 
  *     cdef int setname(self, char name[]) except -1:             # <<<<<<<<<<<<<<
@@ -4818,7 +4878,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":328
+/* "libpetsc4py.pyx":330
  *         return 0
  * 
  *     cdef char* getname(self) except? NULL:             # <<<<<<<<<<<<<<
@@ -4830,8 +4890,8 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   PyObject *__pyx_v_ctx = 0;
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_modname = NULL;
-  PyObject *__pyx_v_cls = NULL;
   PyObject *__pyx_v_clsname = NULL;
+  PyObject *__pyx_v_cls = NULL;
   char *__pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -4840,12 +4900,9 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   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("getname", 0);
 
-  /* "libpetsc4py.pyx":329
+  /* "libpetsc4py.pyx":331
  * 
  *     cdef char* getname(self) except? NULL:
  *         if self.self is None:             # <<<<<<<<<<<<<<
@@ -4856,7 +4913,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":330
+    /* "libpetsc4py.pyx":332
  *     cdef char* getname(self) except? NULL:
  *         if self.self is None:
  *             return NULL             # <<<<<<<<<<<<<<
@@ -4865,9 +4922,17 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  */
     __pyx_r = NULL;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":331
+ * 
+ *     cdef char* getname(self) except? NULL:
+ *         if self.self is None:             # <<<<<<<<<<<<<<
+ *             return NULL
+ *         if self.name is not None:
+ */
   }
 
-  /* "libpetsc4py.pyx":331
+  /* "libpetsc4py.pyx":333
  *         if self.self is None:
  *             return NULL
  *         if self.name is not None:             # <<<<<<<<<<<<<<
@@ -4878,19 +4943,27 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":332
+    /* "libpetsc4py.pyx":334
  *             return NULL
  *         if self.name is not None:
  *             return self.name             # <<<<<<<<<<<<<<
  *         cdef ctx = self.self
  *         cdef name = None
  */
-    __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_v_self->name); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_v_self->name); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 334, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":333
+ *         if self.self is None:
+ *             return NULL
+ *         if self.name is not None:             # <<<<<<<<<<<<<<
+ *             return self.name
+ *         cdef ctx = self.self
+ */
   }
 
-  /* "libpetsc4py.pyx":333
+  /* "libpetsc4py.pyx":335
  *         if self.name is not None:
  *             return self.name
  *         cdef ctx = self.self             # <<<<<<<<<<<<<<
@@ -4902,7 +4975,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __pyx_v_ctx = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "libpetsc4py.pyx":334
+  /* "libpetsc4py.pyx":336
  *             return self.name
  *         cdef ctx = self.self
  *         cdef name = None             # <<<<<<<<<<<<<<
@@ -4912,7 +4985,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __Pyx_INCREF(Py_None);
   __pyx_v_name = Py_None;
 
-  /* "libpetsc4py.pyx":335
+  /* "libpetsc4py.pyx":337
  *         cdef ctx = self.self
  *         cdef name = None
  *         if PyModule_Check(ctx):             # <<<<<<<<<<<<<<
@@ -4922,168 +4995,210 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __pyx_t_1 = (PyModule_Check(__pyx_v_ctx) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":336
+    /* "libpetsc4py.pyx":338
  *         cdef name = None
  *         if PyModule_Check(ctx):
  *             name = getattr(ctx, '__name__', None)             # <<<<<<<<<<<<<<
  *         else:
  *             modname = getattr(ctx, '__module__', None)
  */
-    __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_ctx, __pyx_n_s_name, Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_ctx, __pyx_n_s_name, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 338, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_4);
     __pyx_t_4 = 0;
+
+    /* "libpetsc4py.pyx":337
+ *         cdef ctx = self.self
+ *         cdef name = None
+ *         if PyModule_Check(ctx):             # <<<<<<<<<<<<<<
+ *             name = getattr(ctx, '__name__', None)
+ *         else:
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":338
+  /* "libpetsc4py.pyx":340
  *             name = getattr(ctx, '__name__', None)
  *         else:
  *             modname = getattr(ctx, '__module__', None)             # <<<<<<<<<<<<<<
+ *             clsname = None
  *             cls = getattr(ctx, '__class__', None)
- *             if cls:
  */
-    __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_ctx, __pyx_n_s_module, Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_ctx, __pyx_n_s_module, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_modname = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "libpetsc4py.pyx":339
+    /* "libpetsc4py.pyx":341
  *         else:
  *             modname = getattr(ctx, '__module__', None)
+ *             clsname = None             # <<<<<<<<<<<<<<
+ *             cls = getattr(ctx, '__class__', None)
+ *             if cls:
+ */
+    __Pyx_INCREF(Py_None);
+    __pyx_v_clsname = Py_None;
+
+    /* "libpetsc4py.pyx":342
+ *             modname = getattr(ctx, '__module__', None)
+ *             clsname = None
  *             cls = getattr(ctx, '__class__', None)             # <<<<<<<<<<<<<<
  *             if cls:
  *                 clsname = getattr(cls, '__name__', None)
  */
-    __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_ctx, __pyx_n_s_class, Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_ctx, __pyx_n_s_class, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 342, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_cls = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "libpetsc4py.pyx":340
- *             modname = getattr(ctx, '__module__', None)
+    /* "libpetsc4py.pyx":343
+ *             clsname = None
  *             cls = getattr(ctx, '__class__', None)
  *             if cls:             # <<<<<<<<<<<<<<
  *                 clsname = getattr(cls, '__name__', None)
  *                 if not modname:
  */
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_cls); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_cls); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 343, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "libpetsc4py.pyx":341
+      /* "libpetsc4py.pyx":344
  *             cls = getattr(ctx, '__class__', None)
  *             if cls:
  *                 clsname = getattr(cls, '__name__', None)             # <<<<<<<<<<<<<<
  *                 if not modname:
  *                     modname = getattr(cls, '__module__', None)
  */
-      __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_n_s_name, Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_n_s_name, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 344, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_v_clsname = __pyx_t_4;
+      __Pyx_DECREF_SET(__pyx_v_clsname, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "libpetsc4py.pyx":342
+      /* "libpetsc4py.pyx":345
  *             if cls:
  *                 clsname = getattr(cls, '__name__', None)
  *                 if not modname:             # <<<<<<<<<<<<<<
  *                     modname = getattr(cls, '__module__', None)
  *             if modname and clsname:
  */
-      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_modname); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_modname); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 345, __pyx_L1_error)
       __pyx_t_2 = ((!__pyx_t_1) != 0);
       if (__pyx_t_2) {
 
-        /* "libpetsc4py.pyx":343
+        /* "libpetsc4py.pyx":346
  *                 clsname = getattr(cls, '__name__', None)
  *                 if not modname:
  *                     modname = getattr(cls, '__module__', None)             # <<<<<<<<<<<<<<
  *             if modname and clsname:
  *                 name = modname + '.' + clsname
  */
-        __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_n_s_module, Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_n_s_module, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 346, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_modname, __pyx_t_4);
         __pyx_t_4 = 0;
-        goto __pyx_L7;
+
+        /* "libpetsc4py.pyx":345
+ *             if cls:
+ *                 clsname = getattr(cls, '__name__', None)
+ *                 if not modname:             # <<<<<<<<<<<<<<
+ *                     modname = getattr(cls, '__module__', None)
+ *             if modname and clsname:
+ */
       }
-      __pyx_L7:;
-      goto __pyx_L6;
+
+      /* "libpetsc4py.pyx":343
+ *             clsname = None
+ *             cls = getattr(ctx, '__class__', None)
+ *             if cls:             # <<<<<<<<<<<<<<
+ *                 clsname = getattr(cls, '__name__', None)
+ *                 if not modname:
+ */
     }
-    __pyx_L6:;
 
-    /* "libpetsc4py.pyx":344
+    /* "libpetsc4py.pyx":347
  *                 if not modname:
  *                     modname = getattr(cls, '__module__', None)
  *             if modname and clsname:             # <<<<<<<<<<<<<<
  *                 name = modname + '.' + clsname
  *             elif clsname:
  */
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_modname); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_modname); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 347, __pyx_L1_error)
     if (__pyx_t_1) {
     } else {
       __pyx_t_2 = __pyx_t_1;
       goto __pyx_L9_bool_binop_done;
     }
-    if (unlikely(!__pyx_v_clsname)) { __Pyx_RaiseUnboundLocalError("clsname"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_clsname); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_clsname); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 347, __pyx_L1_error)
     __pyx_t_2 = __pyx_t_1;
     __pyx_L9_bool_binop_done:;
     if (__pyx_t_2) {
 
-      /* "libpetsc4py.pyx":345
+      /* "libpetsc4py.pyx":348
  *                     modname = getattr(cls, '__module__', None)
  *             if modname and clsname:
  *                 name = modname + '.' + clsname             # <<<<<<<<<<<<<<
  *             elif clsname:
  *                 name = clsname
  */
-      __pyx_t_4 = PyNumber_Add(__pyx_v_modname, __pyx_kp_s__4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyNumber_Add(__pyx_v_modname, __pyx_kp_s__3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 348, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      if (unlikely(!__pyx_v_clsname)) { __Pyx_RaiseUnboundLocalError("clsname"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-      __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_v_clsname); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_v_clsname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 348, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_5);
       __pyx_t_5 = 0;
+
+      /* "libpetsc4py.pyx":347
+ *                 if not modname:
+ *                     modname = getattr(cls, '__module__', None)
+ *             if modname and clsname:             # <<<<<<<<<<<<<<
+ *                 name = modname + '.' + clsname
+ *             elif clsname:
+ */
       goto __pyx_L8;
     }
 
-    /* "libpetsc4py.pyx":346
+    /* "libpetsc4py.pyx":349
  *             if modname and clsname:
  *                 name = modname + '.' + clsname
  *             elif clsname:             # <<<<<<<<<<<<<<
  *                 name = clsname
  *             elif modname:
  */
-    if (unlikely(!__pyx_v_clsname)) { __Pyx_RaiseUnboundLocalError("clsname"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_clsname); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_clsname); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 349, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "libpetsc4py.pyx":347
+      /* "libpetsc4py.pyx":350
  *                 name = modname + '.' + clsname
  *             elif clsname:
  *                 name = clsname             # <<<<<<<<<<<<<<
  *             elif modname:
  *                 name = modname
  */
-      if (unlikely(!__pyx_v_clsname)) { __Pyx_RaiseUnboundLocalError("clsname"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
       __Pyx_INCREF(__pyx_v_clsname);
       __Pyx_DECREF_SET(__pyx_v_name, __pyx_v_clsname);
+
+      /* "libpetsc4py.pyx":349
+ *             if modname and clsname:
+ *                 name = modname + '.' + clsname
+ *             elif clsname:             # <<<<<<<<<<<<<<
+ *                 name = clsname
+ *             elif modname:
+ */
       goto __pyx_L8;
     }
 
-    /* "libpetsc4py.pyx":348
+    /* "libpetsc4py.pyx":351
  *             elif clsname:
  *                 name = clsname
  *             elif modname:             # <<<<<<<<<<<<<<
  *                 name = modname
  *         if name is not None:
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_modname); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_modname); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 351, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "libpetsc4py.pyx":349
+      /* "libpetsc4py.pyx":352
  *                 name = clsname
  *             elif modname:
  *                 name = modname             # <<<<<<<<<<<<<<
@@ -5092,13 +5207,20 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  */
       __Pyx_INCREF(__pyx_v_modname);
       __Pyx_DECREF_SET(__pyx_v_name, __pyx_v_modname);
-      goto __pyx_L8;
+
+      /* "libpetsc4py.pyx":351
+ *             elif clsname:
+ *                 name = clsname
+ *             elif modname:             # <<<<<<<<<<<<<<
+ *                 name = modname
+ *         if name is not None:
+ */
     }
     __pyx_L8:;
   }
   __pyx_L5:;
 
-  /* "libpetsc4py.pyx":350
+  /* "libpetsc4py.pyx":353
  *             elif modname:
  *                 name = modname
  *         if name is not None:             # <<<<<<<<<<<<<<
@@ -5109,14 +5231,14 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":351
+    /* "libpetsc4py.pyx":354
  *                 name = modname
  *         if name is not None:
  *             self.name = name.encode()             # <<<<<<<<<<<<<<
  *         if self.name is not None:
  *             return self.name
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 354, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -5129,24 +5251,30 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
       }
     }
     if (__pyx_t_6) {
-      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 354, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
-      __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 354, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 354, __pyx_L1_error)
     __Pyx_GIVEREF(__pyx_t_5);
     __Pyx_GOTREF(__pyx_v_self->name);
     __Pyx_DECREF(__pyx_v_self->name);
     __pyx_v_self->name = ((PyObject*)__pyx_t_5);
     __pyx_t_5 = 0;
-    goto __pyx_L11;
-  }
-  __pyx_L11:;
 
-  /* "libpetsc4py.pyx":352
+    /* "libpetsc4py.pyx":353
+ *             elif modname:
+ *                 name = modname
+ *         if name is not None:             # <<<<<<<<<<<<<<
+ *             self.name = name.encode()
+ *         if self.name is not None:
+ */
+  }
+
+  /* "libpetsc4py.pyx":355
  *         if name is not None:
  *             self.name = name.encode()
  *         if self.name is not None:             # <<<<<<<<<<<<<<
@@ -5157,19 +5285,27 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":353
+    /* "libpetsc4py.pyx":356
  *             self.name = name.encode()
  *         if self.name is not None:
  *             return self.name             # <<<<<<<<<<<<<<
  *         return NULL
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_v_self->name); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_v_self->name); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 356, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":355
+ *         if name is not None:
+ *             self.name = name.encode()
+ *         if self.name is not None:             # <<<<<<<<<<<<<<
+ *             return self.name
+ *         return NULL
+ */
   }
 
-  /* "libpetsc4py.pyx":354
+  /* "libpetsc4py.pyx":357
  *         if self.name is not None:
  *             return self.name
  *         return NULL             # <<<<<<<<<<<<<<
@@ -5179,7 +5315,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __pyx_r = NULL;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":328
+  /* "libpetsc4py.pyx":330
  *         return 0
  * 
  *     cdef char* getname(self) except? NULL:             # <<<<<<<<<<<<<<
@@ -5198,13 +5334,13 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XDECREF(__pyx_v_modname);
-  __Pyx_XDECREF(__pyx_v_cls);
   __Pyx_XDECREF(__pyx_v_clsname);
+  __Pyx_XDECREF(__pyx_v_cls);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":356
+/* "libpetsc4py.pyx":359
  *         return NULL
  * 
  * cdef createcontext(char name_p[]):             # <<<<<<<<<<<<<<
@@ -5229,12 +5365,9 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *(*__pyx_t_7)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createcontext", 0);
 
-  /* "libpetsc4py.pyx":357
+  /* "libpetsc4py.pyx":360
  * 
  * cdef createcontext(char name_p[]):
  *     if name_p == NULL: return None             # <<<<<<<<<<<<<<
@@ -5249,19 +5382,19 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":358
+  /* "libpetsc4py.pyx":361
  * cdef createcontext(char name_p[]):
  *     if name_p == NULL: return None
  *     cdef name = bytes2str(name_p)             # <<<<<<<<<<<<<<
  *     cdef mod, path, modname=None
  *     cdef cls, attr, clsname=None
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_bytes2str(__pyx_v_name_p); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_bytes2str(__pyx_v_name_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_name = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":359
+  /* "libpetsc4py.pyx":362
  *     if name_p == NULL: return None
  *     cdef name = bytes2str(name_p)
  *     cdef mod, path, modname=None             # <<<<<<<<<<<<<<
@@ -5271,7 +5404,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   __Pyx_INCREF(Py_None);
   __pyx_v_modname = Py_None;
 
-  /* "libpetsc4py.pyx":360
+  /* "libpetsc4py.pyx":363
  *     cdef name = bytes2str(name_p)
  *     cdef mod, path, modname=None
  *     cdef cls, attr, clsname=None             # <<<<<<<<<<<<<<
@@ -5281,25 +5414,25 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   __Pyx_INCREF(Py_None);
   __pyx_v_clsname = Py_None;
 
-  /* "libpetsc4py.pyx":362
+  /* "libpetsc4py.pyx":365
  *     cdef cls, attr, clsname=None
  *     # path/to/filename.py:{function|class}
  *     if ':' in name:             # <<<<<<<<<<<<<<
  *         path, attr = parse_url(name)
  *         mod = load_module(path)
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_kp_s__2, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 365, __pyx_L1_error)
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":363
+    /* "libpetsc4py.pyx":366
  *     # path/to/filename.py:{function|class}
  *     if ':' in name:
  *         path, attr = parse_url(name)             # <<<<<<<<<<<<<<
  *         mod = load_module(path)
  *         if attr:
  */
-    __pyx_t_2 = __pyx_f_11libpetsc4py_parse_url(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_11libpetsc4py_parse_url(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
       PyObject* sequence = __pyx_t_2;
@@ -5311,7 +5444,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(0, 366, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -5324,15 +5457,15 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 366, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 366, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 366, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
@@ -5340,7 +5473,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __Pyx_GOTREF(__pyx_t_4);
       index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 366, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L6_unpacking_done;
@@ -5348,7 +5481,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 366, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __pyx_v_path = __pyx_t_4;
@@ -5356,41 +5489,41 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
     __pyx_v_attr = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "libpetsc4py.pyx":364
+    /* "libpetsc4py.pyx":367
  *     if ':' in name:
  *         path, attr = parse_url(name)
  *         mod = load_module(path)             # <<<<<<<<<<<<<<
  *         if attr:
  *             cls = getattr(mod, attr)
  */
-    __pyx_t_2 = __pyx_f_11libpetsc4py_load_module(__pyx_v_path); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_11libpetsc4py_load_module(__pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_mod = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":365
+    /* "libpetsc4py.pyx":368
  *         path, attr = parse_url(name)
  *         mod = load_module(path)
  *         if attr:             # <<<<<<<<<<<<<<
  *             cls = getattr(mod, attr)
  *             return cls()
  */
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_attr); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_attr); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 368, __pyx_L1_error)
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":366
+      /* "libpetsc4py.pyx":369
  *         mod = load_module(path)
  *         if attr:
  *             cls = getattr(mod, attr)             # <<<<<<<<<<<<<<
  *             return cls()
  *         else:
  */
-      __pyx_t_2 = __Pyx_GetAttr(__pyx_v_mod, __pyx_v_attr); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_GetAttr(__pyx_v_mod, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_v_cls = __pyx_t_2;
       __pyx_t_2 = 0;
 
-      /* "libpetsc4py.pyx":367
+      /* "libpetsc4py.pyx":370
  *         if attr:
  *             cls = getattr(mod, attr)
  *             return cls()             # <<<<<<<<<<<<<<
@@ -5410,54 +5543,70 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       goto __pyx_L0;
+
+      /* "libpetsc4py.pyx":368
+ *         path, attr = parse_url(name)
+ *         mod = load_module(path)
+ *         if attr:             # <<<<<<<<<<<<<<
+ *             cls = getattr(mod, attr)
+ *             return cls()
+ */
     }
-    /*else*/ {
 
-      /* "libpetsc4py.pyx":369
+    /* "libpetsc4py.pyx":372
  *             return cls()
  *         else:
  *             return mod             # <<<<<<<<<<<<<<
  *     # package.module[.{function|class}]
  *     if '.' in name:
  */
+    /*else*/ {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_v_mod);
       __pyx_r = __pyx_v_mod;
       goto __pyx_L0;
     }
+
+    /* "libpetsc4py.pyx":365
+ *     cdef cls, attr, clsname=None
+ *     # path/to/filename.py:{function|class}
+ *     if ':' in name:             # <<<<<<<<<<<<<<
+ *         path, attr = parse_url(name)
+ *         mod = load_module(path)
+ */
   }
 
-  /* "libpetsc4py.pyx":371
+  /* "libpetsc4py.pyx":374
  *             return mod
  *     # package.module[.{function|class}]
  *     if '.' in name:             # <<<<<<<<<<<<<<
  *         modname, clsname = name.rsplit('.', 1)
  *         mod = PyImport_Import(modname)
  */
-  __pyx_t_3 = (__Pyx_PySequence_Contains(__pyx_kp_s__4, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s__3, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 374, __pyx_L1_error)
   __pyx_t_1 = (__pyx_t_3 != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":372
+    /* "libpetsc4py.pyx":375
  *     # package.module[.{function|class}]
  *     if '.' in name:
  *         modname, clsname = name.rsplit('.', 1)             # <<<<<<<<<<<<<<
  *         mod = PyImport_Import(modname)
  *         if hasattr(mod, clsname):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_rsplit); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_rsplit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 375, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -5470,7 +5619,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(0, 375, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -5483,15 +5632,15 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __Pyx_INCREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 375, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       #endif
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 375, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
@@ -5499,7 +5648,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __Pyx_GOTREF(__pyx_t_2);
       index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L9_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 375, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L10_unpacking_done;
@@ -5507,7 +5656,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 375, __pyx_L1_error)
       __pyx_L10_unpacking_done:;
     }
     __Pyx_DECREF_SET(__pyx_v_modname, __pyx_t_2);
@@ -5515,42 +5664,42 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
     __Pyx_DECREF_SET(__pyx_v_clsname, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "libpetsc4py.pyx":373
+    /* "libpetsc4py.pyx":376
  *     if '.' in name:
  *         modname, clsname = name.rsplit('.', 1)
  *         mod = PyImport_Import(modname)             # <<<<<<<<<<<<<<
  *         if hasattr(mod, clsname):
  *             cls = getattr(mod, clsname)
  */
-    __pyx_t_5 = PyImport_Import(__pyx_v_modname); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyImport_Import(__pyx_v_modname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 376, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_v_mod = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "libpetsc4py.pyx":374
+    /* "libpetsc4py.pyx":377
  *         modname, clsname = name.rsplit('.', 1)
  *         mod = PyImport_Import(modname)
  *         if hasattr(mod, clsname):             # <<<<<<<<<<<<<<
  *             cls = getattr(mod, clsname)
  *             if not PyModule_Check(cls):
  */
-    __pyx_t_1 = PyObject_HasAttr(__pyx_v_mod, __pyx_v_clsname); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_HasAttr(__pyx_v_mod, __pyx_v_clsname); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 377, __pyx_L1_error)
     __pyx_t_3 = (__pyx_t_1 != 0);
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":375
+      /* "libpetsc4py.pyx":378
  *         mod = PyImport_Import(modname)
  *         if hasattr(mod, clsname):
  *             cls = getattr(mod, clsname)             # <<<<<<<<<<<<<<
  *             if not PyModule_Check(cls):
  *                 return cls()
  */
-      __pyx_t_5 = __Pyx_GetAttr(__pyx_v_mod, __pyx_v_clsname); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_GetAttr(__pyx_v_mod, __pyx_v_clsname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 378, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_v_cls = __pyx_t_5;
       __pyx_t_5 = 0;
 
-      /* "libpetsc4py.pyx":376
+      /* "libpetsc4py.pyx":379
  *         if hasattr(mod, clsname):
  *             cls = getattr(mod, clsname)
  *             if not PyModule_Check(cls):             # <<<<<<<<<<<<<<
@@ -5560,7 +5709,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __pyx_t_3 = ((!(PyModule_Check(__pyx_v_cls) != 0)) != 0);
       if (__pyx_t_3) {
 
-        /* "libpetsc4py.pyx":377
+        /* "libpetsc4py.pyx":380
  *             cls = getattr(mod, clsname)
  *             if not PyModule_Check(cls):
  *                 return cls()             # <<<<<<<<<<<<<<
@@ -5580,37 +5729,57 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
           }
         }
         if (__pyx_t_2) {
-          __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 380, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         } else {
-          __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 380, __pyx_L1_error)
         }
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_r = __pyx_t_5;
         __pyx_t_5 = 0;
         goto __pyx_L0;
+
+        /* "libpetsc4py.pyx":379
+ *         if hasattr(mod, clsname):
+ *             cls = getattr(mod, clsname)
+ *             if not PyModule_Check(cls):             # <<<<<<<<<<<<<<
+ *                 return cls()
+ *     # package[.module]
+ */
       }
-      goto __pyx_L11;
+
+      /* "libpetsc4py.pyx":377
+ *         modname, clsname = name.rsplit('.', 1)
+ *         mod = PyImport_Import(modname)
+ *         if hasattr(mod, clsname):             # <<<<<<<<<<<<<<
+ *             cls = getattr(mod, clsname)
+ *             if not PyModule_Check(cls):
+ */
     }
-    __pyx_L11:;
-    goto __pyx_L8;
+
+    /* "libpetsc4py.pyx":374
+ *             return mod
+ *     # package.module[.{function|class}]
+ *     if '.' in name:             # <<<<<<<<<<<<<<
+ *         modname, clsname = name.rsplit('.', 1)
+ *         mod = PyImport_Import(modname)
+ */
   }
-  __pyx_L8:;
 
-  /* "libpetsc4py.pyx":379
+  /* "libpetsc4py.pyx":382
  *                 return cls()
  *     # package[.module]
  *     mod = PyImport_Import(name)             # <<<<<<<<<<<<<<
  *     return mod
  * 
  */
-  __pyx_t_5 = PyImport_Import(__pyx_v_name); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyImport_Import(__pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_XDECREF_SET(__pyx_v_mod, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "libpetsc4py.pyx":380
+  /* "libpetsc4py.pyx":383
  *     # package[.module]
  *     mod = PyImport_Import(name)
  *     return mod             # <<<<<<<<<<<<<<
@@ -5622,7 +5791,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   __pyx_r = __pyx_v_mod;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":356
+  /* "libpetsc4py.pyx":359
  *         return NULL
  * 
  * cdef createcontext(char name_p[]):             # <<<<<<<<<<<<<<
@@ -5651,7 +5820,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":382
+/* "libpetsc4py.pyx":385
  *     return mod
  * 
  * cdef int viewcontext(_PyObj ctx, PetscViewer viewer) except -1:             # <<<<<<<<<<<<<<
@@ -5668,12 +5837,9 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
   int __pyx_t_1;
   char *__pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("viewcontext", 0);
 
-  /* "libpetsc4py.pyx":383
+  /* "libpetsc4py.pyx":386
  * 
  * cdef int viewcontext(_PyObj ctx, PetscViewer viewer) except -1:
  *     cdef PetscBool isascii = PETSC_FALSE, isstring = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -5683,35 +5849,35 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
   __pyx_v_isascii = PETSC_FALSE;
   __pyx_v_isstring = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":384
+  /* "libpetsc4py.pyx":387
  * cdef int viewcontext(_PyObj ctx, PetscViewer viewer) except -1:
  *     cdef PetscBool isascii = PETSC_FALSE, isstring = PETSC_FALSE
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERASCII,  &isascii)  )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERSTRING, &isstring) )
  *     cdef char *name = ctx.getname()
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectTypeCompare(((PetscObject)__pyx_v_viewer), PETSCVIEWERASCII, (&__pyx_v_isascii))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectTypeCompare(((PetscObject)__pyx_v_viewer), PETSCVIEWERASCII, (&__pyx_v_isascii))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 387, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":385
+  /* "libpetsc4py.pyx":388
  *     cdef PetscBool isascii = PETSC_FALSE, isstring = PETSC_FALSE
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERASCII,  &isascii)  )
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERSTRING, &isstring) )             # <<<<<<<<<<<<<<
  *     cdef char *name = ctx.getname()
  *     if isascii:
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectTypeCompare(((PetscObject)__pyx_v_viewer), PETSCVIEWERSTRING, (&__pyx_v_isstring))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectTypeCompare(((PetscObject)__pyx_v_viewer), PETSCVIEWERSTRING, (&__pyx_v_isstring))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 388, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":386
+  /* "libpetsc4py.pyx":389
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERASCII,  &isascii)  )
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERSTRING, &isstring) )
  *     cdef char *name = ctx.getname()             # <<<<<<<<<<<<<<
  *     if isascii:
  *         if name == NULL: name = b"unknown/no yet set"
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyObj *)__pyx_v_ctx->__pyx_vtab)->getname(__pyx_v_ctx); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyObj *)__pyx_v_ctx->__pyx_vtab)->getname(__pyx_v_ctx); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) __PYX_ERR(0, 389, __pyx_L1_error)
   __pyx_v_name = __pyx_t_2;
 
-  /* "libpetsc4py.pyx":387
+  /* "libpetsc4py.pyx":390
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERSTRING, &isstring) )
  *     cdef char *name = ctx.getname()
  *     if isascii:             # <<<<<<<<<<<<<<
@@ -5720,7 +5886,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
  */
   if (__pyx_v_isascii) {
 
-    /* "libpetsc4py.pyx":388
+    /* "libpetsc4py.pyx":391
  *     cdef char *name = ctx.getname()
  *     if isascii:
  *         if name == NULL: name = b"unknown/no yet set"             # <<<<<<<<<<<<<<
@@ -5729,24 +5895,28 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
  */
     __pyx_t_3 = ((__pyx_v_name == NULL) != 0);
     if (__pyx_t_3) {
-      __pyx_v_name = __pyx_k_unknown_no_yet_set;
-      goto __pyx_L4;
+      __pyx_v_name = ((char *)"unknown/no yet set");
     }
-    __pyx_L4:;
 
-    /* "libpetsc4py.pyx":389
+    /* "libpetsc4py.pyx":392
  *     if isascii:
  *         if name == NULL: name = b"unknown/no yet set"
  *         CHKERR( PetscViewerASCIIPrintf(viewer, b"  Python: %s\n", name) )             # <<<<<<<<<<<<<<
  *     if isstring:
  *         if name == NULL: name = b"<unknown>"
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscViewerASCIIPrintf(__pyx_v_viewer, __pyx_k_Python_s, __pyx_v_name)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscViewerASCIIPrintf(__pyx_v_viewer, ((char *)"  Python: %s\n"), __pyx_v_name)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 392, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":390
+ *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERSTRING, &isstring) )
+ *     cdef char *name = ctx.getname()
+ *     if isascii:             # <<<<<<<<<<<<<<
+ *         if name == NULL: name = b"unknown/no yet set"
+ *         CHKERR( PetscViewerASCIIPrintf(viewer, b"  Python: %s\n", name) )
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":390
+  /* "libpetsc4py.pyx":393
  *         if name == NULL: name = b"unknown/no yet set"
  *         CHKERR( PetscViewerASCIIPrintf(viewer, b"  Python: %s\n", name) )
  *     if isstring:             # <<<<<<<<<<<<<<
@@ -5755,7 +5925,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
  */
   if (__pyx_v_isstring) {
 
-    /* "libpetsc4py.pyx":391
+    /* "libpetsc4py.pyx":394
  *         CHKERR( PetscViewerASCIIPrintf(viewer, b"  Python: %s\n", name) )
  *     if isstring:
  *         if name == NULL: name = b"<unknown>"             # <<<<<<<<<<<<<<
@@ -5764,24 +5934,28 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
  */
     __pyx_t_3 = ((__pyx_v_name == NULL) != 0);
     if (__pyx_t_3) {
-      __pyx_v_name = __pyx_k_unknown;
-      goto __pyx_L6;
+      __pyx_v_name = ((char *)"<unknown>");
     }
-    __pyx_L6:;
 
-    /* "libpetsc4py.pyx":392
+    /* "libpetsc4py.pyx":395
  *     if isstring:
  *         if name == NULL: name = b"<unknown>"
  *         CHKERR( PetscViewerStringSPrintf(viewer,"%s", name) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscViewerStringSPrintf(__pyx_v_viewer, __pyx_k_s, __pyx_v_name)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscViewerStringSPrintf(__pyx_v_viewer, ((char *)"%s"), __pyx_v_name)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 395, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":393
+ *         if name == NULL: name = b"unknown/no yet set"
+ *         CHKERR( PetscViewerASCIIPrintf(viewer, b"  Python: %s\n", name) )
+ *     if isstring:             # <<<<<<<<<<<<<<
+ *         if name == NULL: name = b"<unknown>"
+ *         CHKERR( PetscViewerStringSPrintf(viewer,"%s", name) )
+ */
   }
-  __pyx_L5:;
 
-  /* "libpetsc4py.pyx":393
+  /* "libpetsc4py.pyx":396
  *         if name == NULL: name = b"<unknown>"
  *         CHKERR( PetscViewerStringSPrintf(viewer,"%s", name) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -5791,7 +5965,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":382
+  /* "libpetsc4py.pyx":385
  *     return mod
  * 
  * cdef int viewcontext(_PyObj ctx, PetscViewer viewer) except -1:             # <<<<<<<<<<<<<<
@@ -5808,7 +5982,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":510
+/* "libpetsc4py.pyx":513
  * @cython.internal
  * cdef class _PyMat(_PyObj): pass
  * cdef inline _PyMat PyMat(PetscMat mat):             # <<<<<<<<<<<<<<
@@ -5822,12 +5996,9 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
   int __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("PyMat", 0);
 
-  /* "libpetsc4py.pyx":511
+  /* "libpetsc4py.pyx":514
  * cdef class _PyMat(_PyObj): pass
  * cdef inline _PyMat PyMat(PetscMat mat):
  *     if mat != NULL and mat.data != NULL:             # <<<<<<<<<<<<<<
@@ -5845,7 +6016,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":512
+    /* "libpetsc4py.pyx":515
  * cdef inline _PyMat PyMat(PetscMat mat):
  *     if mat != NULL and mat.data != NULL:
  *         return <_PyMat>mat.data             # <<<<<<<<<<<<<<
@@ -5856,26 +6027,34 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
     __Pyx_INCREF(((PyObject *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_v_mat->data)));
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_v_mat->data);
     goto __pyx_L0;
-  }
-  /*else*/ {
 
     /* "libpetsc4py.pyx":514
+ * cdef class _PyMat(_PyObj): pass
+ * cdef inline _PyMat PyMat(PetscMat mat):
+ *     if mat != NULL and mat.data != NULL:             # <<<<<<<<<<<<<<
+ *         return <_PyMat>mat.data
+ *     else:
+ */
+  }
+
+  /* "libpetsc4py.pyx":517
  *         return <_PyMat>mat.data
  *     else:
  *         return _PyMat.__new__(_PyMat)             # <<<<<<<<<<<<<<
  * 
  * cdef public PetscErrorCode MatPythonGetContext(PetscMat mat, void **ctx) \
  */
+  /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PyMat(((PyTypeObject *)((PyObject*)__pyx_ptype_11libpetsc4py__PyMat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PyMat(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PyMat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 517, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyMat)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyMat)))) __PYX_ERR(0, 517, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":510
+  /* "libpetsc4py.pyx":513
  * @cython.internal
  * cdef class _PyMat(_PyObj): pass
  * cdef inline _PyMat PyMat(PetscMat mat):             # <<<<<<<<<<<<<<
@@ -5894,7 +6073,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":516
+/* "libpetsc4py.pyx":519
  *         return _PyMat.__new__(_PyMat)
  * 
  * cdef public PetscErrorCode MatPythonGetContext(PetscMat mat, void **ctx) \             # <<<<<<<<<<<<<<
@@ -5907,33 +6086,30 @@ PetscErrorCode MatPythonGetContext(Mat __pyx_v_mat, void **__pyx_v_ctx) {
   __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("MatPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":518
+  /* "libpetsc4py.pyx":521
  * cdef public PetscErrorCode MatPythonGetContext(PetscMat mat, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"MatPythonGetContext")             # <<<<<<<<<<<<<<
  *     PyMat(mat).getcontext(ctx)
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatPythonGetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatPythonGetContext"));
 
-  /* "libpetsc4py.pyx":519
+  /* "libpetsc4py.pyx":522
  *     except IERR:
  *     FunctionBegin(b"MatPythonGetContext")
  *     PyMat(mat).getcontext(ctx)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyMat *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyMat *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 522, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":520
+  /* "libpetsc4py.pyx":523
  *     FunctionBegin(b"MatPythonGetContext")
  *     PyMat(mat).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -5943,7 +6119,7 @@ PetscErrorCode MatPythonGetContext(Mat __pyx_v_mat, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":516
+  /* "libpetsc4py.pyx":519
  *         return _PyMat.__new__(_PyMat)
  * 
  * cdef public PetscErrorCode MatPythonGetContext(PetscMat mat, void **ctx) \             # <<<<<<<<<<<<<<
@@ -5961,7 +6137,7 @@ PetscErrorCode MatPythonGetContext(Mat __pyx_v_mat, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":522
+/* "libpetsc4py.pyx":525
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode MatPythonSetContext(PetscMat mat, void *ctx) \             # <<<<<<<<<<<<<<
@@ -5975,36 +6151,33 @@ PetscErrorCode MatPythonSetContext(Mat __pyx_v_mat, void *__pyx_v_ctx) {
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("MatPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":524
+  /* "libpetsc4py.pyx":527
  * cdef public PetscErrorCode MatPythonSetContext(PetscMat mat, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"MatPythonSetContext")             # <<<<<<<<<<<<<<
  *     PyMat(mat).setcontext(ctx, Mat_(mat))
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatPythonSetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatPythonSetContext"));
 
-  /* "libpetsc4py.pyx":525
+  /* "libpetsc4py.pyx":528
  *     except IERR:
  *     FunctionBegin(b"MatPythonSetContext")
  *     PyMat(mat).setcontext(ctx, Mat_(mat))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PyMat *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PyMat *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 528, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":526
+  /* "libpetsc4py.pyx":529
  *     FunctionBegin(b"MatPythonSetContext")
  *     PyMat(mat).setcontext(ctx, Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6014,7 +6187,7 @@ PetscErrorCode MatPythonSetContext(Mat __pyx_v_mat, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":522
+  /* "libpetsc4py.pyx":525
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode MatPythonSetContext(PetscMat mat, void *ctx) \             # <<<<<<<<<<<<<<
@@ -6033,7 +6206,7 @@ PetscErrorCode MatPythonSetContext(Mat __pyx_v_mat, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":528
+/* "libpetsc4py.pyx":531
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatPythonSetType_PYTHON(PetscMat mat, char name[]) \             # <<<<<<<<<<<<<<
@@ -6049,24 +6222,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
   PyObject *__pyx_t_2 = NULL;
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
-  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("MatPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":530
+  /* "libpetsc4py.pyx":533
  * cdef PetscErrorCode MatPythonSetType_PYTHON(PetscMat mat, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatPythonSetType_PYTHON);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":531
+  /* "libpetsc4py.pyx":534
  *     except IERR with gil:
  *     FunctionBegin(b"MatPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -6079,40 +6249,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":532
+  /* "libpetsc4py.pyx":535
  *     FunctionBegin(b"MatPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)             # <<<<<<<<<<<<<<
  *     MatPythonSetContext(mat, <void*>ctx)
  *     PyMat(mat).setname(name)
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":533
+  /* "libpetsc4py.pyx":536
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  *     MatPythonSetContext(mat, <void*>ctx)             # <<<<<<<<<<<<<<
  *     PyMat(mat).setname(name)
  *     return FunctionEnd()
  */
-  __pyx_t_3 = MatPythonSetContext(__pyx_v_mat, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = MatPythonSetContext(__pyx_v_mat, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 536, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":534
+  /* "libpetsc4py.pyx":537
  *     cdef object ctx = createcontext(name)
  *     MatPythonSetContext(mat, <void*>ctx)
  *     PyMat(mat).setname(name)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PyMat *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PyMat *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 537, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":535
+  /* "libpetsc4py.pyx":538
  *     MatPythonSetContext(mat, <void*>ctx)
  *     PyMat(mat).setname(name)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6122,7 +6292,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":528
+  /* "libpetsc4py.pyx":531
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatPythonSetType_PYTHON(PetscMat mat, char name[]) \             # <<<<<<<<<<<<<<
@@ -6144,7 +6314,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":537
+/* "libpetsc4py.pyx":540
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCreate_Python(             # <<<<<<<<<<<<<<
@@ -6160,24 +6330,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
   MatOps __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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":541
+  /* "libpetsc4py.pyx":544
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatCreate_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef MatOps ops       = mat.ops
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatCreate_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatCreate_Python"));
 
-  /* "libpetsc4py.pyx":543
+  /* "libpetsc4py.pyx":546
  *     FunctionBegin(b"MatCreate_Python")
  *     #
  *     cdef MatOps ops       = mat.ops             # <<<<<<<<<<<<<<
@@ -6187,7 +6354,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
   __pyx_t_1 = __pyx_v_mat->ops;
   __pyx_v_ops = __pyx_t_1;
 
-  /* "libpetsc4py.pyx":544
+  /* "libpetsc4py.pyx":547
  *     #
  *     cdef MatOps ops       = mat.ops
  *     ops.destroy           = MatDestroy_Python             # <<<<<<<<<<<<<<
@@ -6196,7 +6363,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_MatDestroy_Python;
 
-  /* "libpetsc4py.pyx":545
+  /* "libpetsc4py.pyx":548
  *     cdef MatOps ops       = mat.ops
  *     ops.destroy           = MatDestroy_Python
  *     ops.setfromoptions    = MatSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -6205,7 +6372,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_MatSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":546
+  /* "libpetsc4py.pyx":549
  *     ops.destroy           = MatDestroy_Python
  *     ops.setfromoptions    = MatSetFromOptions_Python
  *     ops.view              = MatView_Python             # <<<<<<<<<<<<<<
@@ -6214,7 +6381,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_MatView_Python;
 
-  /* "libpetsc4py.pyx":547
+  /* "libpetsc4py.pyx":550
  *     ops.setfromoptions    = MatSetFromOptions_Python
  *     ops.view              = MatView_Python
  *     ops.duplicate         = MatDuplicate_Python             # <<<<<<<<<<<<<<
@@ -6223,7 +6390,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->duplicate = __pyx_f_11libpetsc4py_MatDuplicate_Python;
 
-  /* "libpetsc4py.pyx":548
+  /* "libpetsc4py.pyx":551
  *     ops.view              = MatView_Python
  *     ops.duplicate         = MatDuplicate_Python
  *     ops.copy              = MatCopy_Python             # <<<<<<<<<<<<<<
@@ -6232,7 +6399,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->copy = __pyx_f_11libpetsc4py_MatCopy_Python;
 
-  /* "libpetsc4py.pyx":549
+  /* "libpetsc4py.pyx":552
  *     ops.duplicate         = MatDuplicate_Python
  *     ops.copy              = MatCopy_Python
  *     ops.getsubmatrix      = MatGetSubMatrix_Python             # <<<<<<<<<<<<<<
@@ -6241,7 +6408,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->getsubmatrix = __pyx_f_11libpetsc4py_MatGetSubMatrix_Python;
 
-  /* "libpetsc4py.pyx":550
+  /* "libpetsc4py.pyx":553
  *     ops.copy              = MatCopy_Python
  *     ops.getsubmatrix      = MatGetSubMatrix_Python
  *     ops.setoption         = MatSetOption_Python             # <<<<<<<<<<<<<<
@@ -6250,7 +6417,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->setoption = __pyx_f_11libpetsc4py_MatSetOption_Python;
 
-  /* "libpetsc4py.pyx":551
+  /* "libpetsc4py.pyx":554
  *     ops.getsubmatrix      = MatGetSubMatrix_Python
  *     ops.setoption         = MatSetOption_Python
  *     ops.setup             = MatSetUp_Python             # <<<<<<<<<<<<<<
@@ -6259,7 +6426,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_MatSetUp_Python;
 
-  /* "libpetsc4py.pyx":552
+  /* "libpetsc4py.pyx":555
  *     ops.setoption         = MatSetOption_Python
  *     ops.setup             = MatSetUp_Python
  *     ops.assemblybegin     = MatAssemblyBegin_Python             # <<<<<<<<<<<<<<
@@ -6268,7 +6435,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->assemblybegin = __pyx_f_11libpetsc4py_MatAssemblyBegin_Python;
 
-  /* "libpetsc4py.pyx":553
+  /* "libpetsc4py.pyx":556
  *     ops.setup             = MatSetUp_Python
  *     ops.assemblybegin     = MatAssemblyBegin_Python
  *     ops.assemblyend       = MatAssemblyEnd_Python             # <<<<<<<<<<<<<<
@@ -6277,7 +6444,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->assemblyend = __pyx_f_11libpetsc4py_MatAssemblyEnd_Python;
 
-  /* "libpetsc4py.pyx":554
+  /* "libpetsc4py.pyx":557
  *     ops.assemblybegin     = MatAssemblyBegin_Python
  *     ops.assemblyend       = MatAssemblyEnd_Python
  *     ops.zeroentries       = MatZeroEntries_Python             # <<<<<<<<<<<<<<
@@ -6286,7 +6453,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->zeroentries = __pyx_f_11libpetsc4py_MatZeroEntries_Python;
 
-  /* "libpetsc4py.pyx":555
+  /* "libpetsc4py.pyx":558
  *     ops.assemblyend       = MatAssemblyEnd_Python
  *     ops.zeroentries       = MatZeroEntries_Python
  *     ops.scale             = MatScale_Python             # <<<<<<<<<<<<<<
@@ -6295,7 +6462,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->scale = __pyx_f_11libpetsc4py_MatScale_Python;
 
-  /* "libpetsc4py.pyx":556
+  /* "libpetsc4py.pyx":559
  *     ops.zeroentries       = MatZeroEntries_Python
  *     ops.scale             = MatScale_Python
  *     ops.shift             = MatShift_Python             # <<<<<<<<<<<<<<
@@ -6304,7 +6471,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->shift = __pyx_f_11libpetsc4py_MatShift_Python;
 
-  /* "libpetsc4py.pyx":557
+  /* "libpetsc4py.pyx":560
  *     ops.scale             = MatScale_Python
  *     ops.shift             = MatShift_Python
  *     ops.getvecs           = MatCreateVecs_Python             # <<<<<<<<<<<<<<
@@ -6313,7 +6480,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->getvecs = __pyx_f_11libpetsc4py_MatCreateVecs_Python;
 
-  /* "libpetsc4py.pyx":558
+  /* "libpetsc4py.pyx":561
  *     ops.shift             = MatShift_Python
  *     ops.getvecs           = MatCreateVecs_Python
  *     ops.mult              = MatMult_Python             # <<<<<<<<<<<<<<
@@ -6322,7 +6489,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->mult = __pyx_f_11libpetsc4py_MatMult_Python;
 
-  /* "libpetsc4py.pyx":559
+  /* "libpetsc4py.pyx":562
  *     ops.getvecs           = MatCreateVecs_Python
  *     ops.mult              = MatMult_Python
  *     ops.sor               = MatSOR_Python             # <<<<<<<<<<<<<<
@@ -6331,7 +6498,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->sor = __pyx_f_11libpetsc4py_MatSOR_Python;
 
-  /* "libpetsc4py.pyx":560
+  /* "libpetsc4py.pyx":563
  *     ops.mult              = MatMult_Python
  *     ops.sor               = MatSOR_Python
  *     ops.multtranspose     = MatMultTranspose_Python             # <<<<<<<<<<<<<<
@@ -6340,7 +6507,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multtranspose = __pyx_f_11libpetsc4py_MatMultTranspose_Python;
 
-  /* "libpetsc4py.pyx":561
+  /* "libpetsc4py.pyx":564
  *     ops.sor               = MatSOR_Python
  *     ops.multtranspose     = MatMultTranspose_Python
  *     ops.multhermitian     = MatMultHermitian_Python             # <<<<<<<<<<<<<<
@@ -6349,7 +6516,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multhermitiantranspose = __pyx_f_11libpetsc4py_MatMultHermitian_Python;
 
-  /* "libpetsc4py.pyx":562
+  /* "libpetsc4py.pyx":565
  *     ops.multtranspose     = MatMultTranspose_Python
  *     ops.multhermitian     = MatMultHermitian_Python
  *     ops.multadd           = MatMultAdd_Python             # <<<<<<<<<<<<<<
@@ -6358,7 +6525,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multadd = __pyx_f_11libpetsc4py_MatMultAdd_Python;
 
-  /* "libpetsc4py.pyx":563
+  /* "libpetsc4py.pyx":566
  *     ops.multhermitian     = MatMultHermitian_Python
  *     ops.multadd           = MatMultAdd_Python
  *     ops.multtransposeadd  = MatMultTransposeAdd_Python             # <<<<<<<<<<<<<<
@@ -6367,7 +6534,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multtransposeadd = __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python;
 
-  /* "libpetsc4py.pyx":564
+  /* "libpetsc4py.pyx":567
  *     ops.multadd           = MatMultAdd_Python
  *     ops.multtransposeadd  = MatMultTransposeAdd_Python
  *     ops.multhermitianadd  = MatMultHermitianAdd_Python             # <<<<<<<<<<<<<<
@@ -6376,7 +6543,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multhermitiantransposeadd = __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python;
 
-  /* "libpetsc4py.pyx":565
+  /* "libpetsc4py.pyx":568
  *     ops.multtransposeadd  = MatMultTransposeAdd_Python
  *     ops.multhermitianadd  = MatMultHermitianAdd_Python
  *     ops.multdiagonalblock = MatMultDiagonalBlock_Python             # <<<<<<<<<<<<<<
@@ -6385,7 +6552,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multdiagonalblock = __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python;
 
-  /* "libpetsc4py.pyx":566
+  /* "libpetsc4py.pyx":569
  *     ops.multhermitianadd  = MatMultHermitianAdd_Python
  *     ops.multdiagonalblock = MatMultDiagonalBlock_Python
  *     ops.solve             = MatSolve_Python             # <<<<<<<<<<<<<<
@@ -6394,7 +6561,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->solve = __pyx_f_11libpetsc4py_MatSolve_Python;
 
-  /* "libpetsc4py.pyx":567
+  /* "libpetsc4py.pyx":570
  *     ops.multdiagonalblock = MatMultDiagonalBlock_Python
  *     ops.solve             = MatSolve_Python
  *     ops.solvetranspose    = MatSolveTranspose_Python             # <<<<<<<<<<<<<<
@@ -6403,7 +6570,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->solvetranspose = __pyx_f_11libpetsc4py_MatSolveTranspose_Python;
 
-  /* "libpetsc4py.pyx":568
+  /* "libpetsc4py.pyx":571
  *     ops.solve             = MatSolve_Python
  *     ops.solvetranspose    = MatSolveTranspose_Python
  *     ops.solveadd          = MatSolveAdd_Python             # <<<<<<<<<<<<<<
@@ -6412,7 +6579,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->solveadd = __pyx_f_11libpetsc4py_MatSolveAdd_Python;
 
-  /* "libpetsc4py.pyx":569
+  /* "libpetsc4py.pyx":572
  *     ops.solvetranspose    = MatSolveTranspose_Python
  *     ops.solveadd          = MatSolveAdd_Python
  *     ops.solvetransposeadd = MatSolveTransposeAdd_Python             # <<<<<<<<<<<<<<
@@ -6421,7 +6588,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->solvetransposeadd = __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python;
 
-  /* "libpetsc4py.pyx":570
+  /* "libpetsc4py.pyx":573
  *     ops.solveadd          = MatSolveAdd_Python
  *     ops.solvetransposeadd = MatSolveTransposeAdd_Python
  *     ops.getdiagonal       = MatGetDiagonal_Python             # <<<<<<<<<<<<<<
@@ -6430,7 +6597,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->getdiagonal = __pyx_f_11libpetsc4py_MatGetDiagonal_Python;
 
-  /* "libpetsc4py.pyx":571
+  /* "libpetsc4py.pyx":574
  *     ops.solvetransposeadd = MatSolveTransposeAdd_Python
  *     ops.getdiagonal       = MatGetDiagonal_Python
  *     ops.setdiagonal       = MatSetDiagonal_Python             # <<<<<<<<<<<<<<
@@ -6439,7 +6606,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->diagonalset = __pyx_f_11libpetsc4py_MatSetDiagonal_Python;
 
-  /* "libpetsc4py.pyx":572
+  /* "libpetsc4py.pyx":575
  *     ops.getdiagonal       = MatGetDiagonal_Python
  *     ops.setdiagonal       = MatSetDiagonal_Python
  *     ops.diagonalscale     = MatDiagonalScale_Python             # <<<<<<<<<<<<<<
@@ -6448,7 +6615,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->diagonalscale = __pyx_f_11libpetsc4py_MatDiagonalScale_Python;
 
-  /* "libpetsc4py.pyx":573
+  /* "libpetsc4py.pyx":576
  *     ops.setdiagonal       = MatSetDiagonal_Python
  *     ops.diagonalscale     = MatDiagonalScale_Python
  *     ops.norm              = MatNorm_Python             # <<<<<<<<<<<<<<
@@ -6457,7 +6624,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->norm = __pyx_f_11libpetsc4py_MatNorm_Python;
 
-  /* "libpetsc4py.pyx":574
+  /* "libpetsc4py.pyx":577
  *     ops.diagonalscale     = MatDiagonalScale_Python
  *     ops.norm              = MatNorm_Python
  *     ops.realpart          = MatRealPart_Python             # <<<<<<<<<<<<<<
@@ -6466,7 +6633,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->realpart = __pyx_f_11libpetsc4py_MatRealPart_Python;
 
-  /* "libpetsc4py.pyx":575
+  /* "libpetsc4py.pyx":578
  *     ops.norm              = MatNorm_Python
  *     ops.realpart          = MatRealPart_Python
  *     ops.imagpart          = MatImagPart_Python             # <<<<<<<<<<<<<<
@@ -6475,7 +6642,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->imaginarypart = __pyx_f_11libpetsc4py_MatImagPart_Python;
 
-  /* "libpetsc4py.pyx":576
+  /* "libpetsc4py.pyx":579
  *     ops.realpart          = MatRealPart_Python
  *     ops.imagpart          = MatImagPart_Python
  *     ops.conjugate         = MatConjugate_Python             # <<<<<<<<<<<<<<
@@ -6484,7 +6651,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->conjugate = __pyx_f_11libpetsc4py_MatConjugate_Python;
 
-  /* "libpetsc4py.pyx":578
+  /* "libpetsc4py.pyx":581
  *     ops.conjugate         = MatConjugate_Python
  *     #
  *     mat.assembled    = PETSC_TRUE  # XXX             # <<<<<<<<<<<<<<
@@ -6493,7 +6660,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_mat->assembled = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":579
+  /* "libpetsc4py.pyx":582
  *     #
  *     mat.assembled    = PETSC_TRUE  # XXX
  *     mat.preallocated = PETSC_FALSE # XXX             # <<<<<<<<<<<<<<
@@ -6502,46 +6669,46 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_mat->preallocated = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":581
+  /* "libpetsc4py.pyx":584
  *     mat.preallocated = PETSC_FALSE # XXX
  *     #
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>mat,b"MatGetDiagonalBlock_C",
  *             <PetscVoidFunction>MatGetDiagonalBlock_Python) )
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_mat), __pyx_k_MatGetDiagonalBlock_C, ((PetscVoidFunction)__pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_mat), ((char *)"MatGetDiagonalBlock_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 584, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":584
+  /* "libpetsc4py.pyx":587
  *             <PetscObject>mat,b"MatGetDiagonalBlock_C",
  *             <PetscVoidFunction>MatGetDiagonalBlock_Python) )
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>mat,b"MatPythonSetType_C",
  *             <PetscVoidFunction>MatPythonSetType_PYTHON) )
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_mat), __pyx_k_MatPythonSetType_C, ((PetscVoidFunction)__pyx_f_11libpetsc4py_MatPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_mat), ((char *)"MatPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_MatPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 587, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":587
+  /* "libpetsc4py.pyx":590
  *             <PetscObject>mat,b"MatPythonSetType_C",
  *             <PetscVoidFunction>MatPythonSetType_PYTHON) )
  *     CHKERR( PetscObjectChangeTypeName(             # <<<<<<<<<<<<<<
  *             <PetscObject>mat,MATPYTHON) )
  *     #
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectChangeTypeName(((PetscObject)__pyx_v_mat), "python")); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectChangeTypeName(((PetscObject)__pyx_v_mat), "python")); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 590, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":590
+  /* "libpetsc4py.pyx":593
  *             <PetscObject>mat,MATPYTHON) )
  *     #
  *     cdef ctx = PyMat(NULL)             # <<<<<<<<<<<<<<
  *     mat.data = <void*> ctx
  *     Py_INCREF(<PyObject*>mat.data)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(NULL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 593, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":591
+  /* "libpetsc4py.pyx":594
  *     #
  *     cdef ctx = PyMat(NULL)
  *     mat.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -6550,7 +6717,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_mat->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":592
+  /* "libpetsc4py.pyx":595
  *     cdef ctx = PyMat(NULL)
  *     mat.data = <void*> ctx
  *     Py_INCREF(<PyObject*>mat.data)             # <<<<<<<<<<<<<<
@@ -6559,7 +6726,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   Py_INCREF(((PyObject *)__pyx_v_mat->data));
 
-  /* "libpetsc4py.pyx":593
+  /* "libpetsc4py.pyx":596
  *     mat.data = <void*> ctx
  *     Py_INCREF(<PyObject*>mat.data)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6569,7 +6736,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":537
+  /* "libpetsc4py.pyx":540
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCreate_Python(             # <<<<<<<<<<<<<<
@@ -6591,7 +6758,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":595
+/* "libpetsc4py.pyx":598
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDestroy_Python(             # <<<<<<<<<<<<<<
@@ -6613,51 +6780,48 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = 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("MatDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":599
+  /* "libpetsc4py.pyx":602
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatDestroy_Python")             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectComposeFunction(
  *             <PetscObject>mat,b"MatGetDiagonalBlock_C",
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatDestroy_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatDestroy_Python"));
 
-  /* "libpetsc4py.pyx":600
+  /* "libpetsc4py.pyx":603
  *     except IERR with gil:
  *     FunctionBegin(b"MatDestroy_Python")
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>mat,b"MatGetDiagonalBlock_C",
  *             <PetscVoidFunction>NULL) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_mat), __pyx_k_MatGetDiagonalBlock_C, ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_mat), ((char *)"MatGetDiagonalBlock_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 603, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":603
+  /* "libpetsc4py.pyx":606
  *             <PetscObject>mat,b"MatGetDiagonalBlock_C",
  *             <PetscVoidFunction>NULL) )
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>mat,b"MatPythonSetType_C",
  *             <PetscVoidFunction>NULL) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_mat), __pyx_k_MatPythonSetType_C, ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_mat), ((char *)"MatPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 606, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":606
+  /* "libpetsc4py.pyx":609
  *             <PetscObject>mat,b"MatPythonSetType_C",
  *             <PetscVoidFunction>NULL) )
  *     CHKERR( PetscObjectChangeTypeName(             # <<<<<<<<<<<<<<
  *             <PetscObject>mat,NULL) )
  *     #
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectChangeTypeName(((PetscObject)__pyx_v_mat), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectChangeTypeName(((PetscObject)__pyx_v_mat), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 609, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":609
+  /* "libpetsc4py.pyx":612
  *             <PetscObject>mat,NULL) )
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6670,7 +6834,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":610
+  /* "libpetsc4py.pyx":613
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -6679,7 +6843,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":611
+    /* "libpetsc4py.pyx":614
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(mat)             # <<<<<<<<<<<<<<
@@ -6688,17 +6852,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_mat);
 
-    /* "libpetsc4py.pyx":612
+    /* "libpetsc4py.pyx":615
  *     try:
  *         addRef(mat)
  *         MatPythonSetContext(mat, NULL)             # <<<<<<<<<<<<<<
  *     finally:
  *         delRef(mat)
  */
-    __pyx_t_3 = MatPythonSetContext(__pyx_v_mat, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_3 = MatPythonSetContext(__pyx_v_mat, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 615, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":614
+  /* "libpetsc4py.pyx":617
  *         MatPythonSetContext(mat, NULL)
  *     finally:
  *         delRef(mat)             # <<<<<<<<<<<<<<
@@ -6709,7 +6873,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_mat);
 
-      /* "libpetsc4py.pyx":615
+      /* "libpetsc4py.pyx":618
  *     finally:
  *         delRef(mat)
  *         Py_DECREF(<PyObject*>mat.data)             # <<<<<<<<<<<<<<
@@ -6718,7 +6882,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
       Py_DECREF(((PyObject *)__pyx_v_mat->data));
 
-      /* "libpetsc4py.pyx":616
+      /* "libpetsc4py.pyx":619
  *         delRef(mat)
  *         Py_DECREF(<PyObject*>mat.data)
  *         mat.data = NULL             # <<<<<<<<<<<<<<
@@ -6729,8 +6893,10 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
       goto __pyx_L6;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L5_error:;
       __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
       __Pyx_XGOTREF(__pyx_t_6);
@@ -6742,7 +6908,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
       __pyx_t_1 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
       {
 
-        /* "libpetsc4py.pyx":614
+        /* "libpetsc4py.pyx":617
  *         MatPythonSetContext(mat, NULL)
  *     finally:
  *         delRef(mat)             # <<<<<<<<<<<<<<
@@ -6751,7 +6917,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_mat);
 
-        /* "libpetsc4py.pyx":615
+        /* "libpetsc4py.pyx":618
  *     finally:
  *         delRef(mat)
  *         Py_DECREF(<PyObject*>mat.data)             # <<<<<<<<<<<<<<
@@ -6760,7 +6926,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
         Py_DECREF(((PyObject *)__pyx_v_mat->data));
 
-        /* "libpetsc4py.pyx":616
+        /* "libpetsc4py.pyx":619
  *         delRef(mat)
  *         Py_DECREF(<PyObject*>mat.data)
  *         mat.data = NULL             # <<<<<<<<<<<<<<
@@ -6769,6 +6935,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
         __pyx_v_mat->data = NULL;
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
@@ -6786,7 +6953,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":617
+  /* "libpetsc4py.pyx":620
  *         Py_DECREF(<PyObject*>mat.data)
  *         mat.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6796,7 +6963,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":595
+  /* "libpetsc4py.pyx":598
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDestroy_Python(             # <<<<<<<<<<<<<<
@@ -6816,19 +6983,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":619
+/* "libpetsc4py.pyx":622
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscMat mat,
  */
 
-static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOptions *__pyx_v_PetscOptionsObject, Mat __pyx_v_mat) {
-  char __pyx_v_name[2048];
+static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOptionItems *__pyx_v_PetscOptionsObject, Mat __pyx_v_mat) {
+  char __pyx_v_name[0x800];
   char *__pyx_v_defval;
   PetscBool __pyx_v_found;
-  CYTHON_UNUSED PetscOptions *PetscOptionsObject;
+  PetscOptionItems *PetscOptionsObject;
   PyObject *__pyx_v_setFromOptions = 0;
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -6842,66 +7009,72 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = 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("MatSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":624
+  /* "libpetsc4py.pyx":627
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetFromOptions_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef char name[2048], *defval = PyMat(mat).getname()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSetFromOptions_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":626
+  /* "libpetsc4py.pyx":629
  *     FunctionBegin(b"MatSetFromOptions_Python")
  *     #
  *     cdef char name[2048], *defval = PyMat(mat).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyMat *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyMat *)((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) __PYX_ERR(0, 629, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":627
+  /* "libpetsc4py.pyx":630
  *     #
  *     cdef char name[2048], *defval = PyMat(mat).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":628
+  /* "libpetsc4py.pyx":631
  *     cdef char name[2048], *defval = PyMat(mat).getname()
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
  *     CHKERR( PetscOptionsString(
  *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":629
+  /* "libpetsc4py.pyx":632
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
- *             b"MatPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  */
-  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(__pyx_k_mat_python_type, __pyx_k_Python_package_module_class_func, __pyx_k_MatPythonSetType, __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(((char *)"-mat_python_type"), ((char *)"Python [package.]module[.{class|function}]"), ((char *)"MatPythonSetType"), __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 632, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":632
+  /* "libpetsc4py.pyx":634
+ *     CHKERR( PetscOptionsString(
+ *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
+ *     if found and name[0]:
+ *         CHKERR( MatPythonSetType_PYTHON(mat,name) )
+ */
+  ((void)PetscOptionsObject);
+
+  /* "libpetsc4py.pyx":635
  *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
- *             b"MatPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
  *         CHKERR( MatPythonSetType_PYTHON(mat,name) )
  *     #
@@ -6916,35 +7089,41 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":633
- *             b"MatPythonSetType",defval,name,sizeof(name),&found) )
+    /* "libpetsc4py.pyx":636
+ *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:
  *         CHKERR( MatPythonSetType_PYTHON(mat,name) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef setFromOptions = PyMat(mat).setFromOptions
  */
-    __pyx_t_6 = __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(__pyx_v_mat, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_6 = __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(__pyx_v_mat, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 636, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 636, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":635
+ *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
+ *     if found and name[0]:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatPythonSetType_PYTHON(mat,name) )
+ *     #
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":635
+  /* "libpetsc4py.pyx":638
  *         CHKERR( MatPythonSetType_PYTHON(mat,name) )
  *     #
  *     cdef setFromOptions = PyMat(mat).setFromOptions             # <<<<<<<<<<<<<<
  *     if setFromOptions is not None:
  *         setFromOptions(Mat_(mat))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setFromOptions = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "libpetsc4py.pyx":636
+  /* "libpetsc4py.pyx":639
  *     #
  *     cdef setFromOptions = PyMat(mat).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -6955,14 +7134,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":637
+    /* "libpetsc4py.pyx":640
  *     cdef setFromOptions = PyMat(mat).setFromOptions
  *     if setFromOptions is not None:
  *         setFromOptions(Mat_(mat))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 640, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
@@ -6976,28 +7155,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
       }
     }
     if (!__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 640, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 640, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 640, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
 
-  /* "libpetsc4py.pyx":638
- *     if setFromOptions is not None:
+    /* "libpetsc4py.pyx":639
+ *     #
+ *     cdef setFromOptions = PyMat(mat).setFromOptions
+ *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
+ *         setFromOptions(Mat_(mat))
+ *     return FunctionEnd()
+ */
+  }
+
+  /* "libpetsc4py.pyx":641
+ *     if setFromOptions is not None:
  *         setFromOptions(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
  * 
@@ -7006,11 +7191,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":619
+  /* "libpetsc4py.pyx":622
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscMat mat,
  */
 
@@ -7032,7 +7217,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":640
+/* "libpetsc4py.pyx":643
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatView_Python(             # <<<<<<<<<<<<<<
@@ -7054,51 +7239,48 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("MatView_Python", 0);
 
-  /* "libpetsc4py.pyx":645
+  /* "libpetsc4py.pyx":648
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatView_Python")             # <<<<<<<<<<<<<<
  *     viewcontext(PyMat(mat), vwr)
  *     cdef view = PyMat(mat).view
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatView_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatView_Python"));
 
-  /* "libpetsc4py.pyx":646
+  /* "libpetsc4py.pyx":649
  *     except IERR with gil:
  *     FunctionBegin(b"MatView_Python")
  *     viewcontext(PyMat(mat), vwr)             # <<<<<<<<<<<<<<
  *     cdef view = PyMat(mat).view
  *     if view is not None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 649, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 649, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":647
+  /* "libpetsc4py.pyx":650
  *     FunctionBegin(b"MatView_Python")
  *     viewcontext(PyMat(mat), vwr)
  *     cdef view = PyMat(mat).view             # <<<<<<<<<<<<<<
  *     if view is not None:
  *         view(Mat_(mat), Viewer_(vwr))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 650, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_view = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":648
+  /* "libpetsc4py.pyx":651
  *     viewcontext(PyMat(mat), vwr)
  *     cdef view = PyMat(mat).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -7109,16 +7291,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":649
+    /* "libpetsc4py.pyx":652
  *     cdef view = PyMat(mat).view
  *     if view is not None:
  *         view(Mat_(mat), Viewer_(vwr))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 652, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
@@ -7133,7 +7315,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 652, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -7144,16 +7326,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
     PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_6);
     __pyx_t_1 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 652, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":651
+ *     viewcontext(PyMat(mat), vwr)
+ *     cdef view = PyMat(mat).view
+ *     if view is not None:             # <<<<<<<<<<<<<<
+ *         view(Mat_(mat), Viewer_(vwr))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":650
+  /* "libpetsc4py.pyx":653
  *     if view is not None:
  *         view(Mat_(mat), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7163,7 +7351,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":640
+  /* "libpetsc4py.pyx":643
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatView_Python(             # <<<<<<<<<<<<<<
@@ -7190,7 +7378,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":652
+/* "libpetsc4py.pyx":655
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDuplicate_Python(             # <<<<<<<<<<<<<<
@@ -7213,39 +7401,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   Mat __pyx_t_10;
-  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("MatDuplicate_Python", 0);
 
-  /* "libpetsc4py.pyx":658
+  /* "libpetsc4py.pyx":661
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatDuplicate_Python")             # <<<<<<<<<<<<<<
  *     cdef duplicate = PyMat(mat).duplicate
  *     if duplicate is None: return UNSUPPORTED(b"duplicate")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatDuplicate_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatDuplicate_Python"));
 
-  /* "libpetsc4py.pyx":659
+  /* "libpetsc4py.pyx":662
  *     except IERR with gil:
  *     FunctionBegin(b"MatDuplicate_Python")
  *     cdef duplicate = PyMat(mat).duplicate             # <<<<<<<<<<<<<<
  *     if duplicate is None: return UNSUPPORTED(b"duplicate")
  *     cdef Mat m = duplicate(Mat_(mat), <long>op)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 662, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_duplicate = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":660
+  /* "libpetsc4py.pyx":663
  *     FunctionBegin(b"MatDuplicate_Python")
  *     cdef duplicate = PyMat(mat).duplicate
  *     if duplicate is None: return UNSUPPORTED(b"duplicate")             # <<<<<<<<<<<<<<
@@ -7255,20 +7440,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   __pyx_t_3 = (__pyx_v_duplicate == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_duplicate);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"duplicate"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":661
+  /* "libpetsc4py.pyx":664
  *     cdef duplicate = PyMat(mat).duplicate
  *     if duplicate is None: return UNSUPPORTED(b"duplicate")
  *     cdef Mat m = duplicate(Mat_(mat), <long>op)             # <<<<<<<<<<<<<<
  *     out[0] = m.mat; m.mat = NULL
  *     return FunctionEnd()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_duplicate);
   __pyx_t_6 = __pyx_v_duplicate; __pyx_t_7 = NULL;
@@ -7283,7 +7468,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
       __pyx_t_8 = 1;
     }
   }
-  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__pyx_t_7) {
     __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -7294,15 +7479,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __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_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(0, 664, __pyx_L1_error)
   __pyx_v_m = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":662
+  /* "libpetsc4py.pyx":665
  *     if duplicate is None: return UNSUPPORTED(b"duplicate")
  *     cdef Mat m = duplicate(Mat_(mat), <long>op)
  *     out[0] = m.mat; m.mat = NULL             # <<<<<<<<<<<<<<
@@ -7313,7 +7498,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   (__pyx_v_out[0]) = __pyx_t_10;
   __pyx_v_m->mat = NULL;
 
-  /* "libpetsc4py.pyx":663
+  /* "libpetsc4py.pyx":666
  *     cdef Mat m = duplicate(Mat_(mat), <long>op)
  *     out[0] = m.mat; m.mat = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7323,7 +7508,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":652
+  /* "libpetsc4py.pyx":655
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDuplicate_Python(             # <<<<<<<<<<<<<<
@@ -7351,7 +7536,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":665
+/* "libpetsc4py.pyx":668
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCopy_Python(             # <<<<<<<<<<<<<<
@@ -7373,39 +7558,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("MatCopy_Python", 0);
 
-  /* "libpetsc4py.pyx":671
+  /* "libpetsc4py.pyx":674
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatCopy_Python")             # <<<<<<<<<<<<<<
  *     cdef copy = PyMat(mat).copy
  *     if copy is None: return UNSUPPORTED(b"copy")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatCopy_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatCopy_Python"));
 
-  /* "libpetsc4py.pyx":672
+  /* "libpetsc4py.pyx":675
  *     except IERR with gil:
  *     FunctionBegin(b"MatCopy_Python")
  *     cdef copy = PyMat(mat).copy             # <<<<<<<<<<<<<<
  *     if copy is None: return UNSUPPORTED(b"copy")
  *     copy(Mat_(mat), Mat_(out), <long>op)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 675, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 675, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_copy = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":673
+  /* "libpetsc4py.pyx":676
  *     FunctionBegin(b"MatCopy_Python")
  *     cdef copy = PyMat(mat).copy
  *     if copy is None: return UNSUPPORTED(b"copy")             # <<<<<<<<<<<<<<
@@ -7415,22 +7597,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
   __pyx_t_3 = (__pyx_v_copy == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_copy);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"copy"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":674
+  /* "libpetsc4py.pyx":677
  *     cdef copy = PyMat(mat).copy
  *     if copy is None: return UNSUPPORTED(b"copy")
  *     copy(Mat_(mat), Mat_(out), <long>op)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 677, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_out)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_out)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 677, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 677, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_copy);
   __pyx_t_7 = __pyx_v_copy; __pyx_t_8 = NULL;
@@ -7445,7 +7627,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 677, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -7459,13 +7641,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 677, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":675
+  /* "libpetsc4py.pyx":678
  *     if copy is None: return UNSUPPORTED(b"copy")
  *     copy(Mat_(mat), Mat_(out), <long>op)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7475,7 +7657,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":665
+  /* "libpetsc4py.pyx":668
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCopy_Python(             # <<<<<<<<<<<<<<
@@ -7503,7 +7685,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":677
+/* "libpetsc4py.pyx":680
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetDiagonalBlock_Python(             # <<<<<<<<<<<<<<
@@ -7524,39 +7706,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   Mat __pyx_t_8;
-  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("MatGetDiagonalBlock_Python", 0);
 
-  /* "libpetsc4py.pyx":682
+  /* "libpetsc4py.pyx":685
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatGetDiagonalBlock_Python")             # <<<<<<<<<<<<<<
  *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
  *     if getDiagonalBlock is None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatGetDiagonalBlock_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatGetDiagonalBlock_Python"));
 
-  /* "libpetsc4py.pyx":683
+  /* "libpetsc4py.pyx":686
  *     except IERR with gil:
  *     FunctionBegin(b"MatGetDiagonalBlock_Python")
  *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock             # <<<<<<<<<<<<<<
  *     if getDiagonalBlock is None:
  *         if getCommSize(mat) == 1:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 686, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getDiagonalBlock); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getDiagonalBlock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 686, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_getDiagonalBlock = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":684
+  /* "libpetsc4py.pyx":687
  *     FunctionBegin(b"MatGetDiagonalBlock_Python")
  *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
  *     if getDiagonalBlock is None:             # <<<<<<<<<<<<<<
@@ -7567,7 +7746,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":685
+    /* "libpetsc4py.pyx":688
  *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
  *     if getDiagonalBlock is None:
  *         if getCommSize(mat) == 1:             # <<<<<<<<<<<<<<
@@ -7577,7 +7756,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
     __pyx_t_4 = ((__pyx_f_11libpetsc4py_getCommSize(__pyx_v_mat) == 1) != 0);
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":686
+      /* "libpetsc4py.pyx":689
  *     if getDiagonalBlock is None:
  *         if getCommSize(mat) == 1:
  *             out[0] = mat             # <<<<<<<<<<<<<<
@@ -7586,7 +7765,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
  */
       (__pyx_v_out[0]) = __pyx_v_mat;
 
-      /* "libpetsc4py.pyx":687
+      /* "libpetsc4py.pyx":690
  *         if getCommSize(mat) == 1:
  *             out[0] = mat
  *             return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7595,12 +7774,26 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
  */
       __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
       goto __pyx_L0;
+
+      /* "libpetsc4py.pyx":688
+ *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
+ *     if getDiagonalBlock is None:
+ *         if getCommSize(mat) == 1:             # <<<<<<<<<<<<<<
+ *             out[0] = mat
+ *             return FunctionEnd()
+ */
     }
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":687
+ *     FunctionBegin(b"MatGetDiagonalBlock_Python")
+ *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
+ *     if getDiagonalBlock is None:             # <<<<<<<<<<<<<<
+ *         if getCommSize(mat) == 1:
+ *             out[0] = mat
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":688
+  /* "libpetsc4py.pyx":691
  *             out[0] = mat
  *             return FunctionEnd()
  *     if getDiagonalBlock is None: return UNSUPPORTED(b"getDiagonalBlock")             # <<<<<<<<<<<<<<
@@ -7610,18 +7803,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   __pyx_t_4 = (__pyx_v_getDiagonalBlock == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_getDiagonalBlock);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"getDiagonalBlock"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":689
+  /* "libpetsc4py.pyx":692
  *             return FunctionEnd()
  *     if getDiagonalBlock is None: return UNSUPPORTED(b"getDiagonalBlock")
  *     cdef Mat sub = getDiagonalBlock(Mat_(mat))             # <<<<<<<<<<<<<<
  *     if sub is not None: out[0] = sub.mat
  *     return FunctionEnd()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_getDiagonalBlock);
   __pyx_t_5 = __pyx_v_getDiagonalBlock; __pyx_t_6 = NULL;
@@ -7635,26 +7828,26 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
     }
   }
   if (!__pyx_t_6) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 692, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(0, 692, __pyx_L1_error)
   __pyx_v_sub = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":690
+  /* "libpetsc4py.pyx":693
  *     if getDiagonalBlock is None: return UNSUPPORTED(b"getDiagonalBlock")
  *     cdef Mat sub = getDiagonalBlock(Mat_(mat))
  *     if sub is not None: out[0] = sub.mat             # <<<<<<<<<<<<<<
@@ -7666,11 +7859,9 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   if (__pyx_t_4) {
     __pyx_t_8 = __pyx_v_sub->mat;
     (__pyx_v_out[0]) = __pyx_t_8;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
-  /* "libpetsc4py.pyx":691
+  /* "libpetsc4py.pyx":694
  *     cdef Mat sub = getDiagonalBlock(Mat_(mat))
  *     if sub is not None: out[0] = sub.mat
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7680,7 +7871,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":677
+  /* "libpetsc4py.pyx":680
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetDiagonalBlock_Python(             # <<<<<<<<<<<<<<
@@ -7707,7 +7898,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":693
+/* "libpetsc4py.pyx":696
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetSubMatrix_Python(             # <<<<<<<<<<<<<<
@@ -7732,39 +7923,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   Mat __pyx_t_12;
-  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("MatGetSubMatrix_Python", 0);
 
-  /* "libpetsc4py.pyx":701
+  /* "libpetsc4py.pyx":704
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatCopy_Python")             # <<<<<<<<<<<<<<
  *     cdef getSubMatrix = PyMat(mat).getSubMatrix
  *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatCopy_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatCopy_Python"));
 
-  /* "libpetsc4py.pyx":702
+  /* "libpetsc4py.pyx":705
  *     except IERR with gil:
  *     FunctionBegin(b"MatCopy_Python")
  *     cdef getSubMatrix = PyMat(mat).getSubMatrix             # <<<<<<<<<<<<<<
  *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
  *     cdef Mat sub = None
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getSubMatrix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getSubMatrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 705, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_getSubMatrix = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":703
+  /* "libpetsc4py.pyx":706
  *     FunctionBegin(b"MatCopy_Python")
  *     cdef getSubMatrix = PyMat(mat).getSubMatrix
  *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")             # <<<<<<<<<<<<<<
@@ -7774,11 +7962,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   __pyx_t_3 = (__pyx_v_getSubMatrix == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_getSubMatrix);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"getSubMatrix"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":704
+  /* "libpetsc4py.pyx":707
  *     cdef getSubMatrix = PyMat(mat).getSubMatrix
  *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
  *     cdef Mat sub = None             # <<<<<<<<<<<<<<
@@ -7788,25 +7976,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   __Pyx_INCREF(Py_None);
   __pyx_v_sub = ((struct PyPetscMatObject *)Py_None);
 
-  /* "libpetsc4py.pyx":709
- *     elif op == MAT_INITIAL_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
- *     elif op == MAT_REUSE_MATRIX:             # <<<<<<<<<<<<<<
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
- *     if sub is not None:
- */
-  switch (__pyx_v_op) {
-
-    /* "libpetsc4py.pyx":705
+  /* "libpetsc4py.pyx":708
  *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
  *     cdef Mat sub = None
  *     if op == MAT_IGNORE_MATRIX:             # <<<<<<<<<<<<<<
  *         sub = None
  *     elif op == MAT_INITIAL_MATRIX:
  */
+  switch (__pyx_v_op) {
     case MAT_IGNORE_MATRIX:
 
-    /* "libpetsc4py.pyx":706
+    /* "libpetsc4py.pyx":709
  *     cdef Mat sub = None
  *     if op == MAT_IGNORE_MATRIX:
  *         sub = None             # <<<<<<<<<<<<<<
@@ -7815,9 +7995,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
  */
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_sub, ((struct PyPetscMatObject *)Py_None));
+
+    /* "libpetsc4py.pyx":708
+ *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
+ *     cdef Mat sub = None
+ *     if op == MAT_IGNORE_MATRIX:             # <<<<<<<<<<<<<<
+ *         sub = None
+ *     elif op == MAT_INITIAL_MATRIX:
+ */
     break;
 
-    /* "libpetsc4py.pyx":707
+    /* "libpetsc4py.pyx":710
  *     if op == MAT_IGNORE_MATRIX:
  *         sub = None
  *     elif op == MAT_INITIAL_MATRIX:             # <<<<<<<<<<<<<<
@@ -7826,18 +8014,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
  */
     case MAT_INITIAL_MATRIX:
 
-    /* "libpetsc4py.pyx":708
+    /* "libpetsc4py.pyx":711
  *         sub = None
  *     elif op == MAT_INITIAL_MATRIX:
  *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)             # <<<<<<<<<<<<<<
  *     elif op == MAT_REUSE_MATRIX:
  *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_row)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_row)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 711, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_col)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_col)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 711, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_getSubMatrix);
     __pyx_t_7 = __pyx_v_getSubMatrix; __pyx_t_8 = NULL;
@@ -7852,7 +8040,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 711, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -7869,16 +8057,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
     __pyx_t_1 = 0;
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(0, 711, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_sub, ((struct PyPetscMatObject *)__pyx_t_2));
     __pyx_t_2 = 0;
+
+    /* "libpetsc4py.pyx":710
+ *     if op == MAT_IGNORE_MATRIX:
+ *         sub = None
+ *     elif op == MAT_INITIAL_MATRIX:             # <<<<<<<<<<<<<<
+ *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+ *     elif op == MAT_REUSE_MATRIX:
+ */
     break;
 
-    /* "libpetsc4py.pyx":709
+    /* "libpetsc4py.pyx":712
  *     elif op == MAT_INITIAL_MATRIX:
  *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
  *     elif op == MAT_REUSE_MATRIX:             # <<<<<<<<<<<<<<
@@ -7887,20 +8083,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
  */
     case MAT_REUSE_MATRIX:
 
-    /* "libpetsc4py.pyx":710
+    /* "libpetsc4py.pyx":713
  *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
  *     elif op == MAT_REUSE_MATRIX:
  *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))             # <<<<<<<<<<<<<<
  *     if sub is not None:
  *         addRef(sub.mat)
  */
-    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 713, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_10 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_row)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_row)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 713, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_col)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_col)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 713, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_((__pyx_v_out[0]))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_((__pyx_v_out[0]))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 713, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_getSubMatrix);
     __pyx_t_1 = __pyx_v_getSubMatrix; __pyx_t_8 = NULL;
@@ -7915,7 +8111,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_11 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 713, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -7932,18 +8128,26 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
     __pyx_t_10 = 0;
     __pyx_t_6 = 0;
     __pyx_t_5 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 713, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(0, 713, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_sub, ((struct PyPetscMatObject *)__pyx_t_2));
     __pyx_t_2 = 0;
+
+    /* "libpetsc4py.pyx":712
+ *     elif op == MAT_INITIAL_MATRIX:
+ *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+ *     elif op == MAT_REUSE_MATRIX:             # <<<<<<<<<<<<<<
+ *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+ *     if sub is not None:
+ */
     break;
     default: break;
   }
 
-  /* "libpetsc4py.pyx":711
+  /* "libpetsc4py.pyx":714
  *     elif op == MAT_REUSE_MATRIX:
  *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
  *     if sub is not None:             # <<<<<<<<<<<<<<
@@ -7954,7 +8158,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":712
+    /* "libpetsc4py.pyx":715
  *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
  *     if sub is not None:
  *         addRef(sub.mat)             # <<<<<<<<<<<<<<
@@ -7963,7 +8167,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_sub->mat);
 
-    /* "libpetsc4py.pyx":713
+    /* "libpetsc4py.pyx":716
  *     if sub is not None:
  *         addRef(sub.mat)
  *         out[0] = sub.mat             # <<<<<<<<<<<<<<
@@ -7972,11 +8176,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
  */
     __pyx_t_12 = __pyx_v_sub->mat;
     (__pyx_v_out[0]) = __pyx_t_12;
-    goto __pyx_L4;
+
+    /* "libpetsc4py.pyx":714
+ *     elif op == MAT_REUSE_MATRIX:
+ *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+ *     if sub is not None:             # <<<<<<<<<<<<<<
+ *         addRef(sub.mat)
+ *         out[0] = sub.mat
+ */
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":714
+  /* "libpetsc4py.pyx":717
  *         addRef(sub.mat)
  *         out[0] = sub.mat
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7986,7 +8196,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":693
+  /* "libpetsc4py.pyx":696
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetSubMatrix_Python(             # <<<<<<<<<<<<<<
@@ -8016,7 +8226,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":716
+/* "libpetsc4py.pyx":719
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetOption_Python(             # <<<<<<<<<<<<<<
@@ -8038,39 +8248,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("MatSetOption_Python", 0);
 
-  /* "libpetsc4py.pyx":722
+  /* "libpetsc4py.pyx":725
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetOption_Python")             # <<<<<<<<<<<<<<
  *     cdef setOption = PyMat(mat).setOption
  *     if setOption is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSetOption_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSetOption_Python"));
 
-  /* "libpetsc4py.pyx":723
+  /* "libpetsc4py.pyx":726
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetOption_Python")
  *     cdef setOption = PyMat(mat).setOption             # <<<<<<<<<<<<<<
  *     if setOption is not None:
  *         setOption(Mat_(mat), <long>op, <bint>flag)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setOption); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setOption); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setOption = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":724
+  /* "libpetsc4py.pyx":727
  *     FunctionBegin(b"MatSetOption_Python")
  *     cdef setOption = PyMat(mat).setOption
  *     if setOption is not None:             # <<<<<<<<<<<<<<
@@ -8081,18 +8288,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":725
+    /* "libpetsc4py.pyx":728
  *     cdef setOption = PyMat(mat).setOption
  *     if setOption is not None:
  *         setOption(Mat_(mat), <long>op, <bint>flag)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 728, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 728, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_setOption);
     __pyx_t_7 = __pyx_v_setOption; __pyx_t_8 = NULL;
@@ -8107,7 +8314,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 728, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -8121,16 +8328,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
     __pyx_t_1 = 0;
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 728, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":727
+ *     FunctionBegin(b"MatSetOption_Python")
+ *     cdef setOption = PyMat(mat).setOption
+ *     if setOption is not None:             # <<<<<<<<<<<<<<
+ *         setOption(Mat_(mat), <long>op, <bint>flag)
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":726
+  /* "libpetsc4py.pyx":729
  *     if setOption is not None:
  *         setOption(Mat_(mat), <long>op, <bint>flag)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -8140,7 +8353,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":716
+  /* "libpetsc4py.pyx":719
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetOption_Python(             # <<<<<<<<<<<<<<
@@ -8168,7 +8381,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":728
+/* "libpetsc4py.pyx":731
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetUp_Python(             # <<<<<<<<<<<<<<
@@ -8179,7 +8392,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
 static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   PetscInt __pyx_v_rbs;
   PetscInt __pyx_v_cbs;
-  char __pyx_v_name[2048];
+  char __pyx_v_name[0x800];
   PetscBool __pyx_v_found;
   PyObject *__pyx_v_setUp = 0;
   PetscErrorCode __pyx_r;
@@ -8193,116 +8406,109 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = 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("MatSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":732
+  /* "libpetsc4py.pyx":735
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetUp_Python")             # <<<<<<<<<<<<<<
  *     cdef PetscInt rbs = -1, cbs = -1
  *     CHKERR( PetscLayoutGetBlockSize(mat.rmap,&rbs) )
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSetUp_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSetUp_Python"));
 
-  /* "libpetsc4py.pyx":733
+  /* "libpetsc4py.pyx":736
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetUp_Python")
  *     cdef PetscInt rbs = -1, cbs = -1             # <<<<<<<<<<<<<<
  *     CHKERR( PetscLayoutGetBlockSize(mat.rmap,&rbs) )
  *     CHKERR( PetscLayoutGetBlockSize(mat.cmap,&cbs) )
  */
-  __pyx_v_rbs = -1;
-  __pyx_v_cbs = -1;
+  __pyx_v_rbs = -1L;
+  __pyx_v_cbs = -1L;
 
-  /* "libpetsc4py.pyx":734
+  /* "libpetsc4py.pyx":737
  *     FunctionBegin(b"MatSetUp_Python")
  *     cdef PetscInt rbs = -1, cbs = -1
  *     CHKERR( PetscLayoutGetBlockSize(mat.rmap,&rbs) )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscLayoutGetBlockSize(mat.cmap,&cbs) )
  *     if rbs == -1: rbs = 1
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutGetBlockSize(__pyx_v_mat->rmap, (&__pyx_v_rbs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutGetBlockSize(__pyx_v_mat->rmap, (&__pyx_v_rbs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 737, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":735
+  /* "libpetsc4py.pyx":738
  *     cdef PetscInt rbs = -1, cbs = -1
  *     CHKERR( PetscLayoutGetBlockSize(mat.rmap,&rbs) )
  *     CHKERR( PetscLayoutGetBlockSize(mat.cmap,&cbs) )             # <<<<<<<<<<<<<<
  *     if rbs == -1: rbs = 1
  *     if cbs == -1: cbs = rbs
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutGetBlockSize(__pyx_v_mat->cmap, (&__pyx_v_cbs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutGetBlockSize(__pyx_v_mat->cmap, (&__pyx_v_cbs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 738, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":736
+  /* "libpetsc4py.pyx":739
  *     CHKERR( PetscLayoutGetBlockSize(mat.rmap,&rbs) )
  *     CHKERR( PetscLayoutGetBlockSize(mat.cmap,&cbs) )
  *     if rbs == -1: rbs = 1             # <<<<<<<<<<<<<<
  *     if cbs == -1: cbs = rbs
  *     CHKERR( PetscLayoutSetBlockSize(mat.rmap,rbs)  )
  */
-  __pyx_t_2 = ((__pyx_v_rbs == -1) != 0);
+  __pyx_t_2 = ((__pyx_v_rbs == -1L) != 0);
   if (__pyx_t_2) {
     __pyx_v_rbs = 1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":737
+  /* "libpetsc4py.pyx":740
  *     CHKERR( PetscLayoutGetBlockSize(mat.cmap,&cbs) )
  *     if rbs == -1: rbs = 1
  *     if cbs == -1: cbs = rbs             # <<<<<<<<<<<<<<
  *     CHKERR( PetscLayoutSetBlockSize(mat.rmap,rbs)  )
  *     CHKERR( PetscLayoutSetBlockSize(mat.cmap,cbs)  )
  */
-  __pyx_t_2 = ((__pyx_v_cbs == -1) != 0);
+  __pyx_t_2 = ((__pyx_v_cbs == -1L) != 0);
   if (__pyx_t_2) {
     __pyx_v_cbs = __pyx_v_rbs;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":738
+  /* "libpetsc4py.pyx":741
  *     if rbs == -1: rbs = 1
  *     if cbs == -1: cbs = rbs
  *     CHKERR( PetscLayoutSetBlockSize(mat.rmap,rbs)  )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscLayoutSetBlockSize(mat.cmap,cbs)  )
  *     CHKERR( PetscLayoutSetUp(mat.rmap)             )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetBlockSize(__pyx_v_mat->rmap, __pyx_v_rbs)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetBlockSize(__pyx_v_mat->rmap, __pyx_v_rbs)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 741, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":739
+  /* "libpetsc4py.pyx":742
  *     if cbs == -1: cbs = rbs
  *     CHKERR( PetscLayoutSetBlockSize(mat.rmap,rbs)  )
  *     CHKERR( PetscLayoutSetBlockSize(mat.cmap,cbs)  )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscLayoutSetUp(mat.rmap)             )
  *     CHKERR( PetscLayoutSetUp(mat.cmap)             )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetBlockSize(__pyx_v_mat->cmap, __pyx_v_cbs)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetBlockSize(__pyx_v_mat->cmap, __pyx_v_cbs)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 742, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":740
+  /* "libpetsc4py.pyx":743
  *     CHKERR( PetscLayoutSetBlockSize(mat.rmap,rbs)  )
  *     CHKERR( PetscLayoutSetBlockSize(mat.cmap,cbs)  )
  *     CHKERR( PetscLayoutSetUp(mat.rmap)             )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscLayoutSetUp(mat.cmap)             )
  *     mat.preallocated = PETSC_TRUE
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetUp(__pyx_v_mat->rmap)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetUp(__pyx_v_mat->rmap)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 743, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":741
+  /* "libpetsc4py.pyx":744
  *     CHKERR( PetscLayoutSetBlockSize(mat.cmap,cbs)  )
  *     CHKERR( PetscLayoutSetUp(mat.rmap)             )
  *     CHKERR( PetscLayoutSetUp(mat.cmap)             )             # <<<<<<<<<<<<<<
  *     mat.preallocated = PETSC_TRUE
  *     #
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetUp(__pyx_v_mat->cmap)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetUp(__pyx_v_mat->cmap)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 744, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":742
+  /* "libpetsc4py.pyx":745
  *     CHKERR( PetscLayoutSetUp(mat.rmap)             )
  *     CHKERR( PetscLayoutSetUp(mat.cmap)             )
  *     mat.preallocated = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -8311,39 +8517,39 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_mat->preallocated = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":745
+  /* "libpetsc4py.pyx":748
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
  *     if PyMat(mat).self is None:
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":746
+  /* "libpetsc4py.pyx":749
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyMat(mat).self is None:             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  *                 getPrefix(mat), b"-mat_python_type",
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 749, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = (((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_3)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_4 = (__pyx_t_2 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":747
+    /* "libpetsc4py.pyx":750
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyMat(mat).self is None:
- *         CHKERR( PetscOptionsGetString(             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(mat), b"-mat_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(__pyx_f_11libpetsc4py_getPrefix(__pyx_v_mat), __pyx_k_mat_python_type, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(NULL, __pyx_f_11libpetsc4py_getPrefix(__pyx_v_mat), ((char *)"-mat_python_type"), __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 750, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":750
+    /* "libpetsc4py.pyx":753
  *                 getPrefix(mat), b"-mat_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -8360,63 +8566,83 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
     __pyx_L7_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":751
+      /* "libpetsc4py.pyx":754
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:
  *             CHKERR( MatPythonSetType_PYTHON(mat,name) )             # <<<<<<<<<<<<<<
  *     if PyMat(mat).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(__pyx_v_mat, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L6;
+      __pyx_t_5 = __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(__pyx_v_mat, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 754, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 754, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":753
+ *                 getPrefix(mat), b"-mat_python_type",
+ *                 name,sizeof(name),&found) )
+ *         if found and name[0]:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatPythonSetType_PYTHON(mat,name) )
+ *     if PyMat(mat).self is None:
+ */
     }
-    __pyx_L6:;
-    goto __pyx_L5;
+
+    /* "libpetsc4py.pyx":749
+ *     cdef char name[2048]
+ *     cdef PetscBool found = PETSC_FALSE
+ *     if PyMat(mat).self is None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,
+ *                 getPrefix(mat), b"-mat_python_type",
+ */
   }
-  __pyx_L5:;
 
-  /* "libpetsc4py.pyx":752
+  /* "libpetsc4py.pyx":755
  *         if found and name[0]:
  *             CHKERR( MatPythonSetType_PYTHON(mat,name) )
  *     if PyMat(mat).self is None:             # <<<<<<<<<<<<<<
  *         return PetscSETERR(PETSC_ERR_USER,
  *             "Python context not set, call one of \n"
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 755, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = (((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_3)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_2 = (__pyx_t_4 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":753
+    /* "libpetsc4py.pyx":756
  *             CHKERR( MatPythonSetType_PYTHON(mat,name) )
  *     if PyMat(mat).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
  *             "Python context not set, call one of \n"
  *             " * MatPythonSetType(mat,\"[package.]module.class\")\n"
  */
-    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, __pyx_k_Python_context_not_set_call_one);
+    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, ((char *)"Python context not set, call one of \n * MatPythonSetType(mat,\"[package.]module.class\")\n * MatSetFromOptions(mat) and pass option -mat_python_type [package.]module.class"));
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":755
+ *         if found and name[0]:
+ *             CHKERR( MatPythonSetType_PYTHON(mat,name) )
+ *     if PyMat(mat).self is None:             # <<<<<<<<<<<<<<
+ *         return PetscSETERR(PETSC_ERR_USER,
+ *             "Python context not set, call one of \n"
+ */
   }
 
-  /* "libpetsc4py.pyx":759
+  /* "libpetsc4py.pyx":762
  *             "-mat_python_type [package.]module.class")
  *     #
  *     cdef setUp = PyMat(mat).setUp             # <<<<<<<<<<<<<<
  *     if setUp is not None:
  *         setUp(Mat_(mat))
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 762, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_setUp = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":760
+  /* "libpetsc4py.pyx":763
  *     #
  *     cdef setUp = PyMat(mat).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -8427,14 +8653,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   __pyx_t_4 = (__pyx_t_2 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":761
+    /* "libpetsc4py.pyx":764
  *     cdef setUp = PyMat(mat).setUp
  *     if setUp is not None:
  *         setUp(Mat_(mat))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
@@ -8448,27 +8674,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 764, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_6);
     } else {
-      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 764, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 764, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    goto __pyx_L10;
+
+    /* "libpetsc4py.pyx":763
+ *     #
+ *     cdef setUp = PyMat(mat).setUp
+ *     if setUp is not None:             # <<<<<<<<<<<<<<
+ *         setUp(Mat_(mat))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L10:;
 
-  /* "libpetsc4py.pyx":762
+  /* "libpetsc4py.pyx":765
  *     if setUp is not None:
  *         setUp(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -8478,7 +8710,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":728
+  /* "libpetsc4py.pyx":731
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetUp_Python(             # <<<<<<<<<<<<<<
@@ -8504,7 +8736,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":764
+/* "libpetsc4py.pyx":767
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatAssemblyBegin_Python(             # <<<<<<<<<<<<<<
@@ -8525,39 +8757,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
   PyObject *__pyx_t_7 = NULL;
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = 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("MatAssemblyBegin_Python", 0);
 
-  /* "libpetsc4py.pyx":769
+  /* "libpetsc4py.pyx":772
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatAssemblyBegin_Python")             # <<<<<<<<<<<<<<
  *     cdef assembly = PyMat(mat).assemblyBegin
  *     if assembly is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatAssemblyBegin_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatAssemblyBegin_Python"));
 
-  /* "libpetsc4py.pyx":770
+  /* "libpetsc4py.pyx":773
  *     except IERR with gil:
  *     FunctionBegin(b"MatAssemblyBegin_Python")
  *     cdef assembly = PyMat(mat).assemblyBegin             # <<<<<<<<<<<<<<
  *     if assembly is not None:
  *         assembly(Mat_(mat), <long>at)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_assemblyBegin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_assemblyBegin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_assembly = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":771
+  /* "libpetsc4py.pyx":774
  *     FunctionBegin(b"MatAssemblyBegin_Python")
  *     cdef assembly = PyMat(mat).assemblyBegin
  *     if assembly is not None:             # <<<<<<<<<<<<<<
@@ -8568,16 +8797,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":772
+    /* "libpetsc4py.pyx":775
  *     cdef assembly = PyMat(mat).assemblyBegin
  *     if assembly is not None:
  *         assembly(Mat_(mat), <long>at)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_at)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_at)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 775, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_assembly);
     __pyx_t_6 = __pyx_v_assembly; __pyx_t_7 = NULL;
@@ -8592,7 +8821,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
         __pyx_t_8 = 1;
       }
     }
-    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 775, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     if (__pyx_t_7) {
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -8603,16 +8832,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
     PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
     __pyx_t_1 = 0;
     __pyx_t_5 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":774
+ *     FunctionBegin(b"MatAssemblyBegin_Python")
+ *     cdef assembly = PyMat(mat).assemblyBegin
+ *     if assembly is not None:             # <<<<<<<<<<<<<<
+ *         assembly(Mat_(mat), <long>at)
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":773
+  /* "libpetsc4py.pyx":776
  *     if assembly is not None:
  *         assembly(Mat_(mat), <long>at)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -8622,7 +8857,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":764
+  /* "libpetsc4py.pyx":767
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatAssemblyBegin_Python(             # <<<<<<<<<<<<<<
@@ -8649,7 +8884,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":775
+/* "libpetsc4py.pyx":778
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatAssemblyEnd_Python(             # <<<<<<<<<<<<<<
@@ -8670,39 +8905,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   PyObject *__pyx_t_7 = NULL;
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = 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("MatAssemblyEnd_Python", 0);
 
-  /* "libpetsc4py.pyx":780
+  /* "libpetsc4py.pyx":783
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatAssemblyEnd_Python")             # <<<<<<<<<<<<<<
  *     cdef assembly = PyMat(mat).assemblyEnd
  *     if assembly is None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatAssemblyEnd_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatAssemblyEnd_Python"));
 
-  /* "libpetsc4py.pyx":781
+  /* "libpetsc4py.pyx":784
  *     except IERR with gil:
  *     FunctionBegin(b"MatAssemblyEnd_Python")
  *     cdef assembly = PyMat(mat).assemblyEnd             # <<<<<<<<<<<<<<
  *     if assembly is None:
  *         assembly = PyMat(mat).assembly
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_assemblyEnd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_assemblyEnd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_assembly = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":782
+  /* "libpetsc4py.pyx":785
  *     FunctionBegin(b"MatAssemblyEnd_Python")
  *     cdef assembly = PyMat(mat).assemblyEnd
  *     if assembly is None:             # <<<<<<<<<<<<<<
@@ -8713,25 +8945,31 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":783
+    /* "libpetsc4py.pyx":786
  *     cdef assembly = PyMat(mat).assemblyEnd
  *     if assembly is None:
  *         assembly = PyMat(mat).assembly             # <<<<<<<<<<<<<<
  *     if assembly is not None:
  *         assembly(Mat_(mat), <int>at)
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_assembly); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_assembly); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_assembly, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":785
+ *     FunctionBegin(b"MatAssemblyEnd_Python")
+ *     cdef assembly = PyMat(mat).assemblyEnd
+ *     if assembly is None:             # <<<<<<<<<<<<<<
+ *         assembly = PyMat(mat).assembly
+ *     if assembly is not None:
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":784
+  /* "libpetsc4py.pyx":787
  *     if assembly is None:
  *         assembly = PyMat(mat).assembly
  *     if assembly is not None:             # <<<<<<<<<<<<<<
@@ -8742,16 +8980,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":785
+    /* "libpetsc4py.pyx":788
  *         assembly = PyMat(mat).assembly
  *     if assembly is not None:
  *         assembly(Mat_(mat), <int>at)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 788, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = __Pyx_PyInt_From_int(((int)__pyx_v_at)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyInt_From_int(((int)__pyx_v_at)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 788, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_assembly);
     __pyx_t_6 = __pyx_v_assembly; __pyx_t_7 = NULL;
@@ -8766,7 +9004,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
         __pyx_t_8 = 1;
       }
     }
-    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 788, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     if (__pyx_t_7) {
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -8777,16 +9015,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
     PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
     __pyx_t_2 = 0;
     __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    goto __pyx_L4;
+
+    /* "libpetsc4py.pyx":787
+ *     if assembly is None:
+ *         assembly = PyMat(mat).assembly
+ *     if assembly is not None:             # <<<<<<<<<<<<<<
+ *         assembly(Mat_(mat), <int>at)
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":786
+  /* "libpetsc4py.pyx":789
  *     if assembly is not None:
  *         assembly(Mat_(mat), <int>at)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -8796,7 +9040,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":775
+  /* "libpetsc4py.pyx":778
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatAssemblyEnd_Python(             # <<<<<<<<<<<<<<
@@ -8823,7 +9067,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":788
+/* "libpetsc4py.pyx":791
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatZeroEntries_Python(             # <<<<<<<<<<<<<<
@@ -8842,39 +9086,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatZeroEntries_Python", 0);
 
-  /* "libpetsc4py.pyx":792
+  /* "libpetsc4py.pyx":795
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatZeroEntries_Python")             # <<<<<<<<<<<<<<
  *     cdef zeroEntries = PyMat(mat).zeroEntries
  *     if zeroEntries is None: return UNSUPPORTED(b"zeroEntries")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatZeroEntries_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatZeroEntries_Python"));
 
-  /* "libpetsc4py.pyx":793
+  /* "libpetsc4py.pyx":796
  *     except IERR with gil:
  *     FunctionBegin(b"MatZeroEntries_Python")
  *     cdef zeroEntries = PyMat(mat).zeroEntries             # <<<<<<<<<<<<<<
  *     if zeroEntries is None: return UNSUPPORTED(b"zeroEntries")
  *     zeroEntries(Mat_(mat))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeroEntries); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeroEntries); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_zeroEntries = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":794
+  /* "libpetsc4py.pyx":797
  *     FunctionBegin(b"MatZeroEntries_Python")
  *     cdef zeroEntries = PyMat(mat).zeroEntries
  *     if zeroEntries is None: return UNSUPPORTED(b"zeroEntries")             # <<<<<<<<<<<<<<
@@ -8884,18 +9125,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
   __pyx_t_3 = (__pyx_v_zeroEntries == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_zeroEntries);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"zeroEntries"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":795
+  /* "libpetsc4py.pyx":798
  *     cdef zeroEntries = PyMat(mat).zeroEntries
  *     if zeroEntries is None: return UNSUPPORTED(b"zeroEntries")
  *     zeroEntries(Mat_(mat))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_zeroEntries);
   __pyx_t_5 = __pyx_v_zeroEntries; __pyx_t_6 = NULL;
@@ -8909,24 +9150,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
     }
   }
   if (!__pyx_t_6) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 798, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":796
+  /* "libpetsc4py.pyx":799
  *     if zeroEntries is None: return UNSUPPORTED(b"zeroEntries")
  *     zeroEntries(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -8936,7 +9177,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":788
+  /* "libpetsc4py.pyx":791
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatZeroEntries_Python(             # <<<<<<<<<<<<<<
@@ -8962,7 +9203,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":798
+/* "libpetsc4py.pyx":801
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatScale_Python(             # <<<<<<<<<<<<<<
@@ -8983,39 +9224,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
   PyObject *__pyx_t_7 = NULL;
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = 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("MatScale_Python", 0);
 
-  /* "libpetsc4py.pyx":803
+  /* "libpetsc4py.pyx":806
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatScale_Python")             # <<<<<<<<<<<<<<
  *     cdef scale = PyMat(mat).scale
  *     if scale is None: return UNSUPPORTED(b"scale")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatScale_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatScale_Python"));
 
-  /* "libpetsc4py.pyx":804
+  /* "libpetsc4py.pyx":807
  *     except IERR with gil:
  *     FunctionBegin(b"MatScale_Python")
  *     cdef scale = PyMat(mat).scale             # <<<<<<<<<<<<<<
  *     if scale is None: return UNSUPPORTED(b"scale")
  *     scale(Mat_(mat), toScalar(s))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_scale = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":805
+  /* "libpetsc4py.pyx":808
  *     FunctionBegin(b"MatScale_Python")
  *     cdef scale = PyMat(mat).scale
  *     if scale is None: return UNSUPPORTED(b"scale")             # <<<<<<<<<<<<<<
@@ -9025,20 +9263,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
   __pyx_t_3 = (__pyx_v_scale == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_scale);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"scale"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":806
+  /* "libpetsc4py.pyx":809
  *     cdef scale = PyMat(mat).scale
  *     if scale is None: return UNSUPPORTED(b"scale")
  *     scale(Mat_(mat), toScalar(s))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = PyPetscScalar_FromPetscScalar(__pyx_v_s); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyPetscScalar_FromPetscScalar(__pyx_v_s); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_scale);
   __pyx_t_6 = __pyx_v_scale; __pyx_t_7 = NULL;
@@ -9053,7 +9291,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
       __pyx_t_8 = 1;
     }
   }
-  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__pyx_t_7) {
     __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -9064,13 +9302,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
   PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":807
+  /* "libpetsc4py.pyx":810
  *     if scale is None: return UNSUPPORTED(b"scale")
  *     scale(Mat_(mat), toScalar(s))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9080,7 +9318,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":798
+  /* "libpetsc4py.pyx":801
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatScale_Python(             # <<<<<<<<<<<<<<
@@ -9107,7 +9345,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":809
+/* "libpetsc4py.pyx":812
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatShift_Python(             # <<<<<<<<<<<<<<
@@ -9128,39 +9366,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
   PyObject *__pyx_t_7 = NULL;
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = 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("MatShift_Python", 0);
 
-  /* "libpetsc4py.pyx":814
+  /* "libpetsc4py.pyx":817
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatShift_Python")             # <<<<<<<<<<<<<<
  *     cdef shift = PyMat(mat).shift
  *     if shift is None: return UNSUPPORTED(b"shift")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatShift_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatShift_Python"));
 
-  /* "libpetsc4py.pyx":815
+  /* "libpetsc4py.pyx":818
  *     except IERR with gil:
  *     FunctionBegin(b"MatShift_Python")
  *     cdef shift = PyMat(mat).shift             # <<<<<<<<<<<<<<
  *     if shift is None: return UNSUPPORTED(b"shift")
  *     shift(Mat_(mat), toScalar(s))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 818, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_shift); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_shift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 818, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_shift = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":816
+  /* "libpetsc4py.pyx":819
  *     FunctionBegin(b"MatShift_Python")
  *     cdef shift = PyMat(mat).shift
  *     if shift is None: return UNSUPPORTED(b"shift")             # <<<<<<<<<<<<<<
@@ -9170,20 +9405,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
   __pyx_t_3 = (__pyx_v_shift == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_shift);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"shift"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":817
+  /* "libpetsc4py.pyx":820
  *     cdef shift = PyMat(mat).shift
  *     if shift is None: return UNSUPPORTED(b"shift")
  *     shift(Mat_(mat), toScalar(s))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 820, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = PyPetscScalar_FromPetscScalar(__pyx_v_s); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyPetscScalar_FromPetscScalar(__pyx_v_s); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 820, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_shift);
   __pyx_t_6 = __pyx_v_shift; __pyx_t_7 = NULL;
@@ -9198,7 +9433,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
       __pyx_t_8 = 1;
     }
   }
-  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 820, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__pyx_t_7) {
     __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -9209,13 +9444,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
   PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 820, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":818
+  /* "libpetsc4py.pyx":821
  *     if shift is None: return UNSUPPORTED(b"shift")
  *     shift(Mat_(mat), toScalar(s))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9225,7 +9460,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":809
+  /* "libpetsc4py.pyx":812
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatShift_Python(             # <<<<<<<<<<<<<<
@@ -9252,7 +9487,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":820
+/* "libpetsc4py.pyx":823
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCreateVecs_Python(             # <<<<<<<<<<<<<<
@@ -9284,39 +9519,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   PyObject *__pyx_t_16 = NULL;
   PyObject *(*__pyx_t_17)(PyObject *);
   Vec __pyx_t_18;
-  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("MatCreateVecs_Python", 0);
 
-  /* "libpetsc4py.pyx":826
+  /* "libpetsc4py.pyx":829
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatCreateVecs_Python")             # <<<<<<<<<<<<<<
  *     cdef createVecs = PyMat(mat).createVecs
  *     if createVecs is None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatCreateVecs_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatCreateVecs_Python"));
 
-  /* "libpetsc4py.pyx":827
+  /* "libpetsc4py.pyx":830
  *     except IERR with gil:
  *     FunctionBegin(b"MatCreateVecs_Python")
  *     cdef createVecs = PyMat(mat).createVecs             # <<<<<<<<<<<<<<
  *     if createVecs is None:
  *         try:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_createVecs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_createVecs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 830, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_createVecs = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":828
+  /* "libpetsc4py.pyx":831
  *     FunctionBegin(b"MatCreateVecs_Python")
  *     cdef createVecs = PyMat(mat).createVecs
  *     if createVecs is None:             # <<<<<<<<<<<<<<
@@ -9327,7 +9559,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":829
+    /* "libpetsc4py.pyx":832
  *     cdef createVecs = PyMat(mat).createVecs
  *     if createVecs is None:
  *         try:             # <<<<<<<<<<<<<<
@@ -9336,7 +9568,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
     /*try:*/ {
 
-      /* "libpetsc4py.pyx":830
+      /* "libpetsc4py.pyx":833
  *     if createVecs is None:
  *         try:
  *             mat.ops.getvecs = NULL             # <<<<<<<<<<<<<<
@@ -9345,17 +9577,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
       __pyx_v_mat->ops->getvecs = NULL;
 
-      /* "libpetsc4py.pyx":831
+      /* "libpetsc4py.pyx":834
  *         try:
  *             mat.ops.getvecs = NULL
  *             CHKERR( MatCreateVecs(mat,x,y) )             # <<<<<<<<<<<<<<
  *         finally:
  *             mat.ops.getvecs = MatCreateVecs_Python
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatCreateVecs(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatCreateVecs(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 834, __pyx_L5_error)
     }
 
-    /* "libpetsc4py.pyx":833
+    /* "libpetsc4py.pyx":836
  *             CHKERR( MatCreateVecs(mat,x,y) )
  *         finally:
  *             mat.ops.getvecs = MatCreateVecs_Python             # <<<<<<<<<<<<<<
@@ -9368,8 +9600,10 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
         goto __pyx_L6;
       }
       /*exception exit:*/{
+        __Pyx_PyThreadState_declare
         __pyx_L5_error:;
         __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
+        __Pyx_PyThreadState_assign
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
@@ -9384,6 +9618,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
         {
           __pyx_v_mat->ops->getvecs = __pyx_f_11libpetsc4py_MatCreateVecs_Python;
         }
+        __Pyx_PyThreadState_assign
         if (PY_MAJOR_VERSION >= 3) {
           __Pyx_XGIVEREF(__pyx_t_11);
           __Pyx_XGIVEREF(__pyx_t_12);
@@ -9401,7 +9636,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
       __pyx_L6:;
     }
 
-    /* "libpetsc4py.pyx":834
+    /* "libpetsc4py.pyx":837
  *         finally:
  *             mat.ops.getvecs = MatCreateVecs_Python
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9410,9 +9645,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":831
+ *     FunctionBegin(b"MatCreateVecs_Python")
+ *     cdef createVecs = PyMat(mat).createVecs
+ *     if createVecs is None:             # <<<<<<<<<<<<<<
+ *         try:
+ *             mat.ops.getvecs = NULL
+ */
   }
 
-  /* "libpetsc4py.pyx":835
+  /* "libpetsc4py.pyx":838
  *             mat.ops.getvecs = MatCreateVecs_Python
  *         return FunctionEnd()
  *     if createVecs is None: return UNSUPPORTED(b"createVecs")             # <<<<<<<<<<<<<<
@@ -9422,18 +9665,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   __pyx_t_4 = (__pyx_v_createVecs == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_createVecs);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"createVecs"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":837
+  /* "libpetsc4py.pyx":840
  *     if createVecs is None: return UNSUPPORTED(b"createVecs")
  *     cdef Vec u, v
  *     u, v = createVecs(Mat_(mat))             # <<<<<<<<<<<<<<
  *     if x != NULL:
  *         x[0] = u.vec
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 840, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_createVecs);
   __pyx_t_14 = __pyx_v_createVecs; __pyx_t_15 = NULL;
@@ -9447,17 +9690,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     }
   }
   if (!__pyx_t_15) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_16 = PyTuple_New(1+1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_16 = PyTuple_New(1+1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 840, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_16);
     __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_15); __pyx_t_15 = NULL;
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_16, 0+1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_16, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_16, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
   }
@@ -9472,7 +9715,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 840, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -9485,15 +9728,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     __Pyx_INCREF(__pyx_t_14);
     __Pyx_INCREF(__pyx_t_16);
     #else
-    __pyx_t_14 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_14 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 840, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_14);
-    __pyx_t_16 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_16 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 840, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_16);
     #endif
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 840, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_17 = Py_TYPE(__pyx_t_1)->tp_iternext;
@@ -9501,7 +9744,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     __Pyx_GOTREF(__pyx_t_14);
     index = 1; __pyx_t_16 = __pyx_t_17(__pyx_t_1); if (unlikely(!__pyx_t_16)) goto __pyx_L10_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_16);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_1), 2) < 0) __PYX_ERR(0, 840, __pyx_L1_error)
     __pyx_t_17 = NULL;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     goto __pyx_L11_unpacking_done;
@@ -9509,17 +9752,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_17 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(0, 840, __pyx_L1_error)
     __pyx_L11_unpacking_done:;
   }
-  if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(0, 840, __pyx_L1_error)
+  if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(0, 840, __pyx_L1_error)
   __pyx_v_u = ((struct PyPetscVecObject *)__pyx_t_14);
   __pyx_t_14 = 0;
   __pyx_v_v = ((struct PyPetscVecObject *)__pyx_t_16);
   __pyx_t_16 = 0;
 
-  /* "libpetsc4py.pyx":838
+  /* "libpetsc4py.pyx":841
  *     cdef Vec u, v
  *     u, v = createVecs(Mat_(mat))
  *     if x != NULL:             # <<<<<<<<<<<<<<
@@ -9529,7 +9772,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   __pyx_t_3 = ((__pyx_v_x != NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":839
+    /* "libpetsc4py.pyx":842
  *     u, v = createVecs(Mat_(mat))
  *     if x != NULL:
  *         x[0] = u.vec             # <<<<<<<<<<<<<<
@@ -9539,7 +9782,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     __pyx_t_18 = __pyx_v_u->vec;
     (__pyx_v_x[0]) = __pyx_t_18;
 
-    /* "libpetsc4py.pyx":840
+    /* "libpetsc4py.pyx":843
  *     if x != NULL:
  *         x[0] = u.vec
  *         u.vec = NULL             # <<<<<<<<<<<<<<
@@ -9547,11 +9790,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  *         y[0] = v.vec
  */
     __pyx_v_u->vec = NULL;
-    goto __pyx_L12;
+
+    /* "libpetsc4py.pyx":841
+ *     cdef Vec u, v
+ *     u, v = createVecs(Mat_(mat))
+ *     if x != NULL:             # <<<<<<<<<<<<<<
+ *         x[0] = u.vec
+ *         u.vec = NULL
+ */
   }
-  __pyx_L12:;
 
-  /* "libpetsc4py.pyx":841
+  /* "libpetsc4py.pyx":844
  *         x[0] = u.vec
  *         u.vec = NULL
  *     if y != NULL:             # <<<<<<<<<<<<<<
@@ -9561,7 +9810,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   __pyx_t_3 = ((__pyx_v_y != NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":842
+    /* "libpetsc4py.pyx":845
  *         u.vec = NULL
  *     if y != NULL:
  *         y[0] = v.vec             # <<<<<<<<<<<<<<
@@ -9571,7 +9820,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     __pyx_t_18 = __pyx_v_v->vec;
     (__pyx_v_y[0]) = __pyx_t_18;
 
-    /* "libpetsc4py.pyx":843
+    /* "libpetsc4py.pyx":846
  *     if y != NULL:
  *         y[0] = v.vec
  *         v.vec = NULL             # <<<<<<<<<<<<<<
@@ -9579,11 +9828,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  * 
  */
     __pyx_v_v->vec = NULL;
-    goto __pyx_L13;
-  }
-  __pyx_L13:;
 
-  /* "libpetsc4py.pyx":844
+    /* "libpetsc4py.pyx":844
+ *         x[0] = u.vec
+ *         u.vec = NULL
+ *     if y != NULL:             # <<<<<<<<<<<<<<
+ *         y[0] = v.vec
+ *         v.vec = NULL
+ */
+  }
+
+  /* "libpetsc4py.pyx":847
  *         y[0] = v.vec
  *         v.vec = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9593,7 +9848,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":820
+  /* "libpetsc4py.pyx":823
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCreateVecs_Python(             # <<<<<<<<<<<<<<
@@ -9621,7 +9876,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":846
+/* "libpetsc4py.pyx":849
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMult_Python(             # <<<<<<<<<<<<<<
@@ -9643,39 +9898,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("MatMult_Python", 0);
 
-  /* "libpetsc4py.pyx":852
+  /* "libpetsc4py.pyx":855
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMult_Python")             # <<<<<<<<<<<<<<
  *     cdef mult = PyMat(mat).mult
  *     if mult is None: return UNSUPPORTED(b"mult")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatMult_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMult_Python"));
 
-  /* "libpetsc4py.pyx":853
+  /* "libpetsc4py.pyx":856
  *     except IERR with gil:
  *     FunctionBegin(b"MatMult_Python")
  *     cdef mult = PyMat(mat).mult             # <<<<<<<<<<<<<<
  *     if mult is None: return UNSUPPORTED(b"mult")
  *     mult(Mat_(mat), Vec_(x), Vec_(y))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 856, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_mult); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_mult); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 856, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_mult = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":854
+  /* "libpetsc4py.pyx":857
  *     FunctionBegin(b"MatMult_Python")
  *     cdef mult = PyMat(mat).mult
  *     if mult is None: return UNSUPPORTED(b"mult")             # <<<<<<<<<<<<<<
@@ -9685,22 +9937,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
   __pyx_t_3 = (__pyx_v_mult == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_mult);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"mult"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":855
+  /* "libpetsc4py.pyx":858
  *     cdef mult = PyMat(mat).mult
  *     if mult is None: return UNSUPPORTED(b"mult")
  *     mult(Mat_(mat), Vec_(x), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_mult);
   __pyx_t_7 = __pyx_v_mult; __pyx_t_8 = NULL;
@@ -9715,7 +9967,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -9729,13 +9981,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":856
+  /* "libpetsc4py.pyx":859
  *     if mult is None: return UNSUPPORTED(b"mult")
  *     mult(Mat_(mat), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9745,7 +9997,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":846
+  /* "libpetsc4py.pyx":849
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMult_Python(             # <<<<<<<<<<<<<<
@@ -9773,7 +10025,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":858
+/* "libpetsc4py.pyx":861
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultTranspose_Python(             # <<<<<<<<<<<<<<
@@ -9798,39 +10050,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   PyObject *__pyx_t_9 = NULL;
   Py_ssize_t __pyx_t_10;
   PyObject *__pyx_t_11 = 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("MatMultTranspose_Python", 0);
 
-  /* "libpetsc4py.pyx":864
+  /* "libpetsc4py.pyx":867
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultTranspose_Python")             # <<<<<<<<<<<<<<
  *     cdef multTranspose = PyMat(mat).multTranspose
  *     cdef PetscBool symmset, symmknown
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatMultTranspose_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultTranspose_Python"));
 
-  /* "libpetsc4py.pyx":865
+  /* "libpetsc4py.pyx":868
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultTranspose_Python")
  *     cdef multTranspose = PyMat(mat).multTranspose             # <<<<<<<<<<<<<<
  *     cdef PetscBool symmset, symmknown
  *     if multTranspose is None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 868, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multTranspose); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multTranspose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 868, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_multTranspose = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":867
+  /* "libpetsc4py.pyx":870
  *     cdef multTranspose = PyMat(mat).multTranspose
  *     cdef PetscBool symmset, symmknown
  *     if multTranspose is None:             # <<<<<<<<<<<<<<
@@ -9841,7 +10090,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":868
+    /* "libpetsc4py.pyx":871
  *     cdef PetscBool symmset, symmknown
  *     if multTranspose is None:
  *         symmset = symmknown = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -9851,16 +10100,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
     __pyx_v_symmset = PETSC_FALSE;
     __pyx_v_symmknown = PETSC_FALSE;
 
-    /* "libpetsc4py.pyx":869
+    /* "libpetsc4py.pyx":872
  *     if multTranspose is None:
  *         symmset = symmknown = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )             # <<<<<<<<<<<<<<
  *         if symmset and symmknown:
  *             CHKERR( MatMult(mat,x,y) )
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatIsSymmetricKnown(__pyx_v_mat, (&__pyx_v_symmset), (&__pyx_v_symmknown))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatIsSymmetricKnown(__pyx_v_mat, (&__pyx_v_symmset), (&__pyx_v_symmknown))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 872, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":870
+    /* "libpetsc4py.pyx":873
  *         symmset = symmknown = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
  *         if symmset and symmknown:             # <<<<<<<<<<<<<<
@@ -9876,16 +10125,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":871
+      /* "libpetsc4py.pyx":874
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
  *         if symmset and symmknown:
  *             CHKERR( MatMult(mat,x,y) )             # <<<<<<<<<<<<<<
  *             return FunctionEnd()
  *     if multTranspose is None: return UNSUPPORTED(b"multTranspose")
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 874, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":872
+      /* "libpetsc4py.pyx":875
  *         if symmset and symmknown:
  *             CHKERR( MatMult(mat,x,y) )
  *             return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9894,12 +10143,26 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
  */
       __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
       goto __pyx_L0;
+
+      /* "libpetsc4py.pyx":873
+ *         symmset = symmknown = PETSC_FALSE
+ *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
+ *         if symmset and symmknown:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatMult(mat,x,y) )
+ *             return FunctionEnd()
+ */
     }
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":870
+ *     cdef multTranspose = PyMat(mat).multTranspose
+ *     cdef PetscBool symmset, symmknown
+ *     if multTranspose is None:             # <<<<<<<<<<<<<<
+ *         symmset = symmknown = PETSC_FALSE
+ *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":873
+  /* "libpetsc4py.pyx":876
  *             CHKERR( MatMult(mat,x,y) )
  *             return FunctionEnd()
  *     if multTranspose is None: return UNSUPPORTED(b"multTranspose")             # <<<<<<<<<<<<<<
@@ -9909,22 +10172,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   __pyx_t_4 = (__pyx_v_multTranspose == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_multTranspose);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"multTranspose"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":874
+  /* "libpetsc4py.pyx":877
  *             return FunctionEnd()
  *     if multTranspose is None: return UNSUPPORTED(b"multTranspose")
  *     multTranspose(Mat_(mat), Vec_(x), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_v_multTranspose);
   __pyx_t_8 = __pyx_v_multTranspose; __pyx_t_9 = NULL;
@@ -9939,7 +10202,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
       __pyx_t_10 = 1;
     }
   }
-  __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
   if (__pyx_t_9) {
     __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -9953,13 +10216,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   __pyx_t_1 = 0;
   __pyx_t_6 = 0;
   __pyx_t_7 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":875
+  /* "libpetsc4py.pyx":878
  *     if multTranspose is None: return UNSUPPORTED(b"multTranspose")
  *     multTranspose(Mat_(mat), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9969,7 +10232,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":858
+  /* "libpetsc4py.pyx":861
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultTranspose_Python(             # <<<<<<<<<<<<<<
@@ -9997,7 +10260,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":877
+/* "libpetsc4py.pyx":880
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultHermitian_Python(             # <<<<<<<<<<<<<<
@@ -10022,39 +10285,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   PyObject *__pyx_t_9 = NULL;
   Py_ssize_t __pyx_t_10;
   PyObject *__pyx_t_11 = 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("MatMultHermitian_Python", 0);
 
-  /* "libpetsc4py.pyx":883
+  /* "libpetsc4py.pyx":886
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultHermitian_Python")             # <<<<<<<<<<<<<<
  *     cdef multHermitian = PyMat(mat).multHermitian
  *     cdef PetscBool hermset, hermknown
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatMultHermitian_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultHermitian_Python"));
 
-  /* "libpetsc4py.pyx":884
+  /* "libpetsc4py.pyx":887
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultHermitian_Python")
  *     cdef multHermitian = PyMat(mat).multHermitian             # <<<<<<<<<<<<<<
  *     cdef PetscBool hermset, hermknown
  *     if multHermitian is None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multHermitian); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multHermitian); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 887, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_multHermitian = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":886
+  /* "libpetsc4py.pyx":889
  *     cdef multHermitian = PyMat(mat).multHermitian
  *     cdef PetscBool hermset, hermknown
  *     if multHermitian is None:             # <<<<<<<<<<<<<<
@@ -10065,7 +10325,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":887
+    /* "libpetsc4py.pyx":890
  *     cdef PetscBool hermset, hermknown
  *     if multHermitian is None:
  *         hermset = hermknown = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -10075,16 +10335,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
     __pyx_v_hermset = PETSC_FALSE;
     __pyx_v_hermknown = PETSC_FALSE;
 
-    /* "libpetsc4py.pyx":888
+    /* "libpetsc4py.pyx":891
  *     if multHermitian is None:
  *         hermset = hermknown = PETSC_FALSE
  *         CHKERR( MatIsHermitianKnown(mat,&hermset,&hermknown) )             # <<<<<<<<<<<<<<
  *         if hermset and hermknown:
  *             CHKERR( MatMult(mat,x,y) )
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatIsHermitianKnown(__pyx_v_mat, (&__pyx_v_hermset), (&__pyx_v_hermknown))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatIsHermitianKnown(__pyx_v_mat, (&__pyx_v_hermset), (&__pyx_v_hermknown))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 891, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":889
+    /* "libpetsc4py.pyx":892
  *         hermset = hermknown = PETSC_FALSE
  *         CHKERR( MatIsHermitianKnown(mat,&hermset,&hermknown) )
  *         if hermset and hermknown:             # <<<<<<<<<<<<<<
@@ -10100,16 +10360,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":890
+      /* "libpetsc4py.pyx":893
  *         CHKERR( MatIsHermitianKnown(mat,&hermset,&hermknown) )
  *         if hermset and hermknown:
  *             CHKERR( MatMult(mat,x,y) )             # <<<<<<<<<<<<<<
  *             return FunctionEnd()
  *     if multHermitian is None: return UNSUPPORTED(b"multHermitian")
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 893, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":891
+      /* "libpetsc4py.pyx":894
  *         if hermset and hermknown:
  *             CHKERR( MatMult(mat,x,y) )
  *             return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10118,12 +10378,26 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
  */
       __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
       goto __pyx_L0;
+
+      /* "libpetsc4py.pyx":892
+ *         hermset = hermknown = PETSC_FALSE
+ *         CHKERR( MatIsHermitianKnown(mat,&hermset,&hermknown) )
+ *         if hermset and hermknown:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatMult(mat,x,y) )
+ *             return FunctionEnd()
+ */
     }
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":889
+ *     cdef multHermitian = PyMat(mat).multHermitian
+ *     cdef PetscBool hermset, hermknown
+ *     if multHermitian is None:             # <<<<<<<<<<<<<<
+ *         hermset = hermknown = PETSC_FALSE
+ *         CHKERR( MatIsHermitianKnown(mat,&hermset,&hermknown) )
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":892
+  /* "libpetsc4py.pyx":895
  *             CHKERR( MatMult(mat,x,y) )
  *             return FunctionEnd()
  *     if multHermitian is None: return UNSUPPORTED(b"multHermitian")             # <<<<<<<<<<<<<<
@@ -10133,22 +10407,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   __pyx_t_4 = (__pyx_v_multHermitian == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_multHermitian);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"multHermitian"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":893
+  /* "libpetsc4py.pyx":896
  *             return FunctionEnd()
  *     if multHermitian is None: return UNSUPPORTED(b"multHermitian")
  *     multHermitian(Mat_(mat), Vec_(x), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_v_multHermitian);
   __pyx_t_8 = __pyx_v_multHermitian; __pyx_t_9 = NULL;
@@ -10163,7 +10437,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
       __pyx_t_10 = 1;
     }
   }
-  __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
   if (__pyx_t_9) {
     __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -10177,13 +10451,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   __pyx_t_1 = 0;
   __pyx_t_6 = 0;
   __pyx_t_7 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":894
+  /* "libpetsc4py.pyx":897
  *     if multHermitian is None: return UNSUPPORTED(b"multHermitian")
  *     multHermitian(Mat_(mat), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10193,7 +10467,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":877
+  /* "libpetsc4py.pyx":880
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultHermitian_Python(             # <<<<<<<<<<<<<<
@@ -10221,7 +10495,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":896
+/* "libpetsc4py.pyx":899
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultAdd_Python(             # <<<<<<<<<<<<<<
@@ -10231,6 +10505,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
 
 static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, Vec __pyx_v_x, Vec __pyx_v_v, Vec __pyx_v_y) {
   PyObject *__pyx_v_multAdd = 0;
+  Vec __pyx_v_t;
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -10245,80 +10520,153 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   PyObject *__pyx_t_10 = NULL;
   Py_ssize_t __pyx_t_11;
   PyObject *__pyx_t_12 = 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("MatMultAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":903
+  /* "libpetsc4py.pyx":906
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultAdd_Python")             # <<<<<<<<<<<<<<
  *     cdef multAdd = PyMat(mat).multAdd
- *     if multAdd is None:
+ *     cdef PetscVec t = NULL
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatMultAdd_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultAdd_Python"));
 
-  /* "libpetsc4py.pyx":904
+  /* "libpetsc4py.pyx":907
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultAdd_Python")
  *     cdef multAdd = PyMat(mat).multAdd             # <<<<<<<<<<<<<<
- *     if multAdd is None:
- *         CHKERR( MatMult(mat,x,y) )
+ *     cdef PetscVec t = NULL
+ * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 907, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multAdd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 907, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_multAdd = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":905
+  /* "libpetsc4py.pyx":908
  *     FunctionBegin(b"MatMultAdd_Python")
  *     cdef multAdd = PyMat(mat).multAdd
+ *     cdef PetscVec t = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     if multAdd is None:
+ */
+  __pyx_v_t = NULL;
+
+  /* "libpetsc4py.pyx":910
+ *     cdef PetscVec t = NULL
+ * 
  *     if multAdd is None:             # <<<<<<<<<<<<<<
- *         CHKERR( MatMult(mat,x,y) )
- *         CHKERR( VecAXPY(y,1.0,v) )
+ *         if v == y:
+ *             CHKERR( VecDuplicate(y, &t) )
  */
   __pyx_t_3 = (__pyx_v_multAdd == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":906
- *     cdef multAdd = PyMat(mat).multAdd
+    /* "libpetsc4py.pyx":911
+ * 
  *     if multAdd is None:
- *         CHKERR( MatMult(mat,x,y) )             # <<<<<<<<<<<<<<
- *         CHKERR( VecAXPY(y,1.0,v) )
- *         return FunctionEnd()
+ *         if v == y:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecDuplicate(y, &t) )
+ *             CHKERR( MatMult(mat,x,t) )
+ */
+    __pyx_t_4 = ((__pyx_v_v == __pyx_v_y) != 0);
+    if (__pyx_t_4) {
+
+      /* "libpetsc4py.pyx":912
+ *     if multAdd is None:
+ *         if v == y:
+ *             CHKERR( VecDuplicate(y, &t) )             # <<<<<<<<<<<<<<
+ *             CHKERR( MatMult(mat,x,t) )
+ *             CHKERR( VecAXPY(y,1.0,t) )
+ */
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_y, (&__pyx_v_t))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 912, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":913
+ *         if v == y:
+ *             CHKERR( VecDuplicate(y, &t) )
+ *             CHKERR( MatMult(mat,x,t) )             # <<<<<<<<<<<<<<
+ *             CHKERR( VecAXPY(y,1.0,t) )
+ *             CHKERR( VecDestroy(&t) )
+ */
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_t)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 913, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":914
+ *             CHKERR( VecDuplicate(y, &t) )
+ *             CHKERR( MatMult(mat,x,t) )
+ *             CHKERR( VecAXPY(y,1.0,t) )             # <<<<<<<<<<<<<<
+ *             CHKERR( VecDestroy(&t) )
+ *         else:
+ */
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_t)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 914, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":915
+ *             CHKERR( MatMult(mat,x,t) )
+ *             CHKERR( VecAXPY(y,1.0,t) )
+ *             CHKERR( VecDestroy(&t) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             CHKERR( MatMult(mat,x,y) )
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 915, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":907
+      /* "libpetsc4py.pyx":911
+ * 
  *     if multAdd is None:
- *         CHKERR( MatMult(mat,x,y) )
- *         CHKERR( VecAXPY(y,1.0,v) )             # <<<<<<<<<<<<<<
+ *         if v == y:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecDuplicate(y, &t) )
+ *             CHKERR( MatMult(mat,x,t) )
+ */
+      goto __pyx_L4;
+    }
+
+    /* "libpetsc4py.pyx":917
+ *             CHKERR( VecDestroy(&t) )
+ *         else:
+ *             CHKERR( MatMult(mat,x,y) )             # <<<<<<<<<<<<<<
+ *             CHKERR( VecAXPY(y,1.0,v) )
+ *         return FunctionEnd()
+ */
+    /*else*/ {
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 917, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":918
+ *         else:
+ *             CHKERR( MatMult(mat,x,y) )
+ *             CHKERR( VecAXPY(y,1.0,v) )             # <<<<<<<<<<<<<<
  *         return FunctionEnd()
  *     if multAdd is None: return UNSUPPORTED(b"multAdd")
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 907; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 918, __pyx_L1_error)
+    }
+    __pyx_L4:;
 
-    /* "libpetsc4py.pyx":908
- *         CHKERR( MatMult(mat,x,y) )
- *         CHKERR( VecAXPY(y,1.0,v) )
+    /* "libpetsc4py.pyx":919
+ *             CHKERR( MatMult(mat,x,y) )
+ *             CHKERR( VecAXPY(y,1.0,v) )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
  *     if multAdd is None: return UNSUPPORTED(b"multAdd")
  *     multAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":910
+ *     cdef PetscVec t = NULL
+ * 
+ *     if multAdd is None:             # <<<<<<<<<<<<<<
+ *         if v == y:
+ *             CHKERR( VecDuplicate(y, &t) )
+ */
   }
 
-  /* "libpetsc4py.pyx":909
- *         CHKERR( VecAXPY(y,1.0,v) )
+  /* "libpetsc4py.pyx":920
+ *             CHKERR( VecAXPY(y,1.0,v) )
  *         return FunctionEnd()
  *     if multAdd is None: return UNSUPPORTED(b"multAdd")             # <<<<<<<<<<<<<<
  *     multAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
@@ -10327,24 +10675,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   __pyx_t_4 = (__pyx_v_multAdd == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_multAdd);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"multAdd"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":910
+  /* "libpetsc4py.pyx":921
  *         return FunctionEnd()
  *     if multAdd is None: return UNSUPPORTED(b"multAdd")
  *     multAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 921, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 921, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 921, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 921, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_multAdd);
   __pyx_t_9 = __pyx_v_multAdd; __pyx_t_10 = NULL;
@@ -10359,7 +10707,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
       __pyx_t_11 = 1;
     }
   }
-  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 921, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   if (__pyx_t_10) {
     __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -10376,13 +10724,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   __pyx_t_6 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 921, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":911
+  /* "libpetsc4py.pyx":922
  *     if multAdd is None: return UNSUPPORTED(b"multAdd")
  *     multAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10392,7 +10740,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":896
+  /* "libpetsc4py.pyx":899
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultAdd_Python(             # <<<<<<<<<<<<<<
@@ -10421,7 +10769,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":913
+/* "libpetsc4py.pyx":924
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultTransposeAdd_Python(             # <<<<<<<<<<<<<<
@@ -10445,39 +10793,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   PyObject *__pyx_t_10 = NULL;
   Py_ssize_t __pyx_t_11;
   PyObject *__pyx_t_12 = 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("MatMultTransposeAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":920
+  /* "libpetsc4py.pyx":931
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultTransposeAdd_Python")             # <<<<<<<<<<<<<<
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
  *     if multTransposeAdd is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatMultTransposeAdd_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultTransposeAdd_Python"));
 
-  /* "libpetsc4py.pyx":921
+  /* "libpetsc4py.pyx":932
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultTransposeAdd_Python")
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd             # <<<<<<<<<<<<<<
  *     if multTransposeAdd is not None:
  *         CHKERR( MatMultTranspose(mat,x,y) )
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 932, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multTransposeAdd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multTransposeAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 932, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_multTransposeAdd = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":922
+  /* "libpetsc4py.pyx":933
  *     FunctionBegin(b"MatMultTransposeAdd_Python")
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
  *     if multTransposeAdd is not None:             # <<<<<<<<<<<<<<
@@ -10488,25 +10833,25 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":923
+    /* "libpetsc4py.pyx":934
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
  *     if multTransposeAdd is not None:
  *         CHKERR( MatMultTranspose(mat,x,y) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMultTranspose(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMultTranspose(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 934, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":924
+    /* "libpetsc4py.pyx":935
  *     if multTransposeAdd is not None:
  *         CHKERR( MatMultTranspose(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )             # <<<<<<<<<<<<<<
  *         return FunctionEnd()
  *     if multTransposeAdd is None: return UNSUPPORTED(b"multTransposeAdd")
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 935, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":925
+    /* "libpetsc4py.pyx":936
  *         CHKERR( MatMultTranspose(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10515,9 +10860,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":933
+ *     FunctionBegin(b"MatMultTransposeAdd_Python")
+ *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
+ *     if multTransposeAdd is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMultTranspose(mat,x,y) )
+ *         CHKERR( VecAXPY(y,1.0,v)          )
+ */
   }
 
-  /* "libpetsc4py.pyx":926
+  /* "libpetsc4py.pyx":937
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()
  *     if multTransposeAdd is None: return UNSUPPORTED(b"multTransposeAdd")             # <<<<<<<<<<<<<<
@@ -10527,24 +10880,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   __pyx_t_4 = (__pyx_v_multTransposeAdd == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_multTransposeAdd);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"multTransposeAdd"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":927
+  /* "libpetsc4py.pyx":938
  *         return FunctionEnd()
  *     if multTransposeAdd is None: return UNSUPPORTED(b"multTransposeAdd")
  *     multTransposeAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 938, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 938, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 938, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 938, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_multTransposeAdd);
   __pyx_t_9 = __pyx_v_multTransposeAdd; __pyx_t_10 = NULL;
@@ -10559,7 +10912,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
       __pyx_t_11 = 1;
     }
   }
-  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 938, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   if (__pyx_t_10) {
     __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -10576,13 +10929,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   __pyx_t_6 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 938, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":928
+  /* "libpetsc4py.pyx":939
  *     if multTransposeAdd is None: return UNSUPPORTED(b"multTransposeAdd")
  *     multTransposeAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10592,7 +10945,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":913
+  /* "libpetsc4py.pyx":924
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultTransposeAdd_Python(             # <<<<<<<<<<<<<<
@@ -10621,7 +10974,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":930
+/* "libpetsc4py.pyx":941
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultHermitianAdd_Python(             # <<<<<<<<<<<<<<
@@ -10645,39 +10998,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   PyObject *__pyx_t_10 = NULL;
   Py_ssize_t __pyx_t_11;
   PyObject *__pyx_t_12 = 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("MatMultHermitianAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":937
+  /* "libpetsc4py.pyx":948
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultHermitianAdd_Python")             # <<<<<<<<<<<<<<
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
  *     if multHermitianAdd is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatMultHermitianAdd_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultHermitianAdd_Python"));
 
-  /* "libpetsc4py.pyx":938
+  /* "libpetsc4py.pyx":949
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultHermitianAdd_Python")
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd             # <<<<<<<<<<<<<<
  *     if multHermitianAdd is not None:
  *         CHKERR( MatMultHermitian(mat,x,y) )
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 949, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multHermitianAdd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multHermitianAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 949, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_multHermitianAdd = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":939
+  /* "libpetsc4py.pyx":950
  *     FunctionBegin(b"MatMultHermitianAdd_Python")
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
  *     if multHermitianAdd is not None:             # <<<<<<<<<<<<<<
@@ -10688,25 +11038,25 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":940
+    /* "libpetsc4py.pyx":951
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
  *     if multHermitianAdd is not None:
  *         CHKERR( MatMultHermitian(mat,x,y) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMultHermitianTranspose(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMultHermitianTranspose(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 951, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":941
+    /* "libpetsc4py.pyx":952
  *     if multHermitianAdd is not None:
  *         CHKERR( MatMultHermitian(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )             # <<<<<<<<<<<<<<
  *         return FunctionEnd()
  *     if multHermitianAdd is None: return UNSUPPORTED(b"multHermitianAdd")
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 941; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 952, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":942
+    /* "libpetsc4py.pyx":953
  *         CHKERR( MatMultHermitian(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10715,9 +11065,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":950
+ *     FunctionBegin(b"MatMultHermitianAdd_Python")
+ *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
+ *     if multHermitianAdd is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMultHermitian(mat,x,y) )
+ *         CHKERR( VecAXPY(y,1.0,v)          )
+ */
   }
 
-  /* "libpetsc4py.pyx":943
+  /* "libpetsc4py.pyx":954
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()
  *     if multHermitianAdd is None: return UNSUPPORTED(b"multHermitianAdd")             # <<<<<<<<<<<<<<
@@ -10727,24 +11085,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   __pyx_t_4 = (__pyx_v_multHermitianAdd == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_multHermitianAdd);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"multHermitianAdd"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":944
+  /* "libpetsc4py.pyx":955
  *         return FunctionEnd()
  *     if multHermitianAdd is None: return UNSUPPORTED(b"multHermitianAdd")
  *     multHermitianAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 955, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 955, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 955, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 955, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_multHermitianAdd);
   __pyx_t_9 = __pyx_v_multHermitianAdd; __pyx_t_10 = NULL;
@@ -10759,7 +11117,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
       __pyx_t_11 = 1;
     }
   }
-  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 955, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   if (__pyx_t_10) {
     __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -10776,13 +11134,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   __pyx_t_6 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 955, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":945
+  /* "libpetsc4py.pyx":956
  *     if multHermitianAdd is None: return UNSUPPORTED(b"multHermitianAdd")
  *     multHermitianAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10792,7 +11150,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":930
+  /* "libpetsc4py.pyx":941
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultHermitianAdd_Python(             # <<<<<<<<<<<<<<
@@ -10821,7 +11179,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":947
+/* "libpetsc4py.pyx":958
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultDiagonalBlock_Python(             # <<<<<<<<<<<<<<
@@ -10843,39 +11201,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("MatMultDiagonalBlock_Python", 0);
 
-  /* "libpetsc4py.pyx":953
+  /* "libpetsc4py.pyx":964
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultDiagonalBlock_Python")             # <<<<<<<<<<<<<<
  *     cdef multDiagonalBlock = PyMat(mat).multDiagonalBlock
  *     if multDiagonalBlock is None: return UNSUPPORTED(b"multDiagonalBlock")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatMultDiagonalBlock_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultDiagonalBlock_Python"));
 
-  /* "libpetsc4py.pyx":954
+  /* "libpetsc4py.pyx":965
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultDiagonalBlock_Python")
  *     cdef multDiagonalBlock = PyMat(mat).multDiagonalBlock             # <<<<<<<<<<<<<<
  *     if multDiagonalBlock is None: return UNSUPPORTED(b"multDiagonalBlock")
  *     multDiagonalBlock(Mat_(mat), Vec_(x), Vec_(y))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multDiagonalBlock); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multDiagonalBlock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 965, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_multDiagonalBlock = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":955
+  /* "libpetsc4py.pyx":966
  *     FunctionBegin(b"MatMultDiagonalBlock_Python")
  *     cdef multDiagonalBlock = PyMat(mat).multDiagonalBlock
  *     if multDiagonalBlock is None: return UNSUPPORTED(b"multDiagonalBlock")             # <<<<<<<<<<<<<<
@@ -10885,22 +11240,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
   __pyx_t_3 = (__pyx_v_multDiagonalBlock == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_multDiagonalBlock);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"multDiagonalBlock"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":956
+  /* "libpetsc4py.pyx":967
  *     cdef multDiagonalBlock = PyMat(mat).multDiagonalBlock
  *     if multDiagonalBlock is None: return UNSUPPORTED(b"multDiagonalBlock")
  *     multDiagonalBlock(Mat_(mat), Vec_(x), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 967, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 967, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 967, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_multDiagonalBlock);
   __pyx_t_7 = __pyx_v_multDiagonalBlock; __pyx_t_8 = NULL;
@@ -10915,7 +11270,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 967, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -10929,13 +11284,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 967, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":957
+  /* "libpetsc4py.pyx":968
  *     if multDiagonalBlock is None: return UNSUPPORTED(b"multDiagonalBlock")
  *     multDiagonalBlock(Mat_(mat), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10945,7 +11300,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":947
+  /* "libpetsc4py.pyx":958
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultDiagonalBlock_Python(             # <<<<<<<<<<<<<<
@@ -10973,7 +11328,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":959
+/* "libpetsc4py.pyx":970
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolve_Python(             # <<<<<<<<<<<<<<
@@ -10995,39 +11350,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("MatSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":965
+  /* "libpetsc4py.pyx":976
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolve_Python")             # <<<<<<<<<<<<<<
  *     cdef solve = PyMat(mat).solve
  *     if solve is None: return UNSUPPORTED(b"solve")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSolve_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSolve_Python"));
 
-  /* "libpetsc4py.pyx":966
+  /* "libpetsc4py.pyx":977
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolve_Python")
  *     cdef solve = PyMat(mat).solve             # <<<<<<<<<<<<<<
  *     if solve is None: return UNSUPPORTED(b"solve")
  *     solve(Mat_(mat), Vec_(b), Vec_(x))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 977, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solve); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solve); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 977, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_solve = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":967
+  /* "libpetsc4py.pyx":978
  *     FunctionBegin(b"MatSolve_Python")
  *     cdef solve = PyMat(mat).solve
  *     if solve is None: return UNSUPPORTED(b"solve")             # <<<<<<<<<<<<<<
@@ -11037,22 +11389,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
   __pyx_t_3 = (__pyx_v_solve == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_solve);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"solve"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":968
+  /* "libpetsc4py.pyx":979
  *     cdef solve = PyMat(mat).solve
  *     if solve is None: return UNSUPPORTED(b"solve")
  *     solve(Mat_(mat), Vec_(b), Vec_(x))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 979, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 979, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 979, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_solve);
   __pyx_t_7 = __pyx_v_solve; __pyx_t_8 = NULL;
@@ -11067,7 +11419,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 979, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -11081,13 +11433,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 979, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":969
+  /* "libpetsc4py.pyx":980
  *     if solve is None: return UNSUPPORTED(b"solve")
  *     solve(Mat_(mat), Vec_(b), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11097,7 +11449,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":959
+  /* "libpetsc4py.pyx":970
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolve_Python(             # <<<<<<<<<<<<<<
@@ -11125,7 +11477,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":971
+/* "libpetsc4py.pyx":982
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveTranspose_Python(             # <<<<<<<<<<<<<<
@@ -11150,39 +11502,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   PyObject *__pyx_t_9 = NULL;
   Py_ssize_t __pyx_t_10;
   PyObject *__pyx_t_11 = 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("MatSolveTranspose_Python", 0);
 
-  /* "libpetsc4py.pyx":977
+  /* "libpetsc4py.pyx":988
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveTranspose_Python")             # <<<<<<<<<<<<<<
  *     cdef solveTranspose = PyMat(mat).solveTranspose
  *     cdef PetscBool symmset, symmknown
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSolveTranspose_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSolveTranspose_Python"));
 
-  /* "libpetsc4py.pyx":978
+  /* "libpetsc4py.pyx":989
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveTranspose_Python")
  *     cdef solveTranspose = PyMat(mat).solveTranspose             # <<<<<<<<<<<<<<
  *     cdef PetscBool symmset, symmknown
  *     if solveTranspose is None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 989, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveTranspose); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveTranspose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 989, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_solveTranspose = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":980
+  /* "libpetsc4py.pyx":991
  *     cdef solveTranspose = PyMat(mat).solveTranspose
  *     cdef PetscBool symmset, symmknown
  *     if solveTranspose is None:             # <<<<<<<<<<<<<<
@@ -11193,7 +11542,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":981
+    /* "libpetsc4py.pyx":992
  *     cdef PetscBool symmset, symmknown
  *     if solveTranspose is None:
  *         symmset = symmknown = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -11203,16 +11552,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
     __pyx_v_symmset = PETSC_FALSE;
     __pyx_v_symmknown = PETSC_FALSE;
 
-    /* "libpetsc4py.pyx":982
+    /* "libpetsc4py.pyx":993
  *     if solveTranspose is None:
  *         symmset = symmknown = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )             # <<<<<<<<<<<<<<
  *         if symmset and symmknown:
  *             CHKERR( MatSolve(mat,b,x) )
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatIsSymmetricKnown(__pyx_v_mat, (&__pyx_v_symmset), (&__pyx_v_symmknown))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 982; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatIsSymmetricKnown(__pyx_v_mat, (&__pyx_v_symmset), (&__pyx_v_symmknown))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 993, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":983
+    /* "libpetsc4py.pyx":994
  *         symmset = symmknown = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
  *         if symmset and symmknown:             # <<<<<<<<<<<<<<
@@ -11228,16 +11577,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":984
+      /* "libpetsc4py.pyx":995
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
  *         if symmset and symmknown:
  *             CHKERR( MatSolve(mat,b,x) )             # <<<<<<<<<<<<<<
  *             return FunctionEnd()
  *     if solveTranspose is None: return UNSUPPORTED(b"solveTranspose")
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatSolve(__pyx_v_mat, __pyx_v_b, __pyx_v_x)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatSolve(__pyx_v_mat, __pyx_v_b, __pyx_v_x)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 995, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":985
+      /* "libpetsc4py.pyx":996
  *         if symmset and symmknown:
  *             CHKERR( MatSolve(mat,b,x) )
  *             return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11246,12 +11595,26 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
  */
       __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
       goto __pyx_L0;
+
+      /* "libpetsc4py.pyx":994
+ *         symmset = symmknown = PETSC_FALSE
+ *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
+ *         if symmset and symmknown:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatSolve(mat,b,x) )
+ *             return FunctionEnd()
+ */
     }
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":991
+ *     cdef solveTranspose = PyMat(mat).solveTranspose
+ *     cdef PetscBool symmset, symmknown
+ *     if solveTranspose is None:             # <<<<<<<<<<<<<<
+ *         symmset = symmknown = PETSC_FALSE
+ *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":986
+  /* "libpetsc4py.pyx":997
  *             CHKERR( MatSolve(mat,b,x) )
  *             return FunctionEnd()
  *     if solveTranspose is None: return UNSUPPORTED(b"solveTranspose")             # <<<<<<<<<<<<<<
@@ -11261,22 +11624,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   __pyx_t_4 = (__pyx_v_solveTranspose == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_solveTranspose);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"solveTranspose"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":987
+  /* "libpetsc4py.pyx":998
  *             return FunctionEnd()
  *     if solveTranspose is None: return UNSUPPORTED(b"solveTranspose")
  *     solveTranspose(Mat_(mat), Vec_(b), Vec_(x))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 998, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 998, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 998, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_v_solveTranspose);
   __pyx_t_8 = __pyx_v_solveTranspose; __pyx_t_9 = NULL;
@@ -11291,7 +11654,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
       __pyx_t_10 = 1;
     }
   }
-  __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 998, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
   if (__pyx_t_9) {
     __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -11305,13 +11668,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   __pyx_t_1 = 0;
   __pyx_t_6 = 0;
   __pyx_t_7 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 998, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":988
+  /* "libpetsc4py.pyx":999
  *     if solveTranspose is None: return UNSUPPORTED(b"solveTranspose")
  *     solveTranspose(Mat_(mat), Vec_(b), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11321,7 +11684,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":971
+  /* "libpetsc4py.pyx":982
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveTranspose_Python(             # <<<<<<<<<<<<<<
@@ -11349,7 +11712,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":990
+/* "libpetsc4py.pyx":1001
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveAdd_Python(             # <<<<<<<<<<<<<<
@@ -11373,39 +11736,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   PyObject *__pyx_t_10 = NULL;
   Py_ssize_t __pyx_t_11;
   PyObject *__pyx_t_12 = 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("MatSolveAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":997
+  /* "libpetsc4py.pyx":1008
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveAdd_Python")             # <<<<<<<<<<<<<<
  *     cdef solveAdd = PyMat(mat).solveAdd
  *     if solveAdd is None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSolveAdd_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSolveAdd_Python"));
 
-  /* "libpetsc4py.pyx":998
+  /* "libpetsc4py.pyx":1009
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveAdd_Python")
  *     cdef solveAdd = PyMat(mat).solveAdd             # <<<<<<<<<<<<<<
  *     if solveAdd is None:
  *         CHKERR( MatSolve(mat,b,x) )
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1009, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveAdd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1009, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_solveAdd = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":999
+  /* "libpetsc4py.pyx":1010
  *     FunctionBegin(b"MatSolveAdd_Python")
  *     cdef solveAdd = PyMat(mat).solveAdd
  *     if solveAdd is None:             # <<<<<<<<<<<<<<
@@ -11416,25 +11776,25 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1000
+    /* "libpetsc4py.pyx":1011
  *     cdef solveAdd = PyMat(mat).solveAdd
  *     if solveAdd is None:
  *         CHKERR( MatSolve(mat,b,x) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecAXPY(x,1.0,y)  )
  *         return FunctionEnd()
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatSolve(__pyx_v_mat, __pyx_v_b, __pyx_v_x)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1000; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatSolve(__pyx_v_mat, __pyx_v_b, __pyx_v_x)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1011, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1001
+    /* "libpetsc4py.pyx":1012
  *     if solveAdd is None:
  *         CHKERR( MatSolve(mat,b,x) )
  *         CHKERR( VecAXPY(x,1.0,y)  )             # <<<<<<<<<<<<<<
  *         return FunctionEnd()
  *     if solveAdd is None: return UNSUPPORTED(b"solveAdd")
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_x, 1.0, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_x, 1.0, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1012, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1002
+    /* "libpetsc4py.pyx":1013
  *         CHKERR( MatSolve(mat,b,x) )
  *         CHKERR( VecAXPY(x,1.0,y)  )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11443,9 +11803,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":1010
+ *     FunctionBegin(b"MatSolveAdd_Python")
+ *     cdef solveAdd = PyMat(mat).solveAdd
+ *     if solveAdd is None:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSolve(mat,b,x) )
+ *         CHKERR( VecAXPY(x,1.0,y)  )
+ */
   }
 
-  /* "libpetsc4py.pyx":1003
+  /* "libpetsc4py.pyx":1014
  *         CHKERR( VecAXPY(x,1.0,y)  )
  *         return FunctionEnd()
  *     if solveAdd is None: return UNSUPPORTED(b"solveAdd")             # <<<<<<<<<<<<<<
@@ -11455,24 +11823,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   __pyx_t_4 = (__pyx_v_solveAdd == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_solveAdd);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"solveAdd"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1004
+  /* "libpetsc4py.pyx":1015
  *         return FunctionEnd()
  *     if solveAdd is None: return UNSUPPORTED(b"solveAdd")
  *     solveAdd(Mat_(mat), Vec_(b), Vec_(y), Vec_(x))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1015, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1015, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1015, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1015, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_solveAdd);
   __pyx_t_9 = __pyx_v_solveAdd; __pyx_t_10 = NULL;
@@ -11487,7 +11855,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
       __pyx_t_11 = 1;
     }
   }
-  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1015, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   if (__pyx_t_10) {
     __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -11504,13 +11872,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   __pyx_t_6 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1015, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1005
+  /* "libpetsc4py.pyx":1016
  *     if solveAdd is None: return UNSUPPORTED(b"solveAdd")
  *     solveAdd(Mat_(mat), Vec_(b), Vec_(y), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11520,7 +11888,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":990
+  /* "libpetsc4py.pyx":1001
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveAdd_Python(             # <<<<<<<<<<<<<<
@@ -11549,7 +11917,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1007
+/* "libpetsc4py.pyx":1018
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveTransposeAdd_Python(             # <<<<<<<<<<<<<<
@@ -11573,39 +11941,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   PyObject *__pyx_t_10 = NULL;
   Py_ssize_t __pyx_t_11;
   PyObject *__pyx_t_12 = 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("MatSolveTransposeAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":1014
+  /* "libpetsc4py.pyx":1025
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveTransposeAdd_Python")             # <<<<<<<<<<<<<<
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
  *     if solveTransposeAdd is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSolveTransposeAdd_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSolveTransposeAdd_Python"));
 
-  /* "libpetsc4py.pyx":1015
+  /* "libpetsc4py.pyx":1026
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveTransposeAdd_Python")
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd             # <<<<<<<<<<<<<<
  *     if solveTransposeAdd is not None:
  *         CHKERR( MatSolveTranspose(mat,b,x) )
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1015; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1026, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveTransposeAdd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1015; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveTransposeAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1026, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_solveTransposeAdd = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1016
+  /* "libpetsc4py.pyx":1027
  *     FunctionBegin(b"MatSolveTransposeAdd_Python")
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
  *     if solveTransposeAdd is not None:             # <<<<<<<<<<<<<<
@@ -11616,25 +11981,25 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1017
+    /* "libpetsc4py.pyx":1028
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
  *     if solveTransposeAdd is not None:
  *         CHKERR( MatSolveTranspose(mat,b,x) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecAXPY(x,1.0,y)           )
  *         return FunctionEnd()
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatSolveTranspose(__pyx_v_mat, __pyx_v_b, __pyx_v_x)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatSolveTranspose(__pyx_v_mat, __pyx_v_b, __pyx_v_x)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1028, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1018
+    /* "libpetsc4py.pyx":1029
  *     if solveTransposeAdd is not None:
  *         CHKERR( MatSolveTranspose(mat,b,x) )
  *         CHKERR( VecAXPY(x,1.0,y)           )             # <<<<<<<<<<<<<<
  *         return FunctionEnd()
  *     if solveTransposeAdd is None: return UNSUPPORTED(b"solveTransposeAdd")
  */
-    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_x, 1.0, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1018; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_x, 1.0, __pyx_v_y)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1029, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1019
+    /* "libpetsc4py.pyx":1030
  *         CHKERR( MatSolveTranspose(mat,b,x) )
  *         CHKERR( VecAXPY(x,1.0,y)           )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11643,9 +12008,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":1027
+ *     FunctionBegin(b"MatSolveTransposeAdd_Python")
+ *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
+ *     if solveTransposeAdd is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSolveTranspose(mat,b,x) )
+ *         CHKERR( VecAXPY(x,1.0,y)           )
+ */
   }
 
-  /* "libpetsc4py.pyx":1020
+  /* "libpetsc4py.pyx":1031
  *         CHKERR( VecAXPY(x,1.0,y)           )
  *         return FunctionEnd()
  *     if solveTransposeAdd is None: return UNSUPPORTED(b"solveTransposeAdd")             # <<<<<<<<<<<<<<
@@ -11655,24 +12028,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   __pyx_t_4 = (__pyx_v_solveTransposeAdd == Py_None);
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_solveTransposeAdd);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"solveTransposeAdd"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1021
+  /* "libpetsc4py.pyx":1032
  *         return FunctionEnd()
  *     if solveTransposeAdd is None: return UNSUPPORTED(b"solveTransposeAdd")
  *     solveTransposeAdd(Mat_(mat), Vec_(b), Vec_(y), Vec_(x))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_solveTransposeAdd);
   __pyx_t_9 = __pyx_v_solveTransposeAdd; __pyx_t_10 = NULL;
@@ -11687,7 +12060,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
       __pyx_t_11 = 1;
     }
   }
-  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   if (__pyx_t_10) {
     __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -11704,13 +12077,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   __pyx_t_6 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1022
+  /* "libpetsc4py.pyx":1033
  *     if solveTransposeAdd is None: return UNSUPPORTED(b"solveTransposeAdd")
  *     solveTransposeAdd(Mat_(mat), Vec_(b), Vec_(y), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11720,7 +12093,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1007
+  /* "libpetsc4py.pyx":1018
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveTransposeAdd_Python(             # <<<<<<<<<<<<<<
@@ -11749,7 +12122,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1024
+/* "libpetsc4py.pyx":1035
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSOR_Python(             # <<<<<<<<<<<<<<
@@ -11778,39 +12151,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
   PyObject *__pyx_t_15 = NULL;
   Py_ssize_t __pyx_t_16;
   PyObject *__pyx_t_17 = 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("MatSOR_Python", 0);
 
-  /* "libpetsc4py.pyx":1035
+  /* "libpetsc4py.pyx":1046
  *     )\
  *     except IERR with gil:
  *     FunctionBegin(b"MatSOR_Python")             # <<<<<<<<<<<<<<
  *     cdef SOR = PyMat(mat).SOR
  *     if SOR is None: return UNSUPPORTED(b"SOR")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSOR_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSOR_Python"));
 
-  /* "libpetsc4py.pyx":1036
+  /* "libpetsc4py.pyx":1047
  *     except IERR with gil:
  *     FunctionBegin(b"MatSOR_Python")
  *     cdef SOR = PyMat(mat).SOR             # <<<<<<<<<<<<<<
  *     if SOR is None: return UNSUPPORTED(b"SOR")
  *     SOR(Mat_(mat), Vec_(b), asReal(omega), asInt(sortype), asReal(shift), asInt(its), asInt(lits), Vec_(x))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SOR); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SOR); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1047, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_SOR = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1037
+  /* "libpetsc4py.pyx":1048
  *     FunctionBegin(b"MatSOR_Python")
  *     cdef SOR = PyMat(mat).SOR
  *     if SOR is None: return UNSUPPORTED(b"SOR")             # <<<<<<<<<<<<<<
@@ -11820,52 +12190,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
   __pyx_t_3 = (__pyx_v_SOR == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_SOR);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"SOR"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1038
+  /* "libpetsc4py.pyx":1049
  *     cdef SOR = PyMat(mat).SOR
  *     if SOR is None: return UNSUPPORTED(b"SOR")
  *     SOR(Mat_(mat), Vec_(b), asReal(omega), asInt(sortype), asReal(shift), asInt(its), asInt(lits), Vec_(x))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_omega); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_omega); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __pyx_f_11libpetsc4py_asReal(__pyx_t_6); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_11libpetsc4py_asReal(__pyx_t_6); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_sortype); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(__pyx_v_sortype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_8); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_8); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_10 = PyFloat_FromDouble(__pyx_v_shift); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyFloat_FromDouble(__pyx_v_shift); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
-  __pyx_t_7 = __pyx_f_11libpetsc4py_asReal(__pyx_t_10); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_11libpetsc4py_asReal(__pyx_t_10); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-  __pyx_t_10 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
-  __pyx_t_11 = __Pyx_PyInt_From_PetscInt(__pyx_v_its); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = __Pyx_PyInt_From_PetscInt(__pyx_v_its); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_11); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_11); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-  __pyx_t_11 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_12 = __Pyx_PyInt_From_PetscInt(__pyx_v_lits); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = __Pyx_PyInt_From_PetscInt(__pyx_v_lits); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
-  __pyx_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_12); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_12); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-  __pyx_t_12 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
-  __pyx_t_13 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_13 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_13);
   __Pyx_INCREF(__pyx_v_SOR);
   __pyx_t_14 = __pyx_v_SOR; __pyx_t_15 = NULL;
@@ -11880,7 +12250,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
       __pyx_t_16 = 1;
     }
   }
-  __pyx_t_17 = PyTuple_New(8+__pyx_t_16); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_17 = PyTuple_New(8+__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_17);
   if (__pyx_t_15) {
     __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_15); __pyx_t_15 = NULL;
@@ -11909,13 +12279,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
   __pyx_t_11 = 0;
   __pyx_t_12 = 0;
   __pyx_t_13 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_17, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_17, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1049, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1039
+  /* "libpetsc4py.pyx":1050
  *     if SOR is None: return UNSUPPORTED(b"SOR")
  *     SOR(Mat_(mat), Vec_(b), asReal(omega), asInt(sortype), asReal(shift), asInt(its), asInt(lits), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11925,7 +12295,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1024
+  /* "libpetsc4py.pyx":1035
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSOR_Python(             # <<<<<<<<<<<<<<
@@ -11958,7 +12328,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1041
+/* "libpetsc4py.pyx":1052
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetDiagonal_Python(             # <<<<<<<<<<<<<<
@@ -11979,39 +12349,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
   PyObject *__pyx_t_7 = NULL;
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = 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("MatGetDiagonal_Python", 0);
 
-  /* "libpetsc4py.pyx":1046
+  /* "libpetsc4py.pyx":1057
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatGetDiagonal_Python")             # <<<<<<<<<<<<<<
  *     cdef getDiagonal = PyMat(mat).getDiagonal
  *     if getDiagonal is None: return UNSUPPORTED(b"getDiagonal")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatGetDiagonal_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatGetDiagonal_Python"));
 
-  /* "libpetsc4py.pyx":1047
+  /* "libpetsc4py.pyx":1058
  *     except IERR with gil:
  *     FunctionBegin(b"MatGetDiagonal_Python")
  *     cdef getDiagonal = PyMat(mat).getDiagonal             # <<<<<<<<<<<<<<
  *     if getDiagonal is None: return UNSUPPORTED(b"getDiagonal")
  *     getDiagonal(Mat_(mat), Vec_(v))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getDiagonal); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getDiagonal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1058, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_getDiagonal = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1048
+  /* "libpetsc4py.pyx":1059
  *     FunctionBegin(b"MatGetDiagonal_Python")
  *     cdef getDiagonal = PyMat(mat).getDiagonal
  *     if getDiagonal is None: return UNSUPPORTED(b"getDiagonal")             # <<<<<<<<<<<<<<
@@ -12021,20 +12388,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
   __pyx_t_3 = (__pyx_v_getDiagonal == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_getDiagonal);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"getDiagonal"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1049
+  /* "libpetsc4py.pyx":1060
  *     cdef getDiagonal = PyMat(mat).getDiagonal
  *     if getDiagonal is None: return UNSUPPORTED(b"getDiagonal")
  *     getDiagonal(Mat_(mat), Vec_(v))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1060, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_getDiagonal);
   __pyx_t_6 = __pyx_v_getDiagonal; __pyx_t_7 = NULL;
@@ -12049,7 +12416,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
       __pyx_t_8 = 1;
     }
   }
-  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1060, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__pyx_t_7) {
     __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -12060,13 +12427,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
   PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1060, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1050
+  /* "libpetsc4py.pyx":1061
  *     if getDiagonal is None: return UNSUPPORTED(b"getDiagonal")
  *     getDiagonal(Mat_(mat), Vec_(v))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12076,7 +12443,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1041
+  /* "libpetsc4py.pyx":1052
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetDiagonal_Python(             # <<<<<<<<<<<<<<
@@ -12103,7 +12470,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1052
+/* "libpetsc4py.pyx":1063
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetDiagonal_Python(             # <<<<<<<<<<<<<<
@@ -12126,39 +12493,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("MatSetDiagonal_Python", 0);
 
-  /* "libpetsc4py.pyx":1058
+  /* "libpetsc4py.pyx":1069
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetDiagonal_Python")             # <<<<<<<<<<<<<<
  *     cdef setDiagonal = PyMat(mat).setDiagonal
  *     cdef bint addv = True if im == ADD_VALUES else False
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatSetDiagonal_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSetDiagonal_Python"));
 
-  /* "libpetsc4py.pyx":1059
+  /* "libpetsc4py.pyx":1070
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetDiagonal_Python")
  *     cdef setDiagonal = PyMat(mat).setDiagonal             # <<<<<<<<<<<<<<
  *     cdef bint addv = True if im == ADD_VALUES else False
  *     if setDiagonal is None: return UNSUPPORTED(b"setDiagonal")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1059; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1070, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setDiagonal); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1059; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setDiagonal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1070, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setDiagonal = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1060
+  /* "libpetsc4py.pyx":1071
  *     FunctionBegin(b"MatSetDiagonal_Python")
  *     cdef setDiagonal = PyMat(mat).setDiagonal
  *     cdef bint addv = True if im == ADD_VALUES else False             # <<<<<<<<<<<<<<
@@ -12172,7 +12536,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   }
   __pyx_v_addv = __pyx_t_3;
 
-  /* "libpetsc4py.pyx":1061
+  /* "libpetsc4py.pyx":1072
  *     cdef setDiagonal = PyMat(mat).setDiagonal
  *     cdef bint addv = True if im == ADD_VALUES else False
  *     if setDiagonal is None: return UNSUPPORTED(b"setDiagonal")             # <<<<<<<<<<<<<<
@@ -12182,22 +12546,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   __pyx_t_3 = (__pyx_v_setDiagonal == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_setDiagonal);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"setDiagonal"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1062
+  /* "libpetsc4py.pyx":1073
  *     cdef bint addv = True if im == ADD_VALUES else False
  *     if setDiagonal is None: return UNSUPPORTED(b"setDiagonal")
  *     setDiagonal(Mat_(mat), Vec_(v), addv)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1062; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1073, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1062; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1073, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_addv); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1062; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_addv); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1073, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_setDiagonal);
   __pyx_t_7 = __pyx_v_setDiagonal; __pyx_t_8 = NULL;
@@ -12212,7 +12576,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1062; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1073, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -12226,13 +12590,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1062; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1073, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1063
+  /* "libpetsc4py.pyx":1074
  *     if setDiagonal is None: return UNSUPPORTED(b"setDiagonal")
  *     setDiagonal(Mat_(mat), Vec_(v), addv)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12242,7 +12606,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1052
+  /* "libpetsc4py.pyx":1063
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetDiagonal_Python(             # <<<<<<<<<<<<<<
@@ -12270,7 +12634,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1065
+/* "libpetsc4py.pyx":1076
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDiagonalScale_Python(             # <<<<<<<<<<<<<<
@@ -12292,39 +12656,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("MatDiagonalScale_Python", 0);
 
-  /* "libpetsc4py.pyx":1071
+  /* "libpetsc4py.pyx":1082
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatDiagonalScale_Python")             # <<<<<<<<<<<<<<
  *     cdef diagonalScale = PyMat(mat).diagonalScale
  *     if diagonalScale is None: return UNSUPPORTED(b"diagonalScale")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatDiagonalScale_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatDiagonalScale_Python"));
 
-  /* "libpetsc4py.pyx":1072
+  /* "libpetsc4py.pyx":1083
  *     except IERR with gil:
  *     FunctionBegin(b"MatDiagonalScale_Python")
  *     cdef diagonalScale = PyMat(mat).diagonalScale             # <<<<<<<<<<<<<<
  *     if diagonalScale is None: return UNSUPPORTED(b"diagonalScale")
  *     diagonalScale(Mat_(mat), Vec_(l), Vec_(r))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1072; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1083, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_diagonalScale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1072; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_diagonalScale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1083, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_diagonalScale = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1073
+  /* "libpetsc4py.pyx":1084
  *     FunctionBegin(b"MatDiagonalScale_Python")
  *     cdef diagonalScale = PyMat(mat).diagonalScale
  *     if diagonalScale is None: return UNSUPPORTED(b"diagonalScale")             # <<<<<<<<<<<<<<
@@ -12334,22 +12695,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
   __pyx_t_3 = (__pyx_v_diagonalScale == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_diagonalScale);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"diagonalScale"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1074
+  /* "libpetsc4py.pyx":1085
  *     cdef diagonalScale = PyMat(mat).diagonalScale
  *     if diagonalScale is None: return UNSUPPORTED(b"diagonalScale")
  *     diagonalScale(Mat_(mat), Vec_(l), Vec_(r))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1074; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_l)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1074; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_l)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_r)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1074; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_r)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_diagonalScale);
   __pyx_t_7 = __pyx_v_diagonalScale; __pyx_t_8 = NULL;
@@ -12364,7 +12725,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1074; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -12378,13 +12739,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1074; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1075
+  /* "libpetsc4py.pyx":1086
  *     if diagonalScale is None: return UNSUPPORTED(b"diagonalScale")
  *     diagonalScale(Mat_(mat), Vec_(l), Vec_(r))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12394,7 +12755,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1065
+  /* "libpetsc4py.pyx":1076
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDiagonalScale_Python(             # <<<<<<<<<<<<<<
@@ -12422,7 +12783,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1077
+/* "libpetsc4py.pyx":1088
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatNorm_Python(             # <<<<<<<<<<<<<<
@@ -12445,39 +12806,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   PetscReal __pyx_t_10;
-  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("MatNorm_Python", 0);
 
-  /* "libpetsc4py.pyx":1083
+  /* "libpetsc4py.pyx":1094
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatNorm_Python")             # <<<<<<<<<<<<<<
  *     cdef norm = PyMat(mat).norm
  *     if norm is None: return UNSUPPORTED(b"norm")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatNorm_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatNorm_Python"));
 
-  /* "libpetsc4py.pyx":1084
+  /* "libpetsc4py.pyx":1095
  *     except IERR with gil:
  *     FunctionBegin(b"MatNorm_Python")
  *     cdef norm = PyMat(mat).norm             # <<<<<<<<<<<<<<
  *     if norm is None: return UNSUPPORTED(b"norm")
  *     retval = norm(Mat_(mat), ntype)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1095, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_norm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_norm); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1095, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_norm = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1085
+  /* "libpetsc4py.pyx":1096
  *     FunctionBegin(b"MatNorm_Python")
  *     cdef norm = PyMat(mat).norm
  *     if norm is None: return UNSUPPORTED(b"norm")             # <<<<<<<<<<<<<<
@@ -12487,20 +12845,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
   __pyx_t_3 = (__pyx_v_norm == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_norm);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"norm"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1086
+  /* "libpetsc4py.pyx":1097
  *     cdef norm = PyMat(mat).norm
  *     if norm is None: return UNSUPPORTED(b"norm")
  *     retval = norm(Mat_(mat), ntype)             # <<<<<<<<<<<<<<
  *     nrm[0] = <PetscReal>retval
  *     return FunctionEnd()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1097, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_ntype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_NormType(__pyx_v_ntype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1097, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_norm);
   __pyx_t_6 = __pyx_v_norm; __pyx_t_7 = NULL;
@@ -12515,7 +12873,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
       __pyx_t_8 = 1;
     }
   }
-  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1097, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__pyx_t_7) {
     __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -12526,24 +12884,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
   PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1097, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_v_retval = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1087
+  /* "libpetsc4py.pyx":1098
  *     if norm is None: return UNSUPPORTED(b"norm")
  *     retval = norm(Mat_(mat), ntype)
  *     nrm[0] = <PetscReal>retval             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_retval); if (unlikely((__pyx_t_10 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_retval); if (unlikely((__pyx_t_10 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(0, 1098, __pyx_L1_error)
   (__pyx_v_nrm[0]) = ((PetscReal)__pyx_t_10);
 
-  /* "libpetsc4py.pyx":1088
+  /* "libpetsc4py.pyx":1099
  *     retval = norm(Mat_(mat), ntype)
  *     nrm[0] = <PetscReal>retval
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12553,7 +12911,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1077
+  /* "libpetsc4py.pyx":1088
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatNorm_Python(             # <<<<<<<<<<<<<<
@@ -12581,7 +12939,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1090
+/* "libpetsc4py.pyx":1101
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatRealPart_Python(             # <<<<<<<<<<<<<<
@@ -12600,39 +12958,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatRealPart_Python", 0);
 
-  /* "libpetsc4py.pyx":1094
+  /* "libpetsc4py.pyx":1105
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatRealPart_Python")             # <<<<<<<<<<<<<<
  *     cdef realPart = PyMat(mat).realPart
  *     if realPart is None: return UNSUPPORTED(b"realPart")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatRealPart_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatRealPart_Python"));
 
-  /* "libpetsc4py.pyx":1095
+  /* "libpetsc4py.pyx":1106
  *     except IERR with gil:
  *     FunctionBegin(b"MatRealPart_Python")
  *     cdef realPart = PyMat(mat).realPart             # <<<<<<<<<<<<<<
  *     if realPart is None: return UNSUPPORTED(b"realPart")
  *     realPart(Mat_(mat))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_realPart); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_realPart); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_realPart = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1096
+  /* "libpetsc4py.pyx":1107
  *     FunctionBegin(b"MatRealPart_Python")
  *     cdef realPart = PyMat(mat).realPart
  *     if realPart is None: return UNSUPPORTED(b"realPart")             # <<<<<<<<<<<<<<
@@ -12642,18 +12997,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
   __pyx_t_3 = (__pyx_v_realPart == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_realPart);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"realPart"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1097
+  /* "libpetsc4py.pyx":1108
  *     cdef realPart = PyMat(mat).realPart
  *     if realPart is None: return UNSUPPORTED(b"realPart")
  *     realPart(Mat_(mat))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_realPart);
   __pyx_t_5 = __pyx_v_realPart; __pyx_t_6 = NULL;
@@ -12667,24 +13022,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
     }
   }
   if (!__pyx_t_6) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1108, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1108, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1108, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1098
+  /* "libpetsc4py.pyx":1109
  *     if realPart is None: return UNSUPPORTED(b"realPart")
  *     realPart(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12694,7 +13049,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1090
+  /* "libpetsc4py.pyx":1101
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatRealPart_Python(             # <<<<<<<<<<<<<<
@@ -12720,7 +13075,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1100
+/* "libpetsc4py.pyx":1111
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatImagPart_Python(             # <<<<<<<<<<<<<<
@@ -12739,39 +13094,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatImagPart_Python", 0);
 
-  /* "libpetsc4py.pyx":1104
+  /* "libpetsc4py.pyx":1115
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatImagPart_Python")             # <<<<<<<<<<<<<<
  *     cdef imagPart = PyMat(mat).imagPart
  *     if imagPart is None: return UNSUPPORTED(b"imagPart")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatImagPart_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatImagPart_Python"));
 
-  /* "libpetsc4py.pyx":1105
+  /* "libpetsc4py.pyx":1116
  *     except IERR with gil:
  *     FunctionBegin(b"MatImagPart_Python")
  *     cdef imagPart = PyMat(mat).imagPart             # <<<<<<<<<<<<<<
  *     if imagPart is None: return UNSUPPORTED(b"imagPart")
  *     imagPart(Mat_(mat))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_imagPart); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_imagPart); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_imagPart = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1106
+  /* "libpetsc4py.pyx":1117
  *     FunctionBegin(b"MatImagPart_Python")
  *     cdef imagPart = PyMat(mat).imagPart
  *     if imagPart is None: return UNSUPPORTED(b"imagPart")             # <<<<<<<<<<<<<<
@@ -12781,18 +13133,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
   __pyx_t_3 = (__pyx_v_imagPart == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_imagPart);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"imagPart"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1107
+  /* "libpetsc4py.pyx":1118
  *     cdef imagPart = PyMat(mat).imagPart
  *     if imagPart is None: return UNSUPPORTED(b"imagPart")
  *     imagPart(Mat_(mat))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_imagPart);
   __pyx_t_5 = __pyx_v_imagPart; __pyx_t_6 = NULL;
@@ -12806,24 +13158,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
     }
   }
   if (!__pyx_t_6) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1118, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1118, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1108
+  /* "libpetsc4py.pyx":1119
  *     if imagPart is None: return UNSUPPORTED(b"imagPart")
  *     imagPart(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12833,7 +13185,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1100
+  /* "libpetsc4py.pyx":1111
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatImagPart_Python(             # <<<<<<<<<<<<<<
@@ -12859,7 +13211,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1110
+/* "libpetsc4py.pyx":1121
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatConjugate_Python(             # <<<<<<<<<<<<<<
@@ -12878,39 +13230,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatConjugate_Python", 0);
 
-  /* "libpetsc4py.pyx":1114
+  /* "libpetsc4py.pyx":1125
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatConjugate_Python")             # <<<<<<<<<<<<<<
  *     cdef conjugate = PyMat(mat).conjugate
  *     if conjugate is None: return UNSUPPORTED(b"conjugate")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_MatConjugate_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatConjugate_Python"));
 
-  /* "libpetsc4py.pyx":1115
+  /* "libpetsc4py.pyx":1126
  *     except IERR with gil:
  *     FunctionBegin(b"MatConjugate_Python")
  *     cdef conjugate = PyMat(mat).conjugate             # <<<<<<<<<<<<<<
  *     if conjugate is None: return UNSUPPORTED(b"conjugate")
  *     conjugate(Mat_(mat))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_conjugate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_conjugate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_conjugate = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1116
+  /* "libpetsc4py.pyx":1127
  *     FunctionBegin(b"MatConjugate_Python")
  *     cdef conjugate = PyMat(mat).conjugate
  *     if conjugate is None: return UNSUPPORTED(b"conjugate")             # <<<<<<<<<<<<<<
@@ -12920,18 +13269,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
   __pyx_t_3 = (__pyx_v_conjugate == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_conjugate);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"conjugate"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1117
+  /* "libpetsc4py.pyx":1128
  *     cdef conjugate = PyMat(mat).conjugate
  *     if conjugate is None: return UNSUPPORTED(b"conjugate")
  *     conjugate(Mat_(mat))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1128, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_conjugate);
   __pyx_t_5 = __pyx_v_conjugate; __pyx_t_6 = NULL;
@@ -12945,24 +13294,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
     }
   }
   if (!__pyx_t_6) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1128, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1128, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1118
+  /* "libpetsc4py.pyx":1129
  *     if conjugate is None: return UNSUPPORTED(b"conjugate")
  *     conjugate(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12972,7 +13321,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1110
+  /* "libpetsc4py.pyx":1121
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatConjugate_Python(             # <<<<<<<<<<<<<<
@@ -12998,7 +13347,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1142
+/* "libpetsc4py.pyx":1153
  * @cython.internal
  * cdef class _PyPC(_PyObj): pass
  * cdef inline _PyPC PyPC(PetscPC pc):             # <<<<<<<<<<<<<<
@@ -13012,12 +13361,9 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
   int __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("PyPC", 0);
 
-  /* "libpetsc4py.pyx":1143
+  /* "libpetsc4py.pyx":1154
  * cdef class _PyPC(_PyObj): pass
  * cdef inline _PyPC PyPC(PetscPC pc):
  *     if pc != NULL and pc.data != NULL:             # <<<<<<<<<<<<<<
@@ -13035,7 +13381,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":1144
+    /* "libpetsc4py.pyx":1155
  * cdef inline _PyPC PyPC(PetscPC pc):
  *     if pc != NULL and pc.data != NULL:
  *         return <_PyPC>pc.data             # <<<<<<<<<<<<<<
@@ -13046,26 +13392,34 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
     __Pyx_INCREF(((PyObject *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_v_pc->data)));
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_v_pc->data);
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":1154
+ * cdef class _PyPC(_PyObj): pass
+ * cdef inline _PyPC PyPC(PetscPC pc):
+ *     if pc != NULL and pc.data != NULL:             # <<<<<<<<<<<<<<
+ *         return <_PyPC>pc.data
+ *     else:
+ */
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1146
+  /* "libpetsc4py.pyx":1157
  *         return <_PyPC>pc.data
  *     else:
  *         return _PyPC.__new__(_PyPC)             # <<<<<<<<<<<<<<
  * 
  * cdef public PetscErrorCode PCPythonGetContext(PetscPC pc, void **ctx) \
  */
+  /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PyPC(((PyTypeObject *)((PyObject*)__pyx_ptype_11libpetsc4py__PyPC)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PyPC(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PyPC), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1157, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyPC)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyPC)))) __PYX_ERR(0, 1157, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1142
+  /* "libpetsc4py.pyx":1153
  * @cython.internal
  * cdef class _PyPC(_PyObj): pass
  * cdef inline _PyPC PyPC(PetscPC pc):             # <<<<<<<<<<<<<<
@@ -13084,7 +13438,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1148
+/* "libpetsc4py.pyx":1159
  *         return _PyPC.__new__(_PyPC)
  * 
  * cdef public PetscErrorCode PCPythonGetContext(PetscPC pc, void **ctx) \             # <<<<<<<<<<<<<<
@@ -13097,33 +13451,30 @@ PetscErrorCode PCPythonGetContext(PC __pyx_v_pc, void **__pyx_v_ctx) {
   __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("PCPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":1150
+  /* "libpetsc4py.pyx":1161
  * cdef public PetscErrorCode PCPythonGetContext(PetscPC pc, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"PCPythonGetContext")             # <<<<<<<<<<<<<<
  *     PyPC(pc).getcontext(ctx)
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCPythonGetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPythonGetContext"));
 
-  /* "libpetsc4py.pyx":1151
+  /* "libpetsc4py.pyx":1162
  *     except IERR:
  *     FunctionBegin(b"PCPythonGetContext")
  *     PyPC(pc).getcontext(ctx)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyPC *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyPC *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1162, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1152
+  /* "libpetsc4py.pyx":1163
  *     FunctionBegin(b"PCPythonGetContext")
  *     PyPC(pc).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13133,7 +13484,7 @@ PetscErrorCode PCPythonGetContext(PC __pyx_v_pc, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1148
+  /* "libpetsc4py.pyx":1159
  *         return _PyPC.__new__(_PyPC)
  * 
  * cdef public PetscErrorCode PCPythonGetContext(PetscPC pc, void **ctx) \             # <<<<<<<<<<<<<<
@@ -13151,7 +13502,7 @@ PetscErrorCode PCPythonGetContext(PC __pyx_v_pc, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1154
+/* "libpetsc4py.pyx":1165
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode PCPythonSetContext(PetscPC pc, void *ctx) \             # <<<<<<<<<<<<<<
@@ -13165,36 +13516,33 @@ PetscErrorCode PCPythonSetContext(PC __pyx_v_pc, void *__pyx_v_ctx) {
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PCPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":1156
+  /* "libpetsc4py.pyx":1167
  * cdef public PetscErrorCode PCPythonSetContext(PetscPC pc, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"PCPythonSetContext")             # <<<<<<<<<<<<<<
  *     PyPC(pc).setcontext(ctx, PC_(pc))
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCPythonSetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPythonSetContext"));
 
-  /* "libpetsc4py.pyx":1157
+  /* "libpetsc4py.pyx":1168
  *     except IERR:
  *     FunctionBegin(b"PCPythonSetContext")
  *     PyPC(pc).setcontext(ctx, PC_(pc))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PyPC *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PyPC *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1168, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1158
+  /* "libpetsc4py.pyx":1169
  *     FunctionBegin(b"PCPythonSetContext")
  *     PyPC(pc).setcontext(ctx, PC_(pc))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13204,7 +13552,7 @@ PetscErrorCode PCPythonSetContext(PC __pyx_v_pc, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1154
+  /* "libpetsc4py.pyx":1165
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode PCPythonSetContext(PetscPC pc, void *ctx) \             # <<<<<<<<<<<<<<
@@ -13223,7 +13571,7 @@ PetscErrorCode PCPythonSetContext(PC __pyx_v_pc, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1160
+/* "libpetsc4py.pyx":1171
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPythonSetType_PYTHON(PetscPC pc, char name[]) \             # <<<<<<<<<<<<<<
@@ -13239,24 +13587,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
   PyObject *__pyx_t_2 = NULL;
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
-  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("PCPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":1162
+  /* "libpetsc4py.pyx":1173
  * cdef PetscErrorCode PCPythonSetType_PYTHON(PetscPC pc, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCPythonSetType_PYTHON);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":1163
+  /* "libpetsc4py.pyx":1174
  *     except IERR with gil:
  *     FunctionBegin(b"PCPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -13269,40 +13614,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1164
+  /* "libpetsc4py.pyx":1175
  *     FunctionBegin(b"PCPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)             # <<<<<<<<<<<<<<
  *     PCPythonSetContext(pc, <void*>ctx)
  *     PyPC(pc).setname(name)
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1165
+  /* "libpetsc4py.pyx":1176
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  *     PCPythonSetContext(pc, <void*>ctx)             # <<<<<<<<<<<<<<
  *     PyPC(pc).setname(name)
  *     return FunctionEnd()
  */
-  __pyx_t_3 = PCPythonSetContext(__pyx_v_pc, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PCPythonSetContext(__pyx_v_pc, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1176, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1166
+  /* "libpetsc4py.pyx":1177
  *     cdef object ctx = createcontext(name)
  *     PCPythonSetContext(pc, <void*>ctx)
  *     PyPC(pc).setname(name)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PyPC *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PyPC *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1177, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1167
+  /* "libpetsc4py.pyx":1178
  *     PCPythonSetContext(pc, <void*>ctx)
  *     PyPC(pc).setname(name)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13312,7 +13657,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1160
+  /* "libpetsc4py.pyx":1171
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPythonSetType_PYTHON(PetscPC pc, char name[]) \             # <<<<<<<<<<<<<<
@@ -13334,7 +13679,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1169
+/* "libpetsc4py.pyx":1180
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCCreate_Python(             # <<<<<<<<<<<<<<
@@ -13350,24 +13695,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
   PCOps __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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":1173
+  /* "libpetsc4py.pyx":1184
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCCreate_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef PCOps ops          = pc.ops
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCCreate_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCCreate_Python"));
 
-  /* "libpetsc4py.pyx":1175
+  /* "libpetsc4py.pyx":1186
  *     FunctionBegin(b"PCCreate_Python")
  *     #
  *     cdef PCOps ops          = pc.ops             # <<<<<<<<<<<<<<
@@ -13377,7 +13719,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
   __pyx_t_1 = __pyx_v_pc->ops;
   __pyx_v_ops = __pyx_t_1;
 
-  /* "libpetsc4py.pyx":1176
+  /* "libpetsc4py.pyx":1187
  *     #
  *     cdef PCOps ops          = pc.ops
  *     ops.reset               = PCReset_Python             # <<<<<<<<<<<<<<
@@ -13386,7 +13728,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->reset = __pyx_f_11libpetsc4py_PCReset_Python;
 
-  /* "libpetsc4py.pyx":1177
+  /* "libpetsc4py.pyx":1188
  *     cdef PCOps ops          = pc.ops
  *     ops.reset               = PCReset_Python
  *     ops.destroy             = PCDestroy_Python             # <<<<<<<<<<<<<<
@@ -13395,7 +13737,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_PCDestroy_Python;
 
-  /* "libpetsc4py.pyx":1178
+  /* "libpetsc4py.pyx":1189
  *     ops.reset               = PCReset_Python
  *     ops.destroy             = PCDestroy_Python
  *     ops.setup               = PCSetUp_Python             # <<<<<<<<<<<<<<
@@ -13404,7 +13746,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_PCSetUp_Python;
 
-  /* "libpetsc4py.pyx":1179
+  /* "libpetsc4py.pyx":1190
  *     ops.destroy             = PCDestroy_Python
  *     ops.setup               = PCSetUp_Python
  *     ops.setfromoptions      = PCSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -13413,7 +13755,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_PCSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":1180
+  /* "libpetsc4py.pyx":1191
  *     ops.setup               = PCSetUp_Python
  *     ops.setfromoptions      = PCSetFromOptions_Python
  *     ops.view                = PCView_Python             # <<<<<<<<<<<<<<
@@ -13422,7 +13764,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_PCView_Python;
 
-  /* "libpetsc4py.pyx":1181
+  /* "libpetsc4py.pyx":1192
  *     ops.setfromoptions      = PCSetFromOptions_Python
  *     ops.view                = PCView_Python
  *     ops.presolve            = PCPreSolve_Python             # <<<<<<<<<<<<<<
@@ -13431,7 +13773,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->presolve = __pyx_f_11libpetsc4py_PCPreSolve_Python;
 
-  /* "libpetsc4py.pyx":1182
+  /* "libpetsc4py.pyx":1193
  *     ops.view                = PCView_Python
  *     ops.presolve            = PCPreSolve_Python
  *     ops.postsolve           = PCPostSolve_Python             # <<<<<<<<<<<<<<
@@ -13440,7 +13782,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->postsolve = __pyx_f_11libpetsc4py_PCPostSolve_Python;
 
-  /* "libpetsc4py.pyx":1183
+  /* "libpetsc4py.pyx":1194
  *     ops.presolve            = PCPreSolve_Python
  *     ops.postsolve           = PCPostSolve_Python
  *     ops.apply               = PCApply_Python             # <<<<<<<<<<<<<<
@@ -13449,7 +13791,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->apply = __pyx_f_11libpetsc4py_PCApply_Python;
 
-  /* "libpetsc4py.pyx":1184
+  /* "libpetsc4py.pyx":1195
  *     ops.postsolve           = PCPostSolve_Python
  *     ops.apply               = PCApply_Python
  *     ops.applytranspose      = PCApplyTranspose_Python             # <<<<<<<<<<<<<<
@@ -13458,7 +13800,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->applytranspose = __pyx_f_11libpetsc4py_PCApplyTranspose_Python;
 
-  /* "libpetsc4py.pyx":1185
+  /* "libpetsc4py.pyx":1196
  *     ops.apply               = PCApply_Python
  *     ops.applytranspose      = PCApplyTranspose_Python
  *     ops.applysymmetricleft  = PCApplySymmetricLeft_Python             # <<<<<<<<<<<<<<
@@ -13467,7 +13809,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->applysymmetricleft = __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python;
 
-  /* "libpetsc4py.pyx":1186
+  /* "libpetsc4py.pyx":1197
  *     ops.applytranspose      = PCApplyTranspose_Python
  *     ops.applysymmetricleft  = PCApplySymmetricLeft_Python
  *     ops.applysymmetricright = PCApplySymmetricRight_Python             # <<<<<<<<<<<<<<
@@ -13476,28 +13818,28 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->applysymmetricright = __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python;
 
-  /* "libpetsc4py.pyx":1188
+  /* "libpetsc4py.pyx":1199
  *     ops.applysymmetricright = PCApplySymmetricRight_Python
  *     #
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>pc, b"PCPythonSetType_C",
  *             <PetscVoidFunction>PCPythonSetType_PYTHON) )
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_pc), __pyx_k_PCPythonSetType_C, ((PetscVoidFunction)__pyx_f_11libpetsc4py_PCPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_pc), ((char *)"PCPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_PCPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1199, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1192
+  /* "libpetsc4py.pyx":1203
  *             <PetscVoidFunction>PCPythonSetType_PYTHON) )
  *     #
  *     cdef ctx = PyPC(NULL)             # <<<<<<<<<<<<<<
  *     pc.data = <void*> ctx
  *     Py_INCREF(<PyObject*>pc.data)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(NULL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1203, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1193
+  /* "libpetsc4py.pyx":1204
  *     #
  *     cdef ctx = PyPC(NULL)
  *     pc.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -13506,7 +13848,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_pc->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":1194
+  /* "libpetsc4py.pyx":1205
  *     cdef ctx = PyPC(NULL)
  *     pc.data = <void*> ctx
  *     Py_INCREF(<PyObject*>pc.data)             # <<<<<<<<<<<<<<
@@ -13515,7 +13857,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   Py_INCREF(((PyObject *)__pyx_v_pc->data));
 
-  /* "libpetsc4py.pyx":1195
+  /* "libpetsc4py.pyx":1206
  *     pc.data = <void*> ctx
  *     Py_INCREF(<PyObject*>pc.data)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13525,7 +13867,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1169
+  /* "libpetsc4py.pyx":1180
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCCreate_Python(             # <<<<<<<<<<<<<<
@@ -13547,7 +13889,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1197
+/* "libpetsc4py.pyx":1208
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCDestroy_Python(             # <<<<<<<<<<<<<<
@@ -13569,33 +13911,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = 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("PCDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":1201
+  /* "libpetsc4py.pyx":1212
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCDestroy_Python")             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectComposeFunction(
  *             <PetscObject>pc, b"PCPythonSetType_C",
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCDestroy_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCDestroy_Python"));
 
-  /* "libpetsc4py.pyx":1202
+  /* "libpetsc4py.pyx":1213
  *     except IERR with gil:
  *     FunctionBegin(b"PCDestroy_Python")
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>pc, b"PCPythonSetType_C",
  *             <PetscVoidFunction>NULL) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_pc), __pyx_k_PCPythonSetType_C, ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_pc), ((char *)"PCPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1213, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1206
+  /* "libpetsc4py.pyx":1217
  *             <PetscVoidFunction>NULL) )
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13608,7 +13947,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1207
+  /* "libpetsc4py.pyx":1218
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -13617,7 +13956,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":1208
+    /* "libpetsc4py.pyx":1219
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(pc)             # <<<<<<<<<<<<<<
@@ -13626,17 +13965,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_pc);
 
-    /* "libpetsc4py.pyx":1209
+    /* "libpetsc4py.pyx":1220
  *     try:
  *         addRef(pc)
  *         PCPythonSetContext(pc, NULL)             # <<<<<<<<<<<<<<
  *     finally:
  *         delRef(pc)
  */
-    __pyx_t_3 = PCPythonSetContext(__pyx_v_pc, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1209; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_3 = PCPythonSetContext(__pyx_v_pc, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1220, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":1211
+  /* "libpetsc4py.pyx":1222
  *         PCPythonSetContext(pc, NULL)
  *     finally:
  *         delRef(pc)             # <<<<<<<<<<<<<<
@@ -13647,7 +13986,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_pc);
 
-      /* "libpetsc4py.pyx":1212
+      /* "libpetsc4py.pyx":1223
  *     finally:
  *         delRef(pc)
  *         Py_DECREF(<PyObject*>pc.data)             # <<<<<<<<<<<<<<
@@ -13656,7 +13995,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
       Py_DECREF(((PyObject *)__pyx_v_pc->data));
 
-      /* "libpetsc4py.pyx":1213
+      /* "libpetsc4py.pyx":1224
  *         delRef(pc)
  *         Py_DECREF(<PyObject*>pc.data)
  *         pc.data = NULL             # <<<<<<<<<<<<<<
@@ -13667,8 +14006,10 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
       goto __pyx_L6;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L5_error:;
       __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
       __Pyx_XGOTREF(__pyx_t_6);
@@ -13680,7 +14021,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
       __pyx_t_1 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
       {
 
-        /* "libpetsc4py.pyx":1211
+        /* "libpetsc4py.pyx":1222
  *         PCPythonSetContext(pc, NULL)
  *     finally:
  *         delRef(pc)             # <<<<<<<<<<<<<<
@@ -13689,7 +14030,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_pc);
 
-        /* "libpetsc4py.pyx":1212
+        /* "libpetsc4py.pyx":1223
  *     finally:
  *         delRef(pc)
  *         Py_DECREF(<PyObject*>pc.data)             # <<<<<<<<<<<<<<
@@ -13698,7 +14039,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
         Py_DECREF(((PyObject *)__pyx_v_pc->data));
 
-        /* "libpetsc4py.pyx":1213
+        /* "libpetsc4py.pyx":1224
  *         delRef(pc)
  *         Py_DECREF(<PyObject*>pc.data)
  *         pc.data = NULL             # <<<<<<<<<<<<<<
@@ -13707,6 +14048,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
         __pyx_v_pc->data = NULL;
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
@@ -13724,7 +14066,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":1214
+  /* "libpetsc4py.pyx":1225
  *         Py_DECREF(<PyObject*>pc.data)
  *         pc.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13734,7 +14076,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1197
+  /* "libpetsc4py.pyx":1208
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCDestroy_Python(             # <<<<<<<<<<<<<<
@@ -13754,7 +14096,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1216
+/* "libpetsc4py.pyx":1227
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCSetUp_Python(             # <<<<<<<<<<<<<<
@@ -13763,7 +14105,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
 
 static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
-  char __pyx_v_name[2048];
+  char __pyx_v_name[0x800];
   PetscBool __pyx_v_found;
   PyObject *__pyx_v_setUp = 0;
   PyObject *__pyx_v_o = 0;
@@ -13780,56 +14122,53 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PCOps __pyx_t_10;
-  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("PCSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":1220
+  /* "libpetsc4py.pyx":1231
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCSetUp_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef char name[2048]
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCSetUp_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCSetUp_Python"));
 
-  /* "libpetsc4py.pyx":1223
+  /* "libpetsc4py.pyx":1234
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
  *     if PyPC(pc).self is None:
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1224
+  /* "libpetsc4py.pyx":1235
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyPC(pc).self is None:             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  *                 getPrefix(pc), b"-pc_python_type",
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = (((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_1)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1225
+    /* "libpetsc4py.pyx":1236
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyPC(pc).self is None:
- *         CHKERR( PetscOptionsGetString(             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(pc), b"-pc_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(__pyx_f_11libpetsc4py_getPrefix(__pyx_v_pc), __pyx_k_pc_python_type, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(NULL, __pyx_f_11libpetsc4py_getPrefix(__pyx_v_pc), ((char *)"-pc_python_type"), __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1236, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1228
+    /* "libpetsc4py.pyx":1239
  *                 getPrefix(pc), b"-pc_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -13846,63 +14185,83 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":1229
+      /* "libpetsc4py.pyx":1240
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:
  *             CHKERR( PCPythonSetType_PYTHON(pc,name) )             # <<<<<<<<<<<<<<
  *     if PyPC(pc).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(__pyx_v_pc, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L4;
+      __pyx_t_5 = __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(__pyx_v_pc, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1240, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1240, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":1239
+ *                 getPrefix(pc), b"-pc_python_type",
+ *                 name,sizeof(name),&found) )
+ *         if found and name[0]:             # <<<<<<<<<<<<<<
+ *             CHKERR( PCPythonSetType_PYTHON(pc,name) )
+ *     if PyPC(pc).self is None:
+ */
     }
-    __pyx_L4:;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1235
+ *     cdef char name[2048]
+ *     cdef PetscBool found = PETSC_FALSE
+ *     if PyPC(pc).self is None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,
+ *                 getPrefix(pc), b"-pc_python_type",
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1230
+  /* "libpetsc4py.pyx":1241
  *         if found and name[0]:
  *             CHKERR( PCPythonSetType_PYTHON(pc,name) )
  *     if PyPC(pc).self is None:             # <<<<<<<<<<<<<<
  *         return PetscSETERR(PETSC_ERR_USER,
  *             "Python context not set, call one of \n"
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = (((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_1)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":1231
+    /* "libpetsc4py.pyx":1242
  *             CHKERR( PCPythonSetType_PYTHON(pc,name) )
  *     if PyPC(pc).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
  *             "Python context not set, call one of \n"
  *             " * PCPythonSetType(pc,\"[package.]module.class\")\n"
  */
-    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, __pyx_k_Python_context_not_set_call_one_2);
+    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, ((char *)"Python context not set, call one of \n * PCPythonSetType(pc,\"[package.]module.class\")\n * PCSetFromOptions(pc) and pass option -pc_python_type [package.]module.class"));
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":1241
+ *         if found and name[0]:
+ *             CHKERR( PCPythonSetType_PYTHON(pc,name) )
+ *     if PyPC(pc).self is None:             # <<<<<<<<<<<<<<
+ *         return PetscSETERR(PETSC_ERR_USER,
+ *             "Python context not set, call one of \n"
+ */
   }
 
-  /* "libpetsc4py.pyx":1237
+  /* "libpetsc4py.pyx":1248
  *             "-pc_python_type [package.]module.class")
  *     #
  *     cdef setUp = PyPC(pc).setUp             # <<<<<<<<<<<<<<
  *     if setUp is not None:
  *         setUp(PC_(pc))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1248, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1248, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setUp = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":1238
+  /* "libpetsc4py.pyx":1249
  *     #
  *     cdef setUp = PyPC(pc).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -13913,14 +14272,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1239
+    /* "libpetsc4py.pyx":1250
  *     cdef setUp = PyPC(pc).setUp
  *     if setUp is not None:
  *         setUp(PC_(pc))             # <<<<<<<<<<<<<<
  *     #
  *     cdef o = PyPC(pc)
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1250, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
@@ -13934,39 +14293,45 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1250, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_6);
     } else {
-      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1250, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1250, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    goto __pyx_L8;
+
+    /* "libpetsc4py.pyx":1249
+ *     #
+ *     cdef setUp = PyPC(pc).setUp
+ *     if setUp is not None:             # <<<<<<<<<<<<<<
+ *         setUp(PC_(pc))
+ *     #
+ */
   }
-  __pyx_L8:;
 
-  /* "libpetsc4py.pyx":1241
+  /* "libpetsc4py.pyx":1252
  *         setUp(PC_(pc))
  *     #
  *     cdef o = PyPC(pc)             # <<<<<<<<<<<<<<
  *     cdef PCOps ops = pc.ops
  *     if o.applyTranspose is None:
  */
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1252, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_v_o = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":1242
+  /* "libpetsc4py.pyx":1253
  *     #
  *     cdef o = PyPC(pc)
  *     cdef PCOps ops = pc.ops             # <<<<<<<<<<<<<<
@@ -13976,21 +14341,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   __pyx_t_10 = __pyx_v_pc->ops;
   __pyx_v_ops = __pyx_t_10;
 
-  /* "libpetsc4py.pyx":1243
+  /* "libpetsc4py.pyx":1254
  *     cdef o = PyPC(pc)
  *     cdef PCOps ops = pc.ops
  *     if o.applyTranspose is None:             # <<<<<<<<<<<<<<
  *         ops.applytranspose = NULL
  *     if o.applySymmetricLeft is None:
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applyTranspose); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applyTranspose); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_3 = (__pyx_t_6 == Py_None);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":1244
+    /* "libpetsc4py.pyx":1255
  *     cdef PCOps ops = pc.ops
  *     if o.applyTranspose is None:
  *         ops.applytranspose = NULL             # <<<<<<<<<<<<<<
@@ -13998,25 +14363,31 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  *         ops.applysymmetricleft = NULL
  */
     __pyx_v_ops->applytranspose = NULL;
-    goto __pyx_L9;
+
+    /* "libpetsc4py.pyx":1254
+ *     cdef o = PyPC(pc)
+ *     cdef PCOps ops = pc.ops
+ *     if o.applyTranspose is None:             # <<<<<<<<<<<<<<
+ *         ops.applytranspose = NULL
+ *     if o.applySymmetricLeft is None:
+ */
   }
-  __pyx_L9:;
 
-  /* "libpetsc4py.pyx":1245
+  /* "libpetsc4py.pyx":1256
  *     if o.applyTranspose is None:
  *         ops.applytranspose = NULL
  *     if o.applySymmetricLeft is None:             # <<<<<<<<<<<<<<
  *         ops.applysymmetricleft = NULL
  *     if o.applySymmetricRight is None:
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applySymmetricLeft); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applySymmetricLeft); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_2 = (__pyx_t_6 == Py_None);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1246
+    /* "libpetsc4py.pyx":1257
  *         ops.applytranspose = NULL
  *     if o.applySymmetricLeft is None:
  *         ops.applysymmetricleft = NULL             # <<<<<<<<<<<<<<
@@ -14024,25 +14395,31 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  *         ops.applysymmetricright = NULL
  */
     __pyx_v_ops->applysymmetricleft = NULL;
-    goto __pyx_L10;
+
+    /* "libpetsc4py.pyx":1256
+ *     if o.applyTranspose is None:
+ *         ops.applytranspose = NULL
+ *     if o.applySymmetricLeft is None:             # <<<<<<<<<<<<<<
+ *         ops.applysymmetricleft = NULL
+ *     if o.applySymmetricRight is None:
+ */
   }
-  __pyx_L10:;
 
-  /* "libpetsc4py.pyx":1247
+  /* "libpetsc4py.pyx":1258
  *     if o.applySymmetricLeft is None:
  *         ops.applysymmetricleft = NULL
  *     if o.applySymmetricRight is None:             # <<<<<<<<<<<<<<
  *         ops.applysymmetricright = NULL
  *     #
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applySymmetricRight); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applySymmetricRight); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_3 = (__pyx_t_6 == Py_None);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":1248
+    /* "libpetsc4py.pyx":1259
  *         ops.applysymmetricleft = NULL
  *     if o.applySymmetricRight is None:
  *         ops.applysymmetricright = NULL             # <<<<<<<<<<<<<<
@@ -14050,11 +14427,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  *     return FunctionEnd()
  */
     __pyx_v_ops->applysymmetricright = NULL;
-    goto __pyx_L11;
+
+    /* "libpetsc4py.pyx":1258
+ *     if o.applySymmetricLeft is None:
+ *         ops.applysymmetricleft = NULL
+ *     if o.applySymmetricRight is None:             # <<<<<<<<<<<<<<
+ *         ops.applysymmetricright = NULL
+ *     #
+ */
   }
-  __pyx_L11:;
 
-  /* "libpetsc4py.pyx":1250
+  /* "libpetsc4py.pyx":1261
  *         ops.applysymmetricright = NULL
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14064,7 +14447,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1216
+  /* "libpetsc4py.pyx":1227
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCSetUp_Python(             # <<<<<<<<<<<<<<
@@ -14091,7 +14474,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1252
+/* "libpetsc4py.pyx":1263
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCReset_Python(             # <<<<<<<<<<<<<<
@@ -14110,15 +14493,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCReset_Python", 0);
 
-  /* "libpetsc4py.pyx":1256
+  /* "libpetsc4py.pyx":1267
  *     ) \
  *     except IERR with gil:
  *     if getRef(pc) == 0: return 0             # <<<<<<<<<<<<<<
@@ -14131,31 +14511,31 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1257
+  /* "libpetsc4py.pyx":1268
  *     except IERR with gil:
  *     if getRef(pc) == 0: return 0
  *     FunctionBegin(b"PCReset_Python")             # <<<<<<<<<<<<<<
  *     cdef reset = PyPC(pc).reset
  *     if reset is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCReset_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCReset_Python"));
 
-  /* "libpetsc4py.pyx":1258
+  /* "libpetsc4py.pyx":1269
  *     if getRef(pc) == 0: return 0
  *     FunctionBegin(b"PCReset_Python")
  *     cdef reset = PyPC(pc).reset             # <<<<<<<<<<<<<<
  *     if reset is not None:
  *         reset(PC_(pc))
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1269, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reset); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1269, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_reset = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1259
+  /* "libpetsc4py.pyx":1270
  *     FunctionBegin(b"PCReset_Python")
  *     cdef reset = PyPC(pc).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -14166,14 +14546,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
   __pyx_t_4 = (__pyx_t_1 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1260
+    /* "libpetsc4py.pyx":1271
  *     cdef reset = PyPC(pc).reset
  *     if reset is not None:
  *         reset(PC_(pc))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1271, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_reset);
     __pyx_t_5 = __pyx_v_reset; __pyx_t_6 = NULL;
@@ -14187,27 +14567,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1271, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1271, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_2);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_2);
       __pyx_t_2 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1271, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L4;
+
+    /* "libpetsc4py.pyx":1270
+ *     FunctionBegin(b"PCReset_Python")
+ *     cdef reset = PyPC(pc).reset
+ *     if reset is not None:             # <<<<<<<<<<<<<<
+ *         reset(PC_(pc))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":1261
+  /* "libpetsc4py.pyx":1272
  *     if reset is not None:
  *         reset(PC_(pc))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14217,7 +14603,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1252
+  /* "libpetsc4py.pyx":1263
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCReset_Python(             # <<<<<<<<<<<<<<
@@ -14243,19 +14629,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1263
+/* "libpetsc4py.pyx":1274
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscPC pc,
  */
 
-static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptions *__pyx_v_PetscOptionsObject, PC __pyx_v_pc) {
-  char __pyx_v_name[2048];
+static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionItems *__pyx_v_PetscOptionsObject, PC __pyx_v_pc) {
+  char __pyx_v_name[0x800];
   char *__pyx_v_defval;
   PetscBool __pyx_v_found;
-  CYTHON_UNUSED PetscOptions *PetscOptionsObject;
+  PetscOptionItems *PetscOptionsObject;
   PyObject *__pyx_v_setFromOptions = 0;
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -14269,66 +14655,72 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptions
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = 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("PCSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":1268
+  /* "libpetsc4py.pyx":1279
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCSetFromOptions_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef char name[2048], *defval = PyPC(pc).getname()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCSetFromOptions_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":1270
+  /* "libpetsc4py.pyx":1281
  *     FunctionBegin(b"PCSetFromOptions_Python")
  *     #
  *     cdef char name[2048], *defval = PyPC(pc).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1281, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyPC *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyPC *)((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) __PYX_ERR(0, 1281, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1271
+  /* "libpetsc4py.pyx":1282
  *     #
  *     cdef char name[2048], *defval = PyPC(pc).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1272
+  /* "libpetsc4py.pyx":1283
  *     cdef char name[2048], *defval = PyPC(pc).getname()
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
  *     CHKERR( PetscOptionsString(
  *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":1273
+  /* "libpetsc4py.pyx":1284
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
- *             b"PCPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
+ */
+  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(((char *)"-pc_python_type"), ((char *)"Python [package.]module[.{class|function}]"), ((char *)"PCPythonSetType"), __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1284, __pyx_L1_error)
+
+  /* "libpetsc4py.pyx":1286
+ *     CHKERR( PetscOptionsString(
+ *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
+ *     if found and name[0]:
+ *         CHKERR( PCPythonSetType_PYTHON(pc,name) )
  */
-  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(__pyx_k_pc_python_type, __pyx_k_Python_package_module_class_func, __pyx_k_PCPythonSetType, __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((void)PetscOptionsObject);
 
-  /* "libpetsc4py.pyx":1276
+  /* "libpetsc4py.pyx":1287
  *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
- *             b"PCPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
  *         CHKERR( PCPythonSetType_PYTHON(pc,name) )
  *     #
@@ -14343,35 +14735,41 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptions
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1277
- *             b"PCPythonSetType",defval,name,sizeof(name),&found) )
+    /* "libpetsc4py.pyx":1288
+ *             b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:
  *         CHKERR( PCPythonSetType_PYTHON(pc,name) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef setFromOptions = PyPC(pc).setFromOptions
  */
-    __pyx_t_6 = __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(__pyx_v_pc, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_6 = __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(__pyx_v_pc, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1288, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1288, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":1287
+ *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
+ *     if found and name[0]:             # <<<<<<<<<<<<<<
+ *         CHKERR( PCPythonSetType_PYTHON(pc,name) )
+ *     #
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1279
+  /* "libpetsc4py.pyx":1290
  *         CHKERR( PCPythonSetType_PYTHON(pc,name) )
  *     #
  *     cdef setFromOptions = PyPC(pc).setFromOptions             # <<<<<<<<<<<<<<
  *     if setFromOptions is not None:
  *         setFromOptions(PC_(pc))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setFromOptions = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "libpetsc4py.pyx":1280
+  /* "libpetsc4py.pyx":1291
  *     #
  *     cdef setFromOptions = PyPC(pc).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -14382,14 +14780,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptions
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1281
+    /* "libpetsc4py.pyx":1292
  *     cdef setFromOptions = PyPC(pc).setFromOptions
  *     if setFromOptions is not None:
  *         setFromOptions(PC_(pc))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1292, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
@@ -14403,27 +14801,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptions
       }
     }
     if (!__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1292, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1292, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1292, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    goto __pyx_L6;
+
+    /* "libpetsc4py.pyx":1291
+ *     #
+ *     cdef setFromOptions = PyPC(pc).setFromOptions
+ *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
+ *         setFromOptions(PC_(pc))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L6:;
 
-  /* "libpetsc4py.pyx":1282
+  /* "libpetsc4py.pyx":1293
  *     if setFromOptions is not None:
  *         setFromOptions(PC_(pc))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14433,11 +14837,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptions
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1263
+  /* "libpetsc4py.pyx":1274
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscPC pc,
  */
 
@@ -14459,7 +14863,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptions
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1284
+/* "libpetsc4py.pyx":1295
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCView_Python(             # <<<<<<<<<<<<<<
@@ -14481,51 +14885,48 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("PCView_Python", 0);
 
-  /* "libpetsc4py.pyx":1289
+  /* "libpetsc4py.pyx":1300
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCView_Python")             # <<<<<<<<<<<<<<
  *     viewcontext(PyPC(pc), vwr)
  *     cdef view = PyPC(pc).view
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCView_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCView_Python"));
 
-  /* "libpetsc4py.pyx":1290
+  /* "libpetsc4py.pyx":1301
  *     except IERR with gil:
  *     FunctionBegin(b"PCView_Python")
  *     viewcontext(PyPC(pc), vwr)             # <<<<<<<<<<<<<<
  *     cdef view = PyPC(pc).view
  *     if view is not None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1301, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1291
+  /* "libpetsc4py.pyx":1302
  *     FunctionBegin(b"PCView_Python")
  *     viewcontext(PyPC(pc), vwr)
  *     cdef view = PyPC(pc).view             # <<<<<<<<<<<<<<
  *     if view is not None:
  *         view(PC_(pc), Viewer_(vwr))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1302, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1302, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_view = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1292
+  /* "libpetsc4py.pyx":1303
  *     viewcontext(PyPC(pc), vwr)
  *     cdef view = PyPC(pc).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -14536,16 +14937,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1293
+    /* "libpetsc4py.pyx":1304
  *     cdef view = PyPC(pc).view
  *     if view is not None:
  *         view(PC_(pc), Viewer_(vwr))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1304, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1304, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
@@ -14560,7 +14961,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1304, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -14571,16 +14972,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
     PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_6);
     __pyx_t_1 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1304, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1303
+ *     viewcontext(PyPC(pc), vwr)
+ *     cdef view = PyPC(pc).view
+ *     if view is not None:             # <<<<<<<<<<<<<<
+ *         view(PC_(pc), Viewer_(vwr))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1294
+  /* "libpetsc4py.pyx":1305
  *     if view is not None:
  *         view(PC_(pc), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14590,7 +14997,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1284
+  /* "libpetsc4py.pyx":1295
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCView_Python(             # <<<<<<<<<<<<<<
@@ -14617,7 +15024,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1296
+/* "libpetsc4py.pyx":1307
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPreSolve_Python(             # <<<<<<<<<<<<<<
@@ -14640,39 +15047,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
   PyObject *__pyx_t_9 = NULL;
   Py_ssize_t __pyx_t_10;
   PyObject *__pyx_t_11 = 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("PCPreSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":1303
+  /* "libpetsc4py.pyx":1314
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCPreSolve_Python")             # <<<<<<<<<<<<<<
  *     cdef preSolve = PyPC(pc).preSolve
  *     if preSolve is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCPreSolve_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPreSolve_Python"));
 
-  /* "libpetsc4py.pyx":1304
+  /* "libpetsc4py.pyx":1315
  *     except IERR with gil:
  *     FunctionBegin(b"PCPreSolve_Python")
  *     cdef preSolve = PyPC(pc).preSolve             # <<<<<<<<<<<<<<
  *     if preSolve is not None:
  *         preSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1315, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preSolve); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preSolve); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1315, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_preSolve = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1305
+  /* "libpetsc4py.pyx":1316
  *     FunctionBegin(b"PCPreSolve_Python")
  *     cdef preSolve = PyPC(pc).preSolve
  *     if preSolve is not None:             # <<<<<<<<<<<<<<
@@ -14683,20 +15087,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1306
+    /* "libpetsc4py.pyx":1317
  *     cdef preSolve = PyPC(pc).preSolve
  *     if preSolve is not None:
  *         preSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_preSolve);
     __pyx_t_8 = __pyx_v_preSolve; __pyx_t_9 = NULL;
@@ -14711,7 +15115,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
         __pyx_t_10 = 1;
       }
     }
-    __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     if (__pyx_t_9) {
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -14728,16 +15132,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
     __pyx_t_7 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1316
+ *     FunctionBegin(b"PCPreSolve_Python")
+ *     cdef preSolve = PyPC(pc).preSolve
+ *     if preSolve is not None:             # <<<<<<<<<<<<<<
+ *         preSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1307
+  /* "libpetsc4py.pyx":1318
  *     if preSolve is not None:
  *         preSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14747,7 +15157,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1296
+  /* "libpetsc4py.pyx":1307
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPreSolve_Python(             # <<<<<<<<<<<<<<
@@ -14776,7 +15186,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1309
+/* "libpetsc4py.pyx":1320
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPostSolve_Python(             # <<<<<<<<<<<<<<
@@ -14799,39 +15209,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
   PyObject *__pyx_t_9 = NULL;
   Py_ssize_t __pyx_t_10;
   PyObject *__pyx_t_11 = 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("PCPostSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":1316
+  /* "libpetsc4py.pyx":1327
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCPostSolve_Python")             # <<<<<<<<<<<<<<
  *     cdef postSolve = PyPC(pc).postSolve
  *     if postSolve is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCPostSolve_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPostSolve_Python"));
 
-  /* "libpetsc4py.pyx":1317
+  /* "libpetsc4py.pyx":1328
  *     except IERR with gil:
  *     FunctionBegin(b"PCPostSolve_Python")
  *     cdef postSolve = PyPC(pc).postSolve             # <<<<<<<<<<<<<<
  *     if postSolve is not None:
  *         postSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postSolve); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postSolve); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_postSolve = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1318
+  /* "libpetsc4py.pyx":1329
  *     FunctionBegin(b"PCPostSolve_Python")
  *     cdef postSolve = PyPC(pc).postSolve
  *     if postSolve is not None:             # <<<<<<<<<<<<<<
@@ -14842,20 +15249,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1319
+    /* "libpetsc4py.pyx":1330
  *     cdef postSolve = PyPC(pc).postSolve
  *     if postSolve is not None:
  *         postSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1330, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1330, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1330, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1330, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_postSolve);
     __pyx_t_8 = __pyx_v_postSolve; __pyx_t_9 = NULL;
@@ -14870,7 +15277,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
         __pyx_t_10 = 1;
       }
     }
-    __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1330, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     if (__pyx_t_9) {
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -14887,16 +15294,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
     __pyx_t_7 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1330, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1329
+ *     FunctionBegin(b"PCPostSolve_Python")
+ *     cdef postSolve = PyPC(pc).postSolve
+ *     if postSolve is not None:             # <<<<<<<<<<<<<<
+ *         postSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1320
+  /* "libpetsc4py.pyx":1331
  *     if postSolve is not None:
  *         postSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14906,7 +15319,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1309
+  /* "libpetsc4py.pyx":1320
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPostSolve_Python(             # <<<<<<<<<<<<<<
@@ -14935,7 +15348,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1322
+/* "libpetsc4py.pyx":1333
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApply_Python(             # <<<<<<<<<<<<<<
@@ -14955,50 +15368,47 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
   PyObject *__pyx_t_6 = NULL;
   Py_ssize_t __pyx_t_7;
   PyObject *__pyx_t_8 = 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("PCApply_Python", 0);
 
-  /* "libpetsc4py.pyx":1328
+  /* "libpetsc4py.pyx":1339
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCApply_Python")             # <<<<<<<<<<<<<<
  *     cdef apply = PyPC(pc).apply
  *     apply(PC_(pc), Vec_(x), Vec_(y))
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCApply_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCApply_Python"));
 
-  /* "libpetsc4py.pyx":1329
+  /* "libpetsc4py.pyx":1340
  *     except IERR with gil:
  *     FunctionBegin(b"PCApply_Python")
  *     cdef apply = PyPC(pc).apply             # <<<<<<<<<<<<<<
  *     apply(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_apply); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_apply); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_apply = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1330
+  /* "libpetsc4py.pyx":1341
  *     FunctionBegin(b"PCApply_Python")
  *     cdef apply = PyPC(pc).apply
  *     apply(PC_(pc), Vec_(x), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_apply);
   __pyx_t_5 = __pyx_v_apply; __pyx_t_6 = NULL;
@@ -15013,7 +15423,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
       __pyx_t_7 = 1;
     }
   }
-  __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   if (__pyx_t_6) {
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
@@ -15027,13 +15437,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
   __pyx_t_1 = 0;
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1331
+  /* "libpetsc4py.pyx":1342
  *     cdef apply = PyPC(pc).apply
  *     apply(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15043,7 +15453,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1322
+  /* "libpetsc4py.pyx":1333
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApply_Python(             # <<<<<<<<<<<<<<
@@ -15071,7 +15481,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1333
+/* "libpetsc4py.pyx":1344
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplyTranspose_Python(             # <<<<<<<<<<<<<<
@@ -15091,50 +15501,47 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
   PyObject *__pyx_t_6 = NULL;
   Py_ssize_t __pyx_t_7;
   PyObject *__pyx_t_8 = 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("PCApplyTranspose_Python", 0);
 
-  /* "libpetsc4py.pyx":1339
+  /* "libpetsc4py.pyx":1350
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplyTranspose_Python")             # <<<<<<<<<<<<<<
  *     cdef applyTranspose = PyPC(pc).applyTranspose
  *     applyTranspose(PC_(pc), Vec_(x), Vec_(y))
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCApplyTranspose_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCApplyTranspose_Python"));
 
-  /* "libpetsc4py.pyx":1340
+  /* "libpetsc4py.pyx":1351
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplyTranspose_Python")
  *     cdef applyTranspose = PyPC(pc).applyTranspose             # <<<<<<<<<<<<<<
  *     applyTranspose(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applyTranspose); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applyTranspose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1351, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_applyTranspose = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1341
+  /* "libpetsc4py.pyx":1352
  *     FunctionBegin(b"PCApplyTranspose_Python")
  *     cdef applyTranspose = PyPC(pc).applyTranspose
  *     applyTranspose(PC_(pc), Vec_(x), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1352, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1352, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_applyTranspose);
   __pyx_t_5 = __pyx_v_applyTranspose; __pyx_t_6 = NULL;
@@ -15149,7 +15556,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
       __pyx_t_7 = 1;
     }
   }
-  __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1352, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   if (__pyx_t_6) {
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
@@ -15163,13 +15570,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
   __pyx_t_1 = 0;
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1352, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1342
+  /* "libpetsc4py.pyx":1353
  *     cdef applyTranspose = PyPC(pc).applyTranspose
  *     applyTranspose(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15179,7 +15586,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1333
+  /* "libpetsc4py.pyx":1344
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplyTranspose_Python(             # <<<<<<<<<<<<<<
@@ -15207,7 +15614,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1344
+/* "libpetsc4py.pyx":1355
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplySymmetricLeft_Python(             # <<<<<<<<<<<<<<
@@ -15227,50 +15634,47 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
   PyObject *__pyx_t_6 = NULL;
   Py_ssize_t __pyx_t_7;
   PyObject *__pyx_t_8 = 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("PCApplySymmetricLeft_Python", 0);
 
-  /* "libpetsc4py.pyx":1350
+  /* "libpetsc4py.pyx":1361
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplySymmetricLeft_Python")             # <<<<<<<<<<<<<<
  *     cdef applySymmetricLeft = PyPC(pc).applySymmetricLeft
  *     applySymmetricLeft(PC_(pc), Vec_(x), Vec_(y))
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCApplySymmetricLeft_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCApplySymmetricLeft_Python"));
 
-  /* "libpetsc4py.pyx":1351
+  /* "libpetsc4py.pyx":1362
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplySymmetricLeft_Python")
  *     cdef applySymmetricLeft = PyPC(pc).applySymmetricLeft             # <<<<<<<<<<<<<<
  *     applySymmetricLeft(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applySymmetricLeft); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applySymmetricLeft); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_applySymmetricLeft = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1352
+  /* "libpetsc4py.pyx":1363
  *     FunctionBegin(b"PCApplySymmetricLeft_Python")
  *     cdef applySymmetricLeft = PyPC(pc).applySymmetricLeft
  *     applySymmetricLeft(PC_(pc), Vec_(x), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_applySymmetricLeft);
   __pyx_t_5 = __pyx_v_applySymmetricLeft; __pyx_t_6 = NULL;
@@ -15285,7 +15689,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
       __pyx_t_7 = 1;
     }
   }
-  __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   if (__pyx_t_6) {
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
@@ -15299,13 +15703,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
   __pyx_t_1 = 0;
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1353
+  /* "libpetsc4py.pyx":1364
  *     cdef applySymmetricLeft = PyPC(pc).applySymmetricLeft
  *     applySymmetricLeft(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15315,7 +15719,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1344
+  /* "libpetsc4py.pyx":1355
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplySymmetricLeft_Python(             # <<<<<<<<<<<<<<
@@ -15343,7 +15747,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1355
+/* "libpetsc4py.pyx":1366
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplySymmetricRight_Python(             # <<<<<<<<<<<<<<
@@ -15363,50 +15767,47 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
   PyObject *__pyx_t_6 = NULL;
   Py_ssize_t __pyx_t_7;
   PyObject *__pyx_t_8 = 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("PCApplySymmetricRight_Python", 0);
 
-  /* "libpetsc4py.pyx":1361
+  /* "libpetsc4py.pyx":1372
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplySymmetricRight_Python")             # <<<<<<<<<<<<<<
  *     cdef applySymmetricRight = PyPC(pc).applySymmetricRight
  *     applySymmetricRight(PC_(pc), Vec_(x), Vec_(y))
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PCApplySymmetricRight_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCApplySymmetricRight_Python"));
 
-  /* "libpetsc4py.pyx":1362
+  /* "libpetsc4py.pyx":1373
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplySymmetricRight_Python")
  *     cdef applySymmetricRight = PyPC(pc).applySymmetricRight             # <<<<<<<<<<<<<<
  *     applySymmetricRight(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1373, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applySymmetricRight); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applySymmetricRight); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1373, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_applySymmetricRight = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1363
+  /* "libpetsc4py.pyx":1374
  *     FunctionBegin(b"PCApplySymmetricRight_Python")
  *     cdef applySymmetricRight = PyPC(pc).applySymmetricRight
  *     applySymmetricRight(PC_(pc), Vec_(x), Vec_(y))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1374, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1374, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1374, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_applySymmetricRight);
   __pyx_t_5 = __pyx_v_applySymmetricRight; __pyx_t_6 = NULL;
@@ -15421,7 +15822,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
       __pyx_t_7 = 1;
     }
   }
-  __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1374, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   if (__pyx_t_6) {
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
@@ -15435,13 +15836,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
   __pyx_t_1 = 0;
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1374, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1364
+  /* "libpetsc4py.pyx":1375
  *     cdef applySymmetricRight = PyPC(pc).applySymmetricRight
  *     applySymmetricRight(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15451,7 +15852,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1355
+  /* "libpetsc4py.pyx":1366
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplySymmetricRight_Python(             # <<<<<<<<<<<<<<
@@ -15479,7 +15880,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1417
+/* "libpetsc4py.pyx":1428
  * @cython.internal
  * cdef class _PyKSP(_PyObj): pass
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):             # <<<<<<<<<<<<<<
@@ -15493,12 +15894,9 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
   int __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("PyKSP", 0);
 
-  /* "libpetsc4py.pyx":1418
+  /* "libpetsc4py.pyx":1429
  * cdef class _PyKSP(_PyObj): pass
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):
  *     if ksp != NULL and ksp.data != NULL:             # <<<<<<<<<<<<<<
@@ -15516,7 +15914,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":1419
+    /* "libpetsc4py.pyx":1430
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):
  *     if ksp != NULL and ksp.data != NULL:
  *         return <_PyKSP>ksp.data             # <<<<<<<<<<<<<<
@@ -15527,26 +15925,34 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
     __Pyx_INCREF(((PyObject *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_v_ksp->data)));
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_v_ksp->data);
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":1429
+ * cdef class _PyKSP(_PyObj): pass
+ * cdef inline _PyKSP PyKSP(PetscKSP ksp):
+ *     if ksp != NULL and ksp.data != NULL:             # <<<<<<<<<<<<<<
+ *         return <_PyKSP>ksp.data
+ *     else:
+ */
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1421
+  /* "libpetsc4py.pyx":1432
  *         return <_PyKSP>ksp.data
  *     else:
  *         return _PyKSP.__new__(_PyKSP)             # <<<<<<<<<<<<<<
  * 
  * cdef public PetscErrorCode KSPPythonGetContext(PetscKSP ksp, void **ctx) \
  */
+  /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PyKSP(((PyTypeObject *)((PyObject*)__pyx_ptype_11libpetsc4py__PyKSP)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PyKSP(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PyKSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1432, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyKSP)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyKSP)))) __PYX_ERR(0, 1432, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1417
+  /* "libpetsc4py.pyx":1428
  * @cython.internal
  * cdef class _PyKSP(_PyObj): pass
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):             # <<<<<<<<<<<<<<
@@ -15565,7 +15971,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1423
+/* "libpetsc4py.pyx":1434
  *         return _PyKSP.__new__(_PyKSP)
  * 
  * cdef public PetscErrorCode KSPPythonGetContext(PetscKSP ksp, void **ctx) \             # <<<<<<<<<<<<<<
@@ -15578,33 +15984,30 @@ PetscErrorCode KSPPythonGetContext(KSP __pyx_v_ksp, void **__pyx_v_ctx) {
   __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("KSPPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":1425
+  /* "libpetsc4py.pyx":1436
  * cdef public PetscErrorCode KSPPythonGetContext(PetscKSP ksp, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"KSPPythonGetContext")             # <<<<<<<<<<<<<<
  *     PyKSP(ksp).getcontext(ctx)
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPPythonGetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPythonGetContext"));
 
-  /* "libpetsc4py.pyx":1426
+  /* "libpetsc4py.pyx":1437
  *     except IERR:
  *     FunctionBegin(b"KSPPythonGetContext")
  *     PyKSP(ksp).getcontext(ctx)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1437, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyKSP *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyKSP *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1437, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1427
+  /* "libpetsc4py.pyx":1438
  *     FunctionBegin(b"KSPPythonGetContext")
  *     PyKSP(ksp).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15614,7 +16017,7 @@ PetscErrorCode KSPPythonGetContext(KSP __pyx_v_ksp, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1423
+  /* "libpetsc4py.pyx":1434
  *         return _PyKSP.__new__(_PyKSP)
  * 
  * cdef public PetscErrorCode KSPPythonGetContext(PetscKSP ksp, void **ctx) \             # <<<<<<<<<<<<<<
@@ -15632,7 +16035,7 @@ PetscErrorCode KSPPythonGetContext(KSP __pyx_v_ksp, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1429
+/* "libpetsc4py.pyx":1440
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode KSPPythonSetContext(PetscKSP ksp, void *ctx) \             # <<<<<<<<<<<<<<
@@ -15646,36 +16049,33 @@ PetscErrorCode KSPPythonSetContext(KSP __pyx_v_ksp, void *__pyx_v_ctx) {
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("KSPPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":1431
+  /* "libpetsc4py.pyx":1442
  * cdef public PetscErrorCode KSPPythonSetContext(PetscKSP ksp, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"KSPPythonSetContext")             # <<<<<<<<<<<<<<
  *     PyKSP(ksp).setcontext(ctx, KSP_(ksp))
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPPythonSetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPythonSetContext"));
 
-  /* "libpetsc4py.pyx":1432
+  /* "libpetsc4py.pyx":1443
  *     except IERR:
  *     FunctionBegin(b"KSPPythonSetContext")
  *     PyKSP(ksp).setcontext(ctx, KSP_(ksp))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1443, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1443, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PyKSP *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PyKSP *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1443, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1433
+  /* "libpetsc4py.pyx":1444
  *     FunctionBegin(b"KSPPythonSetContext")
  *     PyKSP(ksp).setcontext(ctx, KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15685,7 +16085,7 @@ PetscErrorCode KSPPythonSetContext(KSP __pyx_v_ksp, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1429
+  /* "libpetsc4py.pyx":1440
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode KSPPythonSetContext(PetscKSP ksp, void *ctx) \             # <<<<<<<<<<<<<<
@@ -15704,7 +16104,7 @@ PetscErrorCode KSPPythonSetContext(KSP __pyx_v_ksp, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1435
+/* "libpetsc4py.pyx":1446
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPythonSetType_PYTHON(PetscKSP ksp, char name[]) \             # <<<<<<<<<<<<<<
@@ -15720,24 +16120,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
   PyObject *__pyx_t_2 = NULL;
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
-  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("KSPPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":1437
+  /* "libpetsc4py.pyx":1448
  * cdef PetscErrorCode KSPPythonSetType_PYTHON(PetscKSP ksp, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPPythonSetType_PYTHON);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":1438
+  /* "libpetsc4py.pyx":1449
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -15750,40 +16147,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1439
+  /* "libpetsc4py.pyx":1450
  *     FunctionBegin(b"KSPPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)             # <<<<<<<<<<<<<<
  *     KSPPythonSetContext(ksp, <void*>ctx)
  *     PyKSP(ksp).setname(name)
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1450, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1440
+  /* "libpetsc4py.pyx":1451
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  *     KSPPythonSetContext(ksp, <void*>ctx)             # <<<<<<<<<<<<<<
  *     PyKSP(ksp).setname(name)
  *     return FunctionEnd()
  */
-  __pyx_t_3 = KSPPythonSetContext(__pyx_v_ksp, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = KSPPythonSetContext(__pyx_v_ksp, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1451, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1441
+  /* "libpetsc4py.pyx":1452
  *     cdef object ctx = createcontext(name)
  *     KSPPythonSetContext(ksp, <void*>ctx)
  *     PyKSP(ksp).setname(name)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1452, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PyKSP *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PyKSP *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1452, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1442
+  /* "libpetsc4py.pyx":1453
  *     KSPPythonSetContext(ksp, <void*>ctx)
  *     PyKSP(ksp).setname(name)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15793,7 +16190,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1435
+  /* "libpetsc4py.pyx":1446
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPythonSetType_PYTHON(PetscKSP ksp, char name[]) \             # <<<<<<<<<<<<<<
@@ -15815,7 +16212,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1444
+/* "libpetsc4py.pyx":1455
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPCreate_Python(             # <<<<<<<<<<<<<<
@@ -15831,24 +16228,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
   KSPOps __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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":1448
+  /* "libpetsc4py.pyx":1459
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPCreate_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef KSPOps ops    = ksp.ops
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPCreate_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPCreate_Python"));
 
-  /* "libpetsc4py.pyx":1450
+  /* "libpetsc4py.pyx":1461
  *     FunctionBegin(b"KSPCreate_Python")
  *     #
  *     cdef KSPOps ops    = ksp.ops             # <<<<<<<<<<<<<<
@@ -15858,7 +16252,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
   __pyx_t_1 = __pyx_v_ksp->ops;
   __pyx_v_ops = __pyx_t_1;
 
-  /* "libpetsc4py.pyx":1451
+  /* "libpetsc4py.pyx":1462
  *     #
  *     cdef KSPOps ops    = ksp.ops
  *     ops.reset          = KSPReset_Python             # <<<<<<<<<<<<<<
@@ -15867,7 +16261,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->reset = __pyx_f_11libpetsc4py_KSPReset_Python;
 
-  /* "libpetsc4py.pyx":1452
+  /* "libpetsc4py.pyx":1463
  *     cdef KSPOps ops    = ksp.ops
  *     ops.reset          = KSPReset_Python
  *     ops.destroy        = KSPDestroy_Python             # <<<<<<<<<<<<<<
@@ -15876,7 +16270,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_KSPDestroy_Python;
 
-  /* "libpetsc4py.pyx":1453
+  /* "libpetsc4py.pyx":1464
  *     ops.reset          = KSPReset_Python
  *     ops.destroy        = KSPDestroy_Python
  *     ops.setup          = KSPSetUp_Python             # <<<<<<<<<<<<<<
@@ -15885,7 +16279,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_KSPSetUp_Python;
 
-  /* "libpetsc4py.pyx":1454
+  /* "libpetsc4py.pyx":1465
  *     ops.destroy        = KSPDestroy_Python
  *     ops.setup          = KSPSetUp_Python
  *     ops.setfromoptions = KSPSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -15894,7 +16288,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_KSPSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":1455
+  /* "libpetsc4py.pyx":1466
  *     ops.setup          = KSPSetUp_Python
  *     ops.setfromoptions = KSPSetFromOptions_Python
  *     ops.view           = KSPView_Python             # <<<<<<<<<<<<<<
@@ -15903,7 +16297,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_KSPView_Python;
 
-  /* "libpetsc4py.pyx":1456
+  /* "libpetsc4py.pyx":1467
  *     ops.setfromoptions = KSPSetFromOptions_Python
  *     ops.view           = KSPView_Python
  *     ops.solve          = KSPSolve_Python             # <<<<<<<<<<<<<<
@@ -15912,7 +16306,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->solve = __pyx_f_11libpetsc4py_KSPSolve_Python;
 
-  /* "libpetsc4py.pyx":1457
+  /* "libpetsc4py.pyx":1468
  *     ops.view           = KSPView_Python
  *     ops.solve          = KSPSolve_Python
  *     ops.buildsolution  = KSPBuildSolution_Python             # <<<<<<<<<<<<<<
@@ -15921,7 +16315,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->buildsolution = __pyx_f_11libpetsc4py_KSPBuildSolution_Python;
 
-  /* "libpetsc4py.pyx":1458
+  /* "libpetsc4py.pyx":1469
  *     ops.solve          = KSPSolve_Python
  *     ops.buildsolution  = KSPBuildSolution_Python
  *     ops.buildresidual  = KSPBuildResidual_Python             # <<<<<<<<<<<<<<
@@ -15930,28 +16324,28 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->buildresidual = __pyx_f_11libpetsc4py_KSPBuildResidual_Python;
 
-  /* "libpetsc4py.pyx":1460
+  /* "libpetsc4py.pyx":1471
  *     ops.buildresidual  = KSPBuildResidual_Python
  *     #
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>ksp, b"KSPPythonSetType_C",
  *             <PetscVoidFunction>KSPPythonSetType_PYTHON) )
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_ksp), __pyx_k_KSPPythonSetType_C, ((PetscVoidFunction)__pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_ksp), ((char *)"KSPPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1471, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1464
+  /* "libpetsc4py.pyx":1475
  *             <PetscVoidFunction>KSPPythonSetType_PYTHON) )
  *     #
  *     cdef ctx = PyKSP(NULL)             # <<<<<<<<<<<<<<
  *     ksp.data = <void*> ctx
  *     Py_INCREF(<PyObject*>ksp.data)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(NULL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1475, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1465
+  /* "libpetsc4py.pyx":1476
  *     #
  *     cdef ctx = PyKSP(NULL)
  *     ksp.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -15960,7 +16354,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ksp->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":1466
+  /* "libpetsc4py.pyx":1477
  *     cdef ctx = PyKSP(NULL)
  *     ksp.data = <void*> ctx
  *     Py_INCREF(<PyObject*>ksp.data)             # <<<<<<<<<<<<<<
@@ -15969,61 +16363,61 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   Py_INCREF(((PyObject *)__pyx_v_ksp->data));
 
-  /* "libpetsc4py.pyx":1468
+  /* "libpetsc4py.pyx":1479
  *     Py_INCREF(<PyObject*>ksp.data)
  *     #
  *     CHKERR( KSPSetSupportedNorm(             # <<<<<<<<<<<<<<
  *             ksp, KSP_NORM_PRECONDITIONED,   PC_LEFT,      3) )
  *     CHKERR( KSPSetSupportedNorm(
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_PRECONDITIONED, PC_LEFT, 3)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_PRECONDITIONED, PC_LEFT, 3)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1479, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1470
+  /* "libpetsc4py.pyx":1481
  *     CHKERR( KSPSetSupportedNorm(
  *             ksp, KSP_NORM_PRECONDITIONED,   PC_LEFT,      3) )
  *     CHKERR( KSPSetSupportedNorm(             # <<<<<<<<<<<<<<
  *             ksp, KSP_NORM_UNPRECONDITIONED, PC_RIGHT,     3) )
  *     CHKERR( KSPSetSupportedNorm(
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_UNPRECONDITIONED, PC_RIGHT, 3)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_UNPRECONDITIONED, PC_RIGHT, 3)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1481, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1472
+  /* "libpetsc4py.pyx":1483
  *     CHKERR( KSPSetSupportedNorm(
  *             ksp, KSP_NORM_UNPRECONDITIONED, PC_RIGHT,     3) )
  *     CHKERR( KSPSetSupportedNorm(             # <<<<<<<<<<<<<<
  *             ksp, KSP_NORM_UNPRECONDITIONED, PC_LEFT,      2) )
  *     CHKERR( KSPSetSupportedNorm(
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_UNPRECONDITIONED, PC_LEFT, 2)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_UNPRECONDITIONED, PC_LEFT, 2)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1483, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1474
+  /* "libpetsc4py.pyx":1485
  *     CHKERR( KSPSetSupportedNorm(
  *             ksp, KSP_NORM_UNPRECONDITIONED, PC_LEFT,      2) )
  *     CHKERR( KSPSetSupportedNorm(             # <<<<<<<<<<<<<<
  *             ksp, KSP_NORM_PRECONDITIONED,   PC_RIGHT,     2) )
  *     CHKERR( KSPSetSupportedNorm(
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_PRECONDITIONED, PC_RIGHT, 2)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_PRECONDITIONED, PC_RIGHT, 2)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1485, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1476
+  /* "libpetsc4py.pyx":1487
  *     CHKERR( KSPSetSupportedNorm(
  *             ksp, KSP_NORM_PRECONDITIONED,   PC_RIGHT,     2) )
  *     CHKERR( KSPSetSupportedNorm(             # <<<<<<<<<<<<<<
  *             ksp, KSP_NORM_PRECONDITIONED,   PC_SYMMETRIC, 1) )
  *     CHKERR( KSPSetSupportedNorm(
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_PRECONDITIONED, PC_SYMMETRIC, 1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_PRECONDITIONED, PC_SYMMETRIC, 1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1487, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1478
+  /* "libpetsc4py.pyx":1489
  *     CHKERR( KSPSetSupportedNorm(
  *             ksp, KSP_NORM_PRECONDITIONED,   PC_SYMMETRIC, 1) )
  *     CHKERR( KSPSetSupportedNorm(             # <<<<<<<<<<<<<<
  *             ksp, KSP_NORM_UNPRECONDITIONED, PC_SYMMETRIC, 1) )
  *     return FunctionEnd()
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_UNPRECONDITIONED, PC_SYMMETRIC, 1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(KSPSetSupportedNorm(__pyx_v_ksp, KSP_NORM_UNPRECONDITIONED, PC_SYMMETRIC, 1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1489, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1480
+  /* "libpetsc4py.pyx":1491
  *     CHKERR( KSPSetSupportedNorm(
  *             ksp, KSP_NORM_UNPRECONDITIONED, PC_SYMMETRIC, 1) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16033,7 +16427,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1444
+  /* "libpetsc4py.pyx":1455
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPCreate_Python(             # <<<<<<<<<<<<<<
@@ -16055,7 +16449,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1482
+/* "libpetsc4py.pyx":1493
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPDestroy_Python(             # <<<<<<<<<<<<<<
@@ -16077,33 +16471,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = 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("KSPDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":1486
+  /* "libpetsc4py.pyx":1497
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPDestroy_Python")             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectComposeFunction(
  *             <PetscObject>ksp, b"KSPPythonSetType_C",
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPDestroy_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPDestroy_Python"));
 
-  /* "libpetsc4py.pyx":1487
+  /* "libpetsc4py.pyx":1498
  *     except IERR with gil:
  *     FunctionBegin(b"KSPDestroy_Python")
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>ksp, b"KSPPythonSetType_C",
  *             <PetscVoidFunction>NULL))
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_ksp), __pyx_k_KSPPythonSetType_C, ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_ksp), ((char *)"KSPPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1498, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1491
+  /* "libpetsc4py.pyx":1502
  *             <PetscVoidFunction>NULL))
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16116,7 +16507,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1492
+  /* "libpetsc4py.pyx":1503
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -16125,7 +16516,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":1493
+    /* "libpetsc4py.pyx":1504
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(ksp)             # <<<<<<<<<<<<<<
@@ -16134,17 +16525,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_ksp);
 
-    /* "libpetsc4py.pyx":1494
+    /* "libpetsc4py.pyx":1505
  *     try:
  *         addRef(ksp)
  *         KSPPythonSetContext(ksp, NULL)             # <<<<<<<<<<<<<<
  *     finally:
  *         delRef(ksp)
  */
-    __pyx_t_3 = KSPPythonSetContext(__pyx_v_ksp, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_3 = KSPPythonSetContext(__pyx_v_ksp, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1505, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":1496
+  /* "libpetsc4py.pyx":1507
  *         KSPPythonSetContext(ksp, NULL)
  *     finally:
  *         delRef(ksp)             # <<<<<<<<<<<<<<
@@ -16155,7 +16546,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_ksp);
 
-      /* "libpetsc4py.pyx":1497
+      /* "libpetsc4py.pyx":1508
  *     finally:
  *         delRef(ksp)
  *         Py_DECREF(<PyObject*>ksp.data)             # <<<<<<<<<<<<<<
@@ -16164,7 +16555,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
       Py_DECREF(((PyObject *)__pyx_v_ksp->data));
 
-      /* "libpetsc4py.pyx":1498
+      /* "libpetsc4py.pyx":1509
  *         delRef(ksp)
  *         Py_DECREF(<PyObject*>ksp.data)
  *         ksp.data = NULL             # <<<<<<<<<<<<<<
@@ -16175,8 +16566,10 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
       goto __pyx_L6;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L5_error:;
       __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
       __Pyx_XGOTREF(__pyx_t_6);
@@ -16188,7 +16581,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
       __pyx_t_1 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
       {
 
-        /* "libpetsc4py.pyx":1496
+        /* "libpetsc4py.pyx":1507
  *         KSPPythonSetContext(ksp, NULL)
  *     finally:
  *         delRef(ksp)             # <<<<<<<<<<<<<<
@@ -16197,7 +16590,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_ksp);
 
-        /* "libpetsc4py.pyx":1497
+        /* "libpetsc4py.pyx":1508
  *     finally:
  *         delRef(ksp)
  *         Py_DECREF(<PyObject*>ksp.data)             # <<<<<<<<<<<<<<
@@ -16206,7 +16599,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
         Py_DECREF(((PyObject *)__pyx_v_ksp->data));
 
-        /* "libpetsc4py.pyx":1498
+        /* "libpetsc4py.pyx":1509
  *         delRef(ksp)
  *         Py_DECREF(<PyObject*>ksp.data)
  *         ksp.data = NULL             # <<<<<<<<<<<<<<
@@ -16215,6 +16608,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
         __pyx_v_ksp->data = NULL;
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
@@ -16232,7 +16626,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":1499
+  /* "libpetsc4py.pyx":1510
  *         Py_DECREF(<PyObject*>ksp.data)
  *         ksp.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16242,7 +16636,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1482
+  /* "libpetsc4py.pyx":1493
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPDestroy_Python(             # <<<<<<<<<<<<<<
@@ -16262,7 +16656,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1501
+/* "libpetsc4py.pyx":1512
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSetUp_Python(             # <<<<<<<<<<<<<<
@@ -16271,7 +16665,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
 
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
-  char __pyx_v_name[2048];
+  char __pyx_v_name[0x800];
   PetscBool __pyx_v_found;
   PyObject *__pyx_v_setUp = 0;
   PetscErrorCode __pyx_r;
@@ -16285,56 +16679,53 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = 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("KSPSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":1505
+  /* "libpetsc4py.pyx":1516
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSetUp_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef char name[2048]
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPSetUp_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPSetUp_Python"));
 
-  /* "libpetsc4py.pyx":1508
+  /* "libpetsc4py.pyx":1519
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
  *     if PyKSP(ksp).self is None:
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1509
+  /* "libpetsc4py.pyx":1520
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyKSP(ksp).self is None:             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  *                 getPrefix(ksp), b"-ksp_python_type",
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1520, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = (((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_1)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1510
+    /* "libpetsc4py.pyx":1521
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyKSP(ksp).self is None:
- *         CHKERR( PetscOptionsGetString(             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(ksp), b"-ksp_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(__pyx_f_11libpetsc4py_getPrefix(__pyx_v_ksp), __pyx_k_ksp_python_type, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(NULL, __pyx_f_11libpetsc4py_getPrefix(__pyx_v_ksp), ((char *)"-ksp_python_type"), __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1521, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1513
+    /* "libpetsc4py.pyx":1524
  *                 getPrefix(ksp), b"-ksp_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -16351,63 +16742,83 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":1514
+      /* "libpetsc4py.pyx":1525
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:
  *             CHKERR( KSPPythonSetType_PYTHON(ksp,name) )             # <<<<<<<<<<<<<<
  *     if PyKSP(ksp).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(__pyx_v_ksp, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L4;
+      __pyx_t_5 = __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(__pyx_v_ksp, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1525, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1525, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":1524
+ *                 getPrefix(ksp), b"-ksp_python_type",
+ *                 name,sizeof(name),&found) )
+ *         if found and name[0]:             # <<<<<<<<<<<<<<
+ *             CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
+ *     if PyKSP(ksp).self is None:
+ */
     }
-    __pyx_L4:;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1520
+ *     cdef char name[2048]
+ *     cdef PetscBool found = PETSC_FALSE
+ *     if PyKSP(ksp).self is None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,
+ *                 getPrefix(ksp), b"-ksp_python_type",
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1515
+  /* "libpetsc4py.pyx":1526
  *         if found and name[0]:
  *             CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
  *     if PyKSP(ksp).self is None:             # <<<<<<<<<<<<<<
  *         return PetscSETERR(PETSC_ERR_USER,
  *             "Python context not set, call one of \n"
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = (((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_1)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":1516
+    /* "libpetsc4py.pyx":1527
  *             CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
  *     if PyKSP(ksp).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
  *             "Python context not set, call one of \n"
  *             " * KSPPythonSetType(ksp,\"[package.]module.class\")\n"
  */
-    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, __pyx_k_Python_context_not_set_call_one_3);
+    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, ((char *)"Python context not set, call one of \n * KSPPythonSetType(ksp,\"[package.]module.class\")\n * KSPSetFromOptions(ksp) and pass option -ksp_python_type [package.]module.class"));
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":1526
+ *         if found and name[0]:
+ *             CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
+ *     if PyKSP(ksp).self is None:             # <<<<<<<<<<<<<<
+ *         return PetscSETERR(PETSC_ERR_USER,
+ *             "Python context not set, call one of \n"
+ */
   }
 
-  /* "libpetsc4py.pyx":1522
+  /* "libpetsc4py.pyx":1533
  *             "-ksp_python_type [package.]module.class")
  *     #
  *     cdef setUp = PyKSP(ksp).setUp             # <<<<<<<<<<<<<<
  *     if setUp is not None:
  *         setUp(KSP_(ksp))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setUp = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":1523
+  /* "libpetsc4py.pyx":1534
  *     #
  *     cdef setUp = PyKSP(ksp).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -16418,14 +16829,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1524
+    /* "libpetsc4py.pyx":1535
  *     cdef setUp = PyKSP(ksp).setUp
  *     if setUp is not None:
  *         setUp(KSP_(ksp))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
@@ -16439,27 +16850,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1535, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_6);
     } else {
-      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1535, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1535, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    goto __pyx_L8;
+
+    /* "libpetsc4py.pyx":1534
+ *     #
+ *     cdef setUp = PyKSP(ksp).setUp
+ *     if setUp is not None:             # <<<<<<<<<<<<<<
+ *         setUp(KSP_(ksp))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L8:;
 
-  /* "libpetsc4py.pyx":1525
+  /* "libpetsc4py.pyx":1536
  *     if setUp is not None:
  *         setUp(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16469,7 +16886,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1501
+  /* "libpetsc4py.pyx":1512
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSetUp_Python(             # <<<<<<<<<<<<<<
@@ -16495,7 +16912,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1527
+/* "libpetsc4py.pyx":1538
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPReset_Python(             # <<<<<<<<<<<<<<
@@ -16515,15 +16932,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = 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("KSPReset_Python", 0);
 
-  /* "libpetsc4py.pyx":1531
+  /* "libpetsc4py.pyx":1542
  *     ) \
  *     except IERR with gil:
  *     if getRef(ksp) == 0: return 0             # <<<<<<<<<<<<<<
@@ -16536,49 +16950,49 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1532
+  /* "libpetsc4py.pyx":1543
  *     except IERR with gil:
  *     if getRef(ksp) == 0: return 0
  *     FunctionBegin(b"KSPReset_Python")             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_sol",NULL) )
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_res",NULL) )
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPReset_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPReset_Python"));
 
-  /* "libpetsc4py.pyx":1533
+  /* "libpetsc4py.pyx":1544
  *     if getRef(ksp) == 0: return 0
  *     FunctionBegin(b"KSPReset_Python")
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_sol",NULL) )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_res",NULL) )
  *     cdef reset = PyKSP(ksp).reset
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ksp), __pyx_k_ksp_vec_work_sol, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ksp), ((char *)"@ksp.vec_work_sol"), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1544, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1534
+  /* "libpetsc4py.pyx":1545
  *     FunctionBegin(b"KSPReset_Python")
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_sol",NULL) )
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_res",NULL) )             # <<<<<<<<<<<<<<
  *     cdef reset = PyKSP(ksp).reset
  *     if reset is not None:
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ksp), __pyx_k_ksp_vec_work_res, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ksp), ((char *)"@ksp.vec_work_res"), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1545, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1535
+  /* "libpetsc4py.pyx":1546
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_sol",NULL) )
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_res",NULL) )
  *     cdef reset = PyKSP(ksp).reset             # <<<<<<<<<<<<<<
  *     if reset is not None:
  *         reset(KSP_(ksp))
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reset); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_reset = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "libpetsc4py.pyx":1536
+  /* "libpetsc4py.pyx":1547
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_res",NULL) )
  *     cdef reset = PyKSP(ksp).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -16589,14 +17003,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
   __pyx_t_5 = (__pyx_t_1 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1537
+    /* "libpetsc4py.pyx":1548
  *     cdef reset = PyKSP(ksp).reset
  *     if reset is not None:
  *         reset(KSP_(ksp))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1548, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_reset);
     __pyx_t_6 = __pyx_v_reset; __pyx_t_7 = NULL;
@@ -16610,27 +17024,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1548, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1548, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1548, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    goto __pyx_L4;
+
+    /* "libpetsc4py.pyx":1547
+ *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_res",NULL) )
+ *     cdef reset = PyKSP(ksp).reset
+ *     if reset is not None:             # <<<<<<<<<<<<<<
+ *         reset(KSP_(ksp))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":1538
+  /* "libpetsc4py.pyx":1549
  *     if reset is not None:
  *         reset(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16640,7 +17060,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1527
+  /* "libpetsc4py.pyx":1538
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPReset_Python(             # <<<<<<<<<<<<<<
@@ -16666,19 +17086,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1540
+/* "libpetsc4py.pyx":1551
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscKSP ksp,
  */
 
-static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOptions *__pyx_v_PetscOptionsObject, KSP __pyx_v_ksp) {
-  char __pyx_v_name[2048];
+static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOptionItems *__pyx_v_PetscOptionsObject, KSP __pyx_v_ksp) {
+  char __pyx_v_name[0x800];
   char *__pyx_v_defval;
   PetscBool __pyx_v_found;
-  CYTHON_UNUSED PetscOptions *PetscOptionsObject;
+  PetscOptionItems *PetscOptionsObject;
   PyObject *__pyx_v_setFromOptions = 0;
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -16692,66 +17112,72 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = 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("KSPSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":1545
+  /* "libpetsc4py.pyx":1556
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSetFromOptions_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef char name[2048], *defval = PyKSP(ksp).getname()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPSetFromOptions_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":1547
+  /* "libpetsc4py.pyx":1558
  *     FunctionBegin(b"KSPSetFromOptions_Python")
  *     #
  *     cdef char name[2048], *defval = PyKSP(ksp).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1558, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyKSP *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyKSP *)((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) __PYX_ERR(0, 1558, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1548
+  /* "libpetsc4py.pyx":1559
  *     #
  *     cdef char name[2048], *defval = PyKSP(ksp).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1549
+  /* "libpetsc4py.pyx":1560
  *     cdef char name[2048], *defval = PyKSP(ksp).getname()
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
  *     CHKERR( PetscOptionsString(
  *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":1550
+  /* "libpetsc4py.pyx":1561
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
- *             b"KSPPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  */
-  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(__pyx_k_ksp_python_type, __pyx_k_Python_package_module_class_func, __pyx_k_KSPPythonSetType, __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(((char *)"-ksp_python_type"), ((char *)"Python [package.]module[.{class|function}]"), ((char *)"KSPPythonSetType"), __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1561, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1553
+  /* "libpetsc4py.pyx":1563
+ *     CHKERR( PetscOptionsString(
+ *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
+ *     if found and name[0]:
+ *         CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
+ */
+  ((void)PetscOptionsObject);
+
+  /* "libpetsc4py.pyx":1564
  *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
- *             b"KSPPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
  *         CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
  *     #
@@ -16766,35 +17192,41 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1554
- *             b"KSPPythonSetType",defval,name,sizeof(name),&found) )
+    /* "libpetsc4py.pyx":1565
+ *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:
  *         CHKERR( KSPPythonSetType_PYTHON(ksp,name) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef setFromOptions = PyKSP(ksp).setFromOptions
  */
-    __pyx_t_6 = __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(__pyx_v_ksp, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_6 = __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(__pyx_v_ksp, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1565, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1565, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":1564
+ *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
+ *     if found and name[0]:             # <<<<<<<<<<<<<<
+ *         CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
+ *     #
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1556
+  /* "libpetsc4py.pyx":1567
  *         CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
  *     #
  *     cdef setFromOptions = PyKSP(ksp).setFromOptions             # <<<<<<<<<<<<<<
  *     if setFromOptions is not None:
  *         setFromOptions(KSP_(ksp))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1567, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1567, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setFromOptions = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "libpetsc4py.pyx":1557
+  /* "libpetsc4py.pyx":1568
  *     #
  *     cdef setFromOptions = PyKSP(ksp).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -16805,14 +17237,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1558
+    /* "libpetsc4py.pyx":1569
  *     cdef setFromOptions = PyKSP(ksp).setFromOptions
  *     if setFromOptions is not None:
  *         setFromOptions(KSP_(ksp))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1569, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
@@ -16826,27 +17258,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
       }
     }
     if (!__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1569, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1569, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1569, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    goto __pyx_L6;
+
+    /* "libpetsc4py.pyx":1568
+ *     #
+ *     cdef setFromOptions = PyKSP(ksp).setFromOptions
+ *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
+ *         setFromOptions(KSP_(ksp))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L6:;
 
-  /* "libpetsc4py.pyx":1559
+  /* "libpetsc4py.pyx":1570
  *     if setFromOptions is not None:
  *         setFromOptions(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16856,11 +17294,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1540
+  /* "libpetsc4py.pyx":1551
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscKSP ksp,
  */
 
@@ -16882,7 +17320,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1561
+/* "libpetsc4py.pyx":1572
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPView_Python(             # <<<<<<<<<<<<<<
@@ -16904,51 +17342,48 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("KSPView_Python", 0);
 
-  /* "libpetsc4py.pyx":1566
+  /* "libpetsc4py.pyx":1577
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPView_Python")             # <<<<<<<<<<<<<<
  *     viewcontext(PyKSP(ksp), vwr)
  *     cdef view = PyKSP(ksp).view
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPView_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPView_Python"));
 
-  /* "libpetsc4py.pyx":1567
+  /* "libpetsc4py.pyx":1578
  *     except IERR with gil:
  *     FunctionBegin(b"KSPView_Python")
  *     viewcontext(PyKSP(ksp), vwr)             # <<<<<<<<<<<<<<
  *     cdef view = PyKSP(ksp).view
  *     if view is not None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1578, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1578, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1568
+  /* "libpetsc4py.pyx":1579
  *     FunctionBegin(b"KSPView_Python")
  *     viewcontext(PyKSP(ksp), vwr)
  *     cdef view = PyKSP(ksp).view             # <<<<<<<<<<<<<<
  *     if view is not None:
  *         view(KSP_(ksp), Viewer_(vwr))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1579, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1579, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_view = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1569
+  /* "libpetsc4py.pyx":1580
  *     viewcontext(PyKSP(ksp), vwr)
  *     cdef view = PyKSP(ksp).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -16959,16 +17394,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1570
+    /* "libpetsc4py.pyx":1581
  *     cdef view = PyKSP(ksp).view
  *     if view is not None:
  *         view(KSP_(ksp), Viewer_(vwr))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1581, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1581, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
@@ -16983,7 +17418,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1581, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -16994,16 +17429,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
     PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_6);
     __pyx_t_1 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1581, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1580
+ *     viewcontext(PyKSP(ksp), vwr)
+ *     cdef view = PyKSP(ksp).view
+ *     if view is not None:             # <<<<<<<<<<<<<<
+ *         view(KSP_(ksp), Viewer_(vwr))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1571
+  /* "libpetsc4py.pyx":1582
  *     if view is not None:
  *         view(KSP_(ksp), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17013,7 +17454,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1561
+  /* "libpetsc4py.pyx":1572
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPView_Python(             # <<<<<<<<<<<<<<
@@ -17040,7 +17481,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1573
+/* "libpetsc4py.pyx":1584
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPBuildSolution_Python(             # <<<<<<<<<<<<<<
@@ -17063,24 +17504,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   int __pyx_t_10;
-  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("KSPBuildSolution_Python", 0);
 
-  /* "libpetsc4py.pyx":1579
+  /* "libpetsc4py.pyx":1590
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPBuildSolution_Python")             # <<<<<<<<<<<<<<
  *     cdef PetscVec x = v
  *     cdef buildSolution = PyKSP(ksp).buildSolution
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPBuildSolution_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPBuildSolution_Python"));
 
-  /* "libpetsc4py.pyx":1580
+  /* "libpetsc4py.pyx":1591
  *     except IERR with gil:
  *     FunctionBegin(b"KSPBuildSolution_Python")
  *     cdef PetscVec x = v             # <<<<<<<<<<<<<<
@@ -17089,22 +17527,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
  */
   __pyx_v_x = __pyx_v_v;
 
-  /* "libpetsc4py.pyx":1581
+  /* "libpetsc4py.pyx":1592
  *     FunctionBegin(b"KSPBuildSolution_Python")
  *     cdef PetscVec x = v
  *     cdef buildSolution = PyKSP(ksp).buildSolution             # <<<<<<<<<<<<<<
  *     if buildSolution is not None:
  *         if x == NULL: pass # XXX
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1592, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_buildSolution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_buildSolution); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1592, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buildSolution = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1582
+  /* "libpetsc4py.pyx":1593
  *     cdef PetscVec x = v
  *     cdef buildSolution = PyKSP(ksp).buildSolution
  *     if buildSolution is not None:             # <<<<<<<<<<<<<<
@@ -17115,7 +17553,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1583
+    /* "libpetsc4py.pyx":1594
  *     cdef buildSolution = PyKSP(ksp).buildSolution
  *     if buildSolution is not None:
  *         if x == NULL: pass # XXX             # <<<<<<<<<<<<<<
@@ -17124,20 +17562,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
  */
     __pyx_t_4 = ((__pyx_v_x == NULL) != 0);
     if (__pyx_t_4) {
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
-    /* "libpetsc4py.pyx":1584
+    /* "libpetsc4py.pyx":1595
  *     if buildSolution is not None:
  *         if x == NULL: pass # XXX
  *         buildSolution(KSP_(ksp), Vec_(x))             # <<<<<<<<<<<<<<
  *         if V != NULL: V[0] = x
  *     else:
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1595, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1595, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_buildSolution);
     __pyx_t_6 = __pyx_v_buildSolution; __pyx_t_7 = NULL;
@@ -17152,7 +17588,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
         __pyx_t_8 = 1;
       }
     }
-    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1595, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     if (__pyx_t_7) {
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -17163,13 +17599,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
     PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
     __pyx_t_1 = 0;
     __pyx_t_5 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1595, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":1585
+    /* "libpetsc4py.pyx":1596
  *         if x == NULL: pass # XXX
  *         buildSolution(KSP_(ksp), Vec_(x))
  *         if V != NULL: V[0] = x             # <<<<<<<<<<<<<<
@@ -17179,25 +17615,31 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
     __pyx_t_4 = ((__pyx_v_V != NULL) != 0);
     if (__pyx_t_4) {
       (__pyx_v_V[0]) = __pyx_v_x;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
+
+    /* "libpetsc4py.pyx":1593
+ *     cdef PetscVec x = v
+ *     cdef buildSolution = PyKSP(ksp).buildSolution
+ *     if buildSolution is not None:             # <<<<<<<<<<<<<<
+ *         if x == NULL: pass # XXX
+ *         buildSolution(KSP_(ksp), Vec_(x))
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1587
+  /* "libpetsc4py.pyx":1598
  *         if V != NULL: V[0] = x
  *     else:
  *         CHKERR( KSPBuildSolutionDefault(ksp, v, V) )             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_10 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildSolutionDefault(__pyx_v_ksp, __pyx_v_v, __pyx_v_V)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_10 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildSolutionDefault(__pyx_v_ksp, __pyx_v_v, __pyx_v_V)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1598, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1588
+  /* "libpetsc4py.pyx":1599
  *     else:
  *         CHKERR( KSPBuildSolutionDefault(ksp, v, V) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17207,7 +17649,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1573
+  /* "libpetsc4py.pyx":1584
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPBuildSolution_Python(             # <<<<<<<<<<<<<<
@@ -17234,7 +17676,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1590
+/* "libpetsc4py.pyx":1601
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPBuildResidual_Python(             # <<<<<<<<<<<<<<
@@ -17257,39 +17699,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
-  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("KSPBuildResidual_Python", 0);
 
-  /* "libpetsc4py.pyx":1597
+  /* "libpetsc4py.pyx":1608
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPBuildResidual_Python")             # <<<<<<<<<<<<<<
  *     cdef buildResidual = PyKSP(ksp).buildResidual
  *     if buildResidual is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPBuildResidual_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPBuildResidual_Python"));
 
-  /* "libpetsc4py.pyx":1598
+  /* "libpetsc4py.pyx":1609
  *     except IERR with gil:
  *     FunctionBegin(b"KSPBuildResidual_Python")
  *     cdef buildResidual = PyKSP(ksp).buildResidual             # <<<<<<<<<<<<<<
  *     if buildResidual is not None:
  *         buildResidual(KSP_(ksp), Vec_(t), Vec_(v))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1609, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_buildResidual); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_buildResidual); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1609, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buildResidual = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1599
+  /* "libpetsc4py.pyx":1610
  *     FunctionBegin(b"KSPBuildResidual_Python")
  *     cdef buildResidual = PyKSP(ksp).buildResidual
  *     if buildResidual is not None:             # <<<<<<<<<<<<<<
@@ -17300,18 +17739,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1600
+    /* "libpetsc4py.pyx":1611
  *     cdef buildResidual = PyKSP(ksp).buildResidual
  *     if buildResidual is not None:
  *         buildResidual(KSP_(ksp), Vec_(t), Vec_(v))             # <<<<<<<<<<<<<<
  *         if V != NULL: V[0] = v
  *     else:
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1611, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_t)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_t)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1611, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1611, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_buildResidual);
     __pyx_t_7 = __pyx_v_buildResidual; __pyx_t_8 = NULL;
@@ -17326,7 +17765,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1611, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -17340,13 +17779,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
     __pyx_t_1 = 0;
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1611, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":1601
+    /* "libpetsc4py.pyx":1612
  *     if buildResidual is not None:
  *         buildResidual(KSP_(ksp), Vec_(t), Vec_(v))
  *         if V != NULL: V[0] = v             # <<<<<<<<<<<<<<
@@ -17356,25 +17795,31 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
     __pyx_t_4 = ((__pyx_v_V != NULL) != 0);
     if (__pyx_t_4) {
       (__pyx_v_V[0]) = __pyx_v_v;
-      goto __pyx_L4;
     }
-    __pyx_L4:;
+
+    /* "libpetsc4py.pyx":1610
+ *     FunctionBegin(b"KSPBuildResidual_Python")
+ *     cdef buildResidual = PyKSP(ksp).buildResidual
+ *     if buildResidual is not None:             # <<<<<<<<<<<<<<
+ *         buildResidual(KSP_(ksp), Vec_(t), Vec_(v))
+ *         if V != NULL: V[0] = v
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1603
+  /* "libpetsc4py.pyx":1614
  *         if V != NULL: V[0] = v
  *     else:
  *         CHKERR( KSPBuildResidualDefault(ksp, t, v, V) )             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildResidualDefault(__pyx_v_ksp, __pyx_v_t, __pyx_v_v, __pyx_v_V)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildResidualDefault(__pyx_v_ksp, __pyx_v_t, __pyx_v_v, __pyx_v_V)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1614, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1604
+  /* "libpetsc4py.pyx":1615
  *     else:
  *         CHKERR( KSPBuildResidualDefault(ksp, t, v, V) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17384,7 +17829,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1590
+  /* "libpetsc4py.pyx":1601
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPBuildResidual_Python(             # <<<<<<<<<<<<<<
@@ -17412,7 +17857,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1606
+/* "libpetsc4py.pyx":1617
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSolve_Python(             # <<<<<<<<<<<<<<
@@ -17438,24 +17883,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   Py_ssize_t __pyx_t_10;
   PyObject *__pyx_t_11 = NULL;
   PetscErrorCode __pyx_t_12;
-  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("KSPSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":1610
+  /* "libpetsc4py.pyx":1621
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSolve_Python")             # <<<<<<<<<<<<<<
  *     cdef PetscVec B = NULL, X = NULL
  *     CHKERR( KSPGetRhs(ksp,&B)      )
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPSolve_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPSolve_Python"));
 
-  /* "libpetsc4py.pyx":1611
+  /* "libpetsc4py.pyx":1622
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSolve_Python")
  *     cdef PetscVec B = NULL, X = NULL             # <<<<<<<<<<<<<<
@@ -17465,25 +17907,25 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __pyx_v_B = NULL;
   __pyx_v_X = NULL;
 
-  /* "libpetsc4py.pyx":1612
+  /* "libpetsc4py.pyx":1623
  *     FunctionBegin(b"KSPSolve_Python")
  *     cdef PetscVec B = NULL, X = NULL
  *     CHKERR( KSPGetRhs(ksp,&B)      )             # <<<<<<<<<<<<<<
  *     CHKERR( KSPGetSolution(ksp,&X) )
  *     #
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetRhs(__pyx_v_ksp, (&__pyx_v_B))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetRhs(__pyx_v_ksp, (&__pyx_v_B))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1623, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1613
+  /* "libpetsc4py.pyx":1624
  *     cdef PetscVec B = NULL, X = NULL
  *     CHKERR( KSPGetRhs(ksp,&B)      )
  *     CHKERR( KSPGetSolution(ksp,&X) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef solve = None
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetSolution(__pyx_v_ksp, (&__pyx_v_X))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetSolution(__pyx_v_ksp, (&__pyx_v_X))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1624, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1615
+  /* "libpetsc4py.pyx":1626
  *     CHKERR( KSPGetSolution(ksp,&X) )
  *     #
  *     cdef solve = None             # <<<<<<<<<<<<<<
@@ -17493,7 +17935,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __Pyx_INCREF(Py_None);
   __pyx_v_solve = Py_None;
 
-  /* "libpetsc4py.pyx":1616
+  /* "libpetsc4py.pyx":1627
  *     #
  *     cdef solve = None
  *     if ksp.transpose_solve:             # <<<<<<<<<<<<<<
@@ -17502,34 +17944,42 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
  */
   if (__pyx_v_ksp->transpose_solve) {
 
-    /* "libpetsc4py.pyx":1617
+    /* "libpetsc4py.pyx":1628
  *     cdef solve = None
  *     if ksp.transpose_solve:
  *         solve = PyKSP(ksp).solveTranspose             # <<<<<<<<<<<<<<
  *     else:
  *         solve = PyKSP(ksp).solve
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1628, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_solveTranspose); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_solveTranspose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1628, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_solve, __pyx_t_3);
     __pyx_t_3 = 0;
+
+    /* "libpetsc4py.pyx":1627
+ *     #
+ *     cdef solve = None
+ *     if ksp.transpose_solve:             # <<<<<<<<<<<<<<
+ *         solve = PyKSP(ksp).solveTranspose
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1619
+  /* "libpetsc4py.pyx":1630
  *         solve = PyKSP(ksp).solveTranspose
  *     else:
  *         solve = PyKSP(ksp).solve             # <<<<<<<<<<<<<<
  *     if solve is not None:
  *         solve(KSP_(ksp),Vec_(B),Vec_(X))
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1630, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_solve); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_solve); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1630, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_solve, __pyx_t_2);
@@ -17537,7 +17987,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1620
+  /* "libpetsc4py.pyx":1631
  *     else:
  *         solve = PyKSP(ksp).solve
  *     if solve is not None:             # <<<<<<<<<<<<<<
@@ -17548,18 +17998,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1621
+    /* "libpetsc4py.pyx":1632
  *         solve = PyKSP(ksp).solve
  *     if solve is not None:
  *         solve(KSP_(ksp),Vec_(B),Vec_(X))             # <<<<<<<<<<<<<<
  *     else:
  *         KSPSolve_Python_default(ksp,B,X)
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1632, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_B)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_B)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1632, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1632, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_solve);
     __pyx_t_8 = __pyx_v_solve; __pyx_t_9 = NULL;
@@ -17574,7 +18024,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
         __pyx_t_10 = 1;
       }
     }
-    __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1632, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     if (__pyx_t_9) {
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -17588,27 +18038,35 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
     __pyx_t_3 = 0;
     __pyx_t_6 = 0;
     __pyx_t_7 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1632, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+    /* "libpetsc4py.pyx":1631
+ *     else:
+ *         solve = PyKSP(ksp).solve
+ *     if solve is not None:             # <<<<<<<<<<<<<<
+ *         solve(KSP_(ksp),Vec_(B),Vec_(X))
+ *     else:
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1623
+  /* "libpetsc4py.pyx":1634
  *         solve(KSP_(ksp),Vec_(B),Vec_(X))
  *     else:
  *         KSPSolve_Python_default(ksp,B,X)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_12 = __pyx_f_11libpetsc4py_KSPSolve_Python_default(__pyx_v_ksp, __pyx_v_B, __pyx_v_X); if (unlikely(__pyx_t_12 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_12 = __pyx_f_11libpetsc4py_KSPSolve_Python_default(__pyx_v_ksp, __pyx_v_B, __pyx_v_X); if (unlikely(__pyx_t_12 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1634, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "libpetsc4py.pyx":1624
+  /* "libpetsc4py.pyx":1635
  *     else:
  *         KSPSolve_Python_default(ksp,B,X)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17618,7 +18076,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1606
+  /* "libpetsc4py.pyx":1617
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSolve_Python(             # <<<<<<<<<<<<<<
@@ -17646,7 +18104,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1626
+/* "libpetsc4py.pyx":1637
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSolve_Python_default(             # <<<<<<<<<<<<<<
@@ -17657,7 +18115,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_ksp, Vec __pyx_v_B, Vec __pyx_v_X) {
   Vec __pyx_v_t;
   Vec __pyx_v_v;
-  CYTHON_UNUSED PetscInt __pyx_v_its;
+  PetscInt __pyx_v_its;
   Vec __pyx_v_R;
   PetscReal __pyx_v_rnorm;
   PetscErrorCode __pyx_r;
@@ -17666,24 +18124,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
   int __pyx_t_2;
   PetscInt __pyx_t_3;
   PetscErrorCode __pyx_t_4;
-  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("KSPSolve_Python_default", 0);
 
-  /* "libpetsc4py.pyx":1632
+  /* "libpetsc4py.pyx":1643
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSolve_Python_default")             # <<<<<<<<<<<<<<
  *     #
  *     cdef PetscVec t = NULL
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPSolve_Python_default);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPSolve_Python_default"));
 
-  /* "libpetsc4py.pyx":1634
+  /* "libpetsc4py.pyx":1645
  *     FunctionBegin(b"KSPSolve_Python_default")
  *     #
  *     cdef PetscVec t = NULL             # <<<<<<<<<<<<<<
@@ -17692,16 +18147,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_t = NULL;
 
-  /* "libpetsc4py.pyx":1635
+  /* "libpetsc4py.pyx":1646
  *     #
  *     cdef PetscVec t = NULL
  *     CHKERR( PetscObjectQuery(             # <<<<<<<<<<<<<<
  *             <PetscObject>ksp,
  *              b"@ksp.vec_work_sol",
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ksp), __pyx_k_ksp_vec_work_sol, ((PetscObject *)(&__pyx_v_t)))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ksp), ((char *)"@ksp.vec_work_sol"), ((PetscObject *)(&__pyx_v_t)))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1646, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1639
+  /* "libpetsc4py.pyx":1650
  *              b"@ksp.vec_work_sol",
  *              <PetscObject*>&t) )
  *     if t == NULL:             # <<<<<<<<<<<<<<
@@ -17711,28 +18166,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
   __pyx_t_2 = ((__pyx_v_t == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":1640
+    /* "libpetsc4py.pyx":1651
  *              <PetscObject*>&t) )
  *     if t == NULL:
  *         CHKERR( VecDuplicate(X,&t) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscObjectCompose(
  *                 <PetscObject>ksp,
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_X, (&__pyx_v_t))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_X, (&__pyx_v_t))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1651, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1641
+    /* "libpetsc4py.pyx":1652
  *     if t == NULL:
  *         CHKERR( VecDuplicate(X,&t) )
  *         CHKERR( PetscObjectCompose(             # <<<<<<<<<<<<<<
  *                 <PetscObject>ksp,
  *                  b"@ksp.vec_work_sol",
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ksp), __pyx_k_ksp_vec_work_sol, ((PetscObject)__pyx_v_t))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ksp), ((char *)"@ksp.vec_work_sol"), ((PetscObject)__pyx_v_t))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1652, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":1650
+ *              b"@ksp.vec_work_sol",
+ *              <PetscObject*>&t) )
+ *     if t == NULL:             # <<<<<<<<<<<<<<
+ *         CHKERR( VecDuplicate(X,&t) )
+ *         CHKERR( PetscObjectCompose(
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1645
+  /* "libpetsc4py.pyx":1656
  *                  b"@ksp.vec_work_sol",
  *                  <PetscObject>t) )
  *     cdef PetscVec v = NULL             # <<<<<<<<<<<<<<
@@ -17741,16 +18202,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_v = NULL;
 
-  /* "libpetsc4py.pyx":1646
+  /* "libpetsc4py.pyx":1657
  *                  <PetscObject>t) )
  *     cdef PetscVec v = NULL
  *     CHKERR( PetscObjectQuery(             # <<<<<<<<<<<<<<
  *             <PetscObject>ksp,
  *              b"@ksp.vec_work_res",
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ksp), __pyx_k_ksp_vec_work_res, ((PetscObject *)(&__pyx_v_v)))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ksp), ((char *)"@ksp.vec_work_res"), ((PetscObject *)(&__pyx_v_v)))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1657, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1650
+  /* "libpetsc4py.pyx":1661
  *              b"@ksp.vec_work_res",
  *              <PetscObject*>&v) )
  *     if v == NULL:             # <<<<<<<<<<<<<<
@@ -17760,28 +18221,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
   __pyx_t_2 = ((__pyx_v_v == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":1651
+    /* "libpetsc4py.pyx":1662
  *              <PetscObject*>&v) )
  *     if v == NULL:
  *         CHKERR( VecDuplicate(B,&v) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscObjectCompose(
  *                 <PetscObject>ksp,
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_B, (&__pyx_v_v))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_B, (&__pyx_v_v))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1662, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1652
+    /* "libpetsc4py.pyx":1663
  *     if v == NULL:
  *         CHKERR( VecDuplicate(B,&v) )
  *         CHKERR( PetscObjectCompose(             # <<<<<<<<<<<<<<
  *                 <PetscObject>ksp,
  *                  b"@ksp.vec_work_res",
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ksp), __pyx_k_ksp_vec_work_res, ((PetscObject)__pyx_v_v))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ksp), ((char *)"@ksp.vec_work_res"), ((PetscObject)__pyx_v_v))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1663, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":1661
+ *              b"@ksp.vec_work_res",
+ *              <PetscObject*>&v) )
+ *     if v == NULL:             # <<<<<<<<<<<<<<
+ *         CHKERR( VecDuplicate(B,&v) )
+ *         CHKERR( PetscObjectCompose(
+ */
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":1657
+  /* "libpetsc4py.pyx":1668
  *                  <PetscObject>v) )
  *     #
  *     cdef PetscInt its = 0             # <<<<<<<<<<<<<<
@@ -17790,7 +18257,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_its = 0;
 
-  /* "libpetsc4py.pyx":1658
+  /* "libpetsc4py.pyx":1669
  *     #
  *     cdef PetscInt its = 0
  *     cdef PetscVec R = NULL             # <<<<<<<<<<<<<<
@@ -17799,7 +18266,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_R = NULL;
 
-  /* "libpetsc4py.pyx":1659
+  /* "libpetsc4py.pyx":1670
  *     cdef PetscInt its = 0
  *     cdef PetscVec R = NULL
  *     cdef PetscReal rnorm = 0             # <<<<<<<<<<<<<<
@@ -17808,7 +18275,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_rnorm = 0.0;
 
-  /* "libpetsc4py.pyx":1661
+  /* "libpetsc4py.pyx":1672
  *     cdef PetscReal rnorm = 0
  *     #
  *     ksp.iter   = 0             # <<<<<<<<<<<<<<
@@ -17817,7 +18284,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_ksp->its = 0;
 
-  /* "libpetsc4py.pyx":1662
+  /* "libpetsc4py.pyx":1673
  *     #
  *     ksp.iter   = 0
  *     ksp.reason = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -17826,52 +18293,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_ksp->reason = KSP_CONVERGED_ITERATING;
 
-  /* "libpetsc4py.pyx":1663
+  /* "libpetsc4py.pyx":1674
  *     ksp.iter   = 0
  *     ksp.reason = KSP_CONVERGED_ITERATING
  *     CHKERR( KSPBuildResidual(ksp,t,v,&R) )             # <<<<<<<<<<<<<<
  *     CHKERR( VecNorm(R,NORM_2,&rnorm)     )
  *     #
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildResidual(__pyx_v_ksp, __pyx_v_t, __pyx_v_v, (&__pyx_v_R))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildResidual(__pyx_v_ksp, __pyx_v_t, __pyx_v_v, (&__pyx_v_R))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1674, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1664
+  /* "libpetsc4py.pyx":1675
  *     ksp.reason = KSP_CONVERGED_ITERATING
  *     CHKERR( KSPBuildResidual(ksp,t,v,&R) )
  *     CHKERR( VecNorm(R,NORM_2,&rnorm)     )             # <<<<<<<<<<<<<<
  *     #
  *     CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_R, NORM_2, (&__pyx_v_rnorm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_R, NORM_2, (&__pyx_v_rnorm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1675, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1666
+  /* "libpetsc4py.pyx":1677
  *     CHKERR( VecNorm(R,NORM_2,&rnorm)     )
  *     #
  *     CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )             # <<<<<<<<<<<<<<
  *     CHKERR( KSPLogHistory(ksp,ksp.norm) )
  *     CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPConverged(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_rnorm, (&__pyx_v_ksp->reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPConverged(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_rnorm, (&__pyx_v_ksp->reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1677, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1667
+  /* "libpetsc4py.pyx":1678
  *     #
  *     CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )
  *     CHKERR( KSPLogHistory(ksp,ksp.norm) )             # <<<<<<<<<<<<<<
  *     CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
  *     for its from 0 <= its < ksp.max_its:
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPLogHistory(__pyx_v_ksp, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPLogHistory(__pyx_v_ksp, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1678, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1668
+  /* "libpetsc4py.pyx":1679
  *     CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )
  *     CHKERR( KSPLogHistory(ksp,ksp.norm) )
  *     CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )             # <<<<<<<<<<<<<<
  *     for its from 0 <= its < ksp.max_its:
  *         if ksp.reason: break
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPMonitor(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPMonitor(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1679, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1669
+  /* "libpetsc4py.pyx":1680
  *     CHKERR( KSPLogHistory(ksp,ksp.norm) )
  *     CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
  *     for its from 0 <= its < ksp.max_its:             # <<<<<<<<<<<<<<
@@ -17881,7 +18348,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
   __pyx_t_3 = __pyx_v_ksp->max_it;
   for (__pyx_v_its = 0; __pyx_v_its < __pyx_t_3; __pyx_v_its++) {
 
-    /* "libpetsc4py.pyx":1670
+    /* "libpetsc4py.pyx":1681
  *     CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
  *     for its from 0 <= its < ksp.max_its:
  *         if ksp.reason: break             # <<<<<<<<<<<<<<
@@ -17892,43 +18359,43 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
       goto __pyx_L6_break;
     }
 
-    /* "libpetsc4py.pyx":1671
+    /* "libpetsc4py.pyx":1682
  *     for its from 0 <= its < ksp.max_its:
  *         if ksp.reason: break
  *         KSPPreStep_Python(ksp)             # <<<<<<<<<<<<<<
  *         #
  *         KSPStep_Python(ksp,B,X)
  */
-    __pyx_t_4 = __pyx_f_11libpetsc4py_KSPPreStep_Python(__pyx_v_ksp); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_11libpetsc4py_KSPPreStep_Python(__pyx_v_ksp); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1682, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1673
+    /* "libpetsc4py.pyx":1684
  *         KSPPreStep_Python(ksp)
  *         #
  *         KSPStep_Python(ksp,B,X)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPBuildResidual(ksp,t,v,&R) )
  *         CHKERR( VecNorm(R,NORM_2,&rnorm)     )
  */
-    __pyx_t_4 = __pyx_f_11libpetsc4py_KSPStep_Python(__pyx_v_ksp, __pyx_v_B, __pyx_v_X); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_11libpetsc4py_KSPStep_Python(__pyx_v_ksp, __pyx_v_B, __pyx_v_X); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1684, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1674
+    /* "libpetsc4py.pyx":1685
  *         #
  *         KSPStep_Python(ksp,B,X)
  *         CHKERR( KSPBuildResidual(ksp,t,v,&R) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecNorm(R,NORM_2,&rnorm)     )
  *         ksp.iter += 1
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildResidual(__pyx_v_ksp, __pyx_v_t, __pyx_v_v, (&__pyx_v_R))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildResidual(__pyx_v_ksp, __pyx_v_t, __pyx_v_v, (&__pyx_v_R))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1685, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1675
+    /* "libpetsc4py.pyx":1686
  *         KSPStep_Python(ksp,B,X)
  *         CHKERR( KSPBuildResidual(ksp,t,v,&R) )
  *         CHKERR( VecNorm(R,NORM_2,&rnorm)     )             # <<<<<<<<<<<<<<
  *         ksp.iter += 1
  *         #
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_R, NORM_2, (&__pyx_v_rnorm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_R, NORM_2, (&__pyx_v_rnorm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1686, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1676
+    /* "libpetsc4py.pyx":1687
  *         CHKERR( KSPBuildResidual(ksp,t,v,&R) )
  *         CHKERR( VecNorm(R,NORM_2,&rnorm)     )
  *         ksp.iter += 1             # <<<<<<<<<<<<<<
@@ -17937,55 +18404,64 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
     __pyx_v_ksp->its = (__pyx_v_ksp->its + 1);
 
-    /* "libpetsc4py.pyx":1678
+    /* "libpetsc4py.pyx":1689
  *         ksp.iter += 1
  *         #
  *         KSPPostStep_Python(ksp)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )
  *         CHKERR( KSPLogHistory(ksp,ksp.norm) )
  */
-    __pyx_t_4 = __pyx_f_11libpetsc4py_KSPPostStep_Python(__pyx_v_ksp); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_11libpetsc4py_KSPPostStep_Python(__pyx_v_ksp); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1689, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1679
+    /* "libpetsc4py.pyx":1690
  *         #
  *         KSPPostStep_Python(ksp)
  *         CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )             # <<<<<<<<<<<<<<
  *         CHKERR( KSPLogHistory(ksp,ksp.norm) )
  *         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPConverged(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_rnorm, (&__pyx_v_ksp->reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPConverged(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_rnorm, (&__pyx_v_ksp->reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1690, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1680
+    /* "libpetsc4py.pyx":1691
  *         KSPPostStep_Python(ksp)
  *         CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )
  *         CHKERR( KSPLogHistory(ksp,ksp.norm) )             # <<<<<<<<<<<<<<
  *         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
- *     #
+ *     <void>its # silent unused warning
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPLogHistory(__pyx_v_ksp, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPLogHistory(__pyx_v_ksp, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1691, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1681
+    /* "libpetsc4py.pyx":1692
  *         CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )
  *         CHKERR( KSPLogHistory(ksp,ksp.norm) )
  *         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )             # <<<<<<<<<<<<<<
+ *     <void>its # silent unused warning
  *     #
- *     return FunctionEnd()
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPMonitor(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPMonitor(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1692, __pyx_L1_error)
   }
   __pyx_L6_break:;
 
-  /* "libpetsc4py.pyx":1683
+  /* "libpetsc4py.pyx":1693
+ *         CHKERR( KSPLogHistory(ksp,ksp.norm) )
  *         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
+ *     <void>its # silent unused warning             # <<<<<<<<<<<<<<
  *     #
- *     return FunctionEnd()             # <<<<<<<<<<<<<<
+ *     return FunctionEnd()
+ */
+  ((void)__pyx_v_its);
+
+  /* "libpetsc4py.pyx":1695
+ *     <void>its # silent unused warning
+ *     #
+ *     return FunctionEnd()             # <<<<<<<<<<<<<<
  * 
  * cdef PetscErrorCode KSPPreStep_Python(
  */
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1626
+  /* "libpetsc4py.pyx":1637
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSolve_Python_default(             # <<<<<<<<<<<<<<
@@ -18005,7 +18481,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1685
+/* "libpetsc4py.pyx":1697
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPreStep_Python(             # <<<<<<<<<<<<<<
@@ -18024,39 +18500,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPPreStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1689
+  /* "libpetsc4py.pyx":1701
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPreStep_Python")             # <<<<<<<<<<<<<<
  *     cdef preStep = PyKSP(ksp).preStep
  *     if preStep is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPPreStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPreStep_Python"));
 
-  /* "libpetsc4py.pyx":1690
+  /* "libpetsc4py.pyx":1702
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPreStep_Python")
  *     cdef preStep = PyKSP(ksp).preStep             # <<<<<<<<<<<<<<
  *     if preStep is not None:
  *         preStep(KSP_(ksp))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1702, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preStep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1702, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_preStep = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1691
+  /* "libpetsc4py.pyx":1703
  *     FunctionBegin(b"KSPPreStep_Python")
  *     cdef preStep = PyKSP(ksp).preStep
  *     if preStep is not None:             # <<<<<<<<<<<<<<
@@ -18067,14 +18540,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1692
+    /* "libpetsc4py.pyx":1704
  *     cdef preStep = PyKSP(ksp).preStep
  *     if preStep is not None:
  *         preStep(KSP_(ksp))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1704, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_preStep);
     __pyx_t_5 = __pyx_v_preStep; __pyx_t_6 = NULL;
@@ -18088,27 +18561,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1704, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1704, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1704, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1703
+ *     FunctionBegin(b"KSPPreStep_Python")
+ *     cdef preStep = PyKSP(ksp).preStep
+ *     if preStep is not None:             # <<<<<<<<<<<<<<
+ *         preStep(KSP_(ksp))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1693
+  /* "libpetsc4py.pyx":1705
  *     if preStep is not None:
  *         preStep(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18118,7 +18597,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1685
+  /* "libpetsc4py.pyx":1697
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPreStep_Python(             # <<<<<<<<<<<<<<
@@ -18144,7 +18623,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1695
+/* "libpetsc4py.pyx":1707
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPostStep_Python(             # <<<<<<<<<<<<<<
@@ -18163,39 +18642,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPPostStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1699
+  /* "libpetsc4py.pyx":1711
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPostStep_Python")             # <<<<<<<<<<<<<<
  *     cdef postStep = PyKSP(ksp).postStep
  *     if postStep is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPPostStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPostStep_Python"));
 
-  /* "libpetsc4py.pyx":1700
+  /* "libpetsc4py.pyx":1712
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPostStep_Python")
  *     cdef postStep = PyKSP(ksp).postStep             # <<<<<<<<<<<<<<
  *     if postStep is not None:
  *         postStep(KSP_(ksp))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1712, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postStep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1712, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_postStep = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1701
+  /* "libpetsc4py.pyx":1713
  *     FunctionBegin(b"KSPPostStep_Python")
  *     cdef postStep = PyKSP(ksp).postStep
  *     if postStep is not None:             # <<<<<<<<<<<<<<
@@ -18206,14 +18682,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1702
+    /* "libpetsc4py.pyx":1714
  *     cdef postStep = PyKSP(ksp).postStep
  *     if postStep is not None:
  *         postStep(KSP_(ksp))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1714, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_postStep);
     __pyx_t_5 = __pyx_v_postStep; __pyx_t_6 = NULL;
@@ -18227,27 +18703,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1714, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1714, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1714, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1713
+ *     FunctionBegin(b"KSPPostStep_Python")
+ *     cdef postStep = PyKSP(ksp).postStep
+ *     if postStep is not None:             # <<<<<<<<<<<<<<
+ *         postStep(KSP_(ksp))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1703
+  /* "libpetsc4py.pyx":1715
  *     if postStep is not None:
  *         postStep(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18257,7 +18739,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1695
+  /* "libpetsc4py.pyx":1707
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPostStep_Python(             # <<<<<<<<<<<<<<
@@ -18283,7 +18765,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1705
+/* "libpetsc4py.pyx":1717
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPStep_Python(             # <<<<<<<<<<<<<<
@@ -18305,24 +18787,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("KSPStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1711
+  /* "libpetsc4py.pyx":1723
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPStep_Python")             # <<<<<<<<<<<<<<
  *     cdef step = None
  *     if ksp.transpose_solve:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_KSPStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPStep_Python"));
 
-  /* "libpetsc4py.pyx":1712
+  /* "libpetsc4py.pyx":1724
  *     except IERR with gil:
  *     FunctionBegin(b"KSPStep_Python")
  *     cdef step = None             # <<<<<<<<<<<<<<
@@ -18332,7 +18811,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   __Pyx_INCREF(Py_None);
   __pyx_v_step = Py_None;
 
-  /* "libpetsc4py.pyx":1713
+  /* "libpetsc4py.pyx":1725
  *     FunctionBegin(b"KSPStep_Python")
  *     cdef step = None
  *     if ksp.transpose_solve:             # <<<<<<<<<<<<<<
@@ -18341,22 +18820,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
  */
   if (__pyx_v_ksp->transpose_solve) {
 
-    /* "libpetsc4py.pyx":1714
+    /* "libpetsc4py.pyx":1726
  *     cdef step = None
  *     if ksp.transpose_solve:
  *         step = PyKSP(ksp).stepTranspose             # <<<<<<<<<<<<<<
  *         if step is None: return UNSUPPORTED(b"stepTranspose")
  *     else:
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1726, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stepTranspose); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stepTranspose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1726, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_step, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":1715
+    /* "libpetsc4py.pyx":1727
  *     if ksp.transpose_solve:
  *         step = PyKSP(ksp).stepTranspose
  *         if step is None: return UNSUPPORTED(b"stepTranspose")             # <<<<<<<<<<<<<<
@@ -18366,29 +18845,37 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
     __pyx_t_3 = (__pyx_v_step == Py_None);
     __pyx_t_4 = (__pyx_t_3 != 0);
     if (__pyx_t_4) {
-      __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_stepTranspose);
+      __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"stepTranspose"));
       goto __pyx_L0;
     }
+
+    /* "libpetsc4py.pyx":1725
+ *     FunctionBegin(b"KSPStep_Python")
+ *     cdef step = None
+ *     if ksp.transpose_solve:             # <<<<<<<<<<<<<<
+ *         step = PyKSP(ksp).stepTranspose
+ *         if step is None: return UNSUPPORTED(b"stepTranspose")
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1717
+  /* "libpetsc4py.pyx":1729
  *         if step is None: return UNSUPPORTED(b"stepTranspose")
  *     else:
  *         step = PyKSP(ksp).step             # <<<<<<<<<<<<<<
  *         if step is None: return UNSUPPORTED(b"step")
  *     step(KSP_(ksp),Vec_(B),Vec_(X))
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1729, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1729, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_step, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "libpetsc4py.pyx":1718
+    /* "libpetsc4py.pyx":1730
  *     else:
  *         step = PyKSP(ksp).step
  *         if step is None: return UNSUPPORTED(b"step")             # <<<<<<<<<<<<<<
@@ -18398,24 +18885,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
     __pyx_t_4 = (__pyx_v_step == Py_None);
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
-      __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_step);
+      __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"step"));
       goto __pyx_L0;
     }
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1719
+  /* "libpetsc4py.pyx":1731
  *         step = PyKSP(ksp).step
  *         if step is None: return UNSUPPORTED(b"step")
  *     step(KSP_(ksp),Vec_(B),Vec_(X))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_B)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_B)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_step);
   __pyx_t_7 = __pyx_v_step; __pyx_t_8 = NULL;
@@ -18430,7 +18917,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -18444,13 +18931,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   __pyx_t_2 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1720
+  /* "libpetsc4py.pyx":1732
  *         if step is None: return UNSUPPORTED(b"step")
  *     step(KSP_(ksp),Vec_(B),Vec_(X))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18460,7 +18947,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1705
+  /* "libpetsc4py.pyx":1717
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPStep_Python(             # <<<<<<<<<<<<<<
@@ -18488,7 +18975,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1771
+/* "libpetsc4py.pyx":1783
  * @cython.internal
  * cdef class _PySNES(_PyObj): pass
  * cdef inline _PySNES PySNES(PetscSNES snes):             # <<<<<<<<<<<<<<
@@ -18502,12 +18989,9 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
   int __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("PySNES", 0);
 
-  /* "libpetsc4py.pyx":1772
+  /* "libpetsc4py.pyx":1784
  * cdef class _PySNES(_PyObj): pass
  * cdef inline _PySNES PySNES(PetscSNES snes):
  *     if snes != NULL and snes.data != NULL:             # <<<<<<<<<<<<<<
@@ -18525,7 +19009,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":1773
+    /* "libpetsc4py.pyx":1785
  * cdef inline _PySNES PySNES(PetscSNES snes):
  *     if snes != NULL and snes.data != NULL:
  *         return <_PySNES>snes.data             # <<<<<<<<<<<<<<
@@ -18536,26 +19020,34 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
     __Pyx_INCREF(((PyObject *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_v_snes->data)));
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_v_snes->data);
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":1784
+ * cdef class _PySNES(_PyObj): pass
+ * cdef inline _PySNES PySNES(PetscSNES snes):
+ *     if snes != NULL and snes.data != NULL:             # <<<<<<<<<<<<<<
+ *         return <_PySNES>snes.data
+ *     else:
+ */
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1775
+  /* "libpetsc4py.pyx":1787
  *         return <_PySNES>snes.data
  *     else:
  *         return _PySNES.__new__(_PySNES)             # <<<<<<<<<<<<<<
  * 
  * cdef public PetscErrorCode SNESPythonGetContext(PetscSNES snes, void **ctx) \
  */
+  /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PySNES(((PyTypeObject *)((PyObject*)__pyx_ptype_11libpetsc4py__PySNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PySNES(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PySNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1787, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PySNES)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PySNES)))) __PYX_ERR(0, 1787, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1771
+  /* "libpetsc4py.pyx":1783
  * @cython.internal
  * cdef class _PySNES(_PyObj): pass
  * cdef inline _PySNES PySNES(PetscSNES snes):             # <<<<<<<<<<<<<<
@@ -18574,7 +19066,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1777
+/* "libpetsc4py.pyx":1789
  *         return _PySNES.__new__(_PySNES)
  * 
  * cdef public PetscErrorCode SNESPythonGetContext(PetscSNES snes, void **ctx) \             # <<<<<<<<<<<<<<
@@ -18587,33 +19079,30 @@ PetscErrorCode SNESPythonGetContext(SNES __pyx_v_snes, void **__pyx_v_ctx) {
   __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("SNESPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":1779
+  /* "libpetsc4py.pyx":1791
  * cdef public PetscErrorCode SNESPythonGetContext(PetscSNES snes, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"SNESPythonGetContext ")             # <<<<<<<<<<<<<<
  *     PySNES(snes).getcontext(ctx)
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESPythonGetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPythonGetContext "));
 
-  /* "libpetsc4py.pyx":1780
+  /* "libpetsc4py.pyx":1792
  *     except IERR:
  *     FunctionBegin(b"SNESPythonGetContext ")
  *     PySNES(snes).getcontext(ctx)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PySNES *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PySNES *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1792, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1781
+  /* "libpetsc4py.pyx":1793
  *     FunctionBegin(b"SNESPythonGetContext ")
  *     PySNES(snes).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18623,7 +19112,7 @@ PetscErrorCode SNESPythonGetContext(SNES __pyx_v_snes, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1777
+  /* "libpetsc4py.pyx":1789
  *         return _PySNES.__new__(_PySNES)
  * 
  * cdef public PetscErrorCode SNESPythonGetContext(PetscSNES snes, void **ctx) \             # <<<<<<<<<<<<<<
@@ -18641,7 +19130,7 @@ PetscErrorCode SNESPythonGetContext(SNES __pyx_v_snes, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1783
+/* "libpetsc4py.pyx":1795
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode SNESPythonSetContext(PetscSNES snes, void *ctx) \             # <<<<<<<<<<<<<<
@@ -18655,36 +19144,33 @@ PetscErrorCode SNESPythonSetContext(SNES __pyx_v_snes, void *__pyx_v_ctx) {
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("SNESPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":1785
+  /* "libpetsc4py.pyx":1797
  * cdef public PetscErrorCode SNESPythonSetContext(PetscSNES snes, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"SNESPythonSetContext ")             # <<<<<<<<<<<<<<
  *     PySNES(snes).setcontext(ctx, SNES_(snes))
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESPythonSetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPythonSetContext "));
 
-  /* "libpetsc4py.pyx":1786
+  /* "libpetsc4py.pyx":1798
  *     except IERR:
  *     FunctionBegin(b"SNESPythonSetContext ")
  *     PySNES(snes).setcontext(ctx, SNES_(snes))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PySNES *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PySNES *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1798, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1787
+  /* "libpetsc4py.pyx":1799
  *     FunctionBegin(b"SNESPythonSetContext ")
  *     PySNES(snes).setcontext(ctx, SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18694,7 +19180,7 @@ PetscErrorCode SNESPythonSetContext(SNES __pyx_v_snes, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1783
+  /* "libpetsc4py.pyx":1795
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode SNESPythonSetContext(PetscSNES snes, void *ctx) \             # <<<<<<<<<<<<<<
@@ -18713,7 +19199,7 @@ PetscErrorCode SNESPythonSetContext(SNES __pyx_v_snes, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1789
+/* "libpetsc4py.pyx":1801
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPythonSetType_PYTHON(PetscSNES snes, char name[]) \             # <<<<<<<<<<<<<<
@@ -18729,24 +19215,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
   PyObject *__pyx_t_2 = NULL;
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
-  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("SNESPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":1791
+  /* "libpetsc4py.pyx":1803
  * cdef PetscErrorCode SNESPythonSetType_PYTHON(PetscSNES snes, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESPythonSetType_PYTHON);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":1792
+  /* "libpetsc4py.pyx":1804
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -18759,40 +19242,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1793
+  /* "libpetsc4py.pyx":1805
  *     FunctionBegin(b"SNESPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)             # <<<<<<<<<<<<<<
  *     SNESPythonSetContext(snes, <void*>ctx)
  *     PySNES(snes).setname(name)
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1794
+  /* "libpetsc4py.pyx":1806
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  *     SNESPythonSetContext(snes, <void*>ctx)             # <<<<<<<<<<<<<<
  *     PySNES(snes).setname(name)
  *     return FunctionEnd()
  */
-  __pyx_t_3 = SNESPythonSetContext(__pyx_v_snes, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = SNESPythonSetContext(__pyx_v_snes, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1806, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1795
+  /* "libpetsc4py.pyx":1807
  *     cdef object ctx = createcontext(name)
  *     SNESPythonSetContext(snes, <void*>ctx)
  *     PySNES(snes).setname(name)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PySNES *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PySNES *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1807, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1796
+  /* "libpetsc4py.pyx":1808
  *     SNESPythonSetContext(snes, <void*>ctx)
  *     PySNES(snes).setname(name)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18802,7 +19285,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1789
+  /* "libpetsc4py.pyx":1801
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPythonSetType_PYTHON(PetscSNES snes, char name[]) \             # <<<<<<<<<<<<<<
@@ -18824,7 +19307,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1798
+/* "libpetsc4py.pyx":1810
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESCreate_Python(             # <<<<<<<<<<<<<<
@@ -18840,24 +19323,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
   SNESOps __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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":1802
+  /* "libpetsc4py.pyx":1814
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESCreate_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef SNESOps ops   = snes.ops
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESCreate_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESCreate_Python"));
 
-  /* "libpetsc4py.pyx":1804
+  /* "libpetsc4py.pyx":1816
  *     FunctionBegin(b"SNESCreate_Python")
  *     #
  *     cdef SNESOps ops   = snes.ops             # <<<<<<<<<<<<<<
@@ -18867,7 +19347,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
   __pyx_t_1 = __pyx_v_snes->ops;
   __pyx_v_ops = __pyx_t_1;
 
-  /* "libpetsc4py.pyx":1805
+  /* "libpetsc4py.pyx":1817
  *     #
  *     cdef SNESOps ops   = snes.ops
  *     ops.reset          = SNESReset_Python             # <<<<<<<<<<<<<<
@@ -18876,7 +19356,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->reset = __pyx_f_11libpetsc4py_SNESReset_Python;
 
-  /* "libpetsc4py.pyx":1806
+  /* "libpetsc4py.pyx":1818
  *     cdef SNESOps ops   = snes.ops
  *     ops.reset          = SNESReset_Python
  *     ops.destroy        = SNESDestroy_Python             # <<<<<<<<<<<<<<
@@ -18885,7 +19365,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_SNESDestroy_Python;
 
-  /* "libpetsc4py.pyx":1807
+  /* "libpetsc4py.pyx":1819
  *     ops.reset          = SNESReset_Python
  *     ops.destroy        = SNESDestroy_Python
  *     ops.setup          = SNESSetUp_Python             # <<<<<<<<<<<<<<
@@ -18894,7 +19374,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_SNESSetUp_Python;
 
-  /* "libpetsc4py.pyx":1808
+  /* "libpetsc4py.pyx":1820
  *     ops.destroy        = SNESDestroy_Python
  *     ops.setup          = SNESSetUp_Python
  *     ops.setfromoptions = SNESSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -18903,7 +19383,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_SNESSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":1809
+  /* "libpetsc4py.pyx":1821
  *     ops.setup          = SNESSetUp_Python
  *     ops.setfromoptions = SNESSetFromOptions_Python
  *     ops.view           = SNESView_Python             # <<<<<<<<<<<<<<
@@ -18912,7 +19392,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_SNESView_Python;
 
-  /* "libpetsc4py.pyx":1810
+  /* "libpetsc4py.pyx":1822
  *     ops.setfromoptions = SNESSetFromOptions_Python
  *     ops.view           = SNESView_Python
  *     ops.solve          = SNESSolve_Python             # <<<<<<<<<<<<<<
@@ -18921,28 +19401,28 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->solve = __pyx_f_11libpetsc4py_SNESSolve_Python;
 
-  /* "libpetsc4py.pyx":1812
+  /* "libpetsc4py.pyx":1824
  *     ops.solve          = SNESSolve_Python
  *     #
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>snes, b"SNESPythonSetType_C",
  *             <PetscVoidFunction>SNESPythonSetType_PYTHON) )
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_snes), __pyx_k_SNESPythonSetType_C, ((PetscVoidFunction)__pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1812; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_snes), ((char *)"SNESPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1824, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1816
+  /* "libpetsc4py.pyx":1828
  *             <PetscVoidFunction>SNESPythonSetType_PYTHON) )
  *     #
  *     cdef ctx = PySNES(NULL)             # <<<<<<<<<<<<<<
  *     snes.data = <void*> ctx
  *     Py_INCREF(<PyObject*>snes.data)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(NULL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1828, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1817
+  /* "libpetsc4py.pyx":1829
  *     #
  *     cdef ctx = PySNES(NULL)
  *     snes.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -18951,7 +19431,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_snes->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":1818
+  /* "libpetsc4py.pyx":1830
  *     cdef ctx = PySNES(NULL)
  *     snes.data = <void*> ctx
  *     Py_INCREF(<PyObject*>snes.data)             # <<<<<<<<<<<<<<
@@ -18960,7 +19440,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   Py_INCREF(((PyObject *)__pyx_v_snes->data));
 
-  /* "libpetsc4py.pyx":1819
+  /* "libpetsc4py.pyx":1831
  *     snes.data = <void*> ctx
  *     Py_INCREF(<PyObject*>snes.data)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18970,7 +19450,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1798
+  /* "libpetsc4py.pyx":1810
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESCreate_Python(             # <<<<<<<<<<<<<<
@@ -18992,7 +19472,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1821
+/* "libpetsc4py.pyx":1833
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESDestroy_Python(             # <<<<<<<<<<<<<<
@@ -19014,33 +19494,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = 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("SNESDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":1825
+  /* "libpetsc4py.pyx":1837
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESDestroy_Python")             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectComposeFunction(
  *             <PetscObject>snes, b"SNESPythonSetType_C",
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESDestroy_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESDestroy_Python"));
 
-  /* "libpetsc4py.pyx":1826
+  /* "libpetsc4py.pyx":1838
  *     except IERR with gil:
  *     FunctionBegin(b"SNESDestroy_Python")
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>snes, b"SNESPythonSetType_C",
  *             <PetscVoidFunction>NULL) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_snes), __pyx_k_SNESPythonSetType_C, ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_snes), ((char *)"SNESPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1838, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1830
+  /* "libpetsc4py.pyx":1842
  *             <PetscVoidFunction>NULL) )
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19053,7 +19530,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1831
+  /* "libpetsc4py.pyx":1843
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -19062,7 +19539,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":1832
+    /* "libpetsc4py.pyx":1844
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(snes)             # <<<<<<<<<<<<<<
@@ -19071,17 +19548,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_snes);
 
-    /* "libpetsc4py.pyx":1833
+    /* "libpetsc4py.pyx":1845
  *     try:
  *         addRef(snes)
  *         SNESPythonSetContext(snes, NULL)             # <<<<<<<<<<<<<<
  *     finally:
  *         delRef(snes)
  */
-    __pyx_t_3 = SNESPythonSetContext(__pyx_v_snes, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1833; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_3 = SNESPythonSetContext(__pyx_v_snes, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1845, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":1835
+  /* "libpetsc4py.pyx":1847
  *         SNESPythonSetContext(snes, NULL)
  *     finally:
  *         delRef(snes)             # <<<<<<<<<<<<<<
@@ -19092,7 +19569,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_snes);
 
-      /* "libpetsc4py.pyx":1836
+      /* "libpetsc4py.pyx":1848
  *     finally:
  *         delRef(snes)
  *         Py_DECREF(<PyObject*>snes.data)             # <<<<<<<<<<<<<<
@@ -19101,7 +19578,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
       Py_DECREF(((PyObject *)__pyx_v_snes->data));
 
-      /* "libpetsc4py.pyx":1837
+      /* "libpetsc4py.pyx":1849
  *         delRef(snes)
  *         Py_DECREF(<PyObject*>snes.data)
  *         snes.data = NULL             # <<<<<<<<<<<<<<
@@ -19112,8 +19589,10 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
       goto __pyx_L6;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L5_error:;
       __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
       __Pyx_XGOTREF(__pyx_t_6);
@@ -19125,7 +19604,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
       __pyx_t_1 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
       {
 
-        /* "libpetsc4py.pyx":1835
+        /* "libpetsc4py.pyx":1847
  *         SNESPythonSetContext(snes, NULL)
  *     finally:
  *         delRef(snes)             # <<<<<<<<<<<<<<
@@ -19134,7 +19613,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_snes);
 
-        /* "libpetsc4py.pyx":1836
+        /* "libpetsc4py.pyx":1848
  *     finally:
  *         delRef(snes)
  *         Py_DECREF(<PyObject*>snes.data)             # <<<<<<<<<<<<<<
@@ -19143,7 +19622,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
         Py_DECREF(((PyObject *)__pyx_v_snes->data));
 
-        /* "libpetsc4py.pyx":1837
+        /* "libpetsc4py.pyx":1849
  *         delRef(snes)
  *         Py_DECREF(<PyObject*>snes.data)
  *         snes.data = NULL             # <<<<<<<<<<<<<<
@@ -19152,6 +19631,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
         __pyx_v_snes->data = NULL;
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
@@ -19169,7 +19649,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":1838
+  /* "libpetsc4py.pyx":1850
  *         Py_DECREF(<PyObject*>snes.data)
  *         snes.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19179,7 +19659,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1821
+  /* "libpetsc4py.pyx":1833
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESDestroy_Python(             # <<<<<<<<<<<<<<
@@ -19199,7 +19679,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1840
+/* "libpetsc4py.pyx":1852
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSetUp_Python(             # <<<<<<<<<<<<<<
@@ -19208,7 +19688,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
 
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes) {
-  char __pyx_v_name[2048];
+  char __pyx_v_name[0x800];
   PetscBool __pyx_v_found;
   PyObject *__pyx_v_setUp = 0;
   PetscErrorCode __pyx_r;
@@ -19222,56 +19702,53 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = 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("SNESSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":1844
+  /* "libpetsc4py.pyx":1856
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSetUp_Python")             # <<<<<<<<<<<<<<
  *     #
  *     #SNESGetKSP(snes,&snes.ksp)
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESSetUp_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESSetUp_Python"));
 
-  /* "libpetsc4py.pyx":1849
+  /* "libpetsc4py.pyx":1861
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
  *     if PySNES(snes).self is None:
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1850
+  /* "libpetsc4py.pyx":1862
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PySNES(snes).self is None:             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  *                 getPrefix(snes),b"-snes_python_type",
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1850; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1862, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = (((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_1)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1851
+    /* "libpetsc4py.pyx":1863
  *     cdef PetscBool found = PETSC_FALSE
  *     if PySNES(snes).self is None:
- *         CHKERR( PetscOptionsGetString(             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(snes),b"-snes_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(__pyx_f_11libpetsc4py_getPrefix(__pyx_v_snes), __pyx_k_snes_python_type, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(NULL, __pyx_f_11libpetsc4py_getPrefix(__pyx_v_snes), ((char *)"-snes_python_type"), __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1863, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1854
+    /* "libpetsc4py.pyx":1866
  *                 getPrefix(snes),b"-snes_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -19288,63 +19765,83 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":1855
+      /* "libpetsc4py.pyx":1867
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:
  *             CHKERR( SNESPythonSetType_PYTHON(snes,name) )             # <<<<<<<<<<<<<<
  *     if PySNES(snes).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(__pyx_v_snes, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L4;
+      __pyx_t_5 = __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(__pyx_v_snes, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1867, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1867, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":1866
+ *                 getPrefix(snes),b"-snes_python_type",
+ *                 name,sizeof(name),&found) )
+ *         if found and name[0]:             # <<<<<<<<<<<<<<
+ *             CHKERR( SNESPythonSetType_PYTHON(snes,name) )
+ *     if PySNES(snes).self is None:
+ */
     }
-    __pyx_L4:;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1862
+ *     cdef char name[2048]
+ *     cdef PetscBool found = PETSC_FALSE
+ *     if PySNES(snes).self is None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,
+ *                 getPrefix(snes),b"-snes_python_type",
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1856
+  /* "libpetsc4py.pyx":1868
  *         if found and name[0]:
  *             CHKERR( SNESPythonSetType_PYTHON(snes,name) )
  *     if PySNES(snes).self is None:             # <<<<<<<<<<<<<<
  *         return PetscSETERR(PETSC_ERR_USER,
  *             "Python context not set, call one of \n"
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1868, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = (((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_1)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":1857
+    /* "libpetsc4py.pyx":1869
  *             CHKERR( SNESPythonSetType_PYTHON(snes,name) )
  *     if PySNES(snes).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
  *             "Python context not set, call one of \n"
  *             " * SNESPythonSetType(snes,\"[package.]module.class\")\n"
  */
-    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, __pyx_k_Python_context_not_set_call_one_4);
+    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, ((char *)"Python context not set, call one of \n * SNESPythonSetType(snes,\"[package.]module.class\")\n * SNESSetFromOptions(snes) and pass option -snes_python_type [package.]module.class"));
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":1868
+ *         if found and name[0]:
+ *             CHKERR( SNESPythonSetType_PYTHON(snes,name) )
+ *     if PySNES(snes).self is None:             # <<<<<<<<<<<<<<
+ *         return PetscSETERR(PETSC_ERR_USER,
+ *             "Python context not set, call one of \n"
+ */
   }
 
-  /* "libpetsc4py.pyx":1863
+  /* "libpetsc4py.pyx":1875
  *             "-snes_python_type [package.]module.class")
  *     #
  *     cdef setUp = PySNES(snes).setUp             # <<<<<<<<<<<<<<
  *     if setUp is not None:
  *         setUp(SNES_(snes))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1863; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1875, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1863; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1875, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setUp = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":1864
+  /* "libpetsc4py.pyx":1876
  *     #
  *     cdef setUp = PySNES(snes).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -19355,14 +19852,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1865
+    /* "libpetsc4py.pyx":1877
  *     cdef setUp = PySNES(snes).setUp
  *     if setUp is not None:
  *         setUp(SNES_(snes))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
@@ -19376,27 +19873,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1877, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_6);
     } else {
-      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1877, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1877, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    goto __pyx_L8;
+
+    /* "libpetsc4py.pyx":1876
+ *     #
+ *     cdef setUp = PySNES(snes).setUp
+ *     if setUp is not None:             # <<<<<<<<<<<<<<
+ *         setUp(SNES_(snes))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L8:;
 
-  /* "libpetsc4py.pyx":1866
+  /* "libpetsc4py.pyx":1878
  *     if setUp is not None:
  *         setUp(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19406,7 +19909,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1840
+  /* "libpetsc4py.pyx":1852
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSetUp_Python(             # <<<<<<<<<<<<<<
@@ -19432,7 +19935,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1868
+/* "libpetsc4py.pyx":1880
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESReset_Python(             # <<<<<<<<<<<<<<
@@ -19451,15 +19954,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESReset_Python", 0);
 
-  /* "libpetsc4py.pyx":1872
+  /* "libpetsc4py.pyx":1884
  *     ) \
  *     except IERR with gil:
  *     if getRef(snes) == 0: return 0             # <<<<<<<<<<<<<<
@@ -19472,31 +19972,31 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1873
+  /* "libpetsc4py.pyx":1885
  *     except IERR with gil:
  *     if getRef(snes) == 0: return 0
  *     FunctionBegin(b"SNESReset_Python")             # <<<<<<<<<<<<<<
  *     cdef reset = PySNES(snes).reset
  *     if reset is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESReset_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESReset_Python"));
 
-  /* "libpetsc4py.pyx":1874
+  /* "libpetsc4py.pyx":1886
  *     if getRef(snes) == 0: return 0
  *     FunctionBegin(b"SNESReset_Python")
  *     cdef reset = PySNES(snes).reset             # <<<<<<<<<<<<<<
  *     if reset is not None:
  *         reset(SNES_(snes))
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1886, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reset); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1886, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_reset = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1875
+  /* "libpetsc4py.pyx":1887
  *     FunctionBegin(b"SNESReset_Python")
  *     cdef reset = PySNES(snes).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -19507,14 +20007,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
   __pyx_t_4 = (__pyx_t_1 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1876
+    /* "libpetsc4py.pyx":1888
  *     cdef reset = PySNES(snes).reset
  *     if reset is not None:
  *         reset(SNES_(snes))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1888, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_reset);
     __pyx_t_5 = __pyx_v_reset; __pyx_t_6 = NULL;
@@ -19528,27 +20028,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1888, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1888, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_2);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_2);
       __pyx_t_2 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1888, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L4;
+
+    /* "libpetsc4py.pyx":1887
+ *     FunctionBegin(b"SNESReset_Python")
+ *     cdef reset = PySNES(snes).reset
+ *     if reset is not None:             # <<<<<<<<<<<<<<
+ *         reset(SNES_(snes))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":1877
+  /* "libpetsc4py.pyx":1889
  *     if reset is not None:
  *         reset(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19558,7 +20064,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1868
+  /* "libpetsc4py.pyx":1880
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESReset_Python(             # <<<<<<<<<<<<<<
@@ -19584,19 +20090,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1879
+/* "libpetsc4py.pyx":1891
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscSNES snes,
  */
 
-static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptions *__pyx_v_PetscOptionsObject, SNES __pyx_v_snes) {
-  char __pyx_v_name[2048];
+static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptionItems *__pyx_v_PetscOptionsObject, SNES __pyx_v_snes) {
+  char __pyx_v_name[0x800];
   char *__pyx_v_defval;
   PetscBool __pyx_v_found;
-  CYTHON_UNUSED PetscOptions *PetscOptionsObject;
+  PetscOptionItems *PetscOptionsObject;
   PyObject *__pyx_v_setFromOptions = 0;
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -19610,66 +20116,72 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = 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("SNESSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":1884
+  /* "libpetsc4py.pyx":1896
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSetFromOptions_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef char name[2048], *defval = PySNES(snes).getname()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESSetFromOptions_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":1886
+  /* "libpetsc4py.pyx":1898
  *     FunctionBegin(b"SNESSetFromOptions_Python")
  *     #
  *     cdef char name[2048], *defval = PySNES(snes).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1898, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PySNES *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PySNES *)((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) __PYX_ERR(0, 1898, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1887
+  /* "libpetsc4py.pyx":1899
  *     #
  *     cdef char name[2048], *defval = PySNES(snes).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1888
+  /* "libpetsc4py.pyx":1900
  *     cdef char name[2048], *defval = PySNES(snes).getname()
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
  *     CHKERR( PetscOptionsString(
  *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":1889
+  /* "libpetsc4py.pyx":1901
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
- *             b"SNESPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
+ */
+  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(((char *)"-snes_python_type"), ((char *)"Python [package.]module[.{class|function}]"), ((char *)"SNESPythonSetType"), __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1901, __pyx_L1_error)
+
+  /* "libpetsc4py.pyx":1903
+ *     CHKERR( PetscOptionsString(
+ *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
+ *     if found and name[0]:
+ *         CHKERR( SNESPythonSetType_PYTHON(snes,name) )
  */
-  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(__pyx_k_snes_python_type, __pyx_k_Python_package_module_class_func, __pyx_k_SNESPythonSetType, __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((void)PetscOptionsObject);
 
-  /* "libpetsc4py.pyx":1892
+  /* "libpetsc4py.pyx":1904
  *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
- *             b"SNESPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
  *         CHKERR( SNESPythonSetType_PYTHON(snes,name) )
  *     #
@@ -19684,35 +20196,41 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1893
- *             b"SNESPythonSetType",defval,name,sizeof(name),&found) )
+    /* "libpetsc4py.pyx":1905
+ *             b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:
  *         CHKERR( SNESPythonSetType_PYTHON(snes,name) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef setFromOptions = PySNES(snes).setFromOptions
  */
-    __pyx_t_6 = __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(__pyx_v_snes, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_6 = __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(__pyx_v_snes, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1905, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1905, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":1904
+ *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
+ *     if found and name[0]:             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESPythonSetType_PYTHON(snes,name) )
+ *     #
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1895
+  /* "libpetsc4py.pyx":1907
  *         CHKERR( SNESPythonSetType_PYTHON(snes,name) )
  *     #
  *     cdef setFromOptions = PySNES(snes).setFromOptions             # <<<<<<<<<<<<<<
  *     if setFromOptions is not None:
  *         setFromOptions(SNES_(snes))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1907, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1907, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setFromOptions = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "libpetsc4py.pyx":1896
+  /* "libpetsc4py.pyx":1908
  *     #
  *     cdef setFromOptions = PySNES(snes).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -19723,14 +20241,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1897
+    /* "libpetsc4py.pyx":1909
  *     cdef setFromOptions = PySNES(snes).setFromOptions
  *     if setFromOptions is not None:
  *         setFromOptions(SNES_(snes))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1909, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
@@ -19744,27 +20262,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
       }
     }
     if (!__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1909, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1909, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1909, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    goto __pyx_L6;
+
+    /* "libpetsc4py.pyx":1908
+ *     #
+ *     cdef setFromOptions = PySNES(snes).setFromOptions
+ *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
+ *         setFromOptions(SNES_(snes))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L6:;
 
-  /* "libpetsc4py.pyx":1898
+  /* "libpetsc4py.pyx":1910
  *     if setFromOptions is not None:
  *         setFromOptions(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19774,11 +20298,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1879
+  /* "libpetsc4py.pyx":1891
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscSNES snes,
  */
 
@@ -19800,7 +20324,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1900
+/* "libpetsc4py.pyx":1912
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESView_Python(             # <<<<<<<<<<<<<<
@@ -19822,51 +20346,48 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("SNESView_Python", 0);
 
-  /* "libpetsc4py.pyx":1905
+  /* "libpetsc4py.pyx":1917
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESView_Python")             # <<<<<<<<<<<<<<
  *     viewcontext(PySNES(snes), vwr)
  *     cdef view = PySNES(snes).view
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESView_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESView_Python"));
 
-  /* "libpetsc4py.pyx":1906
+  /* "libpetsc4py.pyx":1918
  *     except IERR with gil:
  *     FunctionBegin(b"SNESView_Python")
  *     viewcontext(PySNES(snes), vwr)             # <<<<<<<<<<<<<<
  *     cdef view = PySNES(snes).view
  *     if view is not None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1906; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1918, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1906; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1918, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1907
+  /* "libpetsc4py.pyx":1919
  *     FunctionBegin(b"SNESView_Python")
  *     viewcontext(PySNES(snes), vwr)
  *     cdef view = PySNES(snes).view             # <<<<<<<<<<<<<<
  *     if view is not None:
  *         view(SNES_(snes), Viewer_(vwr))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1907; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1907; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_view = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1908
+  /* "libpetsc4py.pyx":1920
  *     viewcontext(PySNES(snes), vwr)
  *     cdef view = PySNES(snes).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -19877,16 +20398,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1909
+    /* "libpetsc4py.pyx":1921
  *     cdef view = PySNES(snes).view
  *     if view is not None:
  *         view(SNES_(snes), Viewer_(vwr))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1921, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1921, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
@@ -19901,7 +20422,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1921, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -19912,16 +20433,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
     PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_6);
     __pyx_t_1 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1921, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1920
+ *     viewcontext(PySNES(snes), vwr)
+ *     cdef view = PySNES(snes).view
+ *     if view is not None:             # <<<<<<<<<<<<<<
+ *         view(SNES_(snes), Viewer_(vwr))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1910
+  /* "libpetsc4py.pyx":1922
  *     if view is not None:
  *         view(SNES_(snes), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19931,7 +20458,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1900
+  /* "libpetsc4py.pyx":1912
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESView_Python(             # <<<<<<<<<<<<<<
@@ -19958,7 +20485,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1912
+/* "libpetsc4py.pyx":1924
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSolve_Python(             # <<<<<<<<<<<<<<
@@ -19984,24 +20511,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   Py_ssize_t __pyx_t_10;
   PyObject *__pyx_t_11 = NULL;
   PetscErrorCode __pyx_t_12;
-  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("SNESSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":1916
+  /* "libpetsc4py.pyx":1928
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSolve_Python")             # <<<<<<<<<<<<<<
  *     cdef PetscVec b = NULL, x = NULL
  *     CHKERR( SNESGetRhs(snes,&b)      )
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESSolve_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESSolve_Python"));
 
-  /* "libpetsc4py.pyx":1917
+  /* "libpetsc4py.pyx":1929
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSolve_Python")
  *     cdef PetscVec b = NULL, x = NULL             # <<<<<<<<<<<<<<
@@ -20011,40 +20535,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   __pyx_v_b = NULL;
   __pyx_v_x = NULL;
 
-  /* "libpetsc4py.pyx":1918
+  /* "libpetsc4py.pyx":1930
  *     FunctionBegin(b"SNESSolve_Python")
  *     cdef PetscVec b = NULL, x = NULL
  *     CHKERR( SNESGetRhs(snes,&b)      )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESGetSolution(snes,&x) )
  *     #
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetRhs(__pyx_v_snes, (&__pyx_v_b))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1918; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetRhs(__pyx_v_snes, (&__pyx_v_b))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1930, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1919
+  /* "libpetsc4py.pyx":1931
  *     cdef PetscVec b = NULL, x = NULL
  *     CHKERR( SNESGetRhs(snes,&b)      )
  *     CHKERR( SNESGetSolution(snes,&x) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef solve = PySNES(snes).solve
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolution(__pyx_v_snes, (&__pyx_v_x))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolution(__pyx_v_snes, (&__pyx_v_x))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1931, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1921
+  /* "libpetsc4py.pyx":1933
  *     CHKERR( SNESGetSolution(snes,&x) )
  *     #
  *     cdef solve = PySNES(snes).solve             # <<<<<<<<<<<<<<
  *     if solve is not None:
  *         solve(SNES_(snes), Vec_(b) if b != NULL else None, Vec_(x))
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1933, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_solve); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_solve); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1933, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_solve = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1922
+  /* "libpetsc4py.pyx":1934
  *     #
  *     cdef solve = PySNES(snes).solve
  *     if solve is not None:             # <<<<<<<<<<<<<<
@@ -20055,17 +20579,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1923
+    /* "libpetsc4py.pyx":1935
  *     cdef solve = PySNES(snes).solve
  *     if solve is not None:
  *         solve(SNES_(snes), Vec_(b) if b != NULL else None, Vec_(x))             # <<<<<<<<<<<<<<
  *     else:
  *         SNESSolve_Python_default(snes)
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1935, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     if (((__pyx_v_b != NULL) != 0)) {
-      __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1935, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_6 = __pyx_t_7;
       __pyx_t_7 = 0;
@@ -20073,7 +20597,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
       __Pyx_INCREF(Py_None);
       __pyx_t_6 = Py_None;
     }
-    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1935, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_solve);
     __pyx_t_8 = __pyx_v_solve; __pyx_t_9 = NULL;
@@ -20088,7 +20612,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
         __pyx_t_10 = 1;
       }
     }
-    __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1935, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     if (__pyx_t_9) {
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -20102,27 +20626,35 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
     __pyx_t_2 = 0;
     __pyx_t_6 = 0;
     __pyx_t_7 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1935, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "libpetsc4py.pyx":1934
+ *     #
+ *     cdef solve = PySNES(snes).solve
+ *     if solve is not None:             # <<<<<<<<<<<<<<
+ *         solve(SNES_(snes), Vec_(b) if b != NULL else None, Vec_(x))
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":1925
+  /* "libpetsc4py.pyx":1937
  *         solve(SNES_(snes), Vec_(b) if b != NULL else None, Vec_(x))
  *     else:
  *         SNESSolve_Python_default(snes)             # <<<<<<<<<<<<<<
  *     #
  *     return FunctionEnd()
  */
-    __pyx_t_12 = __pyx_f_11libpetsc4py_SNESSolve_Python_default(__pyx_v_snes); if (unlikely(__pyx_t_12 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1925; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_12 = __pyx_f_11libpetsc4py_SNESSolve_Python_default(__pyx_v_snes); if (unlikely(__pyx_t_12 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1937, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1927
+  /* "libpetsc4py.pyx":1939
  *         SNESSolve_Python_default(snes)
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -20132,7 +20664,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1912
+  /* "libpetsc4py.pyx":1924
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSolve_Python(             # <<<<<<<<<<<<<<
@@ -20160,7 +20692,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1929
+/* "libpetsc4py.pyx":1941
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSolve_Python_default(             # <<<<<<<<<<<<<<
@@ -20172,7 +20704,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   Vec __pyx_v_X;
   Vec __pyx_v_F;
   Vec __pyx_v_Y;
-  CYTHON_UNUSED PetscInt __pyx_v_its;
+  PetscInt __pyx_v_its;
   PetscInt __pyx_v_lits;
   PetscReal __pyx_v_xnorm;
   PetscReal __pyx_v_fnorm;
@@ -20182,24 +20714,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   int __pyx_t_1;
   PetscInt __pyx_t_2;
   PetscErrorCode __pyx_t_3;
-  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("SNESSolve_Python_default", 0);
 
-  /* "libpetsc4py.pyx":1933
+  /* "libpetsc4py.pyx":1945
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSolve_Python_default")             # <<<<<<<<<<<<<<
  *     #
  *     cdef PetscVec X=NULL, F=NULL, Y=NULL
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESSolve_Python_default);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESSolve_Python_default"));
 
-  /* "libpetsc4py.pyx":1935
+  /* "libpetsc4py.pyx":1947
  *     FunctionBegin(b"SNESSolve_Python_default")
  *     #
  *     cdef PetscVec X=NULL, F=NULL, Y=NULL             # <<<<<<<<<<<<<<
@@ -20210,34 +20739,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   __pyx_v_F = NULL;
   __pyx_v_Y = NULL;
 
-  /* "libpetsc4py.pyx":1936
+  /* "libpetsc4py.pyx":1948
  *     #
  *     cdef PetscVec X=NULL, F=NULL, Y=NULL
  *     CHKERR( SNESGetSolution(snes,&X)           )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )
  *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolution(__pyx_v_snes, (&__pyx_v_X))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1936; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolution(__pyx_v_snes, (&__pyx_v_X))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1948, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1937
+  /* "libpetsc4py.pyx":1949
  *     cdef PetscVec X=NULL, F=NULL, Y=NULL
  *     CHKERR( SNESGetSolution(snes,&X)           )
  *     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
  *     cdef PetscInt  its=0, lits=0
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetFunction(__pyx_v_snes, (&__pyx_v_F), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1937; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetFunction(__pyx_v_snes, (&__pyx_v_F), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1949, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1938
+  /* "libpetsc4py.pyx":1950
  *     CHKERR( SNESGetSolution(snes,&X)           )
  *     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )
  *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )             # <<<<<<<<<<<<<<
  *     cdef PetscInt  its=0, lits=0
  *     cdef PetscReal xnorm = 0.0
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolutionUpdate(__pyx_v_snes, (&__pyx_v_Y))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolutionUpdate(__pyx_v_snes, (&__pyx_v_Y))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1950, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1939
+  /* "libpetsc4py.pyx":1951
  *     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )
  *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
  *     cdef PetscInt  its=0, lits=0             # <<<<<<<<<<<<<<
@@ -20247,7 +20776,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   __pyx_v_its = 0;
   __pyx_v_lits = 0;
 
-  /* "libpetsc4py.pyx":1940
+  /* "libpetsc4py.pyx":1952
  *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
  *     cdef PetscInt  its=0, lits=0
  *     cdef PetscReal xnorm = 0.0             # <<<<<<<<<<<<<<
@@ -20256,7 +20785,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_xnorm = 0.0;
 
-  /* "libpetsc4py.pyx":1941
+  /* "libpetsc4py.pyx":1953
  *     cdef PetscInt  its=0, lits=0
  *     cdef PetscReal xnorm = 0.0
  *     cdef PetscReal fnorm = 0.0             # <<<<<<<<<<<<<<
@@ -20265,7 +20794,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_fnorm = 0.0;
 
-  /* "libpetsc4py.pyx":1942
+  /* "libpetsc4py.pyx":1954
  *     cdef PetscReal xnorm = 0.0
  *     cdef PetscReal fnorm = 0.0
  *     cdef PetscReal ynorm = 0.0             # <<<<<<<<<<<<<<
@@ -20274,7 +20803,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_ynorm = 0.0;
 
-  /* "libpetsc4py.pyx":1944
+  /* "libpetsc4py.pyx":1956
  *     cdef PetscReal ynorm = 0.0
  *     #
  *     snes.iter   = 0             # <<<<<<<<<<<<<<
@@ -20283,7 +20812,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_snes->iter = 0;
 
-  /* "libpetsc4py.pyx":1945
+  /* "libpetsc4py.pyx":1957
  *     #
  *     snes.iter   = 0
  *     snes.reason = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -20292,70 +20821,70 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_snes->reason = SNES_CONVERGED_ITERATING;
 
-  /* "libpetsc4py.pyx":1946
+  /* "libpetsc4py.pyx":1958
  *     snes.iter   = 0
  *     snes.reason = SNES_CONVERGED_ITERATING
  *     CHKERR( VecSet(Y,0.0)                 )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESComputeFunction(snes,X,F) )
  *     CHKERR( VecNorm(X,NORM_2,&xnorm)      )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecSet(__pyx_v_Y, 0.0)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecSet(__pyx_v_Y, 0.0)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1958, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1947
+  /* "libpetsc4py.pyx":1959
  *     snes.reason = SNES_CONVERGED_ITERATING
  *     CHKERR( VecSet(Y,0.0)                 )
  *     CHKERR( SNESComputeFunction(snes,X,F) )             # <<<<<<<<<<<<<<
  *     CHKERR( VecNorm(X,NORM_2,&xnorm)      )
  *     CHKERR( VecNorm(F,NORM_2,&fnorm)      )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESComputeFunction(__pyx_v_snes, __pyx_v_X, __pyx_v_F)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1947; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESComputeFunction(__pyx_v_snes, __pyx_v_X, __pyx_v_F)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1959, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1948
+  /* "libpetsc4py.pyx":1960
  *     CHKERR( VecSet(Y,0.0)                 )
  *     CHKERR( SNESComputeFunction(snes,X,F) )
  *     CHKERR( VecNorm(X,NORM_2,&xnorm)      )             # <<<<<<<<<<<<<<
  *     CHKERR( VecNorm(F,NORM_2,&fnorm)      )
  *     #
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_X, NORM_2, (&__pyx_v_xnorm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1948; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_X, NORM_2, (&__pyx_v_xnorm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1960, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1949
+  /* "libpetsc4py.pyx":1961
  *     CHKERR( SNESComputeFunction(snes,X,F) )
  *     CHKERR( VecNorm(X,NORM_2,&xnorm)      )
  *     CHKERR( VecNorm(F,NORM_2,&fnorm)      )             # <<<<<<<<<<<<<<
  *     #
  *     CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_F, NORM_2, (&__pyx_v_fnorm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1949; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_F, NORM_2, (&__pyx_v_fnorm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1961, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1951
+  /* "libpetsc4py.pyx":1963
  *     CHKERR( VecNorm(F,NORM_2,&fnorm)      )
  *     #
  *     CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  *     CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESConverged(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_xnorm, __pyx_v_ynorm, __pyx_v_fnorm, (&__pyx_v_snes->reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1951; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESConverged(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_xnorm, __pyx_v_ynorm, __pyx_v_fnorm, (&__pyx_v_snes->reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1963, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1952
+  /* "libpetsc4py.pyx":1964
  *     #
  *     CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )
  *     CHKERR( SNESLogHistory(snes,snes.norm,lits) )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  *     for its from 0 <= its < snes.max_its:
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESLogHistory(__pyx_v_snes, __pyx_v_snes->norm, __pyx_v_lits)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1952; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESLogHistory(__pyx_v_snes, __pyx_v_snes->norm, __pyx_v_lits)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1964, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1953
+  /* "libpetsc4py.pyx":1965
  *     CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )
  *     CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  *     CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )             # <<<<<<<<<<<<<<
  *     for its from 0 <= its < snes.max_its:
  *         if snes.reason: break
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESMonitor(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_snes->norm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESMonitor(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_snes->norm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1965, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1954
+  /* "libpetsc4py.pyx":1966
  *     CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  *     CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  *     for its from 0 <= its < snes.max_its:             # <<<<<<<<<<<<<<
@@ -20365,7 +20894,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   __pyx_t_2 = __pyx_v_snes->max_its;
   for (__pyx_v_its = 0; __pyx_v_its < __pyx_t_2; __pyx_v_its++) {
 
-    /* "libpetsc4py.pyx":1955
+    /* "libpetsc4py.pyx":1967
  *     CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  *     for its from 0 <= its < snes.max_its:
  *         if snes.reason: break             # <<<<<<<<<<<<<<
@@ -20376,16 +20905,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
       goto __pyx_L4_break;
     }
 
-    /* "libpetsc4py.pyx":1956
+    /* "libpetsc4py.pyx":1968
  *     for its from 0 <= its < snes.max_its:
  *         if snes.reason: break
  *         SNESPreStep_Python(snes)             # <<<<<<<<<<<<<<
  *         #
  *         lits = -snes.linear_its
  */
-    __pyx_t_3 = __pyx_f_11libpetsc4py_SNESPreStep_Python(__pyx_v_snes); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_11libpetsc4py_SNESPreStep_Python(__pyx_v_snes); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1968, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1958
+    /* "libpetsc4py.pyx":1970
  *         SNESPreStep_Python(snes)
  *         #
  *         lits = -snes.linear_its             # <<<<<<<<<<<<<<
@@ -20394,16 +20923,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
     __pyx_v_lits = (-__pyx_v_snes->linear_its);
 
-    /* "libpetsc4py.pyx":1959
+    /* "libpetsc4py.pyx":1971
  *         #
  *         lits = -snes.linear_its
  *         SNESStep_Python(snes,X,F,Y)             # <<<<<<<<<<<<<<
  *         lits += snes.linear_its
  *         #
  */
-    __pyx_t_3 = __pyx_f_11libpetsc4py_SNESStep_Python(__pyx_v_snes, __pyx_v_X, __pyx_v_F, __pyx_v_Y); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_11libpetsc4py_SNESStep_Python(__pyx_v_snes, __pyx_v_X, __pyx_v_F, __pyx_v_Y); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1971, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1960
+    /* "libpetsc4py.pyx":1972
  *         lits = -snes.linear_its
  *         SNESStep_Python(snes,X,F,Y)
  *         lits += snes.linear_its             # <<<<<<<<<<<<<<
@@ -20412,52 +20941,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
     __pyx_v_lits = (__pyx_v_lits + __pyx_v_snes->linear_its);
 
-    /* "libpetsc4py.pyx":1962
+    /* "libpetsc4py.pyx":1974
  *         lits += snes.linear_its
  *         #
  *         CHKERR( VecAXPY(X,-1.0,Y)             )             # <<<<<<<<<<<<<<
  *         CHKERR( SNESComputeFunction(snes,X,F) )
  *         CHKERR( VecNorm(X,NORM_2,&xnorm)      )
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_X, -1.0, __pyx_v_Y)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_X, -1.0, __pyx_v_Y)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1974, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1963
+    /* "libpetsc4py.pyx":1975
  *         #
  *         CHKERR( VecAXPY(X,-1.0,Y)             )
  *         CHKERR( SNESComputeFunction(snes,X,F) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecNorm(X,NORM_2,&xnorm)      )
  *         CHKERR( VecNorm(F,NORM_2,&fnorm)      )
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESComputeFunction(__pyx_v_snes, __pyx_v_X, __pyx_v_F)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESComputeFunction(__pyx_v_snes, __pyx_v_X, __pyx_v_F)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1975, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1964
+    /* "libpetsc4py.pyx":1976
  *         CHKERR( VecAXPY(X,-1.0,Y)             )
  *         CHKERR( SNESComputeFunction(snes,X,F) )
  *         CHKERR( VecNorm(X,NORM_2,&xnorm)      )             # <<<<<<<<<<<<<<
  *         CHKERR( VecNorm(F,NORM_2,&fnorm)      )
  *         CHKERR( VecNorm(Y,NORM_2,&ynorm)      )
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_X, NORM_2, (&__pyx_v_xnorm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1964; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_X, NORM_2, (&__pyx_v_xnorm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1976, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1965
+    /* "libpetsc4py.pyx":1977
  *         CHKERR( SNESComputeFunction(snes,X,F) )
  *         CHKERR( VecNorm(X,NORM_2,&xnorm)      )
  *         CHKERR( VecNorm(F,NORM_2,&fnorm)      )             # <<<<<<<<<<<<<<
  *         CHKERR( VecNorm(Y,NORM_2,&ynorm)      )
  *         snes.iter += 1
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_F, NORM_2, (&__pyx_v_fnorm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1965; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_F, NORM_2, (&__pyx_v_fnorm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1977, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1966
+    /* "libpetsc4py.pyx":1978
  *         CHKERR( VecNorm(X,NORM_2,&xnorm)      )
  *         CHKERR( VecNorm(F,NORM_2,&fnorm)      )
  *         CHKERR( VecNorm(Y,NORM_2,&ynorm)      )             # <<<<<<<<<<<<<<
  *         snes.iter += 1
  *         #
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_Y, NORM_2, (&__pyx_v_ynorm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1966; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_Y, NORM_2, (&__pyx_v_ynorm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1978, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1967
+    /* "libpetsc4py.pyx":1979
  *         CHKERR( VecNorm(F,NORM_2,&fnorm)      )
  *         CHKERR( VecNorm(Y,NORM_2,&ynorm)      )
  *         snes.iter += 1             # <<<<<<<<<<<<<<
@@ -20466,46 +20995,55 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
     __pyx_v_snes->iter = (__pyx_v_snes->iter + 1);
 
-    /* "libpetsc4py.pyx":1969
+    /* "libpetsc4py.pyx":1981
  *         snes.iter += 1
  *         #
  *         SNESPostStep_Python(snes)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )
  *         CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  */
-    __pyx_t_3 = __pyx_f_11libpetsc4py_SNESPostStep_Python(__pyx_v_snes); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_11libpetsc4py_SNESPostStep_Python(__pyx_v_snes); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 1981, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1970
+    /* "libpetsc4py.pyx":1982
  *         #
  *         SNESPostStep_Python(snes)
  *         CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )             # <<<<<<<<<<<<<<
  *         CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  *         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESConverged(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_xnorm, __pyx_v_ynorm, __pyx_v_fnorm, (&__pyx_v_snes->reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESConverged(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_xnorm, __pyx_v_ynorm, __pyx_v_fnorm, (&__pyx_v_snes->reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1982, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1971
+    /* "libpetsc4py.pyx":1983
  *         SNESPostStep_Python(snes)
  *         CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )
  *         CHKERR( SNESLogHistory(snes,snes.norm,lits) )             # <<<<<<<<<<<<<<
  *         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
- *     #
+ *     <void>its # silent unused warning
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESLogHistory(__pyx_v_snes, __pyx_v_snes->norm, __pyx_v_lits)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESLogHistory(__pyx_v_snes, __pyx_v_snes->norm, __pyx_v_lits)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1983, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1972
+    /* "libpetsc4py.pyx":1984
  *         CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )
  *         CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  *         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )             # <<<<<<<<<<<<<<
+ *     <void>its # silent unused warning
  *     #
- *     return FunctionEnd()
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESMonitor(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_snes->norm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESMonitor(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_snes->norm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1984, __pyx_L1_error)
   }
   __pyx_L4_break:;
 
-  /* "libpetsc4py.pyx":1974
+  /* "libpetsc4py.pyx":1985
+ *         CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  *         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
+ *     <void>its # silent unused warning             # <<<<<<<<<<<<<<
+ *     #
+ *     return FunctionEnd()
+ */
+  ((void)__pyx_v_its);
+
+  /* "libpetsc4py.pyx":1987
+ *     <void>its # silent unused warning
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
  * 
@@ -20514,7 +21052,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1929
+  /* "libpetsc4py.pyx":1941
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSolve_Python_default(             # <<<<<<<<<<<<<<
@@ -20534,7 +21072,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1976
+/* "libpetsc4py.pyx":1989
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPreStep_Python(             # <<<<<<<<<<<<<<
@@ -20553,39 +21091,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESPreStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1980
+  /* "libpetsc4py.pyx":1993
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPreStep_Python")             # <<<<<<<<<<<<<<
  *     cdef preStep = PySNES(snes).preStep
  *     if preStep is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESPreStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPreStep_Python"));
 
-  /* "libpetsc4py.pyx":1981
+  /* "libpetsc4py.pyx":1994
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPreStep_Python")
  *     cdef preStep = PySNES(snes).preStep             # <<<<<<<<<<<<<<
  *     if preStep is not None:
  *         preStep(SNES_(snes))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1994, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preStep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1994, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_preStep = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1982
+  /* "libpetsc4py.pyx":1995
  *     FunctionBegin(b"SNESPreStep_Python")
  *     cdef preStep = PySNES(snes).preStep
  *     if preStep is not None:             # <<<<<<<<<<<<<<
@@ -20596,14 +21131,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1983
+    /* "libpetsc4py.pyx":1996
  *     cdef preStep = PySNES(snes).preStep
  *     if preStep is not None:
  *         preStep(SNES_(snes))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1996, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_preStep);
     __pyx_t_5 = __pyx_v_preStep; __pyx_t_6 = NULL;
@@ -20617,27 +21152,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1996, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1996, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1996, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":1995
+ *     FunctionBegin(b"SNESPreStep_Python")
+ *     cdef preStep = PySNES(snes).preStep
+ *     if preStep is not None:             # <<<<<<<<<<<<<<
+ *         preStep(SNES_(snes))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1984
+  /* "libpetsc4py.pyx":1997
  *     if preStep is not None:
  *         preStep(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -20647,7 +21188,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1976
+  /* "libpetsc4py.pyx":1989
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPreStep_Python(             # <<<<<<<<<<<<<<
@@ -20673,7 +21214,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1986
+/* "libpetsc4py.pyx":1999
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPostStep_Python(             # <<<<<<<<<<<<<<
@@ -20692,39 +21233,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESPostStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1990
+  /* "libpetsc4py.pyx":2003
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPostStep_Python")             # <<<<<<<<<<<<<<
  *     cdef postStep = PySNES(snes).postStep
  *     if postStep is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESPostStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPostStep_Python"));
 
-  /* "libpetsc4py.pyx":1991
+  /* "libpetsc4py.pyx":2004
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPostStep_Python")
  *     cdef postStep = PySNES(snes).postStep             # <<<<<<<<<<<<<<
  *     if postStep is not None:
  *         postStep(SNES_(snes))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2004, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postStep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2004, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_postStep = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1992
+  /* "libpetsc4py.pyx":2005
  *     FunctionBegin(b"SNESPostStep_Python")
  *     cdef postStep = PySNES(snes).postStep
  *     if postStep is not None:             # <<<<<<<<<<<<<<
@@ -20735,14 +21273,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1993
+    /* "libpetsc4py.pyx":2006
  *     cdef postStep = PySNES(snes).postStep
  *     if postStep is not None:
  *         postStep(SNES_(snes))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2006, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_postStep);
     __pyx_t_5 = __pyx_v_postStep; __pyx_t_6 = NULL;
@@ -20756,27 +21294,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2006, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2006, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2006, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":2005
+ *     FunctionBegin(b"SNESPostStep_Python")
+ *     cdef postStep = PySNES(snes).postStep
+ *     if postStep is not None:             # <<<<<<<<<<<<<<
+ *         postStep(SNES_(snes))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1994
+  /* "libpetsc4py.pyx":2007
  *     if postStep is not None:
  *         postStep(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -20786,7 +21330,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1986
+  /* "libpetsc4py.pyx":1999
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPostStep_Python(             # <<<<<<<<<<<<<<
@@ -20812,7 +21356,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1996
+/* "libpetsc4py.pyx":2009
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESStep_Python(             # <<<<<<<<<<<<<<
@@ -20836,39 +21380,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
   Py_ssize_t __pyx_t_10;
   PyObject *__pyx_t_11 = NULL;
   PetscErrorCode __pyx_t_12;
-  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("SNESStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2003
+  /* "libpetsc4py.pyx":2016
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESStep_Python")             # <<<<<<<<<<<<<<
  *     cdef step = PySNES(snes).step
  *     if step is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESStep_Python"));
 
-  /* "libpetsc4py.pyx":2004
+  /* "libpetsc4py.pyx":2017
  *     except IERR with gil:
  *     FunctionBegin(b"SNESStep_Python")
  *     cdef step = PySNES(snes).step             # <<<<<<<<<<<<<<
  *     if step is not None:
  *         step(SNES_(snes),Vec_(X),Vec_(F),Vec_(Y))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2017, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2017, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_step = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2005
+  /* "libpetsc4py.pyx":2018
  *     FunctionBegin(b"SNESStep_Python")
  *     cdef step = PySNES(snes).step
  *     if step is not None:             # <<<<<<<<<<<<<<
@@ -20879,20 +21420,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2006
+    /* "libpetsc4py.pyx":2019
  *     cdef step = PySNES(snes).step
  *     if step is not None:
  *         step(SNES_(snes),Vec_(X),Vec_(F),Vec_(Y))             # <<<<<<<<<<<<<<
  *     else:
  *         SNESStep_Python_default(snes,X,F,Y)
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2019, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2019, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_F)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_F)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2019, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_Y)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_Y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2019, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_step);
     __pyx_t_8 = __pyx_v_step; __pyx_t_9 = NULL;
@@ -20907,7 +21448,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
         __pyx_t_10 = 1;
       }
     }
-    __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2019, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     if (__pyx_t_9) {
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -20924,27 +21465,35 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
     __pyx_t_7 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2019, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+    /* "libpetsc4py.pyx":2018
+ *     FunctionBegin(b"SNESStep_Python")
+ *     cdef step = PySNES(snes).step
+ *     if step is not None:             # <<<<<<<<<<<<<<
+ *         step(SNES_(snes),Vec_(X),Vec_(F),Vec_(Y))
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":2008
+  /* "libpetsc4py.pyx":2021
  *         step(SNES_(snes),Vec_(X),Vec_(F),Vec_(Y))
  *     else:
  *         SNESStep_Python_default(snes,X,F,Y)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_12 = __pyx_f_11libpetsc4py_SNESStep_Python_default(__pyx_v_snes, __pyx_v_X, __pyx_v_F, __pyx_v_Y); if (unlikely(__pyx_t_12 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2008; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_12 = __pyx_f_11libpetsc4py_SNESStep_Python_default(__pyx_v_snes, __pyx_v_X, __pyx_v_F, __pyx_v_Y); if (unlikely(__pyx_t_12 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2021, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2009
+  /* "libpetsc4py.pyx":2022
  *     else:
  *         SNESStep_Python_default(snes,X,F,Y)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -20954,7 +21503,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1996
+  /* "libpetsc4py.pyx":2009
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESStep_Python(             # <<<<<<<<<<<<<<
@@ -20983,7 +21532,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2011
+/* "libpetsc4py.pyx":2024
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESStep_Python_default(             # <<<<<<<<<<<<<<
@@ -20998,24 +21547,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  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("SNESStep_Python_default", 0);
 
-  /* "libpetsc4py.pyx":2018
+  /* "libpetsc4py.pyx":2031
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESStep_Python_default")             # <<<<<<<<<<<<<<
  *     cdef PetscMat J = NULL, P = NULL
  *     cdef PetscInt lits = 0
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_SNESStep_Python_default);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESStep_Python_default"));
 
-  /* "libpetsc4py.pyx":2019
+  /* "libpetsc4py.pyx":2032
  *     except IERR with gil:
  *     FunctionBegin(b"SNESStep_Python_default")
  *     cdef PetscMat J = NULL, P = NULL             # <<<<<<<<<<<<<<
@@ -21025,7 +21571,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
   __pyx_v_J = NULL;
   __pyx_v_P = NULL;
 
-  /* "libpetsc4py.pyx":2020
+  /* "libpetsc4py.pyx":2033
  *     FunctionBegin(b"SNESStep_Python_default")
  *     cdef PetscMat J = NULL, P = NULL
  *     cdef PetscInt lits = 0             # <<<<<<<<<<<<<<
@@ -21034,52 +21580,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
  */
   __pyx_v_lits = 0;
 
-  /* "libpetsc4py.pyx":2021
+  /* "libpetsc4py.pyx":2034
  *     cdef PetscMat J = NULL, P = NULL
  *     cdef PetscInt lits = 0
  *     CHKERR( SNESGetJacobian(snes,&J,&P,NULL,NULL)   )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESComputeJacobian(snes,X,J,P)         )
  *     CHKERR( KSPSetOperators(snes.ksp,J,P)           )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetJacobian(__pyx_v_snes, (&__pyx_v_J), (&__pyx_v_P), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetJacobian(__pyx_v_snes, (&__pyx_v_J), (&__pyx_v_P), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2034, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2022
+  /* "libpetsc4py.pyx":2035
  *     cdef PetscInt lits = 0
  *     CHKERR( SNESGetJacobian(snes,&J,&P,NULL,NULL)   )
  *     CHKERR( SNESComputeJacobian(snes,X,J,P)         )             # <<<<<<<<<<<<<<
  *     CHKERR( KSPSetOperators(snes.ksp,J,P)           )
  *     CHKERR( KSPSolve(snes.ksp,F,Y)                  )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESComputeJacobian(__pyx_v_snes, __pyx_v_X, __pyx_v_J, __pyx_v_P)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2022; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESComputeJacobian(__pyx_v_snes, __pyx_v_X, __pyx_v_J, __pyx_v_P)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2035, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2023
+  /* "libpetsc4py.pyx":2036
  *     CHKERR( SNESGetJacobian(snes,&J,&P,NULL,NULL)   )
  *     CHKERR( SNESComputeJacobian(snes,X,J,P)         )
  *     CHKERR( KSPSetOperators(snes.ksp,J,P)           )             # <<<<<<<<<<<<<<
  *     CHKERR( KSPSolve(snes.ksp,F,Y)                  )
  *     CHKERR( KSPGetIterationNumber(snes.ksp,&lits)   )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPSetOperators(__pyx_v_snes->ksp, __pyx_v_J, __pyx_v_P)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPSetOperators(__pyx_v_snes->ksp, __pyx_v_J, __pyx_v_P)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2036, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2024
+  /* "libpetsc4py.pyx":2037
  *     CHKERR( SNESComputeJacobian(snes,X,J,P)         )
  *     CHKERR( KSPSetOperators(snes.ksp,J,P)           )
  *     CHKERR( KSPSolve(snes.ksp,F,Y)                  )             # <<<<<<<<<<<<<<
  *     CHKERR( KSPGetIterationNumber(snes.ksp,&lits)   )
  *     snes.linear_its += lits
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPSolve(__pyx_v_snes->ksp, __pyx_v_F, __pyx_v_Y)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPSolve(__pyx_v_snes->ksp, __pyx_v_F, __pyx_v_Y)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2037, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2025
+  /* "libpetsc4py.pyx":2038
  *     CHKERR( KSPSetOperators(snes.ksp,J,P)           )
  *     CHKERR( KSPSolve(snes.ksp,F,Y)                  )
  *     CHKERR( KSPGetIterationNumber(snes.ksp,&lits)   )             # <<<<<<<<<<<<<<
  *     snes.linear_its += lits
  *     return FunctionEnd()
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetIterationNumber(__pyx_v_snes->ksp, (&__pyx_v_lits))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2025; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetIterationNumber(__pyx_v_snes->ksp, (&__pyx_v_lits))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2038, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2026
+  /* "libpetsc4py.pyx":2039
  *     CHKERR( KSPSolve(snes.ksp,F,Y)                  )
  *     CHKERR( KSPGetIterationNumber(snes.ksp,&lits)   )
  *     snes.linear_its += lits             # <<<<<<<<<<<<<<
@@ -21088,7 +21634,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
  */
   __pyx_v_snes->linear_its = (__pyx_v_snes->linear_its + __pyx_v_lits);
 
-  /* "libpetsc4py.pyx":2027
+  /* "libpetsc4py.pyx":2040
  *     CHKERR( KSPGetIterationNumber(snes.ksp,&lits)   )
  *     snes.linear_its += lits
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21098,7 +21644,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2011
+  /* "libpetsc4py.pyx":2024
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESStep_Python_default(             # <<<<<<<<<<<<<<
@@ -21118,7 +21664,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2100
+/* "libpetsc4py.pyx":2118
  * @cython.internal
  * cdef class _PyTS(_PyObj): pass
  * cdef inline _PyTS PyTS(PetscTS ts):             # <<<<<<<<<<<<<<
@@ -21132,12 +21678,9 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
   int __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("PyTS", 0);
 
-  /* "libpetsc4py.pyx":2101
+  /* "libpetsc4py.pyx":2119
  * cdef class _PyTS(_PyObj): pass
  * cdef inline _PyTS PyTS(PetscTS ts):
  *     if ts != NULL and ts.data != NULL:             # <<<<<<<<<<<<<<
@@ -21155,7 +21698,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":2102
+    /* "libpetsc4py.pyx":2120
  * cdef inline _PyTS PyTS(PetscTS ts):
  *     if ts != NULL and ts.data != NULL:
  *         return <_PyTS>ts.data             # <<<<<<<<<<<<<<
@@ -21166,26 +21709,34 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
     __Pyx_INCREF(((PyObject *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_v_ts->data)));
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_v_ts->data);
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":2119
+ * cdef class _PyTS(_PyObj): pass
+ * cdef inline _PyTS PyTS(PetscTS ts):
+ *     if ts != NULL and ts.data != NULL:             # <<<<<<<<<<<<<<
+ *         return <_PyTS>ts.data
+ *     else:
+ */
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":2104
+  /* "libpetsc4py.pyx":2122
  *         return <_PyTS>ts.data
  *     else:
  *         return _PyTS.__new__(_PyTS)             # <<<<<<<<<<<<<<
  * 
  * cdef public PetscErrorCode TSPythonGetContext(PetscTS ts, void **ctx) \
  */
+  /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PyTS(((PyTypeObject *)((PyObject*)__pyx_ptype_11libpetsc4py__PyTS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_tp_new_11libpetsc4py__PyTS(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PyTS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2122, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyTS)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyTS)))) __PYX_ERR(0, 2122, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2100
+  /* "libpetsc4py.pyx":2118
  * @cython.internal
  * cdef class _PyTS(_PyObj): pass
  * cdef inline _PyTS PyTS(PetscTS ts):             # <<<<<<<<<<<<<<
@@ -21204,7 +21755,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2106
+/* "libpetsc4py.pyx":2124
  *         return _PyTS.__new__(_PyTS)
  * 
  * cdef public PetscErrorCode TSPythonGetContext(PetscTS ts, void **ctx) \             # <<<<<<<<<<<<<<
@@ -21217,33 +21768,30 @@ PetscErrorCode TSPythonGetContext(TS __pyx_v_ts, void **__pyx_v_ctx) {
   __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("TSPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":2108
+  /* "libpetsc4py.pyx":2126
  * cdef public PetscErrorCode TSPythonGetContext(PetscTS ts, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"TSPythonGetContext")             # <<<<<<<<<<<<<<
  *     PyTS(ts).getcontext(ctx)
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSPythonGetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSPythonGetContext"));
 
-  /* "libpetsc4py.pyx":2109
+  /* "libpetsc4py.pyx":2127
  *     except IERR:
  *     FunctionBegin(b"TSPythonGetContext")
  *     PyTS(ts).getcontext(ctx)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyTS *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyTS *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2127, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":2110
+  /* "libpetsc4py.pyx":2128
  *     FunctionBegin(b"TSPythonGetContext")
  *     PyTS(ts).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21253,7 +21801,7 @@ PetscErrorCode TSPythonGetContext(TS __pyx_v_ts, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2106
+  /* "libpetsc4py.pyx":2124
  *         return _PyTS.__new__(_PyTS)
  * 
  * cdef public PetscErrorCode TSPythonGetContext(PetscTS ts, void **ctx) \             # <<<<<<<<<<<<<<
@@ -21271,7 +21819,7 @@ PetscErrorCode TSPythonGetContext(TS __pyx_v_ts, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2112
+/* "libpetsc4py.pyx":2130
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode TSPythonSetContext(PetscTS ts, void *ctx) \             # <<<<<<<<<<<<<<
@@ -21285,36 +21833,33 @@ PetscErrorCode TSPythonSetContext(TS __pyx_v_ts, void *__pyx_v_ctx) {
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("TSPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":2114
+  /* "libpetsc4py.pyx":2132
  * cdef public PetscErrorCode TSPythonSetContext(PetscTS ts, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"TSPythonSetContext")             # <<<<<<<<<<<<<<
  *     PyTS(ts).setcontext(ctx, TS_(ts))
  *     return FunctionEnd()
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSPythonSetContext);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSPythonSetContext"));
 
-  /* "libpetsc4py.pyx":2115
+  /* "libpetsc4py.pyx":2133
  *     except IERR:
  *     FunctionBegin(b"TSPythonSetContext")
  *     PyTS(ts).setcontext(ctx, TS_(ts))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PyTS *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_11libpetsc4py__PyTS *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.setcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_ctx, ((struct PyPetscObjectObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 2133, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2116
+  /* "libpetsc4py.pyx":2134
  *     FunctionBegin(b"TSPythonSetContext")
  *     PyTS(ts).setcontext(ctx, TS_(ts))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21324,7 +21869,7 @@ PetscErrorCode TSPythonSetContext(TS __pyx_v_ts, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2112
+  /* "libpetsc4py.pyx":2130
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode TSPythonSetContext(PetscTS ts, void *ctx) \             # <<<<<<<<<<<<<<
@@ -21343,7 +21888,7 @@ PetscErrorCode TSPythonSetContext(TS __pyx_v_ts, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2118
+/* "libpetsc4py.pyx":2136
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSPythonSetType_PYTHON(PetscTS ts, char name[]) \             # <<<<<<<<<<<<<<
@@ -21359,24 +21904,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
   PyObject *__pyx_t_2 = NULL;
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
-  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("TSPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":2120
+  /* "libpetsc4py.pyx":2138
  * cdef PetscErrorCode TSPythonSetType_PYTHON(PetscTS ts, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSPythonSetType_PYTHON);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":2121
+  /* "libpetsc4py.pyx":2139
  *     except IERR with gil:
  *     FunctionBegin(b"TSPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -21389,40 +21931,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2122
+  /* "libpetsc4py.pyx":2140
  *     FunctionBegin(b"TSPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)             # <<<<<<<<<<<<<<
  *     TSPythonSetContext(ts, <void*>ctx)
  *     PyTS(ts).setname(name)
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2140, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2123
+  /* "libpetsc4py.pyx":2141
  *     if name == NULL: return FunctionEnd() # XXX
  *     cdef object ctx = createcontext(name)
  *     TSPythonSetContext(ts, <void*>ctx)             # <<<<<<<<<<<<<<
  *     PyTS(ts).setname(name)
  *     return  0
  */
-  __pyx_t_3 = TSPythonSetContext(__pyx_v_ts, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = TSPythonSetContext(__pyx_v_ts, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2141, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2124
+  /* "libpetsc4py.pyx":2142
  *     cdef object ctx = createcontext(name)
  *     TSPythonSetContext(ts, <void*>ctx)
  *     PyTS(ts).setname(name)             # <<<<<<<<<<<<<<
  *     return  0
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PyTS *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_11libpetsc4py__PyTS *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_2)->__pyx_base.__pyx_vtab)->__pyx_base.setname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_2), __pyx_v_name); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 2142, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2125
+  /* "libpetsc4py.pyx":2143
  *     TSPythonSetContext(ts, <void*>ctx)
  *     PyTS(ts).setname(name)
  *     return  0             # <<<<<<<<<<<<<<
@@ -21432,7 +21974,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2118
+  /* "libpetsc4py.pyx":2136
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSPythonSetType_PYTHON(PetscTS ts, char name[]) \             # <<<<<<<<<<<<<<
@@ -21454,7 +21996,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2127
+/* "libpetsc4py.pyx":2145
  *     return  0
  * 
  * cdef PetscErrorCode TSCreate_Python(             # <<<<<<<<<<<<<<
@@ -21470,24 +22012,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
   TSOps __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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":2131
+  /* "libpetsc4py.pyx":2149
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSCreate_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef TSOps ops     = ts.ops
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSCreate_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSCreate_Python"));
 
-  /* "libpetsc4py.pyx":2133
+  /* "libpetsc4py.pyx":2151
  *     FunctionBegin(b"TSCreate_Python")
  *     #
  *     cdef TSOps ops     = ts.ops             # <<<<<<<<<<<<<<
@@ -21497,7 +22036,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
   __pyx_t_1 = __pyx_v_ts->ops;
   __pyx_v_ops = __pyx_t_1;
 
-  /* "libpetsc4py.pyx":2134
+  /* "libpetsc4py.pyx":2152
  *     #
  *     cdef TSOps ops     = ts.ops
  *     ops.reset          = TSReset_Python             # <<<<<<<<<<<<<<
@@ -21506,7 +22045,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->reset = __pyx_f_11libpetsc4py_TSReset_Python;
 
-  /* "libpetsc4py.pyx":2135
+  /* "libpetsc4py.pyx":2153
  *     cdef TSOps ops     = ts.ops
  *     ops.reset          = TSReset_Python
  *     ops.destroy        = TSDestroy_Python             # <<<<<<<<<<<<<<
@@ -21515,7 +22054,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_TSDestroy_Python;
 
-  /* "libpetsc4py.pyx":2136
+  /* "libpetsc4py.pyx":2154
  *     ops.reset          = TSReset_Python
  *     ops.destroy        = TSDestroy_Python
  *     ops.setup          = TSSetUp_Python             # <<<<<<<<<<<<<<
@@ -21524,7 +22063,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_TSSetUp_Python;
 
-  /* "libpetsc4py.pyx":2137
+  /* "libpetsc4py.pyx":2155
  *     ops.destroy        = TSDestroy_Python
  *     ops.setup          = TSSetUp_Python
  *     ops.setfromoptions = TSSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -21533,7 +22072,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_TSSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":2138
+  /* "libpetsc4py.pyx":2156
  *     ops.setup          = TSSetUp_Python
  *     ops.setfromoptions = TSSetFromOptions_Python
  *     ops.view           = TSView_Python             # <<<<<<<<<<<<<<
@@ -21542,7 +22081,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_TSView_Python;
 
-  /* "libpetsc4py.pyx":2139
+  /* "libpetsc4py.pyx":2157
  *     ops.setfromoptions = TSSetFromOptions_Python
  *     ops.view           = TSView_Python
  *     ops.step           = TSStep_Python             # <<<<<<<<<<<<<<
@@ -21551,7 +22090,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->step = __pyx_f_11libpetsc4py_TSStep_Python;
 
-  /* "libpetsc4py.pyx":2140
+  /* "libpetsc4py.pyx":2158
  *     ops.view           = TSView_Python
  *     ops.step           = TSStep_Python
  *     ops.rollback       = TSRollBack_Python             # <<<<<<<<<<<<<<
@@ -21560,7 +22099,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->rollback = __pyx_f_11libpetsc4py_TSRollBack_Python;
 
-  /* "libpetsc4py.pyx":2141
+  /* "libpetsc4py.pyx":2159
  *     ops.step           = TSStep_Python
  *     ops.rollback       = TSRollBack_Python
  *     ops.interpolate    = TSInterpolate_Python             # <<<<<<<<<<<<<<
@@ -21569,7 +22108,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->interpolate = __pyx_f_11libpetsc4py_TSInterpolate_Python;
 
-  /* "libpetsc4py.pyx":2142
+  /* "libpetsc4py.pyx":2160
  *     ops.rollback       = TSRollBack_Python
  *     ops.interpolate    = TSInterpolate_Python
  *     ops.evaluatestep   = TSEvaluateStep_Python             # <<<<<<<<<<<<<<
@@ -21578,7 +22117,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->evaluatestep = __pyx_f_11libpetsc4py_TSEvaluateStep_Python;
 
-  /* "libpetsc4py.pyx":2143
+  /* "libpetsc4py.pyx":2161
  *     ops.interpolate    = TSInterpolate_Python
  *     ops.evaluatestep   = TSEvaluateStep_Python
  *     ops.snesfunction   = SNESTSFormFunction_Python             # <<<<<<<<<<<<<<
@@ -21587,7 +22126,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->snesfunction = __pyx_f_11libpetsc4py_SNESTSFormFunction_Python;
 
-  /* "libpetsc4py.pyx":2144
+  /* "libpetsc4py.pyx":2162
  *     ops.evaluatestep   = TSEvaluateStep_Python
  *     ops.snesfunction   = SNESTSFormFunction_Python
  *     ops.snesjacobian   = SNESTSFormJacobian_Python             # <<<<<<<<<<<<<<
@@ -21596,28 +22135,28 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->snesjacobian = __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python;
 
-  /* "libpetsc4py.pyx":2146
+  /* "libpetsc4py.pyx":2164
  *     ops.snesjacobian   = SNESTSFormJacobian_Python
  *     #
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>ts, b"TSPythonSetType_C",
  *             <PetscVoidFunction>TSPythonSetType_PYTHON) )
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_ts), __pyx_k_TSPythonSetType_C, ((PetscVoidFunction)__pyx_f_11libpetsc4py_TSPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_ts), ((char *)"TSPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_TSPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2164, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2150
+  /* "libpetsc4py.pyx":2168
  *             <PetscVoidFunction>TSPythonSetType_PYTHON) )
  *     #
  *     cdef ctx = PyTS(NULL)             # <<<<<<<<<<<<<<
  *     ts.data = <void*> ctx
  *     Py_INCREF(<PyObject*>ts.data)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(NULL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":2151
+  /* "libpetsc4py.pyx":2169
  *     #
  *     cdef ctx = PyTS(NULL)
  *     ts.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -21626,7 +22165,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ts->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":2152
+  /* "libpetsc4py.pyx":2170
  *     cdef ctx = PyTS(NULL)
  *     ts.data = <void*> ctx
  *     Py_INCREF(<PyObject*>ts.data)             # <<<<<<<<<<<<<<
@@ -21635,7 +22174,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   Py_INCREF(((PyObject *)__pyx_v_ts->data));
 
-  /* "libpetsc4py.pyx":2153
+  /* "libpetsc4py.pyx":2171
  *     ts.data = <void*> ctx
  *     Py_INCREF(<PyObject*>ts.data)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21645,7 +22184,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2127
+  /* "libpetsc4py.pyx":2145
  *     return  0
  * 
  * cdef PetscErrorCode TSCreate_Python(             # <<<<<<<<<<<<<<
@@ -21667,7 +22206,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2155
+/* "libpetsc4py.pyx":2173
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSDestroy_Python(             # <<<<<<<<<<<<<<
@@ -21689,33 +22228,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = 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("TSDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":2159
+  /* "libpetsc4py.pyx":2177
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSDestroy_Python")             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectComposeFunction(
  *             <PetscObject>ts, b"TSPythonSetType_C",
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSDestroy_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSDestroy_Python"));
 
-  /* "libpetsc4py.pyx":2160
+  /* "libpetsc4py.pyx":2178
  *     except IERR with gil:
  *     FunctionBegin(b"TSDestroy_Python")
  *     CHKERR( PetscObjectComposeFunction(             # <<<<<<<<<<<<<<
  *             <PetscObject>ts, b"TSPythonSetType_C",
  *             <PetscVoidFunction>NULL) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_ts), __pyx_k_TSPythonSetType_C, ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectComposeFunction(((PetscObject)__pyx_v_ts), ((char *)"TSPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2178, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2164
+  /* "libpetsc4py.pyx":2182
  *             <PetscVoidFunction>NULL) )
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21728,7 +22264,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2165
+  /* "libpetsc4py.pyx":2183
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -21737,7 +22273,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":2166
+    /* "libpetsc4py.pyx":2184
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(ts)             # <<<<<<<<<<<<<<
@@ -21746,17 +22282,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_ts);
 
-    /* "libpetsc4py.pyx":2167
+    /* "libpetsc4py.pyx":2185
  *     try:
  *         addRef(ts)
  *         TSPythonSetContext(ts, NULL)             # <<<<<<<<<<<<<<
  *     finally:
  *         delRef(ts)
  */
-    __pyx_t_3 = TSPythonSetContext(__pyx_v_ts, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2167; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_3 = TSPythonSetContext(__pyx_v_ts, NULL); if (unlikely(__pyx_t_3 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2185, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":2169
+  /* "libpetsc4py.pyx":2187
  *         TSPythonSetContext(ts, NULL)
  *     finally:
  *         delRef(ts)             # <<<<<<<<<<<<<<
@@ -21767,7 +22303,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_ts);
 
-      /* "libpetsc4py.pyx":2170
+      /* "libpetsc4py.pyx":2188
  *     finally:
  *         delRef(ts)
  *         Py_DECREF(<PyObject*>ts.data)             # <<<<<<<<<<<<<<
@@ -21776,7 +22312,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
       Py_DECREF(((PyObject *)__pyx_v_ts->data));
 
-      /* "libpetsc4py.pyx":2171
+      /* "libpetsc4py.pyx":2189
  *         delRef(ts)
  *         Py_DECREF(<PyObject*>ts.data)
  *         ts.data = NULL             # <<<<<<<<<<<<<<
@@ -21787,8 +22323,10 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
       goto __pyx_L6;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L5_error:;
       __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
       __Pyx_XGOTREF(__pyx_t_6);
@@ -21800,7 +22338,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
       __pyx_t_1 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
       {
 
-        /* "libpetsc4py.pyx":2169
+        /* "libpetsc4py.pyx":2187
  *         TSPythonSetContext(ts, NULL)
  *     finally:
  *         delRef(ts)             # <<<<<<<<<<<<<<
@@ -21809,7 +22347,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_ts);
 
-        /* "libpetsc4py.pyx":2170
+        /* "libpetsc4py.pyx":2188
  *     finally:
  *         delRef(ts)
  *         Py_DECREF(<PyObject*>ts.data)             # <<<<<<<<<<<<<<
@@ -21818,7 +22356,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
         Py_DECREF(((PyObject *)__pyx_v_ts->data));
 
-        /* "libpetsc4py.pyx":2171
+        /* "libpetsc4py.pyx":2189
  *         delRef(ts)
  *         Py_DECREF(<PyObject*>ts.data)
  *         ts.data = NULL             # <<<<<<<<<<<<<<
@@ -21827,6 +22365,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
         __pyx_v_ts->data = NULL;
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
@@ -21844,7 +22383,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":2172
+  /* "libpetsc4py.pyx":2190
  *         Py_DECREF(<PyObject*>ts.data)
  *         ts.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21854,7 +22393,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2155
+  /* "libpetsc4py.pyx":2173
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSDestroy_Python(             # <<<<<<<<<<<<<<
@@ -21874,7 +22413,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2174
+/* "libpetsc4py.pyx":2192
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSetUp_Python(             # <<<<<<<<<<<<<<
@@ -21885,7 +22424,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
 static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   Vec __pyx_v_vec_update;
   Vec __pyx_v_vec_dot;
-  char __pyx_v_name[2048];
+  char __pyx_v_name[0x800];
   PetscBool __pyx_v_found;
   PyObject *__pyx_v_setUp = 0;
   PetscErrorCode __pyx_r;
@@ -21899,24 +22438,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = 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("TSSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":2178
+  /* "libpetsc4py.pyx":2196
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSSetUp_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef PetscVec vec_update = NULL
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSSetUp_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSSetUp_Python"));
 
-  /* "libpetsc4py.pyx":2180
+  /* "libpetsc4py.pyx":2198
  *     FunctionBegin(b"TSSetUp_Python")
  *     #
  *     cdef PetscVec vec_update = NULL             # <<<<<<<<<<<<<<
@@ -21925,34 +22461,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   __pyx_v_vec_update = NULL;
 
-  /* "libpetsc4py.pyx":2181
+  /* "libpetsc4py.pyx":2199
  *     #
  *     cdef PetscVec vec_update = NULL
  *     CHKERR( VecDuplicate(ts.vec_sol,&vec_update) )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectCompose(<PetscObject>ts,
  *                                 b"@ts.vec_update",
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_ts->vec_sol, (&__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_ts->vec_sol, (&__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2199, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2182
+  /* "libpetsc4py.pyx":2200
  *     cdef PetscVec vec_update = NULL
  *     CHKERR( VecDuplicate(ts.vec_sol,&vec_update) )
  *     CHKERR( PetscObjectCompose(<PetscObject>ts,             # <<<<<<<<<<<<<<
  *                                 b"@ts.vec_update",
  *                                 <PetscObject>vec_update) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ts), __pyx_k_ts_vec_update, ((PetscObject)__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ts), ((char *)"@ts.vec_update"), ((PetscObject)__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2200, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2185
+  /* "libpetsc4py.pyx":2203
  *                                 b"@ts.vec_update",
  *                                 <PetscObject>vec_update) )
  *     CHKERR( VecDestroy(&vec_update) )             # <<<<<<<<<<<<<<
  *     cdef PetscVec vec_dot = NULL
  *     CHKERR( VecDuplicate(ts.vec_sol,&vec_dot) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDestroy((&__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDestroy((&__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2203, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2186
+  /* "libpetsc4py.pyx":2204
  *                                 <PetscObject>vec_update) )
  *     CHKERR( VecDestroy(&vec_update) )
  *     cdef PetscVec vec_dot = NULL             # <<<<<<<<<<<<<<
@@ -21961,66 +22497,66 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   __pyx_v_vec_dot = NULL;
 
-  /* "libpetsc4py.pyx":2187
+  /* "libpetsc4py.pyx":2205
  *     CHKERR( VecDestroy(&vec_update) )
  *     cdef PetscVec vec_dot = NULL
  *     CHKERR( VecDuplicate(ts.vec_sol,&vec_dot) )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectCompose(<PetscObject>ts,
  *                                 b"@ts.vec_dot",
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_ts->vec_sol, (&__pyx_v_vec_dot))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_ts->vec_sol, (&__pyx_v_vec_dot))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2205, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2188
+  /* "libpetsc4py.pyx":2206
  *     cdef PetscVec vec_dot = NULL
  *     CHKERR( VecDuplicate(ts.vec_sol,&vec_dot) )
  *     CHKERR( PetscObjectCompose(<PetscObject>ts,             # <<<<<<<<<<<<<<
  *                                 b"@ts.vec_dot",
  *                                 <PetscObject>vec_dot) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ts), __pyx_k_ts_vec_dot, ((PetscObject)__pyx_v_vec_dot))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ts), ((char *)"@ts.vec_dot"), ((PetscObject)__pyx_v_vec_dot))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2206, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2191
+  /* "libpetsc4py.pyx":2209
  *                                 b"@ts.vec_dot",
  *                                 <PetscObject>vec_dot) )
  *     CHKERR( VecDestroy(&vec_dot) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef char name[2048]
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDestroy((&__pyx_v_vec_dot))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDestroy((&__pyx_v_vec_dot))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2209, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2194
+  /* "libpetsc4py.pyx":2212
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
  *     if PyTS(ts).self is None:
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":2195
+  /* "libpetsc4py.pyx":2213
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyTS(ts).self is None:             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsGetString(
+ *         CHKERR( PetscOptionsGetString(NULL,
  *                 getPrefix(ts),b"-ts_python_type",
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = (((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_2)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2196
+    /* "libpetsc4py.pyx":2214
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyTS(ts).self is None:
- *         CHKERR( PetscOptionsGetString(             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(ts),b"-ts_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(__pyx_f_11libpetsc4py_getPrefix(__pyx_v_ts), __pyx_k_ts_python_type, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsGetString(NULL, __pyx_f_11libpetsc4py_getPrefix(__pyx_v_ts), ((char *)"-ts_python_type"), __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2214, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2199
+    /* "libpetsc4py.pyx":2217
  *                 getPrefix(ts),b"-ts_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -22037,63 +22573,83 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":2200
+      /* "libpetsc4py.pyx":2218
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:
  *             CHKERR( TSPythonSetType_PYTHON(ts,name) )             # <<<<<<<<<<<<<<
  *     if PyTS(ts).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,
  */
-      __pyx_t_5 = __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(__pyx_v_ts, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L4;
+      __pyx_t_5 = __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(__pyx_v_ts, __pyx_v_name); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2218, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2218, __pyx_L1_error)
+
+      /* "libpetsc4py.pyx":2217
+ *                 getPrefix(ts),b"-ts_python_type",
+ *                 name,sizeof(name),&found) )
+ *         if found and name[0]:             # <<<<<<<<<<<<<<
+ *             CHKERR( TSPythonSetType_PYTHON(ts,name) )
+ *     if PyTS(ts).self is None:
+ */
     }
-    __pyx_L4:;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":2213
+ *     cdef char name[2048]
+ *     cdef PetscBool found = PETSC_FALSE
+ *     if PyTS(ts).self is None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetString(NULL,
+ *                 getPrefix(ts),b"-ts_python_type",
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2201
+  /* "libpetsc4py.pyx":2219
  *         if found and name[0]:
  *             CHKERR( TSPythonSetType_PYTHON(ts,name) )
  *     if PyTS(ts).self is None:             # <<<<<<<<<<<<<<
  *         return PetscSETERR(PETSC_ERR_USER,
  *             "Python context not set, call one of \n"
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_4 = (((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_2)->__pyx_base.self == Py_None);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":2202
+    /* "libpetsc4py.pyx":2220
  *             CHKERR( TSPythonSetType_PYTHON(ts,name) )
  *     if PyTS(ts).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
  *             "Python context not set, call one of \n"
  *             " * TSPythonSetType(ts,\"[package.]module.class\")\n"
  */
-    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, __pyx_k_Python_context_not_set_call_one_5);
+    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, ((char *)"Python context not set, call one of \n * TSPythonSetType(ts,\"[package.]module.class\")\n * TSSetFromOptions(ts) and pass option -ts_python_type [package.]module.class"));
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":2219
+ *         if found and name[0]:
+ *             CHKERR( TSPythonSetType_PYTHON(ts,name) )
+ *     if PyTS(ts).self is None:             # <<<<<<<<<<<<<<
+ *         return PetscSETERR(PETSC_ERR_USER,
+ *             "Python context not set, call one of \n"
+ */
   }
 
-  /* "libpetsc4py.pyx":2208
+  /* "libpetsc4py.pyx":2226
  *             "-ts_python_type [package.]module.class")
  *     #
  *     cdef setUp = PyTS(ts).setUp             # <<<<<<<<<<<<<<
  *     if setUp is not None:
  *         setUp(TS_(ts))
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_setUp = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":2209
+  /* "libpetsc4py.pyx":2227
  *     #
  *     cdef setUp = PyTS(ts).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -22104,14 +22660,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2210
+    /* "libpetsc4py.pyx":2228
  *     cdef setUp = PyTS(ts).setUp
  *     if setUp is not None:
  *         setUp(TS_(ts))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2228, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
@@ -22125,27 +22681,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2228, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_GOTREF(__pyx_t_6);
     } else {
-      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2228, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
       __Pyx_GIVEREF(__pyx_t_2);
       PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_2);
       __pyx_t_2 = 0;
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2228, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    goto __pyx_L8;
+
+    /* "libpetsc4py.pyx":2227
+ *     #
+ *     cdef setUp = PyTS(ts).setUp
+ *     if setUp is not None:             # <<<<<<<<<<<<<<
+ *         setUp(TS_(ts))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L8:;
 
-  /* "libpetsc4py.pyx":2211
+  /* "libpetsc4py.pyx":2229
  *     if setUp is not None:
  *         setUp(TS_(ts))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22155,7 +22717,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2174
+  /* "libpetsc4py.pyx":2192
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSetUp_Python(             # <<<<<<<<<<<<<<
@@ -22181,7 +22743,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2213
+/* "libpetsc4py.pyx":2231
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSReset_Python(             # <<<<<<<<<<<<<<
@@ -22201,15 +22763,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = 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("TSReset_Python", 0);
 
-  /* "libpetsc4py.pyx":2217
+  /* "libpetsc4py.pyx":2235
  *     ) \
  *     except IERR with gil:
  *     if getRef(ts) == 0: return 0             # <<<<<<<<<<<<<<
@@ -22222,49 +22781,49 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2218
+  /* "libpetsc4py.pyx":2236
  *     except IERR with gil:
  *     if getRef(ts) == 0: return 0
  *     FunctionBegin(b"TSReset_Python")             # <<<<<<<<<<<<<<
  *     #
  *     CHKERR( PetscObjectCompose(<PetscObject>ts, b"@ts.vec_update", NULL) )
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSReset_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSReset_Python"));
 
-  /* "libpetsc4py.pyx":2220
+  /* "libpetsc4py.pyx":2238
  *     FunctionBegin(b"TSReset_Python")
  *     #
  *     CHKERR( PetscObjectCompose(<PetscObject>ts, b"@ts.vec_update", NULL) )             # <<<<<<<<<<<<<<
  *     CHKERR( PetscObjectCompose(<PetscObject>ts, b"@ts.vec_dot",    NULL) )
  *     #
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ts), __pyx_k_ts_vec_update, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ts), ((char *)"@ts.vec_update"), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2238, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2221
+  /* "libpetsc4py.pyx":2239
  *     #
  *     CHKERR( PetscObjectCompose(<PetscObject>ts, b"@ts.vec_update", NULL) )
  *     CHKERR( PetscObjectCompose(<PetscObject>ts, b"@ts.vec_dot",    NULL) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef reset = PyTS(ts).reset
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ts), __pyx_k_ts_vec_dot, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectCompose(((PetscObject)__pyx_v_ts), ((char *)"@ts.vec_dot"), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2239, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2223
+  /* "libpetsc4py.pyx":2241
  *     CHKERR( PetscObjectCompose(<PetscObject>ts, b"@ts.vec_dot",    NULL) )
  *     #
  *     cdef reset = PyTS(ts).reset             # <<<<<<<<<<<<<<
  *     if reset is not None:
  *         reset(TS_(ts))
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reset); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_reset = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "libpetsc4py.pyx":2224
+  /* "libpetsc4py.pyx":2242
  *     #
  *     cdef reset = PyTS(ts).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -22275,14 +22834,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
   __pyx_t_5 = (__pyx_t_1 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":2225
+    /* "libpetsc4py.pyx":2243
  *     cdef reset = PyTS(ts).reset
  *     if reset is not None:
  *         reset(TS_(ts))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2243, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_reset);
     __pyx_t_6 = __pyx_v_reset; __pyx_t_7 = NULL;
@@ -22296,27 +22855,33 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2243, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2243, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2243, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    goto __pyx_L4;
+
+    /* "libpetsc4py.pyx":2242
+ *     #
+ *     cdef reset = PyTS(ts).reset
+ *     if reset is not None:             # <<<<<<<<<<<<<<
+ *         reset(TS_(ts))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":2226
+  /* "libpetsc4py.pyx":2244
  *     if reset is not None:
  *         reset(TS_(ts))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22326,7 +22891,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2213
+  /* "libpetsc4py.pyx":2231
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSReset_Python(             # <<<<<<<<<<<<<<
@@ -22352,19 +22917,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2228
+/* "libpetsc4py.pyx":2246
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscTS ts,
  */
 
-static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptions *__pyx_v_PetscOptionsObject, TS __pyx_v_ts) {
-  char __pyx_v_name[2048];
+static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionItems *__pyx_v_PetscOptionsObject, TS __pyx_v_ts) {
+  char __pyx_v_name[0x800];
   char *__pyx_v_defval;
   PetscBool __pyx_v_found;
-  CYTHON_UNUSED PetscOptions *PetscOptionsObject;
+  PetscOptionItems *PetscOptionsObject;
   PyObject *__pyx_v_setFromOptions = 0;
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -22378,66 +22943,72 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptions
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = 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("TSSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":2233
+  /* "libpetsc4py.pyx":2251
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSSetFromOptions_Python")             # <<<<<<<<<<<<<<
  *     cdef char name[2048], *defval = PyTS(ts).getname()
  *     cdef PetscBool found = PETSC_FALSE
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSSetFromOptions_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":2234
+  /* "libpetsc4py.pyx":2252
  *     except IERR with gil:
  *     FunctionBegin(b"TSSetFromOptions_Python")
  *     cdef char name[2048], *defval = PyTS(ts).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2252, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyTS *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_11libpetsc4py__PyTS *)((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_1)->__pyx_base.__pyx_vtab)->__pyx_base.getname(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1)); if (unlikely(__pyx_t_2 == NULL && PyErr_Occurred())) __PYX_ERR(0, 2252, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":2235
+  /* "libpetsc4py.pyx":2253
  *     FunctionBegin(b"TSSetFromOptions_Python")
  *     cdef char name[2048], *defval = PyTS(ts).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":2236
+  /* "libpetsc4py.pyx":2254
  *     cdef char name[2048], *defval = PyTS(ts).getname()
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
  *     CHKERR( PetscOptionsString(
  *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":2237
+  /* "libpetsc4py.pyx":2255
  *     cdef PetscBool found = PETSC_FALSE
- *     cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+ *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
- *             b"TSPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
+ */
+  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(((char *)"-ts_python_type"), ((char *)"Python [package.]module[.{class|function}]"), ((char *)"TSPythonSetType"), __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 2255, __pyx_L1_error)
+
+  /* "libpetsc4py.pyx":2257
+ *     CHKERR( PetscOptionsString(
+ *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
+ *     if found and name[0]:
+ *         CHKERR( TSPythonSetType_PYTHON(ts,name) )
  */
-  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(PetscOptionsString(__pyx_k_ts_python_type, __pyx_k_Python_package_module_class_func, __pyx_k_TSPythonSetType, __pyx_v_defval, __pyx_v_name, (sizeof(__pyx_v_name)), (&__pyx_v_found))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((void)PetscOptionsObject);
 
-  /* "libpetsc4py.pyx":2240
+  /* "libpetsc4py.pyx":2258
  *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
- *             b"TSPythonSetType",defval,name,sizeof(name),&found) )
+ *             b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
  *         CHKERR( TSPythonSetType_PYTHON(ts,name) )
  *     #
@@ -22452,35 +23023,41 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptions
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2241
- *             b"TSPythonSetType",defval,name,sizeof(name),&found) )
+    /* "libpetsc4py.pyx":2259
+ *             b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:
  *         CHKERR( TSPythonSetType_PYTHON(ts,name) )             # <<<<<<<<<<<<<<
  *     #
  *     cdef setFromOptions = PyTS(ts).setFromOptions
  */
-    __pyx_t_6 = __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(__pyx_v_ts, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_6 = __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(__pyx_v_ts, __pyx_v_name); if (unlikely(__pyx_t_6 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2259, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 2259, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":2258
+ *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
+ *             b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
+ *     if found and name[0]:             # <<<<<<<<<<<<<<
+ *         CHKERR( TSPythonSetType_PYTHON(ts,name) )
+ *     #
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2243
+  /* "libpetsc4py.pyx":2261
  *         CHKERR( TSPythonSetType_PYTHON(ts,name) )
  *     #
  *     cdef setFromOptions = PyTS(ts).setFromOptions             # <<<<<<<<<<<<<<
  *     if setFromOptions is not None:
  *         setFromOptions(TS_(ts))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_setFromOptions = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "libpetsc4py.pyx":2244
+  /* "libpetsc4py.pyx":2262
  *     #
  *     cdef setFromOptions = PyTS(ts).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -22491,14 +23068,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptions
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":2245
+    /* "libpetsc4py.pyx":2263
  *     cdef setFromOptions = PyTS(ts).setFromOptions
  *     if setFromOptions is not None:
  *         setFromOptions(TS_(ts))             # <<<<<<<<<<<<<<
  *     CHKERR( SNESSetFromOptions(ts.snes) )
  *     return FunctionEnd()
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
@@ -22512,36 +23089,42 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptions
       }
     }
     if (!__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2263, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2263, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2263, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    goto __pyx_L6;
+
+    /* "libpetsc4py.pyx":2262
+ *     #
+ *     cdef setFromOptions = PyTS(ts).setFromOptions
+ *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
+ *         setFromOptions(TS_(ts))
+ *     CHKERR( SNESSetFromOptions(ts.snes) )
+ */
   }
-  __pyx_L6:;
 
-  /* "libpetsc4py.pyx":2246
+  /* "libpetsc4py.pyx":2264
  *     if setFromOptions is not None:
  *         setFromOptions(TS_(ts))
  *     CHKERR( SNESSetFromOptions(ts.snes) )             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(SNESSetFromOptions(__pyx_v_ts->snes)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(SNESSetFromOptions(__pyx_v_ts->snes)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 2264, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2247
+  /* "libpetsc4py.pyx":2265
  *         setFromOptions(TS_(ts))
  *     CHKERR( SNESSetFromOptions(ts.snes) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22551,11 +23134,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptions
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2228
+  /* "libpetsc4py.pyx":2246
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSetFromOptions_Python(             # <<<<<<<<<<<<<<
- *     PetscOptions *PetscOptionsObject,
+ *     PetscOptionItems *PetscOptionsObject,
  *     PetscTS ts,
  */
 
@@ -22577,7 +23160,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptions
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2249
+/* "libpetsc4py.pyx":2267
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSView_Python(             # <<<<<<<<<<<<<<
@@ -22599,51 +23182,48 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("TSView_Python", 0);
 
-  /* "libpetsc4py.pyx":2254
+  /* "libpetsc4py.pyx":2272
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSView_Python")             # <<<<<<<<<<<<<<
  *     viewcontext(PyTS(ts), vwr)
  *     cdef view = PyTS(ts).view
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSView_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSView_Python"));
 
-  /* "libpetsc4py.pyx":2255
+  /* "libpetsc4py.pyx":2273
  *     except IERR with gil:
  *     FunctionBegin(b"TSView_Python")
  *     viewcontext(PyTS(ts), vwr)             # <<<<<<<<<<<<<<
  *     cdef view = PyTS(ts).view
  *     if view is not None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2273, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_viewcontext(((struct __pyx_obj_11libpetsc4py__PyObj *)__pyx_t_1), __pyx_v_vwr); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2273, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":2256
+  /* "libpetsc4py.pyx":2274
  *     FunctionBegin(b"TSView_Python")
  *     viewcontext(PyTS(ts), vwr)
  *     cdef view = PyTS(ts).view             # <<<<<<<<<<<<<<
  *     if view is not None:
  *         view(TS_(ts), Viewer_(vwr))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2274, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2274, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_view = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":2257
+  /* "libpetsc4py.pyx":2275
  *     viewcontext(PyTS(ts), vwr)
  *     cdef view = PyTS(ts).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -22654,16 +23234,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":2258
+    /* "libpetsc4py.pyx":2276
  *     cdef view = PyTS(ts).view
  *     if view is not None:
  *         view(TS_(ts), Viewer_(vwr))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2276, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2276, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
@@ -22678,7 +23258,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2276, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -22689,16 +23269,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
     PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_6);
     __pyx_t_1 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2276, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "libpetsc4py.pyx":2275
+ *     viewcontext(PyTS(ts), vwr)
+ *     cdef view = PyTS(ts).view
+ *     if view is not None:             # <<<<<<<<<<<<<<
+ *         view(TS_(ts), Viewer_(vwr))
+ *     return FunctionEnd()
+ */
   }
-  __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2259
+  /* "libpetsc4py.pyx":2277
  *     if view is not None:
  *         view(TS_(ts), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22708,7 +23294,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2249
+  /* "libpetsc4py.pyx":2267
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSView_Python(             # <<<<<<<<<<<<<<
@@ -22735,7 +23321,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2261
+/* "libpetsc4py.pyx":2279
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSStep_Python(             # <<<<<<<<<<<<<<
@@ -22755,39 +23341,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PetscErrorCode __pyx_t_8;
-  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("TSStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2265
+  /* "libpetsc4py.pyx":2283
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSStep_Python")             # <<<<<<<<<<<<<<
  *     cdef step = PyTS(ts).step
  *     if step is not None:
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSStep_Python"));
 
-  /* "libpetsc4py.pyx":2266
+  /* "libpetsc4py.pyx":2284
  *     except IERR with gil:
  *     FunctionBegin(b"TSStep_Python")
  *     cdef step = PyTS(ts).step             # <<<<<<<<<<<<<<
  *     if step is not None:
  *         step(TS_(ts))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2284, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2284, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_step = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2267
+  /* "libpetsc4py.pyx":2285
  *     FunctionBegin(b"TSStep_Python")
  *     cdef step = PyTS(ts).step
  *     if step is not None:             # <<<<<<<<<<<<<<
@@ -22798,14 +23381,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2268
+    /* "libpetsc4py.pyx":2286
  *     cdef step = PyTS(ts).step
  *     if step is not None:
  *         step(TS_(ts))             # <<<<<<<<<<<<<<
  *     else:
  *         TSStep_Python_default(ts)
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2286, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_step);
     __pyx_t_5 = __pyx_v_step; __pyx_t_6 = NULL;
@@ -22819,38 +23402,46 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2286, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2286, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2286, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+    /* "libpetsc4py.pyx":2285
+ *     FunctionBegin(b"TSStep_Python")
+ *     cdef step = PyTS(ts).step
+ *     if step is not None:             # <<<<<<<<<<<<<<
+ *         step(TS_(ts))
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":2270
+  /* "libpetsc4py.pyx":2288
  *         step(TS_(ts))
  *     else:
  *         TSStep_Python_default(ts)             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_8 = __pyx_f_11libpetsc4py_TSStep_Python_default(__pyx_v_ts); if (unlikely(__pyx_t_8 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_8 = __pyx_f_11libpetsc4py_TSStep_Python_default(__pyx_v_ts); if (unlikely(__pyx_t_8 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2288, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2271
+  /* "libpetsc4py.pyx":2289
  *     else:
  *         TSStep_Python_default(ts)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22860,7 +23451,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2261
+  /* "libpetsc4py.pyx":2279
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSStep_Python(             # <<<<<<<<<<<<<<
@@ -22886,7 +23477,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2273
+/* "libpetsc4py.pyx":2291
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSRollBack_Python(             # <<<<<<<<<<<<<<
@@ -22905,39 +23496,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
   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;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSRollBack_Python", 0);
 
-  /* "libpetsc4py.pyx":2277
+  /* "libpetsc4py.pyx":2295
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSRollBack_Python")             # <<<<<<<<<<<<<<
  *     cdef rollback = PyTS(ts).rollback
  *     if rollback is None: return UNSUPPORTED(b"rollback")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSRollBack_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSRollBack_Python"));
 
-  /* "libpetsc4py.pyx":2278
+  /* "libpetsc4py.pyx":2296
  *     except IERR with gil:
  *     FunctionBegin(b"TSRollBack_Python")
  *     cdef rollback = PyTS(ts).rollback             # <<<<<<<<<<<<<<
  *     if rollback is None: return UNSUPPORTED(b"rollback")
  *     rollback(TS_(ts))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rollback); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rollback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_rollback = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2279
+  /* "libpetsc4py.pyx":2297
  *     FunctionBegin(b"TSRollBack_Python")
  *     cdef rollback = PyTS(ts).rollback
  *     if rollback is None: return UNSUPPORTED(b"rollback")             # <<<<<<<<<<<<<<
@@ -22947,18 +23535,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
   __pyx_t_3 = (__pyx_v_rollback == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_rollback);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"rollback"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2280
+  /* "libpetsc4py.pyx":2298
  *     cdef rollback = PyTS(ts).rollback
  *     if rollback is None: return UNSUPPORTED(b"rollback")
  *     rollback(TS_(ts))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2298, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_rollback);
   __pyx_t_5 = __pyx_v_rollback; __pyx_t_6 = NULL;
@@ -22972,24 +23560,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
     }
   }
   if (!__pyx_t_6) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2298, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2281
+  /* "libpetsc4py.pyx":2299
  *     if rollback is None: return UNSUPPORTED(b"rollback")
  *     rollback(TS_(ts))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22999,7 +23587,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2273
+  /* "libpetsc4py.pyx":2291
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSRollBack_Python(             # <<<<<<<<<<<<<<
@@ -23025,7 +23613,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2283
+/* "libpetsc4py.pyx":2301
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSInterpolate_Python(             # <<<<<<<<<<<<<<
@@ -23047,39 +23635,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
   PyObject *__pyx_t_8 = NULL;
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = 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("TSInterpolate_Python", 0);
 
-  /* "libpetsc4py.pyx":2289
+  /* "libpetsc4py.pyx":2307
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSInterpolate _Python")             # <<<<<<<<<<<<<<
  *     cdef interpolate = PyTS(ts).interpolate
  *     if interpolate is None: return UNSUPPORTED(b"interpolate")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSInterpolate__Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSInterpolate _Python"));
 
-  /* "libpetsc4py.pyx":2290
+  /* "libpetsc4py.pyx":2308
  *     except IERR with gil:
  *     FunctionBegin(b"TSInterpolate _Python")
  *     cdef interpolate = PyTS(ts).interpolate             # <<<<<<<<<<<<<<
  *     if interpolate is None: return UNSUPPORTED(b"interpolate")
  *     interpolate(TS_(ts),toReal(t),Vec_(x))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2308, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_interpolate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_interpolate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2308, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_interpolate = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2291
+  /* "libpetsc4py.pyx":2309
  *     FunctionBegin(b"TSInterpolate _Python")
  *     cdef interpolate = PyTS(ts).interpolate
  *     if interpolate is None: return UNSUPPORTED(b"interpolate")             # <<<<<<<<<<<<<<
@@ -23089,22 +23674,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
   __pyx_t_3 = (__pyx_v_interpolate == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_interpolate);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"interpolate"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2292
+  /* "libpetsc4py.pyx":2310
  *     cdef interpolate = PyTS(ts).interpolate
  *     if interpolate is None: return UNSUPPORTED(b"interpolate")
  *     interpolate(TS_(ts),toReal(t),Vec_(x))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __pyx_f_11libpetsc4py_toReal(__pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_11libpetsc4py_toReal(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_interpolate);
   __pyx_t_7 = __pyx_v_interpolate; __pyx_t_8 = NULL;
@@ -23119,7 +23704,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -23133,13 +23718,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2293
+  /* "libpetsc4py.pyx":2311
  *     if interpolate is None: return UNSUPPORTED(b"interpolate")
  *     interpolate(TS_(ts),toReal(t),Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23149,7 +23734,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2283
+  /* "libpetsc4py.pyx":2301
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSInterpolate_Python(             # <<<<<<<<<<<<<<
@@ -23177,7 +23762,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2295
+/* "libpetsc4py.pyx":2313
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSEvaluateStep_Python(             # <<<<<<<<<<<<<<
@@ -23201,39 +23786,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   PetscBool __pyx_t_11;
-  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("TSEvaluateStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2302
+  /* "libpetsc4py.pyx":2320
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSEvaluateStep _Python")             # <<<<<<<<<<<<<<
  *     cdef evaluatestep = PyTS(ts).evaluatestep
  *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSEvaluateStep__Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSEvaluateStep _Python"));
 
-  /* "libpetsc4py.pyx":2303
+  /* "libpetsc4py.pyx":2321
  *     except IERR with gil:
  *     FunctionBegin(b"TSEvaluateStep _Python")
  *     cdef evaluatestep = PyTS(ts).evaluatestep             # <<<<<<<<<<<<<<
  *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")
  *     cdef done = evaluatestep(TS_(ts),toInt(o),Vec_(x))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_evaluatestep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_evaluatestep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_evaluatestep = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2304
+  /* "libpetsc4py.pyx":2322
  *     FunctionBegin(b"TSEvaluateStep _Python")
  *     cdef evaluatestep = PyTS(ts).evaluatestep
  *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")             # <<<<<<<<<<<<<<
@@ -23243,22 +23825,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   __pyx_t_3 = (__pyx_v_evaluatestep == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(__pyx_k_evaluatestep);
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"evaluatestep"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2305
+  /* "libpetsc4py.pyx":2323
  *     cdef evaluatestep = PyTS(ts).evaluatestep
  *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")
  *     cdef done = evaluatestep(TS_(ts),toInt(o),Vec_(x))             # <<<<<<<<<<<<<<
  *     if flag != NULL:
  *         flag[0] = PETSC_TRUE if done else PETSC_FALSE
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __pyx_f_11libpetsc4py_toInt(__pyx_v_o); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_11libpetsc4py_toInt(__pyx_v_o); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_evaluatestep);
   __pyx_t_7 = __pyx_v_evaluatestep; __pyx_t_8 = NULL;
@@ -23273,7 +23855,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
       __pyx_t_9 = 1;
     }
   }
-  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   if (__pyx_t_8) {
     __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -23287,14 +23869,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   __pyx_t_1 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __pyx_v_done = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2306
+  /* "libpetsc4py.pyx":2324
  *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")
  *     cdef done = evaluatestep(TS_(ts),toInt(o),Vec_(x))
  *     if flag != NULL:             # <<<<<<<<<<<<<<
@@ -23304,47 +23886,63 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   __pyx_t_4 = ((__pyx_v_flag != NULL) != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2307
+    /* "libpetsc4py.pyx":2325
  *     cdef done = evaluatestep(TS_(ts),toInt(o),Vec_(x))
  *     if flag != NULL:
  *         flag[0] = PETSC_TRUE if done else PETSC_FALSE             # <<<<<<<<<<<<<<
  *     elif not done:
  *         return PetscSETERR(PETSC_ERR_USER, "Cannot evaluate step")
  */
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_done); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_done); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 2325, __pyx_L1_error)
     if (__pyx_t_4) {
       __pyx_t_11 = PETSC_TRUE;
     } else {
       __pyx_t_11 = PETSC_FALSE;
     }
     (__pyx_v_flag[0]) = __pyx_t_11;
+
+    /* "libpetsc4py.pyx":2324
+ *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")
+ *     cdef done = evaluatestep(TS_(ts),toInt(o),Vec_(x))
+ *     if flag != NULL:             # <<<<<<<<<<<<<<
+ *         flag[0] = PETSC_TRUE if done else PETSC_FALSE
+ *     elif not done:
+ */
     goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":2308
+  /* "libpetsc4py.pyx":2326
  *     if flag != NULL:
  *         flag[0] = PETSC_TRUE if done else PETSC_FALSE
  *     elif not done:             # <<<<<<<<<<<<<<
  *         return PetscSETERR(PETSC_ERR_USER, "Cannot evaluate step")
  *     return FunctionEnd()
  */
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_done); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_done); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 2326, __pyx_L1_error)
   __pyx_t_3 = ((!__pyx_t_4) != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":2309
+    /* "libpetsc4py.pyx":2327
  *         flag[0] = PETSC_TRUE if done else PETSC_FALSE
  *     elif not done:
  *         return PetscSETERR(PETSC_ERR_USER, "Cannot evaluate step")             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, __pyx_k_Cannot_evaluate_step);
+    __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, ((char *)"Cannot evaluate step"));
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":2326
+ *     if flag != NULL:
+ *         flag[0] = PETSC_TRUE if done else PETSC_FALSE
+ *     elif not done:             # <<<<<<<<<<<<<<
+ *         return PetscSETERR(PETSC_ERR_USER, "Cannot evaluate step")
+ *     return FunctionEnd()
+ */
   }
   __pyx_L4:;
 
-  /* "libpetsc4py.pyx":2310
+  /* "libpetsc4py.pyx":2328
  *     elif not done:
  *         return PetscSETERR(PETSC_ERR_USER, "Cannot evaluate step")
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23354,7 +23952,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2295
+  /* "libpetsc4py.pyx":2313
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSEvaluateStep_Python(             # <<<<<<<<<<<<<<
@@ -23383,7 +23981,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2312
+/* "libpetsc4py.pyx":2330
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESTSFormFunction_Python(             # <<<<<<<<<<<<<<
@@ -23407,30 +24005,27 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
-  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("SNESTSFormFunction_Python", 0);
 
-  /* "libpetsc4py.pyx":2320
+  /* "libpetsc4py.pyx":2338
  *     except IERR with gil:
  *     #
  *     cdef formSNESFunction = PyTS(ts).formSNESFunction             # <<<<<<<<<<<<<<
  *     if formSNESFunction is not None:
  *         args = (SNES_(snes),Vec_(x),Vec_(f),TS_(ts))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_formSNESFunction); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_formSNESFunction); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_formSNESFunction = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2321
+  /* "libpetsc4py.pyx":2339
  *     #
  *     cdef formSNESFunction = PyTS(ts).formSNESFunction
  *     if formSNESFunction is not None:             # <<<<<<<<<<<<<<
@@ -23441,22 +24036,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2322
+    /* "libpetsc4py.pyx":2340
  *     cdef formSNESFunction = PyTS(ts).formSNESFunction
  *     if formSNESFunction is not None:
  *         args = (SNES_(snes),Vec_(x),Vec_(f),TS_(ts))             # <<<<<<<<<<<<<<
  *         formSNESFunction(args)
  *         return FunctionEnd()
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2340, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2340, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_f)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_f)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2340, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2340, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2340, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
@@ -23473,7 +24068,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
     __pyx_v_args = ((PyObject*)__pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "libpetsc4py.pyx":2323
+    /* "libpetsc4py.pyx":2341
  *     if formSNESFunction is not None:
  *         args = (SNES_(snes),Vec_(x),Vec_(f),TS_(ts))
  *         formSNESFunction(args)             # <<<<<<<<<<<<<<
@@ -23492,23 +24087,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_args); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2341, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2341, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL;
       __Pyx_INCREF(__pyx_v_args);
       __Pyx_GIVEREF(__pyx_v_args);
       PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_v_args);
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2341, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "libpetsc4py.pyx":2324
+    /* "libpetsc4py.pyx":2342
  *         args = (SNES_(snes),Vec_(x),Vec_(f),TS_(ts))
  *         formSNESFunction(args)
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23517,9 +24112,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":2339
+ *     #
+ *     cdef formSNESFunction = PyTS(ts).formSNESFunction
+ *     if formSNESFunction is not None:             # <<<<<<<<<<<<<<
+ *         args = (SNES_(snes),Vec_(x),Vec_(f),TS_(ts))
+ *         formSNESFunction(args)
+ */
   }
 
-  /* "libpetsc4py.pyx":2326
+  /* "libpetsc4py.pyx":2344
  *         return FunctionEnd()
  *     #
  *     cdef PetscVec dx = NULL             # <<<<<<<<<<<<<<
@@ -23528,16 +24131,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
   __pyx_v_dx = NULL;
 
-  /* "libpetsc4py.pyx":2327
+  /* "libpetsc4py.pyx":2345
  *     #
  *     cdef PetscVec dx = NULL
  *     CHKERR( PetscObjectQuery(             # <<<<<<<<<<<<<<
  *             <PetscObject>ts,
  *              b"@ts.vec_dot",
  */
-  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ts), __pyx_k_ts_vec_dot, ((PetscObject *)(&__pyx_v_dx)))); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ts), ((char *)"@ts.vec_dot"), ((PetscObject *)(&__pyx_v_dx)))); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2345, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2332
+  /* "libpetsc4py.pyx":2350
  *              <PetscObject*>&dx) )
  *     #
  *     cdef PetscReal t = ts.ptime + ts.time_step             # <<<<<<<<<<<<<<
@@ -23546,7 +24149,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
   __pyx_v_t = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2333
+  /* "libpetsc4py.pyx":2351
  *     #
  *     cdef PetscReal t = ts.ptime + ts.time_step
  *     cdef PetscReal a = 1.0/ts.time_step             # <<<<<<<<<<<<<<
@@ -23555,34 +24158,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
   __pyx_v_a = (1.0 / __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2334
+  /* "libpetsc4py.pyx":2352
  *     cdef PetscReal t = ts.ptime + ts.time_step
  *     cdef PetscReal a = 1.0/ts.time_step
  *     CHKERR( VecCopy(ts.vec_sol,dx)          )             # <<<<<<<<<<<<<<
  *     CHKERR( VecAXPBY(dx,+a,-a,x)            )
  *     CHKERR( TSComputeIFunction(ts,t,x,dx,f,PETSC_FALSE) )
  */
-  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_ts->vec_sol, __pyx_v_dx)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_ts->vec_sol, __pyx_v_dx)); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2352, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2335
+  /* "libpetsc4py.pyx":2353
  *     cdef PetscReal a = 1.0/ts.time_step
  *     CHKERR( VecCopy(ts.vec_sol,dx)          )
  *     CHKERR( VecAXPBY(dx,+a,-a,x)            )             # <<<<<<<<<<<<<<
  *     CHKERR( TSComputeIFunction(ts,t,x,dx,f,PETSC_FALSE) )
  *     return FunctionEnd()
  */
-  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(VecAXPBY(__pyx_v_dx, __pyx_v_a, (-__pyx_v_a), __pyx_v_x)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(VecAXPBY(__pyx_v_dx, __pyx_v_a, (-__pyx_v_a), __pyx_v_x)); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2353, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2336
+  /* "libpetsc4py.pyx":2354
  *     CHKERR( VecCopy(ts.vec_sol,dx)          )
  *     CHKERR( VecAXPBY(dx,+a,-a,x)            )
  *     CHKERR( TSComputeIFunction(ts,t,x,dx,f,PETSC_FALSE) )             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(TSComputeIFunction(__pyx_v_ts, __pyx_v_t, __pyx_v_x, __pyx_v_dx, __pyx_v_f, PETSC_FALSE)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(TSComputeIFunction(__pyx_v_ts, __pyx_v_t, __pyx_v_x, __pyx_v_dx, __pyx_v_f, PETSC_FALSE)); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2354, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2337
+  /* "libpetsc4py.pyx":2355
  *     CHKERR( VecAXPBY(dx,+a,-a,x)            )
  *     CHKERR( TSComputeIFunction(ts,t,x,dx,f,PETSC_FALSE) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23592,7 +24195,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2312
+  /* "libpetsc4py.pyx":2330
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESTSFormFunction_Python(             # <<<<<<<<<<<<<<
@@ -23619,7 +24222,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2339
+/* "libpetsc4py.pyx":2357
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESTSFormJacobian_Python(             # <<<<<<<<<<<<<<
@@ -23644,30 +24247,27 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   int __pyx_t_9;
-  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("SNESTSFormJacobian_Python", 0);
 
-  /* "libpetsc4py.pyx":2348
+  /* "libpetsc4py.pyx":2366
  *     except IERR with gil:
  *     #
  *     cdef formSNESJacobian = PyTS(ts).formSNESJacobian             # <<<<<<<<<<<<<<
  *     if formSNESJacobian is not None:
  *         args = (SNES_(snes),Vec_(x),Mat_(A),Mat_(B),TS_(ts))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2366, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_formSNESJacobian); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_formSNESJacobian); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2366, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_formSNESJacobian = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2349
+  /* "libpetsc4py.pyx":2367
  *     #
  *     cdef formSNESJacobian = PyTS(ts).formSNESJacobian
  *     if formSNESJacobian is not None:             # <<<<<<<<<<<<<<
@@ -23678,24 +24278,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2350
+    /* "libpetsc4py.pyx":2368
  *     cdef formSNESJacobian = PyTS(ts).formSNESJacobian
  *     if formSNESJacobian is not None:
  *         args = (SNES_(snes),Vec_(x),Mat_(A),Mat_(B),TS_(ts))             # <<<<<<<<<<<<<<
  *         formSNESJacobian(*args)
  *         return FunctionEnd()
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2368, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2368, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_A)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_A)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2368, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_B)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_B)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2368, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2368, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2368, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
@@ -23715,21 +24315,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
     __pyx_v_args = ((PyObject*)__pyx_t_8);
     __pyx_t_8 = 0;
 
-    /* "libpetsc4py.pyx":2351
+    /* "libpetsc4py.pyx":2369
  *     if formSNESJacobian is not None:
  *         args = (SNES_(snes),Vec_(x),Mat_(A),Mat_(B),TS_(ts))
  *         formSNESJacobian(*args)             # <<<<<<<<<<<<<<
  *         return FunctionEnd()
  *     #
  */
-    __pyx_t_8 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_formSNESJacobian, __pyx_v_args, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2369, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_formSNESJacobian, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "libpetsc4py.pyx":2352
+    /* "libpetsc4py.pyx":2370
  *         args = (SNES_(snes),Vec_(x),Mat_(A),Mat_(B),TS_(ts))
  *         formSNESJacobian(*args)
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23738,9 +24335,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
+
+    /* "libpetsc4py.pyx":2367
+ *     #
+ *     cdef formSNESJacobian = PyTS(ts).formSNESJacobian
+ *     if formSNESJacobian is not None:             # <<<<<<<<<<<<<<
+ *         args = (SNES_(snes),Vec_(x),Mat_(A),Mat_(B),TS_(ts))
+ *         formSNESJacobian(*args)
+ */
   }
 
-  /* "libpetsc4py.pyx":2354
+  /* "libpetsc4py.pyx":2372
  *         return FunctionEnd()
  *     #
  *     cdef PetscVec dx = NULL             # <<<<<<<<<<<<<<
@@ -23749,16 +24354,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
  */
   __pyx_v_dx = NULL;
 
-  /* "libpetsc4py.pyx":2355
+  /* "libpetsc4py.pyx":2373
  *     #
  *     cdef PetscVec dx = NULL
  *     CHKERR( PetscObjectQuery(             # <<<<<<<<<<<<<<
  *             <PetscObject>ts,
  *              b"@ts.vec_dot",
  */
-  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ts), __pyx_k_ts_vec_dot, ((PetscObject *)(&__pyx_v_dx)))); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ts), ((char *)"@ts.vec_dot"), ((PetscObject *)(&__pyx_v_dx)))); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2373, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2360
+  /* "libpetsc4py.pyx":2378
  *              <PetscObject*>&dx) )
  *     #
  *     cdef PetscReal t = ts.ptime + ts.time_step             # <<<<<<<<<<<<<<
@@ -23767,7 +24372,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
  */
   __pyx_v_t = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2361
+  /* "libpetsc4py.pyx":2379
  *     #
  *     cdef PetscReal t = ts.ptime + ts.time_step
  *     cdef PetscReal a = 1.0/ts.time_step             # <<<<<<<<<<<<<<
@@ -23776,34 +24381,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
  */
   __pyx_v_a = (1.0 / __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2362
+  /* "libpetsc4py.pyx":2380
  *     cdef PetscReal t = ts.ptime + ts.time_step
  *     cdef PetscReal a = 1.0/ts.time_step
  *     CHKERR( VecCopy(ts.vec_sol,dx)                )             # <<<<<<<<<<<<<<
  *     CHKERR( VecAXPBY(dx,+a,-a,x)                  )
  *     CHKERR( TSComputeIJacobian(ts,t,x,dx,a,A,B,PETSC_FALSE) )
  */
-  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_ts->vec_sol, __pyx_v_dx)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_ts->vec_sol, __pyx_v_dx)); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2380, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2363
+  /* "libpetsc4py.pyx":2381
  *     cdef PetscReal a = 1.0/ts.time_step
  *     CHKERR( VecCopy(ts.vec_sol,dx)                )
  *     CHKERR( VecAXPBY(dx,+a,-a,x)                  )             # <<<<<<<<<<<<<<
  *     CHKERR( TSComputeIJacobian(ts,t,x,dx,a,A,B,PETSC_FALSE) )
  *     return FunctionEnd()
  */
-  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(VecAXPBY(__pyx_v_dx, __pyx_v_a, (-__pyx_v_a), __pyx_v_x)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(VecAXPBY(__pyx_v_dx, __pyx_v_a, (-__pyx_v_a), __pyx_v_x)); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2381, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2364
+  /* "libpetsc4py.pyx":2382
  *     CHKERR( VecCopy(ts.vec_sol,dx)                )
  *     CHKERR( VecAXPBY(dx,+a,-a,x)                  )
  *     CHKERR( TSComputeIJacobian(ts,t,x,dx,a,A,B,PETSC_FALSE) )             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(TSComputeIJacobian(__pyx_v_ts, __pyx_v_t, __pyx_v_x, __pyx_v_dx, __pyx_v_a, __pyx_v_A, __pyx_v_B, PETSC_FALSE)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(TSComputeIJacobian(__pyx_v_ts, __pyx_v_t, __pyx_v_x, __pyx_v_dx, __pyx_v_a, __pyx_v_A, __pyx_v_B, PETSC_FALSE)); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 2382, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2365
+  /* "libpetsc4py.pyx":2383
  *     CHKERR( VecAXPBY(dx,+a,-a,x)                  )
  *     CHKERR( TSComputeIJacobian(ts,t,x,dx,a,A,B,PETSC_FALSE) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23813,7 +24418,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2339
+  /* "libpetsc4py.pyx":2357
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESTSFormJacobian_Python(             # <<<<<<<<<<<<<<
@@ -23841,7 +24446,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2367
+/* "libpetsc4py.pyx":2385
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSolveStep_Python(             # <<<<<<<<<<<<<<
@@ -23851,7 +24456,6 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
 
 static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, PetscReal __pyx_v_t, Vec __pyx_v_x) {
   PyObject *__pyx_v_solveStep = 0;
-  SNESConvergedReason __pyx_v_snesreason;
   PetscInt __pyx_v_nits;
   PetscInt __pyx_v_lits;
   PetscErrorCode __pyx_r;
@@ -23867,39 +24471,36 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
   Py_ssize_t __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
-  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("TSSolveStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2373
+  /* "libpetsc4py.pyx":2391
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSSolveStep_Python")             # <<<<<<<<<<<<<<
  *     #
  *     cdef solveStep = PyTS(ts).solveStep
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSSolveStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSSolveStep_Python"));
 
-  /* "libpetsc4py.pyx":2375
+  /* "libpetsc4py.pyx":2393
  *     FunctionBegin(b"TSSolveStep_Python")
  *     #
  *     cdef solveStep = PyTS(ts).solveStep             # <<<<<<<<<<<<<<
  *     if solveStep is not None:
  *         solveStep(TS_(ts), <double>t, Vec_(x))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2393, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveStep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2393, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_solveStep = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2376
+  /* "libpetsc4py.pyx":2394
  *     #
  *     cdef solveStep = PyTS(ts).solveStep
  *     if solveStep is not None:             # <<<<<<<<<<<<<<
@@ -23910,18 +24511,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2377
+    /* "libpetsc4py.pyx":2395
  *     cdef solveStep = PyTS(ts).solveStep
  *     if solveStep is not None:
  *         solveStep(TS_(ts), <double>t, Vec_(x))             # <<<<<<<<<<<<<<
  *         return FunctionEnd()
  *     #
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2395, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyFloat_FromDouble(((double)__pyx_v_t)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyFloat_FromDouble(((double)__pyx_v_t)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2395, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2395, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_solveStep);
     __pyx_t_7 = __pyx_v_solveStep; __pyx_t_8 = NULL;
@@ -23936,7 +24537,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
         __pyx_t_9 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2395, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_8) {
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -23950,106 +24551,69 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
     __pyx_t_1 = 0;
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2395, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":2378
+    /* "libpetsc4py.pyx":2396
  *     if solveStep is not None:
  *         solveStep(TS_(ts), <double>t, Vec_(x))
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
  *     #
- *     CHKERR( SNESSolve(ts.snes, NULL, x) )
+ *     cdef PetscInt nits = 0, lits = 0
  */
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
-  }
 
-  /* "libpetsc4py.pyx":2380
- *         return FunctionEnd()
+    /* "libpetsc4py.pyx":2394
  *     #
- *     CHKERR( SNESSolve(ts.snes, NULL, x) )             # <<<<<<<<<<<<<<
- *     cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING
- *     CHKERR( SNESGetConvergedReason(ts.snes, &snesreason) )
+ *     cdef solveStep = PyTS(ts).solveStep
+ *     if solveStep is not None:             # <<<<<<<<<<<<<<
+ *         solveStep(TS_(ts), <double>t, Vec_(x))
+ *         return FunctionEnd()
  */
-  __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(SNESSolve(__pyx_v_ts->snes, NULL, __pyx_v_x)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
 
-  /* "libpetsc4py.pyx":2381
+  /* "libpetsc4py.pyx":2398
+ *         return FunctionEnd()
  *     #
+ *     cdef PetscInt nits = 0, lits = 0             # <<<<<<<<<<<<<<
  *     CHKERR( SNESSolve(ts.snes, NULL, x) )
- *     cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     CHKERR( SNESGetConvergedReason(ts.snes, &snesreason) )
- *     if snesreason < 0: ts.reason = TS_DIVERGED_NONLINEAR_SOLVE
- */
-  __pyx_v_snesreason = SNES_CONVERGED_ITERATING;
-
-  /* "libpetsc4py.pyx":2382
- *     CHKERR( SNESSolve(ts.snes, NULL, x) )
- *     cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING
- *     CHKERR( SNESGetConvergedReason(ts.snes, &snesreason) )             # <<<<<<<<<<<<<<
- *     if snesreason < 0: ts.reason = TS_DIVERGED_NONLINEAR_SOLVE
- *     if snesreason < 0: return FunctionEnd()
- */
-  __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(SNESGetConvergedReason(__pyx_v_ts->snes, (&__pyx_v_snesreason))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "libpetsc4py.pyx":2383
- *     cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING
- *     CHKERR( SNESGetConvergedReason(ts.snes, &snesreason) )
- *     if snesreason < 0: ts.reason = TS_DIVERGED_NONLINEAR_SOLVE             # <<<<<<<<<<<<<<
- *     if snesreason < 0: return FunctionEnd()
- *     cdef PetscInt nits = 0, lits = 0
- */
-  __pyx_t_4 = ((__pyx_v_snesreason < 0) != 0);
-  if (__pyx_t_4) {
-    __pyx_v_ts->reason = TS_DIVERGED_NONLINEAR_SOLVE;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "libpetsc4py.pyx":2384
- *     CHKERR( SNESGetConvergedReason(ts.snes, &snesreason) )
- *     if snesreason < 0: ts.reason = TS_DIVERGED_NONLINEAR_SOLVE
- *     if snesreason < 0: return FunctionEnd()             # <<<<<<<<<<<<<<
- *     cdef PetscInt nits = 0, lits = 0
  *     CHKERR( SNESGetIterationNumber(ts.snes,&nits) )
  */
-  __pyx_t_4 = ((__pyx_v_snesreason < 0) != 0);
-  if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
-    goto __pyx_L0;
-  }
+  __pyx_v_nits = 0;
+  __pyx_v_lits = 0;
 
-  /* "libpetsc4py.pyx":2385
- *     if snesreason < 0: ts.reason = TS_DIVERGED_NONLINEAR_SOLVE
- *     if snesreason < 0: return FunctionEnd()
- *     cdef PetscInt nits = 0, lits = 0             # <<<<<<<<<<<<<<
+  /* "libpetsc4py.pyx":2399
+ *     #
+ *     cdef PetscInt nits = 0, lits = 0
+ *     CHKERR( SNESSolve(ts.snes, NULL, x) )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESGetIterationNumber(ts.snes,&nits) )
  *     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )
  */
-  __pyx_v_nits = 0;
-  __pyx_v_lits = 0;
+  __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(SNESSolve(__pyx_v_ts->snes, NULL, __pyx_v_x)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2399, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2386
- *     if snesreason < 0: return FunctionEnd()
+  /* "libpetsc4py.pyx":2400
  *     cdef PetscInt nits = 0, lits = 0
+ *     CHKERR( SNESSolve(ts.snes, NULL, x) )
  *     CHKERR( SNESGetIterationNumber(ts.snes,&nits) )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )
  *     ts.snes_its += nits
  */
-  __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(SNESGetIterationNumber(__pyx_v_ts->snes, (&__pyx_v_nits))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(SNESGetIterationNumber(__pyx_v_ts->snes, (&__pyx_v_nits))); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2400, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2387
- *     cdef PetscInt nits = 0, lits = 0
+  /* "libpetsc4py.pyx":2401
+ *     CHKERR( SNESSolve(ts.snes, NULL, x) )
  *     CHKERR( SNESGetIterationNumber(ts.snes,&nits) )
  *     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )             # <<<<<<<<<<<<<<
  *     ts.snes_its += nits
  *     ts.ksp_its  += lits
  */
-  __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(SNESGetLinearSolveIterations(__pyx_v_ts->snes, (&__pyx_v_lits))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = __pyx_f_11libpetsc4py_CHKERR(SNESGetLinearSolveIterations(__pyx_v_ts->snes, (&__pyx_v_lits))); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2401, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2388
+  /* "libpetsc4py.pyx":2402
  *     CHKERR( SNESGetIterationNumber(ts.snes,&nits) )
  *     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )
  *     ts.snes_its += nits             # <<<<<<<<<<<<<<
@@ -24058,7 +24622,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
  */
   __pyx_v_ts->snes_its = (__pyx_v_ts->snes_its + __pyx_v_nits);
 
-  /* "libpetsc4py.pyx":2389
+  /* "libpetsc4py.pyx":2403
  *     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )
  *     ts.snes_its += nits
  *     ts.ksp_its  += lits             # <<<<<<<<<<<<<<
@@ -24067,7 +24631,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
  */
   __pyx_v_ts->ksp_its = (__pyx_v_ts->ksp_its + __pyx_v_lits);
 
-  /* "libpetsc4py.pyx":2390
+  /* "libpetsc4py.pyx":2404
  *     ts.snes_its += nits
  *     ts.ksp_its  += lits
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24077,7 +24641,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2367
+  /* "libpetsc4py.pyx":2385
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSolveStep_Python(             # <<<<<<<<<<<<<<
@@ -24105,7 +24669,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2392
+/* "libpetsc4py.pyx":2406
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSAdaptStep_Python(             # <<<<<<<<<<<<<<
@@ -24114,7 +24678,6 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
  */
 
 static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, PetscReal __pyx_v_t, Vec __pyx_v_x, PetscReal *__pyx_v_nextdt, PetscBool *__pyx_v_stepok) {
-  SNESConvergedReason __pyx_v_snesreason;
   PyObject *__pyx_v_adaptStep = 0;
   PyObject *__pyx_v_retval = 0;
   double __pyx_v_dt;
@@ -24122,38 +24685,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscReal __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  PyObject *__pyx_t_10 = NULL;
-  Py_ssize_t __pyx_t_11;
-  PyObject *__pyx_t_12 = NULL;
-  double __pyx_t_13;
-  PetscBool __pyx_t_14;
-  PyObject *(*__pyx_t_15)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  Py_ssize_t __pyx_t_10;
+  PyObject *__pyx_t_11 = NULL;
+  double __pyx_t_12;
+  PetscBool __pyx_t_13;
+  PyObject *(*__pyx_t_14)(PyObject *);
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSAdaptStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2400
+  /* "libpetsc4py.pyx":2414
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSAdaptStep_Python")             # <<<<<<<<<<<<<<
  *     nextdt[0] = ts.time_step
  *     stepok[0] = PETSC_TRUE
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSAdaptStep_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSAdaptStep_Python"));
 
-  /* "libpetsc4py.pyx":2401
+  /* "libpetsc4py.pyx":2415
  *     except IERR with gil:
  *     FunctionBegin(b"TSAdaptStep_Python")
  *     nextdt[0] = ts.time_step             # <<<<<<<<<<<<<<
@@ -24163,158 +24722,126 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   __pyx_t_1 = __pyx_v_ts->time_step;
   (__pyx_v_nextdt[0]) = __pyx_t_1;
 
-  /* "libpetsc4py.pyx":2402
+  /* "libpetsc4py.pyx":2416
  *     FunctionBegin(b"TSAdaptStep_Python")
  *     nextdt[0] = ts.time_step
  *     stepok[0] = PETSC_TRUE             # <<<<<<<<<<<<<<
  *     #
- *     cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING
+ *     cdef adaptStep = PyTS(ts).adaptStep
  */
   (__pyx_v_stepok[0]) = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":2404
+  /* "libpetsc4py.pyx":2418
  *     stepok[0] = PETSC_TRUE
  *     #
- *     cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     CHKERR( SNESGetConvergedReason(ts.snes,&snesreason) )
- *     if snesreason < 0: stepok[0] = PETSC_FALSE
- */
-  __pyx_v_snesreason = SNES_CONVERGED_ITERATING;
-
-  /* "libpetsc4py.pyx":2405
- *     #
- *     cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING
- *     CHKERR( SNESGetConvergedReason(ts.snes,&snesreason) )             # <<<<<<<<<<<<<<
- *     if snesreason < 0: stepok[0] = PETSC_FALSE
- *     #
- */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(SNESGetConvergedReason(__pyx_v_ts->snes, (&__pyx_v_snesreason))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "libpetsc4py.pyx":2406
- *     cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING
- *     CHKERR( SNESGetConvergedReason(ts.snes,&snesreason) )
- *     if snesreason < 0: stepok[0] = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     #
- *     cdef adaptStep = PyTS(ts).adaptStep
- */
-  __pyx_t_3 = ((__pyx_v_snesreason < 0) != 0);
-  if (__pyx_t_3) {
-    (__pyx_v_stepok[0]) = PETSC_FALSE;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "libpetsc4py.pyx":2408
- *     if snesreason < 0: stepok[0] = PETSC_FALSE
- *     #
  *     cdef adaptStep = PyTS(ts).adaptStep             # <<<<<<<<<<<<<<
  *     if adaptStep is None: return FunctionEnd()
  *     cdef object retval
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_adaptStep); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_v_adaptStep = __pyx_t_5;
-  __pyx_t_5 = 0;
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2418, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_adaptStep); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2418, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_adaptStep = __pyx_t_3;
+  __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":2409
+  /* "libpetsc4py.pyx":2419
  *     #
  *     cdef adaptStep = PyTS(ts).adaptStep
  *     if adaptStep is None: return FunctionEnd()             # <<<<<<<<<<<<<<
  *     cdef object retval
  *     cdef double dt
  */
-  __pyx_t_3 = (__pyx_v_adaptStep == Py_None);
-  __pyx_t_6 = (__pyx_t_3 != 0);
-  if (__pyx_t_6) {
+  __pyx_t_4 = (__pyx_v_adaptStep == Py_None);
+  __pyx_t_5 = (__pyx_t_4 != 0);
+  if (__pyx_t_5) {
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2413
+  /* "libpetsc4py.pyx":2423
  *     cdef double dt
  *     cdef bint   ok
  *     retval = adaptStep(TS_(ts), <double>t, Vec_(x))             # <<<<<<<<<<<<<<
  *     if retval is None: pass
  *     elif isinstance(retval, float):
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = PyFloat_FromDouble(((double)__pyx_v_t)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2423, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_6 = PyFloat_FromDouble(((double)__pyx_v_t)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2423, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_adaptStep);
-  __pyx_t_9 = __pyx_v_adaptStep; __pyx_t_10 = NULL;
-  __pyx_t_11 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
-    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
-    if (likely(__pyx_t_10)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
-      __Pyx_INCREF(__pyx_t_10);
+  __pyx_t_8 = __pyx_v_adaptStep; __pyx_t_9 = NULL;
+  __pyx_t_10 = 0;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
+    if (likely(__pyx_t_9)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
+      __Pyx_INCREF(__pyx_t_9);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_9, function);
-      __pyx_t_11 = 1;
+      __Pyx_DECREF_SET(__pyx_t_8, function);
+      __pyx_t_10 = 1;
     }
   }
-  __pyx_t_12 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_12);
-  if (__pyx_t_10) {
-    __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
+  __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2423, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_11);
+  if (__pyx_t_9) {
+    __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
   }
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_8);
-  PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_8);
-  __pyx_t_4 = 0;
+  PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_7);
+  __pyx_t_2 = 0;
+  __pyx_t_6 = 0;
   __pyx_t_7 = 0;
-  __pyx_t_8 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __pyx_v_retval = __pyx_t_5;
-  __pyx_t_5 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2423, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_v_retval = __pyx_t_3;
+  __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":2414
+  /* "libpetsc4py.pyx":2424
  *     cdef bint   ok
  *     retval = adaptStep(TS_(ts), <double>t, Vec_(x))
  *     if retval is None: pass             # <<<<<<<<<<<<<<
  *     elif isinstance(retval, float):
  *         dt = retval
  */
-  __pyx_t_6 = (__pyx_v_retval == Py_None);
-  __pyx_t_3 = (__pyx_t_6 != 0);
-  if (__pyx_t_3) {
-    goto __pyx_L5;
+  __pyx_t_5 = (__pyx_v_retval == Py_None);
+  __pyx_t_4 = (__pyx_t_5 != 0);
+  if (__pyx_t_4) {
+    goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":2415
+  /* "libpetsc4py.pyx":2425
  *     retval = adaptStep(TS_(ts), <double>t, Vec_(x))
  *     if retval is None: pass
  *     elif isinstance(retval, float):             # <<<<<<<<<<<<<<
  *         dt = retval
  *         nextdt[0] = <PetscReal>dt
  */
-  __pyx_t_3 = PyFloat_Check(__pyx_v_retval); 
-  __pyx_t_6 = (__pyx_t_3 != 0);
-  if (__pyx_t_6) {
+  __pyx_t_4 = PyFloat_Check(__pyx_v_retval); 
+  __pyx_t_5 = (__pyx_t_4 != 0);
+  if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":2416
+    /* "libpetsc4py.pyx":2426
  *     if retval is None: pass
  *     elif isinstance(retval, float):
  *         dt = retval             # <<<<<<<<<<<<<<
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE
  */
-    __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_v_retval); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_dt = __pyx_t_13;
+    __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_retval); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2426, __pyx_L1_error)
+    __pyx_v_dt = __pyx_t_12;
 
-    /* "libpetsc4py.pyx":2417
+    /* "libpetsc4py.pyx":2427
  *     elif isinstance(retval, float):
  *         dt = retval
  *         nextdt[0] = <PetscReal>dt             # <<<<<<<<<<<<<<
@@ -24323,7 +24850,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  */
     (__pyx_v_nextdt[0]) = ((PetscReal)__pyx_v_dt);
 
-    /* "libpetsc4py.pyx":2418
+    /* "libpetsc4py.pyx":2428
  *         dt = retval
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -24331,34 +24858,42 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  *         ok = retval
  */
     (__pyx_v_stepok[0]) = PETSC_TRUE;
-    goto __pyx_L5;
+
+    /* "libpetsc4py.pyx":2425
+ *     retval = adaptStep(TS_(ts), <double>t, Vec_(x))
+ *     if retval is None: pass
+ *     elif isinstance(retval, float):             # <<<<<<<<<<<<<<
+ *         dt = retval
+ *         nextdt[0] = <PetscReal>dt
+ */
+    goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":2419
+  /* "libpetsc4py.pyx":2429
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE
  *     elif isinstance(retval, bool):             # <<<<<<<<<<<<<<
  *         ok = retval
  *         nextdt[0] = ts.time_step
  */
-  __pyx_t_5 = ((PyObject*)&PyBool_Type);
-  __Pyx_INCREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_IsInstance(__pyx_v_retval, __pyx_t_5); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_3 = (__pyx_t_6 != 0);
-  if (__pyx_t_3) {
+  __pyx_t_3 = ((PyObject*)&PyBool_Type);
+  __Pyx_INCREF(__pyx_t_3);
+  __pyx_t_5 = PyObject_IsInstance(__pyx_v_retval, __pyx_t_3); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 2429, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = (__pyx_t_5 != 0);
+  if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2420
+    /* "libpetsc4py.pyx":2430
  *         stepok[0] = PETSC_TRUE
  *     elif isinstance(retval, bool):
  *         ok = retval             # <<<<<<<<<<<<<<
  *         nextdt[0] = ts.time_step
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE
  */
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_retval); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ok = __pyx_t_3;
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_retval); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2430, __pyx_L1_error)
+    __pyx_v_ok = __pyx_t_4;
 
-    /* "libpetsc4py.pyx":2421
+    /* "libpetsc4py.pyx":2431
  *     elif isinstance(retval, bool):
  *         ok = retval
  *         nextdt[0] = ts.time_step             # <<<<<<<<<<<<<<
@@ -24368,7 +24903,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
     __pyx_t_1 = __pyx_v_ts->time_step;
     (__pyx_v_nextdt[0]) = __pyx_t_1;
 
-    /* "libpetsc4py.pyx":2422
+    /* "libpetsc4py.pyx":2432
  *         ok = retval
  *         nextdt[0] = ts.time_step
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -24376,22 +24911,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  *         dt, ok = retval
  */
     if ((__pyx_v_ok != 0)) {
-      __pyx_t_14 = PETSC_TRUE;
+      __pyx_t_13 = PETSC_TRUE;
     } else {
-      __pyx_t_14 = PETSC_FALSE;
+      __pyx_t_13 = PETSC_FALSE;
     }
-    (__pyx_v_stepok[0]) = __pyx_t_14;
-    goto __pyx_L5;
+    (__pyx_v_stepok[0]) = __pyx_t_13;
+
+    /* "libpetsc4py.pyx":2429
+ *         nextdt[0] = <PetscReal>dt
+ *         stepok[0] = PETSC_TRUE
+ *     elif isinstance(retval, bool):             # <<<<<<<<<<<<<<
+ *         ok = retval
+ *         nextdt[0] = ts.time_step
+ */
+    goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":2424
+  /* "libpetsc4py.pyx":2434
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE
  *     else:
  *         dt, ok = retval             # <<<<<<<<<<<<<<
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE
  */
+  /*else*/ {
     if ((likely(PyTuple_CheckExact(__pyx_v_retval))) || (PyList_CheckExact(__pyx_v_retval))) {
       PyObject* sequence = __pyx_v_retval;
       #if CYTHON_COMPILING_IN_CPYTHON
@@ -24402,52 +24945,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(0, 2434, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
-        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
-        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
+        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
       } else {
-        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
-        __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
+        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
+        __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
       }
-      __Pyx_INCREF(__pyx_t_5);
-      __Pyx_INCREF(__pyx_t_9);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_8);
       #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2434, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2434, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_8);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_12 = PyObject_GetIter(__pyx_v_retval); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_15 = Py_TYPE(__pyx_t_12)->tp_iternext;
-      index = 0; __pyx_t_5 = __pyx_t_15(__pyx_t_12); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
-      __Pyx_GOTREF(__pyx_t_5);
-      index = 1; __pyx_t_9 = __pyx_t_15(__pyx_t_12); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed;
-      __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_12), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_15 = NULL;
-      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      goto __pyx_L7_unpacking_done;
-      __pyx_L6_unpacking_failed:;
-      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      __pyx_t_15 = NULL;
+      __pyx_t_11 = PyObject_GetIter(__pyx_v_retval); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2434, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_11);
+      __pyx_t_14 = Py_TYPE(__pyx_t_11)->tp_iternext;
+      index = 0; __pyx_t_3 = __pyx_t_14(__pyx_t_11); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_3);
+      index = 1; __pyx_t_8 = __pyx_t_14(__pyx_t_11); if (unlikely(!__pyx_t_8)) goto __pyx_L5_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_8);
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_11), 2) < 0) __PYX_ERR(0, 2434, __pyx_L1_error)
+      __pyx_t_14 = NULL;
+      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+      goto __pyx_L6_unpacking_done;
+      __pyx_L5_unpacking_failed:;
+      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+      __pyx_t_14 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_L7_unpacking_done:;
+      __PYX_ERR(0, 2434, __pyx_L1_error)
+      __pyx_L6_unpacking_done:;
     }
-    __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_v_dt = __pyx_t_13;
-    __pyx_v_ok = __pyx_t_3;
+    __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2434, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2434, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __pyx_v_dt = __pyx_t_12;
+    __pyx_v_ok = __pyx_t_4;
 
-    /* "libpetsc4py.pyx":2425
+    /* "libpetsc4py.pyx":2435
  *     else:
  *         dt, ok = retval
  *         nextdt[0] = <PetscReal>dt             # <<<<<<<<<<<<<<
@@ -24456,7 +24999,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  */
     (__pyx_v_nextdt[0]) = ((PetscReal)__pyx_v_dt);
 
-    /* "libpetsc4py.pyx":2426
+    /* "libpetsc4py.pyx":2436
  *         dt, ok = retval
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -24464,15 +25007,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  * 
  */
     if ((__pyx_v_ok != 0)) {
-      __pyx_t_14 = PETSC_TRUE;
+      __pyx_t_13 = PETSC_TRUE;
     } else {
-      __pyx_t_14 = PETSC_FALSE;
+      __pyx_t_13 = PETSC_FALSE;
     }
-    (__pyx_v_stepok[0]) = __pyx_t_14;
+    (__pyx_v_stepok[0]) = __pyx_t_13;
   }
-  __pyx_L5:;
+  __pyx_L4:;
 
-  /* "libpetsc4py.pyx":2427
+  /* "libpetsc4py.pyx":2437
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24482,7 +25025,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2392
+  /* "libpetsc4py.pyx":2406
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSAdaptStep_Python(             # <<<<<<<<<<<<<<
@@ -24492,13 +25035,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_10);
-  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_11);
   __Pyx_AddTraceback("libpetsc4py.TSAdaptStep_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
@@ -24511,7 +25054,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2429
+/* "libpetsc4py.pyx":2439
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSStep_Python_default(             # <<<<<<<<<<<<<<
@@ -24521,10 +25064,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
 
 static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts) {
   Vec __pyx_v_vec_update;
-  CYTHON_UNUSED PetscInt __pyx_v_r;
+  PetscInt __pyx_v_r;
   PetscReal __pyx_v_tt;
   PetscReal __pyx_v_dt;
-  PetscBool __pyx_v_ok;
+  PetscBool __pyx_v_accept;
+  PetscBool __pyx_v_stageok;
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -24532,24 +25076,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   PetscInt __pyx_t_3;
   PetscErrorCode __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  int __pyx_t_6;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSStep_Python_default", 0);
 
-  /* "libpetsc4py.pyx":2433
+  /* "libpetsc4py.pyx":2443
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSStep_Python_default")             # <<<<<<<<<<<<<<
  *     cdef PetscVec vec_update = NULL
  *     CHKERR( PetscObjectQuery(
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_TSStep_Python_default);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSStep_Python_default"));
 
-  /* "libpetsc4py.pyx":2434
+  /* "libpetsc4py.pyx":2444
  *     except IERR with gil:
  *     FunctionBegin(b"TSStep_Python_default")
  *     cdef PetscVec vec_update = NULL             # <<<<<<<<<<<<<<
@@ -24558,16 +25100,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   __pyx_v_vec_update = NULL;
 
-  /* "libpetsc4py.pyx":2435
+  /* "libpetsc4py.pyx":2445
  *     FunctionBegin(b"TSStep_Python_default")
  *     cdef PetscVec vec_update = NULL
  *     CHKERR( PetscObjectQuery(             # <<<<<<<<<<<<<<
  *             <PetscObject>ts,
  *              b"@ts.vec_update",
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ts), __pyx_k_ts_vec_update, ((PetscObject *)(&__pyx_v_vec_update)))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectQuery(((PetscObject)__pyx_v_ts), ((char *)"@ts.vec_update"), ((PetscObject *)(&__pyx_v_vec_update)))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2445, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2440
+  /* "libpetsc4py.pyx":2450
  *              <PetscObject*>&vec_update) )
  *     #
  *     cdef PetscInt  r = 0             # <<<<<<<<<<<<<<
@@ -24576,212 +25118,293 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   __pyx_v_r = 0;
 
-  /* "libpetsc4py.pyx":2441
+  /* "libpetsc4py.pyx":2451
  *     #
  *     cdef PetscInt  r = 0
  *     cdef PetscReal tt = ts.ptime             # <<<<<<<<<<<<<<
  *     cdef PetscReal dt = ts.time_step
- *     cdef PetscBool ok = PETSC_TRUE
+ *     cdef PetscBool accept  = PETSC_TRUE
  */
   __pyx_t_2 = __pyx_v_ts->ptime;
   __pyx_v_tt = __pyx_t_2;
 
-  /* "libpetsc4py.pyx":2442
+  /* "libpetsc4py.pyx":2452
  *     cdef PetscInt  r = 0
  *     cdef PetscReal tt = ts.ptime
  *     cdef PetscReal dt = ts.time_step             # <<<<<<<<<<<<<<
- *     cdef PetscBool ok = PETSC_TRUE
- *     for r from 0 <= r < ts.max_reject:
+ *     cdef PetscBool accept  = PETSC_TRUE
+ *     cdef PetscBool stageok = PETSC_TRUE
  */
   __pyx_t_2 = __pyx_v_ts->time_step;
   __pyx_v_dt = __pyx_t_2;
 
-  /* "libpetsc4py.pyx":2443
+  /* "libpetsc4py.pyx":2453
  *     cdef PetscReal tt = ts.ptime
  *     cdef PetscReal dt = ts.time_step
- *     cdef PetscBool ok = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *     cdef PetscBool accept  = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *     cdef PetscBool stageok = PETSC_TRUE
  *     for r from 0 <= r < ts.max_reject:
- *         ts.time_step = dt
  */
-  __pyx_v_ok = PETSC_TRUE;
+  __pyx_v_accept = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":2444
+  /* "libpetsc4py.pyx":2454
  *     cdef PetscReal dt = ts.time_step
- *     cdef PetscBool ok = PETSC_TRUE
- *     for r from 0 <= r < ts.max_reject:             # <<<<<<<<<<<<<<
- *         ts.time_step = dt
+ *     cdef PetscBool accept  = PETSC_TRUE
+ *     cdef PetscBool stageok = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *     for r from 0 <= r < ts.max_reject:
  *         tt = ts.ptime + ts.time_step
  */
-  __pyx_t_3 = __pyx_v_ts->max_reject;
-  for (__pyx_v_r = 0; __pyx_v_r < __pyx_t_3; __pyx_v_r++) {
+  __pyx_v_stageok = PETSC_TRUE;
 
-    /* "libpetsc4py.pyx":2445
- *     cdef PetscBool ok = PETSC_TRUE
- *     for r from 0 <= r < ts.max_reject:
- *         ts.time_step = dt             # <<<<<<<<<<<<<<
+  /* "libpetsc4py.pyx":2455
+ *     cdef PetscBool accept  = PETSC_TRUE
+ *     cdef PetscBool stageok = PETSC_TRUE
+ *     for r from 0 <= r < ts.max_reject:             # <<<<<<<<<<<<<<
  *         tt = ts.ptime + ts.time_step
  *         CHKERR( VecCopy(ts.vec_sol,vec_update) )
  */
-    __pyx_v_ts->time_step = __pyx_v_dt;
+  __pyx_t_3 = __pyx_v_ts->max_reject;
+  for (__pyx_v_r = 0; __pyx_v_r < __pyx_t_3; __pyx_v_r++) {
 
-    /* "libpetsc4py.pyx":2446
+    /* "libpetsc4py.pyx":2456
+ *     cdef PetscBool stageok = PETSC_TRUE
  *     for r from 0 <= r < ts.max_reject:
- *         ts.time_step = dt
  *         tt = ts.ptime + ts.time_step             # <<<<<<<<<<<<<<
  *         CHKERR( VecCopy(ts.vec_sol,vec_update) )
- *         CHKERR( TSPreStep(ts) )
+ *         CHKERR( TSPreStage(ts,tt+dt) )
  */
     __pyx_v_tt = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
 
-    /* "libpetsc4py.pyx":2447
- *         ts.time_step = dt
+    /* "libpetsc4py.pyx":2457
+ *     for r from 0 <= r < ts.max_reject:
  *         tt = ts.ptime + ts.time_step
  *         CHKERR( VecCopy(ts.vec_sol,vec_update) )             # <<<<<<<<<<<<<<
- *         CHKERR( TSPreStep(ts) )
- *         CHKERR( TSPreStage(ts,tt) )
+ *         CHKERR( TSPreStage(ts,tt+dt) )
+ *         TSSolveStep_Python(ts,tt,vec_update)
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_ts->vec_sol, __pyx_v_vec_update)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_ts->vec_sol, __pyx_v_vec_update)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2457, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2448
+    /* "libpetsc4py.pyx":2458
  *         tt = ts.ptime + ts.time_step
  *         CHKERR( VecCopy(ts.vec_sol,vec_update) )
- *         CHKERR( TSPreStep(ts) )             # <<<<<<<<<<<<<<
- *         CHKERR( TSPreStage(ts,tt) )
+ *         CHKERR( TSPreStage(ts,tt+dt) )             # <<<<<<<<<<<<<<
  *         TSSolveStep_Python(ts,tt,vec_update)
+ *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
  */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(TSPreStep(__pyx_v_ts)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(TSPreStage(__pyx_v_ts, (__pyx_v_tt + __pyx_v_dt))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2458, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2449
+    /* "libpetsc4py.pyx":2459
  *         CHKERR( VecCopy(ts.vec_sol,vec_update) )
- *         CHKERR( TSPreStep(ts) )
- *         CHKERR( TSPreStage(ts,tt) )             # <<<<<<<<<<<<<<
- *         TSSolveStep_Python(ts,tt,vec_update)
- *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&ok)
- */
-    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(TSPreStage(__pyx_v_ts, __pyx_v_tt)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-    /* "libpetsc4py.pyx":2450
- *         CHKERR( TSPreStep(ts) )
- *         CHKERR( TSPreStage(ts,tt) )
+ *         CHKERR( TSPreStage(ts,tt+dt) )
  *         TSSolveStep_Python(ts,tt,vec_update)             # <<<<<<<<<<<<<<
- *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&ok)
- *         if ok:  break
+ *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
+ *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
  */
-    __pyx_t_4 = __pyx_f_11libpetsc4py_TSSolveStep_Python(__pyx_v_ts, __pyx_v_tt, __pyx_v_vec_update); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_11libpetsc4py_TSSolveStep_Python(__pyx_v_ts, __pyx_v_tt, __pyx_v_vec_update); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2459, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2451
- *         CHKERR( TSPreStage(ts,tt) )
+    /* "libpetsc4py.pyx":2460
+ *         CHKERR( TSPreStage(ts,tt+dt) )
  *         TSSolveStep_Python(ts,tt,vec_update)
- *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&ok)             # <<<<<<<<<<<<<<
- *         if ok:  break
- *         ts.reject += 1
+ *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );             # <<<<<<<<<<<<<<
+ *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
+ *         if not stageok:
  */
-    __pyx_t_4 = __pyx_f_11libpetsc4py_TSAdaptStep_Python(__pyx_v_ts, __pyx_v_tt, __pyx_v_vec_update, (&__pyx_v_dt), (&__pyx_v_ok)); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(TSPostStage(__pyx_v_ts, (__pyx_v_tt + __pyx_v_dt), 0, (&__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2460, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2452
+    /* "libpetsc4py.pyx":2461
  *         TSSolveStep_Python(ts,tt,vec_update)
- *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&ok)
- *         if ok:  break             # <<<<<<<<<<<<<<
- *         ts.reject += 1
- *     if not ok:
+ *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
+ *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );             # <<<<<<<<<<<<<<
+ *         if not stageok:
+ *             ts.reject += 1
  */
-    if (__pyx_v_ok) {
-      goto __pyx_L4_break;
-    }
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(TSAdaptCheckStage(__pyx_v_ts->adapt, __pyx_v_ts, (__pyx_v_tt + __pyx_v_dt), __pyx_v_vec_update, (&__pyx_v_stageok))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2461, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2453
- *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&ok)
- *         if ok:  break
- *         ts.reject += 1             # <<<<<<<<<<<<<<
- *     if not ok:
- *         if ts.reason == 0:
+    /* "libpetsc4py.pyx":2462
+ *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
+ *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
+ *         if not stageok:             # <<<<<<<<<<<<<<
+ *             ts.reject += 1
+ *             continue
  */
-    __pyx_v_ts->reject = (__pyx_v_ts->reject + 1);
-  }
-  __pyx_L4_break:;
+    __pyx_t_5 = ((!__pyx_v_stageok) != 0);
+    if (__pyx_t_5) {
 
-  /* "libpetsc4py.pyx":2454
- *         if ok:  break
- *         ts.reject += 1
- *     if not ok:             # <<<<<<<<<<<<<<
- *         if ts.reason == 0:
- *             ts.reason = TS_DIVERGED_STEP_REJECTED
+      /* "libpetsc4py.pyx":2463
+ *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
+ *         if not stageok:
+ *             ts.reject += 1             # <<<<<<<<<<<<<<
+ *             continue
+ *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
  */
-  __pyx_t_5 = ((!__pyx_v_ok) != 0);
-  if (__pyx_t_5) {
+      __pyx_v_ts->reject = (__pyx_v_ts->reject + 1);
 
-    /* "libpetsc4py.pyx":2455
- *         ts.reject += 1
- *     if not ok:
- *         if ts.reason == 0:             # <<<<<<<<<<<<<<
- *             ts.reason = TS_DIVERGED_STEP_REJECTED
- *         return FunctionEnd()
+      /* "libpetsc4py.pyx":2464
+ *         if not stageok:
+ *             ts.reject += 1
+ *             continue             # <<<<<<<<<<<<<<
+ *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
+ *         if not accept:
+ */
+      goto __pyx_L3_continue;
+
+      /* "libpetsc4py.pyx":2462
+ *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
+ *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
+ *         if not stageok:             # <<<<<<<<<<<<<<
+ *             ts.reject += 1
+ *             continue
+ */
+    }
+
+    /* "libpetsc4py.pyx":2465
+ *             ts.reject += 1
+ *             continue
+ *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)             # <<<<<<<<<<<<<<
+ *         if not accept:
+ *             ts.time_step = dt
  */
-    __pyx_t_5 = ((__pyx_v_ts->reason == 0) != 0);
+    __pyx_t_4 = __pyx_f_11libpetsc4py_TSAdaptStep_Python(__pyx_v_ts, __pyx_v_tt, __pyx_v_vec_update, (&__pyx_v_dt), (&__pyx_v_accept)); if (unlikely(__pyx_t_4 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2465, __pyx_L1_error)
+
+    /* "libpetsc4py.pyx":2466
+ *             continue
+ *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
+ *         if not accept:             # <<<<<<<<<<<<<<
+ *             ts.time_step = dt
+ *             ts.reject += 1
+ */
+    __pyx_t_5 = ((!__pyx_v_accept) != 0);
     if (__pyx_t_5) {
 
-      /* "libpetsc4py.pyx":2456
- *     if not ok:
- *         if ts.reason == 0:
- *             ts.reason = TS_DIVERGED_STEP_REJECTED             # <<<<<<<<<<<<<<
- *         return FunctionEnd()
- *     #
+      /* "libpetsc4py.pyx":2467
+ *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
+ *         if not accept:
+ *             ts.time_step = dt             # <<<<<<<<<<<<<<
+ *             ts.reject += 1
+ *             continue
+ */
+      __pyx_v_ts->time_step = __pyx_v_dt;
+
+      /* "libpetsc4py.pyx":2468
+ *         if not accept:
+ *             ts.time_step = dt
+ *             ts.reject += 1             # <<<<<<<<<<<<<<
+ *             continue
+ *         CHKERR( VecCopy(vec_update,ts.vec_sol) )
+ */
+      __pyx_v_ts->reject = (__pyx_v_ts->reject + 1);
+
+      /* "libpetsc4py.pyx":2469
+ *             ts.time_step = dt
+ *             ts.reject += 1
+ *             continue             # <<<<<<<<<<<<<<
+ *         CHKERR( VecCopy(vec_update,ts.vec_sol) )
+ *         ts.ptime += ts.time_step
+ */
+      goto __pyx_L3_continue;
+
+      /* "libpetsc4py.pyx":2466
+ *             continue
+ *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
+ *         if not accept:             # <<<<<<<<<<<<<<
+ *             ts.time_step = dt
+ *             ts.reject += 1
  */
-      __pyx_v_ts->reason = TS_DIVERGED_STEP_REJECTED;
-      goto __pyx_L7;
     }
-    __pyx_L7:;
 
-    /* "libpetsc4py.pyx":2457
- *         if ts.reason == 0:
- *             ts.reason = TS_DIVERGED_STEP_REJECTED
- *         return FunctionEnd()             # <<<<<<<<<<<<<<
- *     #
- *     CHKERR( VecCopy(vec_update,ts.vec_sol) )
+    /* "libpetsc4py.pyx":2470
+ *             ts.reject += 1
+ *             continue
+ *         CHKERR( VecCopy(vec_update,ts.vec_sol) )             # <<<<<<<<<<<<<<
+ *         ts.ptime += ts.time_step
+ *         ts.time_step = dt
  */
-    __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
-    goto __pyx_L0;
-  }
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_vec_update, __pyx_v_ts->vec_sol)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2470, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2459
- *         return FunctionEnd()
- *     #
- *     CHKERR( VecCopy(vec_update,ts.vec_sol) )             # <<<<<<<<<<<<<<
- *     ts.ptime += ts.time_step
- *     ts.time_step = dt
+    /* "libpetsc4py.pyx":2471
+ *             continue
+ *         CHKERR( VecCopy(vec_update,ts.vec_sol) )
+ *         ts.ptime += ts.time_step             # <<<<<<<<<<<<<<
+ *         ts.time_step = dt
+ *         break
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_vec_update, __pyx_v_ts->vec_sol)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_ts->ptime = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2460
- *     #
- *     CHKERR( VecCopy(vec_update,ts.vec_sol) )
- *     ts.ptime += ts.time_step             # <<<<<<<<<<<<<<
- *     ts.time_step = dt
- *     ts.steps += 1
+    /* "libpetsc4py.pyx":2472
+ *         CHKERR( VecCopy(vec_update,ts.vec_sol) )
+ *         ts.ptime += ts.time_step
+ *         ts.time_step = dt             # <<<<<<<<<<<<<<
+ *         break
+ *     if (not stageok or not accept) and ts.reason == 0:
+ */
+    __pyx_v_ts->time_step = __pyx_v_dt;
+
+    /* "libpetsc4py.pyx":2473
+ *         ts.ptime += ts.time_step
+ *         ts.time_step = dt
+ *         break             # <<<<<<<<<<<<<<
+ *     if (not stageok or not accept) and ts.reason == 0:
+ *         ts.reason = TS_DIVERGED_STEP_REJECTED
+ */
+    goto __pyx_L4_break;
+    __pyx_L3_continue:;
+  }
+  __pyx_L4_break:;
+
+  /* "libpetsc4py.pyx":2474
+ *         ts.time_step = dt
+ *         break
+ *     if (not stageok or not accept) and ts.reason == 0:             # <<<<<<<<<<<<<<
+ *         ts.reason = TS_DIVERGED_STEP_REJECTED
+ *     <void>r # silent unused warning
  */
-  __pyx_v_ts->ptime = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
+  __pyx_t_6 = ((!__pyx_v_stageok) != 0);
+  if (!__pyx_t_6) {
+  } else {
+    goto __pyx_L9_next_and;
+  }
+  __pyx_t_6 = ((!__pyx_v_accept) != 0);
+  if (__pyx_t_6) {
+  } else {
+    __pyx_t_5 = __pyx_t_6;
+    goto __pyx_L8_bool_binop_done;
+  }
+  __pyx_L9_next_and:;
+  __pyx_t_6 = ((__pyx_v_ts->reason == 0) != 0);
+  __pyx_t_5 = __pyx_t_6;
+  __pyx_L8_bool_binop_done:;
+  if (__pyx_t_5) {
 
-  /* "libpetsc4py.pyx":2461
- *     CHKERR( VecCopy(vec_update,ts.vec_sol) )
- *     ts.ptime += ts.time_step
- *     ts.time_step = dt             # <<<<<<<<<<<<<<
- *     ts.steps += 1
+    /* "libpetsc4py.pyx":2475
+ *         break
+ *     if (not stageok or not accept) and ts.reason == 0:
+ *         ts.reason = TS_DIVERGED_STEP_REJECTED             # <<<<<<<<<<<<<<
+ *     <void>r # silent unused warning
  *     return FunctionEnd()
  */
-  __pyx_v_ts->time_step = __pyx_v_dt;
+    __pyx_v_ts->reason = TS_DIVERGED_STEP_REJECTED;
+
+    /* "libpetsc4py.pyx":2474
+ *         ts.time_step = dt
+ *         break
+ *     if (not stageok or not accept) and ts.reason == 0:             # <<<<<<<<<<<<<<
+ *         ts.reason = TS_DIVERGED_STEP_REJECTED
+ *     <void>r # silent unused warning
+ */
+  }
 
-  /* "libpetsc4py.pyx":2462
- *     ts.ptime += ts.time_step
- *     ts.time_step = dt
- *     ts.steps += 1             # <<<<<<<<<<<<<<
+  /* "libpetsc4py.pyx":2476
+ *     if (not stageok or not accept) and ts.reason == 0:
+ *         ts.reason = TS_DIVERGED_STEP_REJECTED
+ *     <void>r # silent unused warning             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-  __pyx_v_ts->steps = (__pyx_v_ts->steps + 1);
+  ((void)__pyx_v_r);
 
-  /* "libpetsc4py.pyx":2463
- *     ts.time_step = dt
- *     ts.steps += 1
+  /* "libpetsc4py.pyx":2477
+ *         ts.reason = TS_DIVERGED_STEP_REJECTED
+ *     <void>r # silent unused warning
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
@@ -24789,7 +25412,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2429
+  /* "libpetsc4py.pyx":2439
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSStep_Python_default(             # <<<<<<<<<<<<<<
@@ -24809,7 +25432,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2467
+/* "libpetsc4py.pyx":2481
  * # --------------------------------------------------------------------
  * 
  * cdef PetscErrorCode PetscPythonMonitorSet_Python(             # <<<<<<<<<<<<<<
@@ -24819,7 +25442,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
 
 static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscObject __pyx_v_obj_p, const char *__pyx_v_url_p) {
   PetscClassId __pyx_v_classid;
-  PyObject *__pyx_v_klass = 0;
+  PyTypeObject *__pyx_v_klass = 0;
   struct PyPetscObjectObject *__pyx_v_ob = 0;
   PyObject *__pyx_v_url = 0;
   PyObject *__pyx_v_path = NULL;
@@ -24840,24 +25463,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   Py_ssize_t __pyx_t_9;
   PyObject *(*__pyx_t_10)(PyObject *);
   PyObject *__pyx_t_11 = 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("PetscPythonMonitorSet_Python", 0);
 
-  /* "libpetsc4py.pyx":2472
+  /* "libpetsc4py.pyx":2486
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PetscPythonMonitorSet_Python")             # <<<<<<<<<<<<<<
  *     assert obj_p != NULL
  *     assert url_p != NULL
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PetscPythonMonitorSet_Python);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PetscPythonMonitorSet_Python"));
 
-  /* "libpetsc4py.pyx":2473
+  /* "libpetsc4py.pyx":2487
  *     except IERR with gil:
  *     FunctionBegin(b"PetscPythonMonitorSet_Python")
  *     assert obj_p != NULL             # <<<<<<<<<<<<<<
@@ -24868,12 +25488,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_obj_p != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 2487, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "libpetsc4py.pyx":2474
+  /* "libpetsc4py.pyx":2488
  *     FunctionBegin(b"PetscPythonMonitorSet_Python")
  *     assert obj_p != NULL
  *     assert url_p != NULL             # <<<<<<<<<<<<<<
@@ -24884,12 +25504,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_url_p != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 2488, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "libpetsc4py.pyx":2475
+  /* "libpetsc4py.pyx":2489
  *     assert obj_p != NULL
  *     assert url_p != NULL
  *     assert url_p[0] != 0             # <<<<<<<<<<<<<<
@@ -24900,12 +25520,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!(((__pyx_v_url_p[0]) != 0) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 2489, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "libpetsc4py.pyx":2477
+  /* "libpetsc4py.pyx":2491
  *     assert url_p[0] != 0
  *     #
  *     cdef PetscClassId classid = 0             # <<<<<<<<<<<<<<
@@ -24914,41 +25534,41 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
  */
   __pyx_v_classid = 0;
 
-  /* "libpetsc4py.pyx":2478
+  /* "libpetsc4py.pyx":2492
  *     #
  *     cdef PetscClassId classid = 0
  *     CHKERR( PetscObjectGetClassId(obj_p,&classid) )             # <<<<<<<<<<<<<<
  *     cdef type klass = PyPetscType_Lookup(classid)
  *     cdef Object ob = klass()
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectGetClassId(__pyx_v_obj_p, (&__pyx_v_classid))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectGetClassId(__pyx_v_obj_p, (&__pyx_v_classid))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2492, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2479
+  /* "libpetsc4py.pyx":2493
  *     cdef PetscClassId classid = 0
  *     CHKERR( PetscObjectGetClassId(obj_p,&classid) )
  *     cdef type klass = PyPetscType_Lookup(classid)             # <<<<<<<<<<<<<<
  *     cdef Object ob = klass()
  *     ob.obj[0] = newRef(obj_p)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(__pyx_v_classid)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(__pyx_v_classid)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2493, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_v_klass = ((PyObject*)__pyx_t_2);
+  __pyx_v_klass = ((PyTypeObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2480
+  /* "libpetsc4py.pyx":2494
  *     CHKERR( PetscObjectGetClassId(obj_p,&classid) )
  *     cdef type klass = PyPetscType_Lookup(classid)
  *     cdef Object ob = klass()             # <<<<<<<<<<<<<<
  *     ob.obj[0] = newRef(obj_p)
  *     #
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_klass), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_klass), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2494, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Object))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(0, 2494, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscObjectObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2481
+  /* "libpetsc4py.pyx":2495
  *     cdef type klass = PyPetscType_Lookup(classid)
  *     cdef Object ob = klass()
  *     ob.obj[0] = newRef(obj_p)             # <<<<<<<<<<<<<<
@@ -24957,37 +25577,37 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
  */
   (__pyx_v_ob->obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_obj_p);
 
-  /* "libpetsc4py.pyx":2483
+  /* "libpetsc4py.pyx":2497
  *     ob.obj[0] = newRef(obj_p)
  *     #
  *     cdef url = bytes2str(url_p)             # <<<<<<<<<<<<<<
  *     if ':' in url:
  *         path, names = parse_url(url)
  */
-  __pyx_t_2 = __pyx_f_11libpetsc4py_bytes2str(__pyx_v_url_p); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_11libpetsc4py_bytes2str(__pyx_v_url_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2497, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_url = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2484
+  /* "libpetsc4py.pyx":2498
  *     #
  *     cdef url = bytes2str(url_p)
  *     if ':' in url:             # <<<<<<<<<<<<<<
  *         path, names = parse_url(url)
  *     else:
  */
-  __pyx_t_3 = (__Pyx_PySequence_Contains(__pyx_kp_s__2, __pyx_v_url, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_, __pyx_v_url, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2498, __pyx_L1_error)
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2485
+    /* "libpetsc4py.pyx":2499
  *     cdef url = bytes2str(url_p)
  *     if ':' in url:
  *         path, names = parse_url(url)             # <<<<<<<<<<<<<<
  *     else:
  *         path, names = url, 'monitor'
  */
-    __pyx_t_2 = __pyx_f_11libpetsc4py_parse_url(__pyx_v_url); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_11libpetsc4py_parse_url(__pyx_v_url); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2499, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
       PyObject* sequence = __pyx_t_2;
@@ -24999,7 +25619,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(0, 2499, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -25012,15 +25632,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       #endif
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -25028,7 +25648,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
       __Pyx_GOTREF(__pyx_t_5);
       index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 2499, __pyx_L1_error)
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L5_unpacking_done;
@@ -25036,24 +25656,32 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_8 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 2499, __pyx_L1_error)
       __pyx_L5_unpacking_done:;
     }
     __pyx_v_path = __pyx_t_5;
     __pyx_t_5 = 0;
     __pyx_v_names = __pyx_t_6;
     __pyx_t_6 = 0;
+
+    /* "libpetsc4py.pyx":2498
+ *     #
+ *     cdef url = bytes2str(url_p)
+ *     if ':' in url:             # <<<<<<<<<<<<<<
+ *         path, names = parse_url(url)
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "libpetsc4py.pyx":2487
+  /* "libpetsc4py.pyx":2501
  *         path, names = parse_url(url)
  *     else:
  *         path, names = url, 'monitor'             # <<<<<<<<<<<<<<
  *     module = load_module(path)
  *     for attr in names.split(','):
  */
+  /*else*/ {
     __pyx_t_2 = __pyx_v_url;
     __Pyx_INCREF(__pyx_t_2);
     __pyx_t_6 = __pyx_n_s_monitor;
@@ -25065,37 +25693,37 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2488
+  /* "libpetsc4py.pyx":2502
  *     else:
  *         path, names = url, 'monitor'
  *     module = load_module(path)             # <<<<<<<<<<<<<<
  *     for attr in names.split(','):
  *         monitor = getattr(module, attr)
  */
-  __pyx_t_6 = __pyx_f_11libpetsc4py_load_module(__pyx_v_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_11libpetsc4py_load_module(__pyx_v_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2502, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_v_module = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":2489
+  /* "libpetsc4py.pyx":2503
  *         path, names = url, 'monitor'
  *     module = load_module(path)
  *     for attr in names.split(','):             # <<<<<<<<<<<<<<
  *         monitor = getattr(module, attr)
  *         if isinstance(monitor, type):
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_names, __pyx_n_s_split); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_names, __pyx_n_s_split); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2503, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2503, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
     __pyx_t_6 = __pyx_t_2; __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = 0;
     __pyx_t_10 = NULL;
   } else {
-    __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2503, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2503, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
@@ -25103,17 +25731,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
       if (likely(PyList_CheckExact(__pyx_t_6))) {
         if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_6)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 2503, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2503, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 2503, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2503, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -25123,7 +25751,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
         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[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(0, 2503, __pyx_L1_error)
         }
         break;
       }
@@ -25132,19 +25760,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
     __Pyx_XDECREF_SET(__pyx_v_attr, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":2490
+    /* "libpetsc4py.pyx":2504
  *     module = load_module(path)
  *     for attr in names.split(','):
  *         monitor = getattr(module, attr)             # <<<<<<<<<<<<<<
  *         if isinstance(monitor, type):
  *             monitor = monitor(ob)
  */
-    __pyx_t_2 = __Pyx_GetAttr(__pyx_v_module, __pyx_v_attr); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetAttr(__pyx_v_module, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2504, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":2491
+    /* "libpetsc4py.pyx":2505
  *     for attr in names.split(','):
  *         monitor = getattr(module, attr)
  *         if isinstance(monitor, type):             # <<<<<<<<<<<<<<
@@ -25155,7 +25783,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":2492
+      /* "libpetsc4py.pyx":2506
  *         monitor = getattr(module, attr)
  *         if isinstance(monitor, type):
  *             monitor = monitor(ob)             # <<<<<<<<<<<<<<
@@ -25174,34 +25802,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
         }
       }
       if (!__pyx_t_7) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_ob)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_ob)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2506, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
       } else {
-        __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2506, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7); __pyx_t_7 = NULL;
         __Pyx_INCREF(((PyObject *)__pyx_v_ob));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_ob));
         PyTuple_SET_ITEM(__pyx_t_11, 0+1, ((PyObject *)__pyx_v_ob));
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2506, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_monitor, __pyx_t_2);
       __pyx_t_2 = 0;
-      goto __pyx_L8;
+
+      /* "libpetsc4py.pyx":2505
+ *     for attr in names.split(','):
+ *         monitor = getattr(module, attr)
+ *         if isinstance(monitor, type):             # <<<<<<<<<<<<<<
+ *             monitor = monitor(ob)
+ *         ob.setMonitor(monitor)
+ */
     }
-    __pyx_L8:;
 
-    /* "libpetsc4py.pyx":2493
+    /* "libpetsc4py.pyx":2507
  *         if isinstance(monitor, type):
  *             monitor = monitor(ob)
  *         ob.setMonitor(monitor)             # <<<<<<<<<<<<<<
  *     #
  *     return FunctionEnd()
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ob), __pyx_n_s_setMonitor); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ob), __pyx_n_s_setMonitor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2507, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_11 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -25214,23 +25848,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
       }
     }
     if (!__pyx_t_11) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_monitor); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2507, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2507, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_11); __pyx_t_11 = NULL;
       __Pyx_INCREF(__pyx_v_monitor);
       __Pyx_GIVEREF(__pyx_v_monitor);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_monitor);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2507, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":2489
+    /* "libpetsc4py.pyx":2503
  *         path, names = url, 'monitor'
  *     module = load_module(path)
  *     for attr in names.split(','):             # <<<<<<<<<<<<<<
@@ -25240,7 +25874,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":2495
+  /* "libpetsc4py.pyx":2509
  *         ob.setMonitor(monitor)
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -25250,7 +25884,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2467
+  /* "libpetsc4py.pyx":2481
  * # --------------------------------------------------------------------
  * 
  * cdef PetscErrorCode PetscPythonMonitorSet_Python(             # <<<<<<<<<<<<<<
@@ -25283,7 +25917,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2523
+/* "libpetsc4py.pyx":2537
  * 
  * 
  * cdef public PetscErrorCode PetscPythonRegisterAll() except IERR:             # <<<<<<<<<<<<<<
@@ -25295,66 +25929,63 @@ PetscErrorCode PetscPythonRegisterAll(void) {
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PetscPythonRegisterAll", 0);
 
-  /* "libpetsc4py.pyx":2524
+  /* "libpetsc4py.pyx":2538
  * 
  * cdef public PetscErrorCode PetscPythonRegisterAll() except IERR:
  *     FunctionBegin(b"PetscPythonRegisterAll")             # <<<<<<<<<<<<<<
  * 
  *     # Python subtypes
  */
-  __pyx_f_11libpetsc4py_FunctionBegin(__pyx_k_PetscPythonRegisterAll);
+  __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PetscPythonRegisterAll"));
 
-  /* "libpetsc4py.pyx":2527
+  /* "libpetsc4py.pyx":2541
  * 
  *     # Python subtypes
  *     CHKERR( MatRegister ( MATPYTHON,  MatCreate_Python  ) )             # <<<<<<<<<<<<<<
  *     CHKERR( PCRegister  ( PCPYTHON,   PCCreate_Python   ) )
  *     CHKERR( KSPRegister ( KSPPYTHON,  KSPCreate_Python  ) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(MatRegister("python", __pyx_f_11libpetsc4py_MatCreate_Python)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(MatRegister("python", __pyx_f_11libpetsc4py_MatCreate_Python)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2541, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2528
+  /* "libpetsc4py.pyx":2542
  *     # Python subtypes
  *     CHKERR( MatRegister ( MATPYTHON,  MatCreate_Python  ) )
  *     CHKERR( PCRegister  ( PCPYTHON,   PCCreate_Python   ) )             # <<<<<<<<<<<<<<
  *     CHKERR( KSPRegister ( KSPPYTHON,  KSPCreate_Python  ) )
  *     CHKERR( SNESRegister( SNESPYTHON, SNESCreate_Python ) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PCRegister("python", __pyx_f_11libpetsc4py_PCCreate_Python)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PCRegister("python", __pyx_f_11libpetsc4py_PCCreate_Python)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2542, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2529
+  /* "libpetsc4py.pyx":2543
  *     CHKERR( MatRegister ( MATPYTHON,  MatCreate_Python  ) )
  *     CHKERR( PCRegister  ( PCPYTHON,   PCCreate_Python   ) )
  *     CHKERR( KSPRegister ( KSPPYTHON,  KSPCreate_Python  ) )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESRegister( SNESPYTHON, SNESCreate_Python ) )
  *     CHKERR( TSRegister  ( TSPYTHON,   TSCreate_Python   ) )
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPRegister("python", __pyx_f_11libpetsc4py_KSPCreate_Python)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPRegister("python", __pyx_f_11libpetsc4py_KSPCreate_Python)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2543, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2530
+  /* "libpetsc4py.pyx":2544
  *     CHKERR( PCRegister  ( PCPYTHON,   PCCreate_Python   ) )
  *     CHKERR( KSPRegister ( KSPPYTHON,  KSPCreate_Python  ) )
  *     CHKERR( SNESRegister( SNESPYTHON, SNESCreate_Python ) )             # <<<<<<<<<<<<<<
  *     CHKERR( TSRegister  ( TSPYTHON,   TSCreate_Python   ) )
  * 
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESRegister("python", __pyx_f_11libpetsc4py_SNESCreate_Python)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESRegister("python", __pyx_f_11libpetsc4py_SNESCreate_Python)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2544, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2531
+  /* "libpetsc4py.pyx":2545
  *     CHKERR( KSPRegister ( KSPPYTHON,  KSPCreate_Python  ) )
  *     CHKERR( SNESRegister( SNESPYTHON, SNESCreate_Python ) )
  *     CHKERR( TSRegister  ( TSPYTHON,   TSCreate_Python   ) )             # <<<<<<<<<<<<<<
  * 
  *     # Python monitors
  */
-  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(TSRegister("python", __pyx_f_11libpetsc4py_TSCreate_Python)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(TSRegister("python", __pyx_f_11libpetsc4py_TSCreate_Python)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2545, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2535
+  /* "libpetsc4py.pyx":2549
  *     # Python monitors
  *     global PetscPythonMonitorSet_C
  *     PetscPythonMonitorSet_C = PetscPythonMonitorSet_Python             # <<<<<<<<<<<<<<
@@ -25363,7 +25994,7 @@ PetscErrorCode PetscPythonRegisterAll(void) {
  */
   PetscPythonMonitorSet_C = __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python;
 
-  /* "libpetsc4py.pyx":2537
+  /* "libpetsc4py.pyx":2551
  *     PetscPythonMonitorSet_C = PetscPythonMonitorSet_Python
  * 
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -25373,7 +26004,7 @@ PetscErrorCode PetscPythonRegisterAll(void) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2523
+  /* "libpetsc4py.pyx":2537
  * 
  * 
  * cdef public PetscErrorCode PetscPythonRegisterAll() except IERR:             # <<<<<<<<<<<<<<
@@ -25463,8 +26094,9 @@ static PyTypeObject __pyx_type_11libpetsc4py__PyObj = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -25530,8 +26162,9 @@ static PyTypeObject __pyx_type_11libpetsc4py__PyMat = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -25597,8 +26230,9 @@ static PyTypeObject __pyx_type_11libpetsc4py__PyPC = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -25664,8 +26298,9 @@ static PyTypeObject __pyx_type_11libpetsc4py__PyKSP = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -25731,8 +26366,9 @@ static PyTypeObject __pyx_type_11libpetsc4py__PySNES = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -25798,8 +26434,9 @@ static PyTypeObject __pyx_type_11libpetsc4py__PyTS = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -25867,11 +26504,11 @@ static struct PyModuleDef __pyx_moduledef = {
 #endif
 
 static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0},
   {&__pyx_n_s_Error, __pyx_k_Error, sizeof(__pyx_k_Error), 0, 0, 1, 1},
   {&__pyx_n_s_SOR, __pyx_k_SOR, sizeof(__pyx_k_SOR), 0, 0, 1, 1},
-  {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0},
-  {&__pyx_kp_s__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 1, 0},
-  {&__pyx_kp_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 0},
+  {&__pyx_kp_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 0},
+  {&__pyx_kp_s__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 1, 0},
   {&__pyx_n_s_adaptStep, __pyx_k_adaptStep, sizeof(__pyx_k_adaptStep), 0, 0, 1, 1},
   {&__pyx_n_s_apply, __pyx_k_apply, sizeof(__pyx_k_apply), 0, 0, 1, 1},
   {&__pyx_n_s_applySymmetricLeft, __pyx_k_applySymmetricLeft, sizeof(__pyx_k_applySymmetricLeft), 0, 0, 1, 1},
@@ -25952,8 +26589,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_compile = __Pyx_GetBuiltinName(__pyx_n_s_compile); if (!__pyx_builtin_compile) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 269, __pyx_L1_error)
+  __pyx_builtin_compile = __Pyx_GetBuiltinName(__pyx_n_s_compile); if (!__pyx_builtin_compile) __PYX_ERR(0, 271, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -25963,38 +26600,38 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "libpetsc4py.pyx":254
+  /* "libpetsc4py.pyx":256
  * 
  * cdef object parse_url(object url):
  *     path, name = url.rsplit(":", 1)             # <<<<<<<<<<<<<<
  *     return (path, name)
  * 
  */
-  __pyx_tuple__3 = PyTuple_Pack(2, __pyx_kp_s__2, __pyx_int_1); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__3);
-  __Pyx_GIVEREF(__pyx_tuple__3);
+  __pyx_tuple__2 = PyTuple_Pack(2, __pyx_kp_s_, __pyx_int_1); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 256, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__2);
+  __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "libpetsc4py.pyx":372
+  /* "libpetsc4py.pyx":375
  *     # package.module[.{function|class}]
  *     if '.' in name:
  *         modname, clsname = name.rsplit('.', 1)             # <<<<<<<<<<<<<<
  *         mod = PyImport_Import(modname)
  *         if hasattr(mod, clsname):
  */
-  __pyx_tuple__5 = PyTuple_Pack(2, __pyx_kp_s__4, __pyx_int_1); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__5);
-  __Pyx_GIVEREF(__pyx_tuple__5);
+  __pyx_tuple__4 = PyTuple_Pack(2, __pyx_kp_s__3, __pyx_int_1); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 375, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__4);
+  __Pyx_GIVEREF(__pyx_tuple__4);
 
-  /* "libpetsc4py.pyx":2489
+  /* "libpetsc4py.pyx":2503
  *         path, names = url, 'monitor'
  *     module = load_module(path)
  *     for attr in names.split(','):             # <<<<<<<<<<<<<<
  *         monitor = getattr(module, attr)
  *         if isinstance(monitor, type):
  */
-  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s__6); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__7);
-  __Pyx_GIVEREF(__pyx_tuple__7);
+  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s__5); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 2503, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__6);
+  __Pyx_GIVEREF(__pyx_tuple__6);
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -26003,8 +26640,8 @@ static int __Pyx_InitCachedConstants(void) {
 }
 
 static int __Pyx_InitGlobals(void) {
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -26023,9 +26660,6 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PetscErrorCode __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannyDeclarations
   #if CYTHON_REFNANNY
   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
@@ -26037,17 +26671,24 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   }
   #endif
   __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_libpetsc4py(void)", 0);
-  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __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[0]; __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[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
   #ifdef __Pyx_CyFunction_USED
-  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   #ifdef __Pyx_FusedFunction_USED
-  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_Coroutine_USED
+  if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   #ifdef __Pyx_Generator_USED
-  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_StopAsyncIteration_USED
+  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
@@ -26062,34 +26703,34 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   #else
   __pyx_m = PyModule_Create(&__pyx_moduledef);
   #endif
-  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_d);
-  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __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[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
   /*--- Initialize various global constants etc. ---*/
-  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 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_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   if (__pyx_module_is_main_libpetsc4py) {
-    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   }
   #if PY_MAJOR_VERSION >= 3
   {
-    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
     if (!PyDict_GetItemString(modules, "libpetsc4py")) {
-      if (unlikely(PyDict_SetItemString(modules, "libpetsc4py", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(PyDict_SetItemString(modules, "libpetsc4py", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
     }
   }
   #endif
   /*--- Builtin init code ---*/
-  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Constants init code ---*/
-  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Global init code ---*/
   __pyx_v_11libpetsc4py_PetscError = Py_None; Py_INCREF(Py_None);
   __pyx_v_11libpetsc4py_module_cache = ((PyObject*)Py_None); Py_INCREF(Py_None);
@@ -26101,93 +26742,96 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   __pyx_vtable_11libpetsc4py__PyObj.getcontext = (int (*)(struct __pyx_obj_11libpetsc4py__PyObj *, void **))__pyx_f_11libpetsc4py_6_PyObj_getcontext;
   __pyx_vtable_11libpetsc4py__PyObj.setname = (int (*)(struct __pyx_obj_11libpetsc4py__PyObj *, char *))__pyx_f_11libpetsc4py_6_PyObj_setname;
   __pyx_vtable_11libpetsc4py__PyObj.getname = (char *(*)(struct __pyx_obj_11libpetsc4py__PyObj *))__pyx_f_11libpetsc4py_6_PyObj_getname;
-  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyObj) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyObj) < 0) __PYX_ERR(0, 284, __pyx_L1_error)
   __pyx_type_11libpetsc4py__PyObj.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyObj.tp_dict, __pyx_vtabptr_11libpetsc4py__PyObj) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyObj.tp_dict, __pyx_vtabptr_11libpetsc4py__PyObj) < 0) __PYX_ERR(0, 284, __pyx_L1_error)
   __pyx_ptype_11libpetsc4py__PyObj = &__pyx_type_11libpetsc4py__PyObj;
   __pyx_vtabptr_11libpetsc4py__PyMat = &__pyx_vtable_11libpetsc4py__PyMat;
   __pyx_vtable_11libpetsc4py__PyMat.__pyx_base = *__pyx_vtabptr_11libpetsc4py__PyObj;
   __pyx_type_11libpetsc4py__PyMat.tp_base = __pyx_ptype_11libpetsc4py__PyObj;
-  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyMat) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyMat) < 0) __PYX_ERR(0, 512, __pyx_L1_error)
   __pyx_type_11libpetsc4py__PyMat.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyMat.tp_dict, __pyx_vtabptr_11libpetsc4py__PyMat) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyMat.tp_dict, __pyx_vtabptr_11libpetsc4py__PyMat) < 0) __PYX_ERR(0, 512, __pyx_L1_error)
   __pyx_ptype_11libpetsc4py__PyMat = &__pyx_type_11libpetsc4py__PyMat;
   __pyx_vtabptr_11libpetsc4py__PyPC = &__pyx_vtable_11libpetsc4py__PyPC;
   __pyx_vtable_11libpetsc4py__PyPC.__pyx_base = *__pyx_vtabptr_11libpetsc4py__PyObj;
   __pyx_type_11libpetsc4py__PyPC.tp_base = __pyx_ptype_11libpetsc4py__PyObj;
-  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyPC) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyPC) < 0) __PYX_ERR(0, 1152, __pyx_L1_error)
   __pyx_type_11libpetsc4py__PyPC.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyPC.tp_dict, __pyx_vtabptr_11libpetsc4py__PyPC) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyPC.tp_dict, __pyx_vtabptr_11libpetsc4py__PyPC) < 0) __PYX_ERR(0, 1152, __pyx_L1_error)
   __pyx_ptype_11libpetsc4py__PyPC = &__pyx_type_11libpetsc4py__PyPC;
   __pyx_vtabptr_11libpetsc4py__PyKSP = &__pyx_vtable_11libpetsc4py__PyKSP;
   __pyx_vtable_11libpetsc4py__PyKSP.__pyx_base = *__pyx_vtabptr_11libpetsc4py__PyObj;
   __pyx_type_11libpetsc4py__PyKSP.tp_base = __pyx_ptype_11libpetsc4py__PyObj;
-  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyKSP) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyKSP) < 0) __PYX_ERR(0, 1427, __pyx_L1_error)
   __pyx_type_11libpetsc4py__PyKSP.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyKSP.tp_dict, __pyx_vtabptr_11libpetsc4py__PyKSP) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyKSP.tp_dict, __pyx_vtabptr_11libpetsc4py__PyKSP) < 0) __PYX_ERR(0, 1427, __pyx_L1_error)
   __pyx_ptype_11libpetsc4py__PyKSP = &__pyx_type_11libpetsc4py__PyKSP;
   __pyx_vtabptr_11libpetsc4py__PySNES = &__pyx_vtable_11libpetsc4py__PySNES;
   __pyx_vtable_11libpetsc4py__PySNES.__pyx_base = *__pyx_vtabptr_11libpetsc4py__PyObj;
   __pyx_type_11libpetsc4py__PySNES.tp_base = __pyx_ptype_11libpetsc4py__PyObj;
-  if (PyType_Ready(&__pyx_type_11libpetsc4py__PySNES) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PySNES) < 0) __PYX_ERR(0, 1782, __pyx_L1_error)
   __pyx_type_11libpetsc4py__PySNES.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PySNES.tp_dict, __pyx_vtabptr_11libpetsc4py__PySNES) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PySNES.tp_dict, __pyx_vtabptr_11libpetsc4py__PySNES) < 0) __PYX_ERR(0, 1782, __pyx_L1_error)
   __pyx_ptype_11libpetsc4py__PySNES = &__pyx_type_11libpetsc4py__PySNES;
   __pyx_vtabptr_11libpetsc4py__PyTS = &__pyx_vtable_11libpetsc4py__PyTS;
   __pyx_vtable_11libpetsc4py__PyTS.__pyx_base = *__pyx_vtabptr_11libpetsc4py__PyObj;
   __pyx_type_11libpetsc4py__PyTS.tp_base = __pyx_ptype_11libpetsc4py__PyObj;
-  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyTS) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyTS) < 0) __PYX_ERR(0, 2117, __pyx_L1_error)
   __pyx_type_11libpetsc4py__PyTS.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyTS.tp_dict, __pyx_vtabptr_11libpetsc4py__PyTS) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyTS.tp_dict, __pyx_vtabptr_11libpetsc4py__PyTS) < 0) __PYX_ERR(0, 2117, __pyx_L1_error)
   __pyx_ptype_11libpetsc4py__PyTS = &__pyx_type_11libpetsc4py__PyTS;
   /*--- 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[1]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __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[1]; __pyx_lineno = 78; __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[1]; __pyx_lineno = 78; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __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[1]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_8petsc4py_5PETSc_Comm = __Pyx_ImportType("petsc4py.PETSc", "Comm", sizeof(struct PyPetscCommObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Comm)) __PYX_ERR(1, 70, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_Object = __Pyx_ImportType("petsc4py.PETSc", "Object", sizeof(struct PyPetscObjectObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Object)) __PYX_ERR(1, 78, __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(1, 78, __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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 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(1, 192, __pyx_L1_error)
   /*--- Variable import code ---*/
   /*--- Function import code ---*/
-  __pyx_t_1 = __Pyx_ImportModule("petsc4py.PETSc"); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ImportFunction(__pyx_t_1, "PyPetscType_Lookup", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup, "PyObject *(int)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_ImportModule("petsc4py.PETSc"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (__Pyx_ImportFunction(__pyx_t_1, "PyPetscType_Lookup", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup, "PyTypeObject *(int)") < 0) __PYX_ERR(0, 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(0, 1, __pyx_L1_error)
+  #endif
 
-  /* "libpetsc4py.pyx":97
+  /* "libpetsc4py.pyx":99
  *     enum: IERR "PETSC_ERR_PYTHON"
  * 
  * cdef char *FUNCT = NULL             # <<<<<<<<<<<<<<
@@ -26196,7 +26840,7 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
  */
   __pyx_v_11libpetsc4py_FUNCT = NULL;
 
-  /* "libpetsc4py.pyx":99
+  /* "libpetsc4py.pyx":101
  * cdef char *FUNCT = NULL
  * cdef char *fstack[1024]
  * cdef int   istack = 0             # <<<<<<<<<<<<<<
@@ -26205,7 +26849,7 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
  */
   __pyx_v_11libpetsc4py_istack = 0;
 
-  /* "libpetsc4py.pyx":140
+  /* "libpetsc4py.pyx":142
  *     PyObject *PyExc_RuntimeError
  * 
  * cdef object PetscError = <object>PyExc_RuntimeError             # <<<<<<<<<<<<<<
@@ -26219,22 +26863,22 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":141
+  /* "libpetsc4py.pyx":143
  * 
  * cdef object PetscError = <object>PyExc_RuntimeError
  * from petsc4py.PETSc import Error as PetscError             # <<<<<<<<<<<<<<
  * 
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:
  */
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_Error);
   __Pyx_GIVEREF(__pyx_n_s_Error);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Error);
-  __pyx_t_3 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 143, __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_Error); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Error); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_t_2);
   __Pyx_XGOTREF(__pyx_v_11libpetsc4py_PetscError);
@@ -26243,21 +26887,21 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":257
+  /* "libpetsc4py.pyx":259
  *     return (path, name)
  * 
  * cdef dict module_cache = {}             # <<<<<<<<<<<<<<
  * 
  * cdef object load_module(object path):
  */
-  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XGOTREF(__pyx_v_11libpetsc4py_module_cache);
   __Pyx_DECREF_SET(__pyx_v_11libpetsc4py_module_cache, ((PyObject*)__pyx_t_3));
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":2546
+  /* "libpetsc4py.pyx":2560
  * # below trick Cython to treat all these entries as used.
  * 
  * if PETSC_FALSE:             # <<<<<<<<<<<<<<
@@ -26266,132 +26910,138 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
  */
   if (PETSC_FALSE) {
 
-    /* "libpetsc4py.pyx":2547
+    /* "libpetsc4py.pyx":2561
  * 
  * if PETSC_FALSE:
  *     <void>import_libpetsc4py()             # <<<<<<<<<<<<<<
  *     <void>MatPythonGetContext(NULL,NULL)
  *     <void>MatPythonSetContext(NULL,NULL)
  */
-    __pyx_t_4 = import_libpetsc4py(); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = import_libpetsc4py(); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 2561, __pyx_L1_error)
     ((void)__pyx_t_4);
 
-    /* "libpetsc4py.pyx":2548
+    /* "libpetsc4py.pyx":2562
  * if PETSC_FALSE:
  *     <void>import_libpetsc4py()
  *     <void>MatPythonGetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>MatPythonSetContext(NULL,NULL)
  *     <void>PCPythonGetContext(NULL,NULL)
  */
-    __pyx_t_5 = MatPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = MatPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2562, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2549
+    /* "libpetsc4py.pyx":2563
  *     <void>import_libpetsc4py()
  *     <void>MatPythonGetContext(NULL,NULL)
  *     <void>MatPythonSetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>PCPythonGetContext(NULL,NULL)
  *     <void>PCPythonSetContext(NULL,NULL)
  */
-    __pyx_t_5 = MatPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = MatPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2563, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2550
+    /* "libpetsc4py.pyx":2564
  *     <void>MatPythonGetContext(NULL,NULL)
  *     <void>MatPythonSetContext(NULL,NULL)
  *     <void>PCPythonGetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>PCPythonSetContext(NULL,NULL)
  *     <void>KSPPythonGetContext(NULL,NULL)
  */
-    __pyx_t_5 = PCPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PCPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2564, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2551
+    /* "libpetsc4py.pyx":2565
  *     <void>MatPythonSetContext(NULL,NULL)
  *     <void>PCPythonGetContext(NULL,NULL)
  *     <void>PCPythonSetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>KSPPythonGetContext(NULL,NULL)
  *     <void>KSPPythonSetContext(NULL,NULL)
  */
-    __pyx_t_5 = PCPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PCPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2565, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2552
+    /* "libpetsc4py.pyx":2566
  *     <void>PCPythonGetContext(NULL,NULL)
  *     <void>PCPythonSetContext(NULL,NULL)
  *     <void>KSPPythonGetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>KSPPythonSetContext(NULL,NULL)
  *     <void>SNESPythonGetContext(NULL,NULL)
  */
-    __pyx_t_5 = KSPPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = KSPPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2566, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2553
+    /* "libpetsc4py.pyx":2567
  *     <void>PCPythonSetContext(NULL,NULL)
  *     <void>KSPPythonGetContext(NULL,NULL)
  *     <void>KSPPythonSetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>SNESPythonGetContext(NULL,NULL)
  *     <void>SNESPythonSetContext(NULL,NULL)
  */
-    __pyx_t_5 = KSPPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = KSPPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2567, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2554
+    /* "libpetsc4py.pyx":2568
  *     <void>KSPPythonGetContext(NULL,NULL)
  *     <void>KSPPythonSetContext(NULL,NULL)
  *     <void>SNESPythonGetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>SNESPythonSetContext(NULL,NULL)
  *     <void>TSPythonGetContext(NULL,NULL)
  */
-    __pyx_t_5 = SNESPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = SNESPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2568, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2555
+    /* "libpetsc4py.pyx":2569
  *     <void>KSPPythonSetContext(NULL,NULL)
  *     <void>SNESPythonGetContext(NULL,NULL)
  *     <void>SNESPythonSetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>TSPythonGetContext(NULL,NULL)
  *     <void>TSPythonSetContext(NULL,NULL)
  */
-    __pyx_t_5 = SNESPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = SNESPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2569, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2556
+    /* "libpetsc4py.pyx":2570
  *     <void>SNESPythonGetContext(NULL,NULL)
  *     <void>SNESPythonSetContext(NULL,NULL)
  *     <void>TSPythonGetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>TSPythonSetContext(NULL,NULL)
  *     <void>PetscPythonRegisterAll()
  */
-    __pyx_t_5 = TSPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = TSPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2570, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2557
+    /* "libpetsc4py.pyx":2571
  *     <void>SNESPythonSetContext(NULL,NULL)
  *     <void>TSPythonGetContext(NULL,NULL)
  *     <void>TSPythonSetContext(NULL,NULL)             # <<<<<<<<<<<<<<
  *     <void>PetscPythonRegisterAll()
  * 
  */
-    __pyx_t_5 = TSPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = TSPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2571, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2558
+    /* "libpetsc4py.pyx":2572
  *     <void>TSPythonGetContext(NULL,NULL)
  *     <void>TSPythonSetContext(NULL,NULL)
  *     <void>PetscPythonRegisterAll()             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-    __pyx_t_5 = PetscPythonRegisterAll(); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PetscPythonRegisterAll(); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2572, __pyx_L1_error)
     ((void)__pyx_t_5);
-    goto __pyx_L2;
+
+    /* "libpetsc4py.pyx":2560
+ * # below trick Cython to treat all these entries as used.
+ * 
+ * if PETSC_FALSE:             # <<<<<<<<<<<<<<
+ *     <void>import_libpetsc4py()
+ *     <void>MatPythonGetContext(NULL,NULL)
+ */
   }
-  __pyx_L2:;
 
   /*--- Wrapped vars code ---*/
 
-  if (__Pyx_RegisterCleanup()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -26415,9 +27065,10 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
 }
 
 static void __Pyx_CleanupGlobals(void) {
-  Py_CLEAR(__pyx_tuple__3);
-  Py_CLEAR(__pyx_tuple__5);
-  Py_CLEAR(__pyx_tuple__7);
+  Py_CLEAR(__pyx_tuple__2);
+  Py_CLEAR(__pyx_tuple__4);
+  Py_CLEAR(__pyx_tuple__6);
+  /* CodeObjectCache.cleanup */
   if (__pyx_code_cache.entries) {
       __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
       int i, count = __pyx_code_cache.count;
@@ -26469,6 +27120,7 @@ static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
 }
 
 /* --- Runtime support code --- */
+/* Refnanny */
 #if CYTHON_REFNANNY
 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
     PyObject *m = NULL, *p = NULL;
@@ -26485,6 +27137,7 @@ end:
 }
 #endif
 
+/* GetBuiltinName */
 static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
     PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
     if (unlikely(!result)) {
@@ -26498,10 +27151,10 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
     return result;
 }
 
-static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+/* 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;
-    PyThreadState *tstate = PyThreadState_GET();
     tmp_type = tstate->curexc_type;
     tmp_value = tstate->curexc_value;
     tmp_tb = tstate->curexc_traceback;
@@ -26511,34 +27164,33 @@ static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyOb
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
-#else
-    PyErr_Restore(type, value, tb);
-#endif
 }
-static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
+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;
-#else
-    PyErr_Fetch(type, value, tb);
-#endif
 }
+#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);
@@ -26565,6 +27217,7 @@ static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
 #endif
 }
 
+/* ExtTypeTest */
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
     if (unlikely(!type)) {
         PyErr_SetString(PyExc_SystemError, "Missing type object");
@@ -26577,6 +27230,7 @@ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
     return 0;
 }
 
+/* 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,
@@ -26603,6 +27257,7 @@ static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
     }
 }
 
+/* PyObjectCall */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
@@ -26622,17 +27277,20 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg
 }
 #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();
@@ -26667,6 +27325,7 @@ static CYTHON_INLINE int __Pyx_IterFinish(void) {
 #endif
 }
 
+/* UnpackItemEndCheck */
 static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
     if (unlikely(retval)) {
         Py_DECREF(retval);
@@ -26678,6 +27337,7 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
     return 0;
 }
 
+/* PyObjectCallMethO */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
     PyObject *self, *result;
@@ -26697,6 +27357,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject
 }
 #endif
 
+/* PyObjectCallOneArg */
 #if CYTHON_COMPILING_IN_CPYTHON
 static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
     PyObject *result;
@@ -26722,12 +27383,17 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 }
 #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;
+    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
 
-#if CYTHON_COMPILING_IN_CPYTHON
+/* 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))) {
@@ -26742,11 +27408,15 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
 }
 #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;
-    PyThreadState *tstate = PyThreadState_GET();
     local_type = tstate->curexc_type;
     local_value = tstate->curexc_value;
     local_tb = tstate->curexc_traceback;
@@ -26799,42 +27469,43 @@ bad:
     return -1;
 }
 
-static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
+/* SwapException */
+      #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
     PyObject *tmp_type, *tmp_value, *tmp_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
     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;
+    *type = tmp_type;
+    *value = tmp_value;
+    *tb = tmp_tb;
+}
 #else
+static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
     PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
     PyErr_SetExcInfo(*type, *value, *tb);
-#endif
     *type = tmp_type;
     *value = tmp_value;
     *tb = tmp_tb;
 }
+#endif
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
+/* 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);
-#else
-    PyErr_GetExcInfo(type, value, tb);
-#endif
 }
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
     PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
     tmp_type = tstate->exc_type;
     tmp_value = tstate->exc_value;
     tmp_tb = tstate->exc_traceback;
@@ -26844,12 +27515,11 @@ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb)
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
-#else
-    PyErr_SetExcInfo(type, value, tb);
-#endif
 }
+#endif
 
-static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
+/* GetAttr */
+      static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
 #if CYTHON_COMPILING_IN_CPYTHON
 #if PY_MAJOR_VERSION >= 3
     if (likely(PyUnicode_Check(n)))
@@ -26861,7 +27531,8 @@ static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
     return PyObject_GetAttr(o, n);
 }
 
-static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
+/* GetAttr3 */
+      static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
     PyObject *r = __Pyx_GetAttr(o, n);
     if (unlikely(!r)) {
         if (!PyErr_ExceptionMatches(PyExc_AttributeError))
@@ -26875,11 +27546,8 @@ bad:
     return NULL;
 }
 
-static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
-    PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
-}
-
-static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+/* SetVTable */
+      static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
 #if PY_VERSION_HEX >= 0x02070000
     PyObject *ob = PyCapsule_New(vtable, 0, 0);
 #else
@@ -26896,7 +27564,8 @@ bad:
     return -1;
 }
 
-static void* __Pyx_GetVtable(PyObject *dict) {
+/* GetVTable */
+      static void* __Pyx_GetVtable(PyObject *dict) {
     void* ptr;
     PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
     if (!ob)
@@ -26915,49 +27584,126 @@ bad:
     return NULL;
 }
 
-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
+/* 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;
     }
-    return value;
-}
-
-#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)
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
         goto bad;
-    py_module = PyImport_Import(py_name);
-    Py_DECREF(py_name);
-    return py_module;
-bad:
-    Py_XDECREF(py_name);
-    return 0;
-}
-#endif
-
-#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;
+    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;
+}
+
+/* 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)
@@ -27011,13 +27757,14 @@ static int __Pyx_RegisterCleanup(void) {
 }
 #endif
 
-static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+/* 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) / 2;
+        mid = start + (end - start) / 2;
         if (code_line < entries[mid].code_line) {
             end = mid;
         } else if (code_line > entries[mid].code_line) {
@@ -27090,7 +27837,8 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
     Py_INCREF(code_object);
 }
 
-#include "compile.h"
+/* AddTraceback */
+      #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
@@ -27170,80 +27918,8 @@ bad:
     Py_XDECREF(py_frame);
 }
 
-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;
-}
-
-static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void) {
+/* None */
+      static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void) {
   int err;
   #ifdef WITH_THREAD
   PyGILState_STATE _save = PyGILState_Ensure();
@@ -27255,8 +27931,9 @@ static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void) {
   return err;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value) {
-    const PetscInt neg_one = (PetscInt) -1, const_zero = 0;
+/* 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)) {
@@ -27281,134 +27958,31 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value) {
     }
 }
 
-#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"
- #endif
-#endif
-
-static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
-    const PetscInt neg_one = (PetscInt) -1, const_zero = 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_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-            switch (Py_SIZE(x)) {
-                case  0: return 0;
-                case  1: __PYX_VERIFY_RETURN_INT(PetscInt, digit, ((PyLongObject*)x)->ob_digit[0]);
-            }
- #endif
-#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(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))
-            }
-        } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-            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]);
-            }
- #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 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_Int(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_Int(x);
-        if (!tmp) return (PetscInt) -1;
-        val = __Pyx_PyInt_As_PetscInt(tmp);
-        Py_DECREF(tmp);
-        return val;
+/* 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;\
     }
-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;
-}
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-    const long neg_one = (long) -1, const_zero = 0;
+/* 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)) {
@@ -27433,7 +28007,8 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
     }
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject* o, PyObject* globals) {
+/* PyExec */
+      static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject* o, PyObject* globals) {
     return __Pyx_PyExec3(o, globals, NULL);
 }
 static PyObject* __Pyx_PyExec3(PyObject* o, PyObject* globals, PyObject* locals) {
@@ -27460,7 +28035,7 @@ static PyObject* __Pyx_PyExec3(PyObject* o, PyObject* globals, PyObject* locals)
                 "code object passed to exec() may not contain free variables");
             goto bad;
         }
-        #if PY_VERSION_HEX < 0x030200B1
+        #if CYTHON_COMPILING_IN_PYPY || PY_VERSION_HEX < 0x030200B1
         result = PyEval_EvalCode((PyCodeObject *)o, globals, locals);
         #else
         result = PyEval_EvalCode(o, globals, locals);
@@ -27501,8 +28076,36 @@ bad:
     return 0;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
-    const int neg_one = (int) -1, const_zero = 0;
+/* 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);
+    }
+}
+
+/* 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)) {
@@ -27527,8 +28130,248 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
     }
 }
 
-static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
-    const long neg_one = (long) -1, const_zero = 0;
+/* CIntToPy */
+      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatSORType(MatSORType value) {
+    const MatSORType neg_one = (MatSORType) -1, const_zero = (MatSORType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MatSORType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatSORType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MatSORType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MatSORType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatSORType) <= 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(MatSORType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NormType(NormType value) {
+    const NormType neg_one = (NormType) -1, const_zero = (NormType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(NormType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NormType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(NormType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(NormType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NormType) <= 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(NormType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* 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 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))) {
@@ -27545,13 +28388,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)) {
@@ -27567,24 +28436,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))
             }
         }
         {
@@ -27593,7 +28515,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;
@@ -27616,7 +28538,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);
@@ -27632,8 +28554,9 @@ raise_neg_overflow:
     return (long) -1;
 }
 
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
-    const int neg_one = (int) -1, const_zero = 0;
+/* 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))) {
@@ -27650,13 +28573,39 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(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(int, digit, ((PyLongObject*)x)->ob_digit[0]);
+                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
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -27672,24 +28621,77 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
             }
 #endif
             if (sizeof(int) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong(x))
+                __PYX_VERIFY_RETURN_INT_EXC(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))
+                __PYX_VERIFY_RETURN_INT_EXC(int, 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 (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
 #endif
             if (sizeof(int) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong(x))
+                __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
             } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -27698,7 +28700,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
             int 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;
@@ -27721,7 +28723,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
         }
     } else {
         int val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
         if (!tmp) return (int) -1;
         val = __Pyx_PyInt_As_int(tmp);
         Py_DECREF(tmp);
@@ -27737,7 +28739,8 @@ raise_neg_overflow:
     return (int) -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());
@@ -27752,7 +28755,8 @@ static int __Pyx_check_binary_version(void) {
     return 0;
 }
 
-#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)
@@ -27798,14 +28802,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;
@@ -27816,7 +28820,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;
@@ -27869,7 +28874,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) {
@@ -27907,7 +28913,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 &&
@@ -27948,7 +28954,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);
@@ -27969,7 +28975,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;
@@ -27978,7 +28984,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) {
@@ -28018,18 +29024,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/src/libpetsc4py/libpetsc4py.h b/src/libpetsc4py/libpetsc4py.h
index a9b5b38..155f2ff 100644
--- a/src/libpetsc4py/libpetsc4py.h
+++ b/src/libpetsc4py/libpetsc4py.h
@@ -1,3 +1,5 @@
+/* Generated by Cython 0.24 */
+
 #ifndef __PYX_HAVE__libpetsc4py
 #define __PYX_HAVE__libpetsc4py
 
diff --git a/src/libpetsc4py/libpetsc4py.pyx b/src/libpetsc4py/libpetsc4py.pyx
index bc4a6b2..7b6afc4 100644
--- a/src/libpetsc4py/libpetsc4py.pyx
+++ b/src/libpetsc4py/libpetsc4py.pyx
@@ -68,10 +68,12 @@ cdef extern from * nogil:
     PetscErrorCode PetscObjectTypeCompare(PetscObject,char[],PetscBool*)
     PetscErrorCode PetscObjectChangeTypeName(PetscObject, char[])
 
-    ctypedef struct PetscOptions
+    ctypedef struct _p_PetscOptionItems
+    ctypedef _p_PetscOptionItems* PetscOptionItems
+    ctypedef struct _n_PetscOptions
+    ctypedef _n_PetscOptions* PetscOptions
     PetscErrorCode PetscOptionsString(char[],char[],char[],char[],char[],size_t,PetscBool*)
-    PetscErrorCode PetscOptionsGetString(char[],char[],char[],size_t,PetscBool*)
-    PetscErrorCode PetscStrcmp(char[],char[],PetscBool*)
+    PetscErrorCode PetscOptionsGetString(PetscOptions,char[],char[],char[],size_t,PetscBool*)
 
     char *PETSCVIEWERASCII
     char *PETSCVIEWERSTRING
@@ -336,6 +338,7 @@ cdef class _PyObj:
             name = getattr(ctx, '__name__', None)
         else:
             modname = getattr(ctx, '__module__', None)
+            clsname = None
             cls = getattr(ctx, '__class__', None)
             if cls:
                 clsname = getattr(cls, '__name__', None)
@@ -456,7 +459,7 @@ cdef extern from * nogil:
 cdef extern from * nogil:
     struct _MatOps:
         PetscErrorCode (*destroy)(PetscMat) except IERR
-        PetscErrorCode (*setfromoptions)(PetscOptions*,PetscMat) except IERR
+        PetscErrorCode (*setfromoptions)(PetscOptionItems*,PetscMat) except IERR
         PetscErrorCode (*view)(PetscMat,PetscViewer) except IERR
         PetscErrorCode (*duplicate)(PetscMat,MatDuplicateOption,PetscMat*) except IERR
         PetscErrorCode (*copy)(PetscMat,PetscMat,MatStructure) except IERR
@@ -617,7 +620,7 @@ cdef PetscErrorCode MatDestroy_Python(
     return FunctionEnd()
 
 cdef PetscErrorCode MatSetFromOptions_Python(
-    PetscOptions *PetscOptionsObject,
+    PetscOptionItems *PetscOptionsObject,
     PetscMat mat,
     ) \
     except IERR with gil:
@@ -625,10 +628,10 @@ cdef PetscErrorCode MatSetFromOptions_Python(
     #
     cdef char name[2048], *defval = PyMat(mat).getname()
     cdef PetscBool found = PETSC_FALSE
-    cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+    cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
     CHKERR( PetscOptionsString(
             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
-            b"MatPythonSetType",defval,name,sizeof(name),&found) )
+            b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
     if found and name[0]:
         CHKERR( MatPythonSetType_PYTHON(mat,name) )
     #
@@ -744,7 +747,7 @@ cdef PetscErrorCode MatSetUp_Python(
     cdef char name[2048]
     cdef PetscBool found = PETSC_FALSE
     if PyMat(mat).self is None:
-        CHKERR( PetscOptionsGetString(
+        CHKERR( PetscOptionsGetString(NULL,
                 getPrefix(mat), b"-mat_python_type",
                 name,sizeof(name),&found) )
         if found and name[0]:
@@ -902,9 +905,17 @@ cdef PetscErrorCode MatMultAdd_Python(
     except IERR with gil:
     FunctionBegin(b"MatMultAdd_Python")
     cdef multAdd = PyMat(mat).multAdd
+    cdef PetscVec t = NULL
+
     if multAdd is None:
-        CHKERR( MatMult(mat,x,y) )
-        CHKERR( VecAXPY(y,1.0,v) )
+        if v == y:
+            CHKERR( VecDuplicate(y, &t) )
+            CHKERR( MatMult(mat,x,t) )
+            CHKERR( VecAXPY(y,1.0,t) )
+            CHKERR( VecDestroy(&t) )
+        else:
+            CHKERR( MatMult(mat,x,y) )
+            CHKERR( VecAXPY(y,1.0,v) )
         return FunctionEnd()
     if multAdd is None: return UNSUPPORTED(b"multAdd")
     multAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
@@ -1124,7 +1135,7 @@ cdef extern from * nogil:
       PetscErrorCode (*destroy)(PetscPC) except IERR
       PetscErrorCode (*setup)(PetscPC) except IERR
       PetscErrorCode (*reset)(PetscPC) except IERR
-      PetscErrorCode (*setfromoptions)(PetscOptions*,PetscPC) except IERR
+      PetscErrorCode (*setfromoptions)(PetscOptionItems*,PetscPC) except IERR
       PetscErrorCode (*view)(PetscPC,PetscViewer) except IERR
       PetscErrorCode (*presolve)(PetscPC,PetscKSP,PetscVec,PetscVec) except IERR
       PetscErrorCode (*postsolve)(PetscPC,PetscKSP,PetscVec,PetscVec) except IERR
@@ -1222,7 +1233,7 @@ cdef PetscErrorCode PCSetUp_Python(
     cdef char name[2048]
     cdef PetscBool found = PETSC_FALSE
     if PyPC(pc).self is None:
-        CHKERR( PetscOptionsGetString(
+        CHKERR( PetscOptionsGetString(NULL,
                 getPrefix(pc), b"-pc_python_type",
                 name,sizeof(name),&found) )
         if found and name[0]:
@@ -1261,7 +1272,7 @@ cdef PetscErrorCode PCReset_Python(
     return FunctionEnd()
 
 cdef PetscErrorCode PCSetFromOptions_Python(
-    PetscOptions *PetscOptionsObject,
+    PetscOptionItems *PetscOptionsObject,
     PetscPC pc,
     ) \
     except IERR with gil:
@@ -1269,10 +1280,10 @@ cdef PetscErrorCode PCSetFromOptions_Python(
     #
     cdef char name[2048], *defval = PyPC(pc).getname()
     cdef PetscBool found = PETSC_FALSE
-    cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+    cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
     CHKERR( PetscOptionsString(
             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
-            b"PCPythonSetType",defval,name,sizeof(name),&found) )
+            b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
     if found and name[0]:
         CHKERR( PCPythonSetType_PYTHON(pc,name) )
     #
@@ -1379,12 +1390,12 @@ cdef extern from * nogil:
         KSP_CONVERGED_ITERATING
 cdef extern from * nogil:
     struct _KSPOps:
-      PetscErrorCode (*destroy)(PetscKSP)          except IERR
-      PetscErrorCode (*setup)(PetscKSP)            except IERR
-      PetscErrorCode (*reset)(PetscKSP)            except IERR
-      PetscErrorCode (*setfromoptions)(PetscOptions*, PetscKSP) except IERR
+      PetscErrorCode (*destroy)(PetscKSP) except IERR
+      PetscErrorCode (*setup)(PetscKSP) except IERR
+      PetscErrorCode (*reset)(PetscKSP) except IERR
+      PetscErrorCode (*setfromoptions)(PetscOptionItems*, PetscKSP) except IERR
       PetscErrorCode (*view)(PetscKSP,PetscViewer) except IERR
-      PetscErrorCode (*solve)(PetscKSP)            except IERR
+      PetscErrorCode (*solve)(PetscKSP) except IERR
       PetscErrorCode (*buildsolution)(PetscKSP,PetscVec,PetscVec*) except IERR
       PetscErrorCode (*buildresidual)(PetscKSP,PetscVec,PetscVec,PetscVec*) except IERR
     ctypedef _KSPOps *KSPOps
@@ -1507,7 +1518,7 @@ cdef PetscErrorCode KSPSetUp_Python(
     cdef char name[2048]
     cdef PetscBool found = PETSC_FALSE
     if PyKSP(ksp).self is None:
-        CHKERR( PetscOptionsGetString(
+        CHKERR( PetscOptionsGetString(NULL,
                 getPrefix(ksp), b"-ksp_python_type",
                 name,sizeof(name),&found) )
         if found and name[0]:
@@ -1538,7 +1549,7 @@ cdef PetscErrorCode KSPReset_Python(
     return FunctionEnd()
 
 cdef PetscErrorCode KSPSetFromOptions_Python(
-    PetscOptions *PetscOptionsObject,
+    PetscOptionItems *PetscOptionsObject,
     PetscKSP ksp,
     ) \
     except IERR with gil:
@@ -1546,10 +1557,10 @@ cdef PetscErrorCode KSPSetFromOptions_Python(
     #
     cdef char name[2048], *defval = PyKSP(ksp).getname()
     cdef PetscBool found = PETSC_FALSE
-    cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+    cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
     CHKERR( PetscOptionsString(
             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
-            b"KSPPythonSetType",defval,name,sizeof(name),&found) )
+            b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
     if found and name[0]:
         CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
     #
@@ -1679,6 +1690,7 @@ cdef PetscErrorCode KSPSolve_Python_default(
         CHKERR( KSPConverged(ksp,ksp.iter,rnorm,&ksp.reason) )
         CHKERR( KSPLogHistory(ksp,ksp.norm) )
         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
+    <void>its # silent unused warning
     #
     return FunctionEnd()
 
@@ -1725,12 +1737,12 @@ cdef extern from * nogil:
     ctypedef enum SNESConvergedReason: SNES_CONVERGED_ITERATING
 cdef extern from * nogil:
     struct _SNESOps:
-      PetscErrorCode (*destroy)(PetscSNES)          except IERR
-      PetscErrorCode (*setup)(PetscSNES)            except IERR
-      PetscErrorCode (*reset)(PetscSNES)            except IERR
-      PetscErrorCode (*setfromoptions)(PetscOptions*,PetscSNES) except IERR
+      PetscErrorCode (*destroy)(PetscSNES) except IERR
+      PetscErrorCode (*setup)(PetscSNES) except IERR
+      PetscErrorCode (*reset)(PetscSNES) except IERR
+      PetscErrorCode (*setfromoptions)(PetscOptionItems*,PetscSNES) except IERR
       PetscErrorCode (*view)(PetscSNES,PetscViewer) except IERR
-      PetscErrorCode (*solve)(PetscSNES)            except IERR
+      PetscErrorCode (*solve)(PetscSNES) except IERR
     ctypedef _SNESOps *SNESOps
     struct _p_SNES:
         void *data
@@ -1848,7 +1860,7 @@ cdef PetscErrorCode SNESSetUp_Python(
     cdef char name[2048]
     cdef PetscBool found = PETSC_FALSE
     if PySNES(snes).self is None:
-        CHKERR( PetscOptionsGetString(
+        CHKERR( PetscOptionsGetString(NULL,
                 getPrefix(snes),b"-snes_python_type",
                 name,sizeof(name),&found) )
         if found and name[0]:
@@ -1877,7 +1889,7 @@ cdef PetscErrorCode SNESReset_Python(
     return FunctionEnd()
 
 cdef PetscErrorCode SNESSetFromOptions_Python(
-    PetscOptions *PetscOptionsObject,
+    PetscOptionItems *PetscOptionsObject,
     PetscSNES snes,
     ) \
     except IERR with gil:
@@ -1885,10 +1897,10 @@ cdef PetscErrorCode SNESSetFromOptions_Python(
     #
     cdef char name[2048], *defval = PySNES(snes).getname()
     cdef PetscBool found = PETSC_FALSE
-    cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+    cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
     CHKERR( PetscOptionsString(
             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
-            b"SNESPythonSetType",defval,name,sizeof(name),&found) )
+            b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
     if found and name[0]:
         CHKERR( SNESPythonSetType_PYTHON(snes,name) )
     #
@@ -1970,6 +1982,7 @@ cdef PetscErrorCode SNESSolve_Python_default(
         CHKERR( SNESConverged(snes,snes.iter,xnorm,ynorm,fnorm,&snes.reason) )
         CHKERR( SNESLogHistory(snes,snes.norm,lits) )
         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
+    <void>its # silent unused warning
     #
     return FunctionEnd()
 
@@ -2042,10 +2055,10 @@ cdef extern from * nogil:
 
 cdef extern from * nogil:
     struct _TSOps:
-      PetscErrorCode (*destroy)(PetscTS)          except IERR
-      PetscErrorCode (*setup)(PetscTS)            except IERR
-      PetscErrorCode (*reset)(PetscTS)            except IERR
-      PetscErrorCode (*setfromoptions)(PetscOptions*,PetscTS) except IERR
+      PetscErrorCode (*destroy)(PetscTS) except IERR
+      PetscErrorCode (*setup)(PetscTS) except IERR
+      PetscErrorCode (*reset)(PetscTS) except IERR
+      PetscErrorCode (*setfromoptions)(PetscOptionItems*,PetscTS) except IERR
       PetscErrorCode (*view)(PetscTS,PetscViewer) except IERR
       PetscErrorCode (*step)(PetscTS) except IERR
       PetscErrorCode (*rollback)(PetscTS) except IERR
@@ -2065,8 +2078,12 @@ cdef extern from * nogil:
       PetscErrorCode (*rhsjacobian)(PetscTS,PetscReal,PetscVec,PetscMat,PetscMat,void*) except IERR
       PetscErrorCode (*ijacobian)  (PetscTS,PetscReal,PetscVec,PetscVec,PetscReal,PetscMat,PetscMat,void*) except IERR
     ctypedef _TSUserOps *TSUserOps
+    struct _p_TSAdapt
+    ctypedef _p_TSAdapt *PetscTSAdapt "TSAdapt"
     struct _p_TS:
         void *data
+        PetscDM dm
+        PetscTSAdapt adapt
         TSOps ops
         TSUserOps userops
         TSProblemType problem_type
@@ -2078,7 +2095,6 @@ cdef extern from * nogil:
         PetscReal ptime
         PetscVec  vec_sol
         PetscReal time_step
-        PetscReal next_time_step
         PetscInt  max_steps
         PetscReal max_time
         TSConvergedReason reason
@@ -2088,7 +2104,9 @@ cdef extern from * nogil:
     PetscErrorCode TSGetSNES(PetscTS,PetscSNES*)
     PetscErrorCode TSPreStep(PetscTS)
     PetscErrorCode TSPreStage(PetscTS,PetscReal)
+    PetscErrorCode TSPostStage(PetscTS,PetscReal,PetscInt,PetscVec*)
     PetscErrorCode TSPostStep(PetscTS)
+    PetscErrorCode TSAdaptCheckStage(PetscTSAdapt,PetscTS,PetscReal,PetscVec,PetscBool*)
     PetscErrorCode TSMonitor(PetscTS,PetscInt,PetscReal,PetscVec)
     PetscErrorCode TSComputeIFunction(PetscTS,PetscReal,PetscVec,PetscVec,PetscVec,PetscBool)
     PetscErrorCode TSComputeIJacobian(PetscTS,PetscReal,PetscVec,PetscVec,PetscReal,PetscMat,PetscMat,PetscBool)
@@ -2193,7 +2211,7 @@ cdef PetscErrorCode TSSetUp_Python(
     cdef char name[2048]
     cdef PetscBool found = PETSC_FALSE
     if PyTS(ts).self is None:
-        CHKERR( PetscOptionsGetString(
+        CHKERR( PetscOptionsGetString(NULL,
                 getPrefix(ts),b"-ts_python_type",
                 name,sizeof(name),&found) )
         if found and name[0]:
@@ -2226,17 +2244,17 @@ cdef PetscErrorCode TSReset_Python(
     return FunctionEnd()
 
 cdef PetscErrorCode TSSetFromOptions_Python(
-    PetscOptions *PetscOptionsObject,
+    PetscOptionItems *PetscOptionsObject,
     PetscTS ts,
     ) \
     except IERR with gil:
     FunctionBegin(b"TSSetFromOptions_Python")
     cdef char name[2048], *defval = PyTS(ts).getname()
     cdef PetscBool found = PETSC_FALSE
-    cdef PetscOptions *opts "PetscOptionsObject" = PetscOptionsObject
+    cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
     CHKERR( PetscOptionsString(
             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
-            b"TSPythonSetType",defval,name,sizeof(name),&found) )
+            b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
     if found and name[0]:
         CHKERR( TSPythonSetType_PYTHON(ts,name) )
     #
@@ -2377,12 +2395,8 @@ cdef PetscErrorCode TSSolveStep_Python(
         solveStep(TS_(ts), <double>t, Vec_(x))
         return FunctionEnd()
     #
-    CHKERR( SNESSolve(ts.snes, NULL, x) )
-    cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING
-    CHKERR( SNESGetConvergedReason(ts.snes, &snesreason) )
-    if snesreason < 0: ts.reason = TS_DIVERGED_NONLINEAR_SOLVE
-    if snesreason < 0: return FunctionEnd()
     cdef PetscInt nits = 0, lits = 0
+    CHKERR( SNESSolve(ts.snes, NULL, x) )
     CHKERR( SNESGetIterationNumber(ts.snes,&nits) )
     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )
     ts.snes_its += nits
@@ -2401,10 +2415,6 @@ cdef PetscErrorCode TSAdaptStep_Python(
     nextdt[0] = ts.time_step
     stepok[0] = PETSC_TRUE
     #
-    cdef SNESConvergedReason snesreason = SNES_CONVERGED_ITERATING
-    CHKERR( SNESGetConvergedReason(ts.snes,&snesreason) )
-    if snesreason < 0: stepok[0] = PETSC_FALSE
-    #
     cdef adaptStep = PyTS(ts).adaptStep
     if adaptStep is None: return FunctionEnd()
     cdef object retval
@@ -2440,26 +2450,30 @@ cdef PetscErrorCode TSStep_Python_default(
     cdef PetscInt  r = 0
     cdef PetscReal tt = ts.ptime
     cdef PetscReal dt = ts.time_step
-    cdef PetscBool ok = PETSC_TRUE
+    cdef PetscBool accept  = PETSC_TRUE
+    cdef PetscBool stageok = PETSC_TRUE
     for r from 0 <= r < ts.max_reject:
-        ts.time_step = dt
         tt = ts.ptime + ts.time_step
         CHKERR( VecCopy(ts.vec_sol,vec_update) )
-        CHKERR( TSPreStep(ts) )
-        CHKERR( TSPreStage(ts,tt) )
+        CHKERR( TSPreStage(ts,tt+dt) )
         TSSolveStep_Python(ts,tt,vec_update)
-        TSAdaptStep_Python(ts,tt,vec_update,&dt,&ok)
-        if ok:  break
-        ts.reject += 1
-    if not ok:
-        if ts.reason == 0:
-            ts.reason = TS_DIVERGED_STEP_REJECTED
-        return FunctionEnd()
-    #
-    CHKERR( VecCopy(vec_update,ts.vec_sol) )
-    ts.ptime += ts.time_step
-    ts.time_step = dt
-    ts.steps += 1
+        CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
+        CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
+        if not stageok:
+            ts.reject += 1
+            continue
+        TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
+        if not accept:
+            ts.time_step = dt
+            ts.reject += 1
+            continue
+        CHKERR( VecCopy(vec_update,ts.vec_sol) )
+        ts.ptime += ts.time_step
+        ts.time_step = dt
+        break
+    if (not stageok or not accept) and ts.reason == 0:
+        ts.reason = TS_DIVERGED_STEP_REJECTED
+    <void>r # silent unused warning
     return FunctionEnd()
 
 # --------------------------------------------------------------------
diff --git a/src/petsc4py.PETSc.c b/src/petsc4py.PETSc.c
index 749846e..7f37d28 100644
--- a/src/petsc4py.PETSc.c
+++ b/src/petsc4py.PETSc.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__petsc4py__PETSc
 #define __PYX_HAVE_API__petsc4py__PETSc
 #include "petsc.h"
@@ -291,7 +300,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
@@ -299,16 +308,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))
@@ -343,10 +370,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
@@ -355,6 +383,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) {
@@ -445,6 +479,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__;
@@ -543,7 +578,7 @@ struct __pyx_obj_8petsc4py_5PETSc_DMComposite;
 struct __pyx_obj_8petsc4py_5PETSc_DMShell;
 struct __pyx_opt_args_8petsc4py_5PETSc_getprefix;
 
-/* "PETSc/petscopt.pxi":101
+/* "PETSc/petscopt.pxi":104
  * 
  * 
  * cdef enum PetscOptType:             # <<<<<<<<<<<<<<
@@ -558,7 +593,7 @@ enum __pyx_t_8petsc4py_5PETSc_PetscOptType {
   __pyx_e_8petsc4py_5PETSc_OPT_STRING
 };
 
-/* "PETSc/petscopt.pxi":36
+/* "PETSc/petscopt.pxi":39
  * #
  * 
  * cdef getprefix(prefix, deft=None):             # <<<<<<<<<<<<<<
@@ -569,6 +604,14 @@ struct __pyx_opt_args_8petsc4py_5PETSc_getprefix {
   int __pyx_n;
   PyObject *deft;
 };
+
+/* "PETSc/petscmpi.pxi":36
+ *     void *Cython_ImportFunction(object, char[], char[]) except? NULL
+ * 
+ * ctypedef MPI_Comm* PyMPICommGet(object) except NULL             # <<<<<<<<<<<<<<
+ * ctypedef object    PyMPICommNew(MPI_Comm)
+ * 
+ */
 typedef MPI_Comm *__pyx_t_8petsc4py_5PETSc_PyMPICommGet(PyObject *);
 
 /* "PETSc/petscmpi.pxi":37
@@ -580,7 +623,7 @@ typedef MPI_Comm *__pyx_t_8petsc4py_5PETSc_PyMPICommGet(PyObject *);
  */
 typedef PyObject *__pyx_t_8petsc4py_5PETSc_PyMPICommNew(MPI_Comm);
 
-/* "PETSc/petscvec.pxi":282
+/* "PETSc/petscvec.pxi":288
  * # --------------------------------------------------------------------
  * 
  * ctypedef int VecSetValuesFcn(PetscVec,PetscInt,const_PetscInt[],             # <<<<<<<<<<<<<<
@@ -589,7 +632,7 @@ typedef PyObject *__pyx_t_8petsc4py_5PETSc_PyMPICommNew(MPI_Comm);
  */
 typedef int __pyx_t_8petsc4py_5PETSc_VecSetValuesFcn(Vec, PetscInt, const PetscInt *, const PetscScalar *, InsertMode);
 
-/* "PETSc/petscmat.pxi":701
+/* "PETSc/petscmat.pxi":737
  * # -----------------------------------------------------------------------------
  * 
  * ctypedef int MatSetValuesFcn(PetscMat,PetscInt,const_PetscInt[],             # <<<<<<<<<<<<<<
@@ -928,7 +971,7 @@ struct __pyx_obj_8petsc4py_5PETSc__IS_buffer {
 };
 
 
-/* "PETSc/petscvec.pxi":407
+/* "PETSc/petscvec.pxi":413
  *     return 0
  * 
  * cdef class _Vec_buffer:             # <<<<<<<<<<<<<<
@@ -946,7 +989,7 @@ struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer {
 };
 
 
-/* "PETSc/petscvec.pxi":527
+/* "PETSc/petscvec.pxi":533
  * # --------------------------------------------------------------------
  * 
  * cdef class _Vec_LocalForm:             # <<<<<<<<<<<<<<
@@ -960,7 +1003,7 @@ struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm {
 };
 
 
-/* "PETSc/petscmat.pxi":982
+/* "PETSc/petscmat.pxi":1017
  * 
  * #@cython.internal
  * cdef class _Mat_Stencil:             # <<<<<<<<<<<<<<
@@ -973,7 +1016,7 @@ struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil {
 };
 
 
-/* "PETSc/petscdmda.pxi":196
+/* "PETSc/petscdmda.pxi":198
  * # --------------------------------------------------------------------
  * 
  * cdef class _DMDA_Vec_array(object):             # <<<<<<<<<<<<<<
@@ -1017,17 +1060,34 @@ struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access {
  * 
  * cdef class Options:             # <<<<<<<<<<<<<<
  * 
- *     cdef object _prefix
+ *     cdef PetscOptions opt
  */
 struct __pyx_obj_8petsc4py_5PETSc_Options {
   PyObject_HEAD
+  PetscOptions opt;
   PyObject *_prefix;
 };
 
+
+/* "PETSc/Sys.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * cdef class Sys:             # <<<<<<<<<<<<<<
+ * 
+ *     @classmethod
+ */
 struct __pyx_obj_8petsc4py_5PETSc_Sys {
   PyObject_HEAD
 };
 
+
+/* "PETSc/Log.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * cdef class Log:             # <<<<<<<<<<<<<<
+ * 
+ *     @classmethod
+ */
 struct __pyx_obj_8petsc4py_5PETSc_Log {
   PyObject_HEAD
 };
@@ -1046,7 +1106,7 @@ struct __pyx_obj_8petsc4py_5PETSc_LogStage {
 };
 
 
-/* "PETSc/Log.pyx":189
+/* "PETSc/Log.pyx":191
  * # --------------------------------------------------------------------
  * 
  * cdef class LogClass:             # <<<<<<<<<<<<<<
@@ -1059,7 +1119,7 @@ struct __pyx_obj_8petsc4py_5PETSc_LogClass {
 };
 
 
-/* "PETSc/Log.pyx":249
+/* "PETSc/Log.pyx":253
  * # --------------------------------------------------------------------
  * 
  * cdef class LogEvent:             # <<<<<<<<<<<<<<
@@ -1072,7 +1132,7 @@ struct __pyx_obj_8petsc4py_5PETSc_LogEvent {
 };
 
 
-/* "PETSc/Viewer.pyx":333
+/* "PETSc/Viewer.pyx":322
  * # --------------------------------------------------------------------
  * 
  * cdef class ViewerHDF5(Viewer):             # <<<<<<<<<<<<<<
@@ -1107,6 +1167,14 @@ struct __pyx_obj_8petsc4py_5PETSc_DMPlex {
   struct PyPetscDMObject __pyx_base;
 };
 
+
+/* "PETSc/DMComposite.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * cdef class DMComposite(DM):             # <<<<<<<<<<<<<<
+ * 
+ *     def create(self, comm=None):
+ */
 struct __pyx_obj_8petsc4py_5PETSc_DMComposite {
   struct PyPetscDMObject __pyx_base;
 };
@@ -1141,7 +1209,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *__pyx_vtabptr_8petsc4py_
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscViewer_Type;
 
-/* "PETSc/Viewer.pyx":73
+/* "PETSc/Viewer.pyx":74
  * # --------------------------------------------------------------------
  * 
  * cdef class Viewer(Object):             # <<<<<<<<<<<<<<
@@ -1156,7 +1224,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Viewer *__pyx_vtabptr_8petsc4py_
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscRandom_Type;
 
-/* "PETSc/Random.pyx":10
+/* "PETSc/Random.pyx":11
  * # --------------------------------------------------------------------
  * 
  * cdef class Random(Object):             # <<<<<<<<<<<<<<
@@ -1171,6 +1239,14 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Random *__pyx_vtabptr_8petsc4py_
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscIS_Type;
 
+/* "PETSc/IS.pyx":10
+ * # --------------------------------------------------------------------
+ * 
+ * cdef class IS(Object):             # <<<<<<<<<<<<<<
+ * 
+ *     Type = ISType
+ */
+
 struct __pyx_vtabstruct_8petsc4py_5PETSc_IS {
   struct __pyx_vtabstruct_8petsc4py_5PETSc_Object __pyx_base;
 };
@@ -1178,7 +1254,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscLGMap_Type;
 
-/* "PETSc/IS.pyx":348
+/* "PETSc/IS.pyx":350
  * # --------------------------------------------------------------------
  * 
  * cdef class LGMap(Object):             # <<<<<<<<<<<<<<
@@ -1238,6 +1314,14 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Scatter *__pyx_vtabptr_8petsc4py
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSection_Type;
 
+/* "PETSc/Section.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * cdef class Section(Object):             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+
 struct __pyx_vtabstruct_8petsc4py_5PETSc_Section {
   struct __pyx_vtabstruct_8petsc4py_5PETSc_Object __pyx_base;
 };
@@ -1245,7 +1329,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Section *__pyx_vtabptr_8petsc4py
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscMat_Type;
 
-/* "PETSc/Mat.pyx":140
+/* "PETSc/Mat.pyx":148
  * # --------------------------------------------------------------------
  * 
  * cdef class Mat(Object):             # <<<<<<<<<<<<<<
@@ -1260,7 +1344,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *__pyx_vtabptr_8petsc4py_5PE
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscNullSpace_Type;
 
-/* "PETSc/Mat.pyx":1354
+/* "PETSc/Mat.pyx":1461
  * # --------------------------------------------------------------------
  * 
  * cdef class NullSpace(Object):             # <<<<<<<<<<<<<<
@@ -1275,7 +1359,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *__pyx_vtabptr_8petsc4
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPC_Type;
 
-/* "PETSc/PC.pyx":97
+/* "PETSc/PC.pyx":104
  * # --------------------------------------------------------------------
  * 
  * cdef class PC(Object):             # <<<<<<<<<<<<<<
@@ -1290,7 +1374,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_PC *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscKSP_Type;
 
-/* "PETSc/KSP.pyx":79
+/* "PETSc/KSP.pyx":86
  * # --------------------------------------------------------------------
  * 
  * cdef class KSP(Object):             # <<<<<<<<<<<<<<
@@ -1320,7 +1404,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *__pyx_vtabptr_8petsc4py_5P
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTS_Type;
 
-/* "PETSc/TS.pyx":62
+/* "PETSc/TS.pyx":69
  * # -----------------------------------------------------------------------------
  * 
  * cdef class TS(Object):             # <<<<<<<<<<<<<<
@@ -1335,7 +1419,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTAO_Type;
 
-/* "PETSc/TAO.pyx":55
+/* "PETSc/TAO.pyx":53
  * # --------------------------------------------------------------------
  * 
  * cdef class TAO(Object):             # <<<<<<<<<<<<<<
@@ -1414,7 +1498,7 @@ struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer {
 static struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *__pyx_vtabptr_8petsc4py_5PETSc__IS_buffer;
 
 
-/* "PETSc/petscvec.pxi":407
+/* "PETSc/petscvec.pxi":413
  *     return 0
  * 
  * cdef class _Vec_buffer:             # <<<<<<<<<<<<<<
@@ -1434,7 +1518,7 @@ struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer {
 static struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *__pyx_vtabptr_8petsc4py_5PETSc__Vec_buffer;
 
 
-/* "PETSc/petscdmda.pxi":196
+/* "PETSc/petscdmda.pxi":198
  * # --------------------------------------------------------------------
  * 
  * cdef class _DMDA_Vec_array(object):             # <<<<<<<<<<<<<<
@@ -1449,7 +1533,7 @@ struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array {
 static struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_vtabptr_8petsc4py_5PETSc__DMDA_Vec_array;
 
 
-/* "PETSc/Viewer.pyx":333
+/* "PETSc/Viewer.pyx":322
  * # --------------------------------------------------------------------
  * 
  * cdef class ViewerHDF5(Viewer):             # <<<<<<<<<<<<<<
@@ -1491,6 +1575,14 @@ struct __pyx_vtabstruct_8petsc4py_5PETSc_DMPlex {
 static struct __pyx_vtabstruct_8petsc4py_5PETSc_DMPlex *__pyx_vtabptr_8petsc4py_5PETSc_DMPlex;
 
 
+/* "PETSc/DMComposite.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * cdef class DMComposite(DM):             # <<<<<<<<<<<<<<
+ * 
+ *     def create(self, comm=None):
+ */
+
 struct __pyx_vtabstruct_8petsc4py_5PETSc_DMComposite {
   struct __pyx_vtabstruct_8petsc4py_5PETSc_DM __pyx_base;
 };
@@ -1509,6 +1601,7 @@ struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell {
 static struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *__pyx_vtabptr_8petsc4py_5PETSc_DMShell;
 
 /* --- Runtime support code (head) --- */
+/* Refnanny.proto */
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
@@ -1525,19 +1618,19 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *__pyx_vtabptr_8petsc4py
   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__)
@@ -1560,17 +1653,18 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *__pyx_vtabptr_8petsc4py
   #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);
@@ -1586,13 +1680,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,
@@ -1602,49 +1699,82 @@ 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
 
+/* 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);
 
+/* IncludeStringH.proto */
 #include <string.h>
 
+/* BytesEquals.proto */
 static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
 
+/* UnicodeEquals.proto */
 static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
 
+/* StrEquals.proto */
 #if PY_MAJOR_VERSION >= 3
 #define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
 #else
 #define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
 #endif
 
+/* RaiseException.proto */
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
 
+/* ListAppend.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
@@ -1661,43 +1791,80 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
 #define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
 #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
 
+/* SwapException.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
 static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
+#endif
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb);
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb);
+/* 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
 
+/* PyObjectCallMethod1.proto */
 static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);
 
-#define __Pyx_PyObject_PopIndex(L, ix, is_signed, type, to_py_func) ( \
-    (PyList_CheckExact(L) && __Pyx_fits_Py_ssize_t(ix, type, is_signed)) ? \
-        __Pyx__PyList_PopIndex(L, ix) : __Pyx__PyObject_PopIndex(L, to_py_func(ix)))
-#define __Pyx_PyList_PopIndex(L, ix, is_signed, type, to_py_func) ( \
-    __Pyx_fits_Py_ssize_t(ix, type, is_signed) ? \
-        __Pyx__PyList_PopIndex(L, ix) : __Pyx__PyObject_PopIndex(L, to_py_func(ix)))
-static PyObject* __Pyx__PyList_PopIndex(PyObject* L, Py_ssize_t ix);
+/* pop_index.proto */
+static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix);
 static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix);
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix);
+#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
+    (likely(PyList_CheckExact(L) && __Pyx_fits_Py_ssize_t(ix, type, is_signed))) ?\
+        __Pyx__PyList_PopIndex(L, py_ix, ix) : (\
+        (unlikely(py_ix == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
+            __Pyx__PyObject_PopIndex(L, py_ix)))
+#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
+    __Pyx_fits_Py_ssize_t(ix, type, is_signed) ?\
+        __Pyx__PyList_PopIndex(L, py_ix, ix) : (\
+        (unlikely(py_ix == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
+            __Pyx__PyObject_PopIndex(L, py_ix)))
+#else
+#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func)\
+    __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func)
+#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
+    (unlikely(py_ix == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
+        __Pyx__PyObject_PopIndex(L, py_ix))
+#endif
 
+/* SliceObject.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
         PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
         PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
         int has_cstart, int has_cstop, int wraparound);
 
-#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) : \
+/* 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);
@@ -1705,32 +1872,55 @@ 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);
 
+/* Import.proto */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+/* ImportFrom.proto */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
+/* ExtTypeTest.proto */
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
 
+/* 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);
 
+/* 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
+
+/* 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);
 
+/* 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);
 
+/* ArgTypeTest.proto */
 static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
     const char *name, int exact);
 
+/* KeywordStringCheck.proto */
 static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed);
 
+/* 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) {
@@ -1748,19 +1938,58 @@ static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr
 #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
 #endif
 
+/* py_dict_keys.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d);
 
-static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
+/* UnpackUnboundCMethod.proto */
+typedef struct {
+    PyObject *type;
+    PyObject **method_name;
+    PyCFunction func;
+    PyObject *method;
+    int flag;
+} __Pyx_CachedCFunction;
+
+/* CallUnboundCMethod0.proto */
+static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_CallUnboundCMethod0(cfunc, self)\
+    ((likely((cfunc)->func)) ?\
+        (likely((cfunc)->flag == METH_NOARGS) ?  (*((cfunc)->func))(self, NULL) :\
+         (likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ?  ((*(PyCFunctionWithKeywords)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\
+             ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) : __Pyx__CallUnboundCMethod0(cfunc, self)))) :\
+        __Pyx__CallUnboundCMethod0(cfunc, self))
+#else
+#define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
+#endif
+
+/* PyIntBinop.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
+#else
+#define __Pyx_PyInt_EqObjC(op1, op2, intval, inplace)\
+    PyObject_RichCompare(op1, op2, Py_EQ)
+    #endif
 
-#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
-    __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) : \
-    (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) : \
+/* SetItemInt.proto */
+#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
                __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
 static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
                                                int is_list, int wraparound, int boundscheck);
 
+/* PyIntBinop.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
+#else
+#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace)\
+    (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
+#endif
+
+/* ListCompAppend.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
@@ -1777,6 +2006,7 @@ static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
 #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
 #endif
 
+/* StringJoin.proto */
 #if PY_MAJOR_VERSION < 3
 #define __Pyx_PyString_Join __Pyx_PyBytes_Join
 #define __Pyx_PyBaseString_Join(s, v) (PyUnicode_CheckExact(s) ? PyUnicode_Join(s, v) : __Pyx_PyBytes_Join(s, v))
@@ -1794,22 +2024,33 @@ static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
 static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values);
 #endif
 
+/* append.proto */
 static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x);
 
+/* dict_getitem_default.proto */
 static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value);
 
+/* PyObjectCallMethod0.proto */
 static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
 
-#define __Pyx_PyObject_Pop(L) (PyList_CheckExact(L) ? \
-    __Pyx_PyList_Pop(L) : __Pyx__PyObject_Pop(L))
-static CYTHON_INLINE PyObject* __Pyx_PyList_Pop(PyObject* L);
+/* pop.proto */
 static CYTHON_INLINE PyObject* __Pyx__PyObject_Pop(PyObject* L);
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyList_Pop(PyObject* L);
+#define __Pyx_PyObject_Pop(L) (likely(PyList_CheckExact(L)) ?\
+    __Pyx_PyList_Pop(L) : __Pyx__PyObject_Pop(L))
+#else
+#define __Pyx_PyList_Pop(L)  __Pyx__PyObject_Pop(L)
+#define __Pyx_PyObject_Pop(L)  __Pyx__PyObject_Pop(L)
+#endif
 
-static CYTHON_INLINE int __Pyx_PyDict_Contains(PyObject* item, PyObject* dict, int eq) {
+/* PyDictContains.proto */
+static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) {
     int result = PyDict_Contains(dict, item);
     return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
 }
 
+/* DictGetItem.proto */
 #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     PyObject *value;
@@ -1830,6 +2071,7 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
 #endif
 
+/* PyObjectLookupSpecial.proto */
 #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
 static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) {
     PyObject *res;
@@ -1855,13 +2097,15 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObj
 #define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
 #endif
 
-#define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) \
+/* SliceObject.proto */
+#define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)\
     __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)
 static CYTHON_INLINE int __Pyx_PyObject_SetSlice(
         PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop,
         PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
         int has_cstart, int has_cstop, int wraparound);
 
+/* SliceTupleAndList.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
 static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
@@ -1870,33 +2114,40 @@ static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t
 #define __Pyx_PyTuple_GetSlice(seq, start, stop)  PySequence_GetSlice(seq, start, stop)
 #endif
 
+/* GetModuleGlobalName.proto */
 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);
 
+/* py_dict_clear.proto */
 #define __Pyx_PyDict_Clear(d) (PyDict_Clear(d), 0)
 
+/* SetVTable.proto */
 static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
+/* 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);
 
+/* FetchCommonType.proto */
 static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
 
+/* CythonFunction.proto */
 #define __Pyx_CyFunction_USED 1
 #include <structmember.h>
 #define __Pyx_CYFUNCTION_STATICMETHOD  0x01
 #define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
 #define __Pyx_CYFUNCTION_CCLASS        0x04
-#define __Pyx_CyFunction_GetClosure(f) \
+#define __Pyx_CyFunction_GetClosure(f)\
     (((__pyx_CyFunctionObject *) (f))->func_closure)
-#define __Pyx_CyFunction_GetClassObj(f) \
+#define __Pyx_CyFunction_GetClassObj(f)\
     (((__pyx_CyFunctionObject *) (f))->func_classobj)
-#define __Pyx_CyFunction_Defaults(type, f) \
+#define __Pyx_CyFunction_Defaults(type, f)\
     ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
-#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \
+#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
     ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
 typedef struct {
     PyCFunctionObject func;
@@ -1920,7 +2171,7 @@ typedef struct {
     PyObject *func_annotations;
 } __pyx_CyFunctionObject;
 static PyTypeObject *__pyx_CyFunctionType = 0;
-#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \
+#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\
     __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code)
 static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml,
                                       int flags, PyObject* qualname,
@@ -1936,10 +2187,12 @@ static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
                                                              PyObject *dict);
 static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
                                                               PyObject *dict);
-static int __Pyx_CyFunction_init(void);
+static int __pyx_CyFunction_init(void);
 
+/* GetNameInClass.proto */
 static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name);
 
+/* PyIdentifierFromString.proto */
 #if !defined(__Pyx_PyIdentifier_FromString)
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
@@ -1948,14 +2201,17 @@ static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name);
 #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;
@@ -1967,49 +2223,269 @@ 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 CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
-
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_InsertMode(InsertMode value);
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value);
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ScatterMode(ScatterMode value);
 
-static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *);
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NormType(NormType value);
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscViewerFormat(PetscViewerFormat value);
 
-static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *);
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscFileMode(PetscFileMode value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ISGlobalToLocalMappingType(ISGlobalToLocalMappingType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_VecOption(VecOption value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatOption(MatOption value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatAssemblyType(MatAssemblyType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatInfoType(MatInfoType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatStructure(MatStructure value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatFactorShiftType(MatFactorShiftType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatSORType(MatSORType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCSide(PCSide value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCASMType(PCASMType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCGASMType(PCGASMType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCMGType(PCMGType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCCompositeType(PCCompositeType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCFieldSplitSchurPreType(PCFieldSplitSchurPreType value);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCFieldSplitSchurFactType(PCFieldSplitSchurFactType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_KSPNormType(KSPNormType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_KSPConvergedReason(KSPConvergedReason value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SNESNormSchedule(SNESNormSchedule value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SNESConvergedReason(SNESConvergedReason value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSProblemType(TSProblemType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSEquationType(TSEquationType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSExactFinalTimeOption(TSExactFinalTimeOption value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSConvergedReason(TSConvergedReason value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TaoConvergedReason(TaoConvergedReason value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMBoundaryType(DMBoundaryType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAStencilType(DMDAStencilType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAInterpolationType(DMDAInterpolationType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAElementType(DMDAElementType 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);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscBool(PetscBool value);
+
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscLogStage(PetscLogStage value);
 
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscClassId(PetscClassId value);
 
 static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s);
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscLogEvent(PetscLogEvent value);
 
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value);
 
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value);
 
+static PyObject* __pyx_convert__to_py_MatInfo(MatInfo s);
+/* 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 InsertMode __Pyx_PyInt_As_InsertMode(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE ScatterMode __Pyx_PyInt_As_ScatterMode(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PetscFileMode __Pyx_PyInt_As_PetscFileMode(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE MatStructure __Pyx_PyInt_As_MatStructure(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE MatAssemblyType __Pyx_PyInt_As_MatAssemblyType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE MatInfoType __Pyx_PyInt_As_MatInfoType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE MatFactorShiftType __Pyx_PyInt_As_MatFactorShiftType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE KSPConvergedReason __Pyx_PyInt_As_KSPConvergedReason(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE SNESConvergedReason __Pyx_PyInt_As_SNESConvergedReason(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE TaoConvergedReason __Pyx_PyInt_As_TaoConvergedReason(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE DMBoundaryType __Pyx_PyInt_As_DMBoundaryType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE DMDAStencilType __Pyx_PyInt_As_DMDAStencilType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE DMDAInterpolationType __Pyx_PyInt_As_DMDAInterpolationType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE DMDAElementType __Pyx_PyInt_As_DMDAElementType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PetscViewerFormat __Pyx_PyInt_As_PetscViewerFormat(PyObject *);
+
+/* CIntFromPy.proto */
 static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE PetscBool __Pyx_PyInt_As_PetscBool(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE ISGlobalToLocalMappingType __Pyx_PyInt_As_ISGlobalToLocalMappingType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE VecOption __Pyx_PyInt_As_VecOption(PyObject *);
+
+/* CIntFromPy.proto */
 static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);
 
-#include "descrobject.h"
-static PyObject* __Pyx_Method_ClassMethod(PyObject *method);
+/* CIntFromPy.proto */
+static CYTHON_INLINE NormType __Pyx_PyInt_As_NormType(PyObject *);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE MatOption __Pyx_PyInt_As_MatOption(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PCASMType __Pyx_PyInt_As_PCASMType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PCGASMType __Pyx_PyInt_As_PCGASMType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PCCompositeType __Pyx_PyInt_As_PCCompositeType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PCFieldSplitSchurFactType __Pyx_PyInt_As_PCFieldSplitSchurFactType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PCFieldSplitSchurPreType __Pyx_PyInt_As_PCFieldSplitSchurPreType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PCMGType __Pyx_PyInt_As_PCMGType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PCSide __Pyx_PyInt_As_PCSide(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE KSPNormType __Pyx_PyInt_As_KSPNormType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE SNESNormSchedule __Pyx_PyInt_As_SNESNormSchedule(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE TSProblemType __Pyx_PyInt_As_TSProblemType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE TSEquationType __Pyx_PyInt_As_TSEquationType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE TSExactFinalTimeOption __Pyx_PyInt_As_TSExactFinalTimeOption(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE TSConvergedReason __Pyx_PyInt_As_TSConvergedReason(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);
 
+/* InitStrings.proto */
 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
 
 static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self); /* proto*/
@@ -2075,6 +2551,7 @@ static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_DMPlex = 0;
 static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_DMComposite = 0;
 static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_DMShell = 0;
 static PyObject *__pyx_v_8petsc4py_5PETSc_PetscError = 0;
+static PyObject *__pyx_v_8petsc4py_5PETSc_citations_registry = 0;
 static PyObject *__pyx_v_8petsc4py_5PETSc_stage_registry = 0;
 static PyObject *__pyx_v_8petsc4py_5PETSc_class_registry = 0;
 static PyObject *__pyx_v_8petsc4py_5PETSc_event_registry = 0;
@@ -2088,8 +2565,8 @@ static int __pyx_v_8petsc4py_5PETSc_PyPetsc_Argc;
 static char **__pyx_v_8petsc4py_5PETSc_PyPetsc_Argv;
 static int __pyx_v_8petsc4py_5PETSc_registercalled;
 static char const *__pyx_v_8petsc4py_5PETSc_citation;
-static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int, PyObject *); /*proto*/
-static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int, PyTypeObject *); /*proto*/
+static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int); /*proto*/
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_bytes2str(const char *); /*proto*/
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_str2bytes(PyObject *, const char **); /*proto*/
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_S_(const char *); /*proto*/
@@ -2125,13 +2602,13 @@ static CYTHON_INLINE InsertMode __pyx_f_8petsc4py_5PETSc_insertmode(PyObject *);
 static CYTHON_INLINE ScatterMode __pyx_f_8petsc4py_5PETSc_scattermode(PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *, struct __pyx_opt_args_8petsc4py_5PETSc_getprefix *__pyx_optional_args); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_opt2str(const char *, const char *); /*proto*/
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(const char *, const char *, PyObject *); /*proto*/
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(const char *, const char *, PyObject *); /*proto*/
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(const char *, const char *, PyObject *); /*proto*/
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(const char *, const char *, PyObject *); /*proto*/
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(const char *, const char *, PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(PetscOptions, const char *, const char *, PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(PetscOptions, const char *, const char *, PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(PetscOptions, const char *, const char *, PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(PetscOptions, const char *, const char *, PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(PetscOptions, const char *, const char *, PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *, PyObject *, const char **, const char **); /*proto*/
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt(enum __pyx_t_8petsc4py_5PETSc_PetscOptType, PyObject *, PyObject *, PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt(PetscOptions, enum __pyx_t_8petsc4py_5PETSc_PetscOptType, PyObject *, PyObject *, PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_gettok(PyObject *); /*proto*/
@@ -2157,8 +2634,8 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject, int); /*pr
 static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject, char *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject, char *, PyObject *); /*proto*/
 static CYTHON_INLINE long __pyx_f_8petsc4py_5PETSc_Object_toFortran(PetscObject); /*proto*/
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM); /*proto*/
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(PetscObject); /*proto*/
+static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM); /*proto*/
+static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(PetscObject); /*proto*/
 static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *); /*proto*/
 static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS); /*proto*/
 static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGMap(ISLocalToGlobalMapping); /*proto*/
@@ -2210,6 +2687,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rmul(struct PyPetsc
 static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rdiv(struct PyPetscMatObject *, PyObject *); /*proto*/
 static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject *); /*proto*/
 static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObject *); /*proto*/
+static CYTHON_INLINE MatInfoType __pyx_f_8petsc4py_5PETSc_infotype(PyObject *); /*proto*/
 static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *, PyObject *, PetscInt *, PetscInt *, PetscInt *, PetscInt *, PetscInt *, PetscInt *); /*proto*/
 static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char*, PyObject *, PyObject *, PyObject *, Mat *); /*proto*/
 static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat, PyObject *); /*proto*/
@@ -2230,6 +2708,8 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat, struct __pyx_o
 static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(KSP); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP, PetscInt, PetscReal, KSPConvergedReason *, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP, PetscInt, PetscReal, void *); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP, Vec, void *); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP, Mat, Mat, void *); /*proto*/
 static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES(SNES); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES, Vec, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES, Vec, Vec, void *); /*proto*/
@@ -2286,6 +2766,9 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM, MPI_Comm, DM *); /*proto*
 static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM, DM, Mat *, Vec *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM, DM, Mat *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM, PetscInt *, char ***, IS **, DM **); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM, PetscInt, PetscInt *, IS *, DM *); /*proto*/
+static PetscBool __pyx_f_8petsc4py_5PETSc_get_citation(PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_set_citation(PyObject *, int); /*proto*/
 static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_get_LogStage(PyObject *); /*proto*/
 static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_reg_LogStage(PyObject *, PetscLogStage); /*proto*/
 static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_get_LogClass(PyObject *); /*proto*/
@@ -2317,6 +2800,8 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscVec_New(Vec); /*proto*/
 static Vec __pyx_f_8petsc4py_5PETSc_PyPetscVec_Get(PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscScatter_New(VecScatter); /*proto*/
 static VecScatter __pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get(PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSection_New(PetscSection); /*proto*/
+static PetscSection __pyx_f_8petsc4py_5PETSc_PyPetscSection_Get(PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscMat_New(Mat); /*proto*/
 static Mat __pyx_f_8petsc4py_5PETSc_PyPetscMat_Get(PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPC_New(PC); /*proto*/
@@ -2327,6 +2812,8 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New(SNES); /*proto*/
 static SNES __pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get(PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscTS_New(TS); /*proto*/
 static TS __pyx_f_8petsc4py_5PETSc_PyPetscTS_Get(PyObject *); /*proto*/
+static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscTAO_New(Tao); /*proto*/
+static Tao __pyx_f_8petsc4py_5PETSc_PyPetscTAO_Get(PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscAO_New(AO); /*proto*/
 static AO __pyx_f_8petsc4py_5PETSc_PyPetscAO_Get(PyObject *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscDM_New(DM); /*proto*/
@@ -2357,2899 +2844,1383 @@ static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_NotImplemented;
 static PyObject *__pyx_builtin_AttributeError;
 static PyObject *__pyx_builtin_MemoryError;
-static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_4__getbuffer__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_6__releasebuffer__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_buffer *__pyx_v_view); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_8__enter__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_10__exit__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-#if PY_MAJOR_VERSION < 3
-static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /* proto */
-#endif
-#if PY_MAJOR_VERSION < 3
-static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_14__getreadbuffer__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /* proto */
-#endif
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____get__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec, int __pyx_v_readonly); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_4__getbuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_6__releasebuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_buffer *__pyx_v_view); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_8__enter__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_10__exit__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-#if PY_MAJOR_VERSION < 3
-static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /* proto */
-#endif
-#if PY_MAJOR_VERSION < 3
-static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_14__getreadbuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /* proto */
-#endif
-#if PY_MAJOR_VERSION < 3
-static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_16__getwritebuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /* proto */
-#endif
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface_____get__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gvec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_2__enter__(struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1i___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1j___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1k___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1c___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5field___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self, struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_da, struct PyPetscVecObject *__pyx_v_vec, int __pyx_v_DOF); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_2__getitem__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_4__setitem__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_6__enter__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_8__exit__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_6starts___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_5sizes___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_5shape___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_7strides___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_5array___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm, struct PyPetscVecObject *__pyx_v_gvec, PyObject *__pyx_v_locs); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_4__enter__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_6__exit__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_ierr); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_2__nonzero__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_4__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_7Options___init__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_7Options_2__contains__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_4__getitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_7Options_6__setitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_7Options_8__delitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6prefix___get__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_2__set__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_4__del__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_10setFromOptions(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_12prefixPush(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_14prefixPop(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16hasName(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_22getBool(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_24getInt(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_26getReal(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_28getScalar(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_30getString(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_32getAll(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_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_8petsc4py_5PETSc_3Sys_2getVersionInfo(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_seconds); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_errhandler); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_klass); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_6begin(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_all); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_10destroy(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_flops); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_flops); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_18getTime(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogStage___cinit__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_2__int__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4__enter__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6__exit__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_8push(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_10pop(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_12getName(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4name___get__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogStage_4name_2__set__(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_14activate(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_16deactivate(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_20setActive(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6active___get__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogStage_6active_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_24setVisible(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_7visible___get__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogStage_7visible_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_2id___get__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogClass___cinit__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2__int__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4getName(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4name___get__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogClass_4name_2__set__(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6activate(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_8deactivate(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_10getActive(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_12setActive(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6active___get__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogClass_6active_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2id___get__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogEvent___cinit__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2__int__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4__enter__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6__exit__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_8begin(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_objs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10end(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_objs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_12barrierBegin(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, struct PyPetscCommObject *__pyx_v_comm, PyObject *__pyx_v_objs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_14barrierEnd(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, struct PyPetscCommObject *__pyx_v_comm, PyObject *__pyx_v_objs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_16getName(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4name___get__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_4name_2__set__(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_18activate(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_20deactivate(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_22getActive(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_24setActive(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6active___get__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_6active_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_26setActiveAll(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all___get__(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28getPerfInfo(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_stage); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2id___get__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4Comm___cinit__(struct PyPetscCommObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_4Comm_2__dealloc__(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4Comm_6__nonzero__(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_8destroy(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_10duplicate(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_12getSize(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_14getRank(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_16barrier(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4size___get__(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4rank___get__(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_7fortran___get__(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_18tompi4py(struct PyPetscCommObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Object___cinit__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_6Object_2__dealloc__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Object_6__nonzero__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetscObjectObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_memo); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_12view(struct PyPetscObjectObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_14destroy(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_16getType(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_18setOptionsPrefix(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_20getOptionsPrefix(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_22setFromOptions(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, struct PyPetscObjectObject *__pyx_v_obj); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_attr); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48getDict(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_tab, struct PyPetscObjectObject *__pyx_v_parent); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Object_4type_2__set__(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Object_6prefix_2__set__(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Object_4name_2__set__(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7fortran___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(struct PyPetscViewerObject *__pyx_v_self, struct PyPetscObjectObject *__pyx_v_obj); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_obj); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_6destroy(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_format, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_format, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_format, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_display, PyObject *__pyx_v_title, PyObject *__pyx_v_position, PyObject *__pyx_v_size, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_vwr_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28setFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30getFormat(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32pushFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34popFormat(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDOUT(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38STDERR(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40ASCII(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42BINARY(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44DRAW(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46flush(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48setFileMode(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50getFileMode(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52setFileName(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54getFileName(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_display, PyObject *__pyx_v_title, PyObject *__pyx_v_position, PyObject *__pyx_v_size); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_58clearDraw(struct PyPetscViewerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_4setTimestep(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self, PyObject *__pyx_v_timestep); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_timestep); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self, PyObject *__pyx_v_group); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_10popGroup(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_12getGroup(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Random___cinit__(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_2__call__(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4view(struct PyPetscRandomObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_6destroy(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8create(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_10setType(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_rnd_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_12getType(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_14setFromOptions(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_16getValue(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_18getValueReal(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_20getSeed(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_22setSeed(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_seed); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_interval); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4seed___get__(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Random_4seed_2__set__(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8interval___get__(struct PyPetscRandomObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_6Random_8interval_2__set__(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2IS___cinit__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2IS_2__getbuffer__(struct PyPetscISObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(CYTHON_UNUSED struct PyPetscISObject *__pyx_v_self, Py_buffer *__pyx_v_view); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6__enter__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8__exit__(struct PyPetscISObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10view(struct PyPetscISObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_12destroy(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_14create(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_16setType(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_is_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_18getType(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_bsize, PyObject *__pyx_v_indices, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_first, PyObject *__pyx_v_step, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_26duplicate(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_32allGather(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_34toGeneral(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_36invertPermutation(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_nlocal); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_38getSize(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_40getLocalSize(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_44getBlockSize(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_46setBlockSize(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_bs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_48sort(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_52setPermutation(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_56setIdentity(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_60equal(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_68difference(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_nmin, PyObject *__pyx_v_nmax); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_drop); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_74setIndices(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_indices); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_78setBlockIndices(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_bsize, PyObject *__pyx_v_indices); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_82setStride(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_first, PyObject *__pyx_v_step); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_86getInfo(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_11permutation___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8identity___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6sorted___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5sizes___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_4size___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10local_size___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10block_size___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_7indices___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5array___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_19__array_interface_____get__(struct PyPetscISObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_2__call__(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf, PyObject *__pyx_v_start); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_map_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_map_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_info___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Vec___cinit__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_2__pos__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4__neg__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6__abs__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8__iadd__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10__isub__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12__imul__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_14__idiv__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#endif
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_16__itruediv__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_18__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_20__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_22__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_24__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#endif
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_26__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_28__getitem__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Vec_30__setitem__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_v); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Vec_32__getbuffer__(struct PyPetscVecObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, Py_buffer *__pyx_v_view); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_36__enter__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_38__exit__(struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_40view(struct PyPetscVecObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_42destroy(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_44create(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_46setType(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vec_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_array, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts, PyObject *__pyx_v_array, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_isets, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_64setOptionsPrefix(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_66getOptionsPrefix(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_68setFromOptions(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_70setUp(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_72setOption(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_option, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_74getType(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_76getSize(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_78getLocalSize(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_82setBlockSize(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_bsize); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_84getBlockSize(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_86getOwnershipRange(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_90getBuffer(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_readonly); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_92getArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_readonly); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_94setArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_array); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_array); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_98resetArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_force); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_handle); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_array); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108load(struct PyPetscVecObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110equal(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112dot(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dotBegin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotEnd(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118tDot(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDotBegin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotEnd(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_124mDot(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_126mDotBegin(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_128mDotEnd(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_130mtDot(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_132mtDotBegin(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_134mtDotEnd(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138normBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142sum(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148normalize(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_150reciprocal(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_152exp(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_154log(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_156sqrtabs(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_158abs(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_160conjugate(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162setRandom(struct PyPetscVecObject *__pyx_v_self, struct PyPetscRandomObject *__pyx_v_random); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164permute(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_order, PyObject *__pyx_v_invert); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166zeroEntries(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_168set(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170isset(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_idx, PyObject *__pyx_v_alpha); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_172scale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_174shift(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_176swap(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178axpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_180isaxpy(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_idx, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_182aypx(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_184axpby(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_186waxpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alphas, PyObject *__pyx_v_vecs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_190pointwiseMult(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192pointwiseDivide(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseMax(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMaxAbs(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202getValue(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204getValues(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206setValue(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_208setValues(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValuesBlocked(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_212setLGMap(struct PyPetscVecObject *__pyx_v_self, struct PyPetscLGMapObject *__pyx_v_lgmap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValueLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_216setValuesLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValuesBlockedLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220assemblyBegin(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222assemblyEnd(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemble(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226strideScale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_alpha); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228strideSum(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_norm_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideScatter(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideGather(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240localForm(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242ghostUpdateBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244ghostUpdateEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdate(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248setMPIGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250getSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252restoreSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_sx, PyObject *__pyx_v_idxm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Vec_5sizes_2__set__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_r___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_r___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6buffer___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5array___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Vec_5array_2__set__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_19__array_interface_____get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_7Scatter___cinit__(struct PyPetscScatterObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_2__call__(struct PyPetscScatterObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_4view(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_6destroy(struct PyPetscScatterObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscISObject *__pyx_v_is_from, struct PyPetscVecObject *__pyx_v_vec_to, struct PyPetscISObject *__pyx_v_is_to); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_10copy(struct PyPetscScatterObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyObject *__pyx_v_cls, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyObject *__pyx_v_cls, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_18end(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_7Section___cinit__(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_7Section_2__dealloc__(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_4view(struct PyPetscSectionObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_6destroy(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_8create(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_10clone(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_12setUp(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_14reset(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_16getNumFields(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_18setNumFields(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_numFields); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_20getFieldName(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_22setFieldName(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_fieldName); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_24getFieldComponents(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_26setFieldComponents(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_numComp); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_28getChart(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_30setChart(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_pStart, PyObject *__pyx_v_pEnd); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_32getDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_34setDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_numDof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_36addDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_numDof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_38getFieldDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_40setFieldDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_numDof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_42addFieldDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_numDof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_44getConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_46setConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_numDof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_48addConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_numDof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_50getFieldConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_52setFieldConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_numDof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_54addFieldConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_numDof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_56getConstraintIndices(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_58setConstraintIndices(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_indices); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_62setFieldConstraintIndices(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_indices); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_64getMaxDof(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_66getStorageSize(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_68getConstrainedStorageSize(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_70getOffset(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_72setOffset(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_offset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_74getOffsetRange(struct PyPetscSectionObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct PyPetscSectionObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_2__pos__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4__neg__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_6__iadd__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_8__isub__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10__imul__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12__idiv__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#endif
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_14__itruediv__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#endif
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_26__getitem__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ij); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Mat_28__setitem__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ij, PyObject *__pyx_v_v); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_34destroy(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_38setType(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mat_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_42setBlockSize(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_bsize); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_44setBlockSizes(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row_bsize, PyObject *__pyx_v_col_bsize); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_nnz, PyObject *__pyx_v_csr, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_nnz, PyObject *__pyx_v_csr, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_nnz, PyObject *__pyx_v_csr, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_nnz, PyObject *__pyx_v_csr, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_nnz); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_csr); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_csr, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_array, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_array); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMatObject *__pyx_v_self, struct PyPetscScatterObject *__pyx_v_scatter, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_U, struct PyPetscMatObject *__pyx_v_V); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mats, PyObject *__pyx_v_isrows, PyObject *__pyx_v_iscols, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_78setPythonContext(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_80getPythonContext(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_82setPythonType(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_84setOptionsPrefix(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_86getOptionsPrefix(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_88setFromOptions(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_90setUp(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_92setOption(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_option, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_94getType(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_96getSize(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_98getLocalSize(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_102getBlockSize(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_104getBlockSizes(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_106getOwnershipRange(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_114getOwnershipIS(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_copy); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_structure); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120load(struct PyPetscMatObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mat_type, struct PyPetscMatObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132permute(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_row, struct PyPetscISObject *__pyx_v_col); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134equal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_tol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isSymmetric(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isHermitian(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_148zeroEntries(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150getValue(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValues(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_symmetric, PyObject *__pyx_v_compressed); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_symmetric, PyObject *__pyx_v_compressed); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162setValue(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_164setValues(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_166setValuesRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesBlocked(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlockedRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setLGMap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscLGMapObject *__pyx_v_rmap, struct PyPetscLGMapObject *__pyx_v_cmap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setValueLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValuesLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocalRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesBlockedLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocalRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_starts, PyObject *__pyx_v_dof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setValueStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueBlockedStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212storeValues(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214retrieveValues(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216assemblyBegin(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyEnd(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemble(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222isAssembled(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_side); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecRight(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecLeft(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230getColumnVector(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_column, struct PyPetscVecObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRowSum(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236setDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_diag, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_L, struct PyPetscVecObject *__pyx_v_R); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242setNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244getNullSpace(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNearNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNearNullSpace(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250mult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252multAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254multTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256multTransposeAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258multHermitian(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260multHermitianAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262SOR(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x, PyObject *__pyx_v_omega, PyObject *__pyx_v_sortype, PyObject *__pyx_v_shift, PyObject *__pyx_v_its, PyObject *__pyx_v_lits); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264getDiagonalBlock(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266increaseOverlap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_overlap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272restoreLocalSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276scale(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278shift(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280chop(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282axpy(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscMatObject *__pyx_v_X, PyObject *__pyx_v_structure); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284aypx(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscMatObject *__pyx_v_X, PyObject *__pyx_v_structure); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_fill); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288matMultNumeric(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ord_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_atol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300factorLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302factorSymbolicLU(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isrow, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_iscol, CYTHON_UNUSED PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304factorNumericLU(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat, CYTHON_UNUSED PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_306factorILU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicILU(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isrow, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_iscol, CYTHON_UNUSED PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310factorCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_312factorSymbolicCholesky(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isperm, CYTHON_UNUSED PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorNumericCholesky(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat, CYTHON_UNUSED PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_316factorICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicICC(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isperm, CYTHON_UNUSED PyObject *__pyx_v_options); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322setUnfactored(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324solveForward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326solveBackward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328solve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330solveTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332solveAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_y, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334solveTransposeAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_y, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336matSolve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_B, struct PyPetscMatObject *__pyx_v_X); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3Mat_5sizes_2__set__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_2__call__(struct PyPetscNullSpaceObject *__pyx_v_self, PyObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSpaceObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_6destroy(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNullSpaceObject *__pyx_v_self, PyObject *__pyx_v_constant, PyObject *__pyx_v_vectors, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct PyPetscNullSpaceObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_coords); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPetscNullSpaceObject *__pyx_v_self, PyObject *__pyx_v_function, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_18getFunction(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_20remove(struct PyPetscNullSpaceObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_10setType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_pc_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_14setOptionsPrefix(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_18setFromOptions(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_P); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_26setUp(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_28reset(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_30setUpOnBlocks(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_32apply(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_34applyTranspose(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_36applySymmetricLeft(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_38applySymmetricRight(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_42setDM(struct PyPetscPCObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_coordinates); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_48setPythonContext(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_52setPythonType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_54setASMType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_asmtype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_56setASMOverlap(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_58setASMLocalSubdomains(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_nsd); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_60setASMTotalSubdomains(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_nsd); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_64setGASMType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_gasmtype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_66setGASMOverlap(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_68setGAMGType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_gamgtype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_70setGAMGLevels(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_levels); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_72setGAMGSmooths(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_smooths); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74setFactorSolverPackage(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_solver); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76getFactorSolverPackage(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ord_type, PyObject *__pyx_v_nzdiag, PyObject *__pyx_v_reuse); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setFactorPivot(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_zeropivot, PyObject *__pyx_v_inblocks); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_shift_type, PyObject *__pyx_v_amount); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setFactorLevels(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_levels); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86getFactorMatrix(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFieldSplitType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_fields); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_bsize, PyObject *__pyx_v_fields); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFieldSplitSchurFactType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ptype, struct PyPetscMatObject *__pyx_v_pre); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100setReusePreconditioner(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_102setCompositeType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104getCompositePC(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106addCompositePC(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_pc_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getKSP(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_110getMGLevels(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112getMGCoarseSolve(struct PyPetscPCObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setMGInterpolation(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116getMGInterpolation(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118setMGRestriction(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120getMGRestriction(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122setMGRScale(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rscale); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGRScale(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126getMGSmoother(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGSmootherDown(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGSmootherUp(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_132setMGCyclesOnLevel(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, PyObject *__pyx_v_ncycle); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134setMGRhs(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rhs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_136setMGX(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_138setMGR(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_r); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_b, PyObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6destroy(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_10setType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_ksp_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_14setOptionsPrefix(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_18setFromOptions(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_20setAppCtx(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_22getAppCtx(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_26setDM(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_P); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32getOperators(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setPC(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscPCObject *__pyx_v_pc); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getPC(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol, PyObject *__pyx_v_divtol, PyObject *__pyx_v_max_it); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getConvergenceTest(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46callConvergenceTest(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50getConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52logConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rnorm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56getMonitor(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58cancelMonitor(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60monitor(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_62setPCSide(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_side); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64getPCSide(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_66setNormType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_normtype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getNormType(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setUseFischerGuess(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_model, PyObject *__pyx_v_size); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_88setUp(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_90reset(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_92setUpOnBlocks(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_94solve(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_96solveTranspose(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_98setIterationNumber(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100getIterationNumber(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_102setResidualNorm(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rnorm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getResidualNorm(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_106setConvergedReason(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getConvergedReason(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110getRhs(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getSolution(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_right, PyObject *__pyx_v_left); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116buildSolution(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118buildResidual(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_r); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124setGMRESRestart(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_restart); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126createPython(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_128setPythonContext(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130getPythonContext(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_6appctx_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_2dm_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_op___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_pc___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4rtol___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_4rtol_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4atol___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_4atol_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6divtol___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_6divtol_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6max_it___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_6max_it_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_3its_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_4norm_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3KSP_6reason_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9iterating___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9converged___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8diverged___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES___cinit__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2view(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4destroy(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6create(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8setType(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_snes_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_10getType(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_12setOptionsPrefix(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_14getOptionsPrefix(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_16setFromOptions(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_18setAppCtx(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_20getAppCtx(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_22getDM(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_24setDM(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_26setFASInterpolation(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_28getFASInterpolation(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_30setFASRestriction(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_32getFASRestriction(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_34setFASInjection(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_36getFASInjection(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_38setFASRScale(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_levels, PyObject *__pyx_v_comms); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_42getFASLevels(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_44getFASCycleSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_46getFASCoarseSolve(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_48getFASSmoother(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_50getFASSmootherDown(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_52getFASSmootherUp(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_54getNPC(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_58setNPC(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscSNESObject *__pyx_v_snes); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_initialguess, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_62getInitialGuess(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_66getFunction(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_update, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_70getUpdate(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_74getJacobian(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_objective, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_78getObjective(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_80computeFunction(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol, PyObject *__pyx_v_stol, PyObject *__pyx_v_max_it); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_90setNormSchedule(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_normsched); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96getConvergenceTest(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_xnorm, PyObject *__pyx_v_ynorm, PyObject *__pyx_v_fnorm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_norm, PyObject *__pyx_v_linear_its); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reset); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110getMonitor(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112cancelMonitor(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_funcs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setUp(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_136reset(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscKSPObject *__pyx_v_ksp); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_targs, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_version, PyObject *__pyx_v_rtol_0, PyObject *__pyx_v_rtol_max, PyObject *__pyx_v_gamma, PyObject *__pyx_v_alpha, PyObject *__pyx_v_alpha2, PyObject *__pyx_v_threshold); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176getUseFD(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_178setVariableBounds(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setPythonContext(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6appctx___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_6appctx_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2dm___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_2dm_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3npc___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_3npc_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_sol___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_upd___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_rhs___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3ksp___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_3ksp_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4rtol___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_4rtol_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4atol___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_4atol_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4stol___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_4stol_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6max_it___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_6max_it_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3its___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_3its_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7history___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6reason___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_6reason_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9iterating___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9converged___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8diverged___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4destroy(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6create(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8setType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ts_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10getType(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setProblemType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ptype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getProblemType(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setEquationType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_eqtype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getEquationType(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setOptionsPrefix(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getOptionsPrefix(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setFromOptions(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26setAppCtx(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28getAppCtx(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34computeRHSFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36computeRHSFunctionLinear(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42getRHSFunction(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50computeIFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_imex); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52computeIJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, PyObject *__pyx_v_a, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_imex); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54getIFunction(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58setSolution(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getSolution(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62getSNES(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getKSP(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_68setDM(struct PyPetscTSObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_70setTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72getTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74getSolveTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76setInitialTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_initial_time, PyObject *__pyx_v_initial_time_step); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_78setTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_time_step); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getTimeStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setStepNumber(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step_number); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84getStepNumber(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86setMaxTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88getMaxTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90setMaxSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_steps); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92getMaxSteps(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time, PyObject *__pyx_v_max_steps); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getDuration(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getSNESIterations(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100getKSPIterations(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102setMaxStepRejections(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getStepRejections(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106setMaxSNESFailures(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getSNESFailures(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setErrorIfStepFails(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116setExactFinalTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_option); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setConvergedReason(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120getConvergedReason(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124getMonitor(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126cancelMonitor(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128monitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step, PyObject *__pyx_v_time, struct PyPetscVecObject *__pyx_v_u); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prestep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getPreStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_poststep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136getPostStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_138setUp(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140reset(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142step(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_144rollBack(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146solve(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148interpolate(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_u); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150createPython(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152setPythonContext(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154getPythonContext(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156setPythonType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158setTheta(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_theta); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160getTheta(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162setThetaEndpoint(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164getThetaEndpoint(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setAlphaRadius(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_radius); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_alpha_m, PyObject *__pyx_v_alpha_f, PyObject *__pyx_v_gamma); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170getAlphaParams(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_6appctx_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_2dm_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_12problem_type_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_13equation_type_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_4time_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_9time_step_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_11step_number_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_8max_time_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_9max_steps_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4rtol___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_4rtol_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4atol___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_4atol_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2TS_6reason_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9iterating___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9converged___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8diverged___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3TAO___cinit__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_3TAO_2__dealloc__(CYTHON_UNUSED struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4view(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6destroy(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8create(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_10setType(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_tao_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12getType(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_14setOptionsPrefix(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16getOptionsPrefix(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_18setFromOptions(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_20setUp(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_22setInitialTrustRegionRadius(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_radius); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_24setAppCtx(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_26getAppCtx(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_28setInitial(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_objective, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_separable, struct PyPetscVecObject *__pyx_v_O, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_gradient, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_objgrad, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_varbounds, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_constraints, struct PyPetscVecObject *__pyx_v_C, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_hessian, struct PyPetscMatObject *__pyx_v_H, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_state, struct PyPetscISObject *__pyx_v_design); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian_state, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, struct PyPetscMatObject *__pyx_v_I, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian_design, struct PyPetscMatObject *__pyx_v_J, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeObjective(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_54computeSeparableObjective(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeGradient(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeDualVariables(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_64computeConstraints(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_c); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeHessian(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_H, struct PyPetscMatObject *__pyx_v_P); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68computeJacobian(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_70setTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_fatol, PyObject *__pyx_v_frtol, PyObject *__pyx_v_gatol, PyObject *__pyx_v_grtol, PyObject *__pyx_v_gttol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_72getTolerances(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_74setObjectiveTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_fatol, PyObject *__pyx_v_frtol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_76getObjectiveTolerances(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78setGradientTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_gatol, PyObject *__pyx_v_grtol, PyObject *__pyx_v_gttol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80getGradientTolerances(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_catol, PyObject *__pyx_v_crtol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_88getConvergenceTest(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_90setConvergedReason(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getConvergedReason(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_96getMonitor(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_98cancelMonitor(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_100solve(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getSolution(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_104getGradient(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_106getVariableBounds(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_108getIterationNumber(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_110getObjectiveValue(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_112getGradientNorm(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_114getConstraintsNorm(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_116getConvergedReason(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_120getKSP(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6appctx___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3TAO_6appctx_2__set__(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3ksp___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ftol___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ftol_2__set__(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4gtol___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3TAO_4gtol_2__set__(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ctol___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ctol_2__set__(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3its___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5gnorm___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5cnorm___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8solution___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9objective___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8function___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8gradient___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6reason___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9iterating___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9converged___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8diverged___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2AO___cinit__(struct PyPetscAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_2view(struct PyPetscAOObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_4destroy(struct PyPetscAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_6createBasic(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_8createMemoryScalable(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_10createMapping(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_12getType(struct PyPetscAOObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_14app2petsc(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_indices); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_16petsc2app(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_indices); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2DM___cinit__(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_2view(struct PyPetscDMObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_4destroy(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_6create(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_8clone(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_10setType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_12getType(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_14getDimension(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_16setDimension(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dim); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_18setOptionsPrefix(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_20setFromOptions(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_22setUp(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_24setAppCtx(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_26getAppCtx(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_28getBlockSize(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_30setVecType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_vec_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_32createGlobalVec(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_34createLocalVec(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_36globalToLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg, struct PyPetscVecObject *__pyx_v_vl, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_38localToGlobal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl, struct PyPetscVecObject *__pyx_v_vg, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl, struct PyPetscVecObject *__pyx_v_vlg, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_mat_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_58createMat(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_62createInjection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_76setDefaultSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_84createDefaultSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_localsec, struct PyPetscSectionObject *__pyx_v_globalsec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(struct PyPetscDMObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_90setPointSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_dof, PyObject *__pyx_v_sizes, PyObject *__pyx_v_proc_sizes, PyObject *__pyx_v_boundary_type, PyObject *__pyx_v_stencil_type, PyObject *__pyx_v_stencil_width, int __pyx_v_setup, PyObject *__pyx_v_ownership_ranges, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_dof, PyObject *__pyx_v_boundary_type, PyObject *__pyx_v_stencil_type, PyObject *__pyx_v_stencil_width); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_4setDim(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_dim); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6getDim(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_8setDof(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_dof); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10getDof(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12setSizes(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_sizes); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_14getSizes(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_16setProcSizes(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_proc_sizes); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_18getProcSizes(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_20setBoundaryType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_boundary_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_22getBoundaryType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_24setStencilType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_stencil_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_26getStencilType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_28setStencilWidth(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_stencil_width); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_30getStencilWidth(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_32setStencil(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_stencil_type, PyObject *__pyx_v_stencil_width); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_34getStencil(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46getVecArray(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48setUniformCoordinates(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_xmin, PyObject *__pyx_v_xmax, PyObject *__pyx_v_ymin, PyObject *__pyx_v_ymax, PyObject *__pyx_v_zmin, PyObject *__pyx_v_zmax); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54createNaturalVec(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_56globalToNatural(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg, struct PyPetscVecObject *__pyx_v_vn, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_58naturalToGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vn, struct PyPetscVecObject *__pyx_v_vg, PyObject *__pyx_v_addv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getAO(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_64setRefinementFactor(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_refine_x, PyObject *__pyx_v_refine_y, PyObject *__pyx_v_refine_z); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66getRefinementFactor(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_68setInterpolationType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_interp_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getInterpolationType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setElementType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_elem_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getElementType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_elem_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dim___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dof___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_5sizes___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10proc_sizes___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13boundary_type___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7stencil___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12stencil_type___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_create(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_cells, PyObject *__pyx_v_coords, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_numcells, PyObject *__pyx_v_boundary_type, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cgid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_exoid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_hasLagrange, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_pStart, PyObject *__pyx_v_pEnd); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_cone, PyObject *__pyx_v_orientation); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_conePoint); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_coneOrientation); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_orientation); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_supp); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_50symmetrize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_52stratify(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_54orient(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60getNumLabels(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getLabelName(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64hasLabel(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66createLabel(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68removeLabel(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getLabelValue(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72setLabelValue(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_74clearLabelValue(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76getLabelSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_78getLabelIdIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setLabelOutput(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_output); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82getLabelOutput(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84getStratumSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86getStratumIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88clearLabelStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90getDepth(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getDepthStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94getHeightStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_useCone); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_p); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104generate(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_boundary, PyObject *__pyx_v_name, PyObject *__pyx_v_interpolate); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106setTriangleOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setTetGenOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_edges); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_faces); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_label); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116setAdjacencyUseCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useCone); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_118setAdjacencyUseClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useClosure); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_120getPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_124distributeOverlap(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_126createCoarsePointIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_numComp, PyObject *__pyx_v_numDof, PyObject *__pyx_v_bcField, PyObject *__pyx_v_bcComps, PyObject *__pyx_v_bcPoints, struct PyPetscISObject *__pyx_v_perm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_130setRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementUniform); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_134setRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementLimit); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_136getRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_138getOrdering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_otype); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscISObject *__pyx_v_perm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cell); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_create(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm, PyObject *__pyx_v_args); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_4getNumber(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gvec, PyObject *__pyx_v_lvecs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gvec, PyObject *__pyx_v_imode, PyObject *__pyx_v_lvecs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_14getLocalISs(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_18getAccess(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gvec, PyObject *__pyx_v_locs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_create(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_2setMatrix(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_4setGlobalVector(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_6setLocalVector(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscVecObject *__pyx_v_lv); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_gvec, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_lvec, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_14setGlobalToLocalVecScatter(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscScatterObject *__pyx_v_gtol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_18setLocalToGlobalVecScatter(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscScatterObject *__pyx_v_ltog); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_22setLocalToLocalVecScatter(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscScatterObject *__pyx_v_ltol); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_matrix, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_coarsen, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_refine, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_interpolation, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_injection, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecomposition(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_decomp, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_2SF___cinit__(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static void __pyx_pf_8petsc4py_5PETSc_2SF_2__dealloc__(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_4view(struct PyPetscSFObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_6destroy(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_8create(struct PyPetscSFObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_10setType(struct PyPetscSFObject *__pyx_v_self, PyObject *__pyx_v_sf_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_12getType(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_14setFromOptions(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_16setUp(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_18reset(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject *__pyx_v_self, PyObject *__pyx_v_nroots, PyObject *__pyx_v_nleaves, PyObject *__pyx_v_local, PyObject *__pyx_v_remote); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_24setRankOrder(struct PyPetscSFObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_26getMulti(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_28createInverse(struct PyPetscSFObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8petsc4py_5PETSc_11Partitioner___cinit__(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_2view(struct PyPetscPartitionerObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_4destroy(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_6create(struct PyPetscPartitionerObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_8setType(struct PyPetscPartitionerObject *__pyx_v_self, PyObject *__pyx_v_part_type); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_10getType(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_12setFromOptions(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_14setUp(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(struct PyPetscPartitionerObject *__pyx_v_self, PyObject *__pyx_v_numProcs, PyObject *__pyx_v_sizes, PyObject *__pyx_v_points); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Comm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Object(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Viewer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Random(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_IS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LGMap(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_SF(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Vec(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Scatter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Section(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Mat(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_NullSpace(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_PC(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_KSP(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_SNES(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_TS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_TAO(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_AO(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DM(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Partitioner(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc__IS_buffer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Vec_buffer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Vec_LocalForm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Mat_Stencil(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc__DMDA_Vec_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc__DMComposite_access(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Options(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Sys(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Log(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogStage(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogClass(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogEvent(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_ViewerHDF5(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DMDA(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DMPlex(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DMComposite(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DMShell(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static char __pyx_k_A[] = "A";
-static char __pyx_k_B[] = "B";
-static char __pyx_k_C[] = "C";
-static char __pyx_k_H[] = "H";
-static char __pyx_k_I[] = "I";
-static char __pyx_k_J[] = "J";
-static char __pyx_k_L[] = "L";
-static char __pyx_k_O[] = "O";
-static char __pyx_k_P[] = "P";
-static char __pyx_k_R[] = "R";
-static char __pyx_k_S[] = "S";
-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_a[] = "a";
-static char __pyx_k_b[] = "b";
-static char __pyx_k_c[] = "c";
-static char __pyx_k_f[] = "f";
-static char __pyx_k_g[] = "g";
-static char __pyx_k_l[] = "l";
-static char __pyx_k_n[] = "n";
-static char __pyx_k_p[] = "p";
-static char __pyx_k_r[] = "r";
-static char __pyx_k_s[] = "%s";
-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_AU[] = "AU";
-static char __pyx_k_BE[] = "BE";
-static char __pyx_k_CG[] = "CG";
-static char __pyx_k_CN[] = "CN";
-static char __pyx_k_CP[] = "CP";
-static char __pyx_k_CR[] = "CR";
-static char __pyx_k_DA[] = "DA";
-static char __pyx_k_FE[] = "FE";
-static char __pyx_k_GL[] = "GL";
-static char __pyx_k_IS[] = "IS";
-static char __pyx_k_LU[] = "LU";
-static char __pyx_k_MG[] = "MG";
-static char __pyx_k_ML[] = "ML";
-static char __pyx_k_MS[] = "MS";
-static char __pyx_k_N1[] = "N1";
-static char __pyx_k_N2[] = "N2";
-static char __pyx_k_ND[] = "ND";
-static char __pyx_k_NM[] = "NM";
-static char __pyx_k_NN[] = "NN";
-static char __pyx_k_NO[] = "NO";
-static char __pyx_k_NZ[] = "NZ";
-static char __pyx_k_P1[] = "P1";
-static char __pyx_k_PD[] = "PD";
-static char __pyx_k_Q0[] = "Q0";
-static char __pyx_k_Q1[] = "Q1";
-static char __pyx_k_QN[] = "QN";
-static char __pyx_k_RK[] = "RK";
-static char __pyx_k_UA[] = "UA";
-static char __pyx_k_VU[] = "VU";
-static char __pyx_k__2[] = " ";
-static char __pyx_k__5[] = "-";
-static char __pyx_k_au[] = "au";
-static char __pyx_k_bs[] = "bs";
-static char __pyx_k_da[] = "da";
-static char __pyx_k_dm[] = "dm";
-static char __pyx_k_dt[] = "dt";
-static char __pyx_k_gv[] = "gv";
-static char __pyx_k_lv[] = "lv";
-static char __pyx_k_na[] = "na";
-static char __pyx_k_p1[] = "p1";
-static char __pyx_k_pc[] = "pc";
-static char __pyx_k_pd[] = "pd";
-static char __pyx_k_q0[] = "q0";
-static char __pyx_k_q1[] = "q1";
-static char __pyx_k_sf[] = "sf";
-static char __pyx_k_sx[] = "sx";
-static char __pyx_k_ua[] = "ua";
-static char __pyx_k_vg[] = "vg";
-static char __pyx_k_vl[] = "vl";
-static char __pyx_k_vn[] = "vn";
-static char __pyx_k_xl[] = "xl";
-static char __pyx_k_xu[] = "xu";
-static char __pyx_k_A11[] = "A11";
-static char __pyx_k_ADD[] = "ADD";
-static char __pyx_k_AGG[] = "AGG";
-static char __pyx_k_AIJ[] = "AIJ";
-static char __pyx_k_AMD[] = "AMD";
-static char __pyx_k_ASM[] = "ASM";
-static char __pyx_k_BOX[] = "BOX";
-static char __pyx_k_CGS[] = "CGS";
-static char __pyx_k_DOF[] = "DOF";
-static char __pyx_k_Dup[] = "Dup";
-static char __pyx_k_FAS[] = "FAS";
-static char __pyx_k_FFT[] = "FFT";
-static char __pyx_k_FRB[] = "FRB";
-static char __pyx_k_GCR[] = "GCR";
-static char __pyx_k_GEO[] = "GEO";
-static char __pyx_k_ICC[] = "ICC";
-static char __pyx_k_ILU[] = "ILU";
-static char __pyx_k_INF[] = "INF";
-static char __pyx_k_IPM[] = "IPM";
-static char __pyx_k_KSP[] = "KSP";
-static char __pyx_k_LCD[] = "LCD";
-static char __pyx_k_LCL[] = "LCL";
-static char __pyx_k_LRC[] = "LRC";
-static char __pyx_k_LSC[] = "LSC";
-static char __pyx_k_MAT[] = "MAT";
-static char __pyx_k_MAX[] = "MAX";
-static char __pyx_k_MPI[] = "MPI";
-static char __pyx_k_N12[] = "N12";
-static char __pyx_k_NCG[] = "NCG";
-static char __pyx_k_NGS[] = "NGS";
-static char __pyx_k_NLS[] = "NLS";
-static char __pyx_k_NTL[] = "NTL";
-static char __pyx_k_NTR[] = "NTR";
-static char __pyx_k_OWD[] = "OWD";
-static char __pyx_k_QCG[] = "QCG";
-static char __pyx_k_QMD[] = "QMD";
-static char __pyx_k_RCM[] = "RCM";
-static char __pyx_k_SEQ[] = "SEQ";
-static char __pyx_k_SOR[] = "SOR";
-static char __pyx_k_SPD[] = "SPD";
-static char __pyx_k_SSP[] = "SSP";
-static char __pyx_k_SVD[] = "SVD";
-static char __pyx_k_TFS[] = "TFS";
-static char __pyx_k_VTK[] = "VTK";
-static char __pyx_k__10[] = "";
-static char __pyx_k__32[] = "\n";
-static char __pyx_k_a_2[] = "a+";
-static char __pyx_k_all[] = "all";
-static char __pyx_k_app[] = "app";
-static char __pyx_k_box[] = "box";
-static char __pyx_k_c_d[] = "=%c%d";
-static char __pyx_k_col[] = "col";
-static char __pyx_k_csr[] = "csr";
-static char __pyx_k_d_s[] = "[%*d] %s";
-static char __pyx_k_dim[] = "dim";
-static char __pyx_k_doc[] = "__doc__";
-static char __pyx_k_dof[] = "dof";
-static char __pyx_k_end[] = "end";
-static char __pyx_k_get[] = "get";
-static char __pyx_k_idx[] = "idx";
-static char __pyx_k_its[] = "its";
-static char __pyx_k_ksp[] = "ksp";
-static char __pyx_k_mat[] = "mat";
-static char __pyx_k_nnz[] = "nnz";
-static char __pyx_k_nsd[] = "nsd";
-static char __pyx_k_nsp[] = "nsp";
-static char __pyx_k_obj[] = "obj";
-static char __pyx_k_out[] = "out";
-static char __pyx_k_pop[] = "pop";
-static char __pyx_k_pre[] = "pre";
-static char __pyx_k_r_2[] = "r+";
-static char __pyx_k_rhs[] = "rhs";
-static char __pyx_k_row[] = "row";
-static char __pyx_k_s_s[] = "-%s%s";
-static char __pyx_k_sec[] = "sec";
-static char __pyx_k_sep[] = "sep";
-static char __pyx_k_str[] = "__str__";
-static char __pyx_k_tab[] = "tab";
-static char __pyx_k_tol[] = "tol";
-static char __pyx_k_vec[] = "vec";
-static char __pyx_k_vlg[] = "vlg";
-static char __pyx_k_w_2[] = "w+";
-static char __pyx_k_BAIJ[] = "BAIJ";
-static char __pyx_k_BCGS[] = "BCGS";
-static char __pyx_k_BDDC[] = "BDDC";
-static char __pyx_k_BFBT[] = "BFBT";
-static char __pyx_k_BICG[] = "BICG";
-static char __pyx_k_BMRM[] = "BMRM";
-static char __pyx_k_CGNE[] = "CGNE";
-static char __pyx_k_CUSP[] = "CUSP";
-static char __pyx_k_DAAD[] = "DAAD";
-static char __pyx_k_DIAG[] = "DIAG";
-static char __pyx_k_DRAW[] = "DRAW";
-static char __pyx_k_DROP[] = "DROP";
-static char __pyx_k_FFTW[] = "FFTW";
-static char __pyx_k_FULL[] = "FULL";
-static char __pyx_k_Free[] = "Free";
-static char __pyx_k_GAMG[] = "GAMG";
-static char __pyx_k_GASM[] = "GASM";
-static char __pyx_k_GLTR[] = "GLTR";
-static char __pyx_k_GPCG[] = "GPCG";
-static char __pyx_k_HALF[] = "HALF";
-static char __pyx_k_HDF5[] = "HDF5";
-static char __pyx_k_LEFT[] = "LEFT";
-static char __pyx_k_LMVM[] = "LMVM";
-static char __pyx_k_LSQR[] = "LSQR";
-static char __pyx_k_Left[] = "Left";
-static char __pyx_k_MAIJ[] = "MAIJ";
-static char __pyx_k_MASK[] = "MASK";
-static char __pyx_k_MFFD[] = "MFFD";
-static char __pyx_k_MOAB[] = "MOAB";
-static char __pyx_k_Mode[] = "Mode";
-static char __pyx_k_NASH[] = "NASH";
-static char __pyx_k_NASM[] = "NASM";
-static char __pyx_k_NEST[] = "NEST";
-static char __pyx_k_NONE[] = "NONE";
-static char __pyx_k_PFMG[] = "PFMG";
-static char __pyx_k_PLEX[] = "PLEX";
-static char __pyx_k_RAND[] = "RAND";
-static char __pyx_k_READ[] = "READ";
-static char __pyx_k_ROSW[] = "ROSW";
-static char __pyx_k_SAME[] = "SAME";
-static char __pyx_k_SAWS[] = "SAWS";
-static char __pyx_k_SELF[] = "SELF";
-static char __pyx_k_SPAI[] = "SPAI";
-static char __pyx_k_STAR[] = "STAR";
-static char __pyx_k_STCG[] = "STCG";
-static char __pyx_k_Side[] = "Side";
-static char __pyx_k_Size[] = "Size";
-static char __pyx_k_TEST[] = "TEST";
-static char __pyx_k_TRON[] = "TRON";
-static char __pyx_k_Type[] = "Type";
-static char __pyx_k_USER[] = "USER";
-static char __pyx_k_addv[] = "addv";
-static char __pyx_k_args[] = "args";
-static char __pyx_k_atol[] = "atol";
-static char __pyx_k_attr[] = "attr";
-static char __pyx_k_axpy[] = "axpy";
-static char __pyx_k_beta[] = "beta";
-static char __pyx_k_cell[] = "cell";
-static char __pyx_k_cgid[] = "cgid";
-static char __pyx_k_cmap[] = "cmap";
-static char __pyx_k_cols[] = "cols";
-static char __pyx_k_comm[] = "comm";
-static char __pyx_k_cone[] = "cone";
-static char __pyx_k_copy[] = "copy";
-static char __pyx_k_data[] = "data";
-static char __pyx_k_date[] = "date";
-static char __pyx_k_diag[] = "diag";
-static char __pyx_k_dims[] = "dims";
-static char __pyx_k_drop[] = "drop";
-static char __pyx_k_exit[] = "__exit__";
-static char __pyx_k_fill[] = "fill";
-static char __pyx_k_flag[] = "flag";
-static char __pyx_k_gtol[] = "gtol";
-static char __pyx_k_gvec[] = "gvec";
-static char __pyx_k_idxm[] = "idxm";
-static char __pyx_k_ierr[] = "ierr";
-static char __pyx_k_imag[] = "imag";
-static char __pyx_k_imex[] = "imex";
-static char __pyx_k_init[] = "__init__";
-static char __pyx_k_iset[] = "iset";
-static char __pyx_k_join[] = "join";
-static char __pyx_k_keys[] = "keys";
-static char __pyx_k_kind[] = "kind";
-static char __pyx_k_left[] = "left";
-static char __pyx_k_lits[] = "lits";
-static char __pyx_k_locs[] = "locs";
-static char __pyx_k_ltog[] = "ltog";
-static char __pyx_k_ltol[] = "ltol";
-static char __pyx_k_main[] = "__main__";
-static char __pyx_k_mats[] = "mats";
-static char __pyx_k_memo[] = "memo";
-static char __pyx_k_mode[] = "mode";
-static char __pyx_k_mult[] = "mult";
-static char __pyx_k_name[] = "name";
-static char __pyx_k_nmax[] = "nmax";
-static char __pyx_k_nmin[] = "nmin";
-static char __pyx_k_none[] = "none";
-static char __pyx_k_norm[] = "norm";
-static char __pyx_k_opts[] = "opts";
-static char __pyx_k_pEnd[] = "pEnd";
-static char __pyx_k_perm[] = "perm";
-static char __pyx_k_plex[] = "plex";
-static char __pyx_k_push[] = "push";
-static char __pyx_k_rank[] = "rank";
-static char __pyx_k_real[] = "real";
-static char __pyx_k_repr[] = "__repr__";
-static char __pyx_k_rmap[] = "rmap";
-static char __pyx_k_rows[] = "rows";
-static char __pyx_k_rtol[] = "rtol";
-static char __pyx_k_seed[] = "seed";
-static char __pyx_k_self[] = "self";
-static char __pyx_k_side[] = "side";
-static char __pyx_k_size[] = "size";
-static char __pyx_k_snes[] = "snes";
-static char __pyx_k_star[] = "star";
-static char __pyx_k_step[] = "step";
-static char __pyx_k_stol[] = "stol";
-static char __pyx_k_stop[] = "stop";
-static char __pyx_k_supp[] = "supp";
-static char __pyx_k_time[] = "time";
-static char __pyx_k_vecs[] = "vecs";
-static char __pyx_k_view[] = "view";
-static char __pyx_k_xdot[] = "xdot";
-static char __pyx_k_xmax[] = "xmax";
-static char __pyx_k_xmin[] = "xmin";
-static char __pyx_k_ymax[] = "ymax";
-static char __pyx_k_ymin[] = "ymin";
-static char __pyx_k_zmax[] = "zmax";
-static char __pyx_k_zmin[] = "zmin";
-static char __pyx_k_ALPHA[] = "ALPHA";
-static char __pyx_k_ASCII[] = "ASCII";
-static char __pyx_k_ASFLS[] = "ASFLS";
-static char __pyx_k_ASILS[] = "ASILS";
-static char __pyx_k_ASPIN[] = "ASPIN";
-static char __pyx_k_BASIC[] = "BASIC";
-static char __pyx_k_BCGSL[] = "BCGSL";
-static char __pyx_k_BLMVM[] = "BLMVM";
-static char __pyx_k_BLOCK[] = "BLOCK";
-static char __pyx_k_BQPIP[] = "BQPIP";
-static char __pyx_k_BSTRM[] = "BSTRM";
-static char __pyx_k_CHACO[] = "CHACO";
-static char __pyx_k_Class[] = "Class";
-static char __pyx_k_Clone[] = "Clone";
-static char __pyx_k_DENSE[] = "DENSE";
-static char __pyx_k_EIMEX[] = "EIMEX";
-static char __pyx_k_EULER[] = "EULER";
-static char __pyx_k_Error[] = "Error";
-static char __pyx_k_Event[] = "Event";
-static char __pyx_k_FBCGS[] = "FBCGS";
-static char __pyx_k_FINAL[] = "FINAL";
-static char __pyx_k_FLUSH[] = "FLUSH";
-static char __pyx_k_GMRES[] = "GMRES";
-static char __pyx_k_HYPRE[] = "HYPRE";
-static char __pyx_k_IBCGS[] = "IBCGS";
-static char __pyx_k_LOWER[] = "LOWER";
-static char __pyx_k_OWLQN[] = "OWLQN";
-static char __pyx_k_PARMS[] = "PARMS";
-static char __pyx_k_PATCH[] = "PATCH";
-static char __pyx_k_Print[] = "Print";
-static char __pyx_k_RIGHT[] = "RIGHT";
-static char __pyx_k_Right[] = "Right";
-static char __pyx_k_SBAIJ[] = "SBAIJ";
-static char __pyx_k_SCHUR[] = "SCHUR";
-static char __pyx_k_SELFP[] = "SELFP";
-static char __pyx_k_SHELL[] = "SHELL";
-static char __pyx_k_SPRNG[] = "SPRNG";
-static char __pyx_k_SSFLS[] = "SSFLS";
-static char __pyx_k_SSILS[] = "SSILS";
-static char __pyx_k_Stage[] = "Stage";
-static char __pyx_k_TCQMR[] = "TCQMR";
-static char __pyx_k_TFQMR[] = "TFQMR";
-static char __pyx_k_THETA[] = "THETA";
-static char __pyx_k_THIRD[] = "THIRD";
-static char __pyx_k_TWIST[] = "TWIST";
-static char __pyx_k_UPPER[] = "UPPER";
-static char __pyx_k_WRITE[] = "WRITE";
-static char __pyx_k_abort[] = "abort";
-static char __pyx_k_alpha[] = "alpha";
-static char __pyx_k_apply[] = "apply";
-static char __pyx_k_array[] = "array";
-static char __pyx_k_begin[] = "begin";
-static char __pyx_k_bsize[] = "bsize";
-static char __pyx_k_catol[] = "catol";
-static char __pyx_k_cells[] = "cells";
-static char __pyx_k_comms[] = "comms";
-static char __pyx_k_count[] = "count";
-static char __pyx_k_crank[] = "crank";
-static char __pyx_k_crtol[] = "crtol";
-static char __pyx_k_csize[] = "csize";
-static char __pyx_k_csr_2[] = "__csr__";
-static char __pyx_k_ctype[] = "ctype";
-static char __pyx_k_devel[] = "devel";
-static char __pyx_k_dtcol[] = "dtcol";
-static char __pyx_k_edges[] = "edges";
-static char __pyx_k_emacs[] = "emacs";
-static char __pyx_k_enter[] = "__enter__";
-static char __pyx_k_entry[] = "entry";
-static char __pyx_k_exoid[] = "exoid";
-static char __pyx_k_faces[] = "faces";
-static char __pyx_k_fatol[] = "fatol";
-static char __pyx_k_field[] = "field";
-static char __pyx_k_first[] = "first";
-static char __pyx_k_flops[] = "flops";
-static char __pyx_k_flush[] = "flush";
-static char __pyx_k_fnorm[] = "fnorm";
-static char __pyx_k_force[] = "force";
-static char __pyx_k_frtol[] = "frtol";
-static char __pyx_k_gamma[] = "gamma";
-static char __pyx_k_gatol[] = "gatol";
-static char __pyx_k_getDM[] = "getDM";
-static char __pyx_k_getPC[] = "getPC";
-static char __pyx_k_group[] = "group";
-static char __pyx_k_grtol[] = "grtol";
-static char __pyx_k_gttol[] = "gttol";
-static char __pyx_k_imode[] = "imode";
-static char __pyx_k_index[] = "index";
-static char __pyx_k_is_to[] = "is_to";
-static char __pyx_k_iscol[] = "iscol";
-static char __pyx_k_isets[] = "isets";
-static char __pyx_k_isrow[] = "isrow";
-static char __pyx_k_kargs[] = "kargs";
-static char __pyx_k_klass[] = "klass";
-static char __pyx_k_label[] = "label";
-static char __pyx_k_level[] = "level";
-static char __pyx_k_lgmap[] = "lgmap";
-static char __pyx_k_local[] = "local";
-static char __pyx_k_lower[] = "lower";
-static char __pyx_k_lvecs[] = "lvecs";
-static char __pyx_k_major[] = "major";
-static char __pyx_k_minor[] = "minor";
-static char __pyx_k_model[] = "model";
-static char __pyx_k_omega[] = "omega";
-static char __pyx_k_order[] = "order";
-static char __pyx_k_otype[] = "otype";
-static char __pyx_k_patch[] = "patch";
-static char __pyx_k_petsc[] = "petsc";
-static char __pyx_k_point[] = "point";
-static char __pyx_k_ptype[] = "ptype";
-static char __pyx_k_range[] = "range";
-static char __pyx_k_ready[] = "ready";
-static char __pyx_k_reset[] = "reset";
-static char __pyx_k_reuse[] = "reuse";
-static char __pyx_k_right[] = "right";
-static char __pyx_k_rnorm[] = "rnorm";
-static char __pyx_k_scale[] = "scale";
-static char __pyx_k_setDM[] = "setDM";
-static char __pyx_k_setup[] = "setup";
-static char __pyx_k_shape[] = "shape";
-static char __pyx_k_shell[] = "shell";
-static char __pyx_k_shift[] = "shift";
-static char __pyx_k_sizes[] = "sizes";
-static char __pyx_k_sleep[] = "sleep";
-static char __pyx_k_solve[] = "solve";
-static char __pyx_k_split[] = "split";
-static char __pyx_k_stage[] = "stage";
-static char __pyx_k_start[] = "start";
-static char __pyx_k_state[] = "state";
-static char __pyx_k_strip[] = "strip";
-static char __pyx_k_theta[] = "theta";
-static char __pyx_k_title[] = "title";
-static char __pyx_k_toAll[] = "toAll";
-static char __pyx_k_twist[] = "twist";
-static char __pyx_k_upper[] = "upper";
-static char __pyx_k_value[] = "value";
-static char __pyx_k_width[] = "width";
-static char __pyx_k_xnorm[] = "xnorm";
-static char __pyx_k_ynorm[] = "ynorm";
-static char __pyx_k_ADD_BC[] = "ADD_BC";
-static char __pyx_k_AIJCRL[] = "AIJCRL";
-static char __pyx_k_ALWAYS[] = "ALWAYS";
-static char __pyx_k_AOType[] = "AOType";
-static char __pyx_k_APPEND[] = "APPEND";
-static char __pyx_k_BEULER[] = "BEULER";
-static char __pyx_k_BINARY[] = "BINARY";
-static char __pyx_k_DECIDE[] = "DECIDE";
-static char __pyx_k_DGMRES[] = "DGMRES";
-static char __pyx_k_DMType[] = "DMType";
-static char __pyx_k_EXOTIC[] = "EXOTIC";
-static char __pyx_k_FBCGSR[] = "FBCGSR";
-static char __pyx_k_FGMRES[] = "FGMRES";
-static char __pyx_k_Format[] = "Format";
-static char __pyx_k_INSERT[] = "INSERT";
-static char __pyx_k_ISType[] = "ISType";
-static char __pyx_k_JACOBI[] = "JACOBI";
-static char __pyx_k_LGMRES[] = "LGMRES";
-static char __pyx_k_LINEAR[] = "LINEAR";
-static char __pyx_k_MATLAB[] = "MATLAB";
-static char __pyx_k_MINRES[] = "MINRES";
-static char __pyx_k_MIRROR[] = "MIRROR";
-static char __pyx_k_MPIADJ[] = "MPIADJ";
-static char __pyx_k_MPIAIJ[] = "MPIAIJ";
-static char __pyx_k_NATIVE[] = "NATIVE";
-static char __pyx_k_NETCDF[] = "NETCDF";
-static char __pyx_k_NGMRES[] = "NGMRES";
-static char __pyx_k_NORMAL[] = "NORMAL";
-static char __pyx_k_NORM_1[] = "NORM_1";
-static char __pyx_k_NORM_2[] = "NORM_2";
-static char __pyx_k_Option[] = "Option";
-static char __pyx_k_PCSide[] = "PCSide";
-static char __pyx_k_PCType[] = "PCType";
-static char __pyx_k_PGMRES[] = "PGMRES";
-static char __pyx_k_PIPECG[] = "PIPECG";
-static char __pyx_k_PIPECR[] = "PIPECR";
-static char __pyx_k_PSEUDO[] = "PSEUDO";
-static char __pyx_k_PYTHON[] = "PYTHON";
-static char __pyx_k_RAND48[] = "RAND48";
-static char __pyx_k_Reason[] = "Reason";
-static char __pyx_k_SACUSP[] = "SACUSP";
-static char __pyx_k_SBSTRM[] = "SBSTRM";
-static char __pyx_k_SEQAIJ[] = "SEQAIJ";
-static char __pyx_k_SFType[] = "SFType";
-static char __pyx_k_SHARED[] = "SHARED";
-static char __pyx_k_SLICED[] = "SLICED";
-static char __pyx_k_SOCKET[] = "SOCKET";
-static char __pyx_k_STDERR[] = "STDERR";
-static char __pyx_k_STDOUT[] = "STDOUT";
-static char __pyx_k_STRIDE[] = "STRIDE";
-static char __pyx_k_STRING[] = "STRING";
-static char __pyx_k_SUBSET[] = "SUBSET";
-static char __pyx_k_SYMMLQ[] = "SYMMLQ";
-static char __pyx_k_TSType[] = "TSType";
-static char __pyx_k_UPDATE[] = "UPDATE";
-static char __pyx_k_WINDOW[] = "WINDOW";
-static char __pyx_k_alpha2[] = "alpha2";
-static char __pyx_k_alphas[] = "alphas";
-static char __pyx_k_amount[] = "amount";
-static char __pyx_k_appctx[] = "appctx";
-static char __pyx_k_append[] = "append";
-static char __pyx_k_author[] = "author";
-static char __pyx_k_buffer[] = "__buffer__";
-static char __pyx_k_column[] = "column";
-static char __pyx_k_coords[] = "coords";
-static char __pyx_k_decode[] = "decode";
-static char __pyx_k_decomp[] = "decomp";
-static char __pyx_k_design[] = "design";
-static char __pyx_k_divtol[] = "divtol";
-static char __pyx_k_encode[] = "encode";
-static char __pyx_k_eqtype[] = "eqtype";
-static char __pyx_k_format[] = "format";
-static char __pyx_k_getDim[] = "getDim";
-static char __pyx_k_getDof[] = "getDof";
-static char __pyx_k_getKSP[] = "getKSP";
-static char __pyx_k_getNPC[] = "getNPC";
-static char __pyx_k_getRhs[] = "getRhs";
-static char __pyx_k_ghosts[] = "ghosts";
-static char __pyx_k_handle[] = "handle";
-static char __pyx_k_ignore[] = "ignore";
-static char __pyx_k_import[] = "__import__";
-static char __pyx_k_insert[] = "insert";
-static char __pyx_k_invert[] = "invert";
-static char __pyx_k_iscols[] = "iscols";
-static char __pyx_k_isperm[] = "isperm";
-static char __pyx_k_isrows[] = "isrows";
-static char __pyx_k_length[] = "length";
-static char __pyx_k_levels[] = "levels";
-static char __pyx_k_max_it[] = "max_it";
-static char __pyx_k_mirror[] = "mirror";
-static char __pyx_k_module[] = "__module__";
-static char __pyx_k_mpi4py[] = "mpi4py";
-static char __pyx_k_name_2[] = "__name__";
-static char __pyx_k_ncycle[] = "ncycle";
-static char __pyx_k_nlocal[] = "nlocal";
-static char __pyx_k_nroots[] = "nroots";
-static char __pyx_k_numDof[] = "numDof";
-static char __pyx_k_nzdiag[] = "nzdiag";
-static char __pyx_k_object[] = "object";
-static char __pyx_k_offset[] = "offset";
-static char __pyx_k_option[] = "option";
-static char __pyx_k_output[] = "output";
-static char __pyx_k_pStart[] = "pStart";
-static char __pyx_k_parent[] = "parent";
-static char __pyx_k_points[] = "points";
-static char __pyx_k_prefix[] = "prefix";
-static char __pyx_k_python[] = "python";
-static char __pyx_k_radius[] = "radius";
-static char __pyx_k_random[] = "random";
-static char __pyx_k_reason[] = "reason";
-static char __pyx_k_refine[] = "__refine__";
-static char __pyx_k_remote[] = "remote";
-static char __pyx_k_remove[] = "remove";
-static char __pyx_k_result[] = "result";
-static char __pyx_k_rowmap[] = "rowmap";
-static char __pyx_k_rscale[] = "rscale";
-static char __pyx_k_rtol_0[] = "rtol_0";
-static char __pyx_k_setKSP[] = "setKSP";
-static char __pyx_k_setNPC[] = "setNPC";
-static char __pyx_k_solver[] = "solver";
-static char __pyx_k_starts[] = "starts";
-static char __pyx_k_submat[] = "submat";
-static char __pyx_k_subvec[] = "subvec";
-static char __pyx_k_svalue[] = "svalue";
-static char __pyx_k_tbline[] = "tbline";
-static char __pyx_k_tblist[] = "tblist";
-static char __pyx_k_toZero[] = "toZero";
-static char __pyx_k_update[] = "__update__";
-static char __pyx_k_values[] = "values";
-static char __pyx_k_vec_to[] = "vec_to";
-static char __pyx_k_viewer[] = "viewer";
-static char __pyx_k_ADD_ALL[] = "ADD_ALL";
-static char __pyx_k_AIJCUSP[] = "AIJCUSP";
-static char __pyx_k_AIJPERM[] = "AIJPERM";
-static char __pyx_k_ARKIMEX[] = "ARKIMEX";
-static char __pyx_k_ASMType[] = "ASMType";
-static char __pyx_k_BJACOBI[] = "BJACOBI";
-static char __pyx_k_Barrier[] = "Barrier";
-static char __pyx_k_DEFAULT[] = "DEFAULT";
-static char __pyx_k_DRAW_LG[] = "DRAW_LG";
-static char __pyx_k_FORWARD[] = "FORWARD";
-static char __pyx_k_GENERAL[] = "GENERAL";
-static char __pyx_k_GHOSTED[] = "GHOSTED";
-static char __pyx_k_GROPPCG[] = "GROPPCG";
-static char __pyx_k_IntType[] = "IntType";
-static char __pyx_k_KSPONLY[] = "KSPONLY";
-static char __pyx_k_KSPType[] = "KSPType";
-static char __pyx_k_MAPPING[] = "MAPPING";
-static char __pyx_k_MPIBAIJ[] = "MPIBAIJ";
-static char __pyx_k_MPICUSP[] = "MPICUSP";
-static char __pyx_k_MPIMAIJ[] = "MPIMAIJ";
-static char __pyx_k_MapType[] = "MapType";
-static char __pyx_k_MatType[] = "MatType";
-static char __pyx_k_NATURAL[] = "NATURAL";
-static char __pyx_k_NETWORK[] = "NETWORK";
-static char __pyx_k_NONZERO[] = "NONZERO";
-static char __pyx_k_PREONLY[] = "PREONLY";
-static char __pyx_k_PTHREAD[] = "PTHREAD";
-static char __pyx_k_QUARTER[] = "QUARTER";
-static char __pyx_k_REVERSE[] = "REVERSE";
-static char __pyx_k_SAME_NZ[] = "SAME_NZ";
-static char __pyx_k_SCATTER[] = "SCATTER";
-static char __pyx_k_SEQBAIJ[] = "SEQBAIJ";
-static char __pyx_k_SEQCUSP[] = "SEQCUSP";
-static char __pyx_k_SEQMAIJ[] = "SEQMAIJ";
-static char __pyx_k_SORType[] = "SORType";
-static char __pyx_k_SPECIAL[] = "SPECIAL";
-static char __pyx_k_SYSPFMG[] = "SYSPFMG";
-static char __pyx_k_Stencil[] = "Stencil";
-static char __pyx_k_TAOType[] = "TAOType";
-static char __pyx_k_VTK_VTR[] = "VTK_VTR";
-static char __pyx_k_VTK_VTS[] = "VTK_VTS";
-static char __pyx_k_VTK_VTU[] = "VTK_VTU";
-static char __pyx_k_VecType[] = "VecType";
-static char __pyx_k_alpha_f[] = "alpha_f";
-static char __pyx_k_alpha_m[] = "alpha_m";
-static char __pyx_k_array_2[] = "__array__";
-static char __pyx_k_array_w[] = "array_w";
-static char __pyx_k_asmtype[] = "asmtype";
-static char __pyx_k_barrier[] = "barrier";
-static char __pyx_k_bcComps[] = "bcComps";
-static char __pyx_k_bcField[] = "bcField";
-static char __pyx_k_coarsen[] = "__coarsen__";
-static char __pyx_k_conePos[] = "conePos";
-static char __pyx_k_context[] = "context";
-static char __pyx_k_default[] = "default";
-static char __pyx_k_destroy[] = "destroy";
-static char __pyx_k_display[] = "display";
-static char __pyx_k_dm_type[] = "dm_type";
-static char __pyx_k_dtcount[] = "dtcount";
-static char __pyx_k_forward[] = "forward";
-static char __pyx_k_g2l_end[] = "__g2l_end__";
-static char __pyx_k_getComm[] = "getComm";
-static char __pyx_k_getInfo[] = "getInfo";
-static char __pyx_k_getName[] = "getName";
-static char __pyx_k_getRank[] = "getRank";
-static char __pyx_k_getSNES[] = "getSNES";
-static char __pyx_k_getSeed[] = "getSeed";
-static char __pyx_k_getSize[] = "getSize";
-static char __pyx_k_getTime[] = "getTime";
-static char __pyx_k_getType[] = "getType";
-static char __pyx_k_getVecs[] = "getVecs";
-static char __pyx_k_ghosted[] = "ghosted";
-static char __pyx_k_hasName[] = "hasName";
-static char __pyx_k_hessian[] = "__hessian__";
-static char __pyx_k_history[] = "__history__";
-static char __pyx_k_indices[] = "indices";
-static char __pyx_k_is_from[] = "is_from";
-static char __pyx_k_is_type[] = "is_type";
-static char __pyx_k_l2g_end[] = "__l2g_end__";
-static char __pyx_k_l2l_end[] = "__l2l_end__";
-static char __pyx_k_matMult[] = "matMult";
-static char __pyx_k_monitor[] = "__monitor__";
-static char __pyx_k_nleaves[] = "nleaves";
-static char __pyx_k_nlevels[] = "nlevels";
-static char __pyx_k_nonzero[] = "nonzero";
-static char __pyx_k_numComp[] = "numComp";
-static char __pyx_k_objgrad[] = "__objgrad__";
-static char __pyx_k_options[] = "options";
-static char __pyx_k_overlap[] = "overlap";
-static char __pyx_k_pc_type[] = "pc_type";
-static char __pyx_k_prepare[] = "__prepare__";
-static char __pyx_k_prestep[] = "__prestep__";
-static char __pyx_k_py_type[] = "py_type";
-static char __pyx_k_release[] = "release";
-static char __pyx_k_replace[] = "replace";
-static char __pyx_k_restart[] = "restart";
-static char __pyx_k_reverse[] = "reverse";
-static char __pyx_k_scatter[] = "scatter";
-static char __pyx_k_seconds[] = "seconds";
-static char __pyx_k_setName[] = "setName";
-static char __pyx_k_setSeed[] = "setSeed";
-static char __pyx_k_setTime[] = "setTime";
-static char __pyx_k_setType[] = "setType";
-static char __pyx_k_sf_type[] = "sf_type";
-static char __pyx_k_smooths[] = "smooths";
-static char __pyx_k_sortype[] = "sortype";
-static char __pyx_k_strides[] = "strides";
-static char __pyx_k_ts_type[] = "ts_type";
-static char __pyx_k_typestr[] = "typestr";
-static char __pyx_k_useCone[] = "useCone";
-static char __pyx_k_vectors[] = "vectors";
-static char __pyx_k_version[] = "version";
-static char __pyx_k_ADDITIVE[] = "ADDITIVE";
-static char __pyx_k_ADVANCED[] = "ADVANCED";
-static char __pyx_k_AINVCUSP[] = "AINVCUSP";
-static char __pyx_k_ANDERSON[] = "ANDERSON";
-static char __pyx_k_BLOCKMAT[] = "BLOCKMAT";
-static char __pyx_k_CHOLESKY[] = "CHOLESKY";
-static char __pyx_k_DrawSize[] = "DrawSize";
-static char __pyx_k_EXPLICIT[] = "EXPLICIT";
-static char __pyx_k_Ellipsis[] = "Ellipsis";
-static char __pyx_k_FileMode[] = "FileMode";
-static char __pyx_k_GALERKIN[] = "GALERKIN";
-static char __pyx_k_GAMGType[] = "GAMGType";
-static char __pyx_k_GASMType[] = "GASMType";
-static char __pyx_k_Get_rank[] = "Get_rank";
-static char __pyx_k_Get_size[] = "Get_size";
-static char __pyx_k_HDF5_VIZ[] = "HDF5_VIZ";
-static char __pyx_k_IMPLICIT[] = "IMPLICIT";
-static char __pyx_k_INBLOCKS[] = "INBLOCKS";
-static char __pyx_k_INFINITY[] = "INFINITY";
-static char __pyx_k_KACZMARZ[] = "KACZMARZ";
-static char __pyx_k_KeyError[] = "KeyError";
-static char __pyx_k_LOCALREF[] = "LOCALREF";
-static char __pyx_k_MPIBSTRM[] = "MPIBSTRM";
-static char __pyx_k_MPIDENSE[] = "MPIDENSE";
-static char __pyx_k_MPISBAIJ[] = "MPISBAIJ";
-static char __pyx_k_NEWTONLS[] = "NEWTONLS";
-static char __pyx_k_NEWTONTR[] = "NEWTONTR";
-static char __pyx_k_NOFORMAT[] = "NOFORMAT";
-static char __pyx_k_NORM_MAX[] = "NORM_MAX";
-static char __pyx_k_NormType[] = "NormType";
-static char __pyx_k_PARMETIS[] = "PARMETIS";
-static char __pyx_k_PBJACOBI[] = "PBJACOBI";
-static char __pyx_k_PERIODIC[] = "PERIODIC";
-static char __pyx_k_POUNDERS[] = "POUNDERS";
-static char __pyx_k_RESTRICT[] = "RESTRICT";
-static char __pyx_k_RealType[] = "RealType";
-static char __pyx_k_SEQBSTRM[] = "SEQBSTRM";
-static char __pyx_k_SEQCUFFT[] = "SEQCUFFT";
-static char __pyx_k_SEQDENSE[] = "SEQDENSE";
-static char __pyx_k_SEQSBAIJ[] = "SEQSBAIJ";
-static char __pyx_k_SNESType[] = "SNESType";
-static char __pyx_k_STANDARD[] = "STANDARD";
-static char __pyx_k_STEPOVER[] = "STEPOVER";
-static char __pyx_k_SUNDIALS[] = "SUNDIALS";
-static char __pyx_k_VIENNACL[] = "VIENNACL";
-static char __pyx_k_addFlops[] = "addFlops";
-static char __pyx_k_appctx_2[] = "__appctx__";
-static char __pyx_k_assembly[] = "assembly";
-static char __pyx_k_bcPoints[] = "bcPoints";
-static char __pyx_k_boundary[] = "boundary";
-static char __pyx_k_buffer_w[] = "buffer_w";
-static char __pyx_k_constant[] = "constant";
-static char __pyx_k_debugger[] = "debugger";
-static char __pyx_k_delValue[] = "delValue";
-static char __pyx_k_end_args[] = "end_args";
-static char __pyx_k_filename[] = "filename";
-static char __pyx_k_finalize[] = "_finalize";
-static char __pyx_k_function[] = "__function__";
-static char __pyx_k_gamgtype[] = "gamgtype";
-static char __pyx_k_gasmtype[] = "gasmtype";
-static char __pyx_k_getArray[] = "getArray";
-static char __pyx_k_getFlops[] = "getFlops";
-static char __pyx_k_getSizes[] = "getSizes";
-static char __pyx_k_getUseEW[] = "getUseEW";
-static char __pyx_k_getUseFD[] = "getUseFD";
-static char __pyx_k_getUseMF[] = "getUseMF";
-static char __pyx_k_getValue[] = "getValue";
-static char __pyx_k_gradient[] = "__gradient__";
-static char __pyx_k_hasLabel[] = "hasLabel";
-static char __pyx_k_inblocks[] = "inblocks";
-static char __pyx_k_interval[] = "interval";
-static char __pyx_k_isSorted[] = "isSorted";
-static char __pyx_k_itemsize[] = "itemsize";
-static char __pyx_k_jacobian[] = "__jacobian__";
-static char __pyx_k_ksp_type[] = "ksp_type";
-static char __pyx_k_localsec[] = "localsec";
-static char __pyx_k_logFlops[] = "logFlops";
-static char __pyx_k_map_type[] = "map_type";
-static char __pyx_k_mat_type[] = "mat_type";
-static char __pyx_k_max_time[] = "max_time";
-static char __pyx_k_mpiabort[] = "mpiabort";
-static char __pyx_k_normtype[] = "normtype";
-static char __pyx_k_numProcs[] = "numProcs";
-static char __pyx_k_numcells[] = "numcells";
-static char __pyx_k_only_and[] = "only '==' and '!='";
-static char __pyx_k_ord_type[] = "ord_type";
-static char __pyx_k_periodic[] = "periodic";
-static char __pyx_k_position[] = "position";
-static char __pyx_k_poststep[] = "__poststep__";
-static char __pyx_k_qualname[] = "__qualname__";
-static char __pyx_k_readonly[] = "readonly";
-static char __pyx_k_refine_2[] = "refine";
-static char __pyx_k_refine_x[] = "refine_x";
-static char __pyx_k_refine_y[] = "refine_y";
-static char __pyx_k_refine_z[] = "refine_z";
-static char __pyx_k_rnd_type[] = "rnd_type";
-static char __pyx_k_rtol_max[] = "rtol_max";
-static char __pyx_k_setSizes[] = "setSizes";
-static char __pyx_k_setUseEW[] = "setUseEW";
-static char __pyx_k_setUseFD[] = "setUseFD";
-static char __pyx_k_setUseMF[] = "setUseMF";
-static char __pyx_k_setValue[] = "setValue";
-static char __pyx_k_subminor[] = "subminor";
-static char __pyx_k_tao_type[] = "tao_type";
-static char __pyx_k_timestep[] = "timestep";
-static char __pyx_k_update_2[] = "update";
-static char __pyx_k_vec_from[] = "vec_from";
-static char __pyx_k_vec_type[] = "vec_type";
-static char __pyx_k_vwr_type[] = "vwr_type";
-static char __pyx_k_ASCII_VTK[] = "ASCII_VTK";
-static char __pyx_k_CARTESIAN[] = "CARTESIAN";
-static char __pyx_k_CHEBYSHEV[] = "CHEBYSHEV";
-static char __pyx_k_CLASSICAL[] = "CLASSICAL";
-static char __pyx_k_COMM_NULL[] = "COMM_NULL";
-static char __pyx_k_COMM_SELF[] = "COMM_SELF";
-static char __pyx_k_COMPOSITE[] = "COMPOSITE";
-static char __pyx_k_DETERMINE[] = "DETERMINE";
-static char __pyx_k_DIFFERENT[] = "DIFFERENT";
-static char __pyx_k_EISENSTAT[] = "EISENSTAT";
-static char __pyx_k_ELEMENTAL[] = "ELEMENTAL";
-static char __pyx_k_FROBENIUS[] = "FROBENIUS";
-static char __pyx_k_FULL_SIZE[] = "FULL_SIZE";
-static char __pyx_k_GLMapType[] = "GLMapType";
-static char __pyx_k_HALF_SIZE[] = "HALF_SIZE";
-static char __pyx_k_HERMITIAN[] = "HERMITIAN";
-static char __pyx_k_INSERT_BC[] = "INSERT_BC";
-static char __pyx_k_ITERATING[] = "ITERATING";
-static char __pyx_k_MATCHSTEP[] = "MATCHSTEP";
-static char __pyx_k_MPIAIJCRL[] = "MPIAIJCRL";
-static char __pyx_k_MPISBSTRM[] = "MPISBSTRM";
-static char __pyx_k_MatOption[] = "MatOption";
-static char __pyx_k_NINFINITY[] = "NINFINITY";
-static char __pyx_k_NONLINEAR[] = "NONLINEAR";
-static char __pyx_k_NORM_NONE[] = "NORM_NONE";
-static char __pyx_k_PCASMType[] = "PCASMType";
-static char __pyx_k_PINFINITY[] = "PINFINITY";
-static char __pyx_k_REDUNDANT[] = "REDUNDANT";
-static char __pyx_k_ROWLENGTH[] = "ROWLENGTH";
-static char __pyx_k_SEQAIJCRL[] = "SEQAIJCRL";
-static char __pyx_k_SEQSBSTRM[] = "SEQSBSTRM";
-static char __pyx_k_SUBMATRIX[] = "SUBMATRIX";
-static char __pyx_k_SUBSET_NZ[] = "SUBSET_NZ";
-static char __pyx_k_SYMMETRIC[] = "SYMMETRIC";
-static char __pyx_k_Structure[] = "Structure";
-static char __pyx_k_TypeError[] = "TypeError";
-static char __pyx_k_VecOption[] = "VecOption";
-static char __pyx_k_coarsen_2[] = "coarsen";
-static char __pyx_k_col_bsize[] = "col_bsize";
-static char __pyx_k_composite[] = "composite";
-static char __pyx_k_conePoint[] = "conePoint";
-static char __pyx_k_converged[] = "__converged__";
-static char __pyx_k_createMat[] = "createMat";
-static char __pyx_k_duplicate[] = "duplicate";
-static char __pyx_k_elem_type[] = "elem_type";
-static char __pyx_k_end_kargs[] = "end_kargs";
-static char __pyx_k_enumerate[] = "enumerate";
-static char __pyx_k_fieldName[] = "fieldName";
-static char __pyx_k_g2l_begin[] = "__g2l_begin__";
-static char __pyx_k_getActive[] = "getActive";
-static char __pyx_k_getAppCtx[] = "getAppCtx";
-static char __pyx_k_getBuffer[] = "getBuffer";
-static char __pyx_k_getMatrix[] = "getMatrix";
-static char __pyx_k_getNumber[] = "getNumber";
-static char __pyx_k_getPCSide[] = "getPCSide";
-static char __pyx_k_getRanges[] = "getRanges";
-static char __pyx_k_getString[] = "getString";
-static char __pyx_k_globalsec[] = "globalsec";
-static char __pyx_k_hessian_2[] = "hessian";
-static char __pyx_k_ifunction[] = "__ifunction__";
-static char __pyx_k_ijacobian[] = "__ijacobian__";
-static char __pyx_k_l2g_begin[] = "__l2g_begin__";
-static char __pyx_k_l2l_begin[] = "__l2l_begin__";
-static char __pyx_k_max_fails[] = "max_fails";
-static char __pyx_k_max_funcs[] = "max_funcs";
-static char __pyx_k_max_steps[] = "max_steps";
-static char __pyx_k_metaclass[] = "__metaclass__";
-static char __pyx_k_monitor_2[] = "monitor";
-static char __pyx_k_nonzero_2[] = "__nonzero__";
-static char __pyx_k_norm_type[] = "norm_type";
-static char __pyx_k_normsched[] = "normsched";
-static char __pyx_k_numFields[] = "numFields";
-static char __pyx_k_objective[] = "__objective__";
-static char __pyx_k_objgrad_2[] = "objgrad";
-static char __pyx_k_part_type[] = "part_type";
-static char __pyx_k_prestep_2[] = "prestep";
-static char __pyx_k_row_bsize[] = "row_bsize";
-static char __pyx_k_separable[] = "__separable__";
-static char __pyx_k_sepobjvec[] = "@sepobjvec";
-static char __pyx_k_setActive[] = "setActive";
-static char __pyx_k_setAppCtx[] = "setAppCtx";
-static char __pyx_k_setPCSide[] = "setPCSide";
-static char __pyx_k_shifttype[] = "shifttype";
-static char __pyx_k_snes_type[] = "snes_type";
-static char __pyx_k_structure[] = "structure";
-static char __pyx_k_symmetric[] = "symmetric";
-static char __pyx_k_syncFlush[] = "syncFlush";
-static char __pyx_k_syncPrint[] = "syncPrint";
-static char __pyx_k_threshold[] = "threshold";
-static char __pyx_k_time_step[] = "time_step";
-static char __pyx_k_traceback[] = "_traceback_";
-static char __pyx_k_transpose[] = "transpose";
-static char __pyx_k_varbounds[] = "__varbounds__";
-static char __pyx_k_zeropivot[] = "zeropivot";
-static char __pyx_k_ADD_VALUES[] = "ADD_VALUES";
-static char __pyx_k_AIJPTHREAD[] = "AIJPTHREAD";
-static char __pyx_k_ASCII_IMPL[] = "ASCII_IMPL";
-static char __pyx_k_ASCII_INFO[] = "ASCII_INFO";
-static char __pyx_k_COMM_WORLD[] = "COMM_WORLD";
-static char __pyx_k_DRAW_BASIC[] = "DRAW_BASIC";
-static char __pyx_k_DRAW_PORTS[] = "DRAW_PORTS";
-static char __pyx_k_FIELDSPLIT[] = "FIELDSPLIT";
-static char __pyx_k_FINAL_ONLY[] = "FINAL_ONLY";
-static char __pyx_k_INSERT_ALL[] = "INSERT_ALL";
-static char __pyx_k_InsertMode[] = "InsertMode";
-static char __pyx_k_MAX_VALUES[] = "MAX_VALUES";
-static char __pyx_k_MPIAIJCUSP[] = "MPIAIJCUSP";
-static char __pyx_k_MPIAIJPERM[] = "MPIAIJPERM";
-static char __pyx_k_MPIPTHREAD[] = "MPIPTHREAD";
-static char __pyx_k_MatSORType[] = "MatSORType";
-static char __pyx_k_PCGAMGType[] = "PCGAMGType";
-static char __pyx_k_PCGASMType[] = "PCGASMType";
-static char __pyx_k_RICHARDSON[] = "RICHARDSON";
-static char __pyx_k_RandomType[] = "RandomType";
-static char __pyx_k_SACUSPPOLY[] = "SACUSPPOLY";
-static char __pyx_k_SEQAIJCUSP[] = "SEQAIJCUSP";
-static char __pyx_k_SEQAIJPERM[] = "SEQAIJPERM";
-static char __pyx_k_SEQPTHREAD[] = "SEQPTHREAD";
-static char __pyx_k_ScalarType[] = "ScalarType";
-static char __pyx_k_THIRD_SIZE[] = "THIRD_SIZE";
-static char __pyx_k_USE_INODES[] = "USE_INODES";
-static char __pyx_k_ValueError[] = "ValueError";
-static char __pyx_k_ViewerType[] = "ViewerType";
-static char __pyx_k_authorinfo[] = "authorinfo";
-static char __pyx_k_begin_args[] = "begin_args";
-static char __pyx_k_compressed[] = "compressed";
-static char __pyx_k_createVecs[] = "createVecs";
-static char __pyx_k_empty_name[] = "empty name";
-static char __pyx_k_errhandler[] = "errhandler";
-static char __pyx_k_function_2[] = "function";
-static char __pyx_k_getCPUTime[] = "getCPUTime";
-static char __pyx_k_getClassId[] = "getClassId";
-static char __pyx_k_getCorners[] = "getCorners";
-static char __pyx_k_getIndices[] = "getIndices";
-static char __pyx_k_getMaxTime[] = "getMaxTime";
-static char __pyx_k_getStencil[] = "getStencil";
-static char __pyx_k_getVecLeft[] = "getVecLeft";
-static char __pyx_k_getVersion[] = "getVersion";
-static char __pyx_k_getVisible[] = "getVisible";
-static char __pyx_k_gradient_2[] = "gradient";
-static char __pyx_k_initialize[] = "_initialize";
-static char __pyx_k_isIdentity[] = "isIdentity";
-static char __pyx_k_jacobian_2[] = "jacobian";
-static char __pyx_k_linear_its[] = "linear_its";
-static char __pyx_k_mpi4py_MPI[] = "mpi4py.MPI";
-static char __pyx_k_poststep_2[] = "poststep";
-static char __pyx_k_proc_sizes[] = "proc_sizes";
-static char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
-static char __pyx_k_reciprocal[] = "reciprocal";
-static char __pyx_k_setMaxTime[] = "setMaxTime";
-static char __pyx_k_setVisible[] = "setVisible";
-static char __pyx_k_shift_type[] = "shift_type";
-static char __pyx_k_startswith[] = "startswith";
-static char __pyx_k_useClosure[] = "useClosure";
-static char __pyx_k_AIJCUSPARSE[] = "AIJCUSPARSE";
-static char __pyx_k_AIJVIENNACL[] = "AIJVIENNACL";
-static char __pyx_k_APPLY_LOWER[] = "APPLY_LOWER";
-static char __pyx_k_APPLY_UPPER[] = "APPLY_UPPER";
-static char __pyx_k_ASCII_DENSE[] = "ASCII_DENSE";
-static char __pyx_k_ASCII_INDEX[] = "ASCII_INDEX";
-static char __pyx_k_ASCII_LATEX[] = "ASCII_LATEX";
-static char __pyx_k_ASCII_PCICE[] = "ASCII_PCICE";
-static char __pyx_k_ComplexType[] = "ComplexType";
-static char __pyx_k_ElementType[] = "ElementType";
-static char __pyx_k_Error___str[] = "Error.__str__";
-static char __pyx_k_HYPRESTRUCT[] = "HYPRESTRUCT";
-static char __pyx_k_INTERPOLATE[] = "INTERPOLATE";
-static char __pyx_k_KSPNormType[] = "KSPNormType";
-static char __pyx_k_MATHEMATICA[] = "MATHEMATICA";
-static char __pyx_k_MPIVIENNACL[] = "MPIVIENNACL";
-static char __pyx_k_MemoryError[] = "MemoryError";
-static char __pyx_k_NORM_ALWAYS[] = "NORM_ALWAYS";
-static char __pyx_k_NRICHARDSON[] = "NRICHARDSON";
-static char __pyx_k_ProblemType[] = "ProblemType";
-static char __pyx_k_RUNGE_KUTTA[] = "RUNGE_KUTTA";
-static char __pyx_k_SEQVIENNACL[] = "SEQVIENNACL";
-static char __pyx_k_ScatterMode[] = "ScatterMode";
-static char __pyx_k_StencilType[] = "StencilType";
-static char __pyx_k_SystemError[] = "SystemError";
-static char __pyx_k_UNSPECIFIED[] = "UNSPECIFIED";
-static char __pyx_k_begin_kargs[] = "begin_kargs";
-static char __pyx_k_constraints[] = "__constraints__";
-static char __pyx_k_converged_2[] = "converged";
-static char __pyx_k_coordinates[] = "coordinates";
-static char __pyx_k_createLabel[] = "createLabel";
-static char __pyx_k_create_gvec[] = "create_gvec";
-static char __pyx_k_create_lvec[] = "create_lvec";
-static char __pyx_k_getGradient[] = "getGradient";
-static char __pyx_k_getInterval[] = "getInterval";
-static char __pyx_k_getMaxSteps[] = "getMaxSteps";
-static char __pyx_k_getNormType[] = "getNormType";
-static char __pyx_k_getNumberDM[] = "getNumberDM";
-static char __pyx_k_getRefCount[] = "getRefCount";
-static char __pyx_k_getSolution[] = "getSolution";
-static char __pyx_k_getTimeStep[] = "getTimeStep";
-static char __pyx_k_getVecRight[] = "getVecRight";
-static char __pyx_k_hasLagrange[] = "hasLagrange";
-static char __pyx_k_interp_type[] = "interp_type";
-static char __pyx_k_interpolate[] = "interpolate";
-static char __pyx_k_isAssembled[] = "isAssembled";
-static char __pyx_k_isFinalized[] = "isFinalized";
-static char __pyx_k_isHermitian[] = "isHermitian";
-static char __pyx_k_isSymmetric[] = "isSymmetric";
-static char __pyx_k_numMessages[] = "numMessages";
-static char __pyx_k_objective_2[] = "objective";
-static char __pyx_k_orientation[] = "orientation";
-static char __pyx_k_rhsfunction[] = "__rhsfunction__";
-static char __pyx_k_rhsjacobian[] = "__rhsjacobian__";
-static char __pyx_k_separable_2[] = "separable";
-static char __pyx_k_setDiagonal[] = "setDiagonal";
-static char __pyx_k_setInterval[] = "setInterval";
-static char __pyx_k_setMaxSteps[] = "setMaxSteps";
-static char __pyx_k_setNormType[] = "setNormType";
-static char __pyx_k_setParamsEW[] = "setParamsEW";
-static char __pyx_k_setTimeStep[] = "setTimeStep";
-static char __pyx_k_shiftamount[] = "shiftamount";
-static char __pyx_k_step_number[] = "step_number";
-static char __pyx_k_traceback_2[] = "traceback";
-static char __pyx_k_varbounds_2[] = "varbounds";
-static char __pyx_k_ASCII_COMMON[] = "ASCII_COMMON";
-static char __pyx_k_ASCII_MATLAB[] = "ASCII_MATLAB";
-static char __pyx_k_ASCII_PYTHON[] = "ASCII_PYTHON";
-static char __pyx_k_AssemblyType[] = "AssemblyType";
-static char __pyx_k_BICGSTABCUSP[] = "BICGSTABCUSP";
-static char __pyx_k_BoundaryType[] = "BoundaryType";
-static char __pyx_k_DIFFERENT_NZ[] = "DIFFERENT_NZ";
-static char __pyx_k_DIVERGED_NAN[] = "DIVERGED_NAN";
-static char __pyx_k_DRAW_CONTOUR[] = "DRAW_CONTOUR";
-static char __pyx_k_EquationType[] = "EquationType";
-static char __pyx_k_Error___init[] = "Error.__init__";
-static char __pyx_k_Error___repr[] = "Error.__repr__";
-static char __pyx_k_HYPRESSTRUCT[] = "HYPRESSTRUCT";
-static char __pyx_k_INITIAL_ONLY[] = "INITIAL_ONLY";
-static char __pyx_k_MatStructure[] = "MatStructure";
-static char __pyx_k_NORM_1_AND_2[] = "NORM_1_AND_2";
-static char __pyx_k_NORM_DEFAULT[] = "NORM_DEFAULT";
-static char __pyx_k_NORM_NATURAL[] = "NORM_NATURAL";
-static char __pyx_k_NormSchedule[] = "NormSchedule";
-static char __pyx_k_ODE_EXPLICIT[] = "ODE_EXPLICIT";
-static char __pyx_k_ODE_IMPLICIT[] = "ODE_IMPLICIT";
-static char __pyx_k_OrderingType[] = "OrderingType";
-static char __pyx_k_QUARTER_SIZE[] = "QUARTER_SIZE";
-static char __pyx_k_REDISTRIBUTE[] = "REDISTRIBUTE";
-static char __pyx_k_ROW_ORIENTED[] = "ROW_ORIENTED";
-static char __pyx_k_RuntimeError[] = "RuntimeError";
-static char __pyx_k_SchurPreType[] = "SchurPreType";
-static char __pyx_k_TRANSPOSEMAT[] = "TRANSPOSEMAT";
-static char __pyx_k_VINEWTONRSLS[] = "VINEWTONRSLS";
-static char __pyx_k_VINEWTONSSLS[] = "VINEWTONSSLS";
-static char __pyx_k_ViewerFormat[] = "ViewerFormat";
-static char __pyx_k_createMatrix[] = "createMatrix";
-static char __pyx_k_error_code_d[] = "error code %d";
-static char __pyx_k_getBlockInfo[] = "getBlockInfo";
-static char __pyx_k_getBlockSize[] = "getBlockSize";
-static char __pyx_k_getClassName[] = "getClassName";
-static char __pyx_k_getDimension[] = "getDimension";
-static char __pyx_k_getLocalSize[] = "getLocalSize";
-static char __pyx_k_getOperators[] = "getOperators";
-static char __pyx_k_getProcSizes[] = "getProcSizes";
-static char __pyx_k_initial_time[] = "initial_time";
-static char __pyx_k_initialguess[] = "__initialguess__";
-static char __pyx_k_placed_array[] = "__placed_array__";
-static char __pyx_k_setActiveAll[] = "setActiveAll";
-static char __pyx_k_setDimension[] = "setDimension";
-static char __pyx_k_stencil_type[] = "stencil_type";
-static char __pyx_k_ADD_BC_VALUES[] = "ADD_BC_VALUES";
-static char __pyx_k_APPEND_UPDATE[] = "APPEND_UPDATE";
-static char __pyx_k_ASCII_SYMMODU[] = "ASCII_SYMMODU";
-static char __pyx_k_BINARY_MATLAB[] = "BINARY_MATLAB";
-static char __pyx_k_CONVERGED_ITS[] = "CONVERGED_ITS";
-static char __pyx_k_CompositeType[] = "CompositeType";
-static char __pyx_k_DIVERGED_DTOL[] = "DIVERGED_DTOL";
-static char __pyx_k_DIVERGED_NULL[] = "DIVERGED_NULL";
-static char __pyx_k_DIVERGED_USER[] = "DIVERGED_USER";
-static char __pyx_k_FORWARD_LOCAL[] = "FORWARD_LOCAL";
-static char __pyx_k_FORWARD_SWEEP[] = "FORWARD_SWEEP";
-static char __pyx_k_INSERT_VALUES[] = "INSERT_VALUES";
-static char __pyx_k_NEW_DIAGONALS[] = "NEW_DIAGONALS";
-static char __pyx_k_NORM_INFINITY[] = "NORM_INFINITY";
-static char __pyx_k_PETSc_Error_d[] = "PETSc.Error(%d)";
-static char __pyx_k_PyMPIComm_Get[] = "PyMPIComm_Get";
-static char __pyx_k_PyMPIComm_New[] = "PyMPIComm_New";
-static char __pyx_k_REVERSE_LOCAL[] = "REVERSE_LOCAL";
-static char __pyx_k_SCATTER_LOCAL[] = "SCATTER_LOCAL";
-static char __pyx_k_SEQAIJPTHREAD[] = "SEQAIJPTHREAD";
-static char __pyx_k_SchurFactType[] = "SchurFactType";
-static char __pyx_k_TSProblemType[] = "TSProblemType";
-static char __pyx_k_boundary_type[] = "boundary_type";
-static char __pyx_k_constraints_2[] = "constraints";
-static char __pyx_k_createVecLeft[] = "createVecLeft";
-static char __pyx_k_create_matrix[] = "__create_matrix__";
-static char __pyx_k_diagonalScale[] = "diagonalScale";
-static char __pyx_k_diagonal_fill[] = "diagonal_fill";
-static char __pyx_k_getBlockSizes[] = "getBlockSizes";
-static char __pyx_k_getStepNumber[] = "getStepNumber";
-static char __pyx_k_getTolerances[] = "getTolerances";
-static char __pyx_k_isInitialized[] = "isInitialized";
-static char __pyx_k_isPermutation[] = "isPermutation";
-static char __pyx_k_messageLength[] = "messageLength";
-static char __pyx_k_numReductions[] = "numReductions";
-static char __pyx_k_s_line_d_in_s[] = "%s() line %d in %s";
-static char __pyx_k_setStepNumber[] = "setStepNumber";
-static char __pyx_k_setTolerances[] = "setTolerances";
-static char __pyx_k_stencil_width[] = "stencil_width";
-static char __pyx_k_type_registry[] = "__type_registry__";
-static char __pyx_k_ADD_ALL_VALUES[] = "ADD_ALL_VALUES";
-static char __pyx_k_ASCII_VTK_CELL[] = "ASCII_VTK_CELL";
-static char __pyx_k_AttributeError[] = "AttributeError";
-static char __pyx_k_BACKWARD_SWEEP[] = "BACKWARD_SWEEP";
-static char __pyx_k_CONVERGED_ATOL[] = "CONVERGED_ATOL";
-static char __pyx_k_CONVERGED_MINF[] = "CONVERGED_MINF";
-static char __pyx_k_CONVERGED_RTOL[] = "CONVERGED_RTOL";
-static char __pyx_k_CONVERGED_TIME[] = "CONVERGED_TIME";
-static char __pyx_k_CONVERGED_USER[] = "CONVERGED_USER";
-static char __pyx_k_CRANK_NICOLSON[] = "CRANK_NICOLSON";
-static char __pyx_k_DIVERGED_INNER[] = "DIVERGED_INNER";
-static char __pyx_k_DMBoundaryType[] = "DMBoundaryType";
-static char __pyx_k_FINAL_ASSEMBLY[] = "FINAL_ASSEMBLY";
-static char __pyx_k_FLUSH_ASSEMBLY[] = "FLUSH_ASSEMBLY";
-static char __pyx_k_MEMORYSCALABLE[] = "MEMORYSCALABLE";
-static char __pyx_k_MPIAIJCUSPARSE[] = "MPIAIJCUSPARSE";
-static char __pyx_k_MPIAIJVIENNACL[] = "MPIAIJVIENNACL";
-static char __pyx_k_MULTIPLICATIVE[] = "MULTIPLICATIVE";
-static char __pyx_k_NORM_FROBENIUS[] = "NORM_FROBENIUS";
-static char __pyx_k_NOT_SET_VALUES[] = "NOT_SET_VALUES";
-static char __pyx_k_NotImplemented[] = "NotImplemented";
-static char __pyx_k_PRECONDITIONED[] = "PRECONDITIONED";
-static char __pyx_k_SEQAIJCUSPARSE[] = "SEQAIJCUSPARSE";
-static char __pyx_k_SEQAIJVIENNACL[] = "SEQAIJVIENNACL";
-static char __pyx_k_SYMMETRY_SWEEP[] = "SYMMETRY_SWEEP";
-static char __pyx_k_TSEquationType[] = "TSEquationType";
-static char __pyx_k_USE_HASH_TABLE[] = "USE_HASH_TABLE";
-static char __pyx_k_createLocalVec[] = "createLocalVec";
-static char __pyx_k_createVecRight[] = "createVecRight";
-static char __pyx_k_getDefaultComm[] = "getDefaultComm";
-static char __pyx_k_getGhostRanges[] = "getGhostRanges";
-static char __pyx_k_getKSPFailures[] = "getKSPFailures";
-static char __pyx_k_getProblemType[] = "getProblemType";
-static char __pyx_k_getStencilType[] = "getStencilType";
-static char __pyx_k_getVersionInfo[] = "getVersionInfo";
-static char __pyx_k_initialguess_2[] = "initialguess";
-static char __pyx_k_jacobian_state[] = "__jacobian_state__";
-static char __pyx_k_petsc4py_PETSc[] = "petsc4py.PETSc";
-static char __pyx_k_setDefaultComm[] = "setDefaultComm";
-static char __pyx_k_setProblemType[] = "setProblemType";
-static char __pyx_k_splitOwnership[] = "splitOwnership";
-static char __pyx_k_CONVERGED_FATOL[] = "CONVERGED_FATOL";
-static char __pyx_k_CONVERGED_FRTOL[] = "CONVERGED_FRTOL";
-static char __pyx_k_CONVERGED_GATOL[] = "CONVERGED_GATOL";
-static char __pyx_k_CONVERGED_GRTOL[] = "CONVERGED_GRTOL";
-static char __pyx_k_CONVERGED_GTTOL[] = "CONVERGED_GTTOL";
-static char __pyx_k_ConvergedReason[] = "ConvergedReason";
-static char __pyx_k_DIVERGED_MAXFCN[] = "DIVERGED_MAXFCN";
-static char __pyx_k_DIVERGED_MAXITS[] = "DIVERGED_MAXITS";
-static char __pyx_k_DIVERGED_MAX_IT[] = "DIVERGED_MAX_IT";
-static char __pyx_k_DMDAElementType[] = "DMDAElementType";
-static char __pyx_k_DMDAStencilType[] = "DMDAStencilType";
-static char __pyx_k_Error___nonzero[] = "Error.__nonzero__";
-static char __pyx_k_FactorShiftType[] = "FactorShiftType";
-static char __pyx_k_MatAssemblyType[] = "MatAssemblyType";
-static char __pyx_k_MatOrderingType[] = "MatOrderingType";
-static char __pyx_k_NORM_FINAL_ONLY[] = "NORM_FINAL_ONLY";
-static char __pyx_k_PCCompositeType[] = "PCCompositeType";
-static char __pyx_k_PartitionerType[] = "PartitionerType";
-static char __pyx_k_SCATTER_FORWARD[] = "SCATTER_FORWARD";
-static char __pyx_k_SCATTER_REVERSE[] = "SCATTER_REVERSE";
-static char __pyx_k_SCHURCOMPLEMENT[] = "SCHURCOMPLEMENT";
-static char __pyx_k_array_interface[] = "__array_interface__";
-static char __pyx_k_coneOrientation[] = "coneOrientation";
-static char __pyx_k_createGlobalVec[] = "createGlobalVec";
-static char __pyx_k_create_matrix_2[] = "create_matrix";
-static char __pyx_k_getBlockIndices[] = "getBlockIndices";
-static char __pyx_k_getBoundaryType[] = "getBoundaryType";
-static char __pyx_k_getEquationType[] = "getEquationType";
-static char __pyx_k_getGhostCorners[] = "getGhostCorners";
-static char __pyx_k_getGradientNorm[] = "getGradientNorm";
-static char __pyx_k_getResidualNorm[] = "getResidualNorm";
-static char __pyx_k_getStencilWidth[] = "getStencilWidth";
-static char __pyx_k_getStepFailures[] = "getStepFailures";
-static char __pyx_k_jacobian_design[] = "__jacobian_design__";
-static char __pyx_k_popErrorHandler[] = "popErrorHandler";
-static char __pyx_k_prefix_s_name_s[] = "(prefix:%s, name:%s)";
-static char __pyx_k_refinementLimit[] = "refinementLimit";
-static char __pyx_k_setEquationType[] = "setEquationType";
-static char __pyx_k_setResidualNorm[] = "setResidualNorm";
-static char __pyx_k_ASCII_VTK_COORDS[] = "ASCII_VTK_COORDS";
-static char __pyx_k_INSERT_BC_VALUES[] = "INSERT_BC_VALUES";
-static char __pyx_k_SNESNormSchedule[] = "SNESNormSchedule";
-static char __pyx_k_SYMMETRY_ETERNAL[] = "SYMMETRY_ETERNAL";
-static char __pyx_k_TAO_Solver_Types[] = "\n    TAO Solver Types\n    ";
-static char __pyx_k_UNPRECONDITIONED[] = "UNPRECONDITIONED";
-static char __pyx_k_createNaturalVec[] = "createNaturalVec";
-static char __pyx_k_create_injection[] = "__create_injection__";
-static char __pyx_k_getFunctionValue[] = "getFunctionValue";
-static char __pyx_k_getOptionsPrefix[] = "getOptionsPrefix";
-static char __pyx_k_jacobian_state_2[] = "jacobian_state";
-static char __pyx_k_ownership_ranges[] = "ownership_ranges";
-static char __pyx_k_pushErrorHandler[] = "pushErrorHandler";
-static char __pyx_k_setOptionsPrefix[] = "setOptionsPrefix";
-static char __pyx_k_ASCII_FACTOR_INFO[] = "ASCII_FACTOR_INFO";
-static char __pyx_k_ASCII_INFO_DETAIL[] = "ASCII_INFO_DETAIL";
-static char __pyx_k_ASCII_MATHEMATICA[] = "ASCII_MATHEMATICA";
-static char __pyx_k_CONVERGED_STEPTOL[] = "CONVERGED_STEPTOL";
-static char __pyx_k_DIVERGED_NANORINF[] = "DIVERGED_NANORINF";
-static char __pyx_k_INSERT_ALL_VALUES[] = "INSERT_ALL_VALUES";
-static char __pyx_k_InterpolationType[] = "InterpolationType";
-static char __pyx_k_MPI_Comm_PyObject[] = "MPI_Comm *(PyObject *)";
-static char __pyx_k_NORM_INITIAL_ONLY[] = "NORM_INITIAL_ONLY";
-static char __pyx_k_POSITIVE_DEFINITE[] = "POSITIVE_DEFINITE";
-static char __pyx_k_PyObject_MPI_Comm[] = "PyObject *(MPI_Comm)";
-static char __pyx_k_TSConvergedReason[] = "TSConvergedReason";
-static char __pyx_k_createLocalVector[] = "createLocalVector";
-static char __pyx_k_getConstraintNorm[] = "getConstraintNorm";
-static char __pyx_k_getMaxKSPFailures[] = "getMaxKSPFailures";
-static char __pyx_k_getObjectiveValue[] = "getObjectiveValue";
-static char __pyx_k_getOwnershipRange[] = "getOwnershipRange";
-static char __pyx_k_getSolutionUpdate[] = "getSolutionUpdate";
-static char __pyx_k_initial_time_step[] = "initial_time_step";
-static char __pyx_k_jacobian_design_2[] = "jacobian_design";
-static char __pyx_k_null_communicator[] = "null communicator";
-static char __pyx_k_positive_definite[] = "positive_definite";
-static char __pyx_k_refinementUniform[] = "refinementUniform";
-static char __pyx_k_setMaxKSPFailures[] = "setMaxKSPFailures";
-static char __pyx_k_unknown_options_s[] = "unknown options: %s";
-static char __pyx_k_ASCII_MATRIXMARKET[] = "ASCII_MATRIXMARKET";
-static char __pyx_k_CONTINUE_ITERATING[] = "CONTINUE_ITERATING";
-static char __pyx_k_CONVERGED_TR_DELTA[] = "CONVERGED_TR_DELTA";
-static char __pyx_k_DIVERGED_BREAKDOWN[] = "DIVERGED_BREAKDOWN";
-static char __pyx_k_DIVERGED_FNORM_NAN[] = "DIVERGED_FNORM_NAN";
-static char __pyx_k_DIVERGED_LOCAL_MIN[] = "DIVERGED_LOCAL_MIN";
-static char __pyx_k_INITIAL_FINAL_ONLY[] = "INITIAL_FINAL_ONLY";
-static char __pyx_k_KSPConvergedReason[] = "KSPConvergedReason";
-static char __pyx_k_MatFactorShiftType[] = "MatFactorShiftType";
-static char __pyx_k_TAOConvergedReason[] = "TAOConvergedReason";
-static char __pyx_k_Vec_array_writable[] = "Vec array (writable)";
-static char __pyx_k_ZERO_INITIAL_GUESS[] = "ZERO_INITIAL_GUESS";
-static char __pyx_k_block_size_not_set[] = "block size not set";
-static char __pyx_k_createGlobalVector[] = "createGlobalVector";
-static char __pyx_k_create_injection_2[] = "create_injection";
-static char __pyx_k_getConvergedReason[] = "getConvergedReason";
-static char __pyx_k_getIterationNumber[] = "getIterationNumber";
-static char __pyx_k_getMaxStepFailures[] = "getMaxStepFailures";
-static char __pyx_k_getOwnershipRanges[] = "getOwnershipRanges";
-static char __pyx_k_readonly_attribute[] = "readonly attribute";
-static char __pyx_k_setConvergedReason[] = "setConvergedReason";
-static char __pyx_k_setIterationNumber[] = "setIterationNumber";
-static char __pyx_k_setMaxStepFailures[] = "setMaxStepFailures";
-static char __pyx_k_CONVERGED_FNORM_ABS[] = "CONVERGED_FNORM_ABS";
-static char __pyx_k_CONVERGED_ITERATING[] = "CONVERGED_ITERATING";
-static char __pyx_k_DAE_IMPLICIT_INDEX1[] = "DAE_IMPLICIT_INDEX1";
-static char __pyx_k_DAE_IMPLICIT_INDEX2[] = "DAE_IMPLICIT_INDEX2";
-static char __pyx_k_DAE_IMPLICIT_INDEX3[] = "DAE_IMPLICIT_INDEX3";
-static char __pyx_k_DIVERGED_LS_FAILURE[] = "DIVERGED_LS_FAILURE";
-static char __pyx_k_IGNORE_ZERO_ENTRIES[] = "IGNORE_ZERO_ENTRIES";
-static char __pyx_k_I_0_is_d_expected_d[] = "I[0] is %d, expected %d";
-static char __pyx_k_LOCAL_FORWARD_SWEEP[] = "LOCAL_FORWARD_SWEEP";
-static char __pyx_k_NORM_PRECONDITIONED[] = "NORM_PRECONDITIONED";
-static char __pyx_k_NO_OFF_PROC_ENTRIES[] = "NO_OFF_PROC_ENTRIES";
-static char __pyx_k_NotImplementedError[] = "NotImplementedError";
-static char __pyx_k_SNESConvergedReason[] = "SNESConvergedReason";
-static char __pyx_k_Vec_array_read_only[] = "Vec array (read-only)";
-static char __pyx_k_Vec_buffer_writable[] = "Vec buffer (writable)";
-static char __pyx_k_createNaturalVector[] = "createNaturalVector";
-static char __pyx_k_create_field_decomp[] = "__create_field_decomp__";
-static char __pyx_k_create_local_vector[] = "__create_local_vector__";
-static char __pyx_k_DAE_IMPLICIT_INDEXHI[] = "DAE_IMPLICIT_INDEXHI";
-static char __pyx_k_DIVERGED_LINE_SEARCH[] = "DIVERGED_LINE_SEARCH";
-static char __pyx_k_ExactFinalTimeOption[] = "ExactFinalTimeOption";
-static char __pyx_k_KEEP_NONZERO_PATTERN[] = "KEEP_NONZERO_PATTERN";
-static char __pyx_k_LOCAL_BACKWARD_SWEEP[] = "LOCAL_BACKWARD_SWEEP";
-static char __pyx_k_SAME_NONZERO_PATTERN[] = "SAME_NONZERO_PATTERN";
-static char __pyx_k_Vec_buffer_read_only[] = "Vec buffer (read-only)";
-static char __pyx_k_create_global_vector[] = "__create_global_vector__";
-static char __pyx_k_create_interpolation[] = "__create_interpolation__";
-static char __pyx_k_getInitialGuessKnoll[] = "getInitialGuessKnoll";
-static char __pyx_k_setInitialGuessKnoll[] = "setInitialGuessKnoll";
-static char __pyx_k_unknown_shift_type_s[] = "unknown shift type: %s";
-static char __pyx_k_CONVERGED_ATOL_NORMAL[] = "CONVERGED_ATOL_NORMAL";
-static char __pyx_k_CONVERGED_RTOL_NORMAL[] = "CONVERGED_RTOL_NORMAL";
-static char __pyx_k_CONVERGED_STEP_LENGTH[] = "CONVERGED_STEP_LENGTH";
-static char __pyx_k_DIVERGED_NONSYMMETRIC[] = "DIVERGED_NONSYMMETRIC";
-static char __pyx_k_DIVERGED_TR_REDUCTION[] = "DIVERGED_TR_REDUCTION";
-static char __pyx_k_DMDAInterpolationType[] = "DMDAInterpolationType";
-static char __pyx_k_NEW_NONZERO_LOCATIONS[] = "NEW_NONZERO_LOCATIONS";
-static char __pyx_k_NORM_UNPRECONDITIONED[] = "NORM_UNPRECONDITIONED";
-static char __pyx_k_NO_OFF_PROC_ZERO_ROWS[] = "NO_OFF_PROC_ZERO_ROWS";
-static char __pyx_k_SCATTER_FORWARD_LOCAL[] = "SCATTER_FORWARD_LOCAL";
-static char __pyx_k_SCATTER_REVERSE_LOCAL[] = "SCATTER_REVERSE_LOCAL";
-static char __pyx_k_getConvergenceHistory[] = "getConvergenceHistory";
-static char __pyx_k_getFunctionTolerances[] = "getFunctionTolerances";
-static char __pyx_k_getGradientTolerances[] = "getGradientTolerances";
-static char __pyx_k_setFunctionTolerances[] = "setFunctionTolerances";
-static char __pyx_k_side_r_not_understood[] = "side '%r' not understood";
-static char __pyx_k_CONVERGED_CG_NEG_CURVE[] = "CONVERGED_CG_NEG_CURVE";
-static char __pyx_k_DIVERGED_INDEFINITE_PC[] = "DIVERGED_INDEFINITE_PC";
-static char __pyx_k_DIVERGED_STEP_REJECTED[] = "DIVERGED_STEP_REJECTED";
-static char __pyx_k_ERROR_LOWER_TRIANGULAR[] = "ERROR_LOWER_TRIANGULAR";
-static char __pyx_k_GETROW_UPPERTRIANGULAR[] = "GETROW_UPPERTRIANGULAR";
-static char __pyx_k_Object_is_not_writable[] = "Object is not writable.";
-static char __pyx_k_STRUCTURALLY_SYMMETRIC[] = "STRUCTURALLY_SYMMETRIC";
-static char __pyx_k_SUBSET_NONZERO_PATTERN[] = "SUBSET_NONZERO_PATTERN";
-static char __pyx_k_TSExactFinalTimeOption[] = "TSExactFinalTimeOption";
-static char __pyx_k_communicator_not_owned[] = "communicator not owned";
-static char __pyx_k_create_interpolation_2[] = "create_interpolation";
-static char __pyx_k_getInitialGuessNonzero[] = "getInitialGuessNonzero";
-static char __pyx_k_getLinearSolveFailures[] = "getLinearSolveFailures";
-static char __pyx_k_getObjectiveTolerances[] = "getObjectiveTolerances";
-static char __pyx_k_setInitialGuessNonzero[] = "setInitialGuessNonzero";
-static char __pyx_k_setObjectiveTolerances[] = "setObjectiveTolerances";
-static char __pyx_k_size_I_is_d_expected_d[] = "size(I) is %d, expected %d";
-static char __pyx_k_size_J_is_d_expected_d[] = "size(J) is %d, expected %d";
-static char __pyx_k_size_V_is_d_expected_d[] = "size(V) is %d, expected %d";
-static char __pyx_k_unknown_element_type_s[] = "unknown element type: %s";
-static char __pyx_k_unknown_scatter_mode_s[] = "unknown scatter mode: %s";
-static char __pyx_k_unknown_stencil_type_s[] = "unknown stencil type: %s";
-static char __pyx_k_DIVERGED_BREAKDOWN_BICG[] = "DIVERGED_BREAKDOWN_BICG";
-static char __pyx_k_DIVERGED_FUNCTION_COUNT[] = "DIVERGED_FUNCTION_COUNT";
-static char __pyx_k_DIVERGED_INDEFINITE_MAT[] = "DIVERGED_INDEFINITE_MAT";
-static char __pyx_k_IGNORE_LOWER_TRIANGULAR[] = "IGNORE_LOWER_TRIANGULAR";
-static char __pyx_k_IGNORE_NEGATIVE_INDICES[] = "IGNORE_NEGATIVE_INDICES";
-static char __pyx_k_IGNORE_OFF_PROC_ENTRIES[] = "IGNORE_OFF_PROC_ENTRIES";
-static char __pyx_k_NORM_INITIAL_FINAL_ONLY[] = "NORM_INITIAL_FINAL_ONLY";
-static char __pyx_k_getConstraintTolerances[] = "getConstraintTolerances";
-static char __pyx_k_isStructurallySymmetric[] = "isStructurallySymmetric";
-static char __pyx_k_unknown_boundary_type_s[] = "unknown boundary type: %s";
-static char __pyx_k_unknown_error_handler_s[] = "unknown error handler: %s";
-static char __pyx_k_CONVERGED_CG_CONSTRAINED[] = "CONVERGED_CG_CONSTRAINED";
-static char __pyx_k_CONVERGED_FNORM_RELATIVE[] = "CONVERGED_FNORM_RELATIVE";
-static char __pyx_k_CONVERGED_SNORM_RELATIVE[] = "CONVERGED_SNORM_RELATIVE";
-static char __pyx_k_DAE_SEMI_EXPLICIT_INDEX1[] = "DAE_SEMI_EXPLICIT_INDEX1";
-static char __pyx_k_DAE_SEMI_EXPLICIT_INDEX2[] = "DAE_SEMI_EXPLICIT_INDEX2";
-static char __pyx_k_DAE_SEMI_EXPLICIT_INDEX3[] = "DAE_SEMI_EXPLICIT_INDEX3";
-static char __pyx_k_DIVERGED_FUNCTION_DOMAIN[] = "DIVERGED_FUNCTION_DOMAIN";
-static char __pyx_k_DIVERGED_NONLINEAR_SOLVE[] = "DIVERGED_NONLINEAR_SOLVE";
-static char __pyx_k_NEW_NONZERO_LOCATION_ERR[] = "NEW_NONZERO_LOCATION_ERR";
-static char __pyx_k_PCFieldSplitSchurPreType[] = "PCFieldSplitSchurPreType";
-static char __pyx_k_SYMMETRIC_MULTIPLICATIVE[] = "SYMMETRIC_MULTIPLICATIVE";
-static char __pyx_k_getNonlinearStepFailures[] = "getNonlinearStepFailures";
-static char __pyx_k_incompatible_array_sizes[] = "incompatible array sizes";
-static char __pyx_k_CONVERGED_HAPPY_BREAKDOWN[] = "CONVERGED_HAPPY_BREAKDOWN";
-static char __pyx_k_DAE_SEMI_EXPLICIT_INDEXHI[] = "DAE_SEMI_EXPLICIT_INDEXHI";
-static char __pyx_k_DIFFERENT_NONZERO_PATTERN[] = "DIFFERENT_NONZERO_PATTERN";
-static char __pyx_k_PCFieldSplitSchurFactType[] = "PCFieldSplitSchurFactType";
-static char __pyx_k_getMaxFunctionEvaluations[] = "getMaxFunctionEvaluations";
-static char __pyx_k_getMaxLinearSolveFailures[] = "getMaxLinearSolveFailures";
-static char __pyx_k_setMaxFunctionEvaluations[] = "setMaxFunctionEvaluations";
-static char __pyx_k_setMaxLinearSolveFailures[] = "setMaxLinearSolveFailures";
-static char __pyx_k_NEW_NONZERO_ALLOCATION_ERR[] = "NEW_NONZERO_ALLOCATION_ERR";
-static char __pyx_k_size_d_nnz_is_d_expected_d[] = "size(d_nnz) is %d, expected %d";
-static char __pyx_k_size_o_nnz_is_d_expected_d[] = "size(o_nnz) is %d, expected %d";
-static char __pyx_k_UNUSED_NONZERO_LOCATION_ERR[] = "UNUSED_NONZERO_LOCATION_ERR";
-static char __pyx_k_getMaxNonlinearStepFailures[] = "getMaxNonlinearStepFailures";
-static char __pyx_k_setMaxNonlinearStepFailures[] = "setMaxNonlinearStepFailures";
-static char __pyx_k_expecting_tuple_list_or_dict[] = "expecting tuple/list or dict";
-static char __pyx_k_option_prefix_must_be_string[] = "option prefix must be string";
-static char __pyx_k_unknown_interpolation_type_s[] = "unknown interpolation type: %s";
-static char __pyx_k_block_size_d_must_be_positive[] = "block size %d must be positive";
-static char __pyx_k_incompatible_array_sizes_nv_d[] = "incompatible array sizes: nv=%d";
-static char __pyx_k_TAO_Solver_Termination_Reasons[] = "\n    TAO Solver Termination Reasons\n    ";
-static char __pyx_k_expecting_a_C_contiguous_array[] = "expecting a C-contiguous array";
-static char __pyx_k_A_matrix_with_d_rows_requires_a[] = "A matrix with %d rows requires a row pointer of length %d (given: %d)";
-static char __pyx_k_Article_Dalcin2011_Author_Lisan[] = "@Article{Dalcin2011,\n  Author = {Lisandro D. Dalcin and Rodrigo R. Paz and Pablo A. Kler and Alejandro Cosimo},\n  Title = {Parallel distributed computing using {P}ython},\n  Journal = {Advances in Water Resources},\n  Note = {New Computational Methods and Software Tools},\n  Volume = {34},\n  Number = {9},\n  Pages = {1124--1139},\n  Year = {2011},\n  DOI = {http://dx.doi.org/10.1016/j.advwatres.2011.04.013}\n}\n";
-static char __pyx_k_PetscFinalize_failed_error_code[] = "PetscFinalize() failed [error code: %d]\n";
-static char __pyx_k_Portable_Extensible_Toolkit_for[] = "\nPortable, Extensible Toolkit for Scientific Computation\n";
-static char __pyx_k_bcPoints_is_a_required_argument[] = "bcPoints is a required argument";
-static char __pyx_k_cannot_place_input_array_size_d[] = "cannot place input array size %d, vector size %d";
-static char __pyx_k_home_devel_petsc4py_3_6_0_src_P[] = "/home/devel/petsc4py-3.6.0/src/PETSc/Error.pyx";
-static char __pyx_k_key_d_cannot_register_s_already[] = "key: %d, cannot register: %s, already registered: %s";
-static char __pyx_k_size_array_is_d_expected_dx_d_d[] = "size(array) is %d, expected %dx%d=%d";
-static char __pyx_k_Given_d_column_indices_but_d_non[] = "Given %d column indices but %d non-zero values";
-static char __pyx_k_Must_provide_as_many_communicato[] = "Must provide as many communicators as levels";
-static char __pyx_k_Must_provide_both_sizes_and_poin[] = "Must provide both sizes and points arrays";
-static char __pyx_k_Out_of_memory_Allocated_d_Used_b[] = "Out of memory. Allocated: %d, Used by process: %d";
-static char __pyx_k_PetscPopErrorHandler_failed_erro[] = "PetscPopErrorHandler() failed [error code: %d]\n";
-static char __pyx_k_Vector_local_size_d_is_not_compa[] = "Vector local size %d is not compatible with DMDA local sizes %s";
-static char __pyx_k_accessing_non_existent_buffer_se[] = "accessing non-existent buffer segment";
-static char __pyx_k_array_size_d_and_vector_local_si[] = "array size %d and vector local size %d block size %d";
-static char __pyx_k_array_size_d_incompatible_with_v[] = "array size %d incompatible with vector local size %d";
-static char __pyx_k_cell_indices_must_have_two_dimen[] = "cell indices must have two dimensions: cells.ndim=%d";
-static char __pyx_k_column_indices_must_have_two_dim[] = "column indices must have two dimensions: cols.ndim=%d";
-static char __pyx_k_coordinates_must_have_two_dimens[] = "coordinates must have two dimensions: coordinates.ndim=%d";
-static char __pyx_k_coords_vertices_must_have_two_di[] = "coords vertices must have two dimensions: coords.ndim=%d";
-static char __pyx_k_ghosts_size_d_array_size_d_and_v[] = "ghosts size %d, array size %d, and vector local size %d block size %d";
-static char __pyx_k_global_size_d_not_divisible_by_b[] = "global size %d not divisible by block size %d";
-static char __pyx_k_incompatible_array_sizes_ni_d_nj[] = "incompatible array sizes: ni=%d, nj=%d, nv=%d";
-static char __pyx_k_incompatible_array_sizes_ni_d_nv[] = "incompatible array sizes: ni=%d, nv=%d, bs=%d";
-static char __pyx_k_input_arrays_have_incompatible_s[] = "input arrays have incompatible shapes: rows.shape=%s, cols.shape=%s, vals.shape=%s";
-static char __pyx_k_local_and_global_sizes_cannot_be[] = "local and global sizes cannot be both 'DECIDE'";
-static char __pyx_k_local_size_d_not_divisible_by_bl[] = "local size %d not divisible by block size %d";
-static char __pyx_k_number_of_dimensions_d_and_numbe[] = "number of dimensions %d and number ownership ranges %d";
-static char __pyx_k_option_prefix_should_not_have_sp[] = "option prefix should not have spaces";
-static char __pyx_k_option_prefix_should_not_start_w[] = "option prefix should not start with a hypen";
-static char __pyx_k_ownership_range_size_d_and_numbe[] = "ownership range size %d and number or processors %d";
-static char __pyx_k_row_indices_must_have_two_dimens[] = "row indices must have two dimensions: rows.ndim=%d";
-static char __pyx_k_sizes_array_should_have_d_entrie[] = "sizes array should have %d entries (has %d)";
-static char __pyx_k_values_must_have_two_or_more_dim[] = "values must have two or more dimensions: vals.ndim=%d";
-static char __pyx_k_warning_could_not_registerPetscF[] = "warning: could not registerPetscFinalize() with Py_AtExit()";
-static char __pyx_k_home_devel_petsc4py_3_6_0_src_P_2[] = "/home/devel/petsc4py-3.6.0/src/PETSc/PETSc.pyx";
-static char __pyx_k_incompatible_array_sizes_ni_d_nv_2[] = "incompatible array sizes: ni=%d, nv=%d";
+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_H[] = "H";
+static const char __pyx_k_I[] = "I";
+static const char __pyx_k_J[] = "J";
+static const char __pyx_k_L[] = "L";
+static const char __pyx_k_O[] = "O";
+static const char __pyx_k_P[] = "P";
+static const char __pyx_k_R[] = "R";
+static const char __pyx_k_S[] = "S";
+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_a[] = "a";
+static const char __pyx_k_b[] = "b";
+static const char __pyx_k_c[] = "c";
+static const char __pyx_k_f[] = "f";
+static const char __pyx_k_g[] = "g";
+static const char __pyx_k_l[] = "l";
+static const char __pyx_k_n[] = "n";
+static const char __pyx_k_p[] = "p";
+static const char __pyx_k_r[] = "r";
+static const char __pyx_k_s[] = "%s";
+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_AU[] = "AU";
+static const char __pyx_k_BE[] = "BE";
+static const char __pyx_k_CG[] = "CG";
+static const char __pyx_k_CN[] = "CN";
+static const char __pyx_k_CP[] = "CP";
+static const char __pyx_k_CR[] = "CR";
+static const char __pyx_k_DA[] = "DA";
+static const char __pyx_k_FE[] = "FE";
+static const char __pyx_k_GL[] = "GL";
+static const char __pyx_k_IS[] = "IS";
+static const char __pyx_k_LU[] = "LU";
+static const char __pyx_k_MG[] = "MG";
+static const char __pyx_k_ML[] = "ML";
+static const char __pyx_k_MS[] = "MS";
+static const char __pyx_k_N1[] = "N1";
+static const char __pyx_k_N2[] = "N2";
+static const char __pyx_k_ND[] = "ND";
+static const char __pyx_k_NM[] = "NM";
+static const char __pyx_k_NN[] = "NN";
+static const char __pyx_k_NO[] = "NO";
+static const char __pyx_k_NZ[] = "NZ";
+static const char __pyx_k_P1[] = "P1";
+static const char __pyx_k_PD[] = "PD";
+static const char __pyx_k_Q0[] = "Q0";
+static const char __pyx_k_Q1[] = "Q1";
+static const char __pyx_k_QN[] = "QN";
+static const char __pyx_k_RK[] = "RK";
+static const char __pyx_k_TH[] = "TH";
+static const char __pyx_k_UA[] = "UA";
+static const char __pyx_k_VU[] = "VU";
+static const char __pyx_k__2[] = " ";
+static const char __pyx_k__5[] = "-";
+static const char __pyx_k_au[] = "au";
+static const char __pyx_k_bs[] = "bs";
+static const char __pyx_k_da[] = "da";
+static const char __pyx_k_dm[] = "dm";
+static const char __pyx_k_dt[] = "dt";
+static const char __pyx_k_gv[] = "gv";
+static const char __pyx_k_lv[] = "lv";
+static const char __pyx_k_na[] = "na";
+static const char __pyx_k_p1[] = "p1";
+static const char __pyx_k_pc[] = "pc";
+static const char __pyx_k_pd[] = "pd";
+static const char __pyx_k_q0[] = "q0";
+static const char __pyx_k_q1[] = "q1";
+static const char __pyx_k_rw[] = "rw";
+static const char __pyx_k_sf[] = "sf";
+static const char __pyx_k_sx[] = "sx";
+static const char __pyx_k_ua[] = "ua";
+static const char __pyx_k_vg[] = "vg";
+static const char __pyx_k_vl[] = "vl";
+static const char __pyx_k_vn[] = "vn";
+static const char __pyx_k_xl[] = "xl";
+static const char __pyx_k_xu[] = "xu";
+static const char __pyx_k_A11[] = "A11";
+static const char __pyx_k_ADD[] = "ADD";
+static const char __pyx_k_AGG[] = "AGG";
+static const char __pyx_k_AIJ[] = "AIJ";
+static const char __pyx_k_AMD[] = "AMD";
+static const char __pyx_k_ASM[] = "ASM";
+static const char __pyx_k_BDF[] = "BDF";
+static const char __pyx_k_BOX[] = "BOX";
+static const char __pyx_k_CGS[] = "CGS";
+static const char __pyx_k_DOF[] = "DOF";
+static const char __pyx_k_Dup[] = "Dup";
+static const char __pyx_k_FAS[] = "FAS";
+static const char __pyx_k_FCG[] = "FCG";
+static const char __pyx_k_FFT[] = "FFT";
+static const char __pyx_k_FRB[] = "FRB";
+static const char __pyx_k_GCR[] = "GCR";
+static const char __pyx_k_GEO[] = "GEO";
+static const char __pyx_k_ICC[] = "ICC";
+static const char __pyx_k_ILU[] = "ILU";
+static const char __pyx_k_INF[] = "INF";
+static const char __pyx_k_IPM[] = "IPM";
+static const char __pyx_k_KSP[] = "KSP";
+static const char __pyx_k_LCD[] = "LCD";
+static const char __pyx_k_LCL[] = "LCL";
+static const char __pyx_k_LRC[] = "LRC";
+static const char __pyx_k_LSC[] = "LSC";
+static const char __pyx_k_MAT[] = "MAT";
+static const char __pyx_k_MAX[] = "MAX";
+static const char __pyx_k_MPI[] = "MPI";
+static const char __pyx_k_N12[] = "N12";
+static const char __pyx_k_NCG[] = "NCG";
+static const char __pyx_k_NGS[] = "NGS";
+static const char __pyx_k_NLS[] = "NLS";
+static const char __pyx_k_NTL[] = "NTL";
+static const char __pyx_k_NTR[] = "NTR";
+static const char __pyx_k_OWD[] = "OWD";
+static const char __pyx_k_QCG[] = "QCG";
+static const char __pyx_k_QMD[] = "QMD";
+static const char __pyx_k_RCM[] = "RCM";
+static const char __pyx_k_SEQ[] = "SEQ";
+static const char __pyx_k_SOR[] = "SOR";
+static const char __pyx_k_SPD[] = "SPD";
+static const char __pyx_k_SSP[] = "SSP";
+static const char __pyx_k_SVD[] = "SVD";
+static const char __pyx_k_TFS[] = "TFS";
+static const char __pyx_k_VTK[] = "VTK";
+static const char __pyx_k_WBM[] = "WBM";
+static const char __pyx_k__10[] = "";
+static const char __pyx_k__32[] = "\n";
+static const char __pyx_k_a_2[] = "a+";
+static const char __pyx_k_all[] = "all";
+static const char __pyx_k_app[] = "app";
+static const char __pyx_k_box[] = "box";
+static const char __pyx_k_c_d[] = "=%c%d";
+static const char __pyx_k_col[] = "col";
+static const char __pyx_k_csr[] = "csr";
+static const char __pyx_k_d_s[] = "[%*d] %s";
+static const char __pyx_k_dim[] = "dim";
+static const char __pyx_k_doc[] = "__doc__";
+static const char __pyx_k_dof[] = "dof";
+static const char __pyx_k_end[] = "end";
+static const char __pyx_k_get[] = "get";
+static const char __pyx_k_idx[] = "idx";
+static const char __pyx_k_its[] = "its";
+static const char __pyx_k_ksp[] = "ksp";
+static const char __pyx_k_mat[] = "mat";
+static const char __pyx_k_nnz[] = "nnz";
+static const char __pyx_k_nsd[] = "nsd";
+static const char __pyx_k_nsp[] = "nsp";
+static const char __pyx_k_obj[] = "obj";
+static const char __pyx_k_out[] = "out";
+static const char __pyx_k_ozz[] = "ozz";
+static const char __pyx_k_pop[] = "pop";
+static const char __pyx_k_pre[] = "pre";
+static const char __pyx_k_r_2[] = "r+";
+static const char __pyx_k_rhs[] = "rhs";
+static const char __pyx_k_row[] = "row";
+static const char __pyx_k_s_s[] = "-%s%s";
+static const char __pyx_k_sec[] = "sec";
+static const char __pyx_k_sep[] = "sep";
+static const char __pyx_k_str[] = "__str__";
+static const char __pyx_k_tab[] = "tab";
+static const char __pyx_k_tol[] = "tol";
+static const char __pyx_k_val[] = "val";
+static const char __pyx_k_vec[] = "vec";
+static const char __pyx_k_vlg[] = "vlg";
+static const char __pyx_k_w_2[] = "w+";
+static const char __pyx_k_zoz[] = "zoz";
+static const char __pyx_k_zzo[] = "zzo";
+static const char __pyx_k_BAIJ[] = "BAIJ";
+static const char __pyx_k_BCGS[] = "BCGS";
+static const char __pyx_k_BDDC[] = "BDDC";
+static const char __pyx_k_BFBT[] = "BFBT";
+static const char __pyx_k_BICG[] = "BICG";
+static const char __pyx_k_BMRM[] = "BMRM";
+static const char __pyx_k_CGLS[] = "CGLS";
+static const char __pyx_k_CGNE[] = "CGNE";
+static const char __pyx_k_CUSP[] = "CUSP";
+static const char __pyx_k_DAAD[] = "DAAD";
+static const char __pyx_k_DIAG[] = "DIAG";
+static const char __pyx_k_DRAW[] = "DRAW";
+static const char __pyx_k_DROP[] = "DROP";
+static const char __pyx_k_FFTW[] = "FFTW";
+static const char __pyx_k_FULL[] = "FULL";
+static const char __pyx_k_Free[] = "Free";
+static const char __pyx_k_GAMG[] = "GAMG";
+static const char __pyx_k_GASM[] = "GASM";
+static const char __pyx_k_GLTR[] = "GLTR";
+static const char __pyx_k_GPCG[] = "GPCG";
+static const char __pyx_k_HALF[] = "HALF";
+static const char __pyx_k_HDF5[] = "HDF5";
+static const char __pyx_k_LEFT[] = "LEFT";
+static const char __pyx_k_LMVM[] = "LMVM";
+static const char __pyx_k_LSQR[] = "LSQR";
+static const char __pyx_k_Left[] = "Left";
+static const char __pyx_k_MAIJ[] = "MAIJ";
+static const char __pyx_k_MASK[] = "MASK";
+static const char __pyx_k_MFFD[] = "MFFD";
+static const char __pyx_k_MOAB[] = "MOAB";
+static const char __pyx_k_Mode[] = "Mode";
+static const char __pyx_k_NASH[] = "NASH";
+static const char __pyx_k_NASM[] = "NASM";
+static const char __pyx_k_NEST[] = "NEST";
+static const char __pyx_k_NONE[] = "NONE";
+static const char __pyx_k_PFMG[] = "PFMG";
+static const char __pyx_k_PLEX[] = "PLEX";
+static const char __pyx_k_RAND[] = "RAND";
+static const char __pyx_k_READ[] = "READ";
+static const char __pyx_k_ROSW[] = "ROSW";
+static const char __pyx_k_SAME[] = "SAME";
+static const char __pyx_k_SAWS[] = "SAWS";
+static const char __pyx_k_SELF[] = "SELF";
+static const char __pyx_k_SPAI[] = "SPAI";
+static const char __pyx_k_STAR[] = "STAR";
+static const char __pyx_k_STCG[] = "STCG";
+static const char __pyx_k_Side[] = "Side";
+static const char __pyx_k_Size[] = "Size";
+static const char __pyx_k_TEST[] = "TEST";
+static const char __pyx_k_TRON[] = "TRON";
+static const char __pyx_k_Type[] = "Type";
+static const char __pyx_k_USER[] = "USER";
+static const char __pyx_k_addv[] = "addv";
+static const char __pyx_k_args[] = "args";
+static const char __pyx_k_atol[] = "atol";
+static const char __pyx_k_attr[] = "attr";
+static const char __pyx_k_axpy[] = "axpy";
+static const char __pyx_k_beta[] = "beta";
+static const char __pyx_k_cell[] = "cell";
+static const char __pyx_k_cgid[] = "cgid";
+static const char __pyx_k_cmap[] = "cmap";
+static const char __pyx_k_cols[] = "cols";
+static const char __pyx_k_comm[] = "comm";
+static const char __pyx_k_cone[] = "cone";
+static const char __pyx_k_copy[] = "copy";
+static const char __pyx_k_data[] = "data";
+static const char __pyx_k_date[] = "date";
+static const char __pyx_k_diag[] = "diag";
+static const char __pyx_k_dims[] = "dims";
+static const char __pyx_k_drop[] = "drop";
+static const char __pyx_k_exit[] = "__exit__";
+static const char __pyx_k_fill[] = "fill";
+static const char __pyx_k_flag[] = "flag";
+static const char __pyx_k_gtol[] = "gtol";
+static const char __pyx_k_gvec[] = "gvec";
+static const char __pyx_k_idxm[] = "idxm";
+static const char __pyx_k_ierr[] = "ierr";
+static const char __pyx_k_imag[] = "imag";
+static const char __pyx_k_imex[] = "imex";
+static const char __pyx_k_info[] = "info";
+static const char __pyx_k_init[] = "__init__";
+static const char __pyx_k_iset[] = "iset";
+static const char __pyx_k_ival[] = "ival";
+static const char __pyx_k_join[] = "join";
+static const char __pyx_k_keys[] = "keys";
+static const char __pyx_k_kind[] = "kind";
+static const char __pyx_k_left[] = "left";
+static const char __pyx_k_lits[] = "lits";
+static const char __pyx_k_locs[] = "locs";
+static const char __pyx_k_ltog[] = "ltog";
+static const char __pyx_k_ltol[] = "ltol";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_mats[] = "mats";
+static const char __pyx_k_memo[] = "memo";
+static const char __pyx_k_mode[] = "mode";
+static const char __pyx_k_mult[] = "mult";
+static const char __pyx_k_name[] = "name";
+static const char __pyx_k_nmax[] = "nmax";
+static const char __pyx_k_nmin[] = "nmin";
+static const char __pyx_k_none[] = "none";
+static const char __pyx_k_norm[] = "norm";
+static const char __pyx_k_opts[] = "opts";
+static const char __pyx_k_pEnd[] = "pEnd";
+static const char __pyx_k_perm[] = "perm";
+static const char __pyx_k_push[] = "push";
+static const char __pyx_k_rank[] = "rank";
+static const char __pyx_k_real[] = "real";
+static const char __pyx_k_repr[] = "__repr__";
+static const char __pyx_k_rmap[] = "rmap";
+static const char __pyx_k_rows[] = "rows";
+static const char __pyx_k_rtol[] = "rtol";
+static const char __pyx_k_seed[] = "seed";
+static const char __pyx_k_self[] = "self";
+static const char __pyx_k_side[] = "side";
+static const char __pyx_k_size[] = "size";
+static const char __pyx_k_snes[] = "snes";
+static const char __pyx_k_star[] = "star";
+static const char __pyx_k_step[] = "step";
+static const char __pyx_k_stol[] = "stol";
+static const char __pyx_k_stop[] = "stop";
+static const char __pyx_k_supp[] = "supp";
+static const char __pyx_k_time[] = "time";
+static const char __pyx_k_vecs[] = "vecs";
+static const char __pyx_k_view[] = "view";
+static const char __pyx_k_xdot[] = "xdot";
+static const char __pyx_k_xmax[] = "xmax";
+static const char __pyx_k_xmin[] = "xmin";
+static const char __pyx_k_ymax[] = "ymax";
+static const char __pyx_k_ymin[] = "ymin";
+static const char __pyx_k_zmax[] = "zmax";
+static const char __pyx_k_zmin[] = "zmin";
+static const char __pyx_k_ALPHA[] = "ALPHA";
+static const char __pyx_k_ASCII[] = "ASCII";
+static const char __pyx_k_ASFLS[] = "ASFLS";
+static const char __pyx_k_ASILS[] = "ASILS";
+static const char __pyx_k_ASPIN[] = "ASPIN";
+static const char __pyx_k_BASIC[] = "BASIC";
+static const char __pyx_k_BCGSL[] = "BCGSL";
+static const char __pyx_k_BLMVM[] = "BLMVM";
+static const char __pyx_k_BLOCK[] = "BLOCK";
+static const char __pyx_k_BQPIP[] = "BQPIP";
+static const char __pyx_k_BSTRM[] = "BSTRM";
+static const char __pyx_k_CHACO[] = "CHACO";
+static const char __pyx_k_Class[] = "Class";
+static const char __pyx_k_Clone[] = "Clone";
+static const char __pyx_k_DENSE[] = "DENSE";
+static const char __pyx_k_EIMEX[] = "EIMEX";
+static const char __pyx_k_EULER[] = "EULER";
+static const char __pyx_k_Error[] = "Error";
+static const char __pyx_k_Event[] = "Event";
+static const char __pyx_k_FBCGS[] = "FBCGS";
+static const char __pyx_k_FINAL[] = "FINAL";
+static const char __pyx_k_FLUSH[] = "FLUSH";
+static const char __pyx_k_GMRES[] = "GMRES";
+static const char __pyx_k_HYPRE[] = "HYPRE";
+static const char __pyx_k_IBCGS[] = "IBCGS";
+static const char __pyx_k_LOCAL[] = "LOCAL";
+static const char __pyx_k_LOWER[] = "LOWER";
+static const char __pyx_k_MIMEX[] = "MIMEX";
+static const char __pyx_k_OWLQN[] = "OWLQN";
+static const char __pyx_k_PARMS[] = "PARMS";
+static const char __pyx_k_PATCH[] = "PATCH";
+static const char __pyx_k_Print[] = "Print";
+static const char __pyx_k_RIGHT[] = "RIGHT";
+static const char __pyx_k_Right[] = "Right";
+static const char __pyx_k_SBAIJ[] = "SBAIJ";
+static const char __pyx_k_SCHUR[] = "SCHUR";
+static const char __pyx_k_SELFP[] = "SELFP";
+static const char __pyx_k_SHELL[] = "SHELL";
+static const char __pyx_k_SPRNG[] = "SPRNG";
+static const char __pyx_k_SSFLS[] = "SSFLS";
+static const char __pyx_k_SSILS[] = "SSILS";
+static const char __pyx_k_Stage[] = "Stage";
+static const char __pyx_k_TCQMR[] = "TCQMR";
+static const char __pyx_k_TFQMR[] = "TFQMR";
+static const char __pyx_k_THETA[] = "THETA";
+static const char __pyx_k_THIRD[] = "THIRD";
+static const char __pyx_k_TSIRM[] = "TSIRM";
+static const char __pyx_k_TWIST[] = "TWIST";
+static const char __pyx_k_UPPER[] = "UPPER";
+static const char __pyx_k_WRITE[] = "WRITE";
+static const char __pyx_k_abort[] = "abort";
+static const char __pyx_k_alpha[] = "alpha";
+static const char __pyx_k_apply[] = "apply";
+static const char __pyx_k_array[] = "array";
+static const char __pyx_k_begin[] = "begin";
+static const char __pyx_k_bsize[] = "bsize";
+static const char __pyx_k_catol[] = "catol";
+static const char __pyx_k_cells[] = "cells";
+static const char __pyx_k_comms[] = "comms";
+static const char __pyx_k_count[] = "count";
+static const char __pyx_k_crank[] = "crank";
+static const char __pyx_k_crtol[] = "crtol";
+static const char __pyx_k_csize[] = "csize";
+static const char __pyx_k_ctype[] = "ctype";
+static const char __pyx_k_devel[] = "devel";
+static const char __pyx_k_dtcol[] = "dtcol";
+static const char __pyx_k_edges[] = "edges";
+static const char __pyx_k_emacs[] = "emacs";
+static const char __pyx_k_enter[] = "__enter__";
+static const char __pyx_k_entry[] = "entry";
+static const char __pyx_k_exoid[] = "exoid";
+static const char __pyx_k_faces[] = "faces";
+static const char __pyx_k_field[] = "field";
+static const char __pyx_k_first[] = "first";
+static const char __pyx_k_flops[] = "flops";
+static const char __pyx_k_flush[] = "flush";
+static const char __pyx_k_fnorm[] = "fnorm";
+static const char __pyx_k_force[] = "force";
+static const char __pyx_k_gamma[] = "gamma";
+static const char __pyx_k_gatol[] = "gatol";
+static const char __pyx_k_getDM[] = "getDM";
+static const char __pyx_k_getPC[] = "getPC";
+static const char __pyx_k_group[] = "group";
+static const char __pyx_k_grtol[] = "grtol";
+static const char __pyx_k_gttol[] = "gttol";
+static const char __pyx_k_icntl[] = "icntl";
+static const char __pyx_k_imode[] = "imode";
+static const char __pyx_k_index[] = "index";
+static const char __pyx_k_is_to[] = "is_to";
+static const char __pyx_k_iscol[] = "iscol";
+static const char __pyx_k_isets[] = "isets";
+static const char __pyx_k_isrow[] = "isrow";
+static const char __pyx_k_kargs[] = "kargs";
+static const char __pyx_k_klass[] = "klass";
+static const char __pyx_k_label[] = "label";
+static const char __pyx_k_level[] = "level";
+static const char __pyx_k_lgmap[] = "lgmap";
+static const char __pyx_k_local[] = "local";
+static const char __pyx_k_lower[] = "lower";
+static const char __pyx_k_lvecs[] = "lvecs";
+static const char __pyx_k_major[] = "major";
+static const char __pyx_k_minor[] = "minor";
+static const char __pyx_k_model[] = "model";
+static const char __pyx_k_omega[] = "omega";
+static const char __pyx_k_order[] = "order";
+static const char __pyx_k_otype[] = "otype";
+static const char __pyx_k_patch[] = "patch";
+static const char __pyx_k_petsc[] = "petsc";
+static const char __pyx_k_point[] = "point";
+static const char __pyx_k_ptype[] = "ptype";
+static const char __pyx_k_range[] = "range";
+static const char __pyx_k_ready[] = "ready";
+static const char __pyx_k_reset[] = "reset";
+static const char __pyx_k_reuse[] = "reuse";
+static const char __pyx_k_right[] = "right";
+static const char __pyx_k_rnorm[] = "rnorm";
+static const char __pyx_k_scale[] = "scale";
+static const char __pyx_k_setDM[] = "setDM";
+static const char __pyx_k_setup[] = "setup";
+static const char __pyx_k_shape[] = "shape";
+static const char __pyx_k_shift[] = "shift";
+static const char __pyx_k_sizes[] = "sizes";
+static const char __pyx_k_sleep[] = "sleep";
+static const char __pyx_k_solve[] = "solve";
+static const char __pyx_k_split[] = "split";
+static const char __pyx_k_stage[] = "stage";
+static const char __pyx_k_start[] = "start";
+static const char __pyx_k_state[] = "state";
+static const char __pyx_k_strip[] = "strip";
+static const char __pyx_k_theta[] = "theta";
+static const char __pyx_k_title[] = "title";
+static const char __pyx_k_toAll[] = "toAll";
+static const char __pyx_k_twist[] = "twist";
+static const char __pyx_k_upper[] = "upper";
+static const char __pyx_k_value[] = "value";
+static const char __pyx_k_width[] = "width";
+static const char __pyx_k_xnorm[] = "xnorm";
+static const char __pyx_k_ynorm[] = "ynorm";
+static const char __pyx_k_ADD_BC[] = "ADD_BC";
+static const char __pyx_k_AIJCRL[] = "AIJCRL";
+static const char __pyx_k_ALPHA2[] = "ALPHA2";
+static const char __pyx_k_ALWAYS[] = "ALWAYS";
+static const char __pyx_k_AOType[] = "AOType";
+static const char __pyx_k_APPEND[] = "APPEND";
+static const char __pyx_k_BEULER[] = "BEULER";
+static const char __pyx_k_BINARY[] = "BINARY";
+static const char __pyx_k_DECIDE[] = "DECIDE";
+static const char __pyx_k_DGMRES[] = "DGMRES";
+static const char __pyx_k_DMType[] = "DMType";
+static const char __pyx_k_EXOTIC[] = "EXOTIC";
+static const char __pyx_k_FBCGSR[] = "FBCGSR";
+static const char __pyx_k_FGMRES[] = "FGMRES";
+static const char __pyx_k_Format[] = "Format";
+static const char __pyx_k_INSERT[] = "INSERT";
+static const char __pyx_k_ISType[] = "ISType";
+static const char __pyx_k_JACOBI[] = "JACOBI";
+static const char __pyx_k_LGMRES[] = "LGMRES";
+static const char __pyx_k_LINEAR[] = "LINEAR";
+static const char __pyx_k_MATLAB[] = "MATLAB";
+static const char __pyx_k_MGType[] = "MGType";
+static const char __pyx_k_MINRES[] = "MINRES";
+static const char __pyx_k_MIRROR[] = "MIRROR";
+static const char __pyx_k_MPIADJ[] = "MPIADJ";
+static const char __pyx_k_MPIAIJ[] = "MPIAIJ";
+static const char __pyx_k_NATIVE[] = "NATIVE";
+static const char __pyx_k_NETCDF[] = "NETCDF";
+static const char __pyx_k_NGMRES[] = "NGMRES";
+static const char __pyx_k_NORMAL[] = "NORMAL";
+static const char __pyx_k_NORM_1[] = "NORM_1";
+static const char __pyx_k_NORM_2[] = "NORM_2";
+static const char __pyx_k_Option[] = "Option";
+static const char __pyx_k_PCSide[] = "PCSide";
+static const char __pyx_k_PCType[] = "PCType";
+static const char __pyx_k_PGMRES[] = "PGMRES";
+static const char __pyx_k_PIPECG[] = "PIPECG";
+static const char __pyx_k_PIPECR[] = "PIPECR";
+static const char __pyx_k_PSEUDO[] = "PSEUDO";
+static const char __pyx_k_PYTHON[] = "PYTHON";
+static const char __pyx_k_RAND48[] = "RAND48";
+static const char __pyx_k_Reason[] = "Reason";
+static const char __pyx_k_SACUSP[] = "SACUSP";
+static const char __pyx_k_SBSTRM[] = "SBSTRM";
+static const char __pyx_k_SEQAIJ[] = "SEQAIJ";
+static const char __pyx_k_SFType[] = "SFType";
+static const char __pyx_k_SHARED[] = "SHARED";
+static const char __pyx_k_SLICED[] = "SLICED";
+static const char __pyx_k_SOCKET[] = "SOCKET";
+static const char __pyx_k_STDERR[] = "STDERR";
+static const char __pyx_k_STDOUT[] = "STDOUT";
+static const char __pyx_k_STRIDE[] = "STRIDE";
+static const char __pyx_k_STRING[] = "STRING";
+static const char __pyx_k_SUBSET[] = "SUBSET";
+static const char __pyx_k_SYMMLQ[] = "SYMMLQ";
+static const char __pyx_k_TSType[] = "TSType";
+static const char __pyx_k_UPDATE[] = "UPDATE";
+static const char __pyx_k_WINDOW[] = "WINDOW";
+static const char __pyx_k_alpha2[] = "alpha2";
+static const char __pyx_k_alphas[] = "alphas";
+static const char __pyx_k_amount[] = "amount";
+static const char __pyx_k_appctx[] = "appctx";
+static const char __pyx_k_append[] = "append";
+static const char __pyx_k_author[] = "author";
+static const char __pyx_k_column[] = "column";
+static const char __pyx_k_coords[] = "coords";
+static const char __pyx_k_decode[] = "decode";
+static const char __pyx_k_decomp[] = "decomp";
+static const char __pyx_k_design[] = "design";
+static const char __pyx_k_divtol[] = "divtol";
+static const char __pyx_k_encode[] = "encode";
+static const char __pyx_k_eqtype[] = "eqtype";
+static const char __pyx_k_format[] = "format";
+static const char __pyx_k_getDim[] = "getDim";
+static const char __pyx_k_getDof[] = "getDof";
+static const char __pyx_k_getKSP[] = "getKSP";
+static const char __pyx_k_getNPC[] = "getNPC";
+static const char __pyx_k_getRhs[] = "getRhs";
+static const char __pyx_k_ghosts[] = "ghosts";
+static const char __pyx_k_handle[] = "handle";
+static const char __pyx_k_ignore[] = "ignore";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_insert[] = "insert";
+static const char __pyx_k_invert[] = "invert";
+static const char __pyx_k_iscols[] = "iscols";
+static const char __pyx_k_isperm[] = "isperm";
+static const char __pyx_k_isrows[] = "isrows";
+static const char __pyx_k_length[] = "length";
+static const char __pyx_k_levels[] = "levels";
+static const char __pyx_k_max_it[] = "max_it";
+static const char __pyx_k_memory[] = "memory";
+static const char __pyx_k_mgtype[] = "mgtype";
+static const char __pyx_k_mirror[] = "mirror";
+static const char __pyx_k_module[] = "__module__";
+static const char __pyx_k_mpi4py[] = "mpi4py";
+static const char __pyx_k_name_2[] = "__name__";
+static const char __pyx_k_ncycle[] = "ncycle";
+static const char __pyx_k_newsec[] = "newsec";
+static const char __pyx_k_newvec[] = "newvec";
+static const char __pyx_k_nlocal[] = "nlocal";
+static const char __pyx_k_nroots[] = "nroots";
+static const char __pyx_k_numDof[] = "numDof";
+static const char __pyx_k_nzdiag[] = "nzdiag";
+static const char __pyx_k_object[] = "object";
+static const char __pyx_k_offset[] = "offset";
+static const char __pyx_k_option[] = "option";
+static const char __pyx_k_output[] = "output";
+static const char __pyx_k_pStart[] = "pStart";
+static const char __pyx_k_parent[] = "parent";
+static const char __pyx_k_points[] = "points";
+static const char __pyx_k_prefix[] = "prefix";
+static const char __pyx_k_python[] = "python";
+static const char __pyx_k_radius[] = "radius";
+static const char __pyx_k_random[] = "random";
+static const char __pyx_k_reason[] = "reason";
+static const char __pyx_k_refine[] = "refine";
+static const char __pyx_k_remote[] = "remote";
+static const char __pyx_k_remove[] = "remove";
+static const char __pyx_k_result[] = "result";
+static const char __pyx_k_rowmap[] = "rowmap";
+static const char __pyx_k_rscale[] = "rscale";
+static const char __pyx_k_rtol_0[] = "rtol_0";
+static const char __pyx_k_setKSP[] = "setKSP";
+static const char __pyx_k_setNPC[] = "setNPC";
+static const char __pyx_k_solver[] = "solver";
+static const char __pyx_k_starts[] = "starts";
+static const char __pyx_k_submat[] = "submat";
+static const char __pyx_k_subvec[] = "subvec";
+static const char __pyx_k_svalue[] = "svalue";
+static const char __pyx_k_tbline[] = "tbline";
+static const char __pyx_k_tblist[] = "tblist";
+static const char __pyx_k_toZero[] = "toZero";
+static const char __pyx_k_update[] = "update";
+static const char __pyx_k_values[] = "values";
+static const char __pyx_k_vec_to[] = "vec_to";
+static const char __pyx_k_viewer[] = "viewer";
+static const char __pyx_k_ADD_ALL[] = "ADD_ALL";
+static const char __pyx_k_AIJCUSP[] = "AIJCUSP";
+static const char __pyx_k_AIJPERM[] = "AIJPERM";
+static const char __pyx_k_ARKIMEX[] = "ARKIMEX";
+static const char __pyx_k_ASMType[] = "ASMType";
+static const char __pyx_k_BJACOBI[] = "BJACOBI";
+static const char __pyx_k_Barrier[] = "Barrier";
+static const char __pyx_k_DEFAULT[] = "DEFAULT";
+static const char __pyx_k_DRAW_LG[] = "DRAW_LG";
+static const char __pyx_k_FORWARD[] = "FORWARD";
+static const char __pyx_k_GENERAL[] = "GENERAL";
+static const char __pyx_k_GHOSTED[] = "GHOSTED";
+static const char __pyx_k_GROPPCG[] = "GROPPCG";
+static const char __pyx_k_IntType[] = "IntType";
+static const char __pyx_k_KASKADE[] = "KASKADE";
+static const char __pyx_k_KSPONLY[] = "KSPONLY";
+static const char __pyx_k_KSPType[] = "KSPType";
+static const char __pyx_k_MAPPING[] = "MAPPING";
+static const char __pyx_k_MPIBAIJ[] = "MPIBAIJ";
+static const char __pyx_k_MPICUSP[] = "MPICUSP";
+static const char __pyx_k_MPIMAIJ[] = "MPIMAIJ";
+static const char __pyx_k_MapType[] = "MapType";
+static const char __pyx_k_MatType[] = "MatType";
+static const char __pyx_k_NATURAL[] = "NATURAL";
+static const char __pyx_k_NETWORK[] = "NETWORK";
+static const char __pyx_k_NONZERO[] = "NONZERO";
+static const char __pyx_k_PIPEFCG[] = "PIPEFCG";
+static const char __pyx_k_PIPEGCR[] = "PIPEGCR";
+static const char __pyx_k_PREONLY[] = "PREONLY";
+static const char __pyx_k_QUARTER[] = "QUARTER";
+static const char __pyx_k_REVERSE[] = "REVERSE";
+static const char __pyx_k_SAME_NZ[] = "SAME_NZ";
+static const char __pyx_k_SCATTER[] = "SCATTER";
+static const char __pyx_k_SEQBAIJ[] = "SEQBAIJ";
+static const char __pyx_k_SEQCUSP[] = "SEQCUSP";
+static const char __pyx_k_SEQMAIJ[] = "SEQMAIJ";
+static const char __pyx_k_SORType[] = "SORType";
+static const char __pyx_k_SPECIAL[] = "SPECIAL";
+static const char __pyx_k_SYSPFMG[] = "SYSPFMG";
+static const char __pyx_k_Stencil[] = "Stencil";
+static const char __pyx_k_TAOType[] = "TAOType";
+static const char __pyx_k_VTK_VTR[] = "VTK_VTR";
+static const char __pyx_k_VTK_VTS[] = "VTK_VTS";
+static const char __pyx_k_VTK_VTU[] = "VTK_VTU";
+static const char __pyx_k_VecType[] = "VecType";
+static const char __pyx_k_alpha_f[] = "alpha_f";
+static const char __pyx_k_alpha_m[] = "alpha_m";
+static const char __pyx_k_array_w[] = "array_w";
+static const char __pyx_k_asmtype[] = "asmtype";
+static const char __pyx_k_barrier[] = "barrier";
+static const char __pyx_k_bcComps[] = "bcComps";
+static const char __pyx_k_bcField[] = "bcField";
+static const char __pyx_k_coarsen[] = "coarsen";
+static const char __pyx_k_conePos[] = "conePos";
+static const char __pyx_k_context[] = "context";
+static const char __pyx_k_default[] = "default";
+static const char __pyx_k_destroy[] = "destroy";
+static const char __pyx_k_display[] = "display";
+static const char __pyx_k_dm_type[] = "dm_type";
+static const char __pyx_k_dtcount[] = "dtcount";
+static const char __pyx_k_forward[] = "forward";
+static const char __pyx_k_getComm[] = "getComm";
+static const char __pyx_k_getInfo[] = "getInfo";
+static const char __pyx_k_getName[] = "getName";
+static const char __pyx_k_getRank[] = "getRank";
+static const char __pyx_k_getSNES[] = "getSNES";
+static const char __pyx_k_getSeed[] = "getSeed";
+static const char __pyx_k_getSize[] = "getSize";
+static const char __pyx_k_getTime[] = "getTime";
+static const char __pyx_k_getType[] = "getType";
+static const char __pyx_k_getVecs[] = "getVecs";
+static const char __pyx_k_ghosted[] = "ghosted";
+static const char __pyx_k_hasName[] = "hasName";
+static const char __pyx_k_hessian[] = "hessian";
+static const char __pyx_k_indices[] = "indices";
+static const char __pyx_k_is_from[] = "is_from";
+static const char __pyx_k_is_type[] = "is_type";
+static const char __pyx_k_mallocs[] = "mallocs";
+static const char __pyx_k_matMult[] = "matMult";
+static const char __pyx_k_monitor[] = "monitor";
+static const char __pyx_k_nleaves[] = "nleaves";
+static const char __pyx_k_nlevels[] = "nlevels";
+static const char __pyx_k_nonzero[] = "nonzero";
+static const char __pyx_k_numComp[] = "numComp";
+static const char __pyx_k_nz_used[] = "nz_used";
+static const char __pyx_k_objgrad[] = "objgrad";
+static const char __pyx_k_options[] = "options";
+static const char __pyx_k_overlap[] = "overlap";
+static const char __pyx_k_pc_type[] = "pc_type";
+static const char __pyx_k_prepare[] = "__prepare__";
+static const char __pyx_k_prestep[] = "prestep";
+static const char __pyx_k_py_type[] = "py_type";
+static const char __pyx_k_release[] = "release";
+static const char __pyx_k_replace[] = "replace";
+static const char __pyx_k_restart[] = "restart";
+static const char __pyx_k_reverse[] = "reverse";
+static const char __pyx_k_scatter[] = "scatter";
+static const char __pyx_k_seconds[] = "seconds";
+static const char __pyx_k_setName[] = "setName";
+static const char __pyx_k_setSeed[] = "setSeed";
+static const char __pyx_k_setTime[] = "setTime";
+static const char __pyx_k_setType[] = "setType";
+static const char __pyx_k_sf_type[] = "sf_type";
+static const char __pyx_k_smooths[] = "smooths";
+static const char __pyx_k_sortype[] = "sortype";
+static const char __pyx_k_strides[] = "strides";
+static const char __pyx_k_subcomm[] = "subcomm";
+static const char __pyx_k_submats[] = "submats";
+static const char __pyx_k_ts_type[] = "ts_type";
+static const char __pyx_k_typestr[] = "typestr";
+static const char __pyx_k_useCone[] = "useCone";
+static const char __pyx_k_vectors[] = "vectors";
+static const char __pyx_k_version[] = "version";
+static const char __pyx_k_ADDITIVE[] = "ADDITIVE";
+static const char __pyx_k_ADVANCED[] = "ADVANCED";
+static const char __pyx_k_AINVCUSP[] = "AINVCUSP";
+static const char __pyx_k_ANDERSON[] = "ANDERSON";
+static const char __pyx_k_BLOCKMAT[] = "BLOCKMAT";
+static const char __pyx_k_CHOLESKY[] = "CHOLESKY";
+static const char __pyx_k_DrawSize[] = "DrawSize";
+static const char __pyx_k_EXPLICIT[] = "EXPLICIT";
+static const char __pyx_k_Ellipsis[] = "Ellipsis";
+static const char __pyx_k_FileMode[] = "FileMode";
+static const char __pyx_k_GALERKIN[] = "GALERKIN";
+static const char __pyx_k_GAMGType[] = "GAMGType";
+static const char __pyx_k_GASMType[] = "GASMType";
+static const char __pyx_k_Get_rank[] = "Get_rank";
+static const char __pyx_k_Get_size[] = "Get_size";
+static const char __pyx_k_HDF5_VIZ[] = "HDF5_VIZ";
+static const char __pyx_k_IMPLICIT[] = "IMPLICIT";
+static const char __pyx_k_INBLOCKS[] = "INBLOCKS";
+static const char __pyx_k_INFINITY[] = "INFINITY";
+static const char __pyx_k_InfoType[] = "InfoType";
+static const char __pyx_k_KACZMARZ[] = "KACZMARZ";
+static const char __pyx_k_KeyError[] = "KeyError";
+static const char __pyx_k_LOCALREF[] = "LOCALREF";
+static const char __pyx_k_MPIBSTRM[] = "MPIBSTRM";
+static const char __pyx_k_MPIDENSE[] = "MPIDENSE";
+static const char __pyx_k_MPISBAIJ[] = "MPISBAIJ";
+static const char __pyx_k_NEWTONLS[] = "NEWTONLS";
+static const char __pyx_k_NEWTONTR[] = "NEWTONTR";
+static const char __pyx_k_NOFORMAT[] = "NOFORMAT";
+static const char __pyx_k_NORM_MAX[] = "NORM_MAX";
+static const char __pyx_k_NormType[] = "NormType";
+static const char __pyx_k_PARMETIS[] = "PARMETIS";
+static const char __pyx_k_PBJACOBI[] = "PBJACOBI";
+static const char __pyx_k_PCMGType[] = "PCMGType";
+static const char __pyx_k_PERIODIC[] = "PERIODIC";
+static const char __pyx_k_PIPECGRR[] = "PIPECGRR";
+static const char __pyx_k_POUNDERS[] = "POUNDERS";
+static const char __pyx_k_RANDER48[] = "RANDER48";
+static const char __pyx_k_RESTRICT[] = "RESTRICT";
+static const char __pyx_k_RealType[] = "RealType";
+static const char __pyx_k_SEQBSTRM[] = "SEQBSTRM";
+static const char __pyx_k_SEQCUFFT[] = "SEQCUFFT";
+static const char __pyx_k_SEQDENSE[] = "SEQDENSE";
+static const char __pyx_k_SEQSBAIJ[] = "SEQSBAIJ";
+static const char __pyx_k_SNESType[] = "SNESType";
+static const char __pyx_k_SPECTRAL[] = "SPECTRAL";
+static const char __pyx_k_STANDARD[] = "STANDARD";
+static const char __pyx_k_STEPOVER[] = "STEPOVER";
+static const char __pyx_k_SUNDIALS[] = "SUNDIALS";
+static const char __pyx_k_VIENNACL[] = "VIENNACL";
+static const char __pyx_k_addFlops[] = "addFlops";
+static const char __pyx_k_assembly[] = "assembly";
+static const char __pyx_k_bcPoints[] = "bcPoints";
+static const char __pyx_k_boundary[] = "boundary";
+static const char __pyx_k_buffer_w[] = "buffer_w";
+static const char __pyx_k_citation[] = "citation";
+static const char __pyx_k_constant[] = "constant";
+static const char __pyx_k_debugger[] = "debugger";
+static const char __pyx_k_delValue[] = "delValue";
+static const char __pyx_k_end_args[] = "end_args";
+static const char __pyx_k_filename[] = "filename";
+static const char __pyx_k_finalize[] = "_finalize";
+static const char __pyx_k_function[] = "function";
+static const char __pyx_k_gamgtype[] = "gamgtype";
+static const char __pyx_k_gasmtype[] = "gasmtype";
+static const char __pyx_k_getArray[] = "getArray";
+static const char __pyx_k_getFlops[] = "getFlops";
+static const char __pyx_k_getSizes[] = "getSizes";
+static const char __pyx_k_getUseEW[] = "getUseEW";
+static const char __pyx_k_getUseFD[] = "getUseFD";
+static const char __pyx_k_getUseMF[] = "getUseMF";
+static const char __pyx_k_getValue[] = "getValue";
+static const char __pyx_k_gradient[] = "gradient";
+static const char __pyx_k_hasLabel[] = "hasLabel";
+static const char __pyx_k_inblocks[] = "inblocks";
+static const char __pyx_k_interval[] = "interval";
+static const char __pyx_k_isSorted[] = "isSorted";
+static const char __pyx_k_itemsize[] = "itemsize";
+static const char __pyx_k_jacobian[] = "jacobian";
+static const char __pyx_k_ksp_type[] = "ksp_type";
+static const char __pyx_k_localsec[] = "localsec";
+static const char __pyx_k_logFlops[] = "logFlops";
+static const char __pyx_k_map_type[] = "map_type";
+static const char __pyx_k_mat_type[] = "mat_type";
+static const char __pyx_k_max_time[] = "max_time";
+static const char __pyx_k_mpiabort[] = "mpiabort";
+static const char __pyx_k_normtype[] = "normtype";
+static const char __pyx_k_nsubcomm[] = "nsubcomm";
+static const char __pyx_k_numProcs[] = "numProcs";
+static const char __pyx_k_numcells[] = "numcells";
+static const char __pyx_k_only_and[] = "only '==' and '!='";
+static const char __pyx_k_ord_type[] = "ord_type";
+static const char __pyx_k_periodic[] = "periodic";
+static const char __pyx_k_position[] = "position";
+static const char __pyx_k_poststep[] = "poststep";
+static const char __pyx_k_qualname[] = "__qualname__";
+static const char __pyx_k_readonly[] = "readonly";
+static const char __pyx_k_refine_x[] = "refine_x";
+static const char __pyx_k_refine_y[] = "refine_y";
+static const char __pyx_k_refine_z[] = "refine_z";
+static const char __pyx_k_rnd_type[] = "rnd_type";
+static const char __pyx_k_rtol_max[] = "rtol_max";
+static const char __pyx_k_setSizes[] = "setSizes";
+static const char __pyx_k_setUseEW[] = "setUseEW";
+static const char __pyx_k_setUseFD[] = "setUseFD";
+static const char __pyx_k_setUseMF[] = "setUseMF";
+static const char __pyx_k_setValue[] = "setValue";
+static const char __pyx_k_subminor[] = "subminor";
+static const char __pyx_k_tao_type[] = "tao_type";
+static const char __pyx_k_timestep[] = "timestep";
+static const char __pyx_k_vec_from[] = "vec_from";
+static const char __pyx_k_vec_type[] = "vec_type";
+static const char __pyx_k_vwr_type[] = "vwr_type";
+static const char __pyx_k_ASCII_VTK[] = "ASCII_VTK";
+static const char __pyx_k_ASCII_XML[] = "ASCII_XML";
+static const char __pyx_k_CARTESIAN[] = "CARTESIAN";
+static const char __pyx_k_CHEBYSHEV[] = "CHEBYSHEV";
+static const char __pyx_k_CLASSICAL[] = "CLASSICAL";
+static const char __pyx_k_COMM_NULL[] = "COMM_NULL";
+static const char __pyx_k_COMM_SELF[] = "COMM_SELF";
+static const char __pyx_k_COMPOSITE[] = "COMPOSITE";
+static const char __pyx_k_DETERMINE[] = "DETERMINE";
+static const char __pyx_k_DIFFERENT[] = "DIFFERENT";
+static const char __pyx_k_EISENSTAT[] = "EISENSTAT";
+static const char __pyx_k_ELEMENTAL[] = "ELEMENTAL";
+static const char __pyx_k_FROBENIUS[] = "FROBENIUS";
+static const char __pyx_k_FULL_SIZE[] = "FULL_SIZE";
+static const char __pyx_k_GLMapType[] = "GLMapType";
+static const char __pyx_k_HALF_SIZE[] = "HALF_SIZE";
+static const char __pyx_k_HERMITIAN[] = "HERMITIAN";
+static const char __pyx_k_INSERT_BC[] = "INSERT_BC";
+static const char __pyx_k_ITERATING[] = "ITERATING";
+static const char __pyx_k_MATCHSTEP[] = "MATCHSTEP";
+static const char __pyx_k_MPIAIJCRL[] = "MPIAIJCRL";
+static const char __pyx_k_MPISBSTRM[] = "MPISBSTRM";
+static const char __pyx_k_MatOption[] = "MatOption";
+static const char __pyx_k_NINFINITY[] = "NINFINITY";
+static const char __pyx_k_NONLINEAR[] = "NONLINEAR";
+static const char __pyx_k_NORM_NONE[] = "NORM_NONE";
+static const char __pyx_k_PCASMType[] = "PCASMType";
+static const char __pyx_k_PINFINITY[] = "PINFINITY";
+static const char __pyx_k_REDUNDANT[] = "REDUNDANT";
+static const char __pyx_k_ROWLENGTH[] = "ROWLENGTH";
+static const char __pyx_k_SEQAIJCRL[] = "SEQAIJCRL";
+static const char __pyx_k_SEQSBSTRM[] = "SEQSBSTRM";
+static const char __pyx_k_SUBMATRIX[] = "SUBMATRIX";
+static const char __pyx_k_SUBSET_NZ[] = "SUBSET_NZ";
+static const char __pyx_k_SYMMETRIC[] = "SYMMETRIC";
+static const char __pyx_k_Structure[] = "Structure";
+static const char __pyx_k_TELESCOPE[] = "TELESCOPE";
+static const char __pyx_k_TypeError[] = "TypeError";
+static const char __pyx_k_VecOption[] = "VecOption";
+static const char __pyx_k_col_bsize[] = "col_bsize";
+static const char __pyx_k_conePoint[] = "conePoint";
+static const char __pyx_k_converged[] = "converged";
+static const char __pyx_k_createMat[] = "createMat";
+static const char __pyx_k_duplicate[] = "duplicate";
+static const char __pyx_k_elem_type[] = "elem_type";
+static const char __pyx_k_end_kargs[] = "end_kargs";
+static const char __pyx_k_enumerate[] = "enumerate";
+static const char __pyx_k_fieldName[] = "fieldName";
+static const char __pyx_k_getActive[] = "getActive";
+static const char __pyx_k_getAppCtx[] = "getAppCtx";
+static const char __pyx_k_getBuffer[] = "getBuffer";
+static const char __pyx_k_getMatrix[] = "getMatrix";
+static const char __pyx_k_getNumber[] = "getNumber";
+static const char __pyx_k_getPCSide[] = "getPCSide";
+static const char __pyx_k_getRanges[] = "getRanges";
+static const char __pyx_k_getString[] = "getString";
+static const char __pyx_k_globalsec[] = "globalsec";
+static const char __pyx_k_hypretype[] = "hypretype";
+static const char __pyx_k_infoAllow[] = "infoAllow";
+static const char __pyx_k_max_fails[] = "max_fails";
+static const char __pyx_k_max_funcs[] = "max_funcs";
+static const char __pyx_k_max_steps[] = "max_steps";
+static const char __pyx_k_metaclass[] = "__metaclass__";
+static const char __pyx_k_nonzero_2[] = "__nonzero__";
+static const char __pyx_k_norm_type[] = "norm_type";
+static const char __pyx_k_normsched[] = "normsched";
+static const char __pyx_k_numFields[] = "numFields";
+static const char __pyx_k_objective[] = "objective";
+static const char __pyx_k_operators[] = "operators";
+static const char __pyx_k_part_type[] = "part_type";
+static const char __pyx_k_row_bsize[] = "row_bsize";
+static const char __pyx_k_separable[] = "separable";
+static const char __pyx_k_setActive[] = "setActive";
+static const char __pyx_k_setAppCtx[] = "setAppCtx";
+static const char __pyx_k_setPCSide[] = "setPCSide";
+static const char __pyx_k_shifttype[] = "shifttype";
+static const char __pyx_k_snes_type[] = "snes_type";
+static const char __pyx_k_structure[] = "structure";
+static const char __pyx_k_symmetric[] = "symmetric";
+static const char __pyx_k_syncFlush[] = "syncFlush";
+static const char __pyx_k_syncPrint[] = "syncPrint";
+static const char __pyx_k_threshold[] = "threshold";
+static const char __pyx_k_time_step[] = "time_step";
+static const char __pyx_k_traceback[] = "_traceback_";
+static const char __pyx_k_transpose[] = "transpose";
+static const char __pyx_k_varbounds[] = "varbounds";
+static const char __pyx_k_zeropivot[] = "zeropivot";
+static const char __pyx_k_ADD_VALUES[] = "ADD_VALUES";
+static const char __pyx_k_ASCII_IMPL[] = "ASCII_IMPL";
+static const char __pyx_k_ASCII_INFO[] = "ASCII_INFO";
+static const char __pyx_k_COMM_WORLD[] = "COMM_WORLD";
+static const char __pyx_k_DRAW_BASIC[] = "DRAW_BASIC";
+static const char __pyx_k_DRAW_PORTS[] = "DRAW_PORTS";
+static const char __pyx_k_FIELDSPLIT[] = "FIELDSPLIT";
+static const char __pyx_k_FINAL_ONLY[] = "FINAL_ONLY";
+static const char __pyx_k_GLOBAL_MAX[] = "GLOBAL_MAX";
+static const char __pyx_k_GLOBAL_SUM[] = "GLOBAL_SUM";
+static const char __pyx_k_INSERT_ALL[] = "INSERT_ALL";
+static const char __pyx_k_InsertMode[] = "InsertMode";
+static const char __pyx_k_MAX_VALUES[] = "MAX_VALUES";
+static const char __pyx_k_MPIAIJCUSP[] = "MPIAIJCUSP";
+static const char __pyx_k_MPIAIJPERM[] = "MPIAIJPERM";
+static const char __pyx_k_MatSORType[] = "MatSORType";
+static const char __pyx_k_PCGAMGType[] = "PCGAMGType";
+static const char __pyx_k_PCGASMType[] = "PCGASMType";
+static const char __pyx_k_PIPEFGMRES[] = "PIPEFGMRES";
+static const char __pyx_k_RICHARDSON[] = "RICHARDSON";
+static const char __pyx_k_RandomType[] = "RandomType";
+static const char __pyx_k_SACUSPPOLY[] = "SACUSPPOLY";
+static const char __pyx_k_SEQAIJCUSP[] = "SEQAIJCUSP";
+static const char __pyx_k_SEQAIJPERM[] = "SEQAIJPERM";
+static const char __pyx_k_ScalarType[] = "ScalarType";
+static const char __pyx_k_THIRD_SIZE[] = "THIRD_SIZE";
+static const char __pyx_k_USE_INODES[] = "USE_INODES";
+static const char __pyx_k_ValueError[] = "ValueError";
+static const char __pyx_k_ViewerType[] = "ViewerType";
+static const char __pyx_k_assemblies[] = "assemblies";
+static const char __pyx_k_authorinfo[] = "authorinfo";
+static const char __pyx_k_begin_args[] = "begin_args";
+static const char __pyx_k_block_size[] = "block_size";
+static const char __pyx_k_compressed[] = "compressed";
+static const char __pyx_k_createVecs[] = "createVecs";
+static const char __pyx_k_empty_name[] = "empty name";
+static const char __pyx_k_errhandler[] = "errhandler";
+static const char __pyx_k_getCPUTime[] = "getCPUTime";
+static const char __pyx_k_getClassId[] = "getClassId";
+static const char __pyx_k_getCorners[] = "getCorners";
+static const char __pyx_k_getIndices[] = "getIndices";
+static const char __pyx_k_getMaxTime[] = "getMaxTime";
+static const char __pyx_k_getStencil[] = "getStencil";
+static const char __pyx_k_getVecLeft[] = "getVecLeft";
+static const char __pyx_k_getVersion[] = "getVersion";
+static const char __pyx_k_getVisible[] = "getVisible";
+static const char __pyx_k_initialize[] = "_initialize";
+static const char __pyx_k_isIdentity[] = "isIdentity";
+static const char __pyx_k_linear_its[] = "linear_its";
+static const char __pyx_k_mpi4py_MPI[] = "mpi4py.MPI";
+static const char __pyx_k_proc_sizes[] = "proc_sizes";
+static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+static const char __pyx_k_reciprocal[] = "reciprocal";
+static const char __pyx_k_setMaxTime[] = "setMaxTime";
+static const char __pyx_k_setVisible[] = "setVisible";
+static const char __pyx_k_shift_type[] = "shift_type";
+static const char __pyx_k_startswith[] = "startswith";
+static const char __pyx_k_useClosure[] = "useClosure";
+static const char __pyx_k_AIJCUSPARSE[] = "AIJCUSPARSE";
+static const char __pyx_k_AIJVIENNACL[] = "AIJVIENNACL";
+static const char __pyx_k_APPLY_LOWER[] = "APPLY_LOWER";
+static const char __pyx_k_APPLY_UPPER[] = "APPLY_UPPER";
+static const char __pyx_k_ASCII_DENSE[] = "ASCII_DENSE";
+static const char __pyx_k_ASCII_INDEX[] = "ASCII_INDEX";
+static const char __pyx_k_ASCII_LATEX[] = "ASCII_LATEX";
+static const char __pyx_k_ASCII_PCICE[] = "ASCII_PCICE";
+static const char __pyx_k_ComplexType[] = "ComplexType";
+static const char __pyx_k_ElementType[] = "ElementType";
+static const char __pyx_k_Error___str[] = "Error.__str__";
+static const char __pyx_k_HYPRESTRUCT[] = "HYPRESTRUCT";
+static const char __pyx_k_INTERPOLATE[] = "INTERPOLATE";
+static const char __pyx_k_KSPNormType[] = "KSPNormType";
+static const char __pyx_k_MATHEMATICA[] = "MATHEMATICA";
+static const char __pyx_k_MPIVIENNACL[] = "MPIVIENNACL";
+static const char __pyx_k_MatInfoType[] = "MatInfoType";
+static const char __pyx_k_MemoryError[] = "MemoryError";
+static const char __pyx_k_NORM_ALWAYS[] = "NORM_ALWAYS";
+static const char __pyx_k_NRICHARDSON[] = "NRICHARDSON";
+static const char __pyx_k_ProblemType[] = "ProblemType";
+static const char __pyx_k_RUNGE_KUTTA[] = "RUNGE_KUTTA";
+static const char __pyx_k_SEQVIENNACL[] = "SEQVIENNACL";
+static const char __pyx_k_ScatterMode[] = "ScatterMode";
+static const char __pyx_k_StencilType[] = "StencilType";
+static const char __pyx_k_SystemError[] = "SystemError";
+static const char __pyx_k_UNSPECIFIED[] = "UNSPECIFIED";
+static const char __pyx_k_begin_kargs[] = "begin_kargs";
+static const char __pyx_k_constraints[] = "constraints";
+static const char __pyx_k_coordinates[] = "coordinates";
+static const char __pyx_k_createLabel[] = "createLabel";
+static const char __pyx_k_create_gvec[] = "create_gvec";
+static const char __pyx_k_create_lvec[] = "create_lvec";
+static const char __pyx_k_getGradient[] = "getGradient";
+static const char __pyx_k_getInterval[] = "getInterval";
+static const char __pyx_k_getMaxSteps[] = "getMaxSteps";
+static const char __pyx_k_getNormType[] = "getNormType";
+static const char __pyx_k_getNumberDM[] = "getNumberDM";
+static const char __pyx_k_getRefCount[] = "getRefCount";
+static const char __pyx_k_getSolution[] = "getSolution";
+static const char __pyx_k_getTimeStep[] = "getTimeStep";
+static const char __pyx_k_getVecRight[] = "getVecRight";
+static const char __pyx_k_hasLagrange[] = "hasLagrange";
+static const char __pyx_k_interp_type[] = "interp_type";
+static const char __pyx_k_interpolate[] = "interpolate";
+static const char __pyx_k_isAssembled[] = "isAssembled";
+static const char __pyx_k_isFinalized[] = "isFinalized";
+static const char __pyx_k_isHermitian[] = "isHermitian";
+static const char __pyx_k_isSymmetric[] = "isSymmetric";
+static const char __pyx_k_numMessages[] = "numMessages";
+static const char __pyx_k_nz_unneeded[] = "nz_unneeded";
+static const char __pyx_k_orientation[] = "orientation";
+static const char __pyx_k_setDiagonal[] = "setDiagonal";
+static const char __pyx_k_setInterval[] = "setInterval";
+static const char __pyx_k_setMaxSteps[] = "setMaxSteps";
+static const char __pyx_k_setNormType[] = "setNormType";
+static const char __pyx_k_setParamsEW[] = "setParamsEW";
+static const char __pyx_k_setTimeStep[] = "setTimeStep";
+static const char __pyx_k_shiftamount[] = "shiftamount";
+static const char __pyx_k_step_number[] = "step_number";
+static const char __pyx_k_traceback_2[] = "traceback";
+static const char __pyx_k_ASCII_COMMON[] = "ASCII_COMMON";
+static const char __pyx_k_ASCII_MATLAB[] = "ASCII_MATLAB";
+static const char __pyx_k_ASCII_PYTHON[] = "ASCII_PYTHON";
+static const char __pyx_k_AssemblyType[] = "AssemblyType";
+static const char __pyx_k_BICGSTABCUSP[] = "BICGSTABCUSP";
+static const char __pyx_k_BoundaryType[] = "BoundaryType";
+static const char __pyx_k_DIFFERENT_NZ[] = "DIFFERENT_NZ";
+static const char __pyx_k_DIVERGED_NAN[] = "DIVERGED_NAN";
+static const char __pyx_k_DRAW_CONTOUR[] = "DRAW_CONTOUR";
+static const char __pyx_k_EquationType[] = "EquationType";
+static const char __pyx_k_Error___init[] = "Error.__init__";
+static const char __pyx_k_Error___repr[] = "Error.__repr__";
+static const char __pyx_k_HYPRESSTRUCT[] = "HYPRESSTRUCT";
+static const char __pyx_k_INITIAL_ONLY[] = "INITIAL_ONLY";
+static const char __pyx_k_MatStructure[] = "MatStructure";
+static const char __pyx_k_NORM_1_AND_2[] = "NORM_1_AND_2";
+static const char __pyx_k_NORM_DEFAULT[] = "NORM_DEFAULT";
+static const char __pyx_k_NORM_NATURAL[] = "NORM_NATURAL";
+static const char __pyx_k_NormSchedule[] = "NormSchedule";
+static const char __pyx_k_ODE_EXPLICIT[] = "ODE_EXPLICIT";
+static const char __pyx_k_ODE_IMPLICIT[] = "ODE_IMPLICIT";
+static const char __pyx_k_OrderingType[] = "OrderingType";
+static const char __pyx_k_PREALLOCATOR[] = "PREALLOCATOR";
+static const char __pyx_k_QUARTER_SIZE[] = "QUARTER_SIZE";
+static const char __pyx_k_REDISTRIBUTE[] = "REDISTRIBUTE";
+static const char __pyx_k_ROW_ORIENTED[] = "ROW_ORIENTED";
+static const char __pyx_k_RuntimeError[] = "RuntimeError";
+static const char __pyx_k_SchurPreType[] = "SchurPreType";
+static const char __pyx_k_TRANSPOSEMAT[] = "TRANSPOSEMAT";
+static const char __pyx_k_VINEWTONRSLS[] = "VINEWTONRSLS";
+static const char __pyx_k_VINEWTONSSLS[] = "VINEWTONSSLS";
+static const char __pyx_k_ViewerFormat[] = "ViewerFormat";
+static const char __pyx_k_createMatrix[] = "createMatrix";
+static const char __pyx_k_create_subdm[] = "create_subdm";
+static const char __pyx_k_error_code_d[] = "error code %d";
+static const char __pyx_k_getActiveAll[] = "getActiveAll";
+static const char __pyx_k_getBlockInfo[] = "getBlockInfo";
+static const char __pyx_k_getBlockSize[] = "getBlockSize";
+static const char __pyx_k_getClassName[] = "getClassName";
+static const char __pyx_k_getDimension[] = "getDimension";
+static const char __pyx_k_getLocalSize[] = "getLocalSize";
+static const char __pyx_k_getOperators[] = "getOperators";
+static const char __pyx_k_getProcSizes[] = "getProcSizes";
+static const char __pyx_k_initial_time[] = "initial_time";
+static const char __pyx_k_initialguess[] = "initialguess";
+static const char __pyx_k_nz_allocated[] = "nz_allocated";
+static const char __pyx_k_setActiveAll[] = "setActiveAll";
+static const char __pyx_k_setDimension[] = "setDimension";
+static const char __pyx_k_stencil_type[] = "stencil_type";
+static const char __pyx_k_ADD_BC_VALUES[] = "ADD_BC_VALUES";
+static const char __pyx_k_APPEND_UPDATE[] = "APPEND_UPDATE";
+static const char __pyx_k_ASCII_SYMMODU[] = "ASCII_SYMMODU";
+static const char __pyx_k_BINARY_MATLAB[] = "BINARY_MATLAB";
+static const char __pyx_k_CONVERGED_ITS[] = "CONVERGED_ITS";
+static const char __pyx_k_CompositeType[] = "CompositeType";
+static const char __pyx_k_DIVERGED_DTOL[] = "DIVERGED_DTOL";
+static const char __pyx_k_DIVERGED_NULL[] = "DIVERGED_NULL";
+static const char __pyx_k_DIVERGED_USER[] = "DIVERGED_USER";
+static const char __pyx_k_FORWARD_LOCAL[] = "FORWARD_LOCAL";
+static const char __pyx_k_FORWARD_SWEEP[] = "FORWARD_SWEEP";
+static const char __pyx_k_INSERT_VALUES[] = "INSERT_VALUES";
+static const char __pyx_k_NEW_DIAGONALS[] = "NEW_DIAGONALS";
+static const char __pyx_k_NORM_INFINITY[] = "NORM_INFINITY";
+static const char __pyx_k_PETSc_Error_d[] = "PETSc.Error(%d)";
+static const char __pyx_k_REVERSE_LOCAL[] = "REVERSE_LOCAL";
+static const char __pyx_k_SCATTER_LOCAL[] = "SCATTER_LOCAL";
+static const char __pyx_k_SchurFactType[] = "SchurFactType";
+static const char __pyx_k_TSProblemType[] = "TSProblemType";
+static const char __pyx_k_boundary_type[] = "boundary_type";
+static const char __pyx_k_createVecLeft[] = "createVecLeft";
+static const char __pyx_k_create_matrix[] = "create_matrix";
+static const char __pyx_k_diagonalScale[] = "diagonalScale";
+static const char __pyx_k_diagonal_fill[] = "diagonal_fill";
+static const char __pyx_k_getBlockSizes[] = "getBlockSizes";
+static const char __pyx_k_getStepNumber[] = "getStepNumber";
+static const char __pyx_k_getTolerances[] = "getTolerances";
+static const char __pyx_k_isInitialized[] = "isInitialized";
+static const char __pyx_k_isPermutation[] = "isPermutation";
+static const char __pyx_k_messageLength[] = "messageLength";
+static const char __pyx_k_numReductions[] = "numReductions";
+static const char __pyx_k_s_line_d_in_s[] = "%s() line %d in %s";
+static const char __pyx_k_setStepNumber[] = "setStepNumber";
+static const char __pyx_k_setTolerances[] = "setTolerances";
+static const char __pyx_k_stencil_width[] = "stencil_width";
+static const char __pyx_k_type_registry[] = "__type_registry__";
+static const char __pyx_k_ADD_ALL_VALUES[] = "ADD_ALL_VALUES";
+static const char __pyx_k_ASCII_VTK_CELL[] = "ASCII_VTK_CELL";
+static const char __pyx_k_AttributeError[] = "AttributeError";
+static const char __pyx_k_BACKWARD_SWEEP[] = "BACKWARD_SWEEP";
+static const char __pyx_k_CONVERGED_ATOL[] = "CONVERGED_ATOL";
+static const char __pyx_k_CONVERGED_MINF[] = "CONVERGED_MINF";
+static const char __pyx_k_CONVERGED_RTOL[] = "CONVERGED_RTOL";
+static const char __pyx_k_CONVERGED_TIME[] = "CONVERGED_TIME";
+static const char __pyx_k_CONVERGED_USER[] = "CONVERGED_USER";
+static const char __pyx_k_CRANK_NICOLSON[] = "CRANK_NICOLSON";
+static const char __pyx_k_DIVERGED_INNER[] = "DIVERGED_INNER";
+static const char __pyx_k_DMBoundaryType[] = "DMBoundaryType";
+static const char __pyx_k_ExactFinalTime[] = "ExactFinalTime";
+static const char __pyx_k_FINAL_ASSEMBLY[] = "FINAL_ASSEMBLY";
+static const char __pyx_k_FLUSH_ASSEMBLY[] = "FLUSH_ASSEMBLY";
+static const char __pyx_k_MEMORYSCALABLE[] = "MEMORYSCALABLE";
+static const char __pyx_k_MPIAIJCUSPARSE[] = "MPIAIJCUSPARSE";
+static const char __pyx_k_MPIAIJVIENNACL[] = "MPIAIJVIENNACL";
+static const char __pyx_k_MULTIPLICATIVE[] = "MULTIPLICATIVE";
+static const char __pyx_k_NORM_FROBENIUS[] = "NORM_FROBENIUS";
+static const char __pyx_k_NOT_SET_VALUES[] = "NOT_SET_VALUES";
+static const char __pyx_k_NotImplemented[] = "NotImplemented";
+static const char __pyx_k_PRECONDITIONED[] = "PRECONDITIONED";
+static const char __pyx_k_SEQAIJCUSPARSE[] = "SEQAIJCUSPARSE";
+static const char __pyx_k_SEQAIJVIENNACL[] = "SEQAIJVIENNACL";
+static const char __pyx_k_SYMMETRY_SWEEP[] = "SYMMETRY_SWEEP";
+static const char __pyx_k_TSEquationType[] = "TSEquationType";
+static const char __pyx_k_USE_HASH_TABLE[] = "USE_HASH_TABLE";
+static const char __pyx_k_createLocalVec[] = "createLocalVec";
+static const char __pyx_k_createVecRight[] = "createVecRight";
+static const char __pyx_k_empty_citation[] = "empty citation";
+static const char __pyx_k_factor_mallocs[] = "factor_mallocs";
+static const char __pyx_k_getDefaultComm[] = "getDefaultComm";
+static const char __pyx_k_getGhostRanges[] = "getGhostRanges";
+static const char __pyx_k_getKSPFailures[] = "getKSPFailures";
+static const char __pyx_k_getProblemType[] = "getProblemType";
+static const char __pyx_k_getStencilType[] = "getStencilType";
+static const char __pyx_k_getVersionInfo[] = "getVersionInfo";
+static const char __pyx_k_jacobian_state[] = "jacobian_state";
+static const char __pyx_k_petsc4py_PETSc[] = "petsc4py.PETSc";
+static const char __pyx_k_setDefaultComm[] = "setDefaultComm";
+static const char __pyx_k_setProblemType[] = "setProblemType";
+static const char __pyx_k_splitOwnership[] = "splitOwnership";
+static const char __pyx_k_CONVERGED_EVENT[] = "CONVERGED_EVENT";
+static const char __pyx_k_CONVERGED_GATOL[] = "CONVERGED_GATOL";
+static const char __pyx_k_CONVERGED_GRTOL[] = "CONVERGED_GRTOL";
+static const char __pyx_k_CONVERGED_GTTOL[] = "CONVERGED_GTTOL";
+static const char __pyx_k_ConvergedReason[] = "ConvergedReason";
+static const char __pyx_k_DIVERGED_MAXFCN[] = "DIVERGED_MAXFCN";
+static const char __pyx_k_DIVERGED_MAXITS[] = "DIVERGED_MAXITS";
+static const char __pyx_k_DIVERGED_MAX_IT[] = "DIVERGED_MAX_IT";
+static const char __pyx_k_DMDAElementType[] = "DMDAElementType";
+static const char __pyx_k_DMDAStencilType[] = "DMDAStencilType";
+static const char __pyx_k_Error___nonzero[] = "Error.__nonzero__";
+static const char __pyx_k_FactorShiftType[] = "FactorShiftType";
+static const char __pyx_k_MatAssemblyType[] = "MatAssemblyType";
+static const char __pyx_k_MatOrderingType[] = "MatOrderingType";
+static const char __pyx_k_NORMALHERMITIAN[] = "NORMALHERMITIAN";
+static const char __pyx_k_NORM_FINAL_ONLY[] = "NORM_FINAL_ONLY";
+static const char __pyx_k_PCCompositeType[] = "PCCompositeType";
+static const char __pyx_k_PartitionerType[] = "PartitionerType";
+static const char __pyx_k_SCATTER_FORWARD[] = "SCATTER_FORWARD";
+static const char __pyx_k_SCATTER_REVERSE[] = "SCATTER_REVERSE";
+static const char __pyx_k_SCHURCOMPLEMENT[] = "SCHURCOMPLEMENT";
+static const char __pyx_k_array_interface[] = "__array_interface__";
+static const char __pyx_k_coneOrientation[] = "coneOrientation";
+static const char __pyx_k_createGlobalVec[] = "createGlobalVec";
+static const char __pyx_k_getBlockIndices[] = "getBlockIndices";
+static const char __pyx_k_getBoundaryType[] = "getBoundaryType";
+static const char __pyx_k_getEquationType[] = "getEquationType";
+static const char __pyx_k_getGhostCorners[] = "getGhostCorners";
+static const char __pyx_k_getResidualNorm[] = "getResidualNorm";
+static const char __pyx_k_getSolutionNorm[] = "getSolutionNorm";
+static const char __pyx_k_getStencilWidth[] = "getStencilWidth";
+static const char __pyx_k_getStepFailures[] = "getStepFailures";
+static const char __pyx_k_jacobian_design[] = "jacobian_design";
+static const char __pyx_k_popErrorHandler[] = "popErrorHandler";
+static const char __pyx_k_prefix_s_name_s[] = "(prefix:%s, name:%s)";
+static const char __pyx_k_refinementLimit[] = "refinementLimit";
+static const char __pyx_k_setEquationType[] = "setEquationType";
+static const char __pyx_k_setResidualNorm[] = "setResidualNorm";
+static const char __pyx_k_ASCII_VTK_COORDS[] = "ASCII_VTK_COORDS";
+static const char __pyx_k_INSERT_BC_VALUES[] = "INSERT_BC_VALUES";
+static const char __pyx_k_SNESNormSchedule[] = "SNESNormSchedule";
+static const char __pyx_k_SYMMETRY_ETERNAL[] = "SYMMETRY_ETERNAL";
+static const char __pyx_k_TAO_Solver_Types[] = "\n    TAO Solver Types\n    ";
+static const char __pyx_k_TSExactFinalTime[] = "TSExactFinalTime";
+static const char __pyx_k_UNPRECONDITIONED[] = "UNPRECONDITIONED";
+static const char __pyx_k_createNaturalVec[] = "createNaturalVec";
+static const char __pyx_k_create_injection[] = "create_injection";
+static const char __pyx_k_fill_ratio_given[] = "fill_ratio_given";
+static const char __pyx_k_getFunctionValue[] = "getFunctionValue";
+static const char __pyx_k_getOptionsPrefix[] = "getOptionsPrefix";
+static const char __pyx_k_ownership_ranges[] = "ownership_ranges";
+static const char __pyx_k_pushErrorHandler[] = "pushErrorHandler";
+static const char __pyx_k_registerCitation[] = "registerCitation";
+static const char __pyx_k_setOptionsPrefix[] = "setOptionsPrefix";
+static const char __pyx_k_ASCII_FACTOR_INFO[] = "ASCII_FACTOR_INFO";
+static const char __pyx_k_ASCII_INFO_DETAIL[] = "ASCII_INFO_DETAIL";
+static const char __pyx_k_ASCII_MATHEMATICA[] = "ASCII_MATHEMATICA";
+static const char __pyx_k_CONVERGED_STEPTOL[] = "CONVERGED_STEPTOL";
+static const char __pyx_k_DIVERGED_NANORINF[] = "DIVERGED_NANORINF";
+static const char __pyx_k_INSERT_ALL_VALUES[] = "INSERT_ALL_VALUES";
+static const char __pyx_k_InterpolationType[] = "InterpolationType";
+static const char __pyx_k_NORM_INITIAL_ONLY[] = "NORM_INITIAL_ONLY";
+static const char __pyx_k_POSITIVE_DEFINITE[] = "POSITIVE_DEFINITE";
+static const char __pyx_k_TSConvergedReason[] = "TSConvergedReason";
+static const char __pyx_k_createLocalVector[] = "createLocalVector";
+static const char __pyx_k_fill_ratio_needed[] = "fill_ratio_needed";
+static const char __pyx_k_getMaxKSPFailures[] = "getMaxKSPFailures";
+static const char __pyx_k_getObjectiveValue[] = "getObjectiveValue";
+static const char __pyx_k_getOwnershipRange[] = "getOwnershipRange";
+static const char __pyx_k_getSolutionUpdate[] = "getSolutionUpdate";
+static const char __pyx_k_initial_time_step[] = "initial_time_step";
+static const char __pyx_k_null_communicator[] = "null communicator";
+static const char __pyx_k_positive_definite[] = "positive_definite";
+static const char __pyx_k_refinementUniform[] = "refinementUniform";
+static const char __pyx_k_setMaxKSPFailures[] = "setMaxKSPFailures";
+static const char __pyx_k_unknown_options_s[] = "unknown options: %s";
+static const char __pyx_k_ASCII_MATRIXMARKET[] = "ASCII_MATRIXMARKET";
+static const char __pyx_k_CONTINUE_ITERATING[] = "CONTINUE_ITERATING";
+static const char __pyx_k_CONVERGED_TR_DELTA[] = "CONVERGED_TR_DELTA";
+static const char __pyx_k_DIVERGED_BREAKDOWN[] = "DIVERGED_BREAKDOWN";
+static const char __pyx_k_DIVERGED_FNORM_NAN[] = "DIVERGED_FNORM_NAN";
+static const char __pyx_k_DIVERGED_LOCAL_MIN[] = "DIVERGED_LOCAL_MIN";
+static const char __pyx_k_INITIAL_FINAL_ONLY[] = "INITIAL_FINAL_ONLY";
+static const char __pyx_k_KSPConvergedReason[] = "KSPConvergedReason";
+static const char __pyx_k_MatFactorShiftType[] = "MatFactorShiftType";
+static const char __pyx_k_TAOConvergedReason[] = "TAOConvergedReason";
+static const char __pyx_k_ZERO_INITIAL_GUESS[] = "ZERO_INITIAL_GUESS";
+static const char __pyx_k_block_size_not_set[] = "block size not set";
+static const char __pyx_k_createGlobalVector[] = "createGlobalVector";
+static const char __pyx_k_getConvergedReason[] = "getConvergedReason";
+static const char __pyx_k_getIterationNumber[] = "getIterationNumber";
+static const char __pyx_k_getMaxStepFailures[] = "getMaxStepFailures";
+static const char __pyx_k_getOwnershipRanges[] = "getOwnershipRanges";
+static const char __pyx_k_readonly_attribute[] = "readonly attribute";
+static const char __pyx_k_setConvergedReason[] = "setConvergedReason";
+static const char __pyx_k_setIterationNumber[] = "setIterationNumber";
+static const char __pyx_k_setMaxStepFailures[] = "setMaxStepFailures";
+static const char __pyx_k_CONVERGED_FNORM_ABS[] = "CONVERGED_FNORM_ABS";
+static const char __pyx_k_CONVERGED_ITERATING[] = "CONVERGED_ITERATING";
+static const char __pyx_k_DAE_IMPLICIT_INDEX1[] = "DAE_IMPLICIT_INDEX1";
+static const char __pyx_k_DAE_IMPLICIT_INDEX2[] = "DAE_IMPLICIT_INDEX2";
+static const char __pyx_k_DAE_IMPLICIT_INDEX3[] = "DAE_IMPLICIT_INDEX3";
+static const char __pyx_k_DIVERGED_LS_FAILURE[] = "DIVERGED_LS_FAILURE";
+static const char __pyx_k_IGNORE_ZERO_ENTRIES[] = "IGNORE_ZERO_ENTRIES";
+static const char __pyx_k_I_0_is_d_expected_d[] = "I[0] is %d, expected %d";
+static const char __pyx_k_LOCAL_FORWARD_SWEEP[] = "LOCAL_FORWARD_SWEEP";
+static const char __pyx_k_NORM_PRECONDITIONED[] = "NORM_PRECONDITIONED";
+static const char __pyx_k_NO_OFF_PROC_ENTRIES[] = "NO_OFF_PROC_ENTRIES";
+static const char __pyx_k_NotImplementedError[] = "NotImplementedError";
+static const char __pyx_k_SNESConvergedReason[] = "SNESConvergedReason";
+static const char __pyx_k_createNaturalVector[] = "createNaturalVector";
+static const char __pyx_k_DAE_IMPLICIT_INDEXHI[] = "DAE_IMPLICIT_INDEXHI";
+static const char __pyx_k_DIVERGED_LINE_SEARCH[] = "DIVERGED_LINE_SEARCH";
+static const char __pyx_k_ExactFinalTimeOption[] = "ExactFinalTimeOption";
+static const char __pyx_k_KEEP_NONZERO_PATTERN[] = "KEEP_NONZERO_PATTERN";
+static const char __pyx_k_LOCAL_BACKWARD_SWEEP[] = "LOCAL_BACKWARD_SWEEP";
+static const char __pyx_k_SAME_NONZERO_PATTERN[] = "SAME_NONZERO_PATTERN";
+static const char __pyx_k_create_interpolation[] = "create_interpolation";
+static const char __pyx_k_getInitialGuessKnoll[] = "getInitialGuessKnoll";
+static const char __pyx_k_setInitialGuessKnoll[] = "setInitialGuessKnoll";
+static const char __pyx_k_unknown_shift_type_s[] = "unknown shift type: %s";
+static const char __pyx_k_CONVERGED_ATOL_NORMAL[] = "CONVERGED_ATOL_NORMAL";
+static const char __pyx_k_CONVERGED_RTOL_NORMAL[] = "CONVERGED_RTOL_NORMAL";
+static const char __pyx_k_CONVERGED_STEP_LENGTH[] = "CONVERGED_STEP_LENGTH";
+static const char __pyx_k_DIVERGED_NONSYMMETRIC[] = "DIVERGED_NONSYMMETRIC";
+static const char __pyx_k_DIVERGED_TR_REDUCTION[] = "DIVERGED_TR_REDUCTION";
+static const char __pyx_k_DMDAInterpolationType[] = "DMDAInterpolationType";
+static const char __pyx_k_LOCAL_SYMMETRIC_SWEEP[] = "LOCAL_SYMMETRIC_SWEEP";
+static const char __pyx_k_NEW_NONZERO_LOCATIONS[] = "NEW_NONZERO_LOCATIONS";
+static const char __pyx_k_NORM_UNPRECONDITIONED[] = "NORM_UNPRECONDITIONED";
+static const char __pyx_k_NO_OFF_PROC_ZERO_ROWS[] = "NO_OFF_PROC_ZERO_ROWS";
+static const char __pyx_k_SCATTER_FORWARD_LOCAL[] = "SCATTER_FORWARD_LOCAL";
+static const char __pyx_k_SCATTER_REVERSE_LOCAL[] = "SCATTER_REVERSE_LOCAL";
+static const char __pyx_k_getConvergenceHistory[] = "getConvergenceHistory";
+static const char __pyx_k_getFunctionTolerances[] = "getFunctionTolerances";
+static const char __pyx_k_getGradientTolerances[] = "getGradientTolerances";
+static const char __pyx_k_setFunctionTolerances[] = "setFunctionTolerances";
+static const char __pyx_k_side_r_not_understood[] = "side '%r' not understood";
+static const char __pyx_k_CONVERGED_CG_NEG_CURVE[] = "CONVERGED_CG_NEG_CURVE";
+static const char __pyx_k_DIVERGED_INDEFINITE_PC[] = "DIVERGED_INDEFINITE_PC";
+static const char __pyx_k_DIVERGED_STEP_REJECTED[] = "DIVERGED_STEP_REJECTED";
+static const char __pyx_k_ERROR_LOWER_TRIANGULAR[] = "ERROR_LOWER_TRIANGULAR";
+static const char __pyx_k_GETROW_UPPERTRIANGULAR[] = "GETROW_UPPERTRIANGULAR";
+static const char __pyx_k_Object_is_not_writable[] = "Object is not writable.";
+static const char __pyx_k_STRUCTURALLY_SYMMETRIC[] = "STRUCTURALLY_SYMMETRIC";
+static const char __pyx_k_SUBSET_NONZERO_PATTERN[] = "SUBSET_NONZERO_PATTERN";
+static const char __pyx_k_communicator_not_owned[] = "communicator not owned";
+static const char __pyx_k_getInitialGuessNonzero[] = "getInitialGuessNonzero";
+static const char __pyx_k_getLinearSolveFailures[] = "getLinearSolveFailures";
+static const char __pyx_k_setInitialGuessNonzero[] = "setInitialGuessNonzero";
+static const char __pyx_k_size_I_is_d_expected_d[] = "size(I) is %d, expected %d";
+static const char __pyx_k_size_J_is_d_expected_d[] = "size(J) is %d, expected %d";
+static const char __pyx_k_size_V_is_d_expected_d[] = "size(V) is %d, expected %d";
+static const char __pyx_k_unknown_element_type_s[] = "unknown element type: %s";
+static const char __pyx_k_unknown_scatter_mode_s[] = "unknown scatter mode: %s";
+static const char __pyx_k_unknown_stencil_type_s[] = "unknown stencil type: %s";
+static const char __pyx_k_DIVERGED_BREAKDOWN_BICG[] = "DIVERGED_BREAKDOWN_BICG";
+static const char __pyx_k_DIVERGED_FUNCTION_COUNT[] = "DIVERGED_FUNCTION_COUNT";
+static const char __pyx_k_DIVERGED_INDEFINITE_MAT[] = "DIVERGED_INDEFINITE_MAT";
+static const char __pyx_k_IGNORE_LOWER_TRIANGULAR[] = "IGNORE_LOWER_TRIANGULAR";
+static const char __pyx_k_IGNORE_NEGATIVE_INDICES[] = "IGNORE_NEGATIVE_INDICES";
+static const char __pyx_k_IGNORE_OFF_PROC_ENTRIES[] = "IGNORE_OFF_PROC_ENTRIES";
+static const char __pyx_k_NORM_INITIAL_FINAL_ONLY[] = "NORM_INITIAL_FINAL_ONLY";
+static const char __pyx_k_SUBSET_OFF_PROC_ENTRIES[] = "SUBSET_OFF_PROC_ENTRIES";
+static const char __pyx_k_getConstraintTolerances[] = "getConstraintTolerances";
+static const char __pyx_k_isStructurallySymmetric[] = "isStructurallySymmetric";
+static const char __pyx_k_unknown_boundary_type_s[] = "unknown boundary type: %s";
+static const char __pyx_k_unknown_error_handler_s[] = "unknown error handler: %s";
+static const char __pyx_k_CONVERGED_CG_CONSTRAINED[] = "CONVERGED_CG_CONSTRAINED";
+static const char __pyx_k_CONVERGED_FNORM_RELATIVE[] = "CONVERGED_FNORM_RELATIVE";
+static const char __pyx_k_CONVERGED_SNORM_RELATIVE[] = "CONVERGED_SNORM_RELATIVE";
+static const char __pyx_k_DAE_SEMI_EXPLICIT_INDEX1[] = "DAE_SEMI_EXPLICIT_INDEX1";
+static const char __pyx_k_DAE_SEMI_EXPLICIT_INDEX2[] = "DAE_SEMI_EXPLICIT_INDEX2";
+static const char __pyx_k_DAE_SEMI_EXPLICIT_INDEX3[] = "DAE_SEMI_EXPLICIT_INDEX3";
+static const char __pyx_k_DIVERGED_FUNCTION_DOMAIN[] = "DIVERGED_FUNCTION_DOMAIN";
+static const char __pyx_k_DIVERGED_NONLINEAR_SOLVE[] = "DIVERGED_NONLINEAR_SOLVE";
+static const char __pyx_k_NEW_NONZERO_LOCATION_ERR[] = "NEW_NONZERO_LOCATION_ERR";
+static const char __pyx_k_PCFieldSplitSchurPreType[] = "PCFieldSplitSchurPreType";
+static const char __pyx_k_SYMMETRIC_MULTIPLICATIVE[] = "SYMMETRIC_MULTIPLICATIVE";
+static const char __pyx_k_getNonlinearStepFailures[] = "getNonlinearStepFailures";
+static const char __pyx_k_incompatible_array_sizes[] = "incompatible array sizes";
+static const char __pyx_k_CONVERGED_HAPPY_BREAKDOWN[] = "CONVERGED_HAPPY_BREAKDOWN";
+static const char __pyx_k_DAE_SEMI_EXPLICIT_INDEXHI[] = "DAE_SEMI_EXPLICIT_INDEXHI";
+static const char __pyx_k_DIFFERENT_NONZERO_PATTERN[] = "DIFFERENT_NONZERO_PATTERN";
+static const char __pyx_k_PCFieldSplitSchurFactType[] = "PCFieldSplitSchurFactType";
+static const char __pyx_k_getMaxFunctionEvaluations[] = "getMaxFunctionEvaluations";
+static const char __pyx_k_getMaxLinearSolveFailures[] = "getMaxLinearSolveFailures";
+static const char __pyx_k_setMaxFunctionEvaluations[] = "setMaxFunctionEvaluations";
+static const char __pyx_k_setMaxLinearSolveFailures[] = "setMaxLinearSolveFailures";
+static const char __pyx_k_NEW_NONZERO_ALLOCATION_ERR[] = "NEW_NONZERO_ALLOCATION_ERR";
+static const char __pyx_k_size_d_nnz_is_d_expected_d[] = "size(d_nnz) is %d, expected %d";
+static const char __pyx_k_size_o_nnz_is_d_expected_d[] = "size(o_nnz) is %d, expected %d";
+static const char __pyx_k_UNUSED_NONZERO_LOCATION_ERR[] = "UNUSED_NONZERO_LOCATION_ERR";
+static const char __pyx_k_getMaxNonlinearStepFailures[] = "getMaxNonlinearStepFailures";
+static const char __pyx_k_setMaxNonlinearStepFailures[] = "setMaxNonlinearStepFailures";
+static const char __pyx_k_expecting_tuple_list_or_dict[] = "expecting tuple/list or dict";
+static const char __pyx_k_option_prefix_must_be_string[] = "option prefix must be string";
+static const char __pyx_k_unknown_interpolation_type_s[] = "unknown interpolation type: %s";
+static const char __pyx_k_block_size_d_must_be_positive[] = "block size %d must be positive";
+static const char __pyx_k_incompatible_array_sizes_nv_d[] = "incompatible array sizes: nv=%d";
+static const char __pyx_k_TAO_Solver_Termination_Reasons[] = "\n    TAO Solver Termination Reasons\n    ";
+static const char __pyx_k_expecting_a_C_contiguous_array[] = "expecting a C-contiguous array";
+static const char __pyx_k_A_matrix_with_d_rows_requires_a[] = "A matrix with %d rows requires a row pointer of length %d (given: %d)";
+static const char __pyx_k_Invalid_mode_expected_rw_r_or_w[] = "Invalid mode: expected 'rw', 'r', or 'w'";
+static const char __pyx_k_Portable_Extensible_Toolkit_for[] = "\nPortable, Extensible Toolkit for Scientific Computation\n";
+static const char __pyx_k_bcPoints_is_a_required_argument[] = "bcPoints is a required argument";
+static const char __pyx_k_cannot_place_input_array_size_d[] = "cannot place input array size %d, vector size %d";
+static const char __pyx_k_home_devel_petsc4py_3_7_0_src_P[] = "/home/devel/petsc4py-3.7.0/src/PETSc/Error.pyx";
+static const char __pyx_k_key_d_cannot_register_s_already[] = "key: %d, cannot register: %s, already registered: %s";
+static const char __pyx_k_size_array_is_d_expected_dx_d_d[] = "size(array) is %d, expected %dx%d=%d";
+static const char __pyx_k_Given_d_column_indices_but_d_non[] = "Given %d column indices but %d non-zero values";
+static const char __pyx_k_Must_provide_as_many_communicato[] = "Must provide as many communicators as levels";
+static const char __pyx_k_Must_provide_both_sizes_and_poin[] = "Must provide both sizes and points arrays";
+static const char __pyx_k_Out_of_memory_Allocated_d_Used_b[] = "Out of memory. Allocated: %d, Used by process: %d";
+static const char __pyx_k_Vector_local_size_d_is_not_compa[] = "Vector local size %d is not compatible with DMDA local sizes %s";
+static const char __pyx_k_accessing_non_existent_buffer_se[] = "accessing non-existent buffer segment";
+static const char __pyx_k_array_size_d_and_vector_local_si[] = "array size %d and vector local size %d block size %d";
+static const char __pyx_k_array_size_d_incompatible_with_v[] = "array size %d incompatible with vector local size %d";
+static const char __pyx_k_cell_indices_must_have_two_dimen[] = "cell indices must have two dimensions: cells.ndim=%d";
+static const char __pyx_k_column_indices_must_have_two_dim[] = "column indices must have two dimensions: cols.ndim=%d";
+static const char __pyx_k_coordinates_must_have_two_dimens[] = "coordinates must have two dimensions: coordinates.ndim=%d";
+static const char __pyx_k_coords_vertices_must_have_two_di[] = "coords vertices must have two dimensions: coords.ndim=%d";
+static const char __pyx_k_ghosts_size_d_array_size_d_and_v[] = "ghosts size %d, array size %d, and vector local size %d block size %d";
+static const char __pyx_k_global_size_d_not_divisible_by_b[] = "global size %d not divisible by block size %d";
+static const char __pyx_k_incompatible_array_sizes_ni_d_nj[] = "incompatible array sizes: ni=%d, nj=%d, nv=%d";
+static const char __pyx_k_incompatible_array_sizes_ni_d_nv[] = "incompatible array sizes: ni=%d, nv=%d, bs=%d";
+static const char __pyx_k_input_arrays_have_incompatible_s[] = "input arrays have incompatible shapes: rows.shape=%s, cols.shape=%s, vals.shape=%s";
+static const char __pyx_k_local_and_global_sizes_cannot_be[] = "local and global sizes cannot be both 'DECIDE'";
+static const char __pyx_k_local_size_d_not_divisible_by_bl[] = "local size %d not divisible by block size %d";
+static const char __pyx_k_number_of_dimensions_d_and_numbe[] = "number of dimensions %d and number ownership ranges %d";
+static const char __pyx_k_option_prefix_should_not_have_sp[] = "option prefix should not have spaces";
+static const char __pyx_k_option_prefix_should_not_start_w[] = "option prefix should not start with a hypen";
+static const char __pyx_k_ownership_range_size_d_and_numbe[] = "ownership range size %d and number or processors %d";
+static const char __pyx_k_row_indices_must_have_two_dimens[] = "row indices must have two dimensions: rows.ndim=%d";
+static const char __pyx_k_sizes_array_should_have_d_entrie[] = "sizes array should have %d entries (has %d)";
+static const char __pyx_k_values_must_have_two_or_more_dim[] = "values must have two or more dimensions: vals.ndim=%d";
+static const char __pyx_k_home_devel_petsc4py_3_7_0_src_P_2[] = "/home/devel/petsc4py-3.7.0/src/PETSc/PETSc.pyx";
+static const char __pyx_k_incompatible_array_sizes_ni_d_nv_2[] = "incompatible array sizes: ni=%d, nv=%d";
 static PyObject *__pyx_n_s_A;
 static PyObject *__pyx_n_s_A11;
 static PyObject *__pyx_n_s_ADD;
@@ -5266,10 +4237,10 @@ static PyObject *__pyx_n_s_AIJCRL;
 static PyObject *__pyx_n_s_AIJCUSP;
 static PyObject *__pyx_n_s_AIJCUSPARSE;
 static PyObject *__pyx_n_s_AIJPERM;
-static PyObject *__pyx_n_s_AIJPTHREAD;
 static PyObject *__pyx_n_s_AIJVIENNACL;
 static PyObject *__pyx_n_s_AINVCUSP;
 static PyObject *__pyx_n_s_ALPHA;
+static PyObject *__pyx_n_s_ALPHA2;
 static PyObject *__pyx_n_s_ALWAYS;
 static PyObject *__pyx_n_s_AMD;
 static PyObject *__pyx_n_s_ANDERSON;
@@ -5297,6 +4268,7 @@ static PyObject *__pyx_n_s_ASCII_SYMMODU;
 static PyObject *__pyx_n_s_ASCII_VTK;
 static PyObject *__pyx_n_s_ASCII_VTK_CELL;
 static PyObject *__pyx_n_s_ASCII_VTK_COORDS;
+static PyObject *__pyx_n_s_ASCII_XML;
 static PyObject *__pyx_n_s_ASFLS;
 static PyObject *__pyx_n_s_ASILS;
 static PyObject *__pyx_n_s_ASM;
@@ -5313,6 +4285,7 @@ static PyObject *__pyx_n_s_BASIC;
 static PyObject *__pyx_n_s_BCGS;
 static PyObject *__pyx_n_s_BCGSL;
 static PyObject *__pyx_n_s_BDDC;
+static PyObject *__pyx_n_s_BDF;
 static PyObject *__pyx_n_s_BE;
 static PyObject *__pyx_n_s_BEULER;
 static PyObject *__pyx_n_s_BFBT;
@@ -5333,6 +4306,7 @@ static PyObject *__pyx_n_s_BoundaryType;
 static PyObject *__pyx_n_s_C;
 static PyObject *__pyx_n_s_CARTESIAN;
 static PyObject *__pyx_n_s_CG;
+static PyObject *__pyx_n_s_CGLS;
 static PyObject *__pyx_n_s_CGNE;
 static PyObject *__pyx_n_s_CGS;
 static PyObject *__pyx_n_s_CHACO;
@@ -5349,10 +4323,9 @@ static PyObject *__pyx_n_s_CONVERGED_ATOL;
 static PyObject *__pyx_n_s_CONVERGED_ATOL_NORMAL;
 static PyObject *__pyx_n_s_CONVERGED_CG_CONSTRAINED;
 static PyObject *__pyx_n_s_CONVERGED_CG_NEG_CURVE;
-static PyObject *__pyx_n_s_CONVERGED_FATOL;
+static PyObject *__pyx_n_s_CONVERGED_EVENT;
 static PyObject *__pyx_n_s_CONVERGED_FNORM_ABS;
 static PyObject *__pyx_n_s_CONVERGED_FNORM_RELATIVE;
-static PyObject *__pyx_n_s_CONVERGED_FRTOL;
 static PyObject *__pyx_n_s_CONVERGED_GATOL;
 static PyObject *__pyx_n_s_CONVERGED_GRTOL;
 static PyObject *__pyx_n_s_CONVERGED_GTTOL;
@@ -5449,10 +4422,12 @@ static PyObject *__pyx_n_s_Error___nonzero;
 static PyObject *__pyx_n_s_Error___repr;
 static PyObject *__pyx_n_s_Error___str;
 static PyObject *__pyx_n_s_Event;
+static PyObject *__pyx_n_s_ExactFinalTime;
 static PyObject *__pyx_n_s_ExactFinalTimeOption;
 static PyObject *__pyx_n_s_FAS;
 static PyObject *__pyx_n_s_FBCGS;
 static PyObject *__pyx_n_s_FBCGSR;
+static PyObject *__pyx_n_s_FCG;
 static PyObject *__pyx_n_s_FE;
 static PyObject *__pyx_n_s_FFT;
 static PyObject *__pyx_n_s_FFTW;
@@ -5486,6 +4461,8 @@ static PyObject *__pyx_n_s_GETROW_UPPERTRIANGULAR;
 static PyObject *__pyx_n_s_GHOSTED;
 static PyObject *__pyx_n_s_GL;
 static PyObject *__pyx_n_s_GLMapType;
+static PyObject *__pyx_n_s_GLOBAL_MAX;
+static PyObject *__pyx_n_s_GLOBAL_SUM;
 static PyObject *__pyx_n_s_GLTR;
 static PyObject *__pyx_n_s_GMRES;
 static PyObject *__pyx_n_s_GPCG;
@@ -5528,12 +4505,15 @@ static PyObject *__pyx_n_s_IS;
 static PyObject *__pyx_n_s_ISType;
 static PyObject *__pyx_n_s_ITERATING;
 static PyObject *__pyx_kp_s_I_0_is_d_expected_d;
+static PyObject *__pyx_n_s_InfoType;
 static PyObject *__pyx_n_s_InsertMode;
 static PyObject *__pyx_n_s_IntType;
 static PyObject *__pyx_n_s_InterpolationType;
+static PyObject *__pyx_kp_s_Invalid_mode_expected_rw_r_or_w;
 static PyObject *__pyx_n_s_J;
 static PyObject *__pyx_n_s_JACOBI;
 static PyObject *__pyx_n_s_KACZMARZ;
+static PyObject *__pyx_n_s_KASKADE;
 static PyObject *__pyx_n_s_KEEP_NONZERO_PATTERN;
 static PyObject *__pyx_n_s_KSP;
 static PyObject *__pyx_n_s_KSPConvergedReason;
@@ -5548,9 +4528,11 @@ static PyObject *__pyx_n_s_LEFT;
 static PyObject *__pyx_n_s_LGMRES;
 static PyObject *__pyx_n_s_LINEAR;
 static PyObject *__pyx_n_s_LMVM;
+static PyObject *__pyx_n_s_LOCAL;
 static PyObject *__pyx_n_s_LOCALREF;
 static PyObject *__pyx_n_s_LOCAL_BACKWARD_SWEEP;
 static PyObject *__pyx_n_s_LOCAL_FORWARD_SWEEP;
+static PyObject *__pyx_n_s_LOCAL_SYMMETRIC_SWEEP;
 static PyObject *__pyx_n_s_LOWER;
 static PyObject *__pyx_n_s_LRC;
 static PyObject *__pyx_n_s_LSC;
@@ -5569,6 +4551,8 @@ static PyObject *__pyx_n_s_MAX_VALUES;
 static PyObject *__pyx_n_s_MEMORYSCALABLE;
 static PyObject *__pyx_n_s_MFFD;
 static PyObject *__pyx_n_s_MG;
+static PyObject *__pyx_n_s_MGType;
+static PyObject *__pyx_n_s_MIMEX;
 static PyObject *__pyx_n_s_MINRES;
 static PyObject *__pyx_n_s_MIRROR;
 static PyObject *__pyx_n_s_ML;
@@ -5586,7 +4570,6 @@ static PyObject *__pyx_n_s_MPIBSTRM;
 static PyObject *__pyx_n_s_MPICUSP;
 static PyObject *__pyx_n_s_MPIDENSE;
 static PyObject *__pyx_n_s_MPIMAIJ;
-static PyObject *__pyx_n_s_MPIPTHREAD;
 static PyObject *__pyx_n_s_MPISBAIJ;
 static PyObject *__pyx_n_s_MPISBSTRM;
 static PyObject *__pyx_n_s_MPIVIENNACL;
@@ -5595,6 +4578,7 @@ static PyObject *__pyx_n_s_MULTIPLICATIVE;
 static PyObject *__pyx_n_s_MapType;
 static PyObject *__pyx_n_s_MatAssemblyType;
 static PyObject *__pyx_n_s_MatFactorShiftType;
+static PyObject *__pyx_n_s_MatInfoType;
 static PyObject *__pyx_n_s_MatOption;
 static PyObject *__pyx_n_s_MatOrderingType;
 static PyObject *__pyx_n_s_MatSORType;
@@ -5634,6 +4618,7 @@ static PyObject *__pyx_n_s_NONE;
 static PyObject *__pyx_n_s_NONLINEAR;
 static PyObject *__pyx_n_s_NONZERO;
 static PyObject *__pyx_n_s_NORMAL;
+static PyObject *__pyx_n_s_NORMALHERMITIAN;
 static PyObject *__pyx_n_s_NORM_1;
 static PyObject *__pyx_n_s_NORM_1_AND_2;
 static PyObject *__pyx_n_s_NORM_2;
@@ -5681,6 +4666,7 @@ static PyObject *__pyx_n_s_PCFieldSplitSchurFactType;
 static PyObject *__pyx_n_s_PCFieldSplitSchurPreType;
 static PyObject *__pyx_n_s_PCGAMGType;
 static PyObject *__pyx_n_s_PCGASMType;
+static PyObject *__pyx_n_s_PCMGType;
 static PyObject *__pyx_n_s_PCSide;
 static PyObject *__pyx_n_s_PCType;
 static PyObject *__pyx_n_s_PD;
@@ -5690,14 +4676,18 @@ static PyObject *__pyx_n_s_PFMG;
 static PyObject *__pyx_n_s_PGMRES;
 static PyObject *__pyx_n_s_PINFINITY;
 static PyObject *__pyx_n_s_PIPECG;
+static PyObject *__pyx_n_s_PIPECGRR;
 static PyObject *__pyx_n_s_PIPECR;
+static PyObject *__pyx_n_s_PIPEFCG;
+static PyObject *__pyx_n_s_PIPEFGMRES;
+static PyObject *__pyx_n_s_PIPEGCR;
 static PyObject *__pyx_n_s_PLEX;
 static PyObject *__pyx_n_s_POSITIVE_DEFINITE;
 static PyObject *__pyx_n_s_POUNDERS;
+static PyObject *__pyx_n_s_PREALLOCATOR;
 static PyObject *__pyx_n_s_PRECONDITIONED;
 static PyObject *__pyx_n_s_PREONLY;
 static PyObject *__pyx_n_s_PSEUDO;
-static PyObject *__pyx_n_s_PTHREAD;
 static PyObject *__pyx_n_s_PYTHON;
 static PyObject *__pyx_n_s_PartitionerType;
 static PyObject *__pyx_kp_u_Portable_Extensible_Toolkit_for;
@@ -5713,6 +4703,7 @@ static PyObject *__pyx_n_s_QUARTER_SIZE;
 static PyObject *__pyx_n_s_R;
 static PyObject *__pyx_n_s_RAND;
 static PyObject *__pyx_n_s_RAND48;
+static PyObject *__pyx_n_s_RANDER48;
 static PyObject *__pyx_n_s_RCM;
 static PyObject *__pyx_n_s_READ;
 static PyObject *__pyx_n_s_REDISTRIBUTE;
@@ -5757,7 +4748,6 @@ static PyObject *__pyx_n_s_SEQAIJCRL;
 static PyObject *__pyx_n_s_SEQAIJCUSP;
 static PyObject *__pyx_n_s_SEQAIJCUSPARSE;
 static PyObject *__pyx_n_s_SEQAIJPERM;
-static PyObject *__pyx_n_s_SEQAIJPTHREAD;
 static PyObject *__pyx_n_s_SEQAIJVIENNACL;
 static PyObject *__pyx_n_s_SEQBAIJ;
 static PyObject *__pyx_n_s_SEQBSTRM;
@@ -5765,7 +4755,6 @@ static PyObject *__pyx_n_s_SEQCUFFT;
 static PyObject *__pyx_n_s_SEQCUSP;
 static PyObject *__pyx_n_s_SEQDENSE;
 static PyObject *__pyx_n_s_SEQMAIJ;
-static PyObject *__pyx_n_s_SEQPTHREAD;
 static PyObject *__pyx_n_s_SEQSBAIJ;
 static PyObject *__pyx_n_s_SEQSBSTRM;
 static PyObject *__pyx_n_s_SEQVIENNACL;
@@ -5782,6 +4771,7 @@ static PyObject *__pyx_n_s_SORType;
 static PyObject *__pyx_n_s_SPAI;
 static PyObject *__pyx_n_s_SPD;
 static PyObject *__pyx_n_s_SPECIAL;
+static PyObject *__pyx_n_s_SPECTRAL;
 static PyObject *__pyx_n_s_SPRNG;
 static PyObject *__pyx_n_s_SSFLS;
 static PyObject *__pyx_n_s_SSILS;
@@ -5799,6 +4789,7 @@ static PyObject *__pyx_n_s_SUBMATRIX;
 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_SUBSET_OFF_PROC_ENTRIES;
 static PyObject *__pyx_n_s_SUNDIALS;
 static PyObject *__pyx_n_s_SVD;
 static PyObject *__pyx_n_s_SYMMETRIC;
@@ -5823,9 +4814,11 @@ static PyObject *__pyx_n_s_TAOType;
 static PyObject *__pyx_kp_s_TAO_Solver_Termination_Reasons;
 static PyObject *__pyx_kp_s_TAO_Solver_Types;
 static PyObject *__pyx_n_s_TCQMR;
+static PyObject *__pyx_n_s_TELESCOPE;
 static PyObject *__pyx_n_s_TEST;
 static PyObject *__pyx_n_s_TFQMR;
 static PyObject *__pyx_n_s_TFS;
+static PyObject *__pyx_n_s_TH;
 static PyObject *__pyx_n_s_THETA;
 static PyObject *__pyx_n_s_THIRD;
 static PyObject *__pyx_n_s_THIRD_SIZE;
@@ -5833,7 +4826,8 @@ static PyObject *__pyx_n_s_TRANSPOSEMAT;
 static PyObject *__pyx_n_s_TRON;
 static PyObject *__pyx_n_s_TSConvergedReason;
 static PyObject *__pyx_n_s_TSEquationType;
-static PyObject *__pyx_n_s_TSExactFinalTimeOption;
+static PyObject *__pyx_n_s_TSExactFinalTime;
+static PyObject *__pyx_n_s_TSIRM;
 static PyObject *__pyx_n_s_TSProblemType;
 static PyObject *__pyx_n_s_TSType;
 static PyObject *__pyx_n_s_TWIST;
@@ -5865,6 +4859,7 @@ static PyObject *__pyx_kp_s_Vector_local_size_d_is_not_compa;
 static PyObject *__pyx_n_s_ViewerFormat;
 static PyObject *__pyx_n_s_ViewerType;
 static PyObject *__pyx_n_s_W;
+static PyObject *__pyx_n_s_WBM;
 static PyObject *__pyx_n_s_WINDOW;
 static PyObject *__pyx_n_s_WRITE;
 static PyObject *__pyx_n_s_X;
@@ -5898,6 +4893,7 @@ static PyObject *__pyx_kp_s_array_size_d_and_vector_local_si;
 static PyObject *__pyx_kp_s_array_size_d_incompatible_with_v;
 static PyObject *__pyx_n_s_array_w;
 static PyObject *__pyx_n_s_asmtype;
+static PyObject *__pyx_n_s_assemblies;
 static PyObject *__pyx_n_s_assembly;
 static PyObject *__pyx_n_s_atol;
 static PyObject *__pyx_n_s_attr;
@@ -5915,6 +4911,7 @@ static PyObject *__pyx_n_s_begin;
 static PyObject *__pyx_n_s_begin_args;
 static PyObject *__pyx_n_s_begin_kargs;
 static PyObject *__pyx_n_s_beta;
+static PyObject *__pyx_n_s_block_size;
 static PyObject *__pyx_kp_s_block_size_d_must_be_positive;
 static PyObject *__pyx_kp_s_block_size_not_set;
 static PyObject *__pyx_n_s_boundary;
@@ -5931,8 +4928,9 @@ static PyObject *__pyx_n_s_cell;
 static PyObject *__pyx_kp_s_cell_indices_must_have_two_dimen;
 static PyObject *__pyx_n_s_cells;
 static PyObject *__pyx_n_s_cgid;
+static PyObject *__pyx_n_s_citation;
 static PyObject *__pyx_n_s_cmap;
-static PyObject *__pyx_n_s_coarsen_2;
+static PyObject *__pyx_n_s_coarsen;
 static PyObject *__pyx_n_s_col;
 static PyObject *__pyx_n_s_col_bsize;
 static PyObject *__pyx_n_s_cols;
@@ -5947,9 +4945,9 @@ static PyObject *__pyx_n_s_coneOrientation;
 static PyObject *__pyx_n_s_conePoint;
 static PyObject *__pyx_n_s_conePos;
 static PyObject *__pyx_n_s_constant;
-static PyObject *__pyx_n_s_constraints_2;
+static PyObject *__pyx_n_s_constraints;
 static PyObject *__pyx_n_s_context;
-static PyObject *__pyx_n_s_converged_2;
+static PyObject *__pyx_n_s_converged;
 static PyObject *__pyx_n_s_coordinates;
 static PyObject *__pyx_kp_s_coordinates_must_have_two_dimens;
 static PyObject *__pyx_n_s_coords;
@@ -5970,10 +4968,11 @@ static PyObject *__pyx_n_s_createVecLeft;
 static PyObject *__pyx_n_s_createVecRight;
 static PyObject *__pyx_n_s_createVecs;
 static PyObject *__pyx_n_s_create_gvec;
-static PyObject *__pyx_n_s_create_injection_2;
-static PyObject *__pyx_n_s_create_interpolation_2;
+static PyObject *__pyx_n_s_create_injection;
+static PyObject *__pyx_n_s_create_interpolation;
 static PyObject *__pyx_n_s_create_lvec;
-static PyObject *__pyx_n_s_create_matrix_2;
+static PyObject *__pyx_n_s_create_matrix;
+static PyObject *__pyx_n_s_create_subdm;
 static PyObject *__pyx_n_s_crtol;
 static PyObject *__pyx_n_s_csize;
 static PyObject *__pyx_n_s_csr;
@@ -6009,6 +5008,7 @@ static PyObject *__pyx_n_s_duplicate;
 static PyObject *__pyx_n_s_edges;
 static PyObject *__pyx_n_s_elem_type;
 static PyObject *__pyx_n_s_emacs;
+static PyObject *__pyx_kp_s_empty_citation;
 static PyObject *__pyx_kp_s_empty_name;
 static PyObject *__pyx_n_s_encode;
 static PyObject *__pyx_n_s_end;
@@ -6026,11 +5026,13 @@ static PyObject *__pyx_kp_s_expecting_a_C_contiguous_array;
 static PyObject *__pyx_kp_s_expecting_tuple_list_or_dict;
 static PyObject *__pyx_n_s_f;
 static PyObject *__pyx_n_s_faces;
-static PyObject *__pyx_n_s_fatol;
+static PyObject *__pyx_n_s_factor_mallocs;
 static PyObject *__pyx_n_s_field;
 static PyObject *__pyx_n_s_fieldName;
 static PyObject *__pyx_n_s_filename;
 static PyObject *__pyx_n_s_fill;
+static PyObject *__pyx_n_s_fill_ratio_given;
+static PyObject *__pyx_n_s_fill_ratio_needed;
 static PyObject *__pyx_n_s_finalize;
 static PyObject *__pyx_n_s_first;
 static PyObject *__pyx_n_s_flag;
@@ -6040,8 +5042,7 @@ static PyObject *__pyx_n_s_fnorm;
 static PyObject *__pyx_n_s_force;
 static PyObject *__pyx_n_s_format;
 static PyObject *__pyx_n_s_forward;
-static PyObject *__pyx_n_s_frtol;
-static PyObject *__pyx_n_s_function_2;
+static PyObject *__pyx_n_s_function;
 static PyObject *__pyx_n_s_g;
 static PyObject *__pyx_n_s_gamgtype;
 static PyObject *__pyx_n_s_gamma;
@@ -6049,6 +5050,7 @@ static PyObject *__pyx_n_s_gasmtype;
 static PyObject *__pyx_n_s_gatol;
 static PyObject *__pyx_n_s_get;
 static PyObject *__pyx_n_s_getActive;
+static PyObject *__pyx_n_s_getActiveAll;
 static PyObject *__pyx_n_s_getAppCtx;
 static PyObject *__pyx_n_s_getArray;
 static PyObject *__pyx_n_s_getBlockIndices;
@@ -6061,7 +5063,6 @@ static PyObject *__pyx_n_s_getCPUTime;
 static PyObject *__pyx_n_s_getClassId;
 static PyObject *__pyx_n_s_getClassName;
 static PyObject *__pyx_n_s_getComm;
-static PyObject *__pyx_n_s_getConstraintNorm;
 static PyObject *__pyx_n_s_getConstraintTolerances;
 static PyObject *__pyx_n_s_getConvergedReason;
 static PyObject *__pyx_n_s_getConvergenceHistory;
@@ -6078,7 +5079,6 @@ static PyObject *__pyx_n_s_getFunctionValue;
 static PyObject *__pyx_n_s_getGhostCorners;
 static PyObject *__pyx_n_s_getGhostRanges;
 static PyObject *__pyx_n_s_getGradient;
-static PyObject *__pyx_n_s_getGradientNorm;
 static PyObject *__pyx_n_s_getGradientTolerances;
 static PyObject *__pyx_n_s_getIndices;
 static PyObject *__pyx_n_s_getInfo;
@@ -6104,7 +5104,6 @@ static PyObject *__pyx_n_s_getNonlinearStepFailures;
 static PyObject *__pyx_n_s_getNormType;
 static PyObject *__pyx_n_s_getNumber;
 static PyObject *__pyx_n_s_getNumberDM;
-static PyObject *__pyx_n_s_getObjectiveTolerances;
 static PyObject *__pyx_n_s_getObjectiveValue;
 static PyObject *__pyx_n_s_getOperators;
 static PyObject *__pyx_n_s_getOptionsPrefix;
@@ -6124,6 +5123,7 @@ static PyObject *__pyx_n_s_getSeed;
 static PyObject *__pyx_n_s_getSize;
 static PyObject *__pyx_n_s_getSizes;
 static PyObject *__pyx_n_s_getSolution;
+static PyObject *__pyx_n_s_getSolutionNorm;
 static PyObject *__pyx_n_s_getSolutionUpdate;
 static PyObject *__pyx_n_s_getStencil;
 static PyObject *__pyx_n_s_getStencilType;
@@ -6150,7 +5150,7 @@ static PyObject *__pyx_n_s_ghosts;
 static PyObject *__pyx_kp_s_ghosts_size_d_array_size_d_and_v;
 static PyObject *__pyx_kp_s_global_size_d_not_divisible_by_b;
 static PyObject *__pyx_n_s_globalsec;
-static PyObject *__pyx_n_s_gradient_2;
+static PyObject *__pyx_n_s_gradient;
 static PyObject *__pyx_n_s_group;
 static PyObject *__pyx_n_s_grtol;
 static PyObject *__pyx_n_s_gtol;
@@ -6161,9 +5161,11 @@ static PyObject *__pyx_n_s_handle;
 static PyObject *__pyx_n_s_hasLabel;
 static PyObject *__pyx_n_s_hasLagrange;
 static PyObject *__pyx_n_s_hasName;
-static PyObject *__pyx_n_s_hessian_2;
-static PyObject *__pyx_kp_s_home_devel_petsc4py_3_6_0_src_P;
-static PyObject *__pyx_kp_s_home_devel_petsc4py_3_6_0_src_P_2;
+static PyObject *__pyx_n_s_hessian;
+static PyObject *__pyx_kp_s_home_devel_petsc4py_3_7_0_src_P;
+static PyObject *__pyx_kp_s_home_devel_petsc4py_3_7_0_src_P_2;
+static PyObject *__pyx_n_s_hypretype;
+static PyObject *__pyx_n_s_icntl;
 static PyObject *__pyx_n_s_idx;
 static PyObject *__pyx_n_s_idxm;
 static PyObject *__pyx_n_s_ierr;
@@ -6180,10 +5182,12 @@ static PyObject *__pyx_kp_s_incompatible_array_sizes_ni_d_nv_2;
 static PyObject *__pyx_kp_s_incompatible_array_sizes_nv_d;
 static PyObject *__pyx_n_s_index;
 static PyObject *__pyx_n_s_indices;
+static PyObject *__pyx_n_s_info;
+static PyObject *__pyx_n_s_infoAllow;
 static PyObject *__pyx_n_s_init;
 static PyObject *__pyx_n_s_initial_time;
 static PyObject *__pyx_n_s_initial_time_step;
-static PyObject *__pyx_n_s_initialguess_2;
+static PyObject *__pyx_n_s_initialguess;
 static PyObject *__pyx_n_s_initialize;
 static PyObject *__pyx_kp_s_input_arrays_have_incompatible_s;
 static PyObject *__pyx_n_s_insert;
@@ -6212,9 +5216,10 @@ static PyObject *__pyx_n_s_isrow;
 static PyObject *__pyx_n_s_isrows;
 static PyObject *__pyx_n_s_itemsize;
 static PyObject *__pyx_n_s_its;
-static PyObject *__pyx_n_s_jacobian_2;
-static PyObject *__pyx_n_s_jacobian_design_2;
-static PyObject *__pyx_n_s_jacobian_state_2;
+static PyObject *__pyx_n_s_ival;
+static PyObject *__pyx_n_s_jacobian;
+static PyObject *__pyx_n_s_jacobian_design;
+static PyObject *__pyx_n_s_jacobian_state;
 static PyObject *__pyx_n_s_join;
 static PyObject *__pyx_n_s_kargs;
 static PyObject *__pyx_kp_s_key_d_cannot_register_s_already;
@@ -6245,6 +5250,7 @@ static PyObject *__pyx_n_s_lv;
 static PyObject *__pyx_n_s_lvecs;
 static PyObject *__pyx_n_s_main;
 static PyObject *__pyx_n_s_major;
+static PyObject *__pyx_n_s_mallocs;
 static PyObject *__pyx_n_s_map_type;
 static PyObject *__pyx_n_s_mat;
 static PyObject *__pyx_n_s_matMult;
@@ -6256,14 +5262,16 @@ static PyObject *__pyx_n_s_max_it;
 static PyObject *__pyx_n_s_max_steps;
 static PyObject *__pyx_n_s_max_time;
 static PyObject *__pyx_n_s_memo;
+static PyObject *__pyx_n_s_memory;
 static PyObject *__pyx_n_s_messageLength;
 static PyObject *__pyx_n_s_metaclass;
+static PyObject *__pyx_n_s_mgtype;
 static PyObject *__pyx_n_s_minor;
 static PyObject *__pyx_n_s_mirror;
 static PyObject *__pyx_n_s_mode;
 static PyObject *__pyx_n_s_model;
 static PyObject *__pyx_n_s_module;
-static PyObject *__pyx_n_s_monitor_2;
+static PyObject *__pyx_n_s_monitor;
 static PyObject *__pyx_n_s_mpi4py;
 static PyObject *__pyx_kp_s_mpi4py_MPI;
 static PyObject *__pyx_n_s_mpiabort;
@@ -6273,6 +5281,8 @@ static PyObject *__pyx_n_s_na;
 static PyObject *__pyx_n_s_name;
 static PyObject *__pyx_n_s_name_2;
 static PyObject *__pyx_n_s_ncycle;
+static PyObject *__pyx_n_s_newsec;
+static PyObject *__pyx_n_s_newvec;
 static PyObject *__pyx_n_s_nleaves;
 static PyObject *__pyx_n_s_nlevels;
 static PyObject *__pyx_n_s_nlocal;
@@ -6289,6 +5299,7 @@ static PyObject *__pyx_n_s_normtype;
 static PyObject *__pyx_n_s_nroots;
 static PyObject *__pyx_n_s_nsd;
 static PyObject *__pyx_n_s_nsp;
+static PyObject *__pyx_n_s_nsubcomm;
 static PyObject *__pyx_kp_s_null_communicator;
 static PyObject *__pyx_n_s_numComp;
 static PyObject *__pyx_n_s_numDof;
@@ -6298,14 +5309,18 @@ static PyObject *__pyx_n_s_numProcs;
 static PyObject *__pyx_n_s_numReductions;
 static PyObject *__pyx_kp_s_number_of_dimensions_d_and_numbe;
 static PyObject *__pyx_n_s_numcells;
+static PyObject *__pyx_n_s_nz_allocated;
+static PyObject *__pyx_n_s_nz_unneeded;
+static PyObject *__pyx_n_s_nz_used;
 static PyObject *__pyx_n_s_nzdiag;
 static PyObject *__pyx_n_s_obj;
 static PyObject *__pyx_n_s_object;
-static PyObject *__pyx_n_s_objective_2;
-static PyObject *__pyx_n_s_objgrad_2;
+static PyObject *__pyx_n_s_objective;
+static PyObject *__pyx_n_s_objgrad;
 static PyObject *__pyx_n_s_offset;
 static PyObject *__pyx_n_s_omega;
 static PyObject *__pyx_kp_s_only_and;
+static PyObject *__pyx_n_s_operators;
 static PyObject *__pyx_n_s_option;
 static PyObject *__pyx_kp_s_option_prefix_must_be_string;
 static PyObject *__pyx_kp_s_option_prefix_should_not_have_sp;
@@ -6321,6 +5336,7 @@ static PyObject *__pyx_n_s_output;
 static PyObject *__pyx_n_s_overlap;
 static PyObject *__pyx_kp_s_ownership_range_size_d_and_numbe;
 static PyObject *__pyx_n_s_ownership_ranges;
+static PyObject *__pyx_n_s_ozz;
 static PyObject *__pyx_n_s_p;
 static PyObject *__pyx_n_s_p1;
 static PyObject *__pyx_n_s_pEnd;
@@ -6341,12 +5357,12 @@ static PyObject *__pyx_n_s_pop;
 static PyObject *__pyx_n_s_popErrorHandler;
 static PyObject *__pyx_n_s_position;
 static PyObject *__pyx_n_s_positive_definite;
-static PyObject *__pyx_n_s_poststep_2;
+static PyObject *__pyx_n_s_poststep;
 static PyObject *__pyx_n_s_pre;
 static PyObject *__pyx_n_s_prefix;
 static PyObject *__pyx_kp_s_prefix_s_name_s;
 static PyObject *__pyx_n_s_prepare;
-static PyObject *__pyx_n_s_prestep_2;
+static PyObject *__pyx_n_s_prestep;
 static PyObject *__pyx_n_s_proc_sizes;
 static PyObject *__pyx_n_s_ptype;
 static PyObject *__pyx_n_s_push;
@@ -6369,12 +5385,13 @@ static PyObject *__pyx_n_s_ready;
 static PyObject *__pyx_n_s_real;
 static PyObject *__pyx_n_s_reason;
 static PyObject *__pyx_n_s_reciprocal;
-static PyObject *__pyx_n_s_refine_2;
+static PyObject *__pyx_n_s_refine;
 static PyObject *__pyx_n_s_refine_x;
 static PyObject *__pyx_n_s_refine_y;
 static PyObject *__pyx_n_s_refine_z;
 static PyObject *__pyx_n_s_refinementLimit;
 static PyObject *__pyx_n_s_refinementUniform;
+static PyObject *__pyx_n_s_registerCitation;
 static PyObject *__pyx_n_s_release;
 static PyObject *__pyx_n_s_remote;
 static PyObject *__pyx_n_s_remove;
@@ -6399,6 +5416,7 @@ static PyObject *__pyx_n_s_rscale;
 static PyObject *__pyx_n_s_rtol;
 static PyObject *__pyx_n_s_rtol_0;
 static PyObject *__pyx_n_s_rtol_max;
+static PyObject *__pyx_n_s_rw;
 static PyObject *__pyx_kp_s_s;
 static PyObject *__pyx_kp_s_s_line_d_in_s;
 static PyObject *__pyx_kp_s_s_s;
@@ -6409,7 +5427,7 @@ static PyObject *__pyx_n_s_seconds;
 static PyObject *__pyx_n_s_seed;
 static PyObject *__pyx_n_s_self;
 static PyObject *__pyx_n_s_sep;
-static PyObject *__pyx_n_s_separable_2;
+static PyObject *__pyx_n_s_separable;
 static PyObject *__pyx_n_s_setActive;
 static PyObject *__pyx_n_s_setActiveAll;
 static PyObject *__pyx_n_s_setAppCtx;
@@ -6435,7 +5453,6 @@ static PyObject *__pyx_n_s_setMaxTime;
 static PyObject *__pyx_n_s_setNPC;
 static PyObject *__pyx_n_s_setName;
 static PyObject *__pyx_n_s_setNormType;
-static PyObject *__pyx_n_s_setObjectiveTolerances;
 static PyObject *__pyx_n_s_setOptionsPrefix;
 static PyObject *__pyx_n_s_setPCSide;
 static PyObject *__pyx_n_s_setParamsEW;
@@ -6497,7 +5514,9 @@ static PyObject *__pyx_n_s_str;
 static PyObject *__pyx_n_s_strides;
 static PyObject *__pyx_n_s_strip;
 static PyObject *__pyx_n_s_structure;
+static PyObject *__pyx_n_s_subcomm;
 static PyObject *__pyx_n_s_submat;
+static PyObject *__pyx_n_s_submats;
 static PyObject *__pyx_n_s_subminor;
 static PyObject *__pyx_n_s_subvec;
 static PyObject *__pyx_n_s_supp;
@@ -6537,15 +5556,16 @@ static PyObject *__pyx_kp_s_unknown_options_s;
 static PyObject *__pyx_kp_s_unknown_scatter_mode_s;
 static PyObject *__pyx_kp_s_unknown_shift_type_s;
 static PyObject *__pyx_kp_s_unknown_stencil_type_s;
-static PyObject *__pyx_n_s_update_2;
+static PyObject *__pyx_n_s_update;
 static PyObject *__pyx_n_s_upper;
 static PyObject *__pyx_n_s_useClosure;
 static PyObject *__pyx_n_s_useCone;
 static PyObject *__pyx_n_s_v;
+static PyObject *__pyx_n_s_val;
 static PyObject *__pyx_n_s_value;
 static PyObject *__pyx_n_s_values;
 static PyObject *__pyx_kp_s_values_must_have_two_or_more_dim;
-static PyObject *__pyx_n_s_varbounds_2;
+static PyObject *__pyx_n_s_varbounds;
 static PyObject *__pyx_n_s_vec;
 static PyObject *__pyx_n_s_vec_from;
 static PyObject *__pyx_n_s_vec_to;
@@ -6577,941 +5597,2520 @@ static PyObject *__pyx_n_s_ynorm;
 static PyObject *__pyx_n_s_zeropivot;
 static PyObject *__pyx_n_s_zmax;
 static PyObject *__pyx_n_s_zmin;
-static PyObject *__pyx_float_0_0;
-static PyObject *__pyx_float_1_0;
-static PyObject *__pyx_int_0;
-static PyObject *__pyx_int_1;
-static PyObject *__pyx_int_2;
-static PyObject *__pyx_int_3;
-static PyObject *__pyx_int_neg_1;
-static PyObject *__pyx_tuple_;
-static PyObject *__pyx_slice__8;
-static PyObject *__pyx_slice__9;
-static PyObject *__pyx_tuple__3;
-static PyObject *__pyx_tuple__4;
-static PyObject *__pyx_tuple__6;
-static PyObject *__pyx_tuple__7;
-static PyObject *__pyx_slice__52;
-static PyObject *__pyx_slice__60;
-static PyObject *__pyx_slice__61;
-static PyObject *__pyx_slice__64;
-static PyObject *__pyx_tuple__11;
-static PyObject *__pyx_tuple__12;
-static PyObject *__pyx_tuple__13;
-static PyObject *__pyx_tuple__14;
-static PyObject *__pyx_tuple__15;
-static PyObject *__pyx_tuple__16;
-static PyObject *__pyx_tuple__17;
-static PyObject *__pyx_tuple__18;
-static PyObject *__pyx_tuple__19;
-static PyObject *__pyx_tuple__20;
-static PyObject *__pyx_tuple__21;
-static PyObject *__pyx_tuple__22;
-static PyObject *__pyx_tuple__23;
-static PyObject *__pyx_tuple__24;
-static PyObject *__pyx_tuple__25;
-static PyObject *__pyx_tuple__26;
-static PyObject *__pyx_tuple__27;
-static PyObject *__pyx_tuple__28;
-static PyObject *__pyx_tuple__29;
-static PyObject *__pyx_tuple__30;
-static PyObject *__pyx_tuple__31;
-static PyObject *__pyx_tuple__33;
-static PyObject *__pyx_tuple__34;
-static PyObject *__pyx_tuple__35;
-static PyObject *__pyx_tuple__36;
-static PyObject *__pyx_tuple__37;
-static PyObject *__pyx_tuple__38;
-static PyObject *__pyx_tuple__39;
-static PyObject *__pyx_tuple__40;
-static PyObject *__pyx_tuple__41;
-static PyObject *__pyx_tuple__42;
-static PyObject *__pyx_tuple__43;
-static PyObject *__pyx_tuple__44;
-static PyObject *__pyx_tuple__45;
-static PyObject *__pyx_tuple__46;
-static PyObject *__pyx_tuple__47;
-static PyObject *__pyx_tuple__48;
-static PyObject *__pyx_tuple__49;
-static PyObject *__pyx_tuple__50;
-static PyObject *__pyx_tuple__51;
-static PyObject *__pyx_tuple__53;
-static PyObject *__pyx_tuple__54;
-static PyObject *__pyx_tuple__55;
-static PyObject *__pyx_tuple__56;
-static PyObject *__pyx_tuple__57;
-static PyObject *__pyx_tuple__58;
-static PyObject *__pyx_tuple__59;
-static PyObject *__pyx_tuple__62;
-static PyObject *__pyx_tuple__63;
-static PyObject *__pyx_tuple__65;
-static PyObject *__pyx_tuple__67;
-static PyObject *__pyx_tuple__69;
-static PyObject *__pyx_tuple__71;
-static PyObject *__pyx_tuple__73;
-static PyObject *__pyx_codeobj__66;
-static PyObject *__pyx_codeobj__68;
-static PyObject *__pyx_codeobj__70;
-static PyObject *__pyx_codeobj__72;
-static PyObject *__pyx_codeobj__74;
-static PyObject *__pyx_codeobj__75;
-
-/* "PETSc/PETSc.pyx":12
- *     ctypedef char const_char "const char"
- * 
- * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
- *      if p == NULL:
- *          return None
- */
-
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_bytes2str(const char *__pyx_v_p) {
-  PyObject *__pyx_v_s = 0;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  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);
-
-  /* "PETSc/PETSc.pyx":13
- * 
- * cdef inline object bytes2str(const_char p[]):
- *      if p == NULL:             # <<<<<<<<<<<<<<
- *          return None
- *      cdef bytes s = <char*>p
- */
-  __pyx_t_1 = ((__pyx_v_p == NULL) != 0);
-  if (__pyx_t_1) {
-
-    /* "PETSc/PETSc.pyx":14
- * cdef inline object bytes2str(const_char p[]):
- *      if p == NULL:
- *          return None             # <<<<<<<<<<<<<<
- *      cdef bytes s = <char*>p
- *      if isinstance(s, str):
- */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(Py_None);
-    __pyx_r = Py_None;
-    goto __pyx_L0;
-  }
-
-  /* "PETSc/PETSc.pyx":15
- *      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[11]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_v_s = ((PyObject*)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/PETSc.pyx":16
- *          return None
- *      cdef bytes s = <char*>p
- *      if isinstance(s, str):             # <<<<<<<<<<<<<<
- *          return s
- *      else:
- */
-  __pyx_t_1 = PyString_Check(__pyx_v_s); 
-  __pyx_t_3 = (__pyx_t_1 != 0);
-  if (__pyx_t_3) {
-
-    /* "PETSc/PETSc.pyx":17
- *      cdef bytes s = <char*>p
- *      if isinstance(s, str):
- *          return s             # <<<<<<<<<<<<<<
- *      else:
- *          return s.decode()
- */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(__pyx_v_s);
-    __pyx_r = __pyx_v_s;
-    goto __pyx_L0;
-  }
-  /*else*/ {
-
-    /* "PETSc/PETSc.pyx":19
- *          return s
- *      else:
- *          return s.decode()             # <<<<<<<<<<<<<<
- * 
- * cdef inline object str2bytes(object s, const_char *p[]):
- */
-    __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[11]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_r = __pyx_t_2;
-    __pyx_t_2 = 0;
-    goto __pyx_L0;
-  }
-
-  /* "PETSc/PETSc.pyx":12
- *     ctypedef char const_char "const char"
- * 
- * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
- *      if p == NULL:
- *          return None
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.bytes2str", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_s);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":21
- *          return s.decode()
- * 
- * cdef inline object str2bytes(object s, const_char *p[]):             # <<<<<<<<<<<<<<
- *     if s is None:
- *         p[0] = NULL
- */
-
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_str2bytes(PyObject *__pyx_v_s, const char **__pyx_v_p) {
-  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;
-  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);
-
-  /* "PETSc/PETSc.pyx":22
- * 
- * cdef inline object str2bytes(object s, const_char *p[]):
- *     if s is None:             # <<<<<<<<<<<<<<
- *         p[0] = NULL
- *         return None
- */
-  __pyx_t_1 = (__pyx_v_s == Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-
-    /* "PETSc/PETSc.pyx":23
- * cdef inline object str2bytes(object s, const_char *p[]):
- *     if s is None:
- *         p[0] = NULL             # <<<<<<<<<<<<<<
- *         return None
- *     if not isinstance(s, bytes):
- */
-    (__pyx_v_p[0]) = NULL;
-
-    /* "PETSc/PETSc.pyx":24
- *     if s is None:
- *         p[0] = NULL
- *         return None             # <<<<<<<<<<<<<<
- *     if not isinstance(s, bytes):
- *         s = s.encode()
- */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(Py_None);
-    __pyx_r = Py_None;
-    goto __pyx_L0;
-  }
-
-  /* "PETSc/PETSc.pyx":25
- *         p[0] = NULL
- *         return None
- *     if not isinstance(s, bytes):             # <<<<<<<<<<<<<<
- *         s = s.encode()
- *     p[0] = <const_char*>(<char*>s)
- */
-  __pyx_t_2 = PyBytes_Check(__pyx_v_s); 
-  __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
-  if (__pyx_t_1) {
-
-    /* "PETSc/PETSc.pyx":26
- *         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[11]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(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_filename = __pyx_f[11]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __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[11]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __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;
-  }
-  __pyx_L4:;
-
-  /* "PETSc/PETSc.pyx":27
- *     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[11]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  (__pyx_v_p[0]) = ((const char *)((char *)__pyx_t_6));
-
-  /* "PETSc/PETSc.pyx":28
- *         s = s.encode()
- *     p[0] = <const_char*>(<char*>s)
- *     return s             # <<<<<<<<<<<<<<
- * 
- * cdef inline object S_(const_char p[]):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_s);
-  __pyx_r = __pyx_v_s;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":21
- *          return s.decode()
- * 
- * cdef inline object str2bytes(object s, const_char *p[]):             # <<<<<<<<<<<<<<
- *     if s is None:
- *         p[0] = NULL
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.str2bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_s);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":30
- *     return s
- * 
- * cdef inline object S_(const_char p[]):             # <<<<<<<<<<<<<<
- *      if p == NULL: return None
- *      cdef object s = <char*>p
- */
-
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_S_(const char *__pyx_v_p) {
-  PyObject *__pyx_v_s = 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("S_", 0);
-
-  /* "PETSc/PETSc.pyx":31
- * 
- * 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_1 = ((__pyx_v_p == NULL) != 0);
-  if (__pyx_t_1) {
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(Py_None);
-    __pyx_r = Py_None;
-    goto __pyx_L0;
-  }
-
-  /* "PETSc/PETSc.pyx":32
- * 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[11]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_v_s = __pyx_t_2;
-  __pyx_t_2 = 0;
-
-  /* "PETSc/PETSc.pyx":33
- *      if p == NULL: return None
- *      cdef object s = <char*>p
- *      return s if isinstance(s, str) else s.decode()             # <<<<<<<<<<<<<<
- * 
- * 
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyString_Check(__pyx_v_s); 
-  if ((__pyx_t_1 != 0)) {
-    __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[11]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(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_filename = __pyx_f[11]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __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[11]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_2 = __pyx_t_3;
-    __pyx_t_3 = 0;
-  }
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":30
- *     return s
- * 
- * cdef inline object S_(const_char p[]):             # <<<<<<<<<<<<<<
- *      if p == NULL: return None
- *      cdef object s = <char*>p
- */
-
-  /* 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("petsc4py.PETSc.S_", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_s);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":49
- * cdef object PetscError = <object>PyExc_RuntimeError
- * 
- * cdef inline int SETERR(int ierr) with gil:             # <<<<<<<<<<<<<<
- *     if (<void*>PetscError) != NULL:
- *         PyErr_SetObject(PetscError, <long>ierr)
- */
-
-static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_SETERR(int __pyx_v_ierr) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  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);
-
-  /* "PETSc/PETSc.pyx":50
- * 
- * cdef inline int SETERR(int ierr) with gil:
- *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
- *         PyErr_SetObject(PetscError, <long>ierr)
- *     else:
- */
-  __pyx_t_1 = ((((void *)__pyx_v_8petsc4py_5PETSc_PetscError) != NULL) != 0);
-  if (__pyx_t_1) {
-
-    /* "PETSc/PETSc.pyx":51
- * cdef inline int SETERR(int ierr) with gil:
- *     if (<void*>PetscError) != NULL:
- *         PyErr_SetObject(PetscError, <long>ierr)             # <<<<<<<<<<<<<<
- *     else:
- *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
- */
-    __pyx_t_2 = __pyx_v_8petsc4py_5PETSc_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[11]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __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;
-    goto __pyx_L3;
-  }
-  /*else*/ {
-
-    /* "PETSc/PETSc.pyx":53
- *         PyErr_SetObject(PetscError, <long>ierr)
- *     else:
- *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)             # <<<<<<<<<<<<<<
- *     return ierr
- * 
- */
-    __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[11]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __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;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  }
-  __pyx_L3:;
-
-  /* "PETSc/PETSc.pyx":54
- *     else:
- *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
- *     return ierr             # <<<<<<<<<<<<<<
- * 
- * cdef inline int CHKERR(int ierr) nogil except -1:
- */
-  __pyx_r = __pyx_v_ierr;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":49
- * cdef object PetscError = <object>PyExc_RuntimeError
- * 
- * cdef inline int SETERR(int ierr) with gil:             # <<<<<<<<<<<<<<
- *     if (<void*>PetscError) != NULL:
- *         PyErr_SetObject(PetscError, <long>ierr)
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_WriteUnraisable("petsc4py.PETSc.SETERR", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
-  #endif
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":56
- *     return ierr
- * 
- * cdef inline int CHKERR(int ierr) nogil except -1:             # <<<<<<<<<<<<<<
- *     if ierr == 0:
- *         return 0 # no error
- */
-
-static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_CHKERR(int __pyx_v_ierr) {
-  int __pyx_r;
-  int __pyx_t_1;
-
-  /* "PETSc/PETSc.pyx":57
- * 
- * cdef inline int CHKERR(int ierr) nogil except -1:
- *     if ierr == 0:             # <<<<<<<<<<<<<<
- *         return 0 # no error
- *     if ierr == PETSC_ERR_PYTHON:
- */
-  __pyx_t_1 = ((__pyx_v_ierr == 0) != 0);
-  if (__pyx_t_1) {
-
-    /* "PETSc/PETSc.pyx":58
- * cdef inline int CHKERR(int ierr) nogil except -1:
- *     if ierr == 0:
- *         return 0 # no error             # <<<<<<<<<<<<<<
- *     if ierr == PETSC_ERR_PYTHON:
- *         return -1 # error in Python call
- */
-    __pyx_r = 0;
-    goto __pyx_L0;
-  }
-
-  /* "PETSc/PETSc.pyx":59
- *     if ierr == 0:
- *         return 0 # no error
- *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
- *         return -1 # error in Python call
- *     <void>SETERR(ierr)
- */
-  __pyx_t_1 = ((__pyx_v_ierr == PETSC_ERR_PYTHON) != 0);
-  if (__pyx_t_1) {
-
-    /* "PETSc/PETSc.pyx":60
- *         return 0 # no error
- *     if ierr == PETSC_ERR_PYTHON:
- *         return -1 # error in Python call             # <<<<<<<<<<<<<<
- *     <void>SETERR(ierr)
- *     return -1
- */
-    __pyx_r = -1;
-    goto __pyx_L0;
-  }
-
-  /* "PETSc/PETSc.pyx":61
- *     if ierr == PETSC_ERR_PYTHON:
- *         return -1 # error in Python call
- *     <void>SETERR(ierr)             # <<<<<<<<<<<<<<
- *     return -1
- * 
- */
-  ((void)__pyx_f_8petsc4py_5PETSc_SETERR(__pyx_v_ierr));
-
-  /* "PETSc/PETSc.pyx":62
- *         return -1 # error in Python call
- *     <void>SETERR(ierr)
- *     return -1             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  __pyx_r = -1;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":56
- *     return ierr
- * 
- * cdef inline int CHKERR(int ierr) nogil except -1:             # <<<<<<<<<<<<<<
- *     if ierr == 0:
- *         return 0 # no error
- */
-
-  /* function exit code */
-  __pyx_L0:;
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":84
- *     PetscScalar PyPetscScalar_AsPetscScalar(object) except*
- * 
- * cdef inline object toInt(PetscInt value):             # <<<<<<<<<<<<<<
- *     return value
- * cdef inline PetscInt asInt(object value) except? -1:
- */
-
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toInt(PetscInt __pyx_v_value) {
-  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);
-
-  /* "PETSc/PETSc.pyx":85
- * 
- * cdef inline object toInt(PetscInt value):
- *     return value             # <<<<<<<<<<<<<<
- * cdef inline PetscInt asInt(object value) except? -1:
- *     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[11]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":84
- *     PetscScalar PyPetscScalar_AsPetscScalar(object) except*
- * 
- * cdef inline object toInt(PetscInt value):             # <<<<<<<<<<<<<<
- *     return value
- * cdef inline PetscInt asInt(object value) except? -1:
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.toInt", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":86
- * cdef inline object toInt(PetscInt value):
- *     return value
- * cdef inline PetscInt asInt(object value) except? -1:             # <<<<<<<<<<<<<<
- *     return value
- * 
- */
-
-static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asInt(PyObject *__pyx_v_value) {
-  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);
-
-  /* "PETSc/PETSc.pyx":87
- *     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[11]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_t_1;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":86
- * cdef inline object toInt(PetscInt value):
- *     return value
- * cdef inline PetscInt asInt(object value) except? -1:             # <<<<<<<<<<<<<<
- *     return value
- * 
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.asInt", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":89
- *     return value
- * 
- * cdef inline object toReal(PetscReal value):             # <<<<<<<<<<<<<<
- *     return value
- * cdef inline PetscReal asReal(object value) except? -1:
- */
-
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toReal(PetscReal __pyx_v_value) {
-  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);
-
-  /* "PETSc/PETSc.pyx":90
- * 
- * cdef inline object toReal(PetscReal value):
- *     return value             # <<<<<<<<<<<<<<
- * cdef inline PetscReal asReal(object value) except? -1:
- *     return value
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":89
- *     return value
- * 
- * cdef inline object toReal(PetscReal value):             # <<<<<<<<<<<<<<
- *     return value
- * cdef inline PetscReal asReal(object value) except? -1:
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.toReal", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":91
- * cdef inline object toReal(PetscReal value):
- *     return value
- * cdef inline PetscReal asReal(object value) except? -1:             # <<<<<<<<<<<<<<
- *     return value
- * 
- */
-
-static CYTHON_INLINE PetscReal __pyx_f_8petsc4py_5PETSc_asReal(PyObject *__pyx_v_value) {
-  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);
-
-  /* "PETSc/PETSc.pyx":92
- *     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[11]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_t_1;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":91
- * cdef inline object toReal(PetscReal value):
- *     return value
- * cdef inline PetscReal asReal(object value) except? -1:             # <<<<<<<<<<<<<<
- *     return value
- * 
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.asReal", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1.0;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":94
- *     return value
- * 
- * cdef inline object toScalar(PetscScalar value):             # <<<<<<<<<<<<<<
- *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:
- */
-
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toScalar(PetscScalar __pyx_v_value) {
-  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);
-
-  /* "PETSc/PETSc.pyx":95
- * 
- * cdef inline object toScalar(PetscScalar value):
- *     return PyPetscScalar_FromPetscScalar(value)             # <<<<<<<<<<<<<<
- * cdef inline PetscScalar asScalar(object value) except*:
- *     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[11]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":94
- *     return value
- * 
- * cdef inline object toScalar(PetscScalar value):             # <<<<<<<<<<<<<<
- *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.toScalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/PETSc.pyx":96
- * cdef inline object toScalar(PetscScalar value):
- *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:             # <<<<<<<<<<<<<<
- *     return PyPetscScalar_AsPetscScalar(value)
- * 
- */
-
-static CYTHON_INLINE PetscScalar __pyx_f_8petsc4py_5PETSc_asScalar(PyObject *__pyx_v_value) {
-  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);
-
-  /* "PETSc/PETSc.pyx":97
- *     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[11]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_t_1;
-  goto __pyx_L0;
-
-  /* "PETSc/PETSc.pyx":96
- * cdef inline object toScalar(PetscScalar value):
- *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:             # <<<<<<<<<<<<<<
- *     return PyPetscScalar_AsPetscScalar(value)
- * 
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.asScalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/arraynpy.pxi":66
- * # --------------------------------------------------------------------
- * 
- * cdef inline ndarray asarray(object ob):             # <<<<<<<<<<<<<<
- *     return PyArray_FROM_O(ob)
- * 
- */
-
+static PyObject *__pyx_n_s_zoz;
+static PyObject *__pyx_n_s_zzo;
+static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_4__getbuffer__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_6__releasebuffer__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_buffer *__pyx_v_view); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_8__enter__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_10__exit__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+#if PY_MAJOR_VERSION < 3
+static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /* proto */
+#endif
+#if PY_MAJOR_VERSION < 3
+static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_14__getreadbuffer__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /* proto */
+#endif
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____get__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec, int __pyx_v_readonly); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_4__getbuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_6__releasebuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_buffer *__pyx_v_view); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_8__enter__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_10__exit__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+#if PY_MAJOR_VERSION < 3
+static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /* proto */
+#endif
+#if PY_MAJOR_VERSION < 3
+static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_14__getreadbuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /* proto */
+#endif
+#if PY_MAJOR_VERSION < 3
+static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_16__getwritebuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /* proto */
+#endif
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface_____get__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gvec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_2__enter__(struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1i___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1j___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1k___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1c___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5field___set__(struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self, struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_da, struct PyPetscVecObject *__pyx_v_vec, int __pyx_v_DOF); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_2__getitem__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_4__setitem__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_6__enter__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_8__exit__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_6starts___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_5sizes___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_5shape___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_7strides___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_5array___get__(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm, struct PyPetscVecObject *__pyx_v_gvec, PyObject *__pyx_v_locs); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_4__enter__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_6__exit__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_ierr); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_2__nonzero__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_4__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_7Options___init__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_7Options_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_7Options_4__contains__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6__getitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_7Options_8__setitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_7Options_10__delitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6prefix___get__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_2__set__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_4__del__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_12create(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_14destroy(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16clear(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18view(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20setFromOptions(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_22prefixPush(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_24prefixPop(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_26hasName(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_28setValue(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_30delValue(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_32getBool(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_34getInt(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_36getReal(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_38getScalar(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_40getString(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_42getAll(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_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_8petsc4py_5PETSc_3Sys_2getVersionInfo(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_seconds); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_errhandler); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_26infoAllow(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_28registerCitation(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_citation); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_klass); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_6begin(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_all); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_10destroy(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_flops); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_flops); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_18getTime(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogStage___cinit__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_2__int__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4__enter__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6__exit__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_8push(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_10pop(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_12getName(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4name___get__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogStage_4name_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_14activate(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_16deactivate(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_20setActive(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6active___get__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogStage_6active_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_24setVisible(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_7visible___get__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogStage_7visible_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_2id___get__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogClass___cinit__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2__int__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4getName(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4name___get__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogClass_4name_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6activate(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_8deactivate(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_10getActive(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_12setActive(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6active___get__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogClass_6active_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2id___get__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogEvent___cinit__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2__int__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4__enter__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6__exit__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_8begin(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_objs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10end(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_objs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_12barrierBegin(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, struct PyPetscCommObject *__pyx_v_comm, PyObject *__pyx_v_objs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_14barrierEnd(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, struct PyPetscCommObject *__pyx_v_comm, PyObject *__pyx_v_objs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_16getName(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4name___get__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_4name_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_18activate(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_20deactivate(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_22getActive(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_24setActive(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6active___get__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_6active_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_26getActiveAll(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28setActiveAll(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all___get__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_30getPerfInfo(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_stage); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2id___get__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4Comm___cinit__(struct PyPetscCommObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_4Comm_2__dealloc__(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4Comm_6__nonzero__(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_8destroy(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_10duplicate(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_12getSize(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_14getRank(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_16barrier(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4size___get__(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4rank___get__(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_7fortran___get__(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_18tompi4py(struct PyPetscCommObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Object___cinit__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_6Object_2__dealloc__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Object_6__nonzero__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_memo); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_12view(struct PyPetscObjectObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_14destroy(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_16getType(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_18setOptionsPrefix(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_20getOptionsPrefix(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_22setFromOptions(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, struct PyPetscObjectObject *__pyx_v_obj); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_attr); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48getDict(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_tab, struct PyPetscObjectObject *__pyx_v_parent); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Object_4type_2__set__(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Object_6prefix_2__set__(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Object_4name_2__set__(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7fortran___get__(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(struct PyPetscViewerObject *__pyx_v_self, struct PyPetscObjectObject *__pyx_v_obj); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_obj); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_6destroy(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_display, PyObject *__pyx_v_title, PyObject *__pyx_v_position, PyObject *__pyx_v_size, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_vwr_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30pushFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32popFormat(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38ASCII(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42DRAW(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44flush(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46setFileMode(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50setFileName(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_display, PyObject *__pyx_v_title, PyObject *__pyx_v_position, PyObject *__pyx_v_size); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56clearDraw(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_4setTimestep(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self, PyObject *__pyx_v_timestep); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self, PyObject *__pyx_v_group); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_10popGroup(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_12getGroup(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Random___cinit__(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_2__call__(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4view(struct PyPetscRandomObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_6destroy(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8create(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_10setType(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_rnd_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_12getType(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_14setFromOptions(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_16getValue(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_18getValueReal(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_20getSeed(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_22setSeed(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_seed); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_interval); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4seed___get__(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Random_4seed_2__set__(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8interval___get__(struct PyPetscRandomObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_6Random_8interval_2__set__(struct PyPetscRandomObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2IS___cinit__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2IS_2__getbuffer__(struct PyPetscISObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(struct PyPetscISObject *__pyx_v_self, Py_buffer *__pyx_v_view); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6__enter__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8__exit__(struct PyPetscISObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10view(struct PyPetscISObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_12destroy(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_14create(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_16setType(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_is_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_18getType(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_bsize, PyObject *__pyx_v_indices, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_first, PyObject *__pyx_v_step, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_26duplicate(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_32allGather(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_34toGeneral(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_36invertPermutation(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_nlocal); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_38getSize(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_40getLocalSize(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_44getBlockSize(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_46setBlockSize(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_bs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_48sort(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_52setPermutation(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_56setIdentity(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_60equal(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_68difference(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_nmin, PyObject *__pyx_v_nmax); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_drop); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_74setIndices(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_indices); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_78setBlockIndices(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_bsize, PyObject *__pyx_v_indices); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_82setStride(struct PyPetscISObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_first, PyObject *__pyx_v_step); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_86getInfo(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_11permutation___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8identity___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6sorted___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5sizes___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_4size___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10local_size___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10block_size___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_7indices___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5array___get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_19__array_interface_____get__(struct PyPetscISObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_2__call__(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf, PyObject *__pyx_v_start); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_map_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_map_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_info___get__(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Vec___cinit__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_2__pos__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4__neg__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6__abs__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8__iadd__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10__isub__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12__imul__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_14__idiv__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#endif
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_16__itruediv__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_18__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_20__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_22__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_24__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#endif
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_26__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_28__getitem__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Vec_30__setitem__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_i, PyObject *__pyx_v_v); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Vec_32__getbuffer__(struct PyPetscVecObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(struct PyPetscVecObject *__pyx_v_self, Py_buffer *__pyx_v_view); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_36__enter__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_38__exit__(struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_40view(struct PyPetscVecObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_42destroy(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_44create(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_46setType(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vec_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_array, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts, PyObject *__pyx_v_array, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_isets, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_64setOptionsPrefix(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_66getOptionsPrefix(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_68setFromOptions(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_70setUp(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_72setOption(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_option, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_74getType(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_76getSize(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_78getLocalSize(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_82setBlockSize(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_bsize); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_84getBlockSize(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_86getOwnershipRange(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_90getBuffer(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_readonly); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_92getArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_readonly); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_94setArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_array); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_array); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_98resetArray(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_force); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_handle, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_array); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108chop(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112equal(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dot(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotBegin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118dotEnd(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDot(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotBegin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_124tDotEnd(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_126mDot(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_128mDotBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_130mDotEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_132mtDot(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_134mtDotBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136mtDotEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138norm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142normEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144sum(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146min(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148max(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_150normalize(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_152reciprocal(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_154exp(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_156log(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_158sqrtabs(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_160abs(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162conjugate(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164setRandom(struct PyPetscVecObject *__pyx_v_self, struct PyPetscRandomObject *__pyx_v_random); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166permute(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_order, PyObject *__pyx_v_invert); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_168zeroEntries(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170set(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_172isset(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_idx, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_174scale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_176shift(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178chop(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_180swap(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_182axpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_184isaxpy(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_idx, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_186aypx(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188axpby(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_190waxpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192maxpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alphas, PyObject *__pyx_v_vecs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMult(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseDivide(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200pointwiseMax(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202pointwiseMaxAbs(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204maxPointwiseDivide(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206getValue(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_208getValues(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValue(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_212setValues(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValuesBlocked(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_216setLGMap(struct PyPetscVecObject *__pyx_v_self, struct PyPetscLGMapObject *__pyx_v_lgmap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValueLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220setValuesLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222setValuesBlockedLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemblyBegin(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226assemblyEnd(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228assemble(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideScale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240strideScatter(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242strideGather(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244localForm(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdateBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdate(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252setMPIGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256restoreSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_sx, PyObject *__pyx_v_idxm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Vec_5sizes_2__set__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_r___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_r___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6buffer___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5array___get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Vec_5array_2__set__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_19__array_interface_____get__(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_7Scatter___cinit__(struct PyPetscScatterObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_2__call__(struct PyPetscScatterObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_4view(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_6destroy(struct PyPetscScatterObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscISObject *__pyx_v_is_from, struct PyPetscVecObject *__pyx_v_vec_to, struct PyPetscISObject *__pyx_v_is_to); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_10copy(struct PyPetscScatterObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_18end(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(struct PyPetscScatterObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec_from, struct PyPetscVecObject *__pyx_v_vec_to, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_7Section___cinit__(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_7Section_2__dealloc__(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_4view(struct PyPetscSectionObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_6destroy(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_8create(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_10clone(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_12setUp(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_14reset(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_16getNumFields(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_18setNumFields(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_numFields); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_20getFieldName(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_22setFieldName(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_fieldName); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_24getFieldComponents(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_26setFieldComponents(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_numComp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_28getChart(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_30setChart(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_pStart, PyObject *__pyx_v_pEnd); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_32getDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_34setDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_numDof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_36addDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_numDof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_38getFieldDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_40setFieldDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_numDof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_42addFieldDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_numDof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_44getConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_46setConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_numDof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_48addConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_numDof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_50getFieldConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_52setFieldConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_numDof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_54addFieldConstraintDof(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_numDof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_56getConstraintIndices(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_58setConstraintIndices(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_indices); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_62setFieldConstraintIndices(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field, PyObject *__pyx_v_indices); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_64getMaxDof(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_66getStorageSize(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_68getConstrainedStorageSize(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_70getOffset(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_72setOffset(struct PyPetscSectionObject *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_offset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_74getOffsetRange(struct PyPetscSectionObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct PyPetscSectionObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_2__pos__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4__neg__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_6__iadd__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_8__isub__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10__imul__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12__idiv__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#endif
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_14__itruediv__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#endif
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_26__getitem__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ij); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Mat_28__setitem__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ij, PyObject *__pyx_v_v); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_34destroy(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_38setType(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mat_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_42setBlockSize(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_bsize); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_44setBlockSizes(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row_bsize, PyObject *__pyx_v_col_bsize); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_nnz, PyObject *__pyx_v_csr, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_nnz, PyObject *__pyx_v_csr, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_nnz, PyObject *__pyx_v_csr, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_nnz, PyObject *__pyx_v_csr, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_nnz); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_csr); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_csr, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_array, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_array); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMatObject *__pyx_v_self, struct PyPetscScatterObject *__pyx_v_scatter, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_U, struct PyPetscMatObject *__pyx_v_V); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mats, PyObject *__pyx_v_isrows, PyObject *__pyx_v_iscols, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_78setPythonContext(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_80getPythonContext(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_82setPythonType(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_84setOptionsPrefix(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_86getOptionsPrefix(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_88setFromOptions(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_90setUp(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_92setOption(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_option, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_94getType(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_96getSize(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_98getLocalSize(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_102getBlockSize(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_104getBlockSizes(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_106getOwnershipRange(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_114getOwnershipIS(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116getInfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_info); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118duplicate(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_copy); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_structure); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122load(struct PyPetscMatObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mat_type, struct PyPetscMatObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134permute(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_row, struct PyPetscISObject *__pyx_v_col); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136equal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_tol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetric(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isSymmetricKnown(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitian(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isHermitianKnown(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_148isStructurallySymmetric(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150zeroEntries(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValue(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValues(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_symmetric, PyObject *__pyx_v_compressed); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_symmetric, PyObject *__pyx_v_compressed); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_164setValue(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_166setValues(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlocked(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setValuesBlockedCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setLGMap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscLGMapObject *__pyx_v_rmap, struct PyPetscLGMapObject *__pyx_v_cmap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValueLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesLocalCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_starts, PyObject *__pyx_v_dof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206setValueBlockedStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214storeValues(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216retrieveValues(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyBegin(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyEnd(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222assemble(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224isAssembled(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_side); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecRight(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecLeft(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_column, struct PyPetscVecObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_nsubcomm, PyObject *__pyx_v_subcomm, struct PyPetscMatObject *__pyx_v_out); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240setDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_diag, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_L, struct PyPetscVecObject *__pyx_v_R); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNullSpace(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250setNearNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252getNearNullSpace(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254mult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256multAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258multTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260multTransposeAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262multHermitian(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264multHermitianAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x, PyObject *__pyx_v_omega, PyObject *__pyx_v_sortype, PyObject *__pyx_v_shift, PyObject *__pyx_v_its, PyObject *__pyx_v_lits); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getDiagonalBlock(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270increaseOverlap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_overlap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_isrows, PyObject *__pyx_v_iscols, PyObject *__pyx_v_submats); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276getLocalSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278restoreLocalSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282scale(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284shift(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286chop(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288axpy(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscMatObject *__pyx_v_X, PyObject *__pyx_v_structure); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290aypx(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscMatObject *__pyx_v_X, PyObject *__pyx_v_structure); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matMultSymbolic(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_fill); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302getOrdering(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ord_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304reorderForNonzeroDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_atol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_306factorLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310factorNumericLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_312factorILU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorSymbolicILU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_316factorCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320factorNumericCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322factorICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324factorSymbolicICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328setUnfactored(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330setMumpsIcntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl, PyObject *__pyx_v_ival); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332getMumpsIcntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334setMumpsCntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl, PyObject *__pyx_v_val); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336getMumpsCntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getMumpsInfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getMumpsInfog(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsRinfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_344getMumpsRinfog(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_346solveForward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_348solveBackward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_350solve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_352solveTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_354solveAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_y, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_356solveTransposeAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_y, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_358matSolve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_B, struct PyPetscMatObject *__pyx_v_X); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3Mat_5sizes_2__set__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_2__call__(struct PyPetscNullSpaceObject *__pyx_v_self, PyObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSpaceObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_6destroy(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNullSpaceObject *__pyx_v_self, PyObject *__pyx_v_constant, PyObject *__pyx_v_vectors, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct PyPetscNullSpaceObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_coords); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPetscNullSpaceObject *__pyx_v_self, PyObject *__pyx_v_function, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_18getFunction(struct PyPetscNullSpaceObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_20remove(struct PyPetscNullSpaceObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_10setType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_pc_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_14setOptionsPrefix(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_18setFromOptions(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_P); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_26setUp(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_28reset(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_30setUpOnBlocks(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_32apply(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_34applyTranspose(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_36applySymmetricLeft(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_38applySymmetricRight(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_42setDM(struct PyPetscPCObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_coordinates); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_48setPythonContext(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_52setPythonType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_54setASMType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_asmtype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_56setASMOverlap(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_58setASMLocalSubdomains(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_nsd); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_60setASMTotalSubdomains(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_nsd); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_64setGASMType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_gasmtype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_66setGASMOverlap(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_68setGAMGType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_gamgtype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_70setGAMGLevels(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_levels); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_72setGAMGSmooths(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_smooths); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74getHYPREType(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76setHYPREType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_hypretype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setHYPREDiscreteCurl(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setHYPREDiscreteGradient(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setHYPRESetAlphaPoissonMatrix(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86setHYPRESetEdgeConstantVectors(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_ozz, struct PyPetscVecObject *__pyx_v_zoz, struct PyPetscVecObject *__pyx_v_zzo); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFactorSolverPackage(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_solver); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90getFactorSolverPackage(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ord_type, PyObject *__pyx_v_nzdiag, PyObject *__pyx_v_reuse); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_zeropivot, PyObject *__pyx_v_inblocks); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_shift_type, PyObject *__pyx_v_amount); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFactorLevels(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_levels); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100getFactorMatrix(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_102setFieldSplitType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_fields); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_bsize, PyObject *__pyx_v_fields); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_110setFieldSplitSchurFactType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ptype, struct PyPetscMatObject *__pyx_v_pre); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setReusePreconditioner(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116setCompositeType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118getCompositePC(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120addCompositePC(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_pc_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122getKSP(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGType(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126setMGType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_mgtype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGLevels(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGCoarseSolve(struct PyPetscPCObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_132setMGInterpolation(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134getMGInterpolation(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_136setMGRestriction(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_138getMGRestriction(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_140setMGRScale(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rscale); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_142getMGRScale(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_144getMGSmoother(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_146getMGSmootherDown(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_148getMGSmootherUp(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_150setMGCyclesOnLevel(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, PyObject *__pyx_v_ncycle); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_152setMGRhs(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rhs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_154setMGX(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_156setMGR(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_r); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_b, PyObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6destroy(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_10setType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_ksp_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_14setOptionsPrefix(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_18setFromOptions(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_20setAppCtx(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_22getAppCtx(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_26setDM(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setComputeRHS(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rhs, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32setComputeOperators(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_operators, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_P); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getOperators(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setPC(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscPCObject *__pyx_v_pc); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getPC(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol, PyObject *__pyx_v_divtol, PyObject *__pyx_v_max_it); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48getConvergenceTest(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50callConvergenceTest(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54getConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56logConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rnorm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60getMonitor(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_62cancelMonitor(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64monitor(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_66setPCSide(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_side); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getPCSide(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setNormType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_normtype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getNormType(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_88getInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_90setUseFischerGuess(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_model, PyObject *__pyx_v_size); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_92setUp(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_94reset(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_96setUpOnBlocks(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_98solve(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100solveTranspose(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_102setIterationNumber(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getIterationNumber(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_106setResidualNorm(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rnorm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getResidualNorm(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110setConvergedReason(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getConvergedReason(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getRhs(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116getSolution(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_right, PyObject *__pyx_v_left); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_r); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_128setGMRESRestart(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_restart); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130createPython(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonContext(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_134getPythonContext(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_136setPythonType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_6appctx_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_2dm_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_op___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_pc___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4rtol___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_4rtol_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4atol___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_4atol_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6divtol___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_6divtol_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6max_it___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_6max_it_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_3its_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_4norm_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3KSP_6reason_2__set__(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9iterating___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9converged___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8diverged___get__(struct PyPetscKSPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES___cinit__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2view(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4destroy(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6create(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8setType(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_snes_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_10getType(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_12setOptionsPrefix(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_14getOptionsPrefix(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_16setFromOptions(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_18setAppCtx(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_20getAppCtx(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_22getDM(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_24setDM(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_26setFASInterpolation(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_28getFASInterpolation(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_30setFASRestriction(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_32getFASRestriction(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_34setFASInjection(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_36getFASInjection(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_38setFASRScale(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_levels, PyObject *__pyx_v_comms); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_42getFASLevels(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_44getFASCycleSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_46getFASCoarseSolve(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_48getFASSmoother(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_50getFASSmootherDown(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_52getFASSmootherUp(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_54getNPC(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_58setNPC(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscSNESObject *__pyx_v_snes); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_initialguess, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_62getInitialGuess(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_66getFunction(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_update, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_70getUpdate(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_74getJacobian(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_objective, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_78getObjective(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_80computeFunction(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol, PyObject *__pyx_v_stol, PyObject *__pyx_v_max_it); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_90setNormSchedule(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_normsched); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96getConvergenceTest(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_xnorm, PyObject *__pyx_v_ynorm, PyObject *__pyx_v_fnorm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_norm, PyObject *__pyx_v_linear_its); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110getMonitor(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112cancelMonitor(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_funcs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setUp(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_136reset(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscKSPObject *__pyx_v_ksp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_targs, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_version, PyObject *__pyx_v_rtol_0, PyObject *__pyx_v_rtol_max, PyObject *__pyx_v_gamma, PyObject *__pyx_v_alpha, PyObject *__pyx_v_alpha2, PyObject *__pyx_v_threshold); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176getUseFD(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_178setVariableBounds(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setPythonContext(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6appctx___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_6appctx_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2dm___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_2dm_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3npc___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_3npc_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_sol___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_upd___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_rhs___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3ksp___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_3ksp_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4rtol___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_4rtol_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4atol___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_4atol_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4stol___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_4stol_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6max_it___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_6max_it_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3its___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_3its_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7history___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6reason___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_6reason_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9iterating___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9converged___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8diverged___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4load(struct PyPetscTSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6destroy(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8create(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10clone(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ts_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getType(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setProblemType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ptype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setEquationType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_eqtype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setOptionsPrefix(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28setFromOptions(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setAppCtx(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32getAppCtx(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSFunctionLinear(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54computeIFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_imex); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56computeIJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, PyObject *__pyx_v_a, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_imex); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getIJacobian(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62setSolution(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getSolution(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getSNES(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_68getKSP(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_70getDM(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72setDM(struct PyPetscTSObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74setTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76getTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_78getPrevTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getSolveTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setInitialTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_initial_time, PyObject *__pyx_v_initial_time_step); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84setTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_time_step); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86getTimeStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88setStepNumber(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step_number); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90getStepNumber(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92setMaxTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94getMaxTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96setMaxSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_steps); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getMaxSteps(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100setDuration(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time, PyObject *__pyx_v_max_steps); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102getDuration(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getTotalSteps(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setMaxStepRejections(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSNESFailures(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setErrorIfStepFails(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124setExactFinalTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_option); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126setConvergedReason(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getMonitor(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134cancelMonitor(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136monitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step, PyObject *__pyx_v_time, struct PyPetscVecObject *__pyx_v_u); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_138setPreStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prestep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140getPreStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142setPostStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_poststep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_144getPostStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146setUp(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148reset(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150step(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152rollBack(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154solve(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156interpolate(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_u); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158createPython(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160setPythonContext(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164setPythonType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setTheta(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_theta); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170setThetaEndpoint(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_172getThetaEndpoint(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_174setAlphaRadius(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_radius); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_alpha_m, PyObject *__pyx_v_alpha_f, PyObject *__pyx_v_gamma); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_6appctx_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_2dm_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_12problem_type_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_13equation_type_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_4time_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_9time_step_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_11step_number_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_8max_time_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_9max_steps_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4rtol___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_4rtol_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4atol___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_4atol_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2TS_6reason_2__set__(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9iterating___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9converged___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8diverged___get__(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3TAO___cinit__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_2view(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4destroy(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6create(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8setType(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_tao_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_10getType(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12setOptionsPrefix(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_14getOptionsPrefix(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16setFromOptions(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_18setUp(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_20setInitialTrustRegionRadius(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_radius); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_22setAppCtx(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_24getAppCtx(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_26setInitial(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_28setObjective(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_objective, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setSeparableObjective(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_separable, struct PyPetscVecObject *__pyx_v_O, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setGradient(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_gradient, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setObjectiveGradient(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_objgrad, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_varbounds, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setConstraints(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_constraints, struct PyPetscVecObject *__pyx_v_C, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setHessian(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_hessian, struct PyPetscMatObject *__pyx_v_H, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setJacobian(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setStateDesignIS(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_state, struct PyPetscISObject *__pyx_v_design); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setJacobianState(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian_state, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, struct PyPetscMatObject *__pyx_v_I, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianDesign(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian_design, struct PyPetscMatObject *__pyx_v_J, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50computeObjective(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeSeparableObjective(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_54computeGradient(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeObjectiveGradient(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeDualVariables(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeConstraints(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_c); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_64computeHessian(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_H, struct PyPetscMatObject *__pyx_v_P); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeJacobian(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68setTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_gatol, PyObject *__pyx_v_grtol, PyObject *__pyx_v_gttol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_70getTolerances(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_72setConstraintTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_catol, PyObject *__pyx_v_crtol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_74getConstraintTolerances(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_76setConvergenceTest(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78getConvergenceTest(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80setConvergedReason(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82getConvergedReason(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84setMonitor(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86getMonitor(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_88cancelMonitor(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_90solve(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getSolution(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94getGradient(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_96setGradientNorm(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_98getGradientNorm(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_100setLMVMH0(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getLMVMH0(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_104getLMVMH0KSP(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_106getVariableBounds(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_108getIterationNumber(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_110getObjectiveValue(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_112getConvergedReason(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_114getSolutionNorm(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_116getSolutionStatus(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getKSP(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6appctx___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3TAO_6appctx_2__set__(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3ksp___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ftol___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ftol_2__set__(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4gtol___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3TAO_4gtol_2__set__(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ctol___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ctol_2__set__(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3its___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5gnorm___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5cnorm___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8solution___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9objective___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8function___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8gradient___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6reason___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9iterating___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9converged___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8diverged___get__(struct PyPetscTAOObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2AO___cinit__(struct PyPetscAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_2view(struct PyPetscAOObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_4destroy(struct PyPetscAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_6createBasic(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_8createMemoryScalable(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_10createMapping(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_12getType(struct PyPetscAOObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_14app2petsc(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_indices); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_16petsc2app(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_indices); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2DM___cinit__(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_2view(struct PyPetscDMObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_4destroy(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_6create(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_8clone(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_10setType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_12getType(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_14getDimension(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_16setDimension(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dim); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_18setOptionsPrefix(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_20setFromOptions(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_22setUp(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_24setAppCtx(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_26getAppCtx(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_28getBlockSize(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_30setVecType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_vec_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_32createGlobalVec(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_34createLocalVec(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_36globalToLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg, struct PyPetscVecObject *__pyx_v_vl, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_38localToGlobal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl, struct PyPetscVecObject *__pyx_v_vg, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl, struct PyPetscVecObject *__pyx_v_vlg, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_mat_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_58createMat(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_62createInjection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_76setDefaultSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_84createDefaultSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_localsec, struct PyPetscSectionObject *__pyx_v_globalsec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_90setPointSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_92getNumLabels(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_98createLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_102getLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_104setLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_106clearLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_116clearLabelStratum(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_118setLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_output); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_dof, PyObject *__pyx_v_sizes, PyObject *__pyx_v_proc_sizes, PyObject *__pyx_v_boundary_type, PyObject *__pyx_v_stencil_type, PyObject *__pyx_v_stencil_width, int __pyx_v_setup, PyObject *__pyx_v_ownership_ranges, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_dof, PyObject *__pyx_v_boundary_type, PyObject *__pyx_v_stencil_type, PyObject *__pyx_v_stencil_width); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_4setDim(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_dim); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6getDim(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_8setDof(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_dof); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10getDof(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12setSizes(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_sizes); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_14getSizes(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_16setProcSizes(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_proc_sizes); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_18getProcSizes(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_20setBoundaryType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_boundary_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_22getBoundaryType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_24setStencilType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_stencil_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_26getStencilType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_28setStencilWidth(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_stencil_width); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_30getStencilWidth(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_32setStencil(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_stencil_type, PyObject *__pyx_v_stencil_width); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_34getStencil(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46setFieldName(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48getFieldName(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getVecArray(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_xmin, PyObject *__pyx_v_xmax, PyObject *__pyx_v_ymin, PyObject *__pyx_v_ymax, PyObject *__pyx_v_zmin, PyObject *__pyx_v_zmax); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54setCoordinateName(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_56getCoordinateName(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_58getBoundingBox(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getLocalBoundingBox(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62createNaturalVec(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_64globalToNatural(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg, struct PyPetscVecObject *__pyx_v_vn, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66naturalToGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vn, struct PyPetscVecObject *__pyx_v_vg, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_68getAO(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getScatter(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setRefinementFactor(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_refine_x, PyObject *__pyx_v_refine_y, PyObject *__pyx_v_refine_z); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getRefinementFactor(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76setInterpolationType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_interp_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_78getInterpolationType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_80setElementType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_elem_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_82getElementType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_elem_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dim___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dof___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_5sizes___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10proc_sizes___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13boundary_type___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7stencil___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12stencil_type___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_create(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_cells, PyObject *__pyx_v_coords, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_numcells, PyObject *__pyx_v_boundary_type, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cgid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_exoid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_hasLagrange, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_pStart, PyObject *__pyx_v_pEnd); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_cone, PyObject *__pyx_v_orientation); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_conePoint); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_coneOrientation); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_orientation); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_supp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_50symmetrize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_52stratify(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_54orient(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60createPointNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepthStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getHeightStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_useCone); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_74vecGetClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_boundary, PyObject *__pyx_v_name, PyObject *__pyx_v_interpolate); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_edges); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_faces); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_label); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88setAdjacencyUseCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useCone); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90setAdjacencyUseClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useClosure); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94distribute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96distributeOverlap(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, struct PyPetscSectionObject *__pyx_v_newsec, struct PyPetscVecObject *__pyx_v_newvec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_numComp, PyObject *__pyx_v_numDof, PyObject *__pyx_v_bcField, PyObject *__pyx_v_bcComps, PyObject *__pyx_v_bcPoints, struct PyPetscISObject *__pyx_v_perm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104setRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementUniform); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementLimit); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112getOrdering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_otype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscISObject *__pyx_v_perm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cell); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_create(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm, PyObject *__pyx_v_args); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_4getNumber(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gvec, PyObject *__pyx_v_lvecs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gvec, PyObject *__pyx_v_imode, PyObject *__pyx_v_lvecs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_14getLocalISs(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_18getAccess(struct __pyx_obj_8petsc4py_5PETSc_DMComposite *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gvec, PyObject *__pyx_v_locs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_create(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_2setMatrix(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_4setGlobalVector(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscVecObject *__pyx_v_gv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_6setLocalVector(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscVecObject *__pyx_v_lv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_gvec, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_lvec, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_14setGlobalToLocalVecScatter(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscScatterObject *__pyx_v_gtol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_18setLocalToGlobalVecScatter(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscScatterObject *__pyx_v_ltog); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_22setLocalToLocalVecScatter(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, struct PyPetscScatterObject *__pyx_v_ltol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_matrix, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_coarsen, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_refine, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_interpolation, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_injection, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecomposition(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_decomp, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_subdm, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_2SF___cinit__(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static void __pyx_pf_8petsc4py_5PETSc_2SF_2__dealloc__(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_4view(struct PyPetscSFObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_6destroy(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_8create(struct PyPetscSFObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_10setType(struct PyPetscSFObject *__pyx_v_self, PyObject *__pyx_v_sf_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_12getType(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_14setFromOptions(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_16setUp(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_18reset(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject *__pyx_v_self, PyObject *__pyx_v_nroots, PyObject *__pyx_v_nleaves, PyObject *__pyx_v_local, PyObject *__pyx_v_remote); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_24setRankOrder(struct PyPetscSFObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_26getMulti(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_28createInverse(struct PyPetscSFObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_11Partitioner___cinit__(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_2view(struct PyPetscPartitionerObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_4destroy(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_6create(struct PyPetscPartitionerObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_8setType(struct PyPetscPartitionerObject *__pyx_v_self, PyObject *__pyx_v_part_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_10getType(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_12setFromOptions(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_14setUp(struct PyPetscPartitionerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(struct PyPetscPartitionerObject *__pyx_v_self, PyObject *__pyx_v_numProcs, PyObject *__pyx_v_sizes, PyObject *__pyx_v_points); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Comm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Object(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Viewer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Random(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_IS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LGMap(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_SF(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Vec(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Scatter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Section(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Mat(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_NullSpace(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_PC(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_KSP(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_SNES(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_TS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_TAO(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_AO(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DM(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Partitioner(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc__IS_buffer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Vec_buffer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Vec_LocalForm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Mat_Stencil(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc__DMDA_Vec_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc__DMComposite_access(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Options(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Sys(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Log(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogStage(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogClass(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogEvent(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_ViewerHDF5(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DMDA(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DMPlex(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DMComposite(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DMShell(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_keys = {0, &__pyx_n_s_keys, 0, 0, 0};
+static __Pyx_CachedCFunction __pyx_umethod_PyList_Type_pop = {0, &__pyx_n_s_pop, 0, 0, 0};
+static PyObject *__pyx_float_0_0;
+static PyObject *__pyx_float_1_0;
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_2;
+static PyObject *__pyx_int_3;
+static PyObject *__pyx_int_neg_1;
+static PyObject *__pyx_tuple_;
+static PyObject *__pyx_slice__8;
+static PyObject *__pyx_slice__9;
+static PyObject *__pyx_tuple__3;
+static PyObject *__pyx_tuple__4;
+static PyObject *__pyx_tuple__6;
+static PyObject *__pyx_tuple__7;
+static PyObject *__pyx_slice__55;
+static PyObject *__pyx_slice__63;
+static PyObject *__pyx_slice__64;
+static PyObject *__pyx_slice__67;
+static PyObject *__pyx_tuple__11;
+static PyObject *__pyx_tuple__12;
+static PyObject *__pyx_tuple__13;
+static PyObject *__pyx_tuple__14;
+static PyObject *__pyx_tuple__15;
+static PyObject *__pyx_tuple__16;
+static PyObject *__pyx_tuple__17;
+static PyObject *__pyx_tuple__18;
+static PyObject *__pyx_tuple__19;
+static PyObject *__pyx_tuple__20;
+static PyObject *__pyx_tuple__21;
+static PyObject *__pyx_tuple__22;
+static PyObject *__pyx_tuple__23;
+static PyObject *__pyx_tuple__24;
+static PyObject *__pyx_tuple__25;
+static PyObject *__pyx_tuple__26;
+static PyObject *__pyx_tuple__27;
+static PyObject *__pyx_tuple__28;
+static PyObject *__pyx_tuple__29;
+static PyObject *__pyx_tuple__30;
+static PyObject *__pyx_tuple__31;
+static PyObject *__pyx_tuple__33;
+static PyObject *__pyx_tuple__34;
+static PyObject *__pyx_tuple__35;
+static PyObject *__pyx_tuple__36;
+static PyObject *__pyx_tuple__37;
+static PyObject *__pyx_tuple__38;
+static PyObject *__pyx_tuple__39;
+static PyObject *__pyx_tuple__40;
+static PyObject *__pyx_tuple__41;
+static PyObject *__pyx_tuple__42;
+static PyObject *__pyx_tuple__43;
+static PyObject *__pyx_tuple__44;
+static PyObject *__pyx_tuple__45;
+static PyObject *__pyx_tuple__46;
+static PyObject *__pyx_tuple__47;
+static PyObject *__pyx_tuple__48;
+static PyObject *__pyx_tuple__49;
+static PyObject *__pyx_tuple__50;
+static PyObject *__pyx_tuple__51;
+static PyObject *__pyx_tuple__52;
+static PyObject *__pyx_tuple__53;
+static PyObject *__pyx_tuple__54;
+static PyObject *__pyx_tuple__56;
+static PyObject *__pyx_tuple__57;
+static PyObject *__pyx_tuple__58;
+static PyObject *__pyx_tuple__59;
+static PyObject *__pyx_tuple__60;
+static PyObject *__pyx_tuple__61;
+static PyObject *__pyx_tuple__62;
+static PyObject *__pyx_tuple__65;
+static PyObject *__pyx_tuple__66;
+static PyObject *__pyx_tuple__68;
+static PyObject *__pyx_tuple__70;
+static PyObject *__pyx_tuple__72;
+static PyObject *__pyx_tuple__74;
+static PyObject *__pyx_tuple__76;
+static PyObject *__pyx_codeobj__69;
+static PyObject *__pyx_codeobj__71;
+static PyObject *__pyx_codeobj__73;
+static PyObject *__pyx_codeobj__75;
+static PyObject *__pyx_codeobj__77;
+static PyObject *__pyx_codeobj__78;
+
+/* "PETSc/PETSc.pyx":12
+ *     ctypedef char const_char "const char"
+ * 
+ * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
+ *      if p == NULL:
+ *          return None
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_bytes2str(const char *__pyx_v_p) {
+  PyObject *__pyx_v_s = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("bytes2str", 0);
+
+  /* "PETSc/PETSc.pyx":13
+ * 
+ * cdef inline object bytes2str(const_char p[]):
+ *      if p == NULL:             # <<<<<<<<<<<<<<
+ *          return None
+ *      cdef bytes s = <char*>p
+ */
+  __pyx_t_1 = ((__pyx_v_p == NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/PETSc.pyx":14
+ * cdef inline object bytes2str(const_char p[]):
+ *      if p == NULL:
+ *          return None             # <<<<<<<<<<<<<<
+ *      cdef bytes s = <char*>p
+ *      if isinstance(s, str):
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+
+    /* "PETSc/PETSc.pyx":13
+ * 
+ * cdef inline object bytes2str(const_char p[]):
+ *      if p == NULL:             # <<<<<<<<<<<<<<
+ *          return None
+ *      cdef bytes s = <char*>p
+ */
+  }
+
+  /* "PETSc/PETSc.pyx":15
+ *      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_ERR(11, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_s = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/PETSc.pyx":16
+ *          return None
+ *      cdef bytes s = <char*>p
+ *      if isinstance(s, str):             # <<<<<<<<<<<<<<
+ *          return s
+ *      else:
+ */
+  __pyx_t_1 = PyString_Check(__pyx_v_s); 
+  __pyx_t_3 = (__pyx_t_1 != 0);
+  if (__pyx_t_3) {
+
+    /* "PETSc/PETSc.pyx":17
+ *      cdef bytes s = <char*>p
+ *      if isinstance(s, str):
+ *          return s             # <<<<<<<<<<<<<<
+ *      else:
+ *          return s.decode()
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(__pyx_v_s);
+    __pyx_r = __pyx_v_s;
+    goto __pyx_L0;
+
+    /* "PETSc/PETSc.pyx":16
+ *          return None
+ *      cdef bytes s = <char*>p
+ *      if isinstance(s, str):             # <<<<<<<<<<<<<<
+ *          return s
+ *      else:
+ */
+  }
+
+  /* "PETSc/PETSc.pyx":19
+ *          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_ERR(11, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_r = __pyx_t_2;
+    __pyx_t_2 = 0;
+    goto __pyx_L0;
+  }
+
+  /* "PETSc/PETSc.pyx":12
+ *     ctypedef char const_char "const char"
+ * 
+ * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
+ *      if p == NULL:
+ *          return None
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.bytes2str", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_s);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":21
+ *          return s.decode()
+ * 
+ * cdef inline object str2bytes(object s, const_char *p[]):             # <<<<<<<<<<<<<<
+ *     if s is None:
+ *         p[0] = NULL
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_str2bytes(PyObject *__pyx_v_s, const char **__pyx_v_p) {
+  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;
+  char *__pyx_t_6;
+  __Pyx_RefNannySetupContext("str2bytes", 0);
+  __Pyx_INCREF(__pyx_v_s);
+
+  /* "PETSc/PETSc.pyx":22
+ * 
+ * cdef inline object str2bytes(object s, const_char *p[]):
+ *     if s is None:             # <<<<<<<<<<<<<<
+ *         p[0] = NULL
+ *         return None
+ */
+  __pyx_t_1 = (__pyx_v_s == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/PETSc.pyx":23
+ * cdef inline object str2bytes(object s, const_char *p[]):
+ *     if s is None:
+ *         p[0] = NULL             # <<<<<<<<<<<<<<
+ *         return None
+ *     if not isinstance(s, bytes):
+ */
+    (__pyx_v_p[0]) = NULL;
+
+    /* "PETSc/PETSc.pyx":24
+ *     if s is None:
+ *         p[0] = NULL
+ *         return None             # <<<<<<<<<<<<<<
+ *     if not isinstance(s, bytes):
+ *         s = s.encode()
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+
+    /* "PETSc/PETSc.pyx":22
+ * 
+ * cdef inline object str2bytes(object s, const_char *p[]):
+ *     if s is None:             # <<<<<<<<<<<<<<
+ *         p[0] = NULL
+ *         return None
+ */
+  }
+
+  /* "PETSc/PETSc.pyx":25
+ *         p[0] = NULL
+ *         return None
+ *     if not isinstance(s, bytes):             # <<<<<<<<<<<<<<
+ *         s = s.encode()
+ *     p[0] = <const_char*>(<char*>s)
+ */
+  __pyx_t_2 = PyBytes_Check(__pyx_v_s); 
+  __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/PETSc.pyx":26
+ *         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_ERR(11, 26, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(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(11, 26, __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(11, 26, __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;
+
+    /* "PETSc/PETSc.pyx":25
+ *         p[0] = NULL
+ *         return None
+ *     if not isinstance(s, bytes):             # <<<<<<<<<<<<<<
+ *         s = s.encode()
+ *     p[0] = <const_char*>(<char*>s)
+ */
+  }
+
+  /* "PETSc/PETSc.pyx":27
+ *     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_ERR(11, 27, __pyx_L1_error)
+  (__pyx_v_p[0]) = ((const char *)((char *)__pyx_t_6));
+
+  /* "PETSc/PETSc.pyx":28
+ *         s = s.encode()
+ *     p[0] = <const_char*>(<char*>s)
+ *     return s             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object S_(const_char p[]):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_s);
+  __pyx_r = __pyx_v_s;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":21
+ *          return s.decode()
+ * 
+ * cdef inline object str2bytes(object s, const_char *p[]):             # <<<<<<<<<<<<<<
+ *     if s is None:
+ *         p[0] = NULL
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.str2bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_s);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":30
+ *     return s
+ * 
+ * cdef inline object S_(const_char p[]):             # <<<<<<<<<<<<<<
+ *      if p == NULL: return None
+ *      cdef object s = <char*>p
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_S_(const char *__pyx_v_p) {
+  PyObject *__pyx_v_s = 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;
+  __Pyx_RefNannySetupContext("S_", 0);
+
+  /* "PETSc/PETSc.pyx":31
+ * 
+ * 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_1 = ((__pyx_v_p == NULL) != 0);
+  if (__pyx_t_1) {
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+
+  /* "PETSc/PETSc.pyx":32
+ * 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_ERR(11, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_s = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "PETSc/PETSc.pyx":33
+ *      if p == NULL: return None
+ *      cdef object s = <char*>p
+ *      return s if isinstance(s, str) else s.decode()             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyString_Check(__pyx_v_s); 
+  if ((__pyx_t_1 != 0)) {
+    __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_ERR(11, 33, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(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(11, 33, __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(11, 33, __pyx_L1_error)
+    }
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_2 = __pyx_t_3;
+    __pyx_t_3 = 0;
+  }
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":30
+ *     return s
+ * 
+ * cdef inline object S_(const_char p[]):             # <<<<<<<<<<<<<<
+ *      if p == NULL: return None
+ *      cdef object s = <char*>p
+ */
+
+  /* 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("petsc4py.PETSc.S_", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_s);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":49
+ * cdef object PetscError = <object>PyExc_RuntimeError
+ * 
+ * cdef inline int SETERR(int ierr) with gil:             # <<<<<<<<<<<<<<
+ *     if (<void*>PetscError) != NULL:
+ *         PyErr_SetObject(PetscError, <long>ierr)
+ */
+
+static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_SETERR(int __pyx_v_ierr) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("SETERR", 0);
+
+  /* "PETSc/PETSc.pyx":50
+ * 
+ * cdef inline int SETERR(int ierr) with gil:
+ *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
+ *         PyErr_SetObject(PetscError, <long>ierr)
+ *     else:
+ */
+  __pyx_t_1 = ((((void *)__pyx_v_8petsc4py_5PETSc_PetscError) != NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/PETSc.pyx":51
+ * cdef inline int SETERR(int ierr) with gil:
+ *     if (<void*>PetscError) != NULL:
+ *         PyErr_SetObject(PetscError, <long>ierr)             # <<<<<<<<<<<<<<
+ *     else:
+ *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
+ */
+    __pyx_t_2 = __pyx_v_8petsc4py_5PETSc_PetscError;
+    __Pyx_INCREF(__pyx_t_2);
+    __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 51, __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;
+
+    /* "PETSc/PETSc.pyx":50
+ * 
+ * cdef inline int SETERR(int ierr) with gil:
+ *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
+ *         PyErr_SetObject(PetscError, <long>ierr)
+ *     else:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "PETSc/PETSc.pyx":53
+ *         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_ERR(11, 53, __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;
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "PETSc/PETSc.pyx":54
+ *     else:
+ *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
+ *     return ierr             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int CHKERR(int ierr) nogil except -1:
+ */
+  __pyx_r = __pyx_v_ierr;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":49
+ * cdef object PetscError = <object>PyExc_RuntimeError
+ * 
+ * cdef inline int SETERR(int ierr) with gil:             # <<<<<<<<<<<<<<
+ *     if (<void*>PetscError) != NULL:
+ *         PyErr_SetObject(PetscError, <long>ierr)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.SETERR", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":56
+ *     return ierr
+ * 
+ * cdef inline int CHKERR(int ierr) nogil except -1:             # <<<<<<<<<<<<<<
+ *     if ierr == 0:
+ *         return 0 # no error
+ */
+
+static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_CHKERR(int __pyx_v_ierr) {
+  int __pyx_r;
+  int __pyx_t_1;
+
+  /* "PETSc/PETSc.pyx":57
+ * 
+ * cdef inline int CHKERR(int ierr) nogil except -1:
+ *     if ierr == 0:             # <<<<<<<<<<<<<<
+ *         return 0 # no error
+ *     if ierr == PETSC_ERR_PYTHON:
+ */
+  __pyx_t_1 = ((__pyx_v_ierr == 0) != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/PETSc.pyx":58
+ * cdef inline int CHKERR(int ierr) nogil except -1:
+ *     if ierr == 0:
+ *         return 0 # no error             # <<<<<<<<<<<<<<
+ *     if ierr == PETSC_ERR_PYTHON:
+ *         return -1 # error in Python call
+ */
+    __pyx_r = 0;
+    goto __pyx_L0;
+
+    /* "PETSc/PETSc.pyx":57
+ * 
+ * cdef inline int CHKERR(int ierr) nogil except -1:
+ *     if ierr == 0:             # <<<<<<<<<<<<<<
+ *         return 0 # no error
+ *     if ierr == PETSC_ERR_PYTHON:
+ */
+  }
+
+  /* "PETSc/PETSc.pyx":59
+ *     if ierr == 0:
+ *         return 0 # no error
+ *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
+ *         return -1 # error in Python call
+ *     <void>SETERR(ierr)
+ */
+  __pyx_t_1 = ((__pyx_v_ierr == PETSC_ERR_PYTHON) != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/PETSc.pyx":60
+ *         return 0 # no error
+ *     if ierr == PETSC_ERR_PYTHON:
+ *         return -1 # error in Python call             # <<<<<<<<<<<<<<
+ *     <void>SETERR(ierr)
+ *     return -1
+ */
+    __pyx_r = -1;
+    goto __pyx_L0;
+
+    /* "PETSc/PETSc.pyx":59
+ *     if ierr == 0:
+ *         return 0 # no error
+ *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
+ *         return -1 # error in Python call
+ *     <void>SETERR(ierr)
+ */
+  }
+
+  /* "PETSc/PETSc.pyx":61
+ *     if ierr == PETSC_ERR_PYTHON:
+ *         return -1 # error in Python call
+ *     <void>SETERR(ierr)             # <<<<<<<<<<<<<<
+ *     return -1
+ * 
+ */
+  ((void)__pyx_f_8petsc4py_5PETSc_SETERR(__pyx_v_ierr));
+
+  /* "PETSc/PETSc.pyx":62
+ *         return -1 # error in Python call
+ *     <void>SETERR(ierr)
+ *     return -1             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
+ */
+  __pyx_r = -1;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":56
+ *     return ierr
+ * 
+ * cdef inline int CHKERR(int ierr) nogil except -1:             # <<<<<<<<<<<<<<
+ *     if ierr == 0:
+ *         return 0 # no error
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":84
+ *     PetscScalar PyPetscScalar_AsPetscScalar(object) except*
+ * 
+ * cdef inline object toInt(PetscInt value):             # <<<<<<<<<<<<<<
+ *     return value
+ * cdef inline PetscInt asInt(object value) except? -1:
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toInt(PetscInt __pyx_v_value) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("toInt", 0);
+
+  /* "PETSc/PETSc.pyx":85
+ * 
+ * cdef inline object toInt(PetscInt value):
+ *     return value             # <<<<<<<<<<<<<<
+ * cdef inline PetscInt asInt(object value) except? -1:
+ *     return value
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 85, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":84
+ *     PetscScalar PyPetscScalar_AsPetscScalar(object) except*
+ * 
+ * cdef inline object toInt(PetscInt value):             # <<<<<<<<<<<<<<
+ *     return value
+ * cdef inline PetscInt asInt(object value) except? -1:
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.toInt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":86
+ * cdef inline object toInt(PetscInt value):
+ *     return value
+ * cdef inline PetscInt asInt(object value) except? -1:             # <<<<<<<<<<<<<<
+ *     return value
+ * 
+ */
+
+static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asInt(PyObject *__pyx_v_value) {
+  PetscInt __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  __Pyx_RefNannySetupContext("asInt", 0);
+
+  /* "PETSc/PETSc.pyx":87
+ *     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_ERR(11, 87, __pyx_L1_error)
+  __pyx_r = __pyx_t_1;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":86
+ * cdef inline object toInt(PetscInt value):
+ *     return value
+ * cdef inline PetscInt asInt(object value) except? -1:             # <<<<<<<<<<<<<<
+ *     return value
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.asInt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1L;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":89
+ *     return value
+ * 
+ * cdef inline object toReal(PetscReal value):             # <<<<<<<<<<<<<<
+ *     return value
+ * cdef inline PetscReal asReal(object value) except? -1:
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toReal(PetscReal __pyx_v_value) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("toReal", 0);
+
+  /* "PETSc/PETSc.pyx":90
+ * 
+ * cdef inline object toReal(PetscReal value):
+ *     return value             # <<<<<<<<<<<<<<
+ * cdef inline PetscReal asReal(object value) except? -1:
+ *     return value
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":89
+ *     return value
+ * 
+ * cdef inline object toReal(PetscReal value):             # <<<<<<<<<<<<<<
+ *     return value
+ * cdef inline PetscReal asReal(object value) except? -1:
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.toReal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":91
+ * cdef inline object toReal(PetscReal value):
+ *     return value
+ * cdef inline PetscReal asReal(object value) except? -1:             # <<<<<<<<<<<<<<
+ *     return value
+ * 
+ */
+
+static CYTHON_INLINE PetscReal __pyx_f_8petsc4py_5PETSc_asReal(PyObject *__pyx_v_value) {
+  PetscReal __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PetscReal __pyx_t_1;
+  __Pyx_RefNannySetupContext("asReal", 0);
+
+  /* "PETSc/PETSc.pyx":92
+ *     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_ERR(11, 92, __pyx_L1_error)
+  __pyx_r = __pyx_t_1;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":91
+ * cdef inline object toReal(PetscReal value):
+ *     return value
+ * cdef inline PetscReal asReal(object value) except? -1:             # <<<<<<<<<<<<<<
+ *     return value
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.asReal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1.0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":94
+ *     return value
+ * 
+ * cdef inline object toScalar(PetscScalar value):             # <<<<<<<<<<<<<<
+ *     return PyPetscScalar_FromPetscScalar(value)
+ * cdef inline PetscScalar asScalar(object value) except*:
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toScalar(PetscScalar __pyx_v_value) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("toScalar", 0);
+
+  /* "PETSc/PETSc.pyx":95
+ * 
+ * cdef inline object toScalar(PetscScalar value):
+ *     return PyPetscScalar_FromPetscScalar(value)             # <<<<<<<<<<<<<<
+ * cdef inline PetscScalar asScalar(object value) except*:
+ *     return PyPetscScalar_AsPetscScalar(value)
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyPetscScalar_FromPetscScalar(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 95, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":94
+ *     return value
+ * 
+ * cdef inline object toScalar(PetscScalar value):             # <<<<<<<<<<<<<<
+ *     return PyPetscScalar_FromPetscScalar(value)
+ * cdef inline PetscScalar asScalar(object value) except*:
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.toScalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":96
+ * cdef inline object toScalar(PetscScalar value):
+ *     return PyPetscScalar_FromPetscScalar(value)
+ * cdef inline PetscScalar asScalar(object value) except*:             # <<<<<<<<<<<<<<
+ *     return PyPetscScalar_AsPetscScalar(value)
+ * 
+ */
+
+static CYTHON_INLINE PetscScalar __pyx_f_8petsc4py_5PETSc_asScalar(PyObject *__pyx_v_value) {
+  PetscScalar __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PetscScalar __pyx_t_1;
+  __Pyx_RefNannySetupContext("asScalar", 0);
+
+  /* "PETSc/PETSc.pyx":97
+ *     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_ERR(11, 97, __pyx_L1_error)
+  __pyx_r = __pyx_t_1;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":96
+ * cdef inline object toScalar(PetscScalar value):
+ *     return PyPetscScalar_FromPetscScalar(value)
+ * cdef inline PetscScalar asScalar(object value) except*:             # <<<<<<<<<<<<<<
+ *     return PyPetscScalar_AsPetscScalar(value)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.asScalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/arraynpy.pxi":66
+ * # --------------------------------------------------------------------
+ * 
+ * cdef inline ndarray asarray(object ob):             # <<<<<<<<<<<<<<
+ *     return PyArray_FROM_O(ob)
+ * 
+ */
+
 static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_asarray(PyObject *__pyx_v_ob) {
   PyArrayObject *__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("asarray", 0);
 
   /* "PETSc/arraynpy.pxi":67
@@ -7522,7 +8121,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_asarray(PyObject *_
  * cdef inline ndarray arange(start, stop, stride):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)PyArray_FROM_O(__pyx_v_ob)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_FROM_O(__pyx_v_ob)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 67, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -7561,9 +8160,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_arange(PyObject *__
   __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("arange", 0);
 
   /* "PETSc/arraynpy.pxi":70
@@ -7573,7 +8169,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_arange(PyObject *__
  *     return PyArray_ArangeObj(start, stop, stride, descr)
  * 
  */
-  __pyx_t_1 = ((PyObject *)PyArray_DescrFromType(NPY_PETSC_INT)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_DescrFromType(NPY_PETSC_INT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 70, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -7589,7 +8185,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_arange(PyObject *__
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_2 = ((PyObject *)PyArray_ArangeObj(__pyx_v_start, __pyx_v_stop, __pyx_v_stride, __pyx_v_descr)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)PyArray_ArangeObj(__pyx_v_start, __pyx_v_stop, __pyx_v_stride, __pyx_v_descr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 71, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -7629,9 +8225,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_i(PetscInt __
   PyArrayObject *__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("empty_i", 0);
 
   /* "PETSc/arraynpy.pxi":76
@@ -7651,7 +8244,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_i(PetscInt __
  * cdef inline ndarray empty_r(PetscInt size):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_INT, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_INT, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -7689,9 +8282,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_r(PetscInt __
   PyArrayObject *__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("empty_r", 0);
 
   /* "PETSc/arraynpy.pxi":80
@@ -7711,7 +8301,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_r(PetscInt __
  * cdef inline ndarray empty_s(PetscInt size):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_REAL, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_REAL, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -7749,9 +8339,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_s(PetscInt __
   PyArrayObject *__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("empty_s", 0);
 
   /* "PETSc/arraynpy.pxi":84
@@ -7771,7 +8358,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_s(PetscInt __
  * cdef inline ndarray empty_c(PetscInt size):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_SCALAR, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_SCALAR, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -7809,9 +8396,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_c(PetscInt __
   PyArrayObject *__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("empty_c", 0);
 
   /* "PETSc/arraynpy.pxi":88
@@ -7831,7 +8415,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_c(PetscInt __
  * cdef inline ndarray empty_p(PetscInt size):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_COMPLEX, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_COMPLEX, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 89, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -7869,9 +8453,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_p(PetscInt __
   PyArrayObject *__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("empty_p", 0);
 
   /* "PETSc/arraynpy.pxi":92
@@ -7891,7 +8472,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_empty_p(PetscInt __
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_INTP, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_INTP, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -7931,9 +8512,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_i(PetscInt __
   __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("array_i", 0);
 
   /* "PETSc/arraynpy.pxi":98
@@ -7952,7 +8530,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_i(PetscInt __
  *     if data != NULL:
  *         memcpy(PyArray_DATA(ary), data, <size_t>size*sizeof(PetscInt))
  */
-  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_INT, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_INT, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 99, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -7975,9 +8553,15 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_i(PetscInt __
  * 
  */
     memcpy(PyArray_DATA(__pyx_v_ary), __pyx_v_data, (((size_t)__pyx_v_size) * (sizeof(PetscInt))));
-    goto __pyx_L3;
+
+    /* "PETSc/arraynpy.pxi":100
+ *     cdef npy_intp s = <npy_intp> size
+ *     cdef ndarray ary = PyArray_EMPTY(1, &s, NPY_PETSC_INT, 0)
+ *     if data != NULL:             # <<<<<<<<<<<<<<
+ *         memcpy(PyArray_DATA(ary), data, <size_t>size*sizeof(PetscInt))
+ *     return ary
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":102
  *     if data != NULL:
@@ -8026,9 +8610,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_r(PetscInt __
   __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("array_r", 0);
 
   /* "PETSc/arraynpy.pxi":105
@@ -8047,7 +8628,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_r(PetscInt __
  *     if data != NULL:
  *         memcpy(PyArray_DATA(ary), data, <size_t>size*sizeof(PetscReal))
  */
-  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_REAL, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_REAL, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8070,9 +8651,15 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_r(PetscInt __
  * 
  */
     memcpy(PyArray_DATA(__pyx_v_ary), __pyx_v_data, (((size_t)__pyx_v_size) * (sizeof(PetscReal))));
-    goto __pyx_L3;
+
+    /* "PETSc/arraynpy.pxi":107
+ *     cdef npy_intp s = <npy_intp> size
+ *     cdef ndarray ary = PyArray_EMPTY(1, &s, NPY_PETSC_REAL, 0)
+ *     if data != NULL:             # <<<<<<<<<<<<<<
+ *         memcpy(PyArray_DATA(ary), data, <size_t>size*sizeof(PetscReal))
+ *     return ary
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":109
  *     if data != NULL:
@@ -8121,9 +8708,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_s(PetscInt __
   __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("array_s", 0);
 
   /* "PETSc/arraynpy.pxi":112
@@ -8142,7 +8726,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_s(PetscInt __
  *     if data != NULL:
  *         memcpy(PyArray_DATA(ary), data, <size_t>size*sizeof(PetscScalar))
  */
-  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_SCALAR, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_EMPTY(1, (&__pyx_v_s), NPY_PETSC_SCALAR, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8165,9 +8749,15 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_array_s(PetscInt __
  * 
  */
     memcpy(PyArray_DATA(__pyx_v_ary), __pyx_v_data, (((size_t)__pyx_v_size) * (sizeof(PetscScalar))));
-    goto __pyx_L3;
+
+    /* "PETSc/arraynpy.pxi":114
+ *     cdef npy_intp s = <npy_intp> size
+ *     cdef ndarray ary = PyArray_EMPTY(1, &s, NPY_PETSC_SCALAR, 0)
+ *     if data != NULL:             # <<<<<<<<<<<<<<
+ *         memcpy(PyArray_DATA(ary), data, <size_t>size*sizeof(PetscScalar))
+ *     return ary
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":116
  *     if data != NULL:
@@ -8215,9 +8805,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray(PyObject *__
   __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("iarray", 0);
 
   /* "PETSc/arraynpy.pxi":121
@@ -8227,7 +8814,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray(PyObject *__
  *         ob, typenum, NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED)
  *     if PyArray_ISCONTIGUOUS(ary): return ary
  */
-  __pyx_t_1 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_ob, __pyx_v_typenum, (NPY_ARRAY_ALIGNED | NPY_ARRAY_NOTSWAPPED))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_ob, __pyx_v_typenum, (NPY_ARRAY_ALIGNED | NPY_ARRAY_NOTSWAPPED))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 121, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8270,7 +8857,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray(PyObject *__
  * cdef inline ndarray iarray_i(object ob, PetscInt* size, PetscInt** data):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)PyArray_Copy(__pyx_v_ary)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_Copy(__pyx_v_ary)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8310,9 +8897,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_i(PyObject *
   __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("iarray_i", 0);
 
   /* "PETSc/arraynpy.pxi":128
@@ -8322,7 +8906,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_i(PyObject *
  *     if size != NULL: size[0] = <PetscInt>  PyArray_SIZE(ary)
  *     if data != NULL: data[0] = <PetscInt*> PyArray_DATA(ary)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray(__pyx_v_ob, NPY_PETSC_INT)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray(__pyx_v_ob, NPY_PETSC_INT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 128, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8337,9 +8921,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_i(PyObject *
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":130
  *     cdef ndarray ary = iarray(ob, NPY_PETSC_INT)
@@ -8351,9 +8933,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_i(PyObject *
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((PetscInt *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":131
  *     if size != NULL: size[0] = <PetscInt>  PyArray_SIZE(ary)
@@ -8401,9 +8981,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_r(PyObject *
   __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("iarray_r", 0);
 
   /* "PETSc/arraynpy.pxi":134
@@ -8413,7 +8990,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_r(PyObject *
  *     if size != NULL: size[0] = <PetscInt>   PyArray_SIZE(ary)
  *     if data != NULL: data[0] = <PetscReal*> PyArray_DATA(ary)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray(__pyx_v_ob, NPY_PETSC_REAL)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray(__pyx_v_ob, NPY_PETSC_REAL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8428,9 +9005,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_r(PyObject *
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":136
  *     cdef ndarray ary = iarray(ob, NPY_PETSC_REAL)
@@ -8442,9 +9017,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_r(PyObject *
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((PetscReal *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":137
  *     if size != NULL: size[0] = <PetscInt>   PyArray_SIZE(ary)
@@ -8492,9 +9065,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_s(PyObject *
   __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("iarray_s", 0);
 
   /* "PETSc/arraynpy.pxi":140
@@ -8504,7 +9074,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_s(PyObject *
  *     if size != NULL: size[0] = <PetscInt>     PyArray_SIZE(ary)
  *     if data != NULL: data[0] = <PetscScalar*> PyArray_DATA(ary)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray(__pyx_v_ob, NPY_PETSC_SCALAR)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray(__pyx_v_ob, NPY_PETSC_SCALAR)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 140, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8519,9 +9089,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_s(PyObject *
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":142
  *     cdef ndarray ary = iarray(ob, NPY_PETSC_SCALAR)
@@ -8533,9 +9101,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_iarray_s(PyObject *
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((PetscScalar *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":143
  *     if size != NULL: size[0] = <PetscInt>     PyArray_SIZE(ary)
@@ -8583,9 +9149,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray(PyObject *__
   __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("oarray", 0);
 
   /* "PETSc/arraynpy.pxi":148
@@ -8595,7 +9158,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray(PyObject *__
  *         ob, typenum, NPY_ARRAY_ALIGNED|NPY_ARRAY_WRITEABLE|NPY_ARRAY_NOTSWAPPED)
  *     if PyArray_ISCONTIGUOUS(ary): return ary
  */
-  __pyx_t_1 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_ob, __pyx_v_typenum, ((NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE) | NPY_ARRAY_NOTSWAPPED))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_ob, __pyx_v_typenum, ((NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE) | NPY_ARRAY_NOTSWAPPED))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 148, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8638,7 +9201,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray(PyObject *__
  * cdef inline ndarray oarray_i(object ob, PetscInt* size, PetscInt** data):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)PyArray_Copy(__pyx_v_ary)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_Copy(__pyx_v_ary)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 152, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8678,9 +9241,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_i(PyObject *
   __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("oarray_i", 0);
 
   /* "PETSc/arraynpy.pxi":155
@@ -8690,7 +9250,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_i(PyObject *
  *     if size != NULL: size[0] = <PetscInt>  PyArray_SIZE(ary)
  *     if data != NULL: data[0] = <PetscInt*> PyArray_DATA(ary)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray(__pyx_v_ob, NPY_PETSC_INT)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray(__pyx_v_ob, NPY_PETSC_INT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8705,9 +9265,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_i(PyObject *
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":157
  *     cdef ndarray ary = oarray(ob, NPY_PETSC_INT)
@@ -8719,9 +9277,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_i(PyObject *
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((PetscInt *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":158
  *     if size != NULL: size[0] = <PetscInt>  PyArray_SIZE(ary)
@@ -8769,9 +9325,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_r(PyObject *
   __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("oarray_r", 0);
 
   /* "PETSc/arraynpy.pxi":161
@@ -8781,7 +9334,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_r(PyObject *
  *     if size != NULL: size[0] = <PetscInt>   PyArray_SIZE(ary)
  *     if data != NULL: data[0] = <PetscReal*> PyArray_DATA(ary)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray(__pyx_v_ob, NPY_PETSC_REAL)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray(__pyx_v_ob, NPY_PETSC_REAL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 161, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8796,9 +9349,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_r(PyObject *
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":163
  *     cdef ndarray ary = oarray(ob, NPY_PETSC_REAL)
@@ -8810,9 +9361,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_r(PyObject *
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((PetscReal *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":164
  *     if size != NULL: size[0] = <PetscInt>   PyArray_SIZE(ary)
@@ -8860,9 +9409,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_s(PyObject *
   __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("oarray_s", 0);
 
   /* "PETSc/arraynpy.pxi":167
@@ -8872,7 +9418,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_s(PyObject *
  *     if size != NULL: size[0] = <PetscInt>     PyArray_SIZE(ary)
  *     if data != NULL: data[0] = <PetscScalar*> PyArray_DATA(ary)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray(__pyx_v_ob, NPY_PETSC_SCALAR)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray(__pyx_v_ob, NPY_PETSC_SCALAR)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8887,9 +9433,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_s(PyObject *
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":169
  *     cdef ndarray ary = oarray(ob, NPY_PETSC_SCALAR)
@@ -8901,9 +9445,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_s(PyObject *
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((PetscScalar *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":170
  *     if size != NULL: size[0] = <PetscInt>     PyArray_SIZE(ary)
@@ -8951,9 +9493,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_p(PyObject *
   __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("oarray_p", 0);
 
   /* "PETSc/arraynpy.pxi":173
@@ -8963,7 +9502,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_p(PyObject *
  *     if size != NULL: size[0] = <PetscInt> PyArray_SIZE(ary)
  *     if data != NULL: data[0] = <void*>    PyArray_DATA(ary)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray(__pyx_v_ob, NPY_INTP)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray(__pyx_v_ob, NPY_INTP)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -8978,9 +9517,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_p(PyObject *
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":175
  *     cdef ndarray ary = oarray(ob, NPY_INTP)
@@ -8992,9 +9529,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_oarray_p(PyObject *
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((void *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":176
  *     if size != NULL: size[0] = <PetscInt> PyArray_SIZE(ary)
@@ -9042,9 +9577,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_ocarray_s(PyObject
   __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("ocarray_s", 0);
 
   /* "PETSc/arraynpy.pxi":181
@@ -9054,7 +9586,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_ocarray_s(PyObject
  *         ob, NPY_PETSC_SCALAR, NPY_ARRAY_CARRAY|NPY_ARRAY_NOTSWAPPED)
  *     if size != NULL: size[0] = <PetscInt>     PyArray_SIZE(ary)
  */
-  __pyx_t_1 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_ob, NPY_PETSC_SCALAR, (NPY_ARRAY_CARRAY | NPY_ARRAY_NOTSWAPPED))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_ob, NPY_PETSC_SCALAR, (NPY_ARRAY_CARRAY | NPY_ARRAY_NOTSWAPPED))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -9069,9 +9601,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_ocarray_s(PyObject
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":184
  *         ob, NPY_PETSC_SCALAR, NPY_ARRAY_CARRAY|NPY_ARRAY_NOTSWAPPED)
@@ -9083,9 +9613,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_ocarray_s(PyObject
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((PetscScalar *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":185
  *     if size != NULL: size[0] = <PetscInt>     PyArray_SIZE(ary)
@@ -9133,9 +9661,6 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_ofarray_s(PyObject
   __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("ofarray_s", 0);
 
   /* "PETSc/arraynpy.pxi":188
@@ -9145,7 +9670,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_ofarray_s(PyObject
  *         ob, NPY_PETSC_SCALAR, NPY_ARRAY_FARRAY|NPY_ARRAY_NOTSWAPPED)
  *     if size != NULL: size[0] = <PetscInt>     PyArray_SIZE(ary)
  */
-  __pyx_t_1 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_ob, NPY_PETSC_SCALAR, (NPY_ARRAY_FARRAY | NPY_ARRAY_NOTSWAPPED))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_ob, NPY_PETSC_SCALAR, (NPY_ARRAY_FARRAY | NPY_ARRAY_NOTSWAPPED))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -9160,9 +9685,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_ofarray_s(PyObject
   __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_size[0]) = ((PetscInt)PyArray_SIZE(__pyx_v_ary));
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/arraynpy.pxi":191
  *         ob, NPY_PETSC_SCALAR, NPY_ARRAY_FARRAY|NPY_ARRAY_NOTSWAPPED)
@@ -9174,9 +9697,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_ofarray_s(PyObject
   __pyx_t_2 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v_data[0]) = ((PetscScalar *)PyArray_DATA(__pyx_v_ary));
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/arraynpy.pxi":192
  *     if size != NULL: size[0] = <PetscInt>     PyArray_SIZE(ary)
@@ -9224,9 +9745,6 @@ static CYTHON_INLINE InsertMode __pyx_f_8petsc4py_5PETSc_insertmode(PyObject *__
   int __pyx_t_1;
   int __pyx_t_2;
   InsertMode __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("insertmode", 0);
 
   /* "PETSc/petscdef.pxi":57
@@ -9270,16 +9788,16 @@ static CYTHON_INLINE InsertMode __pyx_f_8petsc4py_5PETSc_insertmode(PyObject *__
     __pyx_r = INSERT_VALUES;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/petscdef.pxi":60
+  /* "PETSc/petscdef.pxi":60
  *     elif mode is True:  return PETSC_ADD_VALUES
  *     elif mode is False: return PETSC_INSERT_VALUES
  *     else:               return mode             # <<<<<<<<<<<<<<
  * 
  * cdef inline PetscScatterMode scattermode(object mode) \
  */
-    __pyx_t_3 = ((InsertMode)PyInt_AsLong(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((InsertMode)__Pyx_PyInt_As_InsertMode(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 60, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
   }
@@ -9295,7 +9813,7 @@ static CYTHON_INLINE InsertMode __pyx_f_8petsc4py_5PETSc_insertmode(PyObject *__
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.insertmode", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((InsertMode)-1);
+  __pyx_r = ((InsertMode)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -9317,9 +9835,6 @@ static CYTHON_INLINE ScatterMode __pyx_f_8petsc4py_5PETSc_scattermode(PyObject *
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   ScatterMode __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("scattermode", 0);
 
   /* "PETSc/petscdef.pxi":64
@@ -9382,7 +9897,7 @@ static CYTHON_INLINE ScatterMode __pyx_f_8petsc4py_5PETSc_scattermode(PyObject *
  *         if mode == 'reverse': return PETSC_SCATTER_REVERSE
  *         else: raise ValueError("unknown scatter mode: %s" % mode)
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_forward, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_forward, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 68, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = SCATTER_FORWARD;
       goto __pyx_L0;
@@ -9395,34 +9910,42 @@ static CYTHON_INLINE ScatterMode __pyx_f_8petsc4py_5PETSc_scattermode(PyObject *
  *         else: raise ValueError("unknown scatter mode: %s" % mode)
  *     return mode
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_reverse, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_reverse, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 69, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = SCATTER_REVERSE;
       goto __pyx_L0;
     }
-    /*else*/ {
 
-      /* "PETSc/petscdef.pxi":70
+    /* "PETSc/petscdef.pxi":70
  *         if mode == 'forward': return PETSC_SCATTER_FORWARD
  *         if mode == 'reverse': return PETSC_SCATTER_REVERSE
  *         else: raise ValueError("unknown scatter mode: %s" % mode)             # <<<<<<<<<<<<<<
  *     return mode
  * 
  */
-      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_scatter_mode_s, __pyx_v_mode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_scatter_mode_s, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 70, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 70, __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 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 70, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(2, 70, __pyx_L1_error)
     }
+
+    /* "PETSc/petscdef.pxi":67
+ *     if mode is False: return PETSC_SCATTER_FORWARD
+ *     if mode is True:  return PETSC_SCATTER_REVERSE
+ *     if isinstance(mode, str):             # <<<<<<<<<<<<<<
+ *         if mode == 'forward': return PETSC_SCATTER_FORWARD
+ *         if mode == 'reverse': return PETSC_SCATTER_REVERSE
+ */
   }
 
   /* "PETSc/petscdef.pxi":71
@@ -9431,7 +9954,7 @@ static CYTHON_INLINE ScatterMode __pyx_f_8petsc4py_5PETSc_scattermode(PyObject *
  *     return mode             # <<<<<<<<<<<<<<
  * 
  */
-  __pyx_t_5 = ((ScatterMode)PyInt_AsLong(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((ScatterMode)__Pyx_PyInt_As_ScatterMode(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 71, __pyx_L1_error)
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
@@ -9448,13 +9971,13 @@ static CYTHON_INLINE ScatterMode __pyx_f_8petsc4py_5PETSc_scattermode(PyObject *
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("petsc4py.PETSc.scattermode", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((ScatterMode)-1);
+  __pyx_r = ((ScatterMode)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":36
+/* "PETSc/petscopt.pxi":39
  * #
  * 
  * cdef getprefix(prefix, deft=None):             # <<<<<<<<<<<<<<
@@ -9471,9 +9994,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
   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("getprefix", 0);
   if (__pyx_optional_args) {
     if (__pyx_optional_args->__pyx_n > 0) {
@@ -9482,7 +10002,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
   }
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "PETSc/petscopt.pxi":37
+  /* "PETSc/petscopt.pxi":40
  * 
  * cdef getprefix(prefix, deft=None):
  *     if prefix is None:             # <<<<<<<<<<<<<<
@@ -9493,7 +10013,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscopt.pxi":38
+    /* "PETSc/petscopt.pxi":41
  * cdef getprefix(prefix, deft=None):
  *     if prefix is None:
  *         prefix = deft             # <<<<<<<<<<<<<<
@@ -9502,53 +10022,69 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
  */
     __Pyx_INCREF(__pyx_v_deft);
     __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_v_deft);
+
+    /* "PETSc/petscopt.pxi":40
+ * 
+ * cdef getprefix(prefix, deft=None):
+ *     if prefix is None:             # <<<<<<<<<<<<<<
+ *         prefix = deft
+ *     elif isinstance(prefix, Options):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscopt.pxi":39
+  /* "PETSc/petscopt.pxi":42
  *     if prefix is None:
  *         prefix = deft
  *     elif isinstance(prefix, Options):             # <<<<<<<<<<<<<<
  *         prefix = prefix.prefix
  *     elif isinstance(prefix, Object):
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_prefix, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Options)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_prefix, __pyx_ptype_8petsc4py_5PETSc_Options); 
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscopt.pxi":40
+    /* "PETSc/petscopt.pxi":43
  *         prefix = deft
  *     elif isinstance(prefix, Options):
  *         prefix = prefix.prefix             # <<<<<<<<<<<<<<
  *     elif isinstance(prefix, Object):
  *         prefix = prefix.getOptionsPrefix()
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefix, __pyx_n_s_prefix); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefix, __pyx_n_s_prefix); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 43, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_3);
     __pyx_t_3 = 0;
+
+    /* "PETSc/petscopt.pxi":42
+ *     if prefix is None:
+ *         prefix = deft
+ *     elif isinstance(prefix, Options):             # <<<<<<<<<<<<<<
+ *         prefix = prefix.prefix
+ *     elif isinstance(prefix, Object):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscopt.pxi":41
+  /* "PETSc/petscopt.pxi":44
  *     elif isinstance(prefix, Options):
  *         prefix = prefix.prefix
  *     elif isinstance(prefix, Object):             # <<<<<<<<<<<<<<
  *         prefix = prefix.getOptionsPrefix()
  *     elif not isinstance(prefix, str):
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_prefix, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_prefix, __pyx_ptype_8petsc4py_5PETSc_Object); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscopt.pxi":42
+    /* "PETSc/petscopt.pxi":45
  *         prefix = prefix.prefix
  *     elif isinstance(prefix, Object):
  *         prefix = prefix.getOptionsPrefix()             # <<<<<<<<<<<<<<
  *     elif not isinstance(prefix, str):
  *         raise TypeError('option prefix must be string')
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefix, __pyx_n_s_getOptionsPrefix); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefix, __pyx_n_s_getOptionsPrefix); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 45, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -9561,19 +10097,27 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
       }
     }
     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 = 42; __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(3, 45, __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 = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 45, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_3);
     __pyx_t_3 = 0;
+
+    /* "PETSc/petscopt.pxi":44
+ *     elif isinstance(prefix, Options):
+ *         prefix = prefix.prefix
+ *     elif isinstance(prefix, Object):             # <<<<<<<<<<<<<<
+ *         prefix = prefix.getOptionsPrefix()
+ *     elif not isinstance(prefix, str):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscopt.pxi":43
+  /* "PETSc/petscopt.pxi":46
  *     elif isinstance(prefix, Object):
  *         prefix = prefix.getOptionsPrefix()
  *     elif not isinstance(prefix, str):             # <<<<<<<<<<<<<<
@@ -9584,33 +10128,41 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscopt.pxi":44
+    /* "PETSc/petscopt.pxi":47
  *         prefix = prefix.getOptionsPrefix()
  *     elif not isinstance(prefix, str):
  *         raise TypeError('option prefix must be string')             # <<<<<<<<<<<<<<
  *     if not prefix:
  *         return None
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 47, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(3, 47, __pyx_L1_error)
+
+    /* "PETSc/petscopt.pxi":46
+ *     elif isinstance(prefix, Object):
+ *         prefix = prefix.getOptionsPrefix()
+ *     elif not isinstance(prefix, str):             # <<<<<<<<<<<<<<
+ *         raise TypeError('option prefix must be string')
+ *     if not prefix:
+ */
   }
   __pyx_L3:;
 
-  /* "PETSc/petscopt.pxi":45
+  /* "PETSc/petscopt.pxi":48
  *     elif not isinstance(prefix, str):
  *         raise TypeError('option prefix must be string')
  *     if not prefix:             # <<<<<<<<<<<<<<
  *         return None
  *     if prefix.count(' '):
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 48, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscopt.pxi":46
+    /* "PETSc/petscopt.pxi":49
  *         raise TypeError('option prefix must be string')
  *     if not prefix:
  *         return None             # <<<<<<<<<<<<<<
@@ -9621,69 +10173,93 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
+
+    /* "PETSc/petscopt.pxi":48
+ *     elif not isinstance(prefix, str):
+ *         raise TypeError('option prefix must be string')
+ *     if not prefix:             # <<<<<<<<<<<<<<
+ *         return None
+ *     if prefix.count(' '):
+ */
   }
 
-  /* "PETSc/petscopt.pxi":47
+  /* "PETSc/petscopt.pxi":50
  *     if not prefix:
  *         return None
  *     if prefix.count(' '):             # <<<<<<<<<<<<<<
  *         raise ValueError('option prefix should not have spaces')
  *     if prefix.startswith('-'):
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefix, __pyx_n_s_count); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefix, __pyx_n_s_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __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(3, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(3, 50, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscopt.pxi":48
+    /* "PETSc/petscopt.pxi":51
  *         return None
  *     if prefix.count(' '):
  *         raise ValueError('option prefix should not have spaces')             # <<<<<<<<<<<<<<
  *     if prefix.startswith('-'):
  *         raise ValueError('option prefix should not start with a hypen')
  */
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 51, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[3]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(3, 51, __pyx_L1_error)
+
+    /* "PETSc/petscopt.pxi":50
+ *     if not prefix:
+ *         return None
+ *     if prefix.count(' '):             # <<<<<<<<<<<<<<
+ *         raise ValueError('option prefix should not have spaces')
+ *     if prefix.startswith('-'):
+ */
   }
 
-  /* "PETSc/petscopt.pxi":49
+  /* "PETSc/petscopt.pxi":52
  *     if prefix.count(' '):
  *         raise ValueError('option prefix should not have spaces')
  *     if prefix.startswith('-'):             # <<<<<<<<<<<<<<
  *         raise ValueError('option prefix should not start with a hypen')
  *     return prefix
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefix, __pyx_n_s_startswith); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefix, __pyx_n_s_startswith); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(3, 52, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscopt.pxi":50
+    /* "PETSc/petscopt.pxi":53
  *         raise ValueError('option prefix should not have spaces')
  *     if prefix.startswith('-'):
  *         raise ValueError('option prefix should not start with a hypen')             # <<<<<<<<<<<<<<
  *     return prefix
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 53, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[3]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(3, 53, __pyx_L1_error)
+
+    /* "PETSc/petscopt.pxi":52
+ *     if prefix.count(' '):
+ *         raise ValueError('option prefix should not have spaces')
+ *     if prefix.startswith('-'):             # <<<<<<<<<<<<<<
+ *         raise ValueError('option prefix should not start with a hypen')
+ *     return prefix
+ */
   }
 
-  /* "PETSc/petscopt.pxi":51
+  /* "PETSc/petscopt.pxi":54
  *     if prefix.startswith('-'):
  *         raise ValueError('option prefix should not start with a hypen')
  *     return prefix             # <<<<<<<<<<<<<<
@@ -9695,7 +10271,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
   __pyx_r = __pyx_v_prefix;
   goto __pyx_L0;
 
-  /* "PETSc/petscopt.pxi":36
+  /* "PETSc/petscopt.pxi":39
  * #
  * 
  * cdef getprefix(prefix, deft=None):             # <<<<<<<<<<<<<<
@@ -9717,7 +10293,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":55
+/* "PETSc/petscopt.pxi":58
  * #
  * 
  * cdef opt2str(const_char *pre, const_char *name):             # <<<<<<<<<<<<<<
@@ -9732,12 +10308,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_opt2str(const char *__pyx_v_pre, const
   __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("opt2str", 0);
 
-  /* "PETSc/petscopt.pxi":56
+  /* "PETSc/petscopt.pxi":59
  * 
  * cdef opt2str(const_char *pre, const_char *name):
  *     p = bytes2str(pre)  if pre!=NULL else None             # <<<<<<<<<<<<<<
@@ -9745,7 +10318,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_opt2str(const char *__pyx_v_pre, const
  *     return '(prefix:%s, name:%s)' % (p, n)
  */
   if (((__pyx_v_pre != NULL) != 0)) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_pre); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_pre); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 59, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -9756,7 +10329,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_opt2str(const char *__pyx_v_pre, const
   __pyx_v_p = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscopt.pxi":57
+  /* "PETSc/petscopt.pxi":60
  * cdef opt2str(const_char *pre, const_char *name):
  *     p = bytes2str(pre)  if pre!=NULL else None
  *     n = bytes2str(name) if name[0]!=c'-' else bytes2str(&name[1])             # <<<<<<<<<<<<<<
@@ -9764,12 +10337,12 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_opt2str(const char *__pyx_v_pre, const
  * 
  */
   if ((((__pyx_v_name[0]) != '-') != 0)) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 60, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __pyx_t_2;
     __pyx_t_2 = 0;
   } else {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str((&(__pyx_v_name[1]))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str((&(__pyx_v_name[1]))); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 60, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -9777,15 +10350,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_opt2str(const char *__pyx_v_pre, const
   __pyx_v_n = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscopt.pxi":58
+  /* "PETSc/petscopt.pxi":61
  *     p = bytes2str(pre)  if pre!=NULL else None
  *     n = bytes2str(name) if name[0]!=c'-' else bytes2str(&name[1])
  *     return '(prefix:%s, name:%s)' % (p, n)             # <<<<<<<<<<<<<<
  * 
- * cdef getopt_Bool(const_char *pre, const_char *name, object deft):
+ * cdef getopt_Bool(PetscOptions opt, const_char *pre, const_char *name, object deft):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 61, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_p);
   __Pyx_GIVEREF(__pyx_v_p);
@@ -9793,14 +10366,14 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_opt2str(const char *__pyx_v_pre, const
   __Pyx_INCREF(__pyx_v_n);
   __Pyx_GIVEREF(__pyx_v_n);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n);
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_prefix_s_name_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_prefix_s_name_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 61, __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;
 
-  /* "PETSc/petscopt.pxi":55
+  /* "PETSc/petscopt.pxi":58
  * #
  * 
  * cdef opt2str(const_char *pre, const_char *name):             # <<<<<<<<<<<<<<
@@ -9822,15 +10395,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_opt2str(const char *__pyx_v_pre, const
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":60
+/* "PETSc/petscopt.pxi":63
  *     return '(prefix:%s, name:%s)' % (p, n)
  * 
- * cdef getopt_Bool(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_Bool(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef PetscBool value = PETSC_FALSE
  *     cdef PetscBool flag  = PETSC_FALSE
  */
 
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(PetscOptions __pyx_v_opt, const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
   PetscBool __pyx_v_value;
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
@@ -9840,41 +10413,38 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(const char *__pyx_v_pre, c
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getopt_Bool", 0);
 
-  /* "PETSc/petscopt.pxi":61
+  /* "PETSc/petscopt.pxi":64
  * 
- * cdef getopt_Bool(const_char *pre, const_char *name, object deft):
+ * cdef getopt_Bool(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef PetscBool value = PETSC_FALSE             # <<<<<<<<<<<<<<
  *     cdef PetscBool flag  = PETSC_FALSE
- *     CHKERR( PetscOptionsGetBool(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
  */
   __pyx_v_value = PETSC_FALSE;
 
-  /* "PETSc/petscopt.pxi":62
- * cdef getopt_Bool(const_char *pre, const_char *name, object deft):
+  /* "PETSc/petscopt.pxi":65
+ * cdef getopt_Bool(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef PetscBool value = PETSC_FALSE
  *     cdef PetscBool flag  = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     CHKERR( PetscOptionsGetBool(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return <bint>value
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/petscopt.pxi":63
+  /* "PETSc/petscopt.pxi":66
  *     cdef PetscBool value = PETSC_FALSE
  *     cdef PetscBool flag  = PETSC_FALSE
- *     CHKERR( PetscOptionsGetBool(pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
+ *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
  *     if flag==PETSC_TRUE: return <bint>value
  *     if deft is not None: return deft
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetBool(__pyx_v_pre, __pyx_v_name, (&__pyx_v_value), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetBool(__pyx_v_opt, __pyx_v_pre, __pyx_v_name, (&__pyx_v_value), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 66, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":64
+  /* "PETSc/petscopt.pxi":67
  *     cdef PetscBool flag  = PETSC_FALSE
- *     CHKERR( PetscOptionsGetBool(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return <bint>value             # <<<<<<<<<<<<<<
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))
@@ -9882,15 +10452,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(const char *__pyx_v_pre, c
   __pyx_t_2 = ((__pyx_v_flag == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = PyInt_FromLong(__pyx_v_value); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 67, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":65
- *     CHKERR( PetscOptionsGetBool(pre, name, &value, &flag) )
+  /* "PETSc/petscopt.pxi":68
+ *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return <bint>value
  *     if deft is not None: return deft             # <<<<<<<<<<<<<<
  *     raise KeyError(opt2str(pre, name))
@@ -9905,31 +10475,31 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(const char *__pyx_v_pre, c
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":66
+  /* "PETSc/petscopt.pxi":69
  *     if flag==PETSC_TRUE: return <bint>value
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))             # <<<<<<<<<<<<<<
  * 
- * cdef getopt_Int(const_char *pre, const_char *name, object deft):
+ * cdef getopt_Int(PetscOptions opt, const_char *pre, const_char *name, object deft):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_3, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(3, 69, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":60
+  /* "PETSc/petscopt.pxi":63
  *     return '(prefix:%s, name:%s)' % (p, n)
  * 
- * cdef getopt_Bool(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_Bool(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef PetscBool value = PETSC_FALSE
  *     cdef PetscBool flag  = PETSC_FALSE
  */
@@ -9946,15 +10516,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(const char *__pyx_v_pre, c
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":68
+/* "PETSc/petscopt.pxi":71
  *     raise KeyError(opt2str(pre, name))
  * 
- * cdef getopt_Int(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_Int(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef PetscInt value = 0
  *     cdef PetscBool flag = PETSC_FALSE
  */
 
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(PetscOptions __pyx_v_opt, const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
   PetscInt __pyx_v_value;
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
@@ -9964,41 +10534,38 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(const char *__pyx_v_pre, co
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getopt_Int", 0);
 
-  /* "PETSc/petscopt.pxi":69
+  /* "PETSc/petscopt.pxi":72
  * 
- * cdef getopt_Int(const_char *pre, const_char *name, object deft):
+ * cdef getopt_Int(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef PetscInt value = 0             # <<<<<<<<<<<<<<
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetInt(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetInt(opt, pre, name, &value, &flag) )
  */
   __pyx_v_value = 0;
 
-  /* "PETSc/petscopt.pxi":70
- * cdef getopt_Int(const_char *pre, const_char *name, object deft):
+  /* "PETSc/petscopt.pxi":73
+ * cdef getopt_Int(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef PetscInt value = 0
  *     cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     CHKERR( PetscOptionsGetInt(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetInt(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toInt(value)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/petscopt.pxi":71
+  /* "PETSc/petscopt.pxi":74
  *     cdef PetscInt value = 0
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetInt(pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
+ *     CHKERR( PetscOptionsGetInt(opt, pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
  *     if flag==PETSC_TRUE: return toInt(value)
  *     if deft is not None: return deft
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetInt(__pyx_v_pre, __pyx_v_name, (&__pyx_v_value), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetInt(__pyx_v_opt, __pyx_v_pre, __pyx_v_name, (&__pyx_v_value), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 74, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":72
+  /* "PETSc/petscopt.pxi":75
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetInt(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetInt(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toInt(value)             # <<<<<<<<<<<<<<
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))
@@ -10006,15 +10573,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(const char *__pyx_v_pre, co
   __pyx_t_2 = ((__pyx_v_flag == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_value); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 75, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":73
- *     CHKERR( PetscOptionsGetInt(pre, name, &value, &flag) )
+  /* "PETSc/petscopt.pxi":76
+ *     CHKERR( PetscOptionsGetInt(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toInt(value)
  *     if deft is not None: return deft             # <<<<<<<<<<<<<<
  *     raise KeyError(opt2str(pre, name))
@@ -10029,31 +10596,31 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(const char *__pyx_v_pre, co
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":74
+  /* "PETSc/petscopt.pxi":77
  *     if flag==PETSC_TRUE: return toInt(value)
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))             # <<<<<<<<<<<<<<
  * 
- * cdef getopt_Real(const_char *pre, const_char *name, object deft):
+ * cdef getopt_Real(PetscOptions opt, const_char *pre, const_char *name, object deft):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_3, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(3, 77, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":68
+  /* "PETSc/petscopt.pxi":71
  *     raise KeyError(opt2str(pre, name))
  * 
- * cdef getopt_Int(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_Int(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef PetscInt value = 0
  *     cdef PetscBool flag = PETSC_FALSE
  */
@@ -10070,15 +10637,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(const char *__pyx_v_pre, co
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":76
+/* "PETSc/petscopt.pxi":79
  *     raise KeyError(opt2str(pre, name))
  * 
- * cdef getopt_Real(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_Real(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef PetscReal value = 0
  *     cdef PetscBool flag = PETSC_FALSE
  */
 
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(PetscOptions __pyx_v_opt, const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
   PetscReal __pyx_v_value;
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
@@ -10088,41 +10655,38 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(const char *__pyx_v_pre, c
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getopt_Real", 0);
 
-  /* "PETSc/petscopt.pxi":77
+  /* "PETSc/petscopt.pxi":80
  * 
- * cdef getopt_Real(const_char *pre, const_char *name, object deft):
+ * cdef getopt_Real(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef PetscReal value = 0             # <<<<<<<<<<<<<<
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetReal(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetReal(opt, pre, name, &value, &flag) )
  */
   __pyx_v_value = 0.0;
 
-  /* "PETSc/petscopt.pxi":78
- * cdef getopt_Real(const_char *pre, const_char *name, object deft):
+  /* "PETSc/petscopt.pxi":81
+ * cdef getopt_Real(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef PetscReal value = 0
  *     cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     CHKERR( PetscOptionsGetReal(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetReal(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toReal(value)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/petscopt.pxi":79
+  /* "PETSc/petscopt.pxi":82
  *     cdef PetscReal value = 0
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetReal(pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
+ *     CHKERR( PetscOptionsGetReal(opt, pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
  *     if flag==PETSC_TRUE: return toReal(value)
  *     if deft is not None: return deft
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetReal(__pyx_v_pre, __pyx_v_name, (&__pyx_v_value), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetReal(__pyx_v_opt, __pyx_v_pre, __pyx_v_name, (&__pyx_v_value), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 82, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":80
+  /* "PETSc/petscopt.pxi":83
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetReal(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetReal(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toReal(value)             # <<<<<<<<<<<<<<
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))
@@ -10130,15 +10694,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(const char *__pyx_v_pre, c
   __pyx_t_2 = ((__pyx_v_flag == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_value); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 83, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":81
- *     CHKERR( PetscOptionsGetReal(pre, name, &value, &flag) )
+  /* "PETSc/petscopt.pxi":84
+ *     CHKERR( PetscOptionsGetReal(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toReal(value)
  *     if deft is not None: return deft             # <<<<<<<<<<<<<<
  *     raise KeyError(opt2str(pre, name))
@@ -10153,31 +10717,31 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(const char *__pyx_v_pre, c
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":82
+  /* "PETSc/petscopt.pxi":85
  *     if flag==PETSC_TRUE: return toReal(value)
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))             # <<<<<<<<<<<<<<
  * 
- * cdef getopt_Scalar(const_char *pre, const_char *name, object deft):
+ * cdef getopt_Scalar(PetscOptions opt, const_char *pre, const_char *name, object deft):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_3, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  {__pyx_filename = __pyx_f[3]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(3, 85, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":76
+  /* "PETSc/petscopt.pxi":79
  *     raise KeyError(opt2str(pre, name))
  * 
- * cdef getopt_Real(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_Real(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef PetscReal value = 0
  *     cdef PetscBool flag = PETSC_FALSE
  */
@@ -10194,15 +10758,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(const char *__pyx_v_pre, c
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":84
+/* "PETSc/petscopt.pxi":87
  *     raise KeyError(opt2str(pre, name))
  * 
- * cdef getopt_Scalar(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_Scalar(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef PetscScalar value = 0
  *     cdef PetscBool flag = PETSC_FALSE
  */
 
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(PetscOptions __pyx_v_opt, const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
   PetscScalar __pyx_v_value;
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
@@ -10212,41 +10776,38 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(const char *__pyx_v_pre,
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getopt_Scalar", 0);
 
-  /* "PETSc/petscopt.pxi":85
+  /* "PETSc/petscopt.pxi":88
  * 
- * cdef getopt_Scalar(const_char *pre, const_char *name, object deft):
+ * cdef getopt_Scalar(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef PetscScalar value = 0             # <<<<<<<<<<<<<<
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetScalar(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetScalar(opt, pre, name, &value, &flag) )
  */
   __pyx_v_value = 0.0;
 
-  /* "PETSc/petscopt.pxi":86
- * cdef getopt_Scalar(const_char *pre, const_char *name, object deft):
+  /* "PETSc/petscopt.pxi":89
+ * cdef getopt_Scalar(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef PetscScalar value = 0
  *     cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     CHKERR( PetscOptionsGetScalar(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetScalar(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toScalar(value)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/petscopt.pxi":87
+  /* "PETSc/petscopt.pxi":90
  *     cdef PetscScalar value = 0
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetScalar(pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
+ *     CHKERR( PetscOptionsGetScalar(opt, pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
  *     if flag==PETSC_TRUE: return toScalar(value)
  *     if deft is not None: return deft
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetScalar(__pyx_v_pre, __pyx_v_name, (&__pyx_v_value), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetScalar(__pyx_v_opt, __pyx_v_pre, __pyx_v_name, (&__pyx_v_value), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 90, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":88
+  /* "PETSc/petscopt.pxi":91
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetScalar(pre, name, &value, &flag) )
+ *     CHKERR( PetscOptionsGetScalar(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toScalar(value)             # <<<<<<<<<<<<<<
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))
@@ -10254,15 +10815,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(const char *__pyx_v_pre,
   __pyx_t_2 = ((__pyx_v_flag == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_value); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 91, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":89
- *     CHKERR( PetscOptionsGetScalar(pre, name, &value, &flag) )
+  /* "PETSc/petscopt.pxi":92
+ *     CHKERR( PetscOptionsGetScalar(opt, pre, name, &value, &flag) )
  *     if flag==PETSC_TRUE: return toScalar(value)
  *     if deft is not None: return deft             # <<<<<<<<<<<<<<
  *     raise KeyError(opt2str(pre, name))
@@ -10277,31 +10838,31 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(const char *__pyx_v_pre,
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":90
+  /* "PETSc/petscopt.pxi":93
  *     if flag==PETSC_TRUE: return toScalar(value)
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))             # <<<<<<<<<<<<<<
  * 
- * cdef getopt_String(const_char *pre, const_char *name, object deft):
+ * cdef getopt_String(PetscOptions opt, const_char *pre, const_char *name, object deft):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_3, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  {__pyx_filename = __pyx_f[3]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(3, 93, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":84
+  /* "PETSc/petscopt.pxi":87
  *     raise KeyError(opt2str(pre, name))
  * 
- * cdef getopt_Scalar(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_Scalar(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef PetscScalar value = 0
  *     cdef PetscBool flag = PETSC_FALSE
  */
@@ -10318,16 +10879,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(const char *__pyx_v_pre,
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":92
+/* "PETSc/petscopt.pxi":95
  *     raise KeyError(opt2str(pre, name))
  * 
- * cdef getopt_String(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_String(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef char value[1024+1]
  *     cdef PetscBool flag = PETSC_FALSE
  */
 
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
-  char __pyx_v_value[(1024 + 1)];
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(PetscOptions __pyx_v_opt, const char *__pyx_v_pre, const char *__pyx_v_name, PyObject *__pyx_v_deft) {
+  char __pyx_v_value[(0x400 + 1)];
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -10336,32 +10897,29 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(const char *__pyx_v_pre,
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getopt_String", 0);
 
-  /* "PETSc/petscopt.pxi":94
- * cdef getopt_String(const_char *pre, const_char *name, object deft):
+  /* "PETSc/petscopt.pxi":97
+ * cdef getopt_String(PetscOptions opt, const_char *pre, const_char *name, object deft):
  *     cdef char value[1024+1]
  *     cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
- *     CHKERR( PetscOptionsGetString(pre, name, value, 1024, &flag) )
+ *     CHKERR( PetscOptionsGetString(opt, pre, name, value, 1024, &flag) )
  *     if flag==PETSC_TRUE: return bytes2str(value)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/petscopt.pxi":95
+  /* "PETSc/petscopt.pxi":98
  *     cdef char value[1024+1]
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetString(pre, name, value, 1024, &flag) )             # <<<<<<<<<<<<<<
+ *     CHKERR( PetscOptionsGetString(opt, pre, name, value, 1024, &flag) )             # <<<<<<<<<<<<<<
  *     if flag==PETSC_TRUE: return bytes2str(value)
  *     if deft is not None: return deft
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetString(__pyx_v_pre, __pyx_v_name, __pyx_v_value, 1024, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetString(__pyx_v_opt, __pyx_v_pre, __pyx_v_name, __pyx_v_value, 0x400, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 98, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":96
+  /* "PETSc/petscopt.pxi":99
  *     cdef PetscBool flag = PETSC_FALSE
- *     CHKERR( PetscOptionsGetString(pre, name, value, 1024, &flag) )
+ *     CHKERR( PetscOptionsGetString(opt, pre, name, value, 1024, &flag) )
  *     if flag==PETSC_TRUE: return bytes2str(value)             # <<<<<<<<<<<<<<
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))
@@ -10369,15 +10927,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(const char *__pyx_v_pre,
   __pyx_t_2 = ((__pyx_v_flag == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_value); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 99, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":97
- *     CHKERR( PetscOptionsGetString(pre, name, value, 1024, &flag) )
+  /* "PETSc/petscopt.pxi":100
+ *     CHKERR( PetscOptionsGetString(opt, pre, name, value, 1024, &flag) )
  *     if flag==PETSC_TRUE: return bytes2str(value)
  *     if deft is not None: return deft             # <<<<<<<<<<<<<<
  *     raise KeyError(opt2str(pre, name))
@@ -10392,31 +10950,31 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(const char *__pyx_v_pre,
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":98
+  /* "PETSc/petscopt.pxi":101
  *     if flag==PETSC_TRUE: return bytes2str(value)
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_opt2str(__pyx_v_pre, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_3, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(3, 101, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":92
+  /* "PETSc/petscopt.pxi":95
  *     raise KeyError(opt2str(pre, name))
  * 
- * cdef getopt_String(const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
+ * cdef getopt_String(PetscOptions opt, const_char *pre, const_char *name, object deft):             # <<<<<<<<<<<<<<
  *     cdef char value[1024+1]
  *     cdef PetscBool flag = PETSC_FALSE
  */
@@ -10433,7 +10991,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(const char *__pyx_v_pre,
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":108
+/* "PETSc/petscopt.pxi":111
  *     OPT_STRING
  * 
  * cdef getpair(prefix, name, const_char **pr, const_char **nm):             # <<<<<<<<<<<<<<
@@ -10449,14 +11007,11 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getpair", 0);
   __Pyx_INCREF(__pyx_v_prefix);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/petscopt.pxi":110
+  /* "PETSc/petscopt.pxi":113
  * cdef getpair(prefix, name, const_char **pr, const_char **nm):
  *     # --
  *     cdef const_char *p = NULL             # <<<<<<<<<<<<<<
@@ -10465,19 +11020,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
  */
   __pyx_v_p = NULL;
 
-  /* "PETSc/petscopt.pxi":111
+  /* "PETSc/petscopt.pxi":114
  *     # --
  *     cdef const_char *p = NULL
  *     prefix = str2bytes(prefix, &p)             # <<<<<<<<<<<<<<
  *     if p != NULL and p[0] == c'-':
  *         p = &p[1]
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_p)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_p)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscopt.pxi":112
+  /* "PETSc/petscopt.pxi":115
  *     cdef const_char *p = NULL
  *     prefix = str2bytes(prefix, &p)
  *     if p != NULL and p[0] == c'-':             # <<<<<<<<<<<<<<
@@ -10495,7 +11050,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscopt.pxi":113
+    /* "PETSc/petscopt.pxi":116
  *     prefix = str2bytes(prefix, &p)
  *     if p != NULL and p[0] == c'-':
  *         p = &p[1]             # <<<<<<<<<<<<<<
@@ -10503,11 +11058,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
  *     cdef const_char *n = NULL
  */
     __pyx_v_p = (&(__pyx_v_p[1]));
-    goto __pyx_L3;
+
+    /* "PETSc/petscopt.pxi":115
+ *     cdef const_char *p = NULL
+ *     prefix = str2bytes(prefix, &p)
+ *     if p != NULL and p[0] == c'-':             # <<<<<<<<<<<<<<
+ *         p = &p[1]
+ *     # --
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscopt.pxi":115
+  /* "PETSc/petscopt.pxi":118
  *         p = &p[1]
  *     # --
  *     cdef const_char *n = NULL             # <<<<<<<<<<<<<<
@@ -10516,19 +11077,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
  */
   __pyx_v_n = NULL;
 
-  /* "PETSc/petscopt.pxi":116
+  /* "PETSc/petscopt.pxi":119
  *     # --
  *     cdef const_char *n = NULL
  *     name = str2bytes(name, &n)             # <<<<<<<<<<<<<<
  *     if n != NULL and n[0] != c'-':
  *         name = b'-' + name
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_n)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_n)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 119, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscopt.pxi":117
+  /* "PETSc/petscopt.pxi":120
  *     cdef const_char *n = NULL
  *     name = str2bytes(name, &n)
  *     if n != NULL and n[0] != c'-':             # <<<<<<<<<<<<<<
@@ -10546,34 +11107,40 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
   __pyx_L7_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscopt.pxi":118
+    /* "PETSc/petscopt.pxi":121
  *     name = str2bytes(name, &n)
  *     if n != NULL and n[0] != c'-':
  *         name = b'-' + name             # <<<<<<<<<<<<<<
  *         name = str2bytes(name, &n)
  *     # --
  */
-    __pyx_t_1 = PyNumber_Add(__pyx_kp_b__5, __pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyNumber_Add(__pyx_kp_b__5, __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 121, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/petscopt.pxi":119
+    /* "PETSc/petscopt.pxi":122
  *     if n != NULL and n[0] != c'-':
  *         name = b'-' + name
  *         name = str2bytes(name, &n)             # <<<<<<<<<<<<<<
  *     # --
  *     pr[0] = p
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_n)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_n)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 122, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L6;
+
+    /* "PETSc/petscopt.pxi":120
+ *     cdef const_char *n = NULL
+ *     name = str2bytes(name, &n)
+ *     if n != NULL and n[0] != c'-':             # <<<<<<<<<<<<<<
+ *         name = b'-' + name
+ *         name = str2bytes(name, &n)
+ */
   }
-  __pyx_L6:;
 
-  /* "PETSc/petscopt.pxi":121
+  /* "PETSc/petscopt.pxi":124
  *         name = str2bytes(name, &n)
  *     # --
  *     pr[0] = p             # <<<<<<<<<<<<<<
@@ -10582,7 +11149,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
  */
   (__pyx_v_pr[0]) = __pyx_v_p;
 
-  /* "PETSc/petscopt.pxi":122
+  /* "PETSc/petscopt.pxi":125
  *     # --
  *     pr[0] = p
  *     nm[0] = n             # <<<<<<<<<<<<<<
@@ -10591,15 +11158,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
  */
   (__pyx_v_nm[0]) = __pyx_v_n;
 
-  /* "PETSc/petscopt.pxi":123
+  /* "PETSc/petscopt.pxi":126
  *     pr[0] = p
  *     nm[0] = n
  *     return (prefix, name)             # <<<<<<<<<<<<<<
  * 
- * cdef getopt(PetscOptType otype, prefix, name, deft):
+ * cdef getopt(PetscOptions opt, PetscOptType otype, prefix, name, deft):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_prefix);
   __Pyx_GIVEREF(__pyx_v_prefix);
@@ -10611,7 +11178,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscopt.pxi":108
+  /* "PETSc/petscopt.pxi":111
  *     OPT_STRING
  * 
  * cdef getpair(prefix, name, const_char **pr, const_char **nm):             # <<<<<<<<<<<<<<
@@ -10632,15 +11199,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getpair(PyObject *__pyx_v_prefix, PyOb
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":125
+/* "PETSc/petscopt.pxi":128
  *     return (prefix, name)
  * 
- * cdef getopt(PetscOptType otype, prefix, name, deft):             # <<<<<<<<<<<<<<
+ * cdef getopt(PetscOptions opt, PetscOptType otype, prefix, name, deft):             # <<<<<<<<<<<<<<
  *     cdef const_char *pr = NULL
  *     cdef const_char *nm = NULL
  */
 
-static PyObject *__pyx_f_8petsc4py_5PETSc_getopt(enum __pyx_t_8petsc4py_5PETSc_PetscOptType __pyx_v_otype, PyObject *__pyx_v_prefix, PyObject *__pyx_v_name, PyObject *__pyx_v_deft) {
+static PyObject *__pyx_f_8petsc4py_5PETSc_getopt(PetscOptions __pyx_v_opt, enum __pyx_t_8petsc4py_5PETSc_PetscOptType __pyx_v_otype, PyObject *__pyx_v_prefix, PyObject *__pyx_v_name, PyObject *__pyx_v_deft) {
   const char *__pyx_v_pr;
   const char *__pyx_v_nm;
   CYTHON_UNUSED PyObject *__pyx_v_tmp = NULL;
@@ -10648,130 +11215,127 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt(enum __pyx_t_8petsc4py_5PETSc_P
   __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("getopt", 0);
 
-  /* "PETSc/petscopt.pxi":126
+  /* "PETSc/petscopt.pxi":129
  * 
- * cdef getopt(PetscOptType otype, prefix, name, deft):
+ * cdef getopt(PetscOptions opt, PetscOptType otype, prefix, name, deft):
  *     cdef const_char *pr = NULL             # <<<<<<<<<<<<<<
  *     cdef const_char *nm = NULL
  *     tmp = getpair(prefix, name, &pr, &nm)
  */
   __pyx_v_pr = NULL;
 
-  /* "PETSc/petscopt.pxi":127
- * cdef getopt(PetscOptType otype, prefix, name, deft):
+  /* "PETSc/petscopt.pxi":130
+ * cdef getopt(PetscOptions opt, PetscOptType otype, prefix, name, deft):
  *     cdef const_char *pr = NULL
  *     cdef const_char *nm = NULL             # <<<<<<<<<<<<<<
  *     tmp = getpair(prefix, name, &pr, &nm)
- *     if otype == OPT_BOOL   : return getopt_Bool   (pr, nm, deft)
+ *     if otype == OPT_BOOL   : return getopt_Bool   (opt, pr, nm, deft)
  */
   __pyx_v_nm = NULL;
 
-  /* "PETSc/petscopt.pxi":128
+  /* "PETSc/petscopt.pxi":131
  *     cdef const_char *pr = NULL
  *     cdef const_char *nm = NULL
  *     tmp = getpair(prefix, name, &pr, &nm)             # <<<<<<<<<<<<<<
- *     if otype == OPT_BOOL   : return getopt_Bool   (pr, nm, deft)
- *     if otype == OPT_INT    : return getopt_Int    (pr, nm, deft)
+ *     if otype == OPT_BOOL   : return getopt_Bool   (opt, pr, nm, deft)
+ *     if otype == OPT_INT    : return getopt_Int    (opt, pr, nm, deft)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getpair(__pyx_v_prefix, __pyx_v_name, (&__pyx_v_pr), (&__pyx_v_nm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getpair(__pyx_v_prefix, __pyx_v_name, (&__pyx_v_pr), (&__pyx_v_nm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 131, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tmp = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscopt.pxi":129
+  /* "PETSc/petscopt.pxi":132
  *     cdef const_char *nm = NULL
  *     tmp = getpair(prefix, name, &pr, &nm)
- *     if otype == OPT_BOOL   : return getopt_Bool   (pr, nm, deft)             # <<<<<<<<<<<<<<
- *     if otype == OPT_INT    : return getopt_Int    (pr, nm, deft)
- *     if otype == OPT_REAL   : return getopt_Real   (pr, nm, deft)
+ *     if otype == OPT_BOOL   : return getopt_Bool   (opt, pr, nm, deft)             # <<<<<<<<<<<<<<
+ *     if otype == OPT_INT    : return getopt_Int    (opt, pr, nm, deft)
+ *     if otype == OPT_REAL   : return getopt_Real   (opt, pr, nm, deft)
  */
   __pyx_t_2 = ((__pyx_v_otype == __pyx_e_8petsc4py_5PETSc_OPT_BOOL) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_Bool(__pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_Bool(__pyx_v_opt, __pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 132, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":130
+  /* "PETSc/petscopt.pxi":133
  *     tmp = getpair(prefix, name, &pr, &nm)
- *     if otype == OPT_BOOL   : return getopt_Bool   (pr, nm, deft)
- *     if otype == OPT_INT    : return getopt_Int    (pr, nm, deft)             # <<<<<<<<<<<<<<
- *     if otype == OPT_REAL   : return getopt_Real   (pr, nm, deft)
- *     if otype == OPT_SCALAR : return getopt_Scalar (pr, nm, deft)
+ *     if otype == OPT_BOOL   : return getopt_Bool   (opt, pr, nm, deft)
+ *     if otype == OPT_INT    : return getopt_Int    (opt, pr, nm, deft)             # <<<<<<<<<<<<<<
+ *     if otype == OPT_REAL   : return getopt_Real   (opt, pr, nm, deft)
+ *     if otype == OPT_SCALAR : return getopt_Scalar (opt, pr, nm, deft)
  */
   __pyx_t_2 = ((__pyx_v_otype == __pyx_e_8petsc4py_5PETSc_OPT_INT) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_Int(__pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_Int(__pyx_v_opt, __pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 133, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":131
- *     if otype == OPT_BOOL   : return getopt_Bool   (pr, nm, deft)
- *     if otype == OPT_INT    : return getopt_Int    (pr, nm, deft)
- *     if otype == OPT_REAL   : return getopt_Real   (pr, nm, deft)             # <<<<<<<<<<<<<<
- *     if otype == OPT_SCALAR : return getopt_Scalar (pr, nm, deft)
- *     if otype == OPT_STRING : return getopt_String (pr, nm, deft)
+  /* "PETSc/petscopt.pxi":134
+ *     if otype == OPT_BOOL   : return getopt_Bool   (opt, pr, nm, deft)
+ *     if otype == OPT_INT    : return getopt_Int    (opt, pr, nm, deft)
+ *     if otype == OPT_REAL   : return getopt_Real   (opt, pr, nm, deft)             # <<<<<<<<<<<<<<
+ *     if otype == OPT_SCALAR : return getopt_Scalar (opt, pr, nm, deft)
+ *     if otype == OPT_STRING : return getopt_String (opt, pr, nm, deft)
  */
   __pyx_t_2 = ((__pyx_v_otype == __pyx_e_8petsc4py_5PETSc_OPT_REAL) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_Real(__pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_Real(__pyx_v_opt, __pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 134, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":132
- *     if otype == OPT_INT    : return getopt_Int    (pr, nm, deft)
- *     if otype == OPT_REAL   : return getopt_Real   (pr, nm, deft)
- *     if otype == OPT_SCALAR : return getopt_Scalar (pr, nm, deft)             # <<<<<<<<<<<<<<
- *     if otype == OPT_STRING : return getopt_String (pr, nm, deft)
+  /* "PETSc/petscopt.pxi":135
+ *     if otype == OPT_INT    : return getopt_Int    (opt, pr, nm, deft)
+ *     if otype == OPT_REAL   : return getopt_Real   (opt, pr, nm, deft)
+ *     if otype == OPT_SCALAR : return getopt_Scalar (opt, pr, nm, deft)             # <<<<<<<<<<<<<<
+ *     if otype == OPT_STRING : return getopt_String (opt, pr, nm, deft)
  * 
  */
   __pyx_t_2 = ((__pyx_v_otype == __pyx_e_8petsc4py_5PETSc_OPT_SCALAR) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_Scalar(__pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_Scalar(__pyx_v_opt, __pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 135, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":133
- *     if otype == OPT_REAL   : return getopt_Real   (pr, nm, deft)
- *     if otype == OPT_SCALAR : return getopt_Scalar (pr, nm, deft)
- *     if otype == OPT_STRING : return getopt_String (pr, nm, deft)             # <<<<<<<<<<<<<<
+  /* "PETSc/petscopt.pxi":136
+ *     if otype == OPT_REAL   : return getopt_Real   (opt, pr, nm, deft)
+ *     if otype == OPT_SCALAR : return getopt_Scalar (opt, pr, nm, deft)
+ *     if otype == OPT_STRING : return getopt_String (opt, pr, nm, deft)             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __pyx_t_2 = ((__pyx_v_otype == __pyx_e_8petsc4py_5PETSc_OPT_STRING) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_String(__pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getopt_String(__pyx_v_opt, __pyx_v_pr, __pyx_v_nm, __pyx_v_deft); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 136, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":125
+  /* "PETSc/petscopt.pxi":128
  *     return (prefix, name)
  * 
- * cdef getopt(PetscOptType otype, prefix, name, deft):             # <<<<<<<<<<<<<<
+ * cdef getopt(PetscOptions opt, PetscOptType otype, prefix, name, deft):             # <<<<<<<<<<<<<<
  *     cdef const_char *pr = NULL
  *     cdef const_char *nm = NULL
  */
@@ -10790,7 +11354,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt(enum __pyx_t_8petsc4py_5PETSc_P
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":138
+/* "PETSc/petscopt.pxi":141
  * # simple minded options parser
  * 
  * cdef tokenize(options):             # <<<<<<<<<<<<<<
@@ -10818,13 +11382,10 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
   PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
   int __pyx_t_13;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("tokenize", 0);
   __Pyx_INCREF(__pyx_v_options);
 
-  /* "PETSc/petscopt.pxi":139
+  /* "PETSc/petscopt.pxi":142
  * 
  * cdef tokenize(options):
  *   cdef PetscToken t = NULL             # <<<<<<<<<<<<<<
@@ -10833,7 +11394,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  */
   __pyx_v_t = NULL;
 
-  /* "PETSc/petscopt.pxi":140
+  /* "PETSc/petscopt.pxi":143
  * cdef tokenize(options):
  *   cdef PetscToken t = NULL
  *   cdef const_char *s = NULL             # <<<<<<<<<<<<<<
@@ -10842,7 +11403,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  */
   __pyx_v_s = NULL;
 
-  /* "PETSc/petscopt.pxi":141
+  /* "PETSc/petscopt.pxi":144
  *   cdef PetscToken t = NULL
  *   cdef const_char *s = NULL
  *   cdef const_char *p = NULL             # <<<<<<<<<<<<<<
@@ -10851,40 +11412,40 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  */
   __pyx_v_p = NULL;
 
-  /* "PETSc/petscopt.pxi":142
+  /* "PETSc/petscopt.pxi":145
  *   cdef const_char *s = NULL
  *   cdef const_char *p = NULL
  *   options = str2bytes(options, &s)             # <<<<<<<<<<<<<<
  *   cdef list tokens = []
  *   CHKERR( PetscTokenCreate(s, c' ', &t) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_options, (&__pyx_v_s)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_options, (&__pyx_v_s)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_options, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscopt.pxi":143
+  /* "PETSc/petscopt.pxi":146
  *   cdef const_char *p = NULL
  *   options = str2bytes(options, &s)
  *   cdef list tokens = []             # <<<<<<<<<<<<<<
  *   CHKERR( PetscTokenCreate(s, c' ', &t) )
  *   try:
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 146, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tokens = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscopt.pxi":144
+  /* "PETSc/petscopt.pxi":147
  *   options = str2bytes(options, &s)
  *   cdef list tokens = []
  *   CHKERR( PetscTokenCreate(s, c' ', &t) )             # <<<<<<<<<<<<<<
  *   try:
  *       CHKERR( PetscTokenFind(t, <char**>&p) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenCreate(__pyx_v_s, ' ', (&__pyx_v_t))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenCreate(__pyx_v_s, ' ', (&__pyx_v_t))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 147, __pyx_L1_error)
 
-  /* "PETSc/petscopt.pxi":145
+  /* "PETSc/petscopt.pxi":148
  *   cdef list tokens = []
  *   CHKERR( PetscTokenCreate(s, c' ', &t) )
  *   try:             # <<<<<<<<<<<<<<
@@ -10893,16 +11454,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  */
   /*try:*/ {
 
-    /* "PETSc/petscopt.pxi":146
+    /* "PETSc/petscopt.pxi":149
  *   CHKERR( PetscTokenCreate(s, c' ', &t) )
  *   try:
  *       CHKERR( PetscTokenFind(t, <char**>&p) )             # <<<<<<<<<<<<<<
  *       while p != NULL:
  *           tokens.append(bytes2str(p))
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenFind(__pyx_v_t, ((char **)(&__pyx_v_p)))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenFind(__pyx_v_t, ((char **)(&__pyx_v_p)))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 149, __pyx_L4_error)
 
-    /* "PETSc/petscopt.pxi":147
+    /* "PETSc/petscopt.pxi":150
  *   try:
  *       CHKERR( PetscTokenFind(t, <char**>&p) )
  *       while p != NULL:             # <<<<<<<<<<<<<<
@@ -10913,30 +11474,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
       __pyx_t_3 = ((__pyx_v_p != NULL) != 0);
       if (!__pyx_t_3) break;
 
-      /* "PETSc/petscopt.pxi":148
+      /* "PETSc/petscopt.pxi":151
  *       CHKERR( PetscTokenFind(t, <char**>&p) )
  *       while p != NULL:
  *           tokens.append(bytes2str(p))             # <<<<<<<<<<<<<<
  *           CHKERR( PetscTokenFind(t, <char**>&p) )
  *   finally:
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_p); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_p); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 151, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_t_1); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_t_1); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 151, __pyx_L4_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "PETSc/petscopt.pxi":149
+      /* "PETSc/petscopt.pxi":152
  *       while p != NULL:
  *           tokens.append(bytes2str(p))
  *           CHKERR( PetscTokenFind(t, <char**>&p) )             # <<<<<<<<<<<<<<
  *   finally:
  *       CHKERR( PetscTokenDestroy(&t) )
  */
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenFind(__pyx_v_t, ((char **)(&__pyx_v_p)))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenFind(__pyx_v_t, ((char **)(&__pyx_v_p)))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 152, __pyx_L4_error)
     }
   }
 
-  /* "PETSc/petscopt.pxi":151
+  /* "PETSc/petscopt.pxi":154
  *           CHKERR( PetscTokenFind(t, <char**>&p) )
  *   finally:
  *       CHKERR( PetscTokenDestroy(&t) )             # <<<<<<<<<<<<<<
@@ -10945,12 +11506,14 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 154, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
@@ -10962,8 +11525,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
       __Pyx_XGOTREF(__pyx_t_12);
       __pyx_t_2 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
       {
-        __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_13 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+        __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(3, 154, __pyx_L9_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
@@ -10978,6 +11542,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
       __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
       goto __pyx_L1_error;
       __pyx_L9_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
@@ -10993,7 +11558,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
     __pyx_L5:;
   }
 
-  /* "PETSc/petscopt.pxi":152
+  /* "PETSc/petscopt.pxi":155
  *   finally:
  *       CHKERR( PetscTokenDestroy(&t) )
  *   return tokens             # <<<<<<<<<<<<<<
@@ -11005,7 +11570,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
   __pyx_r = __pyx_v_tokens;
   goto __pyx_L0;
 
-  /* "PETSc/petscopt.pxi":138
+  /* "PETSc/petscopt.pxi":141
  * # simple minded options parser
  * 
  * cdef tokenize(options):             # <<<<<<<<<<<<<<
@@ -11026,7 +11591,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":154
+/* "PETSc/petscopt.pxi":157
  *   return tokens
  * 
  * cdef bint iskey(key):             # <<<<<<<<<<<<<<
@@ -11042,13 +11607,10 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
   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("iskey", 0);
   __Pyx_INCREF(__pyx_v_key);
 
-  /* "PETSc/petscopt.pxi":155
+  /* "PETSc/petscopt.pxi":158
  * 
  * cdef bint iskey(key):
  *     cdef const_char *k = NULL             # <<<<<<<<<<<<<<
@@ -11057,7 +11619,7 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
  */
   __pyx_v_k = NULL;
 
-  /* "PETSc/petscopt.pxi":156
+  /* "PETSc/petscopt.pxi":159
  * cdef bint iskey(key):
  *     cdef const_char *k = NULL
  *     cdef PetscBool b = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -11066,38 +11628,38 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
  */
   __pyx_v_b = PETSC_FALSE;
 
-  /* "PETSc/petscopt.pxi":157
+  /* "PETSc/petscopt.pxi":160
  *     cdef const_char *k = NULL
  *     cdef PetscBool b = PETSC_FALSE
  *     if key:             # <<<<<<<<<<<<<<
  *         key = str2bytes(key, &k)
  *         CHKERR( PetscOptionsValidKey(k, &b) )
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_key); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_key); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 160, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/petscopt.pxi":158
+    /* "PETSc/petscopt.pxi":161
  *     cdef PetscBool b = PETSC_FALSE
  *     if key:
  *         key = str2bytes(key, &k)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscOptionsValidKey(k, &b) )
  *         if b == PETSC_TRUE:
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_key, (&__pyx_v_k)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_key, (&__pyx_v_k)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 161, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "PETSc/petscopt.pxi":159
+    /* "PETSc/petscopt.pxi":162
  *     if key:
  *         key = str2bytes(key, &k)
  *         CHKERR( PetscOptionsValidKey(k, &b) )             # <<<<<<<<<<<<<<
  *         if b == PETSC_TRUE:
  *             return True
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsValidKey(__pyx_v_k, (&__pyx_v_b))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsValidKey(__pyx_v_k, (&__pyx_v_b))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(3, 162, __pyx_L1_error)
 
-    /* "PETSc/petscopt.pxi":160
+    /* "PETSc/petscopt.pxi":163
  *         key = str2bytes(key, &k)
  *         CHKERR( PetscOptionsValidKey(k, &b) )
  *         if b == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -11107,7 +11669,7 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
     __pyx_t_1 = ((__pyx_v_b == PETSC_TRUE) != 0);
     if (__pyx_t_1) {
 
-      /* "PETSc/petscopt.pxi":161
+      /* "PETSc/petscopt.pxi":164
  *         CHKERR( PetscOptionsValidKey(k, &b) )
  *         if b == PETSC_TRUE:
  *             return True             # <<<<<<<<<<<<<<
@@ -11116,12 +11678,26 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
  */
       __pyx_r = 1;
       goto __pyx_L0;
+
+      /* "PETSc/petscopt.pxi":163
+ *         key = str2bytes(key, &k)
+ *         CHKERR( PetscOptionsValidKey(k, &b) )
+ *         if b == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *             return True
+ *     return False
+ */
     }
-    goto __pyx_L3;
+
+    /* "PETSc/petscopt.pxi":160
+ *     cdef const_char *k = NULL
+ *     cdef PetscBool b = PETSC_FALSE
+ *     if key:             # <<<<<<<<<<<<<<
+ *         key = str2bytes(key, &k)
+ *         CHKERR( PetscOptionsValidKey(k, &b) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscopt.pxi":162
+  /* "PETSc/petscopt.pxi":165
  *         if b == PETSC_TRUE:
  *             return True
  *     return False             # <<<<<<<<<<<<<<
@@ -11131,7 +11707,7 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscopt.pxi":154
+  /* "PETSc/petscopt.pxi":157
  *   return tokens
  * 
  * cdef bint iskey(key):             # <<<<<<<<<<<<<<
@@ -11150,7 +11726,7 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":164
+/* "PETSc/petscopt.pxi":167
  *     return False
  * 
  * cdef gettok(tokens):             # <<<<<<<<<<<<<<
@@ -11163,22 +11739,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_gettok(PyObject *__pyx_v_tokens) {
   __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("gettok", 0);
 
-  /* "PETSc/petscopt.pxi":165
+  /* "PETSc/petscopt.pxi":168
  * 
  * cdef gettok(tokens):
  *     if tokens:             # <<<<<<<<<<<<<<
  *         return tokens.pop(0)
  *     else:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_tokens); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_tokens); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 168, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/petscopt.pxi":166
+    /* "PETSc/petscopt.pxi":169
  * cdef gettok(tokens):
  *     if tokens:
  *         return tokens.pop(0)             # <<<<<<<<<<<<<<
@@ -11186,28 +11759,36 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_gettok(PyObject *__pyx_v_tokens) {
  *         return None
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __Pyx_PyObject_PopIndex(__pyx_v_tokens, 0, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_PopIndex(__pyx_v_tokens, __pyx_int_0, 0, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 169, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
-  }
-  /*else*/ {
 
     /* "PETSc/petscopt.pxi":168
+ * 
+ * cdef gettok(tokens):
+ *     if tokens:             # <<<<<<<<<<<<<<
+ *         return tokens.pop(0)
+ *     else:
+ */
+  }
+
+  /* "PETSc/petscopt.pxi":171
  *         return tokens.pop(0)
  *     else:
  *         return None             # <<<<<<<<<<<<<<
  * 
  * cdef getkey(key, prefix):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscopt.pxi":164
+  /* "PETSc/petscopt.pxi":167
  *     return False
  * 
  * cdef gettok(tokens):             # <<<<<<<<<<<<<<
@@ -11226,7 +11807,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_gettok(PyObject *__pyx_v_tokens) {
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":170
+/* "PETSc/petscopt.pxi":173
  *         return None
  * 
  * cdef getkey(key, prefix):             # <<<<<<<<<<<<<<
@@ -11244,13 +11825,10 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
   Py_ssize_t __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getkey", 0);
   __Pyx_INCREF(__pyx_v_key);
 
-  /* "PETSc/petscopt.pxi":171
+  /* "PETSc/petscopt.pxi":174
  * 
  * cdef getkey(key, prefix):
  *     if not iskey(key):             # <<<<<<<<<<<<<<
@@ -11260,7 +11838,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
   __pyx_t_1 = ((!(__pyx_f_8petsc4py_5PETSc_iskey(__pyx_v_key) != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscopt.pxi":172
+    /* "PETSc/petscopt.pxi":175
  * cdef getkey(key, prefix):
  *     if not iskey(key):
  *         return None             # <<<<<<<<<<<<<<
@@ -11271,56 +11849,70 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
+
+    /* "PETSc/petscopt.pxi":174
+ * 
+ * cdef getkey(key, prefix):
+ *     if not iskey(key):             # <<<<<<<<<<<<<<
+ *         return None
+ *     key = key[1:]
+ */
   }
 
-  /* "PETSc/petscopt.pxi":173
+  /* "PETSc/petscopt.pxi":176
  *     if not iskey(key):
  *         return None
  *     key = key[1:]             # <<<<<<<<<<<<<<
  *     if key[0] == '-':
  *         key = key[1:]
  */
-  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_key, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_key, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 176, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscopt.pxi":174
+  /* "PETSc/petscopt.pxi":177
  *         return None
  *     key = key[1:]
  *     if key[0] == '-':             # <<<<<<<<<<<<<<
  *         key = key[1:]
  *     if not key.startswith(prefix):
  */
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_key, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_key, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 177, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__5, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__5, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 177, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_1) {
 
-    /* "PETSc/petscopt.pxi":175
+    /* "PETSc/petscopt.pxi":178
  *     key = key[1:]
  *     if key[0] == '-':
  *         key = key[1:]             # <<<<<<<<<<<<<<
  *     if not key.startswith(prefix):
  *         return None
  */
-    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_key, 1, 0, NULL, NULL, &__pyx_slice__9, 1, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_key, 1, 0, NULL, NULL, &__pyx_slice__9, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 178, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_2);
     __pyx_t_2 = 0;
-    goto __pyx_L4;
+
+    /* "PETSc/petscopt.pxi":177
+ *         return None
+ *     key = key[1:]
+ *     if key[0] == '-':             # <<<<<<<<<<<<<<
+ *         key = key[1:]
+ *     if not key.startswith(prefix):
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscopt.pxi":176
+  /* "PETSc/petscopt.pxi":179
  *     if key[0] == '-':
  *         key = key[1:]
  *     if not key.startswith(prefix):             # <<<<<<<<<<<<<<
  *         return None
  *     return key.replace(prefix, '', 1)
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -11333,26 +11925,26 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 179, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 179, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
     __Pyx_INCREF(__pyx_v_prefix);
     __Pyx_GIVEREF(__pyx_v_prefix);
     PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_prefix);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 179, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 179, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_6 = ((!__pyx_t_1) != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/petscopt.pxi":177
+    /* "PETSc/petscopt.pxi":180
  *         key = key[1:]
  *     if not key.startswith(prefix):
  *         return None             # <<<<<<<<<<<<<<
@@ -11363,9 +11955,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
+
+    /* "PETSc/petscopt.pxi":179
+ *     if key[0] == '-':
+ *         key = key[1:]
+ *     if not key.startswith(prefix):             # <<<<<<<<<<<<<<
+ *         return None
+ *     return key.replace(prefix, '', 1)
+ */
   }
 
-  /* "PETSc/petscopt.pxi":178
+  /* "PETSc/petscopt.pxi":181
  *     if not key.startswith(prefix):
  *         return None
  *     return key.replace(prefix, '', 1)             # <<<<<<<<<<<<<<
@@ -11373,7 +11973,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
  * cdef parseopt(options, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_5 = NULL;
   __pyx_t_7 = 0;
@@ -11387,7 +11987,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
       __pyx_t_7 = 1;
     }
   }
-  __pyx_t_4 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   if (__pyx_t_5) {
     __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL;
@@ -11401,7 +12001,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
   __Pyx_INCREF(__pyx_int_1);
   __Pyx_GIVEREF(__pyx_int_1);
   PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_7, __pyx_int_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -11409,7 +12009,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscopt.pxi":170
+  /* "PETSc/petscopt.pxi":173
  *         return None
  * 
  * cdef getkey(key, prefix):             # <<<<<<<<<<<<<<
@@ -11432,7 +12032,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
   return __pyx_r;
 }
 
-/* "PETSc/petscopt.pxi":180
+/* "PETSc/petscopt.pxi":183
  *     return key.replace(prefix, '', 1)
  * 
  * cdef parseopt(options, prefix):             # <<<<<<<<<<<<<<
@@ -11452,13 +12052,10 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_parseopt(PyObject *__pyx_v_options, Py
   int __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("parseopt", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "PETSc/petscopt.pxi":181
+  /* "PETSc/petscopt.pxi":184
  * 
  * cdef parseopt(options, prefix):
  *     if isinstance(options, str):             # <<<<<<<<<<<<<<
@@ -11469,43 +12066,51 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_parseopt(PyObject *__pyx_v_options, Py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscopt.pxi":182
+    /* "PETSc/petscopt.pxi":185
  * cdef parseopt(options, prefix):
  *     if isinstance(options, str):
  *         tokens = tokenize(options)             # <<<<<<<<<<<<<<
  *     else:
  *         tokens = list(options)
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_tokenize(__pyx_v_options); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_tokenize(__pyx_v_options); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 185, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_tokens = __pyx_t_3;
     __pyx_t_3 = 0;
+
+    /* "PETSc/petscopt.pxi":184
+ * 
+ * cdef parseopt(options, prefix):
+ *     if isinstance(options, str):             # <<<<<<<<<<<<<<
+ *         tokens = tokenize(options)
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscopt.pxi":184
+  /* "PETSc/petscopt.pxi":187
  *         tokens = tokenize(options)
  *     else:
  *         tokens = list(options)             # <<<<<<<<<<<<<<
  *     prefix = prefix or ''
  *     # parser loop
  */
-    __pyx_t_3 = PySequence_List(__pyx_v_options); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = PySequence_List(__pyx_v_options); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_tokens = __pyx_t_3;
     __pyx_t_3 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/petscopt.pxi":185
+  /* "PETSc/petscopt.pxi":188
  *     else:
  *         tokens = list(options)
  *     prefix = prefix or ''             # <<<<<<<<<<<<<<
  *     # parser loop
  *     opts = {}
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(3, 188, __pyx_L1_error)
   if (!__pyx_t_2) {
   } else {
     __Pyx_INCREF(__pyx_v_prefix);
@@ -11518,31 +12123,31 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_parseopt(PyObject *__pyx_v_options, Py
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscopt.pxi":187
+  /* "PETSc/petscopt.pxi":190
  *     prefix = prefix or ''
  *     # parser loop
  *     opts = {}             # <<<<<<<<<<<<<<
  *     first = gettok(tokens)
  *     while first:
  */
-  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_opts = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscopt.pxi":188
+  /* "PETSc/petscopt.pxi":191
  *     # parser loop
  *     opts = {}
  *     first = gettok(tokens)             # <<<<<<<<<<<<<<
  *     while first:
  *         key = getkey(first, prefix)
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_gettok(__pyx_v_tokens); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_gettok(__pyx_v_tokens); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 191, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_first = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscopt.pxi":189
+  /* "PETSc/petscopt.pxi":192
  *     opts = {}
  *     first = gettok(tokens)
  *     while first:             # <<<<<<<<<<<<<<
@@ -11550,73 +12155,81 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_parseopt(PyObject *__pyx_v_options, Py
  *         if not key:
  */
   while (1) {
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_first); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_first); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(3, 192, __pyx_L1_error)
     if (!__pyx_t_2) break;
 
-    /* "PETSc/petscopt.pxi":190
+    /* "PETSc/petscopt.pxi":193
  *     first = gettok(tokens)
  *     while first:
  *         key = getkey(first, prefix)             # <<<<<<<<<<<<<<
  *         if not key:
  *             first = gettok(tokens)
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_getkey(__pyx_v_first, __pyx_v_prefix); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_getkey(__pyx_v_first, __pyx_v_prefix); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscopt.pxi":191
+    /* "PETSc/petscopt.pxi":194
  *     while first:
  *         key = getkey(first, prefix)
  *         if not key:             # <<<<<<<<<<<<<<
  *             first = gettok(tokens)
  *         else:
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_key); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_key); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(3, 194, __pyx_L1_error)
     __pyx_t_1 = ((!__pyx_t_2) != 0);
     if (__pyx_t_1) {
 
-      /* "PETSc/petscopt.pxi":192
+      /* "PETSc/petscopt.pxi":195
  *         key = getkey(first, prefix)
  *         if not key:
  *             first = gettok(tokens)             # <<<<<<<<<<<<<<
  *         else:
  *             second = gettok(tokens)
  */
-      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_gettok(__pyx_v_tokens); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_gettok(__pyx_v_tokens); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 195, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_first, __pyx_t_3);
       __pyx_t_3 = 0;
+
+      /* "PETSc/petscopt.pxi":194
+ *     while first:
+ *         key = getkey(first, prefix)
+ *         if not key:             # <<<<<<<<<<<<<<
+ *             first = gettok(tokens)
+ *         else:
+ */
       goto __pyx_L8;
     }
-    /*else*/ {
 
-      /* "PETSc/petscopt.pxi":194
+    /* "PETSc/petscopt.pxi":197
  *             first = gettok(tokens)
  *         else:
  *             second = gettok(tokens)             # <<<<<<<<<<<<<<
  *             if getkey(second, prefix):
  *                 value = None
  */
-      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_gettok(__pyx_v_tokens); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_gettok(__pyx_v_tokens); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 197, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_XDECREF_SET(__pyx_v_second, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "PETSc/petscopt.pxi":195
+      /* "PETSc/petscopt.pxi":198
  *         else:
  *             second = gettok(tokens)
  *             if getkey(second, prefix):             # <<<<<<<<<<<<<<
  *                 value = None
  *                 first = second
  */
-      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_getkey(__pyx_v_second, __pyx_v_prefix); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_getkey(__pyx_v_second, __pyx_v_prefix); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 198, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 198, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_1) {
 
-        /* "PETSc/petscopt.pxi":196
+        /* "PETSc/petscopt.pxi":199
  *             second = gettok(tokens)
  *             if getkey(second, prefix):
  *                 value = None             # <<<<<<<<<<<<<<
@@ -11626,7 +12239,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_parseopt(PyObject *__pyx_v_options, Py
         __Pyx_INCREF(Py_None);
         __Pyx_XDECREF_SET(__pyx_v_value, Py_None);
 
-        /* "PETSc/petscopt.pxi":197
+        /* "PETSc/petscopt.pxi":200
  *             if getkey(second, prefix):
  *                 value = None
  *                 first = second             # <<<<<<<<<<<<<<
@@ -11635,47 +12248,55 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_parseopt(PyObject *__pyx_v_options, Py
  */
         __Pyx_INCREF(__pyx_v_second);
         __Pyx_DECREF_SET(__pyx_v_first, __pyx_v_second);
+
+        /* "PETSc/petscopt.pxi":198
+ *         else:
+ *             second = gettok(tokens)
+ *             if getkey(second, prefix):             # <<<<<<<<<<<<<<
+ *                 value = None
+ *                 first = second
+ */
         goto __pyx_L9;
       }
-      /*else*/ {
 
-        /* "PETSc/petscopt.pxi":199
+      /* "PETSc/petscopt.pxi":202
  *                 first = second
  *             else:
  *                 value = second             # <<<<<<<<<<<<<<
  *                 first = gettok(tokens)
  *             opts[key] = value
  */
+      /*else*/ {
         __Pyx_INCREF(__pyx_v_second);
         __Pyx_XDECREF_SET(__pyx_v_value, __pyx_v_second);
 
-        /* "PETSc/petscopt.pxi":200
+        /* "PETSc/petscopt.pxi":203
  *             else:
  *                 value = second
  *                 first = gettok(tokens)             # <<<<<<<<<<<<<<
  *             opts[key] = value
  *     # we are done
  */
-        __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_gettok(__pyx_v_tokens); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_gettok(__pyx_v_tokens); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 203, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF_SET(__pyx_v_first, __pyx_t_3);
         __pyx_t_3 = 0;
       }
       __pyx_L9:;
 
-      /* "PETSc/petscopt.pxi":201
+      /* "PETSc/petscopt.pxi":204
  *                 value = second
  *                 first = gettok(tokens)
  *             opts[key] = value             # <<<<<<<<<<<<<<
  *     # we are done
  *     return opts
  */
-      if (unlikely(PyDict_SetItem(__pyx_v_opts, __pyx_v_key, __pyx_v_value) < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(PyDict_SetItem(__pyx_v_opts, __pyx_v_key, __pyx_v_value) < 0)) __PYX_ERR(3, 204, __pyx_L1_error)
     }
     __pyx_L8:;
   }
 
-  /* "PETSc/petscopt.pxi":203
+  /* "PETSc/petscopt.pxi":206
  *             opts[key] = value
  *     # we are done
  *     return opts             # <<<<<<<<<<<<<<
@@ -11687,7 +12308,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_parseopt(PyObject *__pyx_v_options, Py
   __pyx_r = __pyx_v_opts;
   goto __pyx_L0;
 
-  /* "PETSc/petscopt.pxi":180
+  /* "PETSc/petscopt.pxi":183
  *     return key.replace(prefix, '', 1)
  * 
  * cdef parseopt(options, prefix):             # <<<<<<<<<<<<<<
@@ -11732,9 +12353,6 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_Get(PyObject
   void *__pyx_t_3;
   int __pyx_t_4;
   MPI_Comm *__pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mpi4py_Comm_Get", 0);
 
   /* "PETSc/petscmpi.pxi":40
@@ -11744,15 +12362,15 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_Get(PyObject
  *     cdef PyMPICommGet *commget = \
  *         <PyMPICommGet*> Cython_ImportFunction(
  */
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_n_s_MPI);
   __Pyx_GIVEREF(__pyx_n_s_MPI);
   PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_MPI);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_mpi4py, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_mpi4py, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_MPI = __pyx_t_1;
@@ -11766,7 +12384,7 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_Get(PyObject
  *         MPI, b"PyMPIComm_Get", b"MPI_Comm *(PyObject *)")
  *     if commget == NULL: return MPI_COMM_NULL
  */
-  __pyx_t_3 = Cython_ImportFunction(__pyx_v_MPI, __pyx_k_PyMPIComm_Get, __pyx_k_MPI_Comm_PyObject); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = Cython_ImportFunction(__pyx_v_MPI, ((char *)"PyMPIComm_Get"), ((char *)"MPI_Comm *(PyObject *)")); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) __PYX_ERR(13, 42, __pyx_L1_error)
   __pyx_v_commget = ((__pyx_t_8petsc4py_5PETSc_PyMPICommGet *)__pyx_t_3);
 
   /* "PETSc/petscmpi.pxi":44
@@ -11789,7 +12407,7 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_Get(PyObject
  *     if ptr == NULL: return MPI_COMM_NULL
  *     return ptr[0]
  */
-  __pyx_t_5 = __pyx_v_commget(__pyx_v_comm); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_v_commget(__pyx_v_comm); if (unlikely(__pyx_t_5 == NULL)) __PYX_ERR(13, 45, __pyx_L1_error)
   __pyx_v_ptr = __pyx_t_5;
 
   /* "PETSc/petscmpi.pxi":46
@@ -11852,9 +12470,6 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_mpi4py_Comm_New(MPI_Comm
   PyObject *__pyx_t_2 = NULL;
   void *__pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mpi4py_Comm_New", 0);
 
   /* "PETSc/petscmpi.pxi":50
@@ -11864,15 +12479,15 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_mpi4py_Comm_New(MPI_Comm
  *     cdef PyMPICommNew *commnew = \
  *         <PyMPICommNew*> Cython_ImportFunction(
  */
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_n_s_MPI);
   __Pyx_GIVEREF(__pyx_n_s_MPI);
   PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_MPI);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_mpi4py, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_mpi4py, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_MPI = __pyx_t_1;
@@ -11886,7 +12501,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_mpi4py_Comm_New(MPI_Comm
  *         MPI, b"PyMPIComm_New", b"PyObject *(MPI_Comm)")
  *     if commnew == NULL: return None
  */
-  __pyx_t_3 = Cython_ImportFunction(__pyx_v_MPI, __pyx_k_PyMPIComm_New, __pyx_k_PyObject_MPI_Comm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = Cython_ImportFunction(__pyx_v_MPI, ((char *)"PyMPIComm_New"), ((char *)"PyObject *(MPI_Comm)")); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) __PYX_ERR(13, 52, __pyx_L1_error)
   __pyx_v_commnew = ((__pyx_t_8petsc4py_5PETSc_PyMPICommNew *)__pyx_t_3);
 
   /* "PETSc/petscmpi.pxi":54
@@ -11912,7 +12527,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_mpi4py_Comm_New(MPI_Comm
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_v_commnew(__pyx_v_comm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_v_commnew(__pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -12064,9 +12679,6 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_def_Comm(PyObject *__pyx_
   int __pyx_t_2;
   MPI_Comm __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("def_Comm", 0);
 
   /* "PETSc/petscmpi.pxi":69
@@ -12097,6 +12709,14 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_def_Comm(PyObject *__pyx_
  *         retv = (<Comm>comm).comm
  */
     __pyx_v_retv = __pyx_v_defv;
+
+    /* "PETSc/petscmpi.pxi":70
+ * cdef inline MPI_Comm def_Comm(object comm, MPI_Comm defv) except *:
+ *     cdef MPI_Comm retv = MPI_COMM_NULL
+ *     if comm is None:             # <<<<<<<<<<<<<<
+ *         retv = defv
+ *     elif isinstance(comm, Comm):
+ */
     goto __pyx_L3;
   }
 
@@ -12107,7 +12727,7 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_def_Comm(PyObject *__pyx_
  *         retv = (<Comm>comm).comm
  *     elif type(comm).__module__ == 'mpi4py.MPI':
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_comm, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_comm, __pyx_ptype_8petsc4py_5PETSc_Comm); 
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
@@ -12120,6 +12740,14 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_def_Comm(PyObject *__pyx_
  */
     __pyx_t_3 = ((struct PyPetscCommObject *)__pyx_v_comm)->comm;
     __pyx_v_retv = __pyx_t_3;
+
+    /* "PETSc/petscmpi.pxi":72
+ *     if comm is None:
+ *         retv = defv
+ *     elif isinstance(comm, Comm):             # <<<<<<<<<<<<<<
+ *         retv = (<Comm>comm).comm
+ *     elif type(comm).__module__ == 'mpi4py.MPI':
+ */
     goto __pyx_L3;
   }
 
@@ -12130,9 +12758,9 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_def_Comm(PyObject *__pyx_
  *         retv = mpi4py_Comm_Get(comm)
  *     else:
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_comm)), __pyx_n_s_module); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_comm)), __pyx_n_s_module); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_kp_s_mpi4py_MPI, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_kp_s_mpi4py_MPI, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(13, 74, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_1) {
 
@@ -12143,20 +12771,28 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_def_Comm(PyObject *__pyx_
  *     else:
  *         retv = (<Comm?>comm).comm
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_Get(__pyx_v_comm); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_Get(__pyx_v_comm); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 75, __pyx_L1_error)
     __pyx_v_retv = __pyx_t_3;
+
+    /* "PETSc/petscmpi.pxi":74
+ *     elif isinstance(comm, Comm):
+ *         retv = (<Comm>comm).comm
+ *     elif type(comm).__module__ == 'mpi4py.MPI':             # <<<<<<<<<<<<<<
+ *         retv = mpi4py_Comm_Get(comm)
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmpi.pxi":77
+  /* "PETSc/petscmpi.pxi":77
  *         retv = mpi4py_Comm_Get(comm)
  *     else:
  *         retv = (<Comm?>comm).comm             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-    if (!(likely(__Pyx_TypeTest(__pyx_v_comm, __pyx_ptype_8petsc4py_5PETSc_Comm)))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    if (!(likely(__Pyx_TypeTest(__pyx_v_comm, __pyx_ptype_8petsc4py_5PETSc_Comm)))) __PYX_ERR(13, 77, __pyx_L1_error)
     __pyx_t_3 = ((struct PyPetscCommObject *)__pyx_v_comm)->comm;
     __pyx_v_retv = __pyx_t_3;
   }
@@ -12204,9 +12840,6 @@ static CYTHON_INLINE struct PyPetscCommObject *__pyx_f_8petsc4py_5PETSc_new_Comm
   __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("new_Comm", 0);
 
   /* "PETSc/petscmpi.pxi":81
@@ -12216,7 +12849,7 @@ static CYTHON_INLINE struct PyPetscCommObject *__pyx_f_8petsc4py_5PETSc_new_Comm
  *     ob.comm = comm
  *     return ob
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -12281,9 +12914,6 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_comm_size(MPI_Comm __pyx_v_com
   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("comm_size", 0);
 
   /* "PETSc/petscmpi.pxi":88
@@ -12295,11 +12925,11 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_comm_size(MPI_Comm __pyx_v_com
  */
   __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 88, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[13]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(13, 88, __pyx_L1_error)
   }
 
   /* "PETSc/petscmpi.pxi":89
@@ -12318,7 +12948,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_comm_size(MPI_Comm __pyx_v_com
  *     return size
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(13, 90, __pyx_L1_error)
 
   /* "PETSc/petscmpi.pxi":91
  *     cdef int size = 0
@@ -12363,9 +12993,6 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_comm_rank(MPI_Comm __pyx_v_com
   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("comm_rank", 0);
 
   /* "PETSc/petscmpi.pxi":94
@@ -12377,11 +13004,11 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_comm_rank(MPI_Comm __pyx_v_com
  */
   __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 94, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[13]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(13, 94, __pyx_L1_error)
   }
 
   /* "PETSc/petscmpi.pxi":95
@@ -12400,7 +13027,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_comm_rank(MPI_Comm __pyx_v_com
  *     return rank
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(13, 96, __pyx_L1_error)
 
   /* "PETSc/petscmpi.pxi":97
  *     cdef int rank = 0
@@ -12430,7 +13057,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_comm_rank(MPI_Comm __pyx_v_com
   return __pyx_r;
 }
 
-/* "PETSc/petscsys.pxi":56
+/* "PETSc/petscsys.pxi":57
  * 
  * 
  * cdef inline int Sys_Sizes(             # <<<<<<<<<<<<<<
@@ -12458,12 +13085,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   PyObject *__pyx_t_9 = NULL;
   PyObject *(*__pyx_t_10)(PyObject *);
   int __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Sys_Sizes", 0);
 
-  /* "PETSc/petscsys.pxi":63
+  /* "PETSc/petscsys.pxi":64
  *     ) except -1:
  *     # get block size
  *     cdef PetscInt bs=PETSC_DECIDE, b=PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -12473,7 +13097,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_v_bs = PETSC_DECIDE;
   __pyx_v_b = PETSC_DECIDE;
 
-  /* "PETSc/petscsys.pxi":64
+  /* "PETSc/petscsys.pxi":65
  *     # get block size
  *     cdef PetscInt bs=PETSC_DECIDE, b=PETSC_DECIDE
  *     if bsize is not None: bs = b = asInt(bsize)             # <<<<<<<<<<<<<<
@@ -12483,14 +13107,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_1 = (__pyx_v_bsize != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(14, 65, __pyx_L1_error)
     __pyx_v_bs = __pyx_t_3;
     __pyx_v_b = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscsys.pxi":65
+  /* "PETSc/petscsys.pxi":66
  *     cdef PetscInt bs=PETSC_DECIDE, b=PETSC_DECIDE
  *     if bsize is not None: bs = b = asInt(bsize)
  *     if bs == PETSC_DECIDE: bs = 1             # <<<<<<<<<<<<<<
@@ -12500,11 +13122,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_2 = ((__pyx_v_bs == PETSC_DECIDE) != 0);
   if (__pyx_t_2) {
     __pyx_v_bs = 1;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscsys.pxi":67
+  /* "PETSc/petscsys.pxi":68
  *     if bs == PETSC_DECIDE: bs = 1
  *     # unpack and get local and global sizes
  *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -12514,7 +13134,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_v_n = PETSC_DECIDE;
   __pyx_v_N = PETSC_DECIDE;
 
-  /* "PETSc/petscsys.pxi":69
+  /* "PETSc/petscsys.pxi":70
  *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE
  *     cdef object on, oN
  *     try:             # <<<<<<<<<<<<<<
@@ -12522,13 +13142,15 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
  *     except (TypeError, ValueError):
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
     __Pyx_XGOTREF(__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_5);
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/petscsys.pxi":70
+      /* "PETSc/petscsys.pxi":71
  *     cdef object on, oN
  *     try:
  *         on, oN = size             # <<<<<<<<<<<<<<
@@ -12545,7 +13167,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[14]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __PYX_ERR(14, 71, __pyx_L5_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -12558,21 +13180,21 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
         __Pyx_INCREF(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         #else
-        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 71, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 71, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_8);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_9 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 71, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_9);
         __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
         index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L13_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
         index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L13_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(14, 71, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L14_unpacking_done;
@@ -12580,39 +13202,48 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[14]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __PYX_ERR(14, 71, __pyx_L5_error)
         __pyx_L14_unpacking_done:;
       }
       __pyx_v_on = __pyx_t_7;
       __pyx_t_7 = 0;
       __pyx_v_oN = __pyx_t_8;
       __pyx_t_8 = 0;
+
+      /* "PETSc/petscsys.pxi":70
+ *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE
+ *     cdef object on, oN
+ *     try:             # <<<<<<<<<<<<<<
+ *         on, oN = size
+ *     except (TypeError, ValueError):
+ */
     }
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L12_try_end;
     __pyx_L5_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscsys.pxi":71
+    /* "PETSc/petscsys.pxi":72
  *     try:
  *         on, oN = size
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
  *         on = None; oN = size
  *     if on is not None: n = asInt(on)
  */
-    __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_TypeError) || PyErr_ExceptionMatches(__pyx_builtin_ValueError);
+    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
     if (__pyx_t_11) {
       __Pyx_AddTraceback("petsc4py.PETSc.Sys_Sizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(14, 72, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "PETSc/petscsys.pxi":72
+      /* "PETSc/petscsys.pxi":73
  *         on, oN = size
  *     except (TypeError, ValueError):
  *         on = None; oN = size             # <<<<<<<<<<<<<<
@@ -12630,12 +13261,22 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     }
     goto __pyx_L7_except_error;
     __pyx_L7_except_error:;
+
+    /* "PETSc/petscsys.pxi":70
+ *     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_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
     goto __pyx_L1_error;
     __pyx_L6_exception_handled:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
@@ -12643,7 +13284,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     __pyx_L12_try_end:;
   }
 
-  /* "PETSc/petscsys.pxi":73
+  /* "PETSc/petscsys.pxi":74
  *     except (TypeError, ValueError):
  *         on = None; oN = size
  *     if on is not None: n = asInt(on)             # <<<<<<<<<<<<<<
@@ -12653,13 +13294,11 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_2 = (__pyx_v_on != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_on); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_on); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(14, 74, __pyx_L1_error)
     __pyx_v_n = __pyx_t_3;
-    goto __pyx_L17;
   }
-  __pyx_L17:;
 
-  /* "PETSc/petscsys.pxi":74
+  /* "PETSc/petscsys.pxi":75
  *         on = None; oN = size
  *     if on is not None: n = asInt(on)
  *     if oN is not None: N = asInt(oN)             # <<<<<<<<<<<<<<
@@ -12669,13 +13308,11 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_1 = (__pyx_v_oN != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_oN); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_oN); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(14, 75, __pyx_L1_error)
     __pyx_v_N = __pyx_t_3;
-    goto __pyx_L18;
   }
-  __pyx_L18:;
 
-  /* "PETSc/petscsys.pxi":76
+  /* "PETSc/petscsys.pxi":77
  *     if oN is not None: N = asInt(oN)
  *     # check block, local, and and global sizes
  *     if (bs < 1): raise ValueError(             # <<<<<<<<<<<<<<
@@ -12685,40 +13322,40 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_2 = ((__pyx_v_bs < 1) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscsys.pxi":77
+    /* "PETSc/petscsys.pxi":78
  *     # check block, local, and and global sizes
  *     if (bs < 1): raise ValueError(
  *         "block size %d must be positive" % toInt(bs))             # <<<<<<<<<<<<<<
  *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(
  *         "local and global sizes cannot be both 'DECIDE'")
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 78, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_block_size_d_must_be_positive, __pyx_t_9); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_block_size_d_must_be_positive, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 78, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "PETSc/petscsys.pxi":76
+    /* "PETSc/petscsys.pxi":77
  *     if oN is not None: N = asInt(oN)
  *     # check block, local, and and global sizes
  *     if (bs < 1): raise ValueError(             # <<<<<<<<<<<<<<
  *         "block size %d must be positive" % toInt(bs))
  *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(
  */
-    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 77, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
     __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 77, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_Raise(__pyx_t_7, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    {__pyx_filename = __pyx_f[14]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(14, 77, __pyx_L1_error)
   }
 
-  /* "PETSc/petscsys.pxi":78
+  /* "PETSc/petscsys.pxi":79
  *     if (bs < 1): raise ValueError(
  *         "block size %d must be positive" % toInt(bs))
  *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(             # <<<<<<<<<<<<<<
@@ -12735,14 +13372,14 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_2 = __pyx_t_1;
   __pyx_L21_bool_binop_done:;
   if (__pyx_t_2) {
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 79, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_Raise(__pyx_t_7, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    {__pyx_filename = __pyx_f[14]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(14, 79, __pyx_L1_error)
   }
 
-  /* "PETSc/petscsys.pxi":80
+  /* "PETSc/petscsys.pxi":81
  *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(
  *         "local and global sizes cannot be both 'DECIDE'")
  *     if (n > 0) and (n % bs): raise ValueError(             # <<<<<<<<<<<<<<
@@ -12760,18 +13397,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_L24_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscsys.pxi":82
+    /* "PETSc/petscsys.pxi":83
  *     if (n > 0) and (n % bs): raise ValueError(
  *         "local size %d not divisible by block size %d" %
  *         (toInt(n), toInt(bs)) )             # <<<<<<<<<<<<<<
  *     if (N > 0) and (N % bs): raise ValueError(
  *         "global size %d not divisible by block size %d" %
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 83, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 83, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 83, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
@@ -12780,38 +13417,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     __pyx_t_7 = 0;
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscsys.pxi":81
+    /* "PETSc/petscsys.pxi":82
  *         "local and global sizes cannot be both 'DECIDE'")
  *     if (n > 0) and (n % bs): raise ValueError(
  *         "local size %d not divisible by block size %d" %             # <<<<<<<<<<<<<<
  *         (toInt(n), toInt(bs)) )
  *     if (N > 0) and (N % bs): raise ValueError(
  */
-    __pyx_t_9 = __Pyx_PyString_Format(__pyx_kp_s_local_size_d_not_divisible_by_bl, __pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyString_Format(__pyx_kp_s_local_size_d_not_divisible_by_bl, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 82, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscsys.pxi":80
+    /* "PETSc/petscsys.pxi":81
  *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(
  *         "local and global sizes cannot be both 'DECIDE'")
  *     if (n > 0) and (n % bs): raise ValueError(             # <<<<<<<<<<<<<<
  *         "local size %d not divisible by block size %d" %
  *         (toInt(n), toInt(bs)) )
  */
-    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 81, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
     __pyx_t_9 = 0;
-    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 81, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_Raise(__pyx_t_9, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    {__pyx_filename = __pyx_f[14]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(14, 81, __pyx_L1_error)
   }
 
-  /* "PETSc/petscsys.pxi":83
+  /* "PETSc/petscsys.pxi":84
  *         "local size %d not divisible by block size %d" %
  *         (toInt(n), toInt(bs)) )
  *     if (N > 0) and (N % bs): raise ValueError(             # <<<<<<<<<<<<<<
@@ -12829,18 +13466,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_L27_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscsys.pxi":85
+    /* "PETSc/petscsys.pxi":86
  *     if (N > 0) and (N % bs): raise ValueError(
  *         "global size %d not divisible by block size %d" %
  *         (toInt(N), toInt(bs)) )             # <<<<<<<<<<<<<<
  *     # return result to the caller
  *     if _b != NULL: _b[0] = b
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9);
@@ -12849,38 +13486,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     __pyx_t_9 = 0;
     __pyx_t_8 = 0;
 
-    /* "PETSc/petscsys.pxi":84
+    /* "PETSc/petscsys.pxi":85
  *         (toInt(n), toInt(bs)) )
  *     if (N > 0) and (N % bs): raise ValueError(
  *         "global size %d not divisible by block size %d" %             # <<<<<<<<<<<<<<
  *         (toInt(N), toInt(bs)) )
  *     # return result to the caller
  */
-    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_global_size_d_not_divisible_by_b, __pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_global_size_d_not_divisible_by_b, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 85, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "PETSc/petscsys.pxi":83
+    /* "PETSc/petscsys.pxi":84
  *         "local size %d not divisible by block size %d" %
  *         (toInt(n), toInt(bs)) )
  *     if (N > 0) and (N % bs): raise ValueError(             # <<<<<<<<<<<<<<
  *         "global size %d not divisible by block size %d" %
  *         (toInt(N), toInt(bs)) )
  */
-    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 84, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);
     __pyx_t_8 = 0;
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 84, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_Raise(__pyx_t_8, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    {__pyx_filename = __pyx_f[14]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(14, 84, __pyx_L1_error)
   }
 
-  /* "PETSc/petscsys.pxi":87
+  /* "PETSc/petscsys.pxi":88
  *         (toInt(N), toInt(bs)) )
  *     # return result to the caller
  *     if _b != NULL: _b[0] = b             # <<<<<<<<<<<<<<
@@ -12890,11 +13527,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_2 = ((__pyx_v__b != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v__b[0]) = __pyx_v_b;
-    goto __pyx_L29;
   }
-  __pyx_L29:;
 
-  /* "PETSc/petscsys.pxi":88
+  /* "PETSc/petscsys.pxi":89
  *     # return result to the caller
  *     if _b != NULL: _b[0] = b
  *     if _n != NULL: _n[0] = n             # <<<<<<<<<<<<<<
@@ -12904,11 +13539,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_2 = ((__pyx_v__n != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v__n[0]) = __pyx_v_n;
-    goto __pyx_L30;
   }
-  __pyx_L30:;
 
-  /* "PETSc/petscsys.pxi":89
+  /* "PETSc/petscsys.pxi":90
  *     if _b != NULL: _b[0] = b
  *     if _n != NULL: _n[0] = n
  *     if _N != NULL: _N[0] = N             # <<<<<<<<<<<<<<
@@ -12918,11 +13551,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_t_2 = ((__pyx_v__N != NULL) != 0);
   if (__pyx_t_2) {
     (__pyx_v__N[0]) = __pyx_v_N;
-    goto __pyx_L31;
   }
-  __pyx_L31:;
 
-  /* "PETSc/petscsys.pxi":90
+  /* "PETSc/petscsys.pxi":91
  *     if _n != NULL: _n[0] = n
  *     if _N != NULL: _N[0] = N
  *     return 0             # <<<<<<<<<<<<<<
@@ -12932,7 +13563,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsys.pxi":56
+  /* "PETSc/petscsys.pxi":57
  * 
  * 
  * cdef inline int Sys_Sizes(             # <<<<<<<<<<<<<<
@@ -12954,7 +13585,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   return __pyx_r;
 }
 
-/* "PETSc/petscsys.pxi":92
+/* "PETSc/petscsys.pxi":93
  *     return 0
  * 
  * cdef inline int Sys_Layout(             # <<<<<<<<<<<<<<
@@ -12969,12 +13600,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
   __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("Sys_Layout", 0);
 
-  /* "PETSc/petscsys.pxi":98
+  /* "PETSc/petscsys.pxi":99
  *     PetscInt *_N,
  *     ) except -1:
  *     cdef PetscInt n = _n[0]             # <<<<<<<<<<<<<<
@@ -12983,7 +13611,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
  */
   __pyx_v_n = (__pyx_v__n[0]);
 
-  /* "PETSc/petscsys.pxi":99
+  /* "PETSc/petscsys.pxi":100
  *     ) except -1:
  *     cdef PetscInt n = _n[0]
  *     cdef PetscInt N = _N[0]             # <<<<<<<<<<<<<<
@@ -12992,7 +13620,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
  */
   __pyx_v_N = (__pyx_v__N[0]);
 
-  /* "PETSc/petscsys.pxi":100
+  /* "PETSc/petscsys.pxi":101
  *     cdef PetscInt n = _n[0]
  *     cdef PetscInt N = _N[0]
  *     if bs < 0: bs = 1             # <<<<<<<<<<<<<<
@@ -13002,11 +13630,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
   __pyx_t_1 = ((__pyx_v_bs < 0) != 0);
   if (__pyx_t_1) {
     __pyx_v_bs = 1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscsys.pxi":101
+  /* "PETSc/petscsys.pxi":102
  *     cdef PetscInt N = _N[0]
  *     if bs < 0: bs = 1
  *     if n  > 0: n = n // bs             # <<<<<<<<<<<<<<
@@ -13016,11 +13642,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
   __pyx_t_1 = ((__pyx_v_n > 0) != 0);
   if (__pyx_t_1) {
     __pyx_v_n = (__pyx_v_n / __pyx_v_bs);
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscsys.pxi":102
+  /* "PETSc/petscsys.pxi":103
  *     if bs < 0: bs = 1
  *     if n  > 0: n = n // bs
  *     if N  > 0: N = N // bs             # <<<<<<<<<<<<<<
@@ -13030,20 +13654,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
   __pyx_t_1 = ((__pyx_v_N > 0) != 0);
   if (__pyx_t_1) {
     __pyx_v_N = (__pyx_v_N / __pyx_v_bs);
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/petscsys.pxi":103
+  /* "PETSc/petscsys.pxi":104
  *     if n  > 0: n = n // bs
  *     if N  > 0: N = N // bs
  *     CHKERR( PetscSplitOwnership(comm, &n, &N) )             # <<<<<<<<<<<<<<
  *     _n[0] = n * bs
  *     _N[0] = N * bs
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSplitOwnership(__pyx_v_comm, (&__pyx_v_n), (&__pyx_v_N))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSplitOwnership(__pyx_v_comm, (&__pyx_v_n), (&__pyx_v_N))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 104, __pyx_L1_error)
 
-  /* "PETSc/petscsys.pxi":104
+  /* "PETSc/petscsys.pxi":105
  *     if N  > 0: N = N // bs
  *     CHKERR( PetscSplitOwnership(comm, &n, &N) )
  *     _n[0] = n * bs             # <<<<<<<<<<<<<<
@@ -13052,7 +13674,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
  */
   (__pyx_v__n[0]) = (__pyx_v_n * __pyx_v_bs);
 
-  /* "PETSc/petscsys.pxi":105
+  /* "PETSc/petscsys.pxi":106
  *     CHKERR( PetscSplitOwnership(comm, &n, &N) )
  *     _n[0] = n * bs
  *     _N[0] = N * bs             # <<<<<<<<<<<<<<
@@ -13060,7 +13682,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
  */
   (__pyx_v__N[0]) = (__pyx_v_N * __pyx_v_bs);
 
-  /* "PETSc/petscsys.pxi":106
+  /* "PETSc/petscsys.pxi":107
  *     _n[0] = n * bs
  *     _N[0] = N * bs
  *     return 0             # <<<<<<<<<<<<<<
@@ -13068,7 +13690,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsys.pxi":92
+  /* "PETSc/petscsys.pxi":93
  *     return 0
  * 
  * cdef inline int Sys_Layout(             # <<<<<<<<<<<<<<
@@ -13103,9 +13725,6 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_event_args2objs(PyObject *__py
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("event_args2objs", 0);
 
   /* "PETSc/petsclog.pxi":63
@@ -13128,7 +13747,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_event_args2objs(PyObject *__py
  *         if n > 4: n = 4
  */
   __pyx_v_i = 0;
-  __pyx_t_1 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 64, __pyx_L1_error)
   __pyx_v_n = __pyx_t_1;
 
   /* "PETSc/petsclog.pxi":65
@@ -13151,9 +13770,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_event_args2objs(PyObject *__py
   __pyx_t_2 = ((__pyx_v_n > 4) != 0);
   if (__pyx_t_2) {
     __pyx_v_n = 4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/petsclog.pxi":67
  *         cdef Object tmp = None
@@ -13172,9 +13789,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_event_args2objs(PyObject *__py
  *             if tmp is not None:
  *                 o[i] = tmp.obj[0]
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_args, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_args, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 68, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Object))))) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(15, 68, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_tmp, ((struct PyPetscObjectObject *)__pyx_t_3));
     __pyx_t_3 = 0;
 
@@ -13196,9 +13813,15 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_event_args2objs(PyObject *__py
  *         return 0
  */
       (__pyx_v_o[__pyx_v_i]) = (__pyx_v_tmp->obj[0]);
-      goto __pyx_L6;
+
+      /* "PETSc/petsclog.pxi":69
+ *         for 0 <= i < n:
+ *             tmp = args[i]
+ *             if tmp is not None:             # <<<<<<<<<<<<<<
+ *                 o[i] = tmp.obj[0]
+ *         return 0
+ */
     }
-    __pyx_L6:;
   }
 
   /* "PETSc/petsclog.pxi":71
@@ -13598,9 +14221,15 @@ static int __pyx_f_8petsc4py_5PETSc_PetscDelPyDict(void *__pyx_v_ptr) {
  * 
  */
     __pyx_f_8petsc4py_5PETSc_Py_DecRef(((PyObject *)__pyx_v_ptr));
-    goto __pyx_L3;
+
+    /* "PETSc/petscobj.pxi":82
+ * 
+ * cdef int PetscDelPyDict(void* ptr) nogil:
+ *     if ptr != NULL and Py_IsInitialized():             # <<<<<<<<<<<<<<
+ *         Py_DecRef(<PyObject*>ptr)
+ *     return 0
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/petscobj.pxi":84
  *     if ptr != NULL and Py_IsInitialized():
@@ -13638,9 +14267,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PetscGetPyDict", 0);
 
   /* "PETSc/petscobj.pxi":87
@@ -13664,6 +14290,14 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
     __Pyx_INCREF(((PyObject *)__pyx_v_obj->python_context));
     __pyx_r = ((PyObject *)__pyx_v_obj->python_context);
     goto __pyx_L0;
+
+    /* "PETSc/petscobj.pxi":87
+ * 
+ * cdef object PetscGetPyDict(PetscObject obj, bint create):
+ *     if obj.python_context != NULL:             # <<<<<<<<<<<<<<
+ *         return <object>obj.python_context
+ *     if create:
+ */
   }
 
   /* "PETSc/petscobj.pxi":89
@@ -13692,7 +14326,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
  *         return <object>obj.python_context
  *     return None
  */
-    __pyx_t_2 = PyDict_New(); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyDict_New(); if (unlikely(__pyx_t_2 == NULL)) __PYX_ERR(16, 91, __pyx_L1_error)
     __pyx_v_obj->python_context = ((void *)__pyx_t_2);
 
     /* "PETSc/petscobj.pxi":92
@@ -13706,6 +14340,14 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
     __Pyx_INCREF(((PyObject *)__pyx_v_obj->python_context));
     __pyx_r = ((PyObject *)__pyx_v_obj->python_context);
     goto __pyx_L0;
+
+    /* "PETSc/petscobj.pxi":89
+ *     if obj.python_context != NULL:
+ *         return <object>obj.python_context
+ *     if create:             # <<<<<<<<<<<<<<
+ *         obj.python_destroy = PetscDelPyDict
+ *         obj.python_context = <void*>PyDict_New()
+ */
   }
 
   /* "PETSc/petscobj.pxi":93
@@ -13758,9 +14400,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
   int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PetscGetPyObj", 0);
 
   /* "PETSc/petscobj.pxi":96
@@ -13770,7 +14409,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
  *     if dct is None: return None
  *     cdef object key = bytes2str(name)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_dct = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -13798,7 +14437,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
  *     cdef PyObject *d = <PyObject*>dct
  *     cdef PyObject *k = <PyObject*>key
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 98, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_key = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -13837,7 +14476,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
  *     if v != NULL: return <object>v
  *     return None
  */
-  __pyx_t_4 = PyDict_GetItem(__pyx_v_d, __pyx_v_k); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_GetItem(__pyx_v_d, __pyx_v_k); if (unlikely(PyErr_Occurred())) __PYX_ERR(16, 102, __pyx_L1_error)
   __pyx_v_v = __pyx_t_4;
 
   /* "PETSc/petscobj.pxi":103
@@ -13908,9 +14547,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PetscSetPyObj", 0);
 
   /* "PETSc/petscobj.pxi":108
@@ -13931,22 +14567,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  *     else:
  *         dct = PetscGetPyDict(o, False)
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 109, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_dct = __pyx_t_3;
     __pyx_t_3 = 0;
+
+    /* "PETSc/petscobj.pxi":108
+ * cdef object PetscSetPyObj(PetscObject o, char name[], object p):
+ *     cdef object dct
+ *     if p is not None:             # <<<<<<<<<<<<<<
+ *         dct = PetscGetPyDict(o, True)
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscobj.pxi":111
+  /* "PETSc/petscobj.pxi":111
  *         dct = PetscGetPyDict(o, True)
  *     else:
  *         dct = PetscGetPyDict(o, False)             # <<<<<<<<<<<<<<
  *         if dct is None: return None
  *     cdef str key = bytes2str(name)
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 111, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_dct = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -13976,9 +14620,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  *     cdef PyObject *d = <PyObject*>dct
  *     cdef PyObject *k = <PyObject*>key
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(16, 113, __pyx_L1_error)
   __pyx_v_key = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
@@ -14016,7 +14660,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  *     if v == <PyObject*>None:
  *         PyDict_DelItem(d, k)
  */
-  __pyx_t_4 = PyDict_SetItem(__pyx_v_d, __pyx_v_k, __pyx_v_v); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_SetItem(__pyx_v_d, __pyx_v_k, __pyx_v_v); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 117, __pyx_L1_error)
 
   /* "PETSc/petscobj.pxi":118
  *     cdef PyObject *v = <PyObject*>p
@@ -14035,10 +14679,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  *     return None
  * 
  */
-    __pyx_t_4 = PyDict_DelItem(__pyx_v_d, __pyx_v_k); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    __pyx_t_4 = PyDict_DelItem(__pyx_v_d, __pyx_v_k); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 119, __pyx_L1_error)
+
+    /* "PETSc/petscobj.pxi":118
+ *     cdef PyObject *v = <PyObject*>p
+ *     PyDict_SetItem(d, k, v)
+ *     if v == <PyObject*>None:             # <<<<<<<<<<<<<<
+ *         PyDict_DelItem(d, k)
+ *     return None
+ */
   }
-  __pyx_L5:;
 
   /* "PETSc/petscobj.pxi":120
  *     if v == <PyObject*>None:
@@ -14115,16 +14765,13 @@ static CYTHON_INLINE long __pyx_f_8petsc4py_5PETSc_Object_toFortran(PetscObject
  *     if obj == NULL: return DM
  */
 
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm) {
+static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm) {
   PetscObject __pyx_v_obj;
   PetscBool __pyx_v_match;
-  PyObject *__pyx_r = NULL;
+  PyTypeObject *__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("subtype_DM", 0);
 
   /* "PETSc/petscobj.pxi":133
@@ -14146,8 +14793,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
   __pyx_t_1 = ((__pyx_v_obj == NULL) != 0);
   if (__pyx_t_1) {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DM)));
-    __pyx_r = ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DM);
+    __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM));
+    __pyx_r = __pyx_ptype_8petsc4py_5PETSc_DM;
     goto __pyx_L0;
   }
 
@@ -14167,7 +14814,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
  *     if match == PETSC_TRUE: return DMDA
  *     CHKERR( PetscObjectTypeCompare(obj, b"plex", &match) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, __pyx_k_da, (&__pyx_v_match))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, ((char *)"da"), (&__pyx_v_match))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 137, __pyx_L1_error)
 
   /* "PETSc/petscobj.pxi":138
  *     cdef PetscBool match = PETSC_FALSE
@@ -14179,8 +14826,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
   __pyx_t_1 = ((__pyx_v_match == PETSC_TRUE) != 0);
   if (__pyx_t_1) {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMDA)));
-    __pyx_r = ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMDA);
+    __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA));
+    __pyx_r = __pyx_ptype_8petsc4py_5PETSc_DMDA;
     goto __pyx_L0;
   }
 
@@ -14191,7 +14838,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
  *     if match == PETSC_TRUE: return DMPlex
  *     CHKERR( PetscObjectTypeCompare(obj, b"composite", &match) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, __pyx_k_plex, (&__pyx_v_match))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, ((char *)"plex"), (&__pyx_v_match))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 139, __pyx_L1_error)
 
   /* "PETSc/petscobj.pxi":140
  *     if match == PETSC_TRUE: return DMDA
@@ -14203,8 +14850,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
   __pyx_t_1 = ((__pyx_v_match == PETSC_TRUE) != 0);
   if (__pyx_t_1) {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMPlex)));
-    __pyx_r = ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMPlex);
+    __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMPlex));
+    __pyx_r = __pyx_ptype_8petsc4py_5PETSc_DMPlex;
     goto __pyx_L0;
   }
 
@@ -14215,7 +14862,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
  *     if match == PETSC_TRUE: return DMComposite
  *     CHKERR( PetscObjectTypeCompare(obj, b"shell", &match) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, __pyx_k_composite, (&__pyx_v_match))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, ((char *)"composite"), (&__pyx_v_match))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 141, __pyx_L1_error)
 
   /* "PETSc/petscobj.pxi":142
  *     if match == PETSC_TRUE: return DMPlex
@@ -14227,8 +14874,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
   __pyx_t_1 = ((__pyx_v_match == PETSC_TRUE) != 0);
   if (__pyx_t_1) {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMComposite)));
-    __pyx_r = ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMComposite);
+    __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMComposite));
+    __pyx_r = __pyx_ptype_8petsc4py_5PETSc_DMComposite;
     goto __pyx_L0;
   }
 
@@ -14239,7 +14886,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
  *     if match == PETSC_TRUE: return DMShell
  *     # ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, __pyx_k_shell, (&__pyx_v_match))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, ((char *)"shell"), (&__pyx_v_match))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 143, __pyx_L1_error)
 
   /* "PETSc/petscobj.pxi":144
  *     if match == PETSC_TRUE: return DMComposite
@@ -14251,8 +14898,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
   __pyx_t_1 = ((__pyx_v_match == PETSC_TRUE) != 0);
   if (__pyx_t_1) {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMShell)));
-    __pyx_r = ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMShell);
+    __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMShell));
+    __pyx_r = __pyx_ptype_8petsc4py_5PETSc_DMShell;
     goto __pyx_L0;
   }
 
@@ -14264,8 +14911,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
  * cdef inline type subtype_Object(PetscObject obj):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DM)));
-  __pyx_r = ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DM);
+  __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM));
+  __pyx_r = __pyx_ptype_8petsc4py_5PETSc_DM;
   goto __pyx_L0;
 
   /* "PETSc/petscobj.pxi":132
@@ -14281,7 +14928,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
   __Pyx_AddTraceback("petsc4py.PETSc.subtype_DM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_XGIVEREF((PyObject *)__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
@@ -14294,17 +14941,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_v_dm
  *     if obj == NULL: return klass
  */
 
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(PetscObject __pyx_v_obj) {
-  PyObject *__pyx_v_klass = 0;
+static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(PetscObject __pyx_v_obj) {
+  PyTypeObject *__pyx_v_klass = 0;
   PetscClassId __pyx_v_classid;
-  PyObject *__pyx_r = NULL;
+  PyTypeObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __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("subtype_Object", 0);
 
   /* "PETSc/petscobj.pxi":149
@@ -14314,8 +14958,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(PetscObje
  *     if obj == NULL: return klass
  *     cdef PetscClassId classid = 0
  */
-  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object)));
-  __pyx_v_klass = ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object);
+  __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Object));
+  __pyx_v_klass = __pyx_ptype_8petsc4py_5PETSc_Object;
 
   /* "PETSc/petscobj.pxi":150
  * cdef inline type subtype_Object(PetscObject obj):
@@ -14348,7 +14992,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(PetscObje
  *     if classid == PETSC_DM_CLASSID:
  *         klass = subtype_DM(<PetscDM>obj)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetClassId(__pyx_v_obj, (&__pyx_v_classid))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetClassId(__pyx_v_obj, (&__pyx_v_classid))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 152, __pyx_L1_error)
 
   /* "PETSc/petscobj.pxi":153
  *     cdef PetscClassId classid = 0
@@ -14367,24 +15011,32 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(PetscObje
  *     else:
  *         klass = PyPetscType_Lookup(classid)
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(((DM)__pyx_v_obj))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(((DM)__pyx_v_obj))); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 154, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF_SET(__pyx_v_klass, ((PyObject*)__pyx_t_3));
+    __Pyx_DECREF_SET(__pyx_v_klass, ((PyTypeObject*)__pyx_t_3));
     __pyx_t_3 = 0;
+
+    /* "PETSc/petscobj.pxi":153
+ *     cdef PetscClassId classid = 0
+ *     CHKERR( PetscObjectGetClassId(obj,&classid) )
+ *     if classid == PETSC_DM_CLASSID:             # <<<<<<<<<<<<<<
+ *         klass = subtype_DM(<PetscDM>obj)
+ *     else:
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/petscobj.pxi":156
+  /* "PETSc/petscobj.pxi":156
  *         klass = subtype_DM(<PetscDM>obj)
  *     else:
  *         klass = PyPetscType_Lookup(classid)             # <<<<<<<<<<<<<<
  *     return klass
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(__pyx_v_classid)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(__pyx_v_classid)); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF_SET(__pyx_v_klass, ((PyObject*)__pyx_t_3));
+    __Pyx_DECREF_SET(__pyx_v_klass, ((PyTypeObject*)__pyx_t_3));
     __pyx_t_3 = 0;
   }
   __pyx_L4:;
@@ -14416,12 +15068,12 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(PetscObje
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_klass);
-  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_XGIVEREF((PyObject *)__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscvwr.pxi":118
+/* "PETSc/petscvwr.pxi":119
  * # ---
  * 
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):             # <<<<<<<<<<<<<<
@@ -14435,12 +15087,9 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
   int __pyx_t_1;
   int __pyx_t_2;
   PetscFileMode __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("filemode", 0);
 
-  /* "PETSc/petscvwr.pxi":119
+  /* "PETSc/petscvwr.pxi":120
  * 
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):
  *     if mode is None:             # <<<<<<<<<<<<<<
@@ -14451,7 +15100,7 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvwr.pxi":120
+    /* "PETSc/petscvwr.pxi":121
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):
  *     if mode is None:
  *         return PETSC_FILE_MODE_READ             # <<<<<<<<<<<<<<
@@ -14460,9 +15109,17 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
  */
     __pyx_r = FILE_MODE_READ;
     goto __pyx_L0;
+
+    /* "PETSc/petscvwr.pxi":120
+ * 
+ * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):
+ *     if mode is None:             # <<<<<<<<<<<<<<
+ *         return PETSC_FILE_MODE_READ
+ *     if isinstance(mode, str):
+ */
   }
 
-  /* "PETSc/petscvwr.pxi":121
+  /* "PETSc/petscvwr.pxi":122
  *     if mode is None:
  *         return PETSC_FILE_MODE_READ
  *     if isinstance(mode, str):             # <<<<<<<<<<<<<<
@@ -14473,135 +15130,141 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvwr.pxi":122
+    /* "PETSc/petscvwr.pxi":123
  *         return PETSC_FILE_MODE_READ
  *     if isinstance(mode, str):
  *         if   mode == 'r'  : return PETSC_FILE_MODE_READ             # <<<<<<<<<<<<<<
  *         elif mode == 'w'  : return PETSC_FILE_MODE_WRITE
  *         elif mode == 'a'  : return PETSC_FILE_MODE_APPEND
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 123, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_READ;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":123
+    /* "PETSc/petscvwr.pxi":124
  *     if isinstance(mode, str):
  *         if   mode == 'r'  : return PETSC_FILE_MODE_READ
  *         elif mode == 'w'  : return PETSC_FILE_MODE_WRITE             # <<<<<<<<<<<<<<
  *         elif mode == 'a'  : return PETSC_FILE_MODE_APPEND
  *         elif mode == 'r+' : return PETSC_FILE_MODE_UPDATE
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_w, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_w, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 124, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_WRITE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":124
+    /* "PETSc/petscvwr.pxi":125
  *         if   mode == 'r'  : return PETSC_FILE_MODE_READ
  *         elif mode == 'w'  : return PETSC_FILE_MODE_WRITE
  *         elif mode == 'a'  : return PETSC_FILE_MODE_APPEND             # <<<<<<<<<<<<<<
  *         elif mode == 'r+' : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'w+' : return PETSC_FILE_MODE_UPDATE
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_a, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_a, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 125, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_APPEND;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":125
+    /* "PETSc/petscvwr.pxi":126
  *         elif mode == 'w'  : return PETSC_FILE_MODE_WRITE
  *         elif mode == 'a'  : return PETSC_FILE_MODE_APPEND
  *         elif mode == 'r+' : return PETSC_FILE_MODE_UPDATE             # <<<<<<<<<<<<<<
  *         elif mode == 'w+' : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'a+' : return PETSC_FILE_MODE_APPEND_UPDATE
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_kp_s_r_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_kp_s_r_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 126, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":126
+    /* "PETSc/petscvwr.pxi":127
  *         elif mode == 'a'  : return PETSC_FILE_MODE_APPEND
  *         elif mode == 'r+' : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'w+' : return PETSC_FILE_MODE_UPDATE             # <<<<<<<<<<<<<<
  *         elif mode == 'a+' : return PETSC_FILE_MODE_APPEND_UPDATE
  *         elif mode == 'u'  : return PETSC_FILE_MODE_UPDATE
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_kp_s_w_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_kp_s_w_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 127, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":127
+    /* "PETSc/petscvwr.pxi":128
  *         elif mode == 'r+' : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'w+' : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'a+' : return PETSC_FILE_MODE_APPEND_UPDATE             # <<<<<<<<<<<<<<
  *         elif mode == 'u'  : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'au' : return PETSC_FILE_MODE_APPEND_UPDATE
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_kp_s_a_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_kp_s_a_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 128, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_APPEND_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":128
+    /* "PETSc/petscvwr.pxi":129
  *         elif mode == 'w+' : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'a+' : return PETSC_FILE_MODE_APPEND_UPDATE
  *         elif mode == 'u'  : return PETSC_FILE_MODE_UPDATE             # <<<<<<<<<<<<<<
  *         elif mode == 'au' : return PETSC_FILE_MODE_APPEND_UPDATE
  *         elif mode == 'ua' : return PETSC_FILE_MODE_APPEND_UPDATE
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_u, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_u, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 129, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":129
+    /* "PETSc/petscvwr.pxi":130
  *         elif mode == 'a+' : return PETSC_FILE_MODE_APPEND_UPDATE
  *         elif mode == 'u'  : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'au' : return PETSC_FILE_MODE_APPEND_UPDATE             # <<<<<<<<<<<<<<
  *         elif mode == 'ua' : return PETSC_FILE_MODE_APPEND_UPDATE
  *     return mode
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_au, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_au, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 130, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_APPEND_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":130
+    /* "PETSc/petscvwr.pxi":131
  *         elif mode == 'u'  : return PETSC_FILE_MODE_UPDATE
  *         elif mode == 'au' : return PETSC_FILE_MODE_APPEND_UPDATE
  *         elif mode == 'ua' : return PETSC_FILE_MODE_APPEND_UPDATE             # <<<<<<<<<<<<<<
  *     return mode
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_ua, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_ua, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(17, 131, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_APPEND_UPDATE;
       goto __pyx_L0;
     }
-    goto __pyx_L4;
+
+    /* "PETSc/petscvwr.pxi":122
+ *     if mode is None:
+ *         return PETSC_FILE_MODE_READ
+ *     if isinstance(mode, str):             # <<<<<<<<<<<<<<
+ *         if   mode == 'r'  : return PETSC_FILE_MODE_READ
+ *         elif mode == 'w'  : return PETSC_FILE_MODE_WRITE
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscvwr.pxi":131
+  /* "PETSc/petscvwr.pxi":132
  *         elif mode == 'au' : return PETSC_FILE_MODE_APPEND_UPDATE
  *         elif mode == 'ua' : return PETSC_FILE_MODE_APPEND_UPDATE
  *     return mode             # <<<<<<<<<<<<<<
  */
-  __pyx_t_3 = ((PetscFileMode)PyInt_AsLong(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PetscFileMode)__Pyx_PyInt_As_PetscFileMode(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(17, 132, __pyx_L1_error)
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "PETSc/petscvwr.pxi":118
+  /* "PETSc/petscvwr.pxi":119
  * # ---
  * 
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):             # <<<<<<<<<<<<<<
@@ -14612,7 +15275,7 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.filemode", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((PetscFileMode)-1);
+  __pyx_r = ((PetscFileMode)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -14632,9 +15295,6 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS
   __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_IS", 0);
 
   /* "PETSc/petscis.pxi":92
@@ -14644,7 +15304,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS
  *     ob.iset = iset
  *     PetscINCREF(ob.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 92, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -14717,9 +15377,6 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
   __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_LGMap", 0);
 
   /* "PETSc/petscis.pxi":98
@@ -14729,7 +15386,7 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
  *     ob.lgm = lgm
  *     PetscINCREF(ob.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_LGMap)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 98, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -14800,9 +15457,6 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
 static int __pyx_pw_8petsc4py_5PETSc_10_IS_buffer_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static int __pyx_pw_8petsc4py_5PETSc_10_IS_buffer_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
@@ -14824,7 +15478,7 @@ static int __pyx_pw_8petsc4py_5PETSc_10_IS_buffer_1__cinit__(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(4, 120, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -14835,13 +15489,13 @@ static int __pyx_pw_8petsc4py_5PETSc_10_IS_buffer_1__cinit__(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 120, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._IS_buffer.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(4, 120, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(((struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
@@ -14859,9 +15513,6 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
   __Pyx_RefNannyDeclarations
   IS __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
   /* "PETSc/petscis.pxi":121
@@ -14881,7 +15532,7 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
  *         self.iset = i
  *         self.size = 0
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&__pyx_v_i)))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&__pyx_v_i)))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(4, 122, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":123
  *         cdef PetscIS i = iset.iset
@@ -14962,9 +15613,6 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
   /* "PETSc/petscis.pxi":129
@@ -14992,10 +15640,16 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj
  *         CHKERR( ISDestroy(&self.iset) )
  * 
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_self->data))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_self->data))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(4, 130, __pyx_L1_error)
+
+    /* "PETSc/petscis.pxi":129
+ * 
+ *     def __dealloc__(self):
+ *         if self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( ISRestoreIndices(self.iset, &self.data) )
+ *         CHKERR( ISDestroy(&self.iset) )
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/petscis.pxi":131
  *         if self.hasarray and self.iset != NULL:
@@ -15004,7 +15658,7 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj
  * 
  *     #
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&__pyx_v_self->iset))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&__pyx_v_self->iset))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(4, 131, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":128
  *         self.hasarray = 0
@@ -15036,9 +15690,6 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("acquire", 0);
 
   /* "PETSc/petscis.pxi":136
@@ -15066,7 +15717,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
  *             CHKERR( ISGetIndices(self.iset, &self.data) )
  *             self.hasarray = 1
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_self->size))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_self->size))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(4, 137, __pyx_L1_error)
 
     /* "PETSc/petscis.pxi":138
  *         if not self.hasarray and self.iset != NULL:
@@ -15075,7 +15726,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
  *             self.hasarray = 1
  *         return 0
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetIndices(__pyx_v_self->iset, (&__pyx_v_self->data))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetIndices(__pyx_v_self->iset, (&__pyx_v_self->data))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(4, 138, __pyx_L1_error)
 
     /* "PETSc/petscis.pxi":139
  *             CHKERR( ISGetLocalSize(self.iset, &self.size) )
@@ -15085,9 +15736,15 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
  * 
  */
     __pyx_v_self->hasarray = 1;
-    goto __pyx_L3;
+
+    /* "PETSc/petscis.pxi":136
+ * 
+ *     cdef int acquire(self) except -1:
+ *         if not self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( ISGetLocalSize(self.iset, &self.size) )
+ *             CHKERR( ISGetIndices(self.iset, &self.data) )
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/petscis.pxi":140
  *             CHKERR( ISGetIndices(self.iset, &self.data) )
@@ -15130,9 +15787,6 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("release", 0);
 
   /* "PETSc/petscis.pxi":143
@@ -15169,7 +15823,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
  *             self.hasarray = 0
  *             self.data = NULL
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_self->data))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_self->data))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(4, 145, __pyx_L1_error)
 
     /* "PETSc/petscis.pxi":146
  *             self.size = 0
@@ -15188,9 +15842,15 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
  * 
  */
     __pyx_v_self->data = NULL;
-    goto __pyx_L3;
+
+    /* "PETSc/petscis.pxi":143
+ * 
+ *     cdef int release(self) except -1:
+ *         if self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
+ *             self.size = 0
+ *             CHKERR( ISRestoreIndices(self.iset, &self.data) )
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/petscis.pxi":148
  *             self.hasarray = 0
@@ -15231,9 +15891,6 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquirebuffer(struct __pyx_obj_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("acquirebuffer", 0);
 
   /* "PETSc/petscis.pxi":153
@@ -15243,7 +15900,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquirebuffer(struct __pyx_obj_
  *         PyPetscBuffer_FillInfo(view, <void*>self.data, self.size,
  *                                c'i', 1, flags)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 153, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":154
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:
@@ -15252,7 +15909,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquirebuffer(struct __pyx_obj_
  *                                c'i', 1, flags)
  *         view.obj = self
  */
-  __pyx_t_1 = PyPetscBuffer_FillInfo(__pyx_v_view, ((void *)__pyx_v_self->data), __pyx_v_self->size, 'i', 1, __pyx_v_flags); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyPetscBuffer_FillInfo(__pyx_v_view, ((void *)__pyx_v_self->data), __pyx_v_self->size, 'i', 1, __pyx_v_flags); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 154, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":156
  *         PyPetscBuffer_FillInfo(view, <void*>self.data, self.size,
@@ -15306,9 +15963,6 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_releasebuffer(struct __pyx_obj_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("releasebuffer", 0);
 
   /* "PETSc/petscis.pxi":160
@@ -15327,7 +15981,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_releasebuffer(struct __pyx_obj_
  *         return 0
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 161, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":162
  *         PyPetscBuffer_Release(view)
@@ -15381,9 +16035,6 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_4__getbuffer__(struct __pyx_ob
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getbuffer__", 0);
   if (__pyx_v_view != NULL) {
     __pyx_v_view->obj = Py_None; __Pyx_INCREF(Py_None);
@@ -15397,7 +16048,7 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_4__getbuffer__(struct __pyx_ob
  * 
  *     def __releasebuffer__(self, Py_buffer *view):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquirebuffer(__pyx_v_self, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquirebuffer(__pyx_v_self, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 165, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":164
  *         return 0
@@ -15450,9 +16101,6 @@ static CYTHON_UNUSED void __pyx_pw_8petsc4py_5PETSc_10_IS_buffer_7__releasebuffe
 static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_6__releasebuffer__(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_self, Py_buffer *__pyx_v_view) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__releasebuffer__", 0);
 
   /* "PETSc/petscis.pxi":168
@@ -15462,7 +16110,7 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_6__releasebuffer__(struct __p
  * 
  *     # 'with' statement (PEP 343)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->releasebuffer(__pyx_v_self, __pyx_v_view); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->releasebuffer(__pyx_v_self, __pyx_v_view); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 168, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":167
  *         self.acquirebuffer(view, flags)
@@ -15493,9 +16141,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_enter(struct __pyx_obj_8p
   __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("enter", 0);
 
   /* "PETSc/petscis.pxi":173
@@ -15505,7 +16150,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_enter(struct __pyx_obj_8p
  *         return asarray(self)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 173, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":174
  *     cdef object enter(self):
@@ -15515,7 +16160,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_enter(struct __pyx_obj_8p
  *     cdef object exit(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 174, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -15552,9 +16197,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_exit(struct __pyx_obj_8pe
   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("exit", 0);
 
   /* "PETSc/petscis.pxi":177
@@ -15564,7 +16206,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_exit(struct __pyx_obj_8pe
  *         return None
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 177, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":178
  *     cdef object exit(self):
@@ -15625,9 +16267,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_8__enter__(struct __pyx_
   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("__enter__", 0);
 
   /* "PETSc/petscis.pxi":181
@@ -15638,7 +16277,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_8__enter__(struct __pyx_
  *     def __exit__(self, *exc):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->enter(__pyx_v_self); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->enter(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -15694,9 +16333,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_10__exit__(struct __pyx_
   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("__exit__", 0);
 
   /* "PETSc/petscis.pxi":184
@@ -15707,7 +16343,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_10__exit__(struct __pyx_
  *     # buffer interface (legacy)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->exit(__pyx_v_self); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->exit(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -15747,9 +16383,6 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
   int __pyx_t_1;
   int __pyx_t_2;
   PetscInt __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getbuffer", 0);
 
   /* "PETSc/petscis.pxi":189
@@ -15778,7 +16411,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
  *             p[0] = <void*>self.data
  *             n = self.size
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(4, 191, __pyx_L1_error)
 
     /* "PETSc/petscis.pxi":192
  *         if p != NULL:
@@ -15798,6 +16431,14 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
  */
     __pyx_t_3 = __pyx_v_self->size;
     __pyx_v_n = __pyx_t_3;
+
+    /* "PETSc/petscis.pxi":190
+ *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
+ *         cdef PetscInt n = 0
+ *         if p != NULL:             # <<<<<<<<<<<<<<
+ *             self.acquire()
+ *             p[0] = <void*>self.data
+ */
     goto __pyx_L3;
   }
 
@@ -15818,8 +16459,15 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscInt))
  * 
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(4, 195, __pyx_L1_error)
+
+    /* "PETSc/petscis.pxi":194
+ *             p[0] = <void*>self.data
+ *             n = self.size
+ *         elif self.iset != NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( ISGetLocalSize(self.iset, &n) )
+ *         return <Py_ssize_t>(<size_t>n*sizeof(PetscInt))
+ */
   }
   __pyx_L3:;
 
@@ -15844,7 +16492,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._IS_buffer.getbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __pyx_r = -1L;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -15879,9 +16527,6 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struc
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   Py_ssize_t __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getsegcount__", 0);
 
   /* "PETSc/petscis.pxi":199
@@ -15901,11 +16546,17 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struc
  *         return 1
  * 
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, NULL); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, NULL); if (unlikely(__pyx_t_2 == -1L)) __PYX_ERR(4, 200, __pyx_L1_error)
     (__pyx_v_lenp[0]) = __pyx_t_2;
-    goto __pyx_L3;
+
+    /* "PETSc/petscis.pxi":199
+ * 
+ *     def __getsegcount__(self, Py_ssize_t *lenp):
+ *         if lenp != NULL:             # <<<<<<<<<<<<<<
+ *             lenp[0] = self.getbuffer(NULL)
+ *         return 1
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/petscis.pxi":201
  *         if lenp != NULL:
@@ -15965,9 +16616,6 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_14__getreadbuffer__(str
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   Py_ssize_t __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getreadbuffer__", 0);
 
   /* "PETSc/petscis.pxi":204
@@ -15979,11 +16627,11 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_14__getreadbuffer__(str
  */
   __pyx_t_1 = ((__pyx_v_idx != 0) != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(4, 204, __pyx_L1_error)
   }
 
   /* "PETSc/petscis.pxi":206
@@ -15993,7 +16641,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_14__getreadbuffer__(str
  * 
  *     # NumPy array interface (legacy)
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, __pyx_v_p); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, __pyx_v_p); if (unlikely(__pyx_t_3 == -1L)) __PYX_ERR(4, 206, __pyx_L1_error)
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
@@ -16049,9 +16697,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
   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("__get__", 0);
 
   /* "PETSc/petscis.pxi":212
@@ -16080,10 +16725,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  *             cdef object size = toInt(n)
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_INT)
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(4, 214, __pyx_L1_error)
+
+    /* "PETSc/petscis.pxi":213
+ *         def __get__(self):
+ *             cdef PetscInt n = 0
+ *             if self.iset != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( ISGetLocalSize(self.iset, &n) )
+ *             cdef object size = toInt(n)
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/petscis.pxi":215
  *             if self.iset != NULL:
@@ -16092,7 +16743,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_INT)
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 215, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_size = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -16104,7 +16755,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
  *             return dict(version=3,
  */
-  __pyx_t_3 = ((PyObject *)PyArray_DescrFromType(NPY_PETSC_INT)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)PyArray_DescrFromType(NPY_PETSC_INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3);
   __pyx_t_3 = 0;
@@ -16116,11 +16767,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  *             return dict(version=3,
  *                         data=self,
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_descr), __pyx_n_s_kind); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_descr), __pyx_n_s_kind); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_descr), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_descr), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -16128,10 +16779,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_c_d, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_c_d, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_4))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_4)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyString_CheckExact(__pyx_t_4))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(4, 217, __pyx_L1_error)
   __pyx_v_typestr = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
@@ -16143,9 +16794,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  *                         shape=(size,),
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 218, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_version, __pyx_int_3) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_version, __pyx_int_3) < 0) __PYX_ERR(4, 218, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":219
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
@@ -16154,7 +16805,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  *                         shape=(size,),
  *                         typestr=typestr)
  */
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_data, ((PyObject *)__pyx_v_self)) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_data, ((PyObject *)__pyx_v_self)) < 0) __PYX_ERR(4, 218, __pyx_L1_error)
 
   /* "PETSc/petscis.pxi":220
  *             return dict(version=3,
@@ -16163,12 +16814,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  *                         typestr=typestr)
  * 
  */
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 220, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_size);
   __Pyx_GIVEREF(__pyx_v_size);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_size);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_shape, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(4, 218, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/petscis.pxi":221
@@ -16178,7 +16829,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  * 
  * # --------------------------------------------------------------------
  */
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_typestr, __pyx_v_typestr) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_typestr, __pyx_v_typestr) < 0) __PYX_ERR(4, 218, __pyx_L1_error)
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
@@ -16207,7 +16858,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":160
+/* "PETSc/petscvec.pxi":166
  * # --------------------------------------------------------------------
  * 
  * cdef inline Vec ref_Vec(PetscVec vec):             # <<<<<<<<<<<<<<
@@ -16221,19 +16872,16 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
   __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_Vec", 0);
 
-  /* "PETSc/petscvec.pxi":161
+  /* "PETSc/petscvec.pxi":167
  * 
  * cdef inline Vec ref_Vec(PetscVec vec):
  *     cdef Vec ob = <Vec> Vec()             # <<<<<<<<<<<<<<
  *     ob.vec = vec
  *     PetscINCREF(ob.obj)
  */
-  __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[5]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -16241,7 +16889,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
   __pyx_v_ob = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscvec.pxi":162
+  /* "PETSc/petscvec.pxi":168
  * cdef inline Vec ref_Vec(PetscVec vec):
  *     cdef Vec ob = <Vec> Vec()
  *     ob.vec = vec             # <<<<<<<<<<<<<<
@@ -16250,7 +16898,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
  */
   __pyx_v_ob->vec = __pyx_v_vec;
 
-  /* "PETSc/petscvec.pxi":163
+  /* "PETSc/petscvec.pxi":169
  *     cdef Vec ob = <Vec> Vec()
  *     ob.vec = vec
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -16259,7 +16907,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petscvec.pxi":164
+  /* "PETSc/petscvec.pxi":170
  *     ob.vec = vec
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -16271,7 +16919,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":160
+  /* "PETSc/petscvec.pxi":166
  * # --------------------------------------------------------------------
  * 
  * cdef inline Vec ref_Vec(PetscVec vec):             # <<<<<<<<<<<<<<
@@ -16292,7 +16940,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":170
+/* "PETSc/petscvec.pxi":176
  * # unary operations
  * 
  * cdef Vec vec_pos(Vec self):             # <<<<<<<<<<<<<<
@@ -16308,12 +16956,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_pos(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_pos", 0);
 
-  /* "PETSc/petscvec.pxi":171
+  /* "PETSc/petscvec.pxi":177
  * 
  * cdef Vec vec_pos(Vec self):
  *     cdef Vec vec = type(self)()             # <<<<<<<<<<<<<<
@@ -16332,36 +16977,36 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_pos(struct PyPetscV
     }
   }
   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[5]; __pyx_lineno = 171; __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(5, 177, __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[5]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 177, __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_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 177, __pyx_L1_error)
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":172
+  /* "PETSc/petscvec.pxi":178
  * cdef Vec vec_pos(Vec self):
  *     cdef Vec vec = type(self)()
  *     CHKERR( VecDuplicate(self.vec, &vec.vec) )             # <<<<<<<<<<<<<<
  *     CHKERR( VecCopy(self.vec, vec.vec) )
  *     return vec
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_self->vec, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_self->vec, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 178, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":173
+  /* "PETSc/petscvec.pxi":179
  *     cdef Vec vec = type(self)()
  *     CHKERR( VecDuplicate(self.vec, &vec.vec) )
  *     CHKERR( VecCopy(self.vec, vec.vec) )             # <<<<<<<<<<<<<<
  *     return vec
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 179, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":174
+  /* "PETSc/petscvec.pxi":180
  *     CHKERR( VecDuplicate(self.vec, &vec.vec) )
  *     CHKERR( VecCopy(self.vec, vec.vec) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -16373,7 +17018,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_pos(struct PyPetscV
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":170
+  /* "PETSc/petscvec.pxi":176
  * # unary operations
  * 
  * cdef Vec vec_pos(Vec self):             # <<<<<<<<<<<<<<
@@ -16395,7 +17040,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_pos(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":176
+/* "PETSc/petscvec.pxi":182
  *     return vec
  * 
  * cdef Vec vec_neg(Vec self):             # <<<<<<<<<<<<<<
@@ -16410,19 +17055,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_neg(struct PyPetscV
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_neg", 0);
 
-  /* "PETSc/petscvec.pxi":177
+  /* "PETSc/petscvec.pxi":183
  * 
  * cdef Vec vec_neg(Vec self):
  *     cdef Vec vec = <Vec> vec_pos(self)             # <<<<<<<<<<<<<<
  *     CHKERR( VecScale(vec.vec, -1) )
  *     return vec
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -16430,16 +17072,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_neg(struct PyPetscV
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscvec.pxi":178
+  /* "PETSc/petscvec.pxi":184
  * cdef Vec vec_neg(Vec self):
  *     cdef Vec vec = <Vec> vec_pos(self)
  *     CHKERR( VecScale(vec.vec, -1) )             # <<<<<<<<<<<<<<
  *     return vec
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_vec->vec, -1.0)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_vec->vec, -1.0)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 184, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":179
+  /* "PETSc/petscvec.pxi":185
  *     cdef Vec vec = <Vec> vec_pos(self)
  *     CHKERR( VecScale(vec.vec, -1) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -16451,7 +17093,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_neg(struct PyPetscV
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":176
+  /* "PETSc/petscvec.pxi":182
  *     return vec
  * 
  * cdef Vec vec_neg(Vec self):             # <<<<<<<<<<<<<<
@@ -16472,7 +17114,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_neg(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":181
+/* "PETSc/petscvec.pxi":187
  *     return vec
  * 
  * cdef Vec vec_abs(Vec self):             # <<<<<<<<<<<<<<
@@ -16487,19 +17129,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_abs(struct PyPetscV
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_abs", 0);
 
-  /* "PETSc/petscvec.pxi":182
+  /* "PETSc/petscvec.pxi":188
  * 
  * cdef Vec vec_abs(Vec self):
  *     cdef Vec vec = <Vec> vec_pos(self)             # <<<<<<<<<<<<<<
  *     CHKERR( VecAbs(vec.vec) )
  *     return vec
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -16507,16 +17146,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_abs(struct PyPetscV
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscvec.pxi":183
+  /* "PETSc/petscvec.pxi":189
  * cdef Vec vec_abs(Vec self):
  *     cdef Vec vec = <Vec> vec_pos(self)
  *     CHKERR( VecAbs(vec.vec) )             # <<<<<<<<<<<<<<
  *     return vec
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAbs(__pyx_v_vec->vec)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAbs(__pyx_v_vec->vec)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 189, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":184
+  /* "PETSc/petscvec.pxi":190
  *     cdef Vec vec = <Vec> vec_pos(self)
  *     CHKERR( VecAbs(vec.vec) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -16528,7 +17167,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_abs(struct PyPetscV
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":181
+  /* "PETSc/petscvec.pxi":187
  *     return vec
  * 
  * cdef Vec vec_abs(Vec self):             # <<<<<<<<<<<<<<
@@ -16549,7 +17188,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_abs(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":188
+/* "PETSc/petscvec.pxi":194
  * # inplace binary operations
  * 
  * cdef Vec vec_iadd(Vec self, other):             # <<<<<<<<<<<<<<
@@ -16571,13 +17210,10 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   PetscScalar __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_iadd", 0);
   __Pyx_INCREF(__pyx_v_other);
 
-  /* "PETSc/petscvec.pxi":189
+  /* "PETSc/petscvec.pxi":195
  * 
  * cdef Vec vec_iadd(Vec self, other):
  *     cdef PetscScalar alpha = 1             # <<<<<<<<<<<<<<
@@ -16586,18 +17222,18 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
  */
   __pyx_v_alpha = 1.0;
 
-  /* "PETSc/petscvec.pxi":191
+  /* "PETSc/petscvec.pxi":197
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":192
+    /* "PETSc/petscvec.pxi":198
  *     cdef Vec vec
  *     if isinstance(other, Vec):
  *         alpha = 1; vec = other             # <<<<<<<<<<<<<<
@@ -16605,24 +17241,32 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
  *     elif isinstance(other, tuple) or isinstance(other, list):
  */
     __pyx_v_alpha = 1.0;
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 198, __pyx_L1_error)
     __pyx_t_3 = __pyx_v_other;
     __Pyx_INCREF(__pyx_t_3);
     __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscvec.pxi":193
+    /* "PETSc/petscvec.pxi":199
  *     if isinstance(other, Vec):
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )             # <<<<<<<<<<<<<<
  *     elif isinstance(other, tuple) or isinstance(other, list):
  *         other, vec = other
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, __pyx_v_alpha, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, __pyx_v_alpha, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 199, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":197
+ *     cdef PetscScalar alpha = 1
+ *     cdef Vec vec
+ *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
+ *         alpha = 1; vec = other
+ *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":194
+  /* "PETSc/petscvec.pxi":200
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):             # <<<<<<<<<<<<<<
@@ -16642,7 +17286,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":195
+    /* "PETSc/petscvec.pxi":201
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):
  *         other, vec = other             # <<<<<<<<<<<<<<
@@ -16659,7 +17303,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[5]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(5, 201, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -16672,21 +17316,21 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 201, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 201, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 201, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
       index = 0; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
       index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(5, 201, __pyx_L1_error)
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L7_unpacking_done;
@@ -16694,59 +17338,67 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_8 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[5]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(5, 201, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
-    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 201, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_3);
     __pyx_t_3 = 0;
     __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":196
+    /* "PETSc/petscvec.pxi":202
  *     elif isinstance(other, tuple) or isinstance(other, list):
  *         other, vec = other
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  *     else:
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 202, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_9;
 
-    /* "PETSc/petscvec.pxi":197
+    /* "PETSc/petscvec.pxi":203
  *         other, vec = other
  *         alpha = asScalar(other)
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )             # <<<<<<<<<<<<<<
  *     else:
  *         alpha = asScalar(other)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, __pyx_v_alpha, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, __pyx_v_alpha, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 203, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":200
+ *         alpha = 1; vec = other
+ *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
+ *     elif isinstance(other, tuple) or isinstance(other, list):             # <<<<<<<<<<<<<<
+ *         other, vec = other
+ *         alpha = asScalar(other)
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscvec.pxi":199
+  /* "PETSc/petscvec.pxi":205
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  *     else:
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
  *         CHKERR( VecShift(self.vec, alpha) )
  *     return self
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 205, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_9;
 
-    /* "PETSc/petscvec.pxi":200
+    /* "PETSc/petscvec.pxi":206
  *     else:
  *         alpha = asScalar(other)
  *         CHKERR( VecShift(self.vec, alpha) )             # <<<<<<<<<<<<<<
  *     return self
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, __pyx_v_alpha)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, __pyx_v_alpha)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 206, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":201
+  /* "PETSc/petscvec.pxi":207
  *         alpha = asScalar(other)
  *         CHKERR( VecShift(self.vec, alpha) )
  *     return self             # <<<<<<<<<<<<<<
@@ -16758,7 +17410,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":188
+  /* "PETSc/petscvec.pxi":194
  * # inplace binary operations
  * 
  * cdef Vec vec_iadd(Vec self, other):             # <<<<<<<<<<<<<<
@@ -16781,7 +17433,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":203
+/* "PETSc/petscvec.pxi":209
  *     return self
  * 
  * cdef Vec vec_isub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -16803,13 +17455,10 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   PetscScalar __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_isub", 0);
   __Pyx_INCREF(__pyx_v_other);
 
-  /* "PETSc/petscvec.pxi":204
+  /* "PETSc/petscvec.pxi":210
  * 
  * cdef Vec vec_isub(Vec self, other):
  *     cdef PetscScalar alpha = 1             # <<<<<<<<<<<<<<
@@ -16818,18 +17467,18 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
  */
   __pyx_v_alpha = 1.0;
 
-  /* "PETSc/petscvec.pxi":206
+  /* "PETSc/petscvec.pxi":212
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":207
+    /* "PETSc/petscvec.pxi":213
  *     cdef Vec vec
  *     if isinstance(other, Vec):
  *         alpha = 1; vec = other             # <<<<<<<<<<<<<<
@@ -16837,24 +17486,32 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
  *     elif isinstance(other, tuple) or isinstance(other, list):
  */
     __pyx_v_alpha = 1.0;
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 213, __pyx_L1_error)
     __pyx_t_3 = __pyx_v_other;
     __Pyx_INCREF(__pyx_t_3);
     __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscvec.pxi":208
+    /* "PETSc/petscvec.pxi":214
  *     if isinstance(other, Vec):
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )             # <<<<<<<<<<<<<<
  *     elif isinstance(other, tuple) or isinstance(other, list):
  *         other, vec = other
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, (-__pyx_v_alpha), __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, (-__pyx_v_alpha), __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 214, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":212
+ *     cdef PetscScalar alpha = 1
+ *     cdef Vec vec
+ *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
+ *         alpha = 1; vec = other
+ *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":209
+  /* "PETSc/petscvec.pxi":215
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):             # <<<<<<<<<<<<<<
@@ -16874,7 +17531,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":210
+    /* "PETSc/petscvec.pxi":216
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):
  *         other, vec = other             # <<<<<<<<<<<<<<
@@ -16891,7 +17548,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(5, 216, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -16904,21 +17561,21 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 216, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 216, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 216, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
       index = 0; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
       index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(5, 216, __pyx_L1_error)
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L7_unpacking_done;
@@ -16926,59 +17583,67 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_8 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(5, 216, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
-    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 216, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_3);
     __pyx_t_3 = 0;
     __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":211
+    /* "PETSc/petscvec.pxi":217
  *     elif isinstance(other, tuple) or isinstance(other, list):
  *         other, vec = other
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  *     else:
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 217, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_9;
 
-    /* "PETSc/petscvec.pxi":212
+    /* "PETSc/petscvec.pxi":218
  *         other, vec = other
  *         alpha = asScalar(other)
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )             # <<<<<<<<<<<<<<
  *     else:
  *         alpha = asScalar(other)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, (-__pyx_v_alpha), __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, (-__pyx_v_alpha), __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 218, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":215
+ *         alpha = 1; vec = other
+ *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
+ *     elif isinstance(other, tuple) or isinstance(other, list):             # <<<<<<<<<<<<<<
+ *         other, vec = other
+ *         alpha = asScalar(other)
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscvec.pxi":214
+  /* "PETSc/petscvec.pxi":220
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  *     else:
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
  *         CHKERR( VecShift(self.vec, -alpha) )
  *     return self
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 220, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_9;
 
-    /* "PETSc/petscvec.pxi":215
+    /* "PETSc/petscvec.pxi":221
  *     else:
  *         alpha = asScalar(other)
  *         CHKERR( VecShift(self.vec, -alpha) )             # <<<<<<<<<<<<<<
  *     return self
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, (-__pyx_v_alpha))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, (-__pyx_v_alpha))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 221, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":216
+  /* "PETSc/petscvec.pxi":222
  *         alpha = asScalar(other)
  *         CHKERR( VecShift(self.vec, -alpha) )
  *     return self             # <<<<<<<<<<<<<<
@@ -16990,7 +17655,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":203
+  /* "PETSc/petscvec.pxi":209
  *     return self
  * 
  * cdef Vec vec_isub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17013,7 +17678,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":218
+/* "PETSc/petscvec.pxi":224
  *     return self
  * 
  * cdef Vec vec_imul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17031,12 +17696,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PetscScalar __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_imul", 0);
 
-  /* "PETSc/petscvec.pxi":219
+  /* "PETSc/petscvec.pxi":225
  * 
  * cdef Vec vec_imul(Vec self, other):
  *     cdef PetscScalar alpha = 1             # <<<<<<<<<<<<<<
@@ -17045,64 +17707,72 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
  */
   __pyx_v_alpha = 1.0;
 
-  /* "PETSc/petscvec.pxi":221
+  /* "PETSc/petscvec.pxi":227
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
  *         vec = other
  *         CHKERR( VecPointwiseMult(self.vec, self.vec, vec.vec) )
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":222
+    /* "PETSc/petscvec.pxi":228
  *     cdef Vec vec
  *     if isinstance(other, Vec):
  *         vec = other             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMult(self.vec, self.vec, vec.vec) )
  *     else:
  */
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 228, __pyx_L1_error)
     __pyx_t_3 = __pyx_v_other;
     __Pyx_INCREF(__pyx_t_3);
     __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscvec.pxi":223
+    /* "PETSc/petscvec.pxi":229
  *     if isinstance(other, Vec):
  *         vec = other
  *         CHKERR( VecPointwiseMult(self.vec, self.vec, vec.vec) )             # <<<<<<<<<<<<<<
  *     else:
  *         alpha = asScalar(other)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMult(__pyx_v_self->vec, __pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMult(__pyx_v_self->vec, __pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 229, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":227
+ *     cdef PetscScalar alpha = 1
+ *     cdef Vec vec
+ *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
+ *         vec = other
+ *         CHKERR( VecPointwiseMult(self.vec, self.vec, vec.vec) )
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscvec.pxi":225
+  /* "PETSc/petscvec.pxi":231
  *         CHKERR( VecPointwiseMult(self.vec, self.vec, vec.vec) )
  *     else:
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
  *         CHKERR( VecScale(self.vec, alpha) )
  *     return self
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 231, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_5;
 
-    /* "PETSc/petscvec.pxi":226
+    /* "PETSc/petscvec.pxi":232
  *     else:
  *         alpha = asScalar(other)
  *         CHKERR( VecScale(self.vec, alpha) )             # <<<<<<<<<<<<<<
  *     return self
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_self->vec, __pyx_v_alpha)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_self->vec, __pyx_v_alpha)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 232, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":227
+  /* "PETSc/petscvec.pxi":233
  *         alpha = asScalar(other)
  *         CHKERR( VecScale(self.vec, alpha) )
  *     return self             # <<<<<<<<<<<<<<
@@ -17114,7 +17784,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":218
+  /* "PETSc/petscvec.pxi":224
  *     return self
  * 
  * cdef Vec vec_imul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17134,7 +17804,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":229
+/* "PETSc/petscvec.pxi":235
  *     return self
  * 
  * cdef Vec vec_idiv(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17153,12 +17823,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PetscScalar __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_idiv", 0);
 
-  /* "PETSc/petscvec.pxi":230
+  /* "PETSc/petscvec.pxi":236
  * 
  * cdef Vec vec_idiv(Vec self, other):
  *     cdef PetscScalar one = 1             # <<<<<<<<<<<<<<
@@ -17167,7 +17834,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
  */
   __pyx_v_one = 1.0;
 
-  /* "PETSc/petscvec.pxi":231
+  /* "PETSc/petscvec.pxi":237
  * cdef Vec vec_idiv(Vec self, other):
  *     cdef PetscScalar one = 1
  *     cdef PetscScalar alpha = 1             # <<<<<<<<<<<<<<
@@ -17176,64 +17843,72 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
  */
   __pyx_v_alpha = 1.0;
 
-  /* "PETSc/petscvec.pxi":233
+  /* "PETSc/petscvec.pxi":239
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
  *         vec = other
  *         CHKERR( VecPointwiseDivide(self.vec, self.vec, vec.vec) )
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":234
+    /* "PETSc/petscvec.pxi":240
  *     cdef Vec vec
  *     if isinstance(other, Vec):
  *         vec = other             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseDivide(self.vec, self.vec, vec.vec) )
  *     else:
  */
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 240, __pyx_L1_error)
     __pyx_t_3 = __pyx_v_other;
     __Pyx_INCREF(__pyx_t_3);
     __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscvec.pxi":235
+    /* "PETSc/petscvec.pxi":241
  *     if isinstance(other, Vec):
  *         vec = other
  *         CHKERR( VecPointwiseDivide(self.vec, self.vec, vec.vec) )             # <<<<<<<<<<<<<<
  *     else:
  *         alpha = asScalar(other)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseDivide(__pyx_v_self->vec, __pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseDivide(__pyx_v_self->vec, __pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 241, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":239
+ *     cdef PetscScalar alpha = 1
+ *     cdef Vec vec
+ *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
+ *         vec = other
+ *         CHKERR( VecPointwiseDivide(self.vec, self.vec, vec.vec) )
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscvec.pxi":237
+  /* "PETSc/petscvec.pxi":243
  *         CHKERR( VecPointwiseDivide(self.vec, self.vec, vec.vec) )
  *     else:
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
  *         CHKERR( VecScale(self.vec, one/alpha) )
  *     return self
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 243, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_5;
 
-    /* "PETSc/petscvec.pxi":238
+    /* "PETSc/petscvec.pxi":244
  *     else:
  *         alpha = asScalar(other)
  *         CHKERR( VecScale(self.vec, one/alpha) )             # <<<<<<<<<<<<<<
  *     return self
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_self->vec, (__pyx_v_one / __pyx_v_alpha))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_self->vec, (__pyx_v_one / __pyx_v_alpha))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 244, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":239
+  /* "PETSc/petscvec.pxi":245
  *         alpha = asScalar(other)
  *         CHKERR( VecScale(self.vec, one/alpha) )
  *     return self             # <<<<<<<<<<<<<<
@@ -17245,7 +17920,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":229
+  /* "PETSc/petscvec.pxi":235
  *     return self
  * 
  * cdef Vec vec_idiv(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17265,7 +17940,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":243
+/* "PETSc/petscvec.pxi":249
  * # binary operations
  * 
  * cdef Vec vec_add(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17278,12 +17953,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_add(struct PyPetscV
   __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("vec_add", 0);
 
-  /* "PETSc/petscvec.pxi":244
+  /* "PETSc/petscvec.pxi":250
  * 
  * cdef Vec vec_add(Vec self, other):
  *     return vec_iadd(vec_pos(self), other)             # <<<<<<<<<<<<<<
@@ -17291,16 +17963,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_add(struct PyPetscV
  * cdef Vec vec_sub(Vec self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 250, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_iadd(((struct PyPetscVecObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_iadd(((struct PyPetscVecObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 250, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":243
+  /* "PETSc/petscvec.pxi":249
  * # binary operations
  * 
  * cdef Vec vec_add(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17320,7 +17992,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_add(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":246
+/* "PETSc/petscvec.pxi":252
  *     return vec_iadd(vec_pos(self), other)
  * 
  * cdef Vec vec_sub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17333,12 +18005,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_sub(struct PyPetscV
   __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("vec_sub", 0);
 
-  /* "PETSc/petscvec.pxi":247
+  /* "PETSc/petscvec.pxi":253
  * 
  * cdef Vec vec_sub(Vec self, other):
  *     return vec_isub(vec_pos(self), other)             # <<<<<<<<<<<<<<
@@ -17346,16 +18015,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_sub(struct PyPetscV
  * cdef Vec vec_mul(Vec self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_isub(((struct PyPetscVecObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_isub(((struct PyPetscVecObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":246
+  /* "PETSc/petscvec.pxi":252
  *     return vec_iadd(vec_pos(self), other)
  * 
  * cdef Vec vec_sub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17375,7 +18044,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_sub(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":249
+/* "PETSc/petscvec.pxi":255
  *     return vec_isub(vec_pos(self), other)
  * 
  * cdef Vec vec_mul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17388,12 +18057,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_mul(struct PyPetscV
   __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("vec_mul", 0);
 
-  /* "PETSc/petscvec.pxi":250
+  /* "PETSc/petscvec.pxi":256
  * 
  * cdef Vec vec_mul(Vec self, other):
  *     return vec_imul(vec_pos(self), other)             # <<<<<<<<<<<<<<
@@ -17401,16 +18067,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_mul(struct PyPetscV
  * cdef Vec vec_div(Vec self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_imul(((struct PyPetscVecObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_imul(((struct PyPetscVecObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":249
+  /* "PETSc/petscvec.pxi":255
  *     return vec_isub(vec_pos(self), other)
  * 
  * cdef Vec vec_mul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17430,7 +18096,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_mul(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":252
+/* "PETSc/petscvec.pxi":258
  *     return vec_imul(vec_pos(self), other)
  * 
  * cdef Vec vec_div(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17443,12 +18109,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_div(struct PyPetscV
   __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("vec_div", 0);
 
-  /* "PETSc/petscvec.pxi":253
+  /* "PETSc/petscvec.pxi":259
  * 
  * cdef Vec vec_div(Vec self, other):
  *     return vec_idiv(vec_pos(self), other)             # <<<<<<<<<<<<<<
@@ -17456,16 +18119,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_div(struct PyPetscV
  * # reflected binary operations
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_idiv(((struct PyPetscVecObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_idiv(((struct PyPetscVecObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":252
+  /* "PETSc/petscvec.pxi":258
  *     return vec_imul(vec_pos(self), other)
  * 
  * cdef Vec vec_div(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17485,7 +18148,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_div(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":257
+/* "PETSc/petscvec.pxi":263
  * # reflected binary operations
  * 
  * cdef Vec vec_radd(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17497,12 +18160,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_radd(struct PyPetsc
   struct PyPetscVecObject *__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("vec_radd", 0);
 
-  /* "PETSc/petscvec.pxi":258
+  /* "PETSc/petscvec.pxi":264
  * 
  * cdef Vec vec_radd(Vec self, other):
  *     return vec_add(self, other)             # <<<<<<<<<<<<<<
@@ -17510,13 +18170,13 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_radd(struct PyPetsc
  * cdef Vec vec_rsub(Vec self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_add(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_add(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 264, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":257
+  /* "PETSc/petscvec.pxi":263
  * # reflected binary operations
  * 
  * cdef Vec vec_radd(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17535,7 +18195,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_radd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":260
+/* "PETSc/petscvec.pxi":266
  *     return vec_add(self, other)
  * 
  * cdef Vec vec_rsub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17550,19 +18210,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rsub(struct PyPetsc
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_rsub", 0);
 
-  /* "PETSc/petscvec.pxi":261
+  /* "PETSc/petscvec.pxi":267
  * 
  * cdef Vec vec_rsub(Vec self, other):
  *     cdef Vec vec = <Vec> vec_sub(self, other)             # <<<<<<<<<<<<<<
  *     CHKERR( VecScale(vec.vec, -1) )
  *     return vec
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_sub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_sub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 267, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -17570,16 +18227,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rsub(struct PyPetsc
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscvec.pxi":262
+  /* "PETSc/petscvec.pxi":268
  * cdef Vec vec_rsub(Vec self, other):
  *     cdef Vec vec = <Vec> vec_sub(self, other)
  *     CHKERR( VecScale(vec.vec, -1) )             # <<<<<<<<<<<<<<
  *     return vec
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_vec->vec, -1.0)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_vec->vec, -1.0)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 268, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":263
+  /* "PETSc/petscvec.pxi":269
  *     cdef Vec vec = <Vec> vec_sub(self, other)
  *     CHKERR( VecScale(vec.vec, -1) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -17591,7 +18248,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rsub(struct PyPetsc
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":260
+  /* "PETSc/petscvec.pxi":266
  *     return vec_add(self, other)
  * 
  * cdef Vec vec_rsub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17612,7 +18269,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rsub(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":265
+/* "PETSc/petscvec.pxi":271
  *     return vec
  * 
  * cdef Vec vec_rmul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17624,12 +18281,9 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rmul(struct PyPetsc
   struct PyPetscVecObject *__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("vec_rmul", 0);
 
-  /* "PETSc/petscvec.pxi":266
+  /* "PETSc/petscvec.pxi":272
  * 
  * cdef Vec vec_rmul(Vec self, other):
  *     return vec_mul(self, other)             # <<<<<<<<<<<<<<
@@ -17637,13 +18291,13 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rmul(struct PyPetsc
  * cdef Vec vec_rdiv(Vec self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_mul(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_mul(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 272, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":265
+  /* "PETSc/petscvec.pxi":271
  *     return vec
  * 
  * cdef Vec vec_rmul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17662,7 +18316,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rmul(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":268
+/* "PETSc/petscvec.pxi":274
  *     return vec_mul(self, other)
  * 
  * cdef Vec vec_rdiv(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17677,19 +18331,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rdiv(struct PyPetsc
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_rdiv", 0);
 
-  /* "PETSc/petscvec.pxi":269
+  /* "PETSc/petscvec.pxi":275
  * 
  * cdef Vec vec_rdiv(Vec self, other):
  *     cdef Vec vec = <Vec> vec_div(self, other)             # <<<<<<<<<<<<<<
  *     CHKERR( VecReciprocal(vec.vec) )
  *     return vec
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_div(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_div(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 275, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -17697,16 +18348,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rdiv(struct PyPetsc
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscvec.pxi":270
+  /* "PETSc/petscvec.pxi":276
  * cdef Vec vec_rdiv(Vec self, other):
  *     cdef Vec vec = <Vec> vec_div(self, other)
  *     CHKERR( VecReciprocal(vec.vec) )             # <<<<<<<<<<<<<<
  *     return vec
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecReciprocal(__pyx_v_vec->vec)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecReciprocal(__pyx_v_vec->vec)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 276, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":271
+  /* "PETSc/petscvec.pxi":277
  *     cdef Vec vec = <Vec> vec_div(self, other)
  *     CHKERR( VecReciprocal(vec.vec) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -17718,7 +18369,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rdiv(struct PyPetsc
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":268
+  /* "PETSc/petscvec.pxi":274
  *     return vec_mul(self, other)
  * 
  * cdef Vec vec_rdiv(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17739,7 +18390,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rdiv(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":275
+/* "PETSc/petscvec.pxi":281
  * # --------------------------------------------------------------------
  * 
  * cdef inline int Vec_Sizes(object size, object bsize,             # <<<<<<<<<<<<<<
@@ -17751,21 +18402,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Vec_Sizes(PyObject *__pyx_v_si
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Vec_Sizes", 0);
 
-  /* "PETSc/petscvec.pxi":277
+  /* "PETSc/petscvec.pxi":283
  * cdef inline int Vec_Sizes(object size, object bsize,
  *                           PetscInt *b, PetscInt *n, PetscInt *N) except -1:
  *     Sys_Sizes(size, bsize, b, n, N)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Sys_Sizes(__pyx_v_size, __pyx_v_bsize, __pyx_v_b, __pyx_v_n, __pyx_v_N); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Sys_Sizes(__pyx_v_size, __pyx_v_bsize, __pyx_v_b, __pyx_v_n, __pyx_v_N); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(5, 283, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":278
+  /* "PETSc/petscvec.pxi":284
  *                           PetscInt *b, PetscInt *n, PetscInt *N) except -1:
  *     Sys_Sizes(size, bsize, b, n, N)
  *     return 0             # <<<<<<<<<<<<<<
@@ -17775,7 +18423,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Vec_Sizes(PyObject *__pyx_v_si
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":275
+  /* "PETSc/petscvec.pxi":281
  * # --------------------------------------------------------------------
  * 
  * cdef inline int Vec_Sizes(object size, object bsize,             # <<<<<<<<<<<<<<
@@ -17792,7 +18440,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Vec_Sizes(PyObject *__pyx_v_si
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":285
+/* "PETSc/petscvec.pxi":291
  *                              const_PetscScalar[],PetscInsertMode)
  * 
  * cdef inline int vecsetvalues(PetscVec V,             # <<<<<<<<<<<<<<
@@ -17806,8 +18454,8 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   PetscInt __pyx_v_nv;
   PetscInt *__pyx_v_i;
   PetscScalar *__pyx_v_v;
-  CYTHON_UNUSED PyObject *__pyx_v_ai = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_av = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
   InsertMode __pyx_v_addv;
   __pyx_t_8petsc4py_5PETSc_VecSetValuesFcn *__pyx_v_setvalues;
   int __pyx_r;
@@ -17820,12 +18468,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   PyObject *__pyx_t_6 = NULL;
   InsertMode __pyx_t_7;
   int __pyx_t_8;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vecsetvalues", 0);
 
-  /* "PETSc/petscvec.pxi":289
+  /* "PETSc/petscvec.pxi":295
  *                              int blocked, int local) except -1:
  *     # block size
  *     cdef PetscInt bs=1             # <<<<<<<<<<<<<<
@@ -17834,7 +18479,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
  */
   __pyx_v_bs = 1;
 
-  /* "PETSc/petscvec.pxi":290
+  /* "PETSc/petscvec.pxi":296
  *     # block size
  *     cdef PetscInt bs=1
  *     if blocked:             # <<<<<<<<<<<<<<
@@ -17844,16 +18489,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   __pyx_t_1 = (__pyx_v_blocked != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":291
+    /* "PETSc/petscvec.pxi":297
  *     cdef PetscInt bs=1
  *     if blocked:
  *         CHKERR( VecGetBlockSize(V, &bs) )             # <<<<<<<<<<<<<<
  *         if bs < 1: bs = 1
  *     # indices and values
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetBlockSize(__pyx_v_V, (&__pyx_v_bs))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetBlockSize(__pyx_v_V, (&__pyx_v_bs))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 297, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":292
+    /* "PETSc/petscvec.pxi":298
  *     if blocked:
  *         CHKERR( VecGetBlockSize(V, &bs) )
  *         if bs < 1: bs = 1             # <<<<<<<<<<<<<<
@@ -17863,14 +18508,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
     __pyx_t_1 = ((__pyx_v_bs < 1) != 0);
     if (__pyx_t_1) {
       __pyx_v_bs = 1;
-      goto __pyx_L4;
     }
-    __pyx_L4:;
-    goto __pyx_L3;
+
+    /* "PETSc/petscvec.pxi":296
+ *     # block size
+ *     cdef PetscInt bs=1
+ *     if blocked:             # <<<<<<<<<<<<<<
+ *         CHKERR( VecGetBlockSize(V, &bs) )
+ *         if bs < 1: bs = 1
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":294
+  /* "PETSc/petscvec.pxi":300
  *         if bs < 1: bs = 1
  *     # indices and values
  *     cdef PetscInt ni=0, nv=0             # <<<<<<<<<<<<<<
@@ -17880,51 +18529,51 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   __pyx_v_ni = 0;
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscvec.pxi":295
+  /* "PETSc/petscvec.pxi":301
  *     # indices and values
  *     cdef PetscInt ni=0, nv=0
  *     cdef PetscInt    *i=NULL             # <<<<<<<<<<<<<<
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)
+ *     cdef object tmp1 = iarray_i(oi, &ni, &i)
  */
   __pyx_v_i = NULL;
 
-  /* "PETSc/petscvec.pxi":296
+  /* "PETSc/petscvec.pxi":302
  *     cdef PetscInt ni=0, nv=0
  *     cdef PetscInt    *i=NULL
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object av = iarray_s(ov, &nv, &v)
+ *     cdef object tmp1 = iarray_i(oi, &ni, &i)
+ *     cdef object tmp2 = iarray_s(ov, &nv, &v)
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscvec.pxi":297
+  /* "PETSc/petscvec.pxi":303
  *     cdef PetscInt    *i=NULL
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)             # <<<<<<<<<<<<<<
- *     cdef object av = iarray_s(ov, &nv, &v)
+ *     cdef object tmp1 = iarray_i(oi, &ni, &i)             # <<<<<<<<<<<<<<
+ *     cdef object tmp2 = iarray_s(ov, &nv, &v)
  *     if ni*bs != nv: raise ValueError(
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_ai = __pyx_t_3;
+  __pyx_v_tmp1 = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscvec.pxi":298
+  /* "PETSc/petscvec.pxi":304
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object av = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
+ *     cdef object tmp1 = iarray_i(oi, &ni, &i)
+ *     cdef object tmp2 = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
  *     if ni*bs != nv: raise ValueError(
  *         "incompatible array sizes: ni=%d, nv=%d, bs=%d" %
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 304, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_av = __pyx_t_3;
+  __pyx_v_tmp2 = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscvec.pxi":299
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object av = iarray_s(ov, &nv, &v)
+  /* "PETSc/petscvec.pxi":305
+ *     cdef object tmp1 = iarray_i(oi, &ni, &i)
+ *     cdef object tmp2 = iarray_s(ov, &nv, &v)
  *     if ni*bs != nv: raise ValueError(             # <<<<<<<<<<<<<<
  *         "incompatible array sizes: ni=%d, nv=%d, bs=%d" %
  *         (toInt(ni), toInt(nv), toInt(bs)) )
@@ -17932,20 +18581,20 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   __pyx_t_1 = (((__pyx_v_ni * __pyx_v_bs) != __pyx_v_nv) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":301
+    /* "PETSc/petscvec.pxi":307
  *     if ni*bs != nv: raise ValueError(
  *         "incompatible array sizes: ni=%d, nv=%d, bs=%d" %
  *         (toInt(ni), toInt(nv), toInt(bs)) )             # <<<<<<<<<<<<<<
  *     # insert mode
  *     cdef PetscInsertMode addv = insertmode(oim)
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 307, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 307, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 307, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 307, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -17957,48 +18606,48 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
     __pyx_t_4 = 0;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscvec.pxi":300
- *     cdef object av = iarray_s(ov, &nv, &v)
+    /* "PETSc/petscvec.pxi":306
+ *     cdef object tmp2 = iarray_s(ov, &nv, &v)
  *     if ni*bs != nv: raise ValueError(
  *         "incompatible array sizes: ni=%d, nv=%d, bs=%d" %             # <<<<<<<<<<<<<<
  *         (toInt(ni), toInt(nv), toInt(bs)) )
  *     # insert mode
  */
-    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_ni_d_nv, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_ni_d_nv, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 306, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":299
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object av = iarray_s(ov, &nv, &v)
+    /* "PETSc/petscvec.pxi":305
+ *     cdef object tmp1 = iarray_i(oi, &ni, &i)
+ *     cdef object tmp2 = iarray_s(ov, &nv, &v)
  *     if ni*bs != nv: raise ValueError(             # <<<<<<<<<<<<<<
  *         "incompatible array sizes: ni=%d, nv=%d, bs=%d" %
  *         (toInt(ni), toInt(nv), toInt(bs)) )
  */
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 305, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 305, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[5]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(5, 305, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":303
+  /* "PETSc/petscvec.pxi":309
  *         (toInt(ni), toInt(nv), toInt(bs)) )
  *     # insert mode
  *     cdef PetscInsertMode addv = insertmode(oim)             # <<<<<<<<<<<<<<
  *     # VecSetValuesXXX function
  *     cdef VecSetValuesFcn *setvalues = NULL
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oim); if (unlikely(__pyx_t_7 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oim); if (unlikely(__pyx_t_7 == ((InsertMode)-1L))) __PYX_ERR(5, 309, __pyx_L1_error)
   __pyx_v_addv = __pyx_t_7;
 
-  /* "PETSc/petscvec.pxi":305
+  /* "PETSc/petscvec.pxi":311
  *     cdef PetscInsertMode addv = insertmode(oim)
  *     # VecSetValuesXXX function
  *     cdef VecSetValuesFcn *setvalues = NULL             # <<<<<<<<<<<<<<
@@ -18007,7 +18656,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
  */
   __pyx_v_setvalues = NULL;
 
-  /* "PETSc/petscvec.pxi":306
+  /* "PETSc/petscvec.pxi":312
  *     # VecSetValuesXXX function
  *     cdef VecSetValuesFcn *setvalues = NULL
  *     if blocked and local: setvalues = VecSetValuesBlockedLocal             # <<<<<<<<<<<<<<
@@ -18028,7 +18677,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
     goto __pyx_L6;
   }
 
-  /* "PETSc/petscvec.pxi":307
+  /* "PETSc/petscvec.pxi":313
  *     cdef VecSetValuesFcn *setvalues = NULL
  *     if blocked and local: setvalues = VecSetValuesBlockedLocal
  *     elif blocked:         setvalues = VecSetValuesBlocked             # <<<<<<<<<<<<<<
@@ -18041,7 +18690,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
     goto __pyx_L6;
   }
 
-  /* "PETSc/petscvec.pxi":308
+  /* "PETSc/petscvec.pxi":314
  *     if blocked and local: setvalues = VecSetValuesBlockedLocal
  *     elif blocked:         setvalues = VecSetValuesBlocked
  *     elif local:           setvalues = VecSetValuesLocal             # <<<<<<<<<<<<<<
@@ -18053,29 +18702,29 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
     __pyx_v_setvalues = VecSetValuesLocal;
     goto __pyx_L6;
   }
-  /*else*/ {
 
-    /* "PETSc/petscvec.pxi":309
+  /* "PETSc/petscvec.pxi":315
  *     elif blocked:         setvalues = VecSetValuesBlocked
  *     elif local:           setvalues = VecSetValuesLocal
  *     else:                 setvalues = VecSetValues             # <<<<<<<<<<<<<<
  *     # actual call
  *     CHKERR( setvalues(V, ni, i, v, addv) )
  */
+  /*else*/ {
     __pyx_v_setvalues = VecSetValues;
   }
   __pyx_L6:;
 
-  /* "PETSc/petscvec.pxi":311
+  /* "PETSc/petscvec.pxi":317
  *     else:                 setvalues = VecSetValues
  *     # actual call
  *     CHKERR( setvalues(V, ni, i, v, addv) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_V, __pyx_v_ni, __pyx_v_i, __pyx_v_v, __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_V, __pyx_v_ni, __pyx_v_i, __pyx_v_v, __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 317, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":312
+  /* "PETSc/petscvec.pxi":318
  *     # actual call
  *     CHKERR( setvalues(V, ni, i, v, addv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -18085,7 +18734,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":285
+  /* "PETSc/petscvec.pxi":291
  *                              const_PetscScalar[],PetscInsertMode)
  * 
  * cdef inline int vecsetvalues(PetscVec V,             # <<<<<<<<<<<<<<
@@ -18102,13 +18751,13 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   __Pyx_AddTraceback("petsc4py.PETSc.vecsetvalues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_ai);
-  __Pyx_XDECREF(__pyx_v_av);
+  __Pyx_XDECREF(__pyx_v_tmp1);
+  __Pyx_XDECREF(__pyx_v_tmp2);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":314
+/* "PETSc/petscvec.pxi":320
  *     return 0
  * 
  * cdef object vecgetvalues(PetscVec vec, object oindices, object values):             # <<<<<<<<<<<<<<
@@ -18130,13 +18779,10 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vecgetvalues", 0);
   __Pyx_INCREF(__pyx_v_values);
 
-  /* "PETSc/petscvec.pxi":315
+  /* "PETSc/petscvec.pxi":321
  * 
  * cdef object vecgetvalues(PetscVec vec, object oindices, object values):
  *     cdef PetscInt ni=0, nv=0             # <<<<<<<<<<<<<<
@@ -18146,7 +18792,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   __pyx_v_ni = 0;
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscvec.pxi":316
+  /* "PETSc/petscvec.pxi":322
  * cdef object vecgetvalues(PetscVec vec, object oindices, object values):
  *     cdef PetscInt ni=0, nv=0
  *     cdef PetscInt    *i=NULL             # <<<<<<<<<<<<<<
@@ -18155,7 +18801,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
  */
   __pyx_v_i = NULL;
 
-  /* "PETSc/petscvec.pxi":317
+  /* "PETSc/petscvec.pxi":323
  *     cdef PetscInt ni=0, nv=0
  *     cdef PetscInt    *i=NULL
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -18164,19 +18810,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscvec.pxi":318
+  /* "PETSc/petscvec.pxi":324
  *     cdef PetscInt    *i=NULL
  *     cdef PetscScalar *v=NULL
  *     cdef object indices = iarray_i(oindices, &ni, &i)             # <<<<<<<<<<<<<<
  *     if values is None:
  *         values = empty_s(ni)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oindices, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oindices, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 324, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_indices = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":319
+  /* "PETSc/petscvec.pxi":325
  *     cdef PetscScalar *v=NULL
  *     cdef object indices = iarray_i(oindices, &ni, &i)
  *     if values is None:             # <<<<<<<<<<<<<<
@@ -18187,46 +18833,52 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscvec.pxi":320
+    /* "PETSc/petscvec.pxi":326
  *     cdef object indices = iarray_i(oindices, &ni, &i)
  *     if values is None:
  *         values = empty_s(ni)             # <<<<<<<<<<<<<<
  *         values.shape = indices.shape
  *     values = oarray_s(values, &nv, &v)
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_s(__pyx_v_ni)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_s(__pyx_v_ni)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 326, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/petscvec.pxi":321
+    /* "PETSc/petscvec.pxi":327
  *     if values is None:
  *         values = empty_s(ni)
  *         values.shape = indices.shape             # <<<<<<<<<<<<<<
  *     values = oarray_s(values, &nv, &v)
  *     if (ni != nv): raise ValueError(
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_indices, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_indices, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 327, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_values, __pyx_n_s_shape, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_values, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(5, 327, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/petscvec.pxi":325
+ *     cdef PetscScalar *v=NULL
+ *     cdef object indices = iarray_i(oindices, &ni, &i)
+ *     if values is None:             # <<<<<<<<<<<<<<
+ *         values = empty_s(ni)
+ *         values.shape = indices.shape
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":322
+  /* "PETSc/petscvec.pxi":328
  *         values = empty_s(ni)
  *         values.shape = indices.shape
  *     values = oarray_s(values, &nv, &v)             # <<<<<<<<<<<<<<
  *     if (ni != nv): raise ValueError(
  *         ("incompatible array sizes: "
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_v_values, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_v_values, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":323
+  /* "PETSc/petscvec.pxi":329
  *         values.shape = indices.shape
  *     values = oarray_s(values, &nv, &v)
  *     if (ni != nv): raise ValueError(             # <<<<<<<<<<<<<<
@@ -18236,18 +18888,18 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   __pyx_t_3 = ((__pyx_v_ni != __pyx_v_nv) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscvec.pxi":325
+    /* "PETSc/petscvec.pxi":331
  *     if (ni != nv): raise ValueError(
  *         ("incompatible array sizes: "
  *          "ni=%d, nv=%d") % (toInt(ni), toInt(nv)))             # <<<<<<<<<<<<<<
  *     CHKERR( VecGetValues(vec, ni, i, v) )
  *     return values
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 331, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 331, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 331, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -18255,40 +18907,40 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
     __pyx_t_1 = 0;
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_ni_d_nv_2, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_ni_d_nv_2, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 331, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscvec.pxi":323
+    /* "PETSc/petscvec.pxi":329
  *         values.shape = indices.shape
  *     values = oarray_s(values, &nv, &v)
  *     if (ni != nv): raise ValueError(             # <<<<<<<<<<<<<<
  *         ("incompatible array sizes: "
  *          "ni=%d, nv=%d") % (toInt(ni), toInt(nv)))
  */
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 329, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 329, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[5]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(5, 329, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":326
+  /* "PETSc/petscvec.pxi":332
  *         ("incompatible array sizes: "
  *          "ni=%d, nv=%d") % (toInt(ni), toInt(nv)))
  *     CHKERR( VecGetValues(vec, ni, i, v) )             # <<<<<<<<<<<<<<
  *     return values
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetValues(__pyx_v_vec, __pyx_v_ni, __pyx_v_i, __pyx_v_v)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetValues(__pyx_v_vec, __pyx_v_ni, __pyx_v_i, __pyx_v_v)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(5, 332, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":327
+  /* "PETSc/petscvec.pxi":333
  *          "ni=%d, nv=%d") % (toInt(ni), toInt(nv)))
  *     CHKERR( VecGetValues(vec, ni, i, v) )
  *     return values             # <<<<<<<<<<<<<<
@@ -18300,7 +18952,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   __pyx_r = __pyx_v_values;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":314
+  /* "PETSc/petscvec.pxi":320
  *     return 0
  * 
  * cdef object vecgetvalues(PetscVec vec, object oindices, object values):             # <<<<<<<<<<<<<<
@@ -18323,7 +18975,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":331
+/* "PETSc/petscvec.pxi":337
  * # --------------------------------------------------------------------
  * 
  * cdef inline _Vec_buffer vec_getbuffer_r(Vec self):             # <<<<<<<<<<<<<<
@@ -18337,30 +18989,27 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   __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("vec_getbuffer_r", 0);
 
-  /* "PETSc/petscvec.pxi":332
+  /* "PETSc/petscvec.pxi":338
  * 
  * cdef inline _Vec_buffer vec_getbuffer_r(Vec self):
  *     cdef _Vec_buffer buf = _Vec_buffer(self)             # <<<<<<<<<<<<<<
  *     buf.readonly = 1
  *     return buf
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscvec.pxi":333
+  /* "PETSc/petscvec.pxi":339
  * cdef inline _Vec_buffer vec_getbuffer_r(Vec self):
  *     cdef _Vec_buffer buf = _Vec_buffer(self)
  *     buf.readonly = 1             # <<<<<<<<<<<<<<
@@ -18369,7 +19018,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
  */
   __pyx_v_buf->readonly = 1;
 
-  /* "PETSc/petscvec.pxi":334
+  /* "PETSc/petscvec.pxi":340
  *     cdef _Vec_buffer buf = _Vec_buffer(self)
  *     buf.readonly = 1
  *     return buf             # <<<<<<<<<<<<<<
@@ -18381,7 +19030,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   __pyx_r = __pyx_v_buf;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":331
+  /* "PETSc/petscvec.pxi":337
  * # --------------------------------------------------------------------
  * 
  * cdef inline _Vec_buffer vec_getbuffer_r(Vec self):             # <<<<<<<<<<<<<<
@@ -18402,7 +19051,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":336
+/* "PETSc/petscvec.pxi":342
  *     return buf
  * 
  * cdef inline _Vec_buffer vec_getbuffer_w(Vec self):             # <<<<<<<<<<<<<<
@@ -18416,30 +19065,27 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   __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("vec_getbuffer_w", 0);
 
-  /* "PETSc/petscvec.pxi":337
+  /* "PETSc/petscvec.pxi":343
  * 
  * cdef inline _Vec_buffer vec_getbuffer_w(Vec self):
  *     cdef _Vec_buffer buf = _Vec_buffer(self)             # <<<<<<<<<<<<<<
  *     buf.readonly = 0
  *     return buf
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscvec.pxi":338
+  /* "PETSc/petscvec.pxi":344
  * cdef inline _Vec_buffer vec_getbuffer_w(Vec self):
  *     cdef _Vec_buffer buf = _Vec_buffer(self)
  *     buf.readonly = 0             # <<<<<<<<<<<<<<
@@ -18448,7 +19094,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
  */
   __pyx_v_buf->readonly = 0;
 
-  /* "PETSc/petscvec.pxi":339
+  /* "PETSc/petscvec.pxi":345
  *     cdef _Vec_buffer buf = _Vec_buffer(self)
  *     buf.readonly = 0
  *     return buf             # <<<<<<<<<<<<<<
@@ -18460,7 +19106,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   __pyx_r = __pyx_v_buf;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":336
+  /* "PETSc/petscvec.pxi":342
  *     return buf
  * 
  * cdef inline _Vec_buffer vec_getbuffer_w(Vec self):             # <<<<<<<<<<<<<<
@@ -18481,7 +19127,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":341
+/* "PETSc/petscvec.pxi":347
  *     return buf
  * 
  * cdef inline ndarray vec_getarray_r(Vec self):             # <<<<<<<<<<<<<<
@@ -18494,12 +19140,9 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_r(stru
   __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("vec_getarray_r", 0);
 
-  /* "PETSc/petscvec.pxi":342
+  /* "PETSc/petscvec.pxi":348
  * 
  * cdef inline ndarray vec_getarray_r(Vec self):
  *     return asarray(vec_getbuffer_r(self))             # <<<<<<<<<<<<<<
@@ -18507,16 +19150,16 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_r(stru
  * cdef inline ndarray vec_getarray_w(Vec self):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getbuffer_r(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getbuffer_r(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":341
+  /* "PETSc/petscvec.pxi":347
  *     return buf
  * 
  * cdef inline ndarray vec_getarray_r(Vec self):             # <<<<<<<<<<<<<<
@@ -18536,7 +19179,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_r(stru
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":344
+/* "PETSc/petscvec.pxi":350
  *     return asarray(vec_getbuffer_r(self))
  * 
  * cdef inline ndarray vec_getarray_w(Vec self):             # <<<<<<<<<<<<<<
@@ -18549,12 +19192,9 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_w(stru
   __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("vec_getarray_w", 0);
 
-  /* "PETSc/petscvec.pxi":345
+  /* "PETSc/petscvec.pxi":351
  * 
  * cdef inline ndarray vec_getarray_w(Vec self):
  *     return asarray(vec_getbuffer_w(self))             # <<<<<<<<<<<<<<
@@ -18562,16 +19202,16 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_w(stru
  * cdef inline int vec_setarray(Vec self, object o) except -1:
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getbuffer_w(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getbuffer_w(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 351, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 351, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":344
+  /* "PETSc/petscvec.pxi":350
  *     return asarray(vec_getbuffer_r(self))
  * 
  * cdef inline ndarray vec_getarray_w(Vec self):             # <<<<<<<<<<<<<<
@@ -18591,7 +19231,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_w(stru
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":347
+/* "PETSc/petscvec.pxi":353
  *     return asarray(vec_getbuffer_w(self))
  * 
  * cdef inline int vec_setarray(Vec self, object o) except -1:             # <<<<<<<<<<<<<<
@@ -18624,12 +19264,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   PyObject *__pyx_t_14 = NULL;
   PyObject *__pyx_t_15 = NULL;
   int __pyx_t_16;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_setarray", 0);
 
-  /* "PETSc/petscvec.pxi":348
+  /* "PETSc/petscvec.pxi":354
  * 
  * cdef inline int vec_setarray(Vec self, object o) except -1:
  *     cdef PetscInt na=0, nv=0, i=0             # <<<<<<<<<<<<<<
@@ -18640,7 +19277,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   __pyx_v_nv = 0;
   __pyx_v_i = 0;
 
-  /* "PETSc/petscvec.pxi":349
+  /* "PETSc/petscvec.pxi":355
  * cdef inline int vec_setarray(Vec self, object o) except -1:
  *     cdef PetscInt na=0, nv=0, i=0
  *     cdef PetscScalar *va=NULL, *vv=NULL             # <<<<<<<<<<<<<<
@@ -18650,28 +19287,28 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   __pyx_v_va = NULL;
   __pyx_v_vv = NULL;
 
-  /* "PETSc/petscvec.pxi":350
+  /* "PETSc/petscvec.pxi":356
  *     cdef PetscInt na=0, nv=0, i=0
  *     cdef PetscScalar *va=NULL, *vv=NULL
  *     cdef ndarray ary = iarray_s(o, &na, &va)             # <<<<<<<<<<<<<<
  *     CHKERR( VecGetLocalSize(self.vec, &nv) )
  *     if (na != nv) and PyArray_NDIM(ary) > 0: raise ValueError(
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_o, (&__pyx_v_na), (&__pyx_v_va))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_o, (&__pyx_v_na), (&__pyx_v_va))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 356, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":351
+  /* "PETSc/petscvec.pxi":357
  *     cdef PetscScalar *va=NULL, *vv=NULL
  *     cdef ndarray ary = iarray_s(o, &na, &va)
  *     CHKERR( VecGetLocalSize(self.vec, &nv) )             # <<<<<<<<<<<<<<
  *     if (na != nv) and PyArray_NDIM(ary) > 0: raise ValueError(
  *         "array size %d incompatible with vector local size %d" %
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_nv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_nv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 357, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":352
+  /* "PETSc/petscvec.pxi":358
  *     cdef ndarray ary = iarray_s(o, &na, &va)
  *     CHKERR( VecGetLocalSize(self.vec, &nv) )
  *     if (na != nv) and PyArray_NDIM(ary) > 0: raise ValueError(             # <<<<<<<<<<<<<<
@@ -18689,18 +19326,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "PETSc/petscvec.pxi":354
+    /* "PETSc/petscvec.pxi":360
  *     if (na != nv) and PyArray_NDIM(ary) > 0: raise ValueError(
  *         "array size %d incompatible with vector local size %d" %
  *         (toInt(na), toInt(nv)) )             # <<<<<<<<<<<<<<
  *     CHKERR( VecGetArray(self.vec, &vv) )
  *     try:
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 360, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 360, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 360, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
@@ -18709,47 +19346,47 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
     __pyx_t_1 = 0;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscvec.pxi":353
+    /* "PETSc/petscvec.pxi":359
  *     CHKERR( VecGetLocalSize(self.vec, &nv) )
  *     if (na != nv) and PyArray_NDIM(ary) > 0: raise ValueError(
  *         "array size %d incompatible with vector local size %d" %             # <<<<<<<<<<<<<<
  *         (toInt(na), toInt(nv)) )
  *     CHKERR( VecGetArray(self.vec, &vv) )
  */
-    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_array_size_d_incompatible_with_v, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_array_size_d_incompatible_with_v, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 359, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":352
+    /* "PETSc/petscvec.pxi":358
  *     cdef ndarray ary = iarray_s(o, &na, &va)
  *     CHKERR( VecGetLocalSize(self.vec, &nv) )
  *     if (na != nv) and PyArray_NDIM(ary) > 0: raise ValueError(             # <<<<<<<<<<<<<<
  *         "array size %d incompatible with vector local size %d" %
  *         (toInt(na), toInt(nv)) )
  */
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 358, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 358, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[5]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(5, 358, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":355
+  /* "PETSc/petscvec.pxi":361
  *         "array size %d incompatible with vector local size %d" %
  *         (toInt(na), toInt(nv)) )
  *     CHKERR( VecGetArray(self.vec, &vv) )             # <<<<<<<<<<<<<<
  *     try:
  *         if PyArray_NDIM(ary) == 0:
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 361, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":356
+  /* "PETSc/petscvec.pxi":362
  *         (toInt(na), toInt(nv)) )
  *     CHKERR( VecGetArray(self.vec, &vv) )
  *     try:             # <<<<<<<<<<<<<<
@@ -18758,7 +19395,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
  */
   /*try:*/ {
 
-    /* "PETSc/petscvec.pxi":357
+    /* "PETSc/petscvec.pxi":363
  *     CHKERR( VecGetArray(self.vec, &vv) )
  *     try:
  *         if PyArray_NDIM(ary) == 0:             # <<<<<<<<<<<<<<
@@ -18768,7 +19405,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
     __pyx_t_3 = ((PyArray_NDIM(__pyx_v_ary) == 0) != 0);
     if (__pyx_t_3) {
 
-      /* "PETSc/petscvec.pxi":358
+      /* "PETSc/petscvec.pxi":364
  *     try:
  *         if PyArray_NDIM(ary) == 0:
  *             for i from 0 <= i < nv:             # <<<<<<<<<<<<<<
@@ -18778,7 +19415,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
       __pyx_t_7 = __pyx_v_nv;
       for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_7; __pyx_v_i++) {
 
-        /* "PETSc/petscvec.pxi":359
+        /* "PETSc/petscvec.pxi":365
  *         if PyArray_NDIM(ary) == 0:
  *             for i from 0 <= i < nv:
  *                 vv[i] = va[0]             # <<<<<<<<<<<<<<
@@ -18787,23 +19424,31 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
  */
         (__pyx_v_vv[__pyx_v_i]) = (__pyx_v_va[0]);
       }
+
+      /* "PETSc/petscvec.pxi":363
+ *     CHKERR( VecGetArray(self.vec, &vv) )
+ *     try:
+ *         if PyArray_NDIM(ary) == 0:             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < nv:
+ *                 vv[i] = va[0]
+ */
       goto __pyx_L9;
     }
-    /*else*/ {
 
-      /* "PETSc/petscvec.pxi":361
+    /* "PETSc/petscvec.pxi":367
  *                 vv[i] = va[0]
  *         else:
  *             CHKERR( PetscMemcpy(vv, va, <size_t>nv*sizeof(PetscScalar)) )             # <<<<<<<<<<<<<<
  *     finally:
  *         CHKERR( VecRestoreArray(self.vec, &vv) )
  */
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMemcpy(__pyx_v_vv, __pyx_v_va, (((size_t)__pyx_v_nv) * (sizeof(PetscScalar))))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+    /*else*/ {
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMemcpy(__pyx_v_vv, __pyx_v_va, (((size_t)__pyx_v_nv) * (sizeof(PetscScalar))))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 367, __pyx_L7_error)
     }
     __pyx_L9:;
   }
 
-  /* "PETSc/petscvec.pxi":363
+  /* "PETSc/petscvec.pxi":369
  *             CHKERR( PetscMemcpy(vv, va, <size_t>nv*sizeof(PetscScalar)) )
  *     finally:
  *         CHKERR( VecRestoreArray(self.vec, &vv) )             # <<<<<<<<<<<<<<
@@ -18812,12 +19457,14 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 369, __pyx_L1_error)
       goto __pyx_L8;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L7_error:;
       __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -18831,8 +19478,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
       __Pyx_XGOTREF(__pyx_t_15);
       __pyx_t_2 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
-        __pyx_t_16 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_16 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
+        __pyx_t_16 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(5, 369, __pyx_L13_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
         __Pyx_XGIVEREF(__pyx_t_14);
@@ -18847,6 +19495,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
       __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9;
       goto __pyx_L1_error;
       __pyx_L13_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
         __Pyx_XGIVEREF(__pyx_t_14);
@@ -18862,7 +19511,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
     __pyx_L8:;
   }
 
-  /* "PETSc/petscvec.pxi":364
+  /* "PETSc/petscvec.pxi":370
  *     finally:
  *         CHKERR( VecRestoreArray(self.vec, &vv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -18872,7 +19521,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":347
+  /* "PETSc/petscvec.pxi":353
  *     return asarray(vec_getbuffer_w(self))
  * 
  * cdef inline int vec_setarray(Vec self, object o) except -1:             # <<<<<<<<<<<<<<
@@ -18893,7 +19542,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":366
+/* "PETSc/petscvec.pxi":372
  *     return 0
  * 
  * cdef object vec_getitem(Vec self, object i):             # <<<<<<<<<<<<<<
@@ -18917,13 +19566,10 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *(*__pyx_t_9)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_getitem", 0);
   __Pyx_INCREF(__pyx_v_i);
 
-  /* "PETSc/petscvec.pxi":367
+  /* "PETSc/petscvec.pxi":373
  * 
  * cdef object vec_getitem(Vec self, object i):
  *     cdef PetscInt N=0             # <<<<<<<<<<<<<<
@@ -18932,7 +19578,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/petscvec.pxi":368
+  /* "PETSc/petscvec.pxi":374
  * cdef object vec_getitem(Vec self, object i):
  *     cdef PetscInt N=0
  *     if i is Ellipsis:             # <<<<<<<<<<<<<<
@@ -18943,7 +19589,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":369
+    /* "PETSc/petscvec.pxi":375
  *     cdef PetscInt N=0
  *     if i is Ellipsis:
  *         return asarray(self)             # <<<<<<<<<<<<<<
@@ -18951,14 +19597,22 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
  *         CHKERR( VecGetSize(self.vec, &N) )
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 375, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/petscvec.pxi":374
+ * cdef object vec_getitem(Vec self, object i):
+ *     cdef PetscInt N=0
+ *     if i is Ellipsis:             # <<<<<<<<<<<<<<
+ *         return asarray(self)
+ *     if isinstance(i, slice):
+ */
   }
 
-  /* "PETSc/petscvec.pxi":370
+  /* "PETSc/petscvec.pxi":376
  *     if i is Ellipsis:
  *         return asarray(self)
  *     if isinstance(i, slice):             # <<<<<<<<<<<<<<
@@ -18969,25 +19623,25 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":371
+    /* "PETSc/petscvec.pxi":377
  *         return asarray(self)
  *     if isinstance(i, slice):
  *         CHKERR( VecGetSize(self.vec, &N) )             # <<<<<<<<<<<<<<
  *         start, stop, stride = i.indices(toInt(N))
  *         i = arange(start, stop, stride)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(5, 377, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":372
+    /* "PETSc/petscvec.pxi":378
  *     if isinstance(i, slice):
  *         CHKERR( VecGetSize(self.vec, &N) )
  *         start, stop, stride = i.indices(toInt(N))             # <<<<<<<<<<<<<<
  *         i = arange(start, stop, stride)
  *     return vecgetvalues(self.vec, i, None)
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_i, __pyx_n_s_indices); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_i, __pyx_n_s_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 378, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 378, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -19000,17 +19654,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 378, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 378, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
       __Pyx_GIVEREF(__pyx_t_6);
       PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_6);
       __pyx_t_6 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 378, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
@@ -19025,7 +19679,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(5, 378, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -19041,17 +19695,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 378, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 378, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 378, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       #endif
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 378, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -19061,7 +19715,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
       __Pyx_GOTREF(__pyx_t_8);
       index = 2; __pyx_t_6 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 3) < 0) __PYX_ERR(5, 378, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L6_unpacking_done;
@@ -19069,7 +19723,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(5, 378, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __pyx_v_start = __pyx_t_5;
@@ -19079,22 +19733,28 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
     __pyx_v_stride = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":373
+    /* "PETSc/petscvec.pxi":379
  *         CHKERR( VecGetSize(self.vec, &N) )
  *         start, stop, stride = i.indices(toInt(N))
  *         i = arange(start, stop, stride)             # <<<<<<<<<<<<<<
  *     return vecgetvalues(self.vec, i, None)
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 379, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L4;
+
+    /* "PETSc/petscvec.pxi":376
+ *     if i is Ellipsis:
+ *         return asarray(self)
+ *     if isinstance(i, slice):             # <<<<<<<<<<<<<<
+ *         CHKERR( VecGetSize(self.vec, &N) )
+ *         start, stop, stride = i.indices(toInt(N))
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscvec.pxi":374
+  /* "PETSc/petscvec.pxi":380
  *         start, stop, stride = i.indices(toInt(N))
  *         i = arange(start, stop, stride)
  *     return vecgetvalues(self.vec, i, None)             # <<<<<<<<<<<<<<
@@ -19102,13 +19762,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
  * cdef int vec_setitem(Vec self, object i, object v) except -1:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_vecgetvalues(__pyx_v_self->vec, __pyx_v_i, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_vecgetvalues(__pyx_v_self->vec, __pyx_v_i, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 380, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":366
+  /* "PETSc/petscvec.pxi":372
  *     return 0
  * 
  * cdef object vec_getitem(Vec self, object i):             # <<<<<<<<<<<<<<
@@ -19135,7 +19795,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":376
+/* "PETSc/petscvec.pxi":382
  *     return vecgetvalues(self.vec, i, None)
  * 
  * cdef int vec_setitem(Vec self, object i, object v) except -1:             # <<<<<<<<<<<<<<
@@ -19159,13 +19819,10 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *(*__pyx_t_9)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vec_setitem", 0);
   __Pyx_INCREF(__pyx_v_i);
 
-  /* "PETSc/petscvec.pxi":377
+  /* "PETSc/petscvec.pxi":383
  * 
  * cdef int vec_setitem(Vec self, object i, object v) except -1:
  *     cdef PetscInt N=0             # <<<<<<<<<<<<<<
@@ -19174,7 +19831,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/petscvec.pxi":378
+  /* "PETSc/petscvec.pxi":384
  * cdef int vec_setitem(Vec self, object i, object v) except -1:
  *     cdef PetscInt N=0
  *     if i is Ellipsis:             # <<<<<<<<<<<<<<
@@ -19185,19 +19842,27 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":379
+    /* "PETSc/petscvec.pxi":385
  *     cdef PetscInt N=0
  *     if i is Ellipsis:
  *         return vec_setarray(self, v)             # <<<<<<<<<<<<<<
  *     if isinstance(i, slice):
  *         CHKERR( VecGetSize(self.vec, &N) )
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_self, __pyx_v_v); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_self, __pyx_v_v); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 385, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
+
+    /* "PETSc/petscvec.pxi":384
+ * cdef int vec_setitem(Vec self, object i, object v) except -1:
+ *     cdef PetscInt N=0
+ *     if i is Ellipsis:             # <<<<<<<<<<<<<<
+ *         return vec_setarray(self, v)
+ *     if isinstance(i, slice):
+ */
   }
 
-  /* "PETSc/petscvec.pxi":380
+  /* "PETSc/petscvec.pxi":386
  *     if i is Ellipsis:
  *         return vec_setarray(self, v)
  *     if isinstance(i, slice):             # <<<<<<<<<<<<<<
@@ -19208,25 +19873,25 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":381
+    /* "PETSc/petscvec.pxi":387
  *         return vec_setarray(self, v)
  *     if isinstance(i, slice):
  *         CHKERR( VecGetSize(self.vec, &N) )             # <<<<<<<<<<<<<<
  *         start, stop, stride = i.indices(toInt(N))
  *         i = arange(start, stop, stride)
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 387, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":382
+    /* "PETSc/petscvec.pxi":388
  *     if isinstance(i, slice):
  *         CHKERR( VecGetSize(self.vec, &N) )
  *         start, stop, stride = i.indices(toInt(N))             # <<<<<<<<<<<<<<
  *         i = arange(start, stop, stride)
  *     vecsetvalues(self.vec, i, v, None, 0, 0)
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_i, __pyx_n_s_indices); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_i, __pyx_n_s_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 388, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 388, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -19239,17 +19904,17 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 388, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
       __Pyx_GIVEREF(__pyx_t_6);
       PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_6);
       __pyx_t_6 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
@@ -19264,7 +19929,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(5, 388, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -19280,17 +19945,17 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       #endif
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -19300,7 +19965,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
       __Pyx_GOTREF(__pyx_t_8);
       index = 2; __pyx_t_6 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 3) < 0) __PYX_ERR(5, 388, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L6_unpacking_done;
@@ -19308,7 +19973,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[5]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(5, 388, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __pyx_v_start = __pyx_t_5;
@@ -19318,31 +19983,37 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
     __pyx_v_stride = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":383
+    /* "PETSc/petscvec.pxi":389
  *         CHKERR( VecGetSize(self.vec, &N) )
  *         start, stop, stride = i.indices(toInt(N))
  *         i = arange(start, stop, stride)             # <<<<<<<<<<<<<<
  *     vecsetvalues(self.vec, i, v, None, 0, 0)
  *     return 0
  */
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 389, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L4;
+
+    /* "PETSc/petscvec.pxi":386
+ *     if i is Ellipsis:
+ *         return vec_setarray(self, v)
+ *     if isinstance(i, slice):             # <<<<<<<<<<<<<<
+ *         CHKERR( VecGetSize(self.vec, &N) )
+ *         start, stop, stride = i.indices(toInt(N))
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscvec.pxi":384
+  /* "PETSc/petscvec.pxi":390
  *         start, stop, stride = i.indices(toInt(N))
  *         i = arange(start, stop, stride)
  *     vecsetvalues(self.vec, i, v, None, 0, 0)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_i, __pyx_v_v, Py_None, 0, 0); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_i, __pyx_v_v, Py_None, 0, 0); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 390, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":385
+  /* "PETSc/petscvec.pxi":391
  *         i = arange(start, stop, stride)
  *     vecsetvalues(self.vec, i, v, None, 0, 0)
  *     return 0             # <<<<<<<<<<<<<<
@@ -19352,7 +20023,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":376
+  /* "PETSc/petscvec.pxi":382
  *     return vecgetvalues(self.vec, i, None)
  * 
  * cdef int vec_setitem(Vec self, object i, object v) except -1:             # <<<<<<<<<<<<<<
@@ -19378,7 +20049,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":397
+/* "PETSc/petscvec.pxi":403
  * # --------------------------------------------------------------------
  * 
  * cdef int Vec_AcquireArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:             # <<<<<<<<<<<<<<
@@ -19390,11 +20061,8 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
   int __pyx_r;
   int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
 
-  /* "PETSc/petscvec.pxi":398
+  /* "PETSc/petscvec.pxi":404
  * 
  * cdef int Vec_AcquireArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:
  *     if ro: CHKERR( VecGetArrayRead(v, <const_PetscScalar**>a) )             # <<<<<<<<<<<<<<
@@ -19403,23 +20071,23 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
  */
   __pyx_t_1 = (__pyx_v_ro != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetArrayRead(__pyx_v_v, ((const PetscScalar **)__pyx_v_a))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetArrayRead(__pyx_v_v, ((const PetscScalar **)__pyx_v_a))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 404, __pyx_L1_error)
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscvec.pxi":399
+  /* "PETSc/petscvec.pxi":405
  * cdef int Vec_AcquireArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:
  *     if ro: CHKERR( VecGetArrayRead(v, <const_PetscScalar**>a) )
  *     else:  CHKERR( VecGetArray(v, a) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetArray(__pyx_v_v, __pyx_v_a)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetArray(__pyx_v_v, __pyx_v_a)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 405, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":400
+  /* "PETSc/petscvec.pxi":406
  *     if ro: CHKERR( VecGetArrayRead(v, <const_PetscScalar**>a) )
  *     else:  CHKERR( VecGetArray(v, a) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -19429,7 +20097,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":397
+  /* "PETSc/petscvec.pxi":403
  * # --------------------------------------------------------------------
  * 
  * cdef int Vec_AcquireArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:             # <<<<<<<<<<<<<<
@@ -19453,7 +20121,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":402
+/* "PETSc/petscvec.pxi":408
  *     return 0
  * 
  * cdef int Vec_ReleaseArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:             # <<<<<<<<<<<<<<
@@ -19465,11 +20133,8 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
   int __pyx_r;
   int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
 
-  /* "PETSc/petscvec.pxi":403
+  /* "PETSc/petscvec.pxi":409
  * 
  * cdef int Vec_ReleaseArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:
  *     if ro: CHKERR( VecRestoreArrayRead(v, <const_PetscScalar**>a) )             # <<<<<<<<<<<<<<
@@ -19478,23 +20143,23 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
  */
   __pyx_t_1 = (__pyx_v_ro != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArrayRead(__pyx_v_v, ((const PetscScalar **)__pyx_v_a))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArrayRead(__pyx_v_v, ((const PetscScalar **)__pyx_v_a))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 409, __pyx_L1_error)
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscvec.pxi":404
+  /* "PETSc/petscvec.pxi":410
  * cdef int Vec_ReleaseArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:
  *     if ro: CHKERR( VecRestoreArrayRead(v, <const_PetscScalar**>a) )
  *     else:  CHKERR( VecRestoreArray(v, a) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_v, __pyx_v_a)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_v, __pyx_v_a)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 410, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":405
+  /* "PETSc/petscvec.pxi":411
  *     if ro: CHKERR( VecRestoreArrayRead(v, <const_PetscScalar**>a) )
  *     else:  CHKERR( VecRestoreArray(v, a) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -19504,7 +20169,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":402
+  /* "PETSc/petscvec.pxi":408
  *     return 0
  * 
  * cdef int Vec_ReleaseArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:             # <<<<<<<<<<<<<<
@@ -19528,7 +20193,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":415
+/* "PETSc/petscvec.pxi":421
  *     cdef bint hasarray
  * 
  *     def __cinit__(self, Vec vec not None, bint readonly=0):             # <<<<<<<<<<<<<<
@@ -19541,9 +20206,6 @@ static int __pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_1__cinit__(PyObject *__pyx_v_
 static int __pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
   int __pyx_v_readonly;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
@@ -19571,7 +20233,7 @@ static int __pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_1__cinit__(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(5, 421, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -19583,20 +20245,20 @@ static int __pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_1__cinit__(PyObject *__pyx_v_
     }
     __pyx_v_vec = ((struct PyPetscVecObject *)values[0]);
     if (values[1]) {
-      __pyx_v_readonly = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_readonly == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_readonly = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_readonly == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 421, __pyx_L3_error)
     } else {
       __pyx_v_readonly = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[5]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(5, 421, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._Vec_buffer.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(5, 421, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(((struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self), __pyx_v_vec, __pyx_v_readonly);
 
   /* function exit code */
@@ -19615,12 +20277,9 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
   Vec __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/petscvec.pxi":416
+  /* "PETSc/petscvec.pxi":422
  * 
  *     def __cinit__(self, Vec vec not None, bint readonly=0):
  *         cdef PetscVec v = vec.vec             # <<<<<<<<<<<<<<
@@ -19630,16 +20289,16 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
   __pyx_t_1 = __pyx_v_vec->vec;
   __pyx_v_v = __pyx_t_1;
 
-  /* "PETSc/petscvec.pxi":417
+  /* "PETSc/petscvec.pxi":423
  *     def __cinit__(self, Vec vec not None, bint readonly=0):
  *         cdef PetscVec v = vec.vec
  *         CHKERR( PetscINCREF(<PetscObject*>&v) )             # <<<<<<<<<<<<<<
  *         self.vec = v
  *         self.size = 0
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&__pyx_v_v)))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&__pyx_v_v)))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 423, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":418
+  /* "PETSc/petscvec.pxi":424
  *         cdef PetscVec v = vec.vec
  *         CHKERR( PetscINCREF(<PetscObject*>&v) )
  *         self.vec = v             # <<<<<<<<<<<<<<
@@ -19648,7 +20307,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
  */
   __pyx_v_self->vec = __pyx_v_v;
 
-  /* "PETSc/petscvec.pxi":419
+  /* "PETSc/petscvec.pxi":425
  *         CHKERR( PetscINCREF(<PetscObject*>&v) )
  *         self.vec = v
  *         self.size = 0             # <<<<<<<<<<<<<<
@@ -19657,7 +20316,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
  */
   __pyx_v_self->size = 0;
 
-  /* "PETSc/petscvec.pxi":420
+  /* "PETSc/petscvec.pxi":426
  *         self.vec = v
  *         self.size = 0
  *         self.data = NULL             # <<<<<<<<<<<<<<
@@ -19666,7 +20325,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
  */
   __pyx_v_self->data = NULL;
 
-  /* "PETSc/petscvec.pxi":421
+  /* "PETSc/petscvec.pxi":427
  *         self.size = 0
  *         self.data = NULL
  *         self.readonly = 1 if readonly else 0             # <<<<<<<<<<<<<<
@@ -19680,7 +20339,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
   }
   __pyx_v_self->readonly = __pyx_t_3;
 
-  /* "PETSc/petscvec.pxi":422
+  /* "PETSc/petscvec.pxi":428
  *         self.data = NULL
  *         self.readonly = 1 if readonly else 0
  *         self.hasarray = 0             # <<<<<<<<<<<<<<
@@ -19689,7 +20348,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
  */
   __pyx_v_self->hasarray = 0;
 
-  /* "PETSc/petscvec.pxi":415
+  /* "PETSc/petscvec.pxi":421
  *     cdef bint hasarray
  * 
  *     def __cinit__(self, Vec vec not None, bint readonly=0):             # <<<<<<<<<<<<<<
@@ -19708,7 +20367,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":424
+/* "PETSc/petscvec.pxi":430
  *         self.hasarray = 0
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -19732,12 +20391,9 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_2__dealloc__(struct __pyx_ob
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "PETSc/petscvec.pxi":425
+  /* "PETSc/petscvec.pxi":431
  * 
  *     def __dealloc__(self):
  *         if self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -19755,28 +20411,34 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_2__dealloc__(struct __pyx_ob
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":426
+    /* "PETSc/petscvec.pxi":432
  *     def __dealloc__(self):
  *         if self.hasarray and self.vec != NULL:
  *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)             # <<<<<<<<<<<<<<
  *         CHKERR( VecDestroy(&self.vec) )
  * 
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(__pyx_v_self->vec, (&__pyx_v_self->data), __pyx_v_self->readonly); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(__pyx_v_self->vec, (&__pyx_v_self->data), __pyx_v_self->readonly); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 432, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":431
+ * 
+ *     def __dealloc__(self):
+ *         if self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
+ *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)
+ *         CHKERR( VecDestroy(&self.vec) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":427
+  /* "PETSc/petscvec.pxi":433
  *         if self.hasarray and self.vec != NULL:
  *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)
  *         CHKERR( VecDestroy(&self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->vec))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->vec))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 433, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":424
+  /* "PETSc/petscvec.pxi":430
  *         self.hasarray = 0
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -19792,7 +20454,7 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_2__dealloc__(struct __pyx_ob
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/petscvec.pxi":431
+/* "PETSc/petscvec.pxi":437
  *     #
  * 
  *     cdef int acquire(self) nogil except -1:             # <<<<<<<<<<<<<<
@@ -19805,11 +20467,8 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
 
-  /* "PETSc/petscvec.pxi":432
+  /* "PETSc/petscvec.pxi":438
  * 
  *     cdef int acquire(self) nogil except -1:
  *         if not self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -19827,25 +20486,25 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":433
+    /* "PETSc/petscvec.pxi":439
  *     cdef int acquire(self) nogil except -1:
  *         if not self.hasarray and self.vec != NULL:
  *             CHKERR( VecGetLocalSize(self.vec, &self.size) )             # <<<<<<<<<<<<<<
  *             Vec_AcquireArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 1
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_self->size))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_self->size))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 439, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":434
+    /* "PETSc/petscvec.pxi":440
  *         if not self.hasarray and self.vec != NULL:
  *             CHKERR( VecGetLocalSize(self.vec, &self.size) )
  *             Vec_AcquireArray(self.vec, &self.data, self.readonly)             # <<<<<<<<<<<<<<
  *             self.hasarray = 1
  *         return 0
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(__pyx_v_self->vec, (&__pyx_v_self->data), __pyx_v_self->readonly); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(__pyx_v_self->vec, (&__pyx_v_self->data), __pyx_v_self->readonly); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 440, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":435
+    /* "PETSc/petscvec.pxi":441
  *             CHKERR( VecGetLocalSize(self.vec, &self.size) )
  *             Vec_AcquireArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 1             # <<<<<<<<<<<<<<
@@ -19853,11 +20512,17 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
  * 
  */
     __pyx_v_self->hasarray = 1;
-    goto __pyx_L3;
+
+    /* "PETSc/petscvec.pxi":438
+ * 
+ *     cdef int acquire(self) nogil except -1:
+ *         if not self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecGetLocalSize(self.vec, &self.size) )
+ *             Vec_AcquireArray(self.vec, &self.data, self.readonly)
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":436
+  /* "PETSc/petscvec.pxi":442
  *             Vec_AcquireArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 1
  *         return 0             # <<<<<<<<<<<<<<
@@ -19867,7 +20532,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":431
+  /* "PETSc/petscvec.pxi":437
  *     #
  * 
  *     cdef int acquire(self) nogil except -1:             # <<<<<<<<<<<<<<
@@ -19891,7 +20556,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":438
+/* "PETSc/petscvec.pxi":444
  *         return 0
  * 
  *     cdef int release(self) nogil except -1:             # <<<<<<<<<<<<<<
@@ -19904,11 +20569,8 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
 
-  /* "PETSc/petscvec.pxi":439
+  /* "PETSc/petscvec.pxi":445
  * 
  *     cdef int release(self) nogil except -1:
  *         if self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -19926,7 +20588,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":440
+    /* "PETSc/petscvec.pxi":446
  *     cdef int release(self) nogil except -1:
  *         if self.hasarray and self.vec != NULL:
  *             self.size = 0             # <<<<<<<<<<<<<<
@@ -19935,16 +20597,16 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
  */
     __pyx_v_self->size = 0;
 
-    /* "PETSc/petscvec.pxi":441
+    /* "PETSc/petscvec.pxi":447
  *         if self.hasarray and self.vec != NULL:
  *             self.size = 0
  *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)             # <<<<<<<<<<<<<<
  *             self.hasarray = 0
  *         return 0
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(__pyx_v_self->vec, (&__pyx_v_self->data), __pyx_v_self->readonly); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(__pyx_v_self->vec, (&__pyx_v_self->data), __pyx_v_self->readonly); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(5, 447, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":442
+    /* "PETSc/petscvec.pxi":448
  *             self.size = 0
  *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 0             # <<<<<<<<<<<<<<
@@ -19952,11 +20614,17 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
  * 
  */
     __pyx_v_self->hasarray = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/petscvec.pxi":445
+ * 
+ *     cdef int release(self) nogil except -1:
+ *         if self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
+ *             self.size = 0
+ *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":443
+  /* "PETSc/petscvec.pxi":449
  *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 0
  *         return 0             # <<<<<<<<<<<<<<
@@ -19966,7 +20634,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":438
+  /* "PETSc/petscvec.pxi":444
  *         return 0
  * 
  *     cdef int release(self) nogil except -1:             # <<<<<<<<<<<<<<
@@ -19990,7 +20658,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":447
+/* "PETSc/petscvec.pxi":453
  *     # buffer interface (PEP 3118)
  * 
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
@@ -20002,30 +20670,27 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquirebuffer(struct __pyx_obj
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("acquirebuffer", 0);
 
-  /* "PETSc/petscvec.pxi":448
+  /* "PETSc/petscvec.pxi":454
  * 
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:
  *         self.acquire()             # <<<<<<<<<<<<<<
  *         PyPetscBuffer_FillInfo(view, <void*>self.data, self.size,
  *                                c's', self.readonly, flags)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(5, 454, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":449
+  /* "PETSc/petscvec.pxi":455
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:
  *         self.acquire()
  *         PyPetscBuffer_FillInfo(view, <void*>self.data, self.size,             # <<<<<<<<<<<<<<
  *                                c's', self.readonly, flags)
  *         view.obj = self
  */
-  __pyx_t_1 = PyPetscBuffer_FillInfo(__pyx_v_view, ((void *)__pyx_v_self->data), __pyx_v_self->size, 's', __pyx_v_self->readonly, __pyx_v_flags); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyPetscBuffer_FillInfo(__pyx_v_view, ((void *)__pyx_v_self->data), __pyx_v_self->size, 's', __pyx_v_self->readonly, __pyx_v_flags); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(5, 455, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":451
+  /* "PETSc/petscvec.pxi":457
  *         PyPetscBuffer_FillInfo(view, <void*>self.data, self.size,
  *                                c's', self.readonly, flags)
  *         view.obj = self             # <<<<<<<<<<<<<<
@@ -20038,7 +20703,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquirebuffer(struct __pyx_obj
   __Pyx_DECREF(__pyx_v_view->obj);
   __pyx_v_view->obj = ((PyObject *)__pyx_v_self);
 
-  /* "PETSc/petscvec.pxi":452
+  /* "PETSc/petscvec.pxi":458
  *                                c's', self.readonly, flags)
  *         view.obj = self
  *         return 0             # <<<<<<<<<<<<<<
@@ -20048,7 +20713,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquirebuffer(struct __pyx_obj
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":447
+  /* "PETSc/petscvec.pxi":453
  *     # buffer interface (PEP 3118)
  * 
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
@@ -20065,7 +20730,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquirebuffer(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":454
+/* "PETSc/petscvec.pxi":460
  *         return 0
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:             # <<<<<<<<<<<<<<
@@ -20077,12 +20742,9 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_releasebuffer(struct __pyx_obj
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("releasebuffer", 0);
 
-  /* "PETSc/petscvec.pxi":455
+  /* "PETSc/petscvec.pxi":461
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:
  *         PyPetscBuffer_Release(view)             # <<<<<<<<<<<<<<
@@ -20091,16 +20753,16 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_releasebuffer(struct __pyx_obj
  */
   PyPetscBuffer_Release(__pyx_v_view);
 
-  /* "PETSc/petscvec.pxi":456
+  /* "PETSc/petscvec.pxi":462
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:
  *         PyPetscBuffer_Release(view)
  *         self.release()             # <<<<<<<<<<<<<<
  *         return 0
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(5, 462, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":457
+  /* "PETSc/petscvec.pxi":463
  *         PyPetscBuffer_Release(view)
  *         self.release()
  *         return 0             # <<<<<<<<<<<<<<
@@ -20110,7 +20772,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_releasebuffer(struct __pyx_obj
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":454
+  /* "PETSc/petscvec.pxi":460
  *         return 0
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:             # <<<<<<<<<<<<<<
@@ -20127,7 +20789,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_releasebuffer(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":459
+/* "PETSc/petscvec.pxi":465
  *         return 0
  * 
  *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
@@ -20152,25 +20814,22 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_4__getbuffer__(struct __pyx_o
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getbuffer__", 0);
   if (__pyx_v_view != NULL) {
     __pyx_v_view->obj = Py_None; __Pyx_INCREF(Py_None);
     __Pyx_GIVEREF(__pyx_v_view->obj);
   }
 
-  /* "PETSc/petscvec.pxi":460
+  /* "PETSc/petscvec.pxi":466
  * 
  *     def __getbuffer__(self, Py_buffer *view, int flags):
  *         self.acquirebuffer(view, flags)             # <<<<<<<<<<<<<<
  * 
  *     def __releasebuffer__(self, Py_buffer *view):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquirebuffer(__pyx_v_self, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquirebuffer(__pyx_v_self, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(5, 466, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":459
+  /* "PETSc/petscvec.pxi":465
  *         return 0
  * 
  *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
@@ -20199,7 +20858,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_4__getbuffer__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":462
+/* "PETSc/petscvec.pxi":468
  *         self.acquirebuffer(view, flags)
  * 
  *     def __releasebuffer__(self, Py_buffer *view):             # <<<<<<<<<<<<<<
@@ -20221,21 +20880,18 @@ static CYTHON_UNUSED void __pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_7__releasebuff
 static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_6__releasebuffer__(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_self, Py_buffer *__pyx_v_view) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__releasebuffer__", 0);
 
-  /* "PETSc/petscvec.pxi":463
+  /* "PETSc/petscvec.pxi":469
  * 
  *     def __releasebuffer__(self, Py_buffer *view):
  *         self.releasebuffer(view)             # <<<<<<<<<<<<<<
  * 
  *     # 'with' statement (PEP 343)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->releasebuffer(__pyx_v_self, __pyx_v_view); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->releasebuffer(__pyx_v_self, __pyx_v_view); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(5, 469, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":462
+  /* "PETSc/petscvec.pxi":468
  *         self.acquirebuffer(view, flags)
  * 
  *     def __releasebuffer__(self, Py_buffer *view):             # <<<<<<<<<<<<<<
@@ -20251,7 +20907,7 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_6__releasebuffer__(struct __
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/petscvec.pxi":467
+/* "PETSc/petscvec.pxi":473
  *     # 'with' statement (PEP 343)
  * 
  *     cdef object enter(self):             # <<<<<<<<<<<<<<
@@ -20264,21 +20920,18 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_enter(struct __pyx_obj_8
   __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("enter", 0);
 
-  /* "PETSc/petscvec.pxi":468
+  /* "PETSc/petscvec.pxi":474
  * 
  *     cdef object enter(self):
  *         self.acquire()             # <<<<<<<<<<<<<<
  *         return asarray(self)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(5, 474, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":469
+  /* "PETSc/petscvec.pxi":475
  *     cdef object enter(self):
  *         self.acquire()
  *         return asarray(self)             # <<<<<<<<<<<<<<
@@ -20286,13 +20939,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_enter(struct __pyx_obj_8
  *     cdef object exit(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 475, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":467
+  /* "PETSc/petscvec.pxi":473
  *     # 'with' statement (PEP 343)
  * 
  *     cdef object enter(self):             # <<<<<<<<<<<<<<
@@ -20311,7 +20964,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_enter(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":471
+/* "PETSc/petscvec.pxi":477
  *         return asarray(self)
  * 
  *     cdef object exit(self):             # <<<<<<<<<<<<<<
@@ -20323,21 +20976,18 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_exit(struct __pyx_obj_8p
   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("exit", 0);
 
-  /* "PETSc/petscvec.pxi":472
+  /* "PETSc/petscvec.pxi":478
  * 
  *     cdef object exit(self):
  *         self.release()             # <<<<<<<<<<<<<<
  *         return None
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(5, 478, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":473
+  /* "PETSc/petscvec.pxi":479
  *     cdef object exit(self):
  *         self.release()
  *         return None             # <<<<<<<<<<<<<<
@@ -20349,7 +20999,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_exit(struct __pyx_obj_8p
   __pyx_r = Py_None;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":471
+  /* "PETSc/petscvec.pxi":477
  *         return asarray(self)
  * 
  *     cdef object exit(self):             # <<<<<<<<<<<<<<
@@ -20367,7 +21017,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_exit(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":475
+/* "PETSc/petscvec.pxi":481
  *         return None
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -20396,12 +21046,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_8__enter__(struct __pyx
   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("__enter__", 0);
 
-  /* "PETSc/petscvec.pxi":476
+  /* "PETSc/petscvec.pxi":482
  * 
  *     def __enter__(self):
  *         return self.enter()             # <<<<<<<<<<<<<<
@@ -20409,13 +21056,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_8__enter__(struct __pyx
  *     def __exit__(self, *exc):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->enter(__pyx_v_self); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->enter(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 482, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":475
+  /* "PETSc/petscvec.pxi":481
  *         return None
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -20434,7 +21081,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_8__enter__(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":478
+/* "PETSc/petscvec.pxi":484
  *         return self.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -20465,12 +21112,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_10__exit__(struct __pyx
   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("__exit__", 0);
 
-  /* "PETSc/petscvec.pxi":479
+  /* "PETSc/petscvec.pxi":485
  * 
  *     def __exit__(self, *exc):
  *         return self.exit()             # <<<<<<<<<<<<<<
@@ -20478,13 +21122,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_10__exit__(struct __pyx
  *     # buffer interface (legacy)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->exit(__pyx_v_self); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->exit(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 485, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":478
+  /* "PETSc/petscvec.pxi":484
  *         return self.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -20503,7 +21147,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_10__exit__(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":483
+/* "PETSc/petscvec.pxi":489
  *     # buffer interface (legacy)
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:             # <<<<<<<<<<<<<<
@@ -20518,12 +21162,9 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
   int __pyx_t_1;
   int __pyx_t_2;
   PetscInt __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getbuffer", 0);
 
-  /* "PETSc/petscvec.pxi":484
+  /* "PETSc/petscvec.pxi":490
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -20532,7 +21173,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/petscvec.pxi":485
+  /* "PETSc/petscvec.pxi":491
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
  *         cdef PetscInt n = 0
  *         if p != NULL:             # <<<<<<<<<<<<<<
@@ -20542,16 +21183,16 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
   __pyx_t_1 = ((__pyx_v_p != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":486
+    /* "PETSc/petscvec.pxi":492
  *         cdef PetscInt n = 0
  *         if p != NULL:
  *             self.acquire()             # <<<<<<<<<<<<<<
  *             p[0] = <void*>self.data
  *             n = self.size
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 492, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":487
+    /* "PETSc/petscvec.pxi":493
  *         if p != NULL:
  *             self.acquire()
  *             p[0] = <void*>self.data             # <<<<<<<<<<<<<<
@@ -20560,7 +21201,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
  */
     (__pyx_v_p[0]) = ((void *)__pyx_v_self->data);
 
-    /* "PETSc/petscvec.pxi":488
+    /* "PETSc/petscvec.pxi":494
  *             self.acquire()
  *             p[0] = <void*>self.data
  *             n = self.size             # <<<<<<<<<<<<<<
@@ -20569,10 +21210,18 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
  */
     __pyx_t_3 = __pyx_v_self->size;
     __pyx_v_n = __pyx_t_3;
+
+    /* "PETSc/petscvec.pxi":491
+ *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
+ *         cdef PetscInt n = 0
+ *         if p != NULL:             # <<<<<<<<<<<<<<
+ *             self.acquire()
+ *             p[0] = <void*>self.data
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":489
+  /* "PETSc/petscvec.pxi":495
  *             p[0] = <void*>self.data
  *             n = self.size
  *         elif self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -20582,19 +21231,26 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
   __pyx_t_1 = ((__pyx_v_self->vec != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":490
+    /* "PETSc/petscvec.pxi":496
  *             n = self.size
  *         elif self.vec != NULL:
  *             CHKERR( VecGetLocalSize(self.vec, &n) )             # <<<<<<<<<<<<<<
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscScalar))
  * 
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 496, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":495
+ *             p[0] = <void*>self.data
+ *             n = self.size
+ *         elif self.vec != NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecGetLocalSize(self.vec, &n) )
+ *         return <Py_ssize_t>(<size_t>n*sizeof(PetscScalar))
+ */
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":491
+  /* "PETSc/petscvec.pxi":497
  *         elif self.vec != NULL:
  *             CHKERR( VecGetLocalSize(self.vec, &n) )
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscScalar))             # <<<<<<<<<<<<<<
@@ -20604,7 +21260,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
   __pyx_r = ((Py_ssize_t)(((size_t)__pyx_v_n) * (sizeof(PetscScalar))));
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":483
+  /* "PETSc/petscvec.pxi":489
  *     # buffer interface (legacy)
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:             # <<<<<<<<<<<<<<
@@ -20615,13 +21271,13 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._Vec_buffer.getbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __pyx_r = -1L;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":493
+/* "PETSc/petscvec.pxi":499
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscScalar))
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
@@ -20650,12 +21306,9 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(stru
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   Py_ssize_t __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getsegcount__", 0);
 
-  /* "PETSc/petscvec.pxi":494
+  /* "PETSc/petscvec.pxi":500
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):
  *         if lenp != NULL:             # <<<<<<<<<<<<<<
@@ -20665,20 +21318,26 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(stru
   __pyx_t_1 = ((__pyx_v_lenp != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":495
+    /* "PETSc/petscvec.pxi":501
  *     def __getsegcount__(self, Py_ssize_t *lenp):
  *         if lenp != NULL:
  *             lenp[0] = self.getbuffer(NULL)             # <<<<<<<<<<<<<<
  *         return 1
  * 
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, NULL); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, NULL); if (unlikely(__pyx_t_2 == -1L)) __PYX_ERR(5, 501, __pyx_L1_error)
     (__pyx_v_lenp[0]) = __pyx_t_2;
-    goto __pyx_L3;
+
+    /* "PETSc/petscvec.pxi":500
+ * 
+ *     def __getsegcount__(self, Py_ssize_t *lenp):
+ *         if lenp != NULL:             # <<<<<<<<<<<<<<
+ *             lenp[0] = self.getbuffer(NULL)
+ *         return 1
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":496
+  /* "PETSc/petscvec.pxi":502
  *         if lenp != NULL:
  *             lenp[0] = self.getbuffer(NULL)
  *         return 1             # <<<<<<<<<<<<<<
@@ -20688,7 +21347,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(stru
   __pyx_r = 1;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":493
+  /* "PETSc/petscvec.pxi":499
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscScalar))
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
@@ -20706,7 +21365,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(stru
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "PETSc/petscvec.pxi":498
+/* "PETSc/petscvec.pxi":504
  *         return 1
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -20736,12 +21395,9 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_14__getreadbuffer__(st
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   Py_ssize_t __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getreadbuffer__", 0);
 
-  /* "PETSc/petscvec.pxi":499
+  /* "PETSc/petscvec.pxi":505
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
  *         if idx != 0: raise SystemError(             # <<<<<<<<<<<<<<
@@ -20750,25 +21406,25 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_14__getreadbuffer__(st
  */
   __pyx_t_1 = ((__pyx_v_idx != 0) != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 505, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[5]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(5, 505, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":501
+  /* "PETSc/petscvec.pxi":507
  *         if idx != 0: raise SystemError(
  *             "accessing non-existent buffer segment")
  *         return self.getbuffer(p)             # <<<<<<<<<<<<<<
  * 
  *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, __pyx_v_p); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, __pyx_v_p); if (unlikely(__pyx_t_3 == -1L)) __PYX_ERR(5, 507, __pyx_L1_error)
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":498
+  /* "PETSc/petscvec.pxi":504
  *         return 1
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -20787,7 +21443,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_14__getreadbuffer__(st
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "PETSc/petscvec.pxi":503
+/* "PETSc/petscvec.pxi":509
  *         return self.getbuffer(p)
  * 
  *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -20817,12 +21473,9 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_16__getwritebuffer__(s
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   Py_ssize_t __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getwritebuffer__", 0);
 
-  /* "PETSc/petscvec.pxi":504
+  /* "PETSc/petscvec.pxi":510
  * 
  *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
  *         if idx != 0: raise SystemError(             # <<<<<<<<<<<<<<
@@ -20831,14 +21484,14 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_16__getwritebuffer__(s
  */
   __pyx_t_1 = ((__pyx_v_idx != 0) != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 510, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[5]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(5, 510, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":506
+  /* "PETSc/petscvec.pxi":512
  *         if idx != 0: raise SystemError(
  *             "accessing non-existent buffer segment")
  *         if self.readonly: raise TypeError(             # <<<<<<<<<<<<<<
@@ -20847,25 +21500,25 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_16__getwritebuffer__(s
  */
   __pyx_t_1 = (__pyx_v_self->readonly != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[5]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(5, 512, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":508
+  /* "PETSc/petscvec.pxi":514
  *         if self.readonly: raise TypeError(
  *             "Object is not writable.")
  *         return self.getbuffer(p)             # <<<<<<<<<<<<<<
  * 
  *     # NumPy array interface (legacy)
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, __pyx_v_p); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, __pyx_v_p); if (unlikely(__pyx_t_3 == -1L)) __PYX_ERR(5, 514, __pyx_L1_error)
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":503
+  /* "PETSc/petscvec.pxi":509
  *         return self.getbuffer(p)
  * 
  *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -20884,7 +21537,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_16__getwritebuffer__(s
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "PETSc/petscvec.pxi":513
+/* "PETSc/petscvec.pxi":519
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20917,12 +21570,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
   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("__get__", 0);
 
-  /* "PETSc/petscvec.pxi":514
+  /* "PETSc/petscvec.pxi":520
  *     property __array_interface__:
  *         def __get__(self):
  *             cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -20931,7 +21581,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/petscvec.pxi":515
+  /* "PETSc/petscvec.pxi":521
  *         def __get__(self):
  *             cdef PetscInt n = 0
  *             if self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -20941,54 +21591,60 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
   __pyx_t_1 = ((__pyx_v_self->vec != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":516
+    /* "PETSc/petscvec.pxi":522
  *             cdef PetscInt n = 0
  *             if self.vec != NULL:
  *                 CHKERR( VecGetLocalSize(self.vec, &n) )             # <<<<<<<<<<<<<<
  *             cdef object size = toInt(n)
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_SCALAR)
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 522, __pyx_L1_error)
+
+    /* "PETSc/petscvec.pxi":521
+ *         def __get__(self):
+ *             cdef PetscInt n = 0
+ *             if self.vec != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( VecGetLocalSize(self.vec, &n) )
+ *             cdef object size = toInt(n)
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":517
+  /* "PETSc/petscvec.pxi":523
  *             if self.vec != NULL:
  *                 CHKERR( VecGetLocalSize(self.vec, &n) )
  *             cdef object size = toInt(n)             # <<<<<<<<<<<<<<
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_SCALAR)
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 523, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_size = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscvec.pxi":518
+  /* "PETSc/petscvec.pxi":524
  *                 CHKERR( VecGetLocalSize(self.vec, &n) )
  *             cdef object size = toInt(n)
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_SCALAR)             # <<<<<<<<<<<<<<
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
  *             return dict(version=3,
  */
-  __pyx_t_3 = ((PyObject *)PyArray_DescrFromType(NPY_PETSC_SCALAR)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)PyArray_DescrFromType(NPY_PETSC_SCALAR)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 524, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscvec.pxi":519
+  /* "PETSc/petscvec.pxi":525
  *             cdef object size = toInt(n)
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_SCALAR)
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)             # <<<<<<<<<<<<<<
  *             return dict(version=3,
  *                         data=self,
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_descr), __pyx_n_s_kind); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_descr), __pyx_n_s_kind); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_descr), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_descr), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -20996,14 +21652,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_c_d, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_c_d, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_4))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_4)->tp_name), 0))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyString_CheckExact(__pyx_t_4))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(5, 525, __pyx_L1_error)
   __pyx_v_typestr = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscvec.pxi":520
+  /* "PETSc/petscvec.pxi":526
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_SCALAR)
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
  *             return dict(version=3,             # <<<<<<<<<<<<<<
@@ -21011,47 +21667,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
  *                         shape=(size,),
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_version, __pyx_int_3) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_version, __pyx_int_3) < 0) __PYX_ERR(5, 526, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":521
+  /* "PETSc/petscvec.pxi":527
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
  *             return dict(version=3,
  *                         data=self,             # <<<<<<<<<<<<<<
  *                         shape=(size,),
  *                         typestr=typestr)
  */
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_data, ((PyObject *)__pyx_v_self)) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_data, ((PyObject *)__pyx_v_self)) < 0) __PYX_ERR(5, 526, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":522
+  /* "PETSc/petscvec.pxi":528
  *             return dict(version=3,
  *                         data=self,
  *                         shape=(size,),             # <<<<<<<<<<<<<<
  *                         typestr=typestr)
  * 
  */
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_size);
   __Pyx_GIVEREF(__pyx_v_size);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_size);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_shape, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(5, 526, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/petscvec.pxi":523
+  /* "PETSc/petscvec.pxi":529
  *                         data=self,
  *                         shape=(size,),
  *                         typestr=typestr)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_typestr, __pyx_v_typestr) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_typestr, __pyx_v_typestr) < 0) __PYX_ERR(5, 526, __pyx_L1_error)
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":513
+  /* "PETSc/petscvec.pxi":519
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -21075,7 +21731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":534
+/* "PETSc/petscvec.pxi":540
  *     cdef Vec lvec
  * 
  *     def __init__(self, Vec gvec not None):             # <<<<<<<<<<<<<<
@@ -21087,9 +21743,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
 static int __pyx_pw_8petsc4py_5PETSc_14_Vec_LocalForm_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static int __pyx_pw_8petsc4py_5PETSc_14_Vec_LocalForm_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_gvec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
@@ -21111,7 +21764,7 @@ static int __pyx_pw_8petsc4py_5PETSc_14_Vec_LocalForm_1__init__(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, "__init__") < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(5, 540, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -21122,13 +21775,13 @@ static int __pyx_pw_8petsc4py_5PETSc_14_Vec_LocalForm_1__init__(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[5]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(5, 540, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._Vec_LocalForm.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) __PYX_ERR(5, 540, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(((struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *)__pyx_v_self), __pyx_v_gvec);
 
   /* function exit code */
@@ -21144,12 +21797,9 @@ static int __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(struct __pyx_obj_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "PETSc/petscvec.pxi":535
+  /* "PETSc/petscvec.pxi":541
  * 
  *     def __init__(self, Vec gvec not None):
  *         self.gvec = gvec             # <<<<<<<<<<<<<<
@@ -21162,14 +21812,14 @@ static int __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(struct __pyx_obj_
   __Pyx_DECREF(((PyObject *)__pyx_v_self->gvec));
   __pyx_v_self->gvec = __pyx_v_gvec;
 
-  /* "PETSc/petscvec.pxi":536
+  /* "PETSc/petscvec.pxi":542
  *     def __init__(self, Vec gvec not None):
  *         self.gvec = gvec
  *         self.lvec = Vec()             # <<<<<<<<<<<<<<
  * 
  *     def __enter__(self):
  */
-  __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[5]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 542, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->lvec);
@@ -21177,7 +21827,7 @@ static int __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(struct __pyx_obj_
   __pyx_v_self->lvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":534
+  /* "PETSc/petscvec.pxi":540
  *     cdef Vec lvec
  * 
  *     def __init__(self, Vec gvec not None):             # <<<<<<<<<<<<<<
@@ -21197,7 +21847,7 @@ static int __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":538
+/* "PETSc/petscvec.pxi":544
  *         self.lvec = Vec()
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -21228,12 +21878,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_2__enter__(struct __
   __Pyx_RefNannyDeclarations
   Vec __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "PETSc/petscvec.pxi":539
+  /* "PETSc/petscvec.pxi":545
  * 
  *     def __enter__(self):
  *         cdef PetscVec gvec = self.gvec.vec             # <<<<<<<<<<<<<<
@@ -21243,16 +21890,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_2__enter__(struct __
   __pyx_t_1 = __pyx_v_self->gvec->vec;
   __pyx_v_gvec = __pyx_t_1;
 
-  /* "PETSc/petscvec.pxi":540
+  /* "PETSc/petscvec.pxi":546
  *     def __enter__(self):
  *         cdef PetscVec gvec = self.gvec.vec
  *         CHKERR( VecGhostGetLocalForm(gvec, &self.lvec.vec) )             # <<<<<<<<<<<<<<
  *         return self.lvec
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostGetLocalForm(__pyx_v_gvec, (&__pyx_v_self->lvec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostGetLocalForm(__pyx_v_gvec, (&__pyx_v_self->lvec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 546, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":541
+  /* "PETSc/petscvec.pxi":547
  *         cdef PetscVec gvec = self.gvec.vec
  *         CHKERR( VecGhostGetLocalForm(gvec, &self.lvec.vec) )
  *         return self.lvec             # <<<<<<<<<<<<<<
@@ -21264,7 +21911,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_2__enter__(struct __
   __pyx_r = ((PyObject *)__pyx_v_self->lvec);
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":538
+  /* "PETSc/petscvec.pxi":544
  *         self.lvec = Vec()
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -21282,7 +21929,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_2__enter__(struct __
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":543
+/* "PETSc/petscvec.pxi":549
  *         return self.lvec
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -21315,12 +21962,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __p
   __Pyx_RefNannyDeclarations
   Vec __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "PETSc/petscvec.pxi":544
+  /* "PETSc/petscvec.pxi":550
  * 
  *     def __exit__(self, *exc):
  *         cdef PetscVec gvec = self.gvec.vec             # <<<<<<<<<<<<<<
@@ -21330,16 +21974,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __p
   __pyx_t_1 = __pyx_v_self->gvec->vec;
   __pyx_v_gvec = __pyx_t_1;
 
-  /* "PETSc/petscvec.pxi":545
+  /* "PETSc/petscvec.pxi":551
  *     def __exit__(self, *exc):
  *         cdef PetscVec gvec = self.gvec.vec
  *         CHKERR( VecGhostRestoreLocalForm(gvec, &self.lvec.vec) )             # <<<<<<<<<<<<<<
  *         self.lvec.vec = NULL
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostRestoreLocalForm(__pyx_v_gvec, (&__pyx_v_self->lvec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostRestoreLocalForm(__pyx_v_gvec, (&__pyx_v_self->lvec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(5, 551, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":546
+  /* "PETSc/petscvec.pxi":552
  *         cdef PetscVec gvec = self.gvec.vec
  *         CHKERR( VecGhostRestoreLocalForm(gvec, &self.lvec.vec) )
  *         self.lvec.vec = NULL             # <<<<<<<<<<<<<<
@@ -21348,7 +21992,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __p
  */
   __pyx_v_self->lvec->vec = NULL;
 
-  /* "PETSc/petscvec.pxi":543
+  /* "PETSc/petscvec.pxi":549
  *         return self.lvec
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -21368,7 +22012,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __p
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":382
+/* "PETSc/petscmat.pxi":412
  *     int MatGetNearNullSpace(PetscMat,PetscNullSpace*)
  * 
  * cdef inline NullSpace ref_NullSpace(PetscNullSpace nsp):             # <<<<<<<<<<<<<<
@@ -21382,19 +22026,16 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
   __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_NullSpace", 0);
 
-  /* "PETSc/petscmat.pxi":383
+  /* "PETSc/petscmat.pxi":413
  * 
  * cdef inline NullSpace ref_NullSpace(PetscNullSpace nsp):
  *     cdef NullSpace ob = <NullSpace> NullSpace()             # <<<<<<<<<<<<<<
  *     ob.nsp = nsp
  *     PetscINCREF(ob.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_NullSpace)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_NullSpace), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 413, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -21402,7 +22043,7 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
   __pyx_v_ob = ((struct PyPetscNullSpaceObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscmat.pxi":384
+  /* "PETSc/petscmat.pxi":414
  * cdef inline NullSpace ref_NullSpace(PetscNullSpace nsp):
  *     cdef NullSpace ob = <NullSpace> NullSpace()
  *     ob.nsp = nsp             # <<<<<<<<<<<<<<
@@ -21411,7 +22052,7 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
  */
   __pyx_v_ob->nsp = __pyx_v_nsp;
 
-  /* "PETSc/petscmat.pxi":385
+  /* "PETSc/petscmat.pxi":415
  *     cdef NullSpace ob = <NullSpace> NullSpace()
  *     ob.nsp = nsp
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -21420,7 +22061,7 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petscmat.pxi":386
+  /* "PETSc/petscmat.pxi":416
  *     ob.nsp = nsp
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -21432,7 +22073,7 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":382
+  /* "PETSc/petscmat.pxi":412
  *     int MatGetNearNullSpace(PetscMat,PetscNullSpace*)
  * 
  * cdef inline NullSpace ref_NullSpace(PetscNullSpace nsp):             # <<<<<<<<<<<<<<
@@ -21453,7 +22094,7 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":388
+/* "PETSc/petscmat.pxi":418
  *     return ob
  * 
  * cdef int NullSpace_Function(             # <<<<<<<<<<<<<<
@@ -21475,46 +22116,43 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("NullSpace_Function", 0);
 
-  /* "PETSc/petscmat.pxi":393
+  /* "PETSc/petscmat.pxi":423
  *     void *         ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef NullSpace nsp = ref_NullSpace(n)             # <<<<<<<<<<<<<<
  *     cdef Vec vec = ref_Vec(v)
  *     (function, args, kargs) = nsp.get_attr('__function__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_NullSpace(__pyx_v_n)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_NullSpace(__pyx_v_n)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_nsp = ((struct PyPetscNullSpaceObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":394
+  /* "PETSc/petscmat.pxi":424
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef NullSpace nsp = ref_NullSpace(n)
  *     cdef Vec vec = ref_Vec(v)             # <<<<<<<<<<<<<<
  *     (function, args, kargs) = nsp.get_attr('__function__')
  *     function(nsp, vec, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_v)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_v)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 424, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":395
+  /* "PETSc/petscmat.pxi":425
  *     cdef NullSpace nsp = ref_NullSpace(n)
  *     cdef Vec vec = ref_Vec(v)
  *     (function, args, kargs) = nsp.get_attr('__function__')             # <<<<<<<<<<<<<<
  *     function(nsp, vec, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *)__pyx_v_nsp->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_nsp), __pyx_k_function); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *)__pyx_v_nsp->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_nsp), ((char *)"__function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 425, __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;
@@ -21526,7 +22164,7 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 425, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -21542,17 +22180,17 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
     __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 = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 425, __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 = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 425, __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 = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 425, __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 = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 425, __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;
@@ -21562,7 +22200,7 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
     __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 = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(6, 425, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -21570,7 +22208,7 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
     __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 = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 425, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_function = __pyx_t_2;
@@ -21580,14 +22218,14 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscmat.pxi":396
+  /* "PETSc/petscmat.pxi":426
  *     cdef Vec vec = ref_Vec(v)
  *     (function, args, kargs) = nsp.get_attr('__function__')
  *     function(nsp, vec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 426, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_nsp));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_nsp));
@@ -21595,30 +22233,30 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
   __Pyx_INCREF(((PyObject *)__pyx_v_vec));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_vec));
   PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_vec));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 426, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 426, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 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 = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 426, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 426, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 426, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 426, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":397
+  /* "PETSc/petscmat.pxi":427
  *     (function, args, kargs) = nsp.get_attr('__function__')
  *     function(nsp, vec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -21628,7 +22266,7 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":388
+  /* "PETSc/petscmat.pxi":418
  *     return ob
  * 
  * cdef int NullSpace_Function(             # <<<<<<<<<<<<<<
@@ -21658,7 +22296,7 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":401
+/* "PETSc/petscmat.pxi":431
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline Mat ref_Mat(PetscMat mat):             # <<<<<<<<<<<<<<
@@ -21672,19 +22310,16 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_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);
 
-  /* "PETSc/petscmat.pxi":402
+  /* "PETSc/petscmat.pxi":432
  * 
  * 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 = 402; __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(6, 432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -21692,7 +22327,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
   __pyx_v_ob = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscmat.pxi":403
+  /* "PETSc/petscmat.pxi":433
  * cdef inline Mat ref_Mat(PetscMat mat):
  *     cdef Mat ob = <Mat> Mat()
  *     ob.mat = mat             # <<<<<<<<<<<<<<
@@ -21701,7 +22336,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
  */
   __pyx_v_ob->mat = __pyx_v_mat;
 
-  /* "PETSc/petscmat.pxi":404
+  /* "PETSc/petscmat.pxi":434
  *     cdef Mat ob = <Mat> Mat()
  *     ob.mat = mat
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -21710,7 +22345,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petscmat.pxi":405
+  /* "PETSc/petscmat.pxi":435
  *     ob.mat = mat
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -21722,7 +22357,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":401
+  /* "PETSc/petscmat.pxi":431
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline Mat ref_Mat(PetscMat mat):             # <<<<<<<<<<<<<<
@@ -21743,7 +22378,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":411
+/* "PETSc/petscmat.pxi":441
  * # unary operations
  * 
  * cdef Mat mat_pos(Mat self):             # <<<<<<<<<<<<<<
@@ -21759,12 +22394,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_pos(struct PyPetscM
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mat_pos", 0);
 
-  /* "PETSc/petscmat.pxi":412
+  /* "PETSc/petscmat.pxi":442
  * 
  * cdef Mat mat_pos(Mat self):
  *     cdef Mat mat = type(self)()             # <<<<<<<<<<<<<<
@@ -21783,27 +22415,27 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_pos(struct PyPetscM
     }
   }
   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[6]; __pyx_lineno = 412; __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(6, 442, __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[6]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 442, __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_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(6, 442, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":413
+  /* "PETSc/petscmat.pxi":443
  * cdef Mat mat_pos(Mat self):
  *     cdef Mat mat = type(self)()
  *     CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &mat.mat) )             # <<<<<<<<<<<<<<
  *     return mat
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, MAT_COPY_VALUES, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, MAT_COPY_VALUES, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(6, 443, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":414
+  /* "PETSc/petscmat.pxi":444
  *     cdef Mat mat = type(self)()
  *     CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &mat.mat) )
  *     return mat             # <<<<<<<<<<<<<<
@@ -21815,7 +22447,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_pos(struct PyPetscM
   __pyx_r = __pyx_v_mat;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":411
+  /* "PETSc/petscmat.pxi":441
  * # unary operations
  * 
  * cdef Mat mat_pos(Mat self):             # <<<<<<<<<<<<<<
@@ -21837,7 +22469,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_pos(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":416
+/* "PETSc/petscmat.pxi":446
  *     return mat
  * 
  * cdef Mat mat_neg(Mat self):             # <<<<<<<<<<<<<<
@@ -21852,19 +22484,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_neg(struct PyPetscM
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mat_neg", 0);
 
-  /* "PETSc/petscmat.pxi":417
+  /* "PETSc/petscmat.pxi":447
  * 
  * cdef Mat mat_neg(Mat self):
  *     cdef Mat mat = <Mat> mat_pos(self)             # <<<<<<<<<<<<<<
  *     CHKERR( MatScale(mat.mat, -1) )
  *     return mat
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 447, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -21872,16 +22501,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_neg(struct PyPetscM
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscmat.pxi":418
+  /* "PETSc/petscmat.pxi":448
  * cdef Mat mat_neg(Mat self):
  *     cdef Mat mat = <Mat> mat_pos(self)
  *     CHKERR( MatScale(mat.mat, -1) )             # <<<<<<<<<<<<<<
  *     return mat
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatScale(__pyx_v_mat->mat, -1.0)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatScale(__pyx_v_mat->mat, -1.0)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(6, 448, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":419
+  /* "PETSc/petscmat.pxi":449
  *     cdef Mat mat = <Mat> mat_pos(self)
  *     CHKERR( MatScale(mat.mat, -1) )
  *     return mat             # <<<<<<<<<<<<<<
@@ -21893,7 +22522,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_neg(struct PyPetscM
   __pyx_r = __pyx_v_mat;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":416
+  /* "PETSc/petscmat.pxi":446
  *     return mat
  * 
  * cdef Mat mat_neg(Mat self):             # <<<<<<<<<<<<<<
@@ -21914,7 +22543,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_neg(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":423
+/* "PETSc/petscmat.pxi":453
  * # inplace binary operations
  * 
  * cdef Mat mat_iadd(Mat self, other):             # <<<<<<<<<<<<<<
@@ -21924,7 +22553,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_neg(struct PyPetscM
 
 static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_v_alpha = NULL;
-  CYTHON_UNUSED PyObject *__pyx_v_mat = NULL;
+  PyObject *__pyx_v_mat = NULL;
   struct PyPetscMatObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -21937,30 +22566,27 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   int __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("mat_iadd", 0);
 
-  /* "PETSc/petscmat.pxi":424
+  /* "PETSc/petscmat.pxi":454
  * 
  * cdef Mat mat_iadd(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
  *         self.axpy(1, other)
  *     elif isinstance(other, (tuple, list)):
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":425
+    /* "PETSc/petscmat.pxi":455
  * cdef Mat mat_iadd(Mat self, other):
  *     if isinstance(other, Mat):
  *         self.axpy(1, other)             # <<<<<<<<<<<<<<
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = other
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_axpy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_axpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 455, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     __pyx_t_6 = 0;
@@ -21974,7 +22600,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 455, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     if (__pyx_t_5) {
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
@@ -21985,20 +22611,28 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
     __Pyx_INCREF(__pyx_v_other);
     __Pyx_GIVEREF(__pyx_v_other);
     PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_other);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 455, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/petscmat.pxi":454
+ * 
+ * cdef Mat mat_iadd(Mat self, other):
+ *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
+ *         self.axpy(1, other)
+ *     elif isinstance(other, (tuple, list)):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":426
+  /* "PETSc/petscmat.pxi":456
  *     if isinstance(other, Mat):
  *         self.axpy(1, other)
  *     elif isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
  *         alpha, mat = other
- *         self.axpy(alpha, other)
+ *         self.axpy(alpha, mat)
  */
   __pyx_t_1 = PyTuple_Check(__pyx_v_other); 
   __pyx_t_8 = (__pyx_t_1 != 0);
@@ -22014,11 +22648,11 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":427
+    /* "PETSc/petscmat.pxi":457
  *         self.axpy(1, other)
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = other             # <<<<<<<<<<<<<<
- *         self.axpy(alpha, other)
+ *         self.axpy(alpha, mat)
  *     elif isinstance(other, Vec):
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_other))) || (PyList_CheckExact(__pyx_v_other))) {
@@ -22031,7 +22665,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 457, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -22044,21 +22678,21 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 457, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 457, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 457, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext;
       index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
       index = 1; __pyx_t_4 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 2) < 0) __PYX_ERR(6, 457, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L7_unpacking_done;
@@ -22066,7 +22700,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 457, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_alpha = __pyx_t_3;
@@ -22074,14 +22708,14 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
     __pyx_v_mat = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":428
+    /* "PETSc/petscmat.pxi":458
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = other
- *         self.axpy(alpha, other)             # <<<<<<<<<<<<<<
+ *         self.axpy(alpha, mat)             # <<<<<<<<<<<<<<
  *     elif isinstance(other, Vec):
  *         self.setDiagonal(other, PETSC_ADD_VALUES)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_axpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_axpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 458, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_7 = NULL;
     __pyx_t_6 = 0;
@@ -22095,7 +22729,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 458, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     if (__pyx_t_7) {
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -22103,38 +22737,46 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
     __Pyx_INCREF(__pyx_v_alpha);
     __Pyx_GIVEREF(__pyx_v_alpha);
     PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_alpha);
-    __Pyx_INCREF(__pyx_v_other);
-    __Pyx_GIVEREF(__pyx_v_other);
-    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_v_other);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_INCREF(__pyx_v_mat);
+    __Pyx_GIVEREF(__pyx_v_mat);
+    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_v_mat);
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 458, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+    /* "PETSc/petscmat.pxi":456
+ *     if isinstance(other, Mat):
+ *         self.axpy(1, other)
+ *     elif isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
+ *         alpha, mat = other
+ *         self.axpy(alpha, mat)
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":429
+  /* "PETSc/petscmat.pxi":459
  *         alpha, mat = other
- *         self.axpy(alpha, other)
+ *         self.axpy(alpha, mat)
  *     elif isinstance(other, Vec):             # <<<<<<<<<<<<<<
  *         self.setDiagonal(other, PETSC_ADD_VALUES)
  *     else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":430
- *         self.axpy(alpha, other)
+    /* "PETSc/petscmat.pxi":460
+ *         self.axpy(alpha, mat)
  *     elif isinstance(other, Vec):
  *         self.setDiagonal(other, PETSC_ADD_VALUES)             # <<<<<<<<<<<<<<
  *     else:
  *         self.shift(other)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDiagonal); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDiagonal); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 460, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyInt_FromLong(ADD_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyInt_From_InsertMode(ADD_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 460, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_7 = NULL;
     __pyx_t_6 = 0;
@@ -22148,7 +22790,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 460, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_7) {
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -22159,23 +22801,31 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_6, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 460, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+    /* "PETSc/petscmat.pxi":459
+ *         alpha, mat = other
+ *         self.axpy(alpha, mat)
+ *     elif isinstance(other, Vec):             # <<<<<<<<<<<<<<
+ *         self.setDiagonal(other, PETSC_ADD_VALUES)
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":432
+  /* "PETSc/petscmat.pxi":462
  *         self.setDiagonal(other, PETSC_ADD_VALUES)
  *     else:
  *         self.shift(other)             # <<<<<<<<<<<<<<
  *     return self
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_shift); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_shift); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 462, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_10 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -22188,16 +22838,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
       }
     }
     if (!__pyx_t_10) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_other); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 462, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 462, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_10); __pyx_t_10 = NULL;
       __Pyx_INCREF(__pyx_v_other);
       __Pyx_GIVEREF(__pyx_v_other);
       PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_other);
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 462, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
@@ -22206,7 +22856,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":433
+  /* "PETSc/petscmat.pxi":463
  *     else:
  *         self.shift(other)
  *     return self             # <<<<<<<<<<<<<<
@@ -22218,7 +22868,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":423
+  /* "PETSc/petscmat.pxi":453
  * # inplace binary operations
  * 
  * cdef Mat mat_iadd(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22243,7 +22893,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":435
+/* "PETSc/petscmat.pxi":465
  *     return self
  * 
  * cdef Mat mat_isub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22253,7 +22903,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
 
 static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_v_alpha = NULL;
-  CYTHON_UNUSED PyObject *__pyx_v_mat = NULL;
+  PyObject *__pyx_v_mat = NULL;
   PyObject *__pyx_v_diag = NULL;
   struct PyPetscMatObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -22267,30 +22917,27 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   int __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("mat_isub", 0);
 
-  /* "PETSc/petscmat.pxi":436
+  /* "PETSc/petscmat.pxi":466
  * 
  * cdef Mat mat_isub(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
  *         self.axpy(-1, other)
  *     elif isinstance(other, (tuple, list)):
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":437
+    /* "PETSc/petscmat.pxi":467
  * cdef Mat mat_isub(Mat self, other):
  *     if isinstance(other, Mat):
  *         self.axpy(-1, other)             # <<<<<<<<<<<<<<
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = other
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_axpy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_axpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 467, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     __pyx_t_6 = 0;
@@ -22304,7 +22951,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 467, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     if (__pyx_t_5) {
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
@@ -22315,20 +22962,28 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
     __Pyx_INCREF(__pyx_v_other);
     __Pyx_GIVEREF(__pyx_v_other);
     PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_other);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 467, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/petscmat.pxi":466
+ * 
+ * cdef Mat mat_isub(Mat self, other):
+ *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
+ *         self.axpy(-1, other)
+ *     elif isinstance(other, (tuple, list)):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":438
+  /* "PETSc/petscmat.pxi":468
  *     if isinstance(other, Mat):
  *         self.axpy(-1, other)
  *     elif isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
  *         alpha, mat = other
- *         self.axpy(-alpha, other)
+ *         self.axpy(-alpha, mat)
  */
   __pyx_t_1 = PyTuple_Check(__pyx_v_other); 
   __pyx_t_8 = (__pyx_t_1 != 0);
@@ -22344,11 +22999,11 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":439
+    /* "PETSc/petscmat.pxi":469
  *         self.axpy(-1, other)
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = other             # <<<<<<<<<<<<<<
- *         self.axpy(-alpha, other)
+ *         self.axpy(-alpha, mat)
  *     elif isinstance(other, Vec):
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_other))) || (PyList_CheckExact(__pyx_v_other))) {
@@ -22361,7 +23016,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 469, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -22374,21 +23029,21 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 469, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 469, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 469, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext;
       index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
       index = 1; __pyx_t_4 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 2) < 0) __PYX_ERR(6, 469, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L7_unpacking_done;
@@ -22396,7 +23051,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 469, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_alpha = __pyx_t_3;
@@ -22404,16 +23059,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
     __pyx_v_mat = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":440
+    /* "PETSc/petscmat.pxi":470
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = other
- *         self.axpy(-alpha, other)             # <<<<<<<<<<<<<<
+ *         self.axpy(-alpha, mat)             # <<<<<<<<<<<<<<
  *     elif isinstance(other, Vec):
  *         diag = other.copy()
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_axpy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_axpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 470, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = PyNumber_Negative(__pyx_v_alpha); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyNumber_Negative(__pyx_v_alpha); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 470, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_5 = NULL;
     __pyx_t_6 = 0;
@@ -22427,44 +23082,52 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_10 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 470, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     if (__pyx_t_5) {
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); __pyx_t_5 = NULL;
     }
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_6, __pyx_t_7);
-    __Pyx_INCREF(__pyx_v_other);
-    __Pyx_GIVEREF(__pyx_v_other);
-    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_6, __pyx_v_other);
+    __Pyx_INCREF(__pyx_v_mat);
+    __Pyx_GIVEREF(__pyx_v_mat);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_6, __pyx_v_mat);
     __pyx_t_7 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 470, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+    /* "PETSc/petscmat.pxi":468
+ *     if isinstance(other, Mat):
+ *         self.axpy(-1, other)
+ *     elif isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
+ *         alpha, mat = other
+ *         self.axpy(-alpha, mat)
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":441
+  /* "PETSc/petscmat.pxi":471
  *         alpha, mat = other
- *         self.axpy(-alpha, other)
+ *         self.axpy(-alpha, mat)
  *     elif isinstance(other, Vec):             # <<<<<<<<<<<<<<
  *         diag = other.copy()
  *         diag.scale(-1)
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":442
- *         self.axpy(-alpha, other)
+    /* "PETSc/petscmat.pxi":472
+ *         self.axpy(-alpha, mat)
  *     elif isinstance(other, Vec):
  *         diag = other.copy()             # <<<<<<<<<<<<<<
  *         diag.scale(-1)
  *         self.setDiagonal(diag, PETSC_ADD_VALUES)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 472, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_10 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -22477,40 +23140,40 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
       }
     }
     if (__pyx_t_10) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 472, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     } else {
-      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 472, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_diag = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":443
+    /* "PETSc/petscmat.pxi":473
  *     elif isinstance(other, Vec):
  *         diag = other.copy()
  *         diag.scale(-1)             # <<<<<<<<<<<<<<
  *         self.setDiagonal(diag, PETSC_ADD_VALUES)
  *         diag.destroy()
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_diag, __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_diag, __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 473, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 473, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":444
+    /* "PETSc/petscmat.pxi":474
  *         diag = other.copy()
  *         diag.scale(-1)
  *         self.setDiagonal(diag, PETSC_ADD_VALUES)             # <<<<<<<<<<<<<<
  *         diag.destroy()
  *     else:
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDiagonal); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDiagonal); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 474, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_10 = PyInt_FromLong(ADD_VALUES); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = __Pyx_PyInt_From_InsertMode(ADD_VALUES); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 474, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __pyx_t_7 = NULL;
     __pyx_t_6 = 0;
@@ -22524,7 +23187,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 474, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     if (__pyx_t_7) {
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -22535,20 +23198,20 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
     __Pyx_GIVEREF(__pyx_t_10);
     PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_10);
     __pyx_t_10 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 474, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __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;
 
-    /* "PETSc/petscmat.pxi":445
+    /* "PETSc/petscmat.pxi":475
  *         diag.scale(-1)
  *         self.setDiagonal(diag, PETSC_ADD_VALUES)
  *         diag.destroy()             # <<<<<<<<<<<<<<
  *     else:
  *         self.shift(other)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_diag, __pyx_n_s_destroy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_diag, __pyx_n_s_destroy); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 475, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -22561,26 +23224,34 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
       }
     }
     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[6]; __pyx_lineno = 445; __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(6, 475, __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[6]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 475, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/petscmat.pxi":471
+ *         alpha, mat = other
+ *         self.axpy(-alpha, mat)
+ *     elif isinstance(other, Vec):             # <<<<<<<<<<<<<<
+ *         diag = other.copy()
+ *         diag.scale(-1)
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":447
+  /* "PETSc/petscmat.pxi":477
  *         diag.destroy()
  *     else:
  *         self.shift(other)             # <<<<<<<<<<<<<<
  *     return self
  * 
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_shift); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_shift); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 477, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -22593,16 +23264,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 477, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 477, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); __pyx_t_5 = NULL;
       __Pyx_INCREF(__pyx_v_other);
       __Pyx_GIVEREF(__pyx_v_other);
       PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_v_other);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 477, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
@@ -22611,7 +23282,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":448
+  /* "PETSc/petscmat.pxi":478
  *     else:
  *         self.shift(other)
  *     return self             # <<<<<<<<<<<<<<
@@ -22623,7 +23294,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":435
+  /* "PETSc/petscmat.pxi":465
  *     return self
  * 
  * cdef Mat mat_isub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22649,7 +23320,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":450
+/* "PETSc/petscmat.pxi":480
  *     return self
  * 
  * cdef Mat mat_imul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22671,12 +23342,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   PyObject *(*__pyx_t_7)(PyObject *);
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mat_imul", 0);
 
-  /* "PETSc/petscmat.pxi":451
+  /* "PETSc/petscmat.pxi":481
  * 
  * cdef Mat mat_imul(Mat self, other):
  *     if (isinstance(other, tuple) or             # <<<<<<<<<<<<<<
@@ -22691,7 +23359,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":452
+  /* "PETSc/petscmat.pxi":482
  * cdef Mat mat_imul(Mat self, other):
  *     if (isinstance(other, tuple) or
  *         isinstance(other, list)):             # <<<<<<<<<<<<<<
@@ -22702,9 +23370,17 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   __pyx_t_2 = (__pyx_t_3 != 0);
   __pyx_t_1 = __pyx_t_2;
   __pyx_L4_bool_binop_done:;
+
+  /* "PETSc/petscmat.pxi":481
+ * 
+ * cdef Mat mat_imul(Mat self, other):
+ *     if (isinstance(other, tuple) or             # <<<<<<<<<<<<<<
+ *         isinstance(other, list)):
+ *         L, R = other
+ */
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":453
+    /* "PETSc/petscmat.pxi":483
  *     if (isinstance(other, tuple) or
  *         isinstance(other, list)):
  *         L, R = other             # <<<<<<<<<<<<<<
@@ -22721,7 +23397,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 483, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -22734,21 +23410,21 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 483, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 483, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 483, __pyx_L1_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_L6_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_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(6, 483, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L7_unpacking_done;
@@ -22756,7 +23432,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 483, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_L = __pyx_t_4;
@@ -22764,14 +23440,14 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
     __pyx_v_R = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":454
+    /* "PETSc/petscmat.pxi":484
  *         isinstance(other, list)):
  *         L, R = other
  *         self.diagonalScale(L, R)             # <<<<<<<<<<<<<<
  *     else:
  *         self.scale(other)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_diagonalScale); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_diagonalScale); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 484, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = NULL;
     __pyx_t_8 = 0;
@@ -22785,7 +23461,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
         __pyx_t_8 = 1;
       }
     }
-    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 484, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     if (__pyx_t_6) {
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6); __pyx_t_6 = NULL;
@@ -22796,23 +23472,31 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
     __Pyx_INCREF(__pyx_v_R);
     __Pyx_GIVEREF(__pyx_v_R);
     PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_R);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 484, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+    /* "PETSc/petscmat.pxi":481
+ * 
+ * cdef Mat mat_imul(Mat self, other):
+ *     if (isinstance(other, tuple) or             # <<<<<<<<<<<<<<
+ *         isinstance(other, list)):
+ *         L, R = other
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":456
+  /* "PETSc/petscmat.pxi":486
  *         self.diagonalScale(L, R)
  *     else:
  *         self.scale(other)             # <<<<<<<<<<<<<<
  *     return self
  * 
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 486, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_9 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -22825,16 +23509,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
       }
     }
     if (!__pyx_t_9) {
-      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 486, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 486, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9); __pyx_t_9 = NULL;
       __Pyx_INCREF(__pyx_v_other);
       __Pyx_GIVEREF(__pyx_v_other);
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_other);
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 486, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
@@ -22843,7 +23527,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":457
+  /* "PETSc/petscmat.pxi":487
  *     else:
  *         self.scale(other)
  *     return self             # <<<<<<<<<<<<<<
@@ -22855,7 +23539,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":450
+  /* "PETSc/petscmat.pxi":480
  *     return self
  * 
  * cdef Mat mat_imul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22879,7 +23563,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":459
+/* "PETSc/petscmat.pxi":489
  *     return self
  * 
  * cdef Mat mat_idiv(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22901,12 +23585,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
   PyObject *(*__pyx_t_7)(PyObject *);
   Py_ssize_t __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mat_idiv", 0);
 
-  /* "PETSc/petscmat.pxi":460
+  /* "PETSc/petscmat.pxi":490
  * 
  * cdef Mat mat_idiv(Mat self, other):
  *     if isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -22927,7 +23608,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":461
+    /* "PETSc/petscmat.pxi":491
  * cdef Mat mat_idiv(Mat self, other):
  *     if isinstance(other, (tuple, list)):
  *         L, R = other             # <<<<<<<<<<<<<<
@@ -22944,7 +23625,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 491, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -22957,21 +23638,21 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 491, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 491, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 491, __pyx_L1_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_L6_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_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(6, 491, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L7_unpacking_done;
@@ -22979,7 +23660,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 491, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_L = __pyx_t_4;
@@ -22987,25 +23668,25 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
     __pyx_v_R = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":462
+    /* "PETSc/petscmat.pxi":492
  *     if isinstance(other, (tuple, list)):
  *         L, R = other
  *         if isinstance(L, Vec):             # <<<<<<<<<<<<<<
  *             L = L.copy()
  *             L.reciprocal()
  */
-    __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_L, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+    __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_L, __pyx_ptype_8petsc4py_5PETSc_Vec); 
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "PETSc/petscmat.pxi":463
+      /* "PETSc/petscmat.pxi":493
  *         L, R = other
  *         if isinstance(L, Vec):
  *             L = L.copy()             # <<<<<<<<<<<<<<
  *             L.reciprocal()
  *         if isinstance(R, Vec):
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_L, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_L, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 493, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -23018,24 +23699,24 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 493, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 493, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_L, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "PETSc/petscmat.pxi":464
+      /* "PETSc/petscmat.pxi":494
  *         if isinstance(L, Vec):
  *             L = L.copy()
  *             L.reciprocal()             # <<<<<<<<<<<<<<
  *         if isinstance(R, Vec):
  *             R = R.copy()
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_L, __pyx_n_s_reciprocal); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_L, __pyx_n_s_reciprocal); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 494, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -23048,37 +23729,43 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 494, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 494, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L8;
+
+      /* "PETSc/petscmat.pxi":492
+ *     if isinstance(other, (tuple, list)):
+ *         L, R = other
+ *         if isinstance(L, Vec):             # <<<<<<<<<<<<<<
+ *             L = L.copy()
+ *             L.reciprocal()
+ */
     }
-    __pyx_L8:;
 
-    /* "PETSc/petscmat.pxi":465
+    /* "PETSc/petscmat.pxi":495
  *             L = L.copy()
  *             L.reciprocal()
  *         if isinstance(R, Vec):             # <<<<<<<<<<<<<<
  *             R = R.copy()
  *             R.reciprocal()
  */
-    __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_R, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+    __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_R, __pyx_ptype_8petsc4py_5PETSc_Vec); 
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "PETSc/petscmat.pxi":466
+      /* "PETSc/petscmat.pxi":496
  *             L.reciprocal()
  *         if isinstance(R, Vec):
  *             R = R.copy()             # <<<<<<<<<<<<<<
  *             R.reciprocal()
  *         self.diagonalScale(L, R)
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_R, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_R, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 496, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -23091,24 +23778,24 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 496, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 496, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_R, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "PETSc/petscmat.pxi":467
+      /* "PETSc/petscmat.pxi":497
  *         if isinstance(R, Vec):
  *             R = R.copy()
  *             R.reciprocal()             # <<<<<<<<<<<<<<
  *         self.diagonalScale(L, R)
  *     else:
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_R, __pyx_n_s_reciprocal); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_R, __pyx_n_s_reciprocal); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 497, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -23121,26 +23808,32 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 497, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 497, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L9;
+
+      /* "PETSc/petscmat.pxi":495
+ *             L = L.copy()
+ *             L.reciprocal()
+ *         if isinstance(R, Vec):             # <<<<<<<<<<<<<<
+ *             R = R.copy()
+ *             R.reciprocal()
+ */
     }
-    __pyx_L9:;
 
-    /* "PETSc/petscmat.pxi":468
+    /* "PETSc/petscmat.pxi":498
  *             R = R.copy()
  *             R.reciprocal()
  *         self.diagonalScale(L, R)             # <<<<<<<<<<<<<<
  *     else:
  *         self.scale(other)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_diagonalScale); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_diagonalScale); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 498, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = NULL;
     __pyx_t_8 = 0;
@@ -23154,7 +23847,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
         __pyx_t_8 = 1;
       }
     }
-    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 498, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     if (__pyx_t_6) {
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6); __pyx_t_6 = NULL;
@@ -23165,23 +23858,31 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
     __Pyx_INCREF(__pyx_v_R);
     __Pyx_GIVEREF(__pyx_v_R);
     PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_R);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 498, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+    /* "PETSc/petscmat.pxi":490
+ * 
+ * cdef Mat mat_idiv(Mat self, other):
+ *     if isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
+ *         L, R = other
+ *         if isinstance(L, Vec):
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":470
+  /* "PETSc/petscmat.pxi":500
  *         self.diagonalScale(L, R)
  *     else:
  *         self.scale(other)             # <<<<<<<<<<<<<<
  *     return self
  * 
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 500, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_9 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -23194,16 +23895,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
       }
     }
     if (!__pyx_t_9) {
-      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 500, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 500, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9); __pyx_t_9 = NULL;
       __Pyx_INCREF(__pyx_v_other);
       __Pyx_GIVEREF(__pyx_v_other);
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_other);
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 500, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
@@ -23212,7 +23913,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":471
+  /* "PETSc/petscmat.pxi":501
  *     else:
  *         self.scale(other)
  *     return self             # <<<<<<<<<<<<<<
@@ -23224,7 +23925,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":459
+  /* "PETSc/petscmat.pxi":489
  *     return self
  * 
  * cdef Mat mat_idiv(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23248,7 +23949,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":475
+/* "PETSc/petscmat.pxi":505
  * # binary operations
  * 
  * cdef Mat mat_add(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23261,12 +23962,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_add(struct PyPetscM
   __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("mat_add", 0);
 
-  /* "PETSc/petscmat.pxi":476
+  /* "PETSc/petscmat.pxi":506
  * 
  * cdef Mat mat_add(Mat self, other):
  *     return mat_iadd(mat_pos(self), other)             # <<<<<<<<<<<<<<
@@ -23274,16 +23972,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_add(struct PyPetscM
  * cdef Mat mat_sub(Mat self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 506, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_iadd(((struct PyPetscMatObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_iadd(((struct PyPetscMatObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 506, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":475
+  /* "PETSc/petscmat.pxi":505
  * # binary operations
  * 
  * cdef Mat mat_add(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23303,7 +24001,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_add(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":478
+/* "PETSc/petscmat.pxi":508
  *     return mat_iadd(mat_pos(self), other)
  * 
  * cdef Mat mat_sub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23316,12 +24014,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_sub(struct PyPetscM
   __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("mat_sub", 0);
 
-  /* "PETSc/petscmat.pxi":479
+  /* "PETSc/petscmat.pxi":509
  * 
  * cdef Mat mat_sub(Mat self, other):
  *     return mat_isub(mat_pos(self), other)             # <<<<<<<<<<<<<<
@@ -23329,16 +24024,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_sub(struct PyPetscM
  * cdef Mat mat_mul(Mat self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_isub(((struct PyPetscMatObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_isub(((struct PyPetscMatObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":478
+  /* "PETSc/petscmat.pxi":508
  *     return mat_iadd(mat_pos(self), other)
  * 
  * cdef Mat mat_sub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23358,7 +24053,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_sub(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":481
+/* "PETSc/petscmat.pxi":511
  *     return mat_isub(mat_pos(self), other)
  * 
  * cdef Mat mat_mul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23375,23 +24070,20 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
   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("mat_mul", 0);
 
-  /* "PETSc/petscmat.pxi":482
+  /* "PETSc/petscmat.pxi":512
  * 
  * cdef Mat mat_mul(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
  *         return self.matMult(other)
  *     else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":483
+    /* "PETSc/petscmat.pxi":513
  * cdef Mat mat_mul(Mat self, other):
  *     if isinstance(other, Mat):
  *         return self.matMult(other)             # <<<<<<<<<<<<<<
@@ -23399,7 +24091,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
  *         return mat_imul(mat_pos(self), other)
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_matMult); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_matMult); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 513, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -23412,38 +24104,46 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 513, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 513, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
       __Pyx_INCREF(__pyx_v_other);
       __Pyx_GIVEREF(__pyx_v_other);
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_other);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 513, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(6, 513, __pyx_L1_error)
     __pyx_r = ((struct PyPetscMatObject *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/petscmat.pxi":512
+ * 
+ * cdef Mat mat_mul(Mat self, other):
+ *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
+ *         return self.matMult(other)
+ *     else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":485
+  /* "PETSc/petscmat.pxi":515
  *         return self.matMult(other)
  *     else:
  *         return mat_imul(mat_pos(self), other)             # <<<<<<<<<<<<<<
  * 
  * cdef Vec mat_mul_vec(Mat self, Vec other):
  */
+  /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 515, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_imul(((struct PyPetscMatObject *)__pyx_t_3), __pyx_v_other)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_imul(((struct PyPetscMatObject *)__pyx_t_3), __pyx_v_other)); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 515, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = ((struct PyPetscMatObject *)__pyx_t_4);
@@ -23451,7 +24151,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":481
+  /* "PETSc/petscmat.pxi":511
  *     return mat_isub(mat_pos(self), other)
  * 
  * cdef Mat mat_mul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23473,7 +24173,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":487
+/* "PETSc/petscmat.pxi":517
  *         return mat_imul(mat_pos(self), other)
  * 
  * cdef Vec mat_mul_vec(Mat self, Vec other):             # <<<<<<<<<<<<<<
@@ -23490,19 +24190,16 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
   PyObject *__pyx_t_3 = NULL;
   Py_ssize_t __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mat_mul_vec", 0);
 
-  /* "PETSc/petscmat.pxi":488
+  /* "PETSc/petscmat.pxi":518
  * 
  * cdef Vec mat_mul_vec(Mat self, Vec other):
  *     cdef Vec result = self.createVecLeft()             # <<<<<<<<<<<<<<
  *     self.mult(other, result)
  *     return result
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -23515,25 +24212,25 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
     }
   }
   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[6]; __pyx_lineno = 488; __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(6, 518, __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[6]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 518, __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_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(6, 518, __pyx_L1_error)
   __pyx_v_result = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":489
+  /* "PETSc/petscmat.pxi":519
  * cdef Vec mat_mul_vec(Mat self, Vec other):
  *     cdef Vec result = self.createVecLeft()
  *     self.mult(other, result)             # <<<<<<<<<<<<<<
  *     return result
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_mult); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_mult); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 519, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
@@ -23547,7 +24244,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
       __pyx_t_4 = 1;
     }
   }
-  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 519, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   if (__pyx_t_3) {
     __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
@@ -23558,13 +24255,13 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_result));
   PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, ((PyObject *)__pyx_v_result));
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 519, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":490
+  /* "PETSc/petscmat.pxi":520
  *     cdef Vec result = self.createVecLeft()
  *     self.mult(other, result)
  *     return result             # <<<<<<<<<<<<<<
@@ -23576,7 +24273,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":487
+  /* "PETSc/petscmat.pxi":517
  *         return mat_imul(mat_pos(self), other)
  * 
  * cdef Vec mat_mul_vec(Mat self, Vec other):             # <<<<<<<<<<<<<<
@@ -23599,7 +24296,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":492
+/* "PETSc/petscmat.pxi":522
  *     return result
  * 
  * cdef Mat mat_div(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23612,12 +24309,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_div(struct PyPetscM
   __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("mat_div", 0);
 
-  /* "PETSc/petscmat.pxi":493
+  /* "PETSc/petscmat.pxi":523
  * 
  * cdef Mat mat_div(Mat self, other):
  *     return mat_idiv(mat_pos(self), other)             # <<<<<<<<<<<<<<
@@ -23625,16 +24319,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_div(struct PyPetscM
  * # reflected binary operations
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 523, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_idiv(((struct PyPetscMatObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_idiv(((struct PyPetscMatObject *)__pyx_t_1), __pyx_v_other)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 523, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":492
+  /* "PETSc/petscmat.pxi":522
  *     return result
  * 
  * cdef Mat mat_div(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23654,7 +24348,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_div(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":497
+/* "PETSc/petscmat.pxi":527
  * # reflected binary operations
  * 
  * cdef Mat mat_radd(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23666,12 +24360,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_radd(struct PyPetsc
   struct PyPetscMatObject *__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("mat_radd", 0);
 
-  /* "PETSc/petscmat.pxi":498
+  /* "PETSc/petscmat.pxi":528
  * 
  * cdef Mat mat_radd(Mat self, other):
  *     return mat_add(self, other)             # <<<<<<<<<<<<<<
@@ -23679,13 +24370,13 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_radd(struct PyPetsc
  * cdef Mat mat_rsub(Mat self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_add(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_add(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":497
+  /* "PETSc/petscmat.pxi":527
  * # reflected binary operations
  * 
  * cdef Mat mat_radd(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23704,7 +24395,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_radd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":500
+/* "PETSc/petscmat.pxi":530
  *     return mat_add(self, other)
  * 
  * cdef Mat mat_rsub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23718,19 +24409,16 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rsub(struct PyPetsc
   __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("mat_rsub", 0);
 
-  /* "PETSc/petscmat.pxi":501
+  /* "PETSc/petscmat.pxi":531
  * 
  * cdef Mat mat_rsub(Mat self, other):
  *     cdef Mat mat = <Mat> mat_sub(self, other)             # <<<<<<<<<<<<<<
  *     mat.scale(-1)
  *     return mat
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_sub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_sub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 531, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -23738,21 +24426,21 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rsub(struct PyPetsc
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscmat.pxi":502
+  /* "PETSc/petscmat.pxi":532
  * cdef Mat mat_rsub(Mat self, other):
  *     cdef Mat mat = <Mat> mat_sub(self, other)
  *     mat.scale(-1)             # <<<<<<<<<<<<<<
  *     return mat
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mat), __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mat), __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 532, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 532, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":503
+  /* "PETSc/petscmat.pxi":533
  *     cdef Mat mat = <Mat> mat_sub(self, other)
  *     mat.scale(-1)
  *     return mat             # <<<<<<<<<<<<<<
@@ -23764,7 +24452,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rsub(struct PyPetsc
   __pyx_r = __pyx_v_mat;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":500
+  /* "PETSc/petscmat.pxi":530
  *     return mat_add(self, other)
  * 
  * cdef Mat mat_rsub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23785,7 +24473,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rsub(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":505
+/* "PETSc/petscmat.pxi":535
  *     return mat
  * 
  * cdef Mat mat_rmul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23797,12 +24485,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rmul(struct PyPetsc
   struct PyPetscMatObject *__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("mat_rmul", 0);
 
-  /* "PETSc/petscmat.pxi":506
+  /* "PETSc/petscmat.pxi":536
  * 
  * cdef Mat mat_rmul(Mat self, other):
  *     return mat_mul(self, other)             # <<<<<<<<<<<<<<
@@ -23810,13 +24495,13 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rmul(struct PyPetsc
  * cdef Mat mat_rdiv(Mat self, other):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_mul(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_mul(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 536, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":505
+  /* "PETSc/petscmat.pxi":535
  *     return mat
  * 
  * cdef Mat mat_rmul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23835,38 +24520,45 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rmul(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":508
+/* "PETSc/petscmat.pxi":538
  *     return mat_mul(self, other)
  * 
  * cdef Mat mat_rdiv(Mat self, other):             # <<<<<<<<<<<<<<
+ *     <void>self; <void>other; # unused
  *     raise NotImplementedError
- * 
  */
 
-static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rdiv(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_other) {
+static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rdiv(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other) {
   struct PyPetscMatObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mat_rdiv", 0);
 
-  /* "PETSc/petscmat.pxi":509
+  /* "PETSc/petscmat.pxi":539
+ * 
+ * cdef Mat mat_rdiv(Mat self, other):
+ *     <void>self; <void>other; # unused             # <<<<<<<<<<<<<<
+ *     raise NotImplementedError
  * 
+ */
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_other);
+
+  /* "PETSc/petscmat.pxi":540
  * cdef Mat mat_rdiv(Mat self, other):
+ *     <void>self; <void>other; # unused
  *     raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[6]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(6, 540, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":508
+  /* "PETSc/petscmat.pxi":538
  *     return mat_mul(self, other)
  * 
  * cdef Mat mat_rdiv(Mat self, other):             # <<<<<<<<<<<<<<
+ *     <void>self; <void>other; # unused
  *     raise NotImplementedError
- * 
  */
 
   /* function exit code */
@@ -23878,7 +24570,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rdiv(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":513
+/* "PETSc/petscmat.pxi":544
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline PetscMatStructure matstructure(object structure) \             # <<<<<<<<<<<<<<
@@ -23892,12 +24584,9 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
   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);
 
-  /* "PETSc/petscmat.pxi":515
+  /* "PETSc/petscmat.pxi":546
  * cdef inline PetscMatStructure matstructure(object structure) \
  *     except <PetscMatStructure>(-1):
  *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
@@ -23911,7 +24600,7 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":516
+  /* "PETSc/petscmat.pxi":547
  *     except <PetscMatStructure>(-1):
  *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
  *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
@@ -23925,7 +24614,7 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":517
+  /* "PETSc/petscmat.pxi":548
  *     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             # <<<<<<<<<<<<<<
@@ -23938,21 +24627,21 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
     __pyx_r = SAME_NONZERO_PATTERN;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":518
+  /* "PETSc/petscmat.pxi":549
  *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
  *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN
  *     else:                    return structure             # <<<<<<<<<<<<<<
  * 
  * cdef inline PetscMatAssemblyType assemblytype(object assembly) \
  */
-    __pyx_t_3 = ((MatStructure)PyInt_AsLong(__pyx_v_structure)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((MatStructure)__Pyx_PyInt_As_MatStructure(__pyx_v_structure)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 549, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":513
+  /* "PETSc/petscmat.pxi":544
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline PetscMatStructure matstructure(object structure) \             # <<<<<<<<<<<<<<
@@ -23963,13 +24652,13 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.matstructure", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((MatStructure)-1);
+  __pyx_r = ((MatStructure)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":520
+/* "PETSc/petscmat.pxi":551
  *     else:                    return structure
  * 
  * cdef inline PetscMatAssemblyType assemblytype(object assembly) \             # <<<<<<<<<<<<<<
@@ -23983,12 +24672,9 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
   int __pyx_t_1;
   int __pyx_t_2;
   MatAssemblyType __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("assemblytype", 0);
 
-  /* "PETSc/petscmat.pxi":522
+  /* "PETSc/petscmat.pxi":553
  * cdef inline PetscMatAssemblyType assemblytype(object assembly) \
  *     except <PetscMatAssemblyType>(-1):
  *     if   assembly is None:  return MAT_FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
@@ -24002,7 +24688,7 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":523
+  /* "PETSc/petscmat.pxi":554
  *     except <PetscMatAssemblyType>(-1):
  *     if   assembly is None:  return MAT_FINAL_ASSEMBLY
  *     elif assembly is False: return MAT_FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
@@ -24016,7 +24702,7 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":524
+  /* "PETSc/petscmat.pxi":555
  *     if   assembly is None:  return MAT_FINAL_ASSEMBLY
  *     elif assembly is False: return MAT_FINAL_ASSEMBLY
  *     elif assembly is True:  return MAT_FLUSH_ASSEMBLY             # <<<<<<<<<<<<<<
@@ -24029,21 +24715,21 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
     __pyx_r = MAT_FLUSH_ASSEMBLY;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":525
+  /* "PETSc/petscmat.pxi":556
  *     elif assembly is False: return MAT_FINAL_ASSEMBLY
  *     elif assembly is True:  return MAT_FLUSH_ASSEMBLY
  *     else:                   return assembly             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ * cdef inline PetscMatInfoType infotype(object info) \
  */
-    __pyx_t_3 = ((MatAssemblyType)PyInt_AsLong(__pyx_v_assembly)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((MatAssemblyType)__Pyx_PyInt_As_MatAssemblyType(__pyx_v_assembly)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 556, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":520
+  /* "PETSc/petscmat.pxi":551
  *     else:                    return structure
  * 
  * cdef inline PetscMatAssemblyType assemblytype(object assembly) \             # <<<<<<<<<<<<<<
@@ -24054,13 +24740,73 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.assemblytype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((MatAssemblyType)-1);
+  __pyx_r = ((MatAssemblyType)-1L);
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/petscmat.pxi":558
+ *     else:                   return assembly
+ * 
+ * cdef inline PetscMatInfoType infotype(object info) \             # <<<<<<<<<<<<<<
+ *     except <PetscMatInfoType>(-1):
+ *     if   info is None: return MAT_GLOBAL_SUM
+ */
+
+static CYTHON_INLINE MatInfoType __pyx_f_8petsc4py_5PETSc_infotype(PyObject *__pyx_v_info) {
+  MatInfoType __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  MatInfoType __pyx_t_3;
+  __Pyx_RefNannySetupContext("infotype", 0);
+
+  /* "PETSc/petscmat.pxi":560
+ * cdef inline PetscMatInfoType infotype(object info) \
+ *     except <PetscMatInfoType>(-1):
+ *     if   info is None: return MAT_GLOBAL_SUM             # <<<<<<<<<<<<<<
+ *     else:              return info
+ * 
+ */
+  __pyx_t_1 = (__pyx_v_info == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_r = MAT_GLOBAL_SUM;
+    goto __pyx_L0;
+  }
+
+  /* "PETSc/petscmat.pxi":561
+ *     except <PetscMatInfoType>(-1):
+ *     if   info is None: return MAT_GLOBAL_SUM
+ *     else:              return info             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  /*else*/ {
+    __pyx_t_3 = ((MatInfoType)__Pyx_PyInt_As_MatInfoType(__pyx_v_info)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 561, __pyx_L1_error)
+    __pyx_r = __pyx_t_3;
+    goto __pyx_L0;
+  }
+
+  /* "PETSc/petscmat.pxi":558
+ *     else:                   return assembly
+ * 
+ * cdef inline PetscMatInfoType infotype(object info) \             # <<<<<<<<<<<<<<
+ *     except <PetscMatInfoType>(-1):
+ *     if   info is None: return MAT_GLOBAL_SUM
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.infotype", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = ((MatInfoType)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":529
+/* "PETSc/petscmat.pxi":565
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline int Mat_Sizes(             # <<<<<<<<<<<<<<
@@ -24083,12 +24829,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
   PyObject *__pyx_t_6 = NULL;
   PyObject *(*__pyx_t_7)(PyObject *);
   int __pyx_t_8;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Mat_Sizes", 0);
 
-  /* "PETSc/petscmat.pxi":537
+  /* "PETSc/petscmat.pxi":573
  *     # unpack row and column sizes
  *     cdef object rsize, csize
  *     try:             # <<<<<<<<<<<<<<
@@ -24096,13 +24839,15 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
  *     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:*/ {
 
-      /* "PETSc/petscmat.pxi":538
+      /* "PETSc/petscmat.pxi":574
  *     cdef object rsize, csize
  *     try:
  *         rsize , csize = size             # <<<<<<<<<<<<<<
@@ -24119,7 +24864,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __PYX_ERR(6, 574, __pyx_L3_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -24132,21 +24877,21 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
         __Pyx_INCREF(__pyx_t_4);
         __Pyx_INCREF(__pyx_t_5);
         #else
-        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 574, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 574, __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_filename = __pyx_f[6]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_6 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 574, __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_filename = __pyx_f[6]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(6, 574, __pyx_L3_error)
         __pyx_t_7 = NULL;
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         goto __pyx_L12_unpacking_done;
@@ -24154,39 +24899,48 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_7 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __PYX_ERR(6, 574, __pyx_L3_error)
         __pyx_L12_unpacking_done:;
       }
       __pyx_v_rsize = __pyx_t_4;
       __pyx_t_4 = 0;
       __pyx_v_csize = __pyx_t_5;
       __pyx_t_5 = 0;
+
+      /* "PETSc/petscmat.pxi":573
+ *     # unpack row and column sizes
+ *     cdef object rsize, csize
+ *     try:             # <<<<<<<<<<<<<<
+ *         rsize , csize = 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;
 
-    /* "PETSc/petscmat.pxi":539
+    /* "PETSc/petscmat.pxi":575
  *     try:
  *         rsize , csize = size
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
  *         rsize = csize = size
  *     # unpack row and column block sizes
  */
-    __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_TypeError) || PyErr_ExceptionMatches(__pyx_builtin_ValueError);
+    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
     if (__pyx_t_8) {
       __Pyx_AddTraceback("petsc4py.PETSc.Mat_Sizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(6, 575, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_6);
 
-      /* "PETSc/petscmat.pxi":540
+      /* "PETSc/petscmat.pxi":576
  *         rsize , csize = size
  *     except (TypeError, ValueError):
  *         rsize = csize = size             # <<<<<<<<<<<<<<
@@ -24204,12 +24958,22 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     }
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
+
+    /* "PETSc/petscmat.pxi":573
+ *     # unpack row and column sizes
+ *     cdef object rsize, csize
+ *     try:             # <<<<<<<<<<<<<<
+ *         rsize , csize = 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);
@@ -24217,7 +24981,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     __pyx_L10_try_end:;
   }
 
-  /* "PETSc/petscmat.pxi":543
+  /* "PETSc/petscmat.pxi":579
  *     # unpack row and column block sizes
  *     cdef object rbsize, cbsize
  *     try:             # <<<<<<<<<<<<<<
@@ -24225,13 +24989,15 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
  *     except (TypeError, ValueError):
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1);
     __Pyx_XGOTREF(__pyx_t_3);
     __Pyx_XGOTREF(__pyx_t_2);
     __Pyx_XGOTREF(__pyx_t_1);
     /*try:*/ {
 
-      /* "PETSc/petscmat.pxi":544
+      /* "PETSc/petscmat.pxi":580
  *     cdef object rbsize, cbsize
  *     try:
  *         rbsize , cbsize = bsize             # <<<<<<<<<<<<<<
@@ -24248,7 +25014,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+          __PYX_ERR(6, 580, __pyx_L15_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -24261,21 +25027,21 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
         __Pyx_INCREF(__pyx_t_6);
         __Pyx_INCREF(__pyx_t_4);
         #else
-        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 580, __pyx_L15_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 580, __pyx_L15_error)
         __Pyx_GOTREF(__pyx_t_4);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_5 = PyObject_GetIter(__pyx_v_bsize); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+        __pyx_t_5 = PyObject_GetIter(__pyx_v_bsize); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 580, __pyx_L15_error)
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
         index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_6)) goto __pyx_L23_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_6);
         index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L23_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_4);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(6, 580, __pyx_L15_error)
         __pyx_t_7 = NULL;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         goto __pyx_L24_unpacking_done;
@@ -24283,39 +25049,48 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_7 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+        __PYX_ERR(6, 580, __pyx_L15_error)
         __pyx_L24_unpacking_done:;
       }
       __pyx_v_rbsize = __pyx_t_6;
       __pyx_t_6 = 0;
       __pyx_v_cbsize = __pyx_t_4;
       __pyx_t_4 = 0;
+
+      /* "PETSc/petscmat.pxi":579
+ *     # unpack row and column block sizes
+ *     cdef object rbsize, cbsize
+ *     try:             # <<<<<<<<<<<<<<
+ *         rbsize , cbsize = bsize
+ *     except (TypeError, ValueError):
+ */
     }
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
     goto __pyx_L22_try_end;
     __pyx_L15_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":545
+    /* "PETSc/petscmat.pxi":581
  *     try:
  *         rbsize , cbsize = bsize
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
  *         rbsize = cbsize = bsize
  *     # split row and column sizes
  */
-    __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_TypeError) || PyErr_ExceptionMatches(__pyx_builtin_ValueError);
+    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
     if (__pyx_t_8) {
       __Pyx_AddTraceback("petsc4py.PETSc.Mat_Sizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;}
+      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(6, 581, __pyx_L17_except_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
 
-      /* "PETSc/petscmat.pxi":546
+      /* "PETSc/petscmat.pxi":582
  *         rbsize , cbsize = bsize
  *     except (TypeError, ValueError):
  *         rbsize = cbsize = bsize             # <<<<<<<<<<<<<<
@@ -24333,12 +25108,22 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     }
     goto __pyx_L17_except_error;
     __pyx_L17_except_error:;
+
+    /* "PETSc/petscmat.pxi":579
+ *     # unpack row and column block sizes
+ *     cdef object rbsize, cbsize
+ *     try:             # <<<<<<<<<<<<<<
+ *         rbsize , cbsize = bsize
+ *     except (TypeError, ValueError):
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_1);
     __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
     goto __pyx_L1_error;
     __pyx_L16_exception_handled:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_1);
@@ -24346,25 +25131,25 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     __pyx_L22_try_end:;
   }
 
-  /* "PETSc/petscmat.pxi":548
+  /* "PETSc/petscmat.pxi":584
  *         rbsize = cbsize = bsize
  *     # split row and column sizes
  *     Sys_Sizes(rsize, rbsize, r, m, M)             # <<<<<<<<<<<<<<
  *     Sys_Sizes(csize, cbsize, c, n, N)
  *     return 0
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_Sys_Sizes(__pyx_v_rsize, __pyx_v_rbsize, __pyx_v_r, __pyx_v_m, __pyx_v_M); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_Sys_Sizes(__pyx_v_rsize, __pyx_v_rbsize, __pyx_v_r, __pyx_v_m, __pyx_v_M); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(6, 584, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":549
+  /* "PETSc/petscmat.pxi":585
  *     # split row and column sizes
  *     Sys_Sizes(rsize, rbsize, r, m, M)
  *     Sys_Sizes(csize, cbsize, c, n, N)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_Sys_Sizes(__pyx_v_csize, __pyx_v_cbsize, __pyx_v_c, __pyx_v_n, __pyx_v_N); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_Sys_Sizes(__pyx_v_csize, __pyx_v_cbsize, __pyx_v_c, __pyx_v_n, __pyx_v_N); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(6, 585, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":550
+  /* "PETSc/petscmat.pxi":586
  *     Sys_Sizes(rsize, rbsize, r, m, M)
  *     Sys_Sizes(csize, cbsize, c, n, N)
  *     return 0             # <<<<<<<<<<<<<<
@@ -24374,7 +25159,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":529
+  /* "PETSc/petscmat.pxi":565
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline int Mat_Sizes(             # <<<<<<<<<<<<<<
@@ -24398,7 +25183,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":552
+/* "PETSc/petscmat.pxi":588
  *     return 0
  * 
  * cdef inline int Mat_Create(             # <<<<<<<<<<<<<<
@@ -24420,22 +25205,19 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Mat_Create", 0);
 
-  /* "PETSc/petscmat.pxi":560
+  /* "PETSc/petscmat.pxi":596
  *     ) except -1:
  *     # communicator
  *     cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *     # sizes and block sizes
  *     cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 596, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":562
+  /* "PETSc/petscmat.pxi":598
  *     cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *     # sizes and block sizes
  *     cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0             # <<<<<<<<<<<<<<
@@ -24449,16 +25231,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/petscmat.pxi":563
+  /* "PETSc/petscmat.pxi":599
  *     # sizes and block sizes
  *     cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *     Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)             # <<<<<<<<<<<<<<
  *     if rbs == PETSC_DECIDE: rbs = 1
  *     if cbs == PETSC_DECIDE: cbs = rbs
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Mat_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_rbs), (&__pyx_v_cbs), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_M), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Mat_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_rbs), (&__pyx_v_cbs), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_M), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 599, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":564
+  /* "PETSc/petscmat.pxi":600
  *     cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *     Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *     if rbs == PETSC_DECIDE: rbs = 1             # <<<<<<<<<<<<<<
@@ -24468,11 +25250,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   __pyx_t_3 = ((__pyx_v_rbs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_rbs = 1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":565
+  /* "PETSc/petscmat.pxi":601
  *     Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *     if rbs == PETSC_DECIDE: rbs = 1
  *     if cbs == PETSC_DECIDE: cbs = rbs             # <<<<<<<<<<<<<<
@@ -24482,29 +25262,27 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   __pyx_t_3 = ((__pyx_v_cbs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_cbs = __pyx_v_rbs;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscmat.pxi":566
+  /* "PETSc/petscmat.pxi":602
  *     if rbs == PETSC_DECIDE: rbs = 1
  *     if cbs == PETSC_DECIDE: cbs = rbs
  *     Sys_Layout(ccomm, rbs, &m, &M)             # <<<<<<<<<<<<<<
  *     Sys_Layout(ccomm, cbs, &n, &N)
  *     # create matrix and set sizes
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_rbs, (&__pyx_v_m), (&__pyx_v_M)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_rbs, (&__pyx_v_m), (&__pyx_v_M)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 602, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":567
+  /* "PETSc/petscmat.pxi":603
  *     if cbs == PETSC_DECIDE: cbs = rbs
  *     Sys_Layout(ccomm, rbs, &m, &M)
  *     Sys_Layout(ccomm, cbs, &n, &N)             # <<<<<<<<<<<<<<
  *     # create matrix and set sizes
  *     cdef PetscMat mat = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_cbs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_cbs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 603, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":569
+  /* "PETSc/petscmat.pxi":605
  *     Sys_Layout(ccomm, cbs, &n, &N)
  *     # create matrix and set sizes
  *     cdef PetscMat mat = NULL             # <<<<<<<<<<<<<<
@@ -24513,43 +25291,43 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
  */
   __pyx_v_mat = NULL;
 
-  /* "PETSc/petscmat.pxi":570
+  /* "PETSc/petscmat.pxi":606
  *     # create matrix and set sizes
  *     cdef PetscMat mat = NULL
  *     CHKERR( MatCreate(ccomm, &mat) )             # <<<<<<<<<<<<<<
  *     CHKERR( MatSetSizes(mat, m, n, M, N) )
  *     CHKERR( MatSetBlockSizes(mat, rbs, cbs) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 606, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":571
+  /* "PETSc/petscmat.pxi":607
  *     cdef PetscMat mat = NULL
  *     CHKERR( MatCreate(ccomm, &mat) )
  *     CHKERR( MatSetSizes(mat, m, n, M, N) )             # <<<<<<<<<<<<<<
  *     CHKERR( MatSetBlockSizes(mat, rbs, cbs) )
  *     CHKERR( MatSetType(mat, mtype) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetSizes(__pyx_v_mat, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetSizes(__pyx_v_mat, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 607, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":572
+  /* "PETSc/petscmat.pxi":608
  *     CHKERR( MatCreate(ccomm, &mat) )
  *     CHKERR( MatSetSizes(mat, m, n, M, N) )
  *     CHKERR( MatSetBlockSizes(mat, rbs, cbs) )             # <<<<<<<<<<<<<<
  *     CHKERR( MatSetType(mat, mtype) )
  *     A[0] = mat
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSizes(__pyx_v_mat, __pyx_v_rbs, __pyx_v_cbs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSizes(__pyx_v_mat, __pyx_v_rbs, __pyx_v_cbs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 608, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":573
+  /* "PETSc/petscmat.pxi":609
  *     CHKERR( MatSetSizes(mat, m, n, M, N) )
  *     CHKERR( MatSetBlockSizes(mat, rbs, cbs) )
  *     CHKERR( MatSetType(mat, mtype) )             # <<<<<<<<<<<<<<
  *     A[0] = mat
  *     return 0
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_mat, __pyx_v_mtype)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_mat, __pyx_v_mtype)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 609, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":574
+  /* "PETSc/petscmat.pxi":610
  *     CHKERR( MatSetBlockSizes(mat, rbs, cbs) )
  *     CHKERR( MatSetType(mat, mtype) )
  *     A[0] = mat             # <<<<<<<<<<<<<<
@@ -24558,7 +25336,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
  */
   (__pyx_v_A[0]) = __pyx_v_mat;
 
-  /* "PETSc/petscmat.pxi":575
+  /* "PETSc/petscmat.pxi":611
  *     CHKERR( MatSetType(mat, mtype) )
  *     A[0] = mat
  *     return 0             # <<<<<<<<<<<<<<
@@ -24568,7 +25346,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":552
+  /* "PETSc/petscmat.pxi":588
  *     return 0
  * 
  * cdef inline int Mat_Create(             # <<<<<<<<<<<<<<
@@ -24585,12 +25363,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":577
+/* "PETSc/petscmat.pxi":613
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ_NNZ( PetscMat A, object NNZ) except -1:             # <<<<<<<<<<<<<<
  *     #
- *     cdef PetscBool aij, baij, sbaij
+ *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE
  */
 
 static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A, PyObject *__pyx_v_NNZ) {
@@ -24621,21 +25399,29 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   PyObject *(*__pyx_t_10)(PyObject *);
   PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Mat_AllocAIJ_NNZ", 0);
 
-  /* "PETSc/petscmat.pxi":580
+  /* "PETSc/petscmat.pxi":615
+ * cdef inline int Mat_AllocAIJ_NNZ( PetscMat A, object NNZ) except -1:
+ *     #
+ *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE             # <<<<<<<<<<<<<<
+ *     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))
+ *     # local row size and block size
+ */
+  __pyx_v_aij = PETSC_FALSE;
+  __pyx_v_baij = PETSC_FALSE;
+  __pyx_v_sbaij = PETSC_FALSE;
+
+  /* "PETSc/petscmat.pxi":616
  *     #
- *     cdef PetscBool aij, baij, sbaij
+ *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE
  *     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))             # <<<<<<<<<<<<<<
  *     # local row size and block size
  *     cdef PetscInt m=0, bs=1
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatHasPreallocationAIJ(__pyx_v_A, (&__pyx_v_aij), (&__pyx_v_baij), (&__pyx_v_sbaij))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatHasPreallocationAIJ(__pyx_v_A, (&__pyx_v_aij), (&__pyx_v_baij), (&__pyx_v_sbaij))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 616, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":582
+  /* "PETSc/petscmat.pxi":618
  *     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))
  *     # local row size and block size
  *     cdef PetscInt m=0, bs=1             # <<<<<<<<<<<<<<
@@ -24645,16 +25431,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_v_m = 0;
   __pyx_v_bs = 1;
 
-  /* "PETSc/petscmat.pxi":583
+  /* "PETSc/petscmat.pxi":619
  *     # local row size and block size
  *     cdef PetscInt m=0, bs=1
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )             # <<<<<<<<<<<<<<
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:
  *         CHKERR( MatGetBlockSize(A, &bs) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 619, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":584
+  /* "PETSc/petscmat.pxi":620
  *     cdef PetscInt m=0, bs=1
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -24672,16 +25458,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":585
+    /* "PETSc/petscmat.pxi":621
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:
  *         CHKERR( MatGetBlockSize(A, &bs) )             # <<<<<<<<<<<<<<
  *         assert bs > 0, "block size not set"
  *     # unpack NNZ argument
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_A, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_A, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 621, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":586
+    /* "PETSc/petscmat.pxi":622
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:
  *         CHKERR( MatGetBlockSize(A, &bs) )
  *         assert bs > 0, "block size not set"             # <<<<<<<<<<<<<<
@@ -24692,15 +25478,21 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     if (unlikely(!Py_OptimizeFlag)) {
       if (unlikely(!((__pyx_v_bs > 0) != 0))) {
         PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_block_size_not_set);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 622, __pyx_L1_error)
       }
     }
     #endif
-    goto __pyx_L3;
+
+    /* "PETSc/petscmat.pxi":620
+ *     cdef PetscInt m=0, bs=1
+ *     CHKERR( MatGetLocalSize(A, &m, NULL) )
+ *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetBlockSize(A, &bs) )
+ *         assert bs > 0, "block size not set"
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":589
+  /* "PETSc/petscmat.pxi":625
  *     # unpack NNZ argument
  *     cdef object od_nnz, oo_nnz
  *     try:             # <<<<<<<<<<<<<<
@@ -24708,13 +25500,15 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  *     except (TypeError, ValueError):
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
     __Pyx_XGOTREF(__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_5);
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/petscmat.pxi":590
+      /* "PETSc/petscmat.pxi":626
  *     cdef object od_nnz, oo_nnz
  *     try:
  *         od_nnz, oo_nnz = NNZ             # <<<<<<<<<<<<<<
@@ -24731,7 +25525,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+          __PYX_ERR(6, 626, __pyx_L6_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -24744,21 +25538,21 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
         __Pyx_INCREF(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         #else
-        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 626, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 626, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_8);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_v_NNZ); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_9 = PyObject_GetIter(__pyx_v_NNZ); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 626, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_9);
         __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
         index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L14_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
         index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L14_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(6, 626, __pyx_L6_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L15_unpacking_done;
@@ -24766,39 +25560,48 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __PYX_ERR(6, 626, __pyx_L6_error)
         __pyx_L15_unpacking_done:;
       }
       __pyx_v_od_nnz = __pyx_t_7;
       __pyx_t_7 = 0;
       __pyx_v_oo_nnz = __pyx_t_8;
       __pyx_t_8 = 0;
+
+      /* "PETSc/petscmat.pxi":625
+ *     # unpack NNZ argument
+ *     cdef object od_nnz, oo_nnz
+ *     try:             # <<<<<<<<<<<<<<
+ *         od_nnz, oo_nnz = NNZ
+ *     except (TypeError, ValueError):
+ */
     }
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L13_try_end;
     __pyx_L6_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscmat.pxi":591
+    /* "PETSc/petscmat.pxi":627
  *     try:
  *         od_nnz, oo_nnz = NNZ
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
  *         od_nnz, oo_nnz = NNZ, None
  *     # diagonal and off-diagonal number of nonzeros
  */
-    __pyx_t_1 = PyErr_ExceptionMatches(__pyx_builtin_TypeError) || PyErr_ExceptionMatches(__pyx_builtin_ValueError);
+    __pyx_t_1 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
     if (__pyx_t_1) {
       __Pyx_AddTraceback("petsc4py.PETSc.Mat_AllocAIJ_NNZ", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(6, 627, __pyx_L8_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "PETSc/petscmat.pxi":592
+      /* "PETSc/petscmat.pxi":628
  *         od_nnz, oo_nnz = NNZ
  *     except (TypeError, ValueError):
  *         od_nnz, oo_nnz = NNZ, None             # <<<<<<<<<<<<<<
@@ -24820,12 +25623,22 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     }
     goto __pyx_L8_except_error;
     __pyx_L8_except_error:;
+
+    /* "PETSc/petscmat.pxi":625
+ *     # unpack NNZ argument
+ *     cdef object od_nnz, oo_nnz
+ *     try:             # <<<<<<<<<<<<<<
+ *         od_nnz, oo_nnz = NNZ
+ *     except (TypeError, ValueError):
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
     goto __pyx_L1_error;
     __pyx_L7_exception_handled:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
@@ -24833,7 +25646,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     __pyx_L13_try_end:;
   }
 
-  /* "PETSc/petscmat.pxi":594
+  /* "PETSc/petscmat.pxi":630
  *         od_nnz, oo_nnz = NNZ, None
  *     # diagonal and off-diagonal number of nonzeros
  *     cdef PetscInt d_nz=PETSC_DECIDE, d_n=0, *d_nnz=NULL             # <<<<<<<<<<<<<<
@@ -24844,7 +25657,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_v_d_n = 0;
   __pyx_v_d_nnz = NULL;
 
-  /* "PETSc/petscmat.pxi":595
+  /* "PETSc/petscmat.pxi":631
  *     # diagonal and off-diagonal number of nonzeros
  *     cdef PetscInt d_nz=PETSC_DECIDE, d_n=0, *d_nnz=NULL
  *     if od_nnz is not None:             # <<<<<<<<<<<<<<
@@ -24855,39 +25668,31 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":596
+    /* "PETSc/petscmat.pxi":632
  *     cdef PetscInt d_nz=PETSC_DECIDE, d_n=0, *d_nnz=NULL
  *     if od_nnz is not None:
  *         od_nnz = iarray_i(od_nnz, &d_n, &d_nnz)             # <<<<<<<<<<<<<<
  *         if   d_n == 0: d_nnz = NULL # just in case
  *         elif d_n == 1: d_nz = d_nnz[0]; d_n=0; d_nnz = NULL
  */
-    __pyx_t_9 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_od_nnz, (&__pyx_v_d_n), (&__pyx_v_d_nnz))); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_od_nnz, (&__pyx_v_d_n), (&__pyx_v_d_nnz))); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 632, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF_SET(__pyx_v_od_nnz, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscmat.pxi":598
- *         od_nnz = iarray_i(od_nnz, &d_n, &d_nnz)
- *         if   d_n == 0: d_nnz = NULL # just in case
- *         elif d_n == 1: d_nz = d_nnz[0]; d_n=0; d_nnz = NULL             # <<<<<<<<<<<<<<
- *     cdef PetscInt o_nz=PETSC_DECIDE, o_n=0, *o_nnz=NULL
- *     if oo_nnz is not None:
- */
-    switch (__pyx_v_d_n) {
-
-      /* "PETSc/petscmat.pxi":597
+    /* "PETSc/petscmat.pxi":633
  *     if od_nnz is not None:
  *         od_nnz = iarray_i(od_nnz, &d_n, &d_nnz)
  *         if   d_n == 0: d_nnz = NULL # just in case             # <<<<<<<<<<<<<<
  *         elif d_n == 1: d_nz = d_nnz[0]; d_n=0; d_nnz = NULL
  *     cdef PetscInt o_nz=PETSC_DECIDE, o_n=0, *o_nnz=NULL
  */
+    switch (__pyx_v_d_n) {
       case 0:
       __pyx_v_d_nnz = NULL;
       break;
 
-      /* "PETSc/petscmat.pxi":598
+      /* "PETSc/petscmat.pxi":634
  *         od_nnz = iarray_i(od_nnz, &d_n, &d_nnz)
  *         if   d_n == 0: d_nnz = NULL # just in case
  *         elif d_n == 1: d_nz = d_nnz[0]; d_n=0; d_nnz = NULL             # <<<<<<<<<<<<<<
@@ -24901,11 +25706,17 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
       break;
       default: break;
     }
-    goto __pyx_L18;
+
+    /* "PETSc/petscmat.pxi":631
+ *     # diagonal and off-diagonal number of nonzeros
+ *     cdef PetscInt d_nz=PETSC_DECIDE, d_n=0, *d_nnz=NULL
+ *     if od_nnz is not None:             # <<<<<<<<<<<<<<
+ *         od_nnz = iarray_i(od_nnz, &d_n, &d_nnz)
+ *         if   d_n == 0: d_nnz = NULL # just in case
+ */
   }
-  __pyx_L18:;
 
-  /* "PETSc/petscmat.pxi":599
+  /* "PETSc/petscmat.pxi":635
  *         if   d_n == 0: d_nnz = NULL # just in case
  *         elif d_n == 1: d_nz = d_nnz[0]; d_n=0; d_nnz = NULL
  *     cdef PetscInt o_nz=PETSC_DECIDE, o_n=0, *o_nnz=NULL             # <<<<<<<<<<<<<<
@@ -24916,7 +25727,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_v_o_n = 0;
   __pyx_v_o_nnz = NULL;
 
-  /* "PETSc/petscmat.pxi":600
+  /* "PETSc/petscmat.pxi":636
  *         elif d_n == 1: d_nz = d_nnz[0]; d_n=0; d_nnz = NULL
  *     cdef PetscInt o_nz=PETSC_DECIDE, o_n=0, *o_nnz=NULL
  *     if oo_nnz is not None:             # <<<<<<<<<<<<<<
@@ -24927,39 +25738,31 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":601
+    /* "PETSc/petscmat.pxi":637
  *     cdef PetscInt o_nz=PETSC_DECIDE, o_n=0, *o_nnz=NULL
  *     if oo_nnz is not None:
  *         oo_nnz = iarray_i(oo_nnz, &o_n, &o_nnz)             # <<<<<<<<<<<<<<
  *         if   o_n == 0: o_nnz = NULL # just in case
  *         elif o_n == 1: o_nz = o_nnz[0]; o_n=0; o_nnz = NULL
  */
-    __pyx_t_9 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oo_nnz, (&__pyx_v_o_n), (&__pyx_v_o_nnz))); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oo_nnz, (&__pyx_v_o_n), (&__pyx_v_o_nnz))); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 637, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF_SET(__pyx_v_oo_nnz, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscmat.pxi":603
- *         oo_nnz = iarray_i(oo_nnz, &o_n, &o_nnz)
- *         if   o_n == 0: o_nnz = NULL # just in case
- *         elif o_n == 1: o_nz = o_nnz[0]; o_n=0; o_nnz = NULL             # <<<<<<<<<<<<<<
- *     if m == PETSC_DECIDE:
- *         if d_n > 1 and d_n*bs > m: m = d_n*bs
- */
-    switch (__pyx_v_o_n) {
-
-      /* "PETSc/petscmat.pxi":602
+    /* "PETSc/petscmat.pxi":638
  *     if oo_nnz is not None:
  *         oo_nnz = iarray_i(oo_nnz, &o_n, &o_nnz)
  *         if   o_n == 0: o_nnz = NULL # just in case             # <<<<<<<<<<<<<<
  *         elif o_n == 1: o_nz = o_nnz[0]; o_n=0; o_nnz = NULL
  *     if m == PETSC_DECIDE:
  */
+    switch (__pyx_v_o_n) {
       case 0:
       __pyx_v_o_nnz = NULL;
       break;
 
-      /* "PETSc/petscmat.pxi":603
+      /* "PETSc/petscmat.pxi":639
  *         oo_nnz = iarray_i(oo_nnz, &o_n, &o_nnz)
  *         if   o_n == 0: o_nnz = NULL # just in case
  *         elif o_n == 1: o_nz = o_nnz[0]; o_n=0; o_nnz = NULL             # <<<<<<<<<<<<<<
@@ -24973,11 +25776,17 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
       break;
       default: break;
     }
-    goto __pyx_L19;
+
+    /* "PETSc/petscmat.pxi":636
+ *         elif d_n == 1: d_nz = d_nnz[0]; d_n=0; d_nnz = NULL
+ *     cdef PetscInt o_nz=PETSC_DECIDE, o_n=0, *o_nnz=NULL
+ *     if oo_nnz is not None:             # <<<<<<<<<<<<<<
+ *         oo_nnz = iarray_i(oo_nnz, &o_n, &o_nnz)
+ *         if   o_n == 0: o_nnz = NULL # just in case
+ */
   }
-  __pyx_L19:;
 
-  /* "PETSc/petscmat.pxi":604
+  /* "PETSc/petscmat.pxi":640
  *         if   o_n == 0: o_nnz = NULL # just in case
  *         elif o_n == 1: o_nz = o_nnz[0]; o_n=0; o_nnz = NULL
  *     if m == PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -24987,7 +25796,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_t_2 = ((__pyx_v_m == PETSC_DECIDE) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":605
+    /* "PETSc/petscmat.pxi":641
  *         elif o_n == 1: o_nz = o_nnz[0]; o_n=0; o_nnz = NULL
  *     if m == PETSC_DECIDE:
  *         if d_n > 1 and d_n*bs > m: m = d_n*bs             # <<<<<<<<<<<<<<
@@ -25005,11 +25814,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     __pyx_L22_bool_binop_done:;
     if (__pyx_t_2) {
       __pyx_v_m = (__pyx_v_d_n * __pyx_v_bs);
-      goto __pyx_L21;
     }
-    __pyx_L21:;
 
-    /* "PETSc/petscmat.pxi":606
+    /* "PETSc/petscmat.pxi":642
  *     if m == PETSC_DECIDE:
  *         if d_n > 1 and d_n*bs > m: m = d_n*bs
  *         if o_n > 1 and o_n*bs > m: m = o_n*bs             # <<<<<<<<<<<<<<
@@ -25027,14 +25834,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     __pyx_L25_bool_binop_done:;
     if (__pyx_t_2) {
       __pyx_v_m = (__pyx_v_o_n * __pyx_v_bs);
-      goto __pyx_L24;
     }
-    __pyx_L24:;
-    goto __pyx_L20;
+
+    /* "PETSc/petscmat.pxi":640
+ *         if   o_n == 0: o_nnz = NULL # just in case
+ *         elif o_n == 1: o_nz = o_nnz[0]; o_n=0; o_nnz = NULL
+ *     if m == PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *         if d_n > 1 and d_n*bs > m: m = d_n*bs
+ *         if o_n > 1 and o_n*bs > m: m = o_n*bs
+ */
   }
-  __pyx_L20:;
 
-  /* "PETSc/petscmat.pxi":608
+  /* "PETSc/petscmat.pxi":644
  *         if o_n > 1 and o_n*bs > m: m = o_n*bs
  *     # check array sizes
  *     if d_n > 1 and d_n*bs != m: raise ValueError(             # <<<<<<<<<<<<<<
@@ -25052,18 +25863,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_L28_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":610
+    /* "PETSc/petscmat.pxi":646
  *     if d_n > 1 and d_n*bs != m: raise ValueError(
  *         "size(d_nnz) is %d, expected %d" %
  *             (toInt(d_n), toInt(m//bs)) )             # <<<<<<<<<<<<<<
  *     if o_n > 1 and o_n*bs != m: raise ValueError(
  *         "size(o_nnz) is %d, expected %d" %
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_d_n); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_d_n); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 646, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m / __pyx_v_bs)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m / __pyx_v_bs)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 646, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 646, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
@@ -25072,38 +25883,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     __pyx_t_9 = 0;
     __pyx_t_7 = 0;
 
-    /* "PETSc/petscmat.pxi":609
+    /* "PETSc/petscmat.pxi":645
  *     # check array sizes
  *     if d_n > 1 and d_n*bs != m: raise ValueError(
  *         "size(d_nnz) is %d, expected %d" %             # <<<<<<<<<<<<<<
  *             (toInt(d_n), toInt(m//bs)) )
  *     if o_n > 1 and o_n*bs != m: raise ValueError(
  */
-    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_size_d_nnz_is_d_expected_d, __pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_size_d_nnz_is_d_expected_d, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 645, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscmat.pxi":608
+    /* "PETSc/petscmat.pxi":644
  *         if o_n > 1 and o_n*bs > m: m = o_n*bs
  *     # check array sizes
  *     if d_n > 1 and d_n*bs != m: raise ValueError(             # <<<<<<<<<<<<<<
  *         "size(d_nnz) is %d, expected %d" %
  *             (toInt(d_n), toInt(m//bs)) )
  */
-    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 644, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
     __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 644, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_Raise(__pyx_t_7, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 644, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":611
+  /* "PETSc/petscmat.pxi":647
  *         "size(d_nnz) is %d, expected %d" %
  *             (toInt(d_n), toInt(m//bs)) )
  *     if o_n > 1 and o_n*bs != m: raise ValueError(             # <<<<<<<<<<<<<<
@@ -25121,18 +25932,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_L31_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":613
+    /* "PETSc/petscmat.pxi":649
  *     if o_n > 1 and o_n*bs != m: raise ValueError(
  *         "size(o_nnz) is %d, expected %d" %
  *             (toInt(o_n), toInt(m//bs)) )             # <<<<<<<<<<<<<<
  *     # preallocate
  *     if aij == PETSC_TRUE:
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_o_n); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_o_n); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 649, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m / __pyx_v_bs)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m / __pyx_v_bs)); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 649, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 649, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
@@ -25141,38 +25952,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     __pyx_t_7 = 0;
     __pyx_t_8 = 0;
 
-    /* "PETSc/petscmat.pxi":612
+    /* "PETSc/petscmat.pxi":648
  *             (toInt(d_n), toInt(m//bs)) )
  *     if o_n > 1 and o_n*bs != m: raise ValueError(
  *         "size(o_nnz) is %d, expected %d" %             # <<<<<<<<<<<<<<
  *             (toInt(o_n), toInt(m//bs)) )
  *     # preallocate
  */
-    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_size_o_nnz_is_d_expected_d, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_size_o_nnz_is_d_expected_d, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 648, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "PETSc/petscmat.pxi":611
+    /* "PETSc/petscmat.pxi":647
  *         "size(d_nnz) is %d, expected %d" %
  *             (toInt(d_n), toInt(m//bs)) )
  *     if o_n > 1 and o_n*bs != m: raise ValueError(             # <<<<<<<<<<<<<<
  *         "size(o_nnz) is %d, expected %d" %
  *             (toInt(o_n), toInt(m//bs)) )
  */
-    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 647, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
     __pyx_t_8 = 0;
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 647, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_Raise(__pyx_t_8, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 647, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":615
+  /* "PETSc/petscmat.pxi":651
  *             (toInt(o_n), toInt(m//bs)) )
  *     # preallocate
  *     if aij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25182,28 +25993,34 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_t_2 = ((__pyx_v_aij == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":616
+    /* "PETSc/petscmat.pxi":652
  *     # preallocate
  *     if aij == PETSC_TRUE:
  *         CHKERR( MatSeqAIJSetPreallocation(A, d_nz, d_nnz) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatMPIAIJSetPreallocation(A, d_nz, d_nnz, o_nz, o_nnz) )
  *     if baij == PETSC_TRUE:
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqAIJSetPreallocation(__pyx_v_A, __pyx_v_d_nz, __pyx_v_d_nnz)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqAIJSetPreallocation(__pyx_v_A, __pyx_v_d_nz, __pyx_v_d_nnz)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 652, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":617
+    /* "PETSc/petscmat.pxi":653
  *     if aij == PETSC_TRUE:
  *         CHKERR( MatSeqAIJSetPreallocation(A, d_nz, d_nnz) )
  *         CHKERR( MatMPIAIJSetPreallocation(A, d_nz, d_nnz, o_nz, o_nnz) )             # <<<<<<<<<<<<<<
  *     if baij == PETSC_TRUE:
  *         CHKERR( MatSeqBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIAIJSetPreallocation(__pyx_v_A, __pyx_v_d_nz, __pyx_v_d_nnz, __pyx_v_o_nz, __pyx_v_o_nnz)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L33;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIAIJSetPreallocation(__pyx_v_A, __pyx_v_d_nz, __pyx_v_d_nnz, __pyx_v_o_nz, __pyx_v_o_nnz)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 653, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":651
+ *             (toInt(o_n), toInt(m//bs)) )
+ *     # preallocate
+ *     if aij == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSeqAIJSetPreallocation(A, d_nz, d_nnz) )
+ *         CHKERR( MatMPIAIJSetPreallocation(A, d_nz, d_nnz, o_nz, o_nnz) )
+ */
   }
-  __pyx_L33:;
 
-  /* "PETSc/petscmat.pxi":618
+  /* "PETSc/petscmat.pxi":654
  *         CHKERR( MatSeqAIJSetPreallocation(A, d_nz, d_nnz) )
  *         CHKERR( MatMPIAIJSetPreallocation(A, d_nz, d_nnz, o_nz, o_nnz) )
  *     if baij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25213,28 +26030,34 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_t_2 = ((__pyx_v_baij == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":619
+    /* "PETSc/petscmat.pxi":655
  *         CHKERR( MatMPIAIJSetPreallocation(A, d_nz, d_nnz, o_nz, o_nnz) )
  *     if baij == PETSC_TRUE:
  *         CHKERR( MatSeqBAIJSetPreallocation(A, bs, d_nz, d_nnz) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatMPIBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
  *     if sbaij == PETSC_TRUE:
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqBAIJSetPreallocation(__pyx_v_A, __pyx_v_bs, __pyx_v_d_nz, __pyx_v_d_nnz)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqBAIJSetPreallocation(__pyx_v_A, __pyx_v_bs, __pyx_v_d_nz, __pyx_v_d_nnz)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 655, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":620
+    /* "PETSc/petscmat.pxi":656
  *     if baij == PETSC_TRUE:
  *         CHKERR( MatSeqBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  *         CHKERR( MatMPIBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )             # <<<<<<<<<<<<<<
  *     if sbaij == PETSC_TRUE:
  *         CHKERR( MatSeqSBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIBAIJSetPreallocation(__pyx_v_A, __pyx_v_bs, __pyx_v_d_nz, __pyx_v_d_nnz, __pyx_v_o_nz, __pyx_v_o_nnz)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L34;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIBAIJSetPreallocation(__pyx_v_A, __pyx_v_bs, __pyx_v_d_nz, __pyx_v_d_nnz, __pyx_v_o_nz, __pyx_v_o_nnz)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 656, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":654
+ *         CHKERR( MatSeqAIJSetPreallocation(A, d_nz, d_nnz) )
+ *         CHKERR( MatMPIAIJSetPreallocation(A, d_nz, d_nnz, o_nz, o_nnz) )
+ *     if baij == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSeqBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
+ *         CHKERR( MatMPIBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
+ */
   }
-  __pyx_L34:;
 
-  /* "PETSc/petscmat.pxi":621
+  /* "PETSc/petscmat.pxi":657
  *         CHKERR( MatSeqBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  *         CHKERR( MatMPIBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
  *     if sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25244,28 +26067,34 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_t_2 = ((__pyx_v_sbaij == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":622
+    /* "PETSc/petscmat.pxi":658
  *         CHKERR( MatMPIBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
  *     if sbaij == PETSC_TRUE:
  *         CHKERR( MatSeqSBAIJSetPreallocation(A, bs, d_nz, d_nnz) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatMPISBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
  *     return 0
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqSBAIJSetPreallocation(__pyx_v_A, __pyx_v_bs, __pyx_v_d_nz, __pyx_v_d_nnz)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqSBAIJSetPreallocation(__pyx_v_A, __pyx_v_bs, __pyx_v_d_nz, __pyx_v_d_nnz)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 658, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":623
+    /* "PETSc/petscmat.pxi":659
  *     if sbaij == PETSC_TRUE:
  *         CHKERR( MatSeqSBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  *         CHKERR( MatMPISBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPISBAIJSetPreallocation(__pyx_v_A, __pyx_v_bs, __pyx_v_d_nz, __pyx_v_d_nnz, __pyx_v_o_nz, __pyx_v_o_nnz)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L35;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPISBAIJSetPreallocation(__pyx_v_A, __pyx_v_bs, __pyx_v_d_nz, __pyx_v_d_nnz, __pyx_v_o_nz, __pyx_v_o_nnz)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 659, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":657
+ *         CHKERR( MatSeqBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
+ *         CHKERR( MatMPIBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
+ *     if sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSeqSBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
+ *         CHKERR( MatMPISBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
+ */
   }
-  __pyx_L35:;
 
-  /* "PETSc/petscmat.pxi":624
+  /* "PETSc/petscmat.pxi":660
  *         CHKERR( MatSeqSBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  *         CHKERR( MatMPISBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -25275,12 +26104,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":577
+  /* "PETSc/petscmat.pxi":613
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ_NNZ( PetscMat A, object NNZ) except -1:             # <<<<<<<<<<<<<<
  *     #
- *     cdef PetscBool aij, baij, sbaij
+ *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE
  */
 
   /* function exit code */
@@ -25299,12 +26128,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":626
+/* "PETSc/petscmat.pxi":662
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ_CSR(PetscMat A, object CSR) except -1:             # <<<<<<<<<<<<<<
  *     #
- *     cdef PetscBool aij, baij, sbaij
+ *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE
  */
 
 static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A, PyObject *__pyx_v_CSR) {
@@ -25337,21 +26166,29 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   PyObject *(*__pyx_t_11)(PyObject *);
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Mat_AllocAIJ_CSR", 0);
 
-  /* "PETSc/petscmat.pxi":629
+  /* "PETSc/petscmat.pxi":664
+ * cdef inline int Mat_AllocAIJ_CSR(PetscMat A, object CSR) except -1:
+ *     #
+ *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE             # <<<<<<<<<<<<<<
+ *     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))
+ *     # local row size and block size
+ */
+  __pyx_v_aij = PETSC_FALSE;
+  __pyx_v_baij = PETSC_FALSE;
+  __pyx_v_sbaij = PETSC_FALSE;
+
+  /* "PETSc/petscmat.pxi":665
  *     #
- *     cdef PetscBool aij, baij, sbaij
+ *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE
  *     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))             # <<<<<<<<<<<<<<
  *     # local row size and block size
  *     cdef PetscInt m=0, bs = 1
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatHasPreallocationAIJ(__pyx_v_A, (&__pyx_v_aij), (&__pyx_v_baij), (&__pyx_v_sbaij))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatHasPreallocationAIJ(__pyx_v_A, (&__pyx_v_aij), (&__pyx_v_baij), (&__pyx_v_sbaij))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 665, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":631
+  /* "PETSc/petscmat.pxi":667
  *     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))
  *     # local row size and block size
  *     cdef PetscInt m=0, bs = 1             # <<<<<<<<<<<<<<
@@ -25361,16 +26198,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_v_m = 0;
   __pyx_v_bs = 1;
 
-  /* "PETSc/petscmat.pxi":632
+  /* "PETSc/petscmat.pxi":668
  *     # local row size and block size
  *     cdef PetscInt m=0, bs = 1
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )             # <<<<<<<<<<<<<<
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:
  *         CHKERR( MatGetBlockSize(A, &bs) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 668, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":633
+  /* "PETSc/petscmat.pxi":669
  *     cdef PetscInt m=0, bs = 1
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25388,16 +26225,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":634
+    /* "PETSc/petscmat.pxi":670
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:
  *         CHKERR( MatGetBlockSize(A, &bs) )             # <<<<<<<<<<<<<<
  *         assert bs > 0, "block size not set"
  *     # unpack CSR argument
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_A, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_A, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 670, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":635
+    /* "PETSc/petscmat.pxi":671
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:
  *         CHKERR( MatGetBlockSize(A, &bs) )
  *         assert bs > 0, "block size not set"             # <<<<<<<<<<<<<<
@@ -25408,15 +26245,21 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     if (unlikely(!Py_OptimizeFlag)) {
       if (unlikely(!((__pyx_v_bs > 0) != 0))) {
         PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_block_size_not_set);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 671, __pyx_L1_error)
       }
     }
     #endif
-    goto __pyx_L3;
+
+    /* "PETSc/petscmat.pxi":669
+ *     cdef PetscInt m=0, bs = 1
+ *     CHKERR( MatGetLocalSize(A, &m, NULL) )
+ *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetBlockSize(A, &bs) )
+ *         assert bs > 0, "block size not set"
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":638
+  /* "PETSc/petscmat.pxi":674
  *     # unpack CSR argument
  *     cdef object oi, oj, ov
  *     try:             # <<<<<<<<<<<<<<
@@ -25424,13 +26267,15 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  *     except (TypeError, ValueError):
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
     __Pyx_XGOTREF(__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_5);
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/petscmat.pxi":639
+      /* "PETSc/petscmat.pxi":675
  *     cdef object oi, oj, ov
  *     try:
  *         oi, oj, ov = CSR             # <<<<<<<<<<<<<<
@@ -25447,7 +26292,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+          __PYX_ERR(6, 675, __pyx_L6_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -25463,16 +26308,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(__pyx_t_9);
         #else
-        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 675, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 675, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 675, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_9);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_10 = PyObject_GetIter(__pyx_v_CSR); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_10 = PyObject_GetIter(__pyx_v_CSR); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 675, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_10);
         __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
         index = 0; __pyx_t_7 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L14_unpacking_failed;
@@ -25481,7 +26326,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
         __Pyx_GOTREF(__pyx_t_8);
         index = 2; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L14_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(6, 675, __pyx_L6_error)
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         goto __pyx_L15_unpacking_done;
@@ -25489,7 +26334,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __PYX_ERR(6, 675, __pyx_L6_error)
         __pyx_L15_unpacking_done:;
       }
       __pyx_v_oi = __pyx_t_7;
@@ -25498,33 +26343,42 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
       __pyx_t_8 = 0;
       __pyx_v_ov = __pyx_t_9;
       __pyx_t_9 = 0;
+
+      /* "PETSc/petscmat.pxi":674
+ *     # unpack CSR argument
+ *     cdef object oi, oj, ov
+ *     try:             # <<<<<<<<<<<<<<
+ *         oi, oj, ov = CSR
+ *     except (TypeError, ValueError):
+ */
     }
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L13_try_end;
     __pyx_L6_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "PETSc/petscmat.pxi":640
+    /* "PETSc/petscmat.pxi":676
  *     try:
  *         oi, oj, ov = CSR
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
  *         oi, oj = CSR; ov = None
  *     # rows, cols, and values
  */
-    __pyx_t_1 = PyErr_ExceptionMatches(__pyx_builtin_TypeError) || PyErr_ExceptionMatches(__pyx_builtin_ValueError);
+    __pyx_t_1 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
     if (__pyx_t_1) {
       __Pyx_AddTraceback("petsc4py.PETSc.Mat_AllocAIJ_CSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+      if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7) < 0) __PYX_ERR(6, 676, __pyx_L8_except_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
 
-      /* "PETSc/petscmat.pxi":641
+      /* "PETSc/petscmat.pxi":677
  *         oi, oj, ov = CSR
  *     except (TypeError, ValueError):
  *         oi, oj = CSR; ov = None             # <<<<<<<<<<<<<<
@@ -25541,7 +26395,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+          __PYX_ERR(6, 677, __pyx_L8_except_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -25554,21 +26408,21 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
         __Pyx_INCREF(__pyx_t_10);
         __Pyx_INCREF(__pyx_t_12);
         #else
-        __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+        __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 677, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+        __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(6, 677, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_12);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_13 = PyObject_GetIter(__pyx_v_CSR); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+        __pyx_t_13 = PyObject_GetIter(__pyx_v_CSR); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 677, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_13);
         __pyx_t_11 = Py_TYPE(__pyx_t_13)->tp_iternext;
         index = 0; __pyx_t_10 = __pyx_t_11(__pyx_t_13); if (unlikely(!__pyx_t_10)) goto __pyx_L18_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_10);
         index = 1; __pyx_t_12 = __pyx_t_11(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L18_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_12);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_13), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_13), 2) < 0) __PYX_ERR(6, 677, __pyx_L8_except_error)
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         goto __pyx_L19_unpacking_done;
@@ -25576,7 +26430,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+        __PYX_ERR(6, 677, __pyx_L8_except_error)
         __pyx_L19_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_oi, __pyx_t_10);
@@ -25592,12 +26446,22 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     }
     goto __pyx_L8_except_error;
     __pyx_L8_except_error:;
+
+    /* "PETSc/petscmat.pxi":674
+ *     # unpack CSR argument
+ *     cdef object oi, oj, ov
+ *     try:             # <<<<<<<<<<<<<<
+ *         oi, oj, ov = CSR
+ *     except (TypeError, ValueError):
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
     goto __pyx_L1_error;
     __pyx_L7_exception_handled:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
@@ -25605,7 +26469,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __pyx_L13_try_end:;
   }
 
-  /* "PETSc/petscmat.pxi":643
+  /* "PETSc/petscmat.pxi":679
  *         oi, oj = CSR; ov = None
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -25615,7 +26479,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/petscmat.pxi":644
+  /* "PETSc/petscmat.pxi":680
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL             # <<<<<<<<<<<<<<
@@ -25625,7 +26489,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_v_nj = 0;
   __pyx_v_j = NULL;
 
-  /* "PETSc/petscmat.pxi":645
+  /* "PETSc/petscmat.pxi":681
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0             # <<<<<<<<<<<<<<
@@ -25634,7 +26498,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":646
+  /* "PETSc/petscmat.pxi":682
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -25643,31 +26507,31 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":647
+  /* "PETSc/petscmat.pxi":683
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL
  *     oi = iarray_i(oi, &ni, &i)             # <<<<<<<<<<<<<<
  *     oj = iarray_i(oj, &nj, &j)
  *     if ov is not None:
  */
-  __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 683, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF_SET(__pyx_v_oi, __pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "PETSc/petscmat.pxi":648
+  /* "PETSc/petscmat.pxi":684
  *     cdef PetscScalar *v=NULL
  *     oi = iarray_i(oi, &ni, &i)
  *     oj = iarray_i(oj, &nj, &j)             # <<<<<<<<<<<<<<
  *     if ov is not None:
  *         ov = iarray_s(ov, &nv, &v)
  */
-  __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 684, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF_SET(__pyx_v_oj, __pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "PETSc/petscmat.pxi":649
+  /* "PETSc/petscmat.pxi":685
  *     oi = iarray_i(oi, &ni, &i)
  *     oj = iarray_i(oj, &nj, &j)
  *     if ov is not None:             # <<<<<<<<<<<<<<
@@ -25678,22 +26542,28 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":650
+    /* "PETSc/petscmat.pxi":686
  *     oj = iarray_i(oj, &nj, &j)
  *     if ov is not None:
  *         ov = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
  *     if m == PETSC_DECIDE: m = (ni-1)*bs
  *     # check array sizes
  */
-    __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 686, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF_SET(__pyx_v_ov, __pyx_t_7);
     __pyx_t_7 = 0;
-    goto __pyx_L20;
+
+    /* "PETSc/petscmat.pxi":685
+ *     oi = iarray_i(oi, &ni, &i)
+ *     oj = iarray_i(oj, &nj, &j)
+ *     if ov is not None:             # <<<<<<<<<<<<<<
+ *         ov = iarray_s(ov, &nv, &v)
+ *     if m == PETSC_DECIDE: m = (ni-1)*bs
+ */
   }
-  __pyx_L20:;
 
-  /* "PETSc/petscmat.pxi":651
+  /* "PETSc/petscmat.pxi":687
  *     if ov is not None:
  *         ov = iarray_s(ov, &nv, &v)
  *     if m == PETSC_DECIDE: m = (ni-1)*bs             # <<<<<<<<<<<<<<
@@ -25703,11 +26573,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_t_3 = ((__pyx_v_m == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_m = ((__pyx_v_ni - 1) * __pyx_v_bs);
-    goto __pyx_L21;
   }
-  __pyx_L21:;
 
-  /* "PETSc/petscmat.pxi":653
+  /* "PETSc/petscmat.pxi":689
  *     if m == PETSC_DECIDE: m = (ni-1)*bs
  *     # check array sizes
  *     if ((ni-1)*bs != m):             # <<<<<<<<<<<<<<
@@ -25717,18 +26585,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_t_3 = ((((__pyx_v_ni - 1) * __pyx_v_bs) != __pyx_v_m) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":655
+    /* "PETSc/petscmat.pxi":691
  *     if ((ni-1)*bs != m):
  *         raise ValueError("size(I) is %d, expected %d" %
  *                          (toInt(ni), toInt(m//bs+1)) )             # <<<<<<<<<<<<<<
  *     if (i[0] != 0):
  *         raise ValueError("I[0] is %d, expected %d" %
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 691, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(((__pyx_v_m / __pyx_v_bs) + 1)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(((__pyx_v_m / __pyx_v_bs) + 1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 691, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 691, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
@@ -25737,30 +26605,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __pyx_t_7 = 0;
     __pyx_t_8 = 0;
 
-    /* "PETSc/petscmat.pxi":654
+    /* "PETSc/petscmat.pxi":690
  *     # check array sizes
  *     if ((ni-1)*bs != m):
  *         raise ValueError("size(I) is %d, expected %d" %             # <<<<<<<<<<<<<<
  *                          (toInt(ni), toInt(m//bs+1)) )
  *     if (i[0] != 0):
  */
-    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_size_I_is_d_expected_d, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_size_I_is_d_expected_d, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 690, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 690, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
     __pyx_t_8 = 0;
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 690, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_Raise(__pyx_t_8, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 690, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":689
+ *     if m == PETSC_DECIDE: m = (ni-1)*bs
+ *     # check array sizes
+ *     if ((ni-1)*bs != m):             # <<<<<<<<<<<<<<
+ *         raise ValueError("size(I) is %d, expected %d" %
+ *                          (toInt(ni), toInt(m//bs+1)) )
+ */
   }
 
-  /* "PETSc/petscmat.pxi":656
+  /* "PETSc/petscmat.pxi":692
  *         raise ValueError("size(I) is %d, expected %d" %
  *                          (toInt(ni), toInt(m//bs+1)) )
  *     if (i[0] != 0):             # <<<<<<<<<<<<<<
@@ -25770,18 +26646,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_t_3 = (((__pyx_v_i[0]) != 0) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":658
+    /* "PETSc/petscmat.pxi":694
  *     if (i[0] != 0):
  *         raise ValueError("I[0] is %d, expected %d" %
  *                          (toInt(i[0]), toInt(0)) )             # <<<<<<<<<<<<<<
  *     if (i[ni-1] != nj):
  *         raise ValueError("size(J) is %d, expected %d" %
  */
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[0])); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[0])); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 694, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 694, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 694, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);
@@ -25790,30 +26666,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __pyx_t_8 = 0;
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscmat.pxi":657
+    /* "PETSc/petscmat.pxi":693
  *                          (toInt(ni), toInt(m//bs+1)) )
  *     if (i[0] != 0):
  *         raise ValueError("I[0] is %d, expected %d" %             # <<<<<<<<<<<<<<
  *                          (toInt(i[0]), toInt(0)) )
  *     if (i[ni-1] != nj):
  */
-    __pyx_t_9 = __Pyx_PyString_Format(__pyx_kp_s_I_0_is_d_expected_d, __pyx_t_7); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyString_Format(__pyx_kp_s_I_0_is_d_expected_d, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 693, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 693, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9);
     __pyx_t_9 = 0;
-    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 693, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_Raise(__pyx_t_9, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 693, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":692
+ *         raise ValueError("size(I) is %d, expected %d" %
+ *                          (toInt(ni), toInt(m//bs+1)) )
+ *     if (i[0] != 0):             # <<<<<<<<<<<<<<
+ *         raise ValueError("I[0] is %d, expected %d" %
+ *                          (toInt(i[0]), toInt(0)) )
+ */
   }
 
-  /* "PETSc/petscmat.pxi":659
+  /* "PETSc/petscmat.pxi":695
  *         raise ValueError("I[0] is %d, expected %d" %
  *                          (toInt(i[0]), toInt(0)) )
  *     if (i[ni-1] != nj):             # <<<<<<<<<<<<<<
@@ -25823,18 +26707,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_t_3 = (((__pyx_v_i[(__pyx_v_ni - 1)]) != __pyx_v_nj) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":661
+    /* "PETSc/petscmat.pxi":697
  *     if (i[ni-1] != nj):
  *         raise ValueError("size(J) is %d, expected %d" %
  *                          (toInt(nj), toInt(i[ni-1])) )             # <<<<<<<<<<<<<<
  *     if v != NULL and (nj*bs*bs != nv):
  *         raise ValueError("size(V) is %d, expected %d" %
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 697, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[(__pyx_v_ni - 1)])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[(__pyx_v_ni - 1)])); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 697, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 697, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
@@ -25843,30 +26727,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __pyx_t_9 = 0;
     __pyx_t_7 = 0;
 
-    /* "PETSc/petscmat.pxi":660
+    /* "PETSc/petscmat.pxi":696
  *                          (toInt(i[0]), toInt(0)) )
  *     if (i[ni-1] != nj):
  *         raise ValueError("size(J) is %d, expected %d" %             # <<<<<<<<<<<<<<
  *                          (toInt(nj), toInt(i[ni-1])) )
  *     if v != NULL and (nj*bs*bs != nv):
  */
-    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_size_J_is_d_expected_d, __pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_size_J_is_d_expected_d, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 696, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 696, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
     __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 696, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_Raise(__pyx_t_7, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 696, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":695
+ *         raise ValueError("I[0] is %d, expected %d" %
+ *                          (toInt(i[0]), toInt(0)) )
+ *     if (i[ni-1] != nj):             # <<<<<<<<<<<<<<
+ *         raise ValueError("size(J) is %d, expected %d" %
+ *                          (toInt(nj), toInt(i[ni-1])) )
+ */
   }
 
-  /* "PETSc/petscmat.pxi":662
+  /* "PETSc/petscmat.pxi":698
  *         raise ValueError("size(J) is %d, expected %d" %
  *                          (toInt(nj), toInt(i[ni-1])) )
  *     if v != NULL and (nj*bs*bs != nv):             # <<<<<<<<<<<<<<
@@ -25884,18 +26776,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_L26_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":664
+    /* "PETSc/petscmat.pxi":700
  *     if v != NULL and (nj*bs*bs != nv):
  *         raise ValueError("size(V) is %d, expected %d" %
  *                          (toInt(nv), toInt(nj*bs*bs)) )             # <<<<<<<<<<<<<<
  *     # preallocate
  *     if aij == PETSC_TRUE:
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(((__pyx_v_nj * __pyx_v_bs) * __pyx_v_bs)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(((__pyx_v_nj * __pyx_v_bs) * __pyx_v_bs)); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
@@ -25904,30 +26796,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __pyx_t_7 = 0;
     __pyx_t_8 = 0;
 
-    /* "PETSc/petscmat.pxi":663
+    /* "PETSc/petscmat.pxi":699
  *                          (toInt(nj), toInt(i[ni-1])) )
  *     if v != NULL and (nj*bs*bs != nv):
  *         raise ValueError("size(V) is %d, expected %d" %             # <<<<<<<<<<<<<<
  *                          (toInt(nv), toInt(nj*bs*bs)) )
  *     # preallocate
  */
-    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_size_V_is_d_expected_d, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_size_V_is_d_expected_d, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 699, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 699, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
     __pyx_t_8 = 0;
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 699, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_Raise(__pyx_t_8, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 699, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":698
+ *         raise ValueError("size(J) is %d, expected %d" %
+ *                          (toInt(nj), toInt(i[ni-1])) )
+ *     if v != NULL and (nj*bs*bs != nv):             # <<<<<<<<<<<<<<
+ *         raise ValueError("size(V) is %d, expected %d" %
+ *                          (toInt(nv), toInt(nj*bs*bs)) )
+ */
   }
 
-  /* "PETSc/petscmat.pxi":666
+  /* "PETSc/petscmat.pxi":702
  *                          (toInt(nv), toInt(nj*bs*bs)) )
  *     # preallocate
  *     if aij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25937,28 +26837,34 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_t_3 = ((__pyx_v_aij == PETSC_TRUE) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":667
+    /* "PETSc/petscmat.pxi":703
  *     # preallocate
  *     if aij == PETSC_TRUE:
  *         CHKERR( MatSeqAIJSetPreallocationCSR(A, i, j, v) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatMPIAIJSetPreallocationCSR(A, i, j, v) )
  *     if baij == PETSC_TRUE:
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 703, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":668
+    /* "PETSc/petscmat.pxi":704
  *     if aij == PETSC_TRUE:
  *         CHKERR( MatSeqAIJSetPreallocationCSR(A, i, j, v) )
  *         CHKERR( MatMPIAIJSetPreallocationCSR(A, i, j, v) )             # <<<<<<<<<<<<<<
  *     if baij == PETSC_TRUE:
  *         CHKERR( MatSeqBAIJSetPreallocationCSR(A, bs, i, j, v) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L28;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 704, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":702
+ *                          (toInt(nv), toInt(nj*bs*bs)) )
+ *     # preallocate
+ *     if aij == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSeqAIJSetPreallocationCSR(A, i, j, v) )
+ *         CHKERR( MatMPIAIJSetPreallocationCSR(A, i, j, v) )
+ */
   }
-  __pyx_L28:;
 
-  /* "PETSc/petscmat.pxi":669
+  /* "PETSc/petscmat.pxi":705
  *         CHKERR( MatSeqAIJSetPreallocationCSR(A, i, j, v) )
  *         CHKERR( MatMPIAIJSetPreallocationCSR(A, i, j, v) )
  *     if baij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25968,28 +26874,34 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_t_3 = ((__pyx_v_baij == PETSC_TRUE) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":670
+    /* "PETSc/petscmat.pxi":706
  *         CHKERR( MatMPIAIJSetPreallocationCSR(A, i, j, v) )
  *     if baij == PETSC_TRUE:
  *         CHKERR( MatSeqBAIJSetPreallocationCSR(A, bs, i, j, v) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatMPIBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *     if sbaij == PETSC_TRUE:
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqBAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_bs, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqBAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_bs, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 706, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":671
+    /* "PETSc/petscmat.pxi":707
  *     if baij == PETSC_TRUE:
  *         CHKERR( MatSeqBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *         CHKERR( MatMPIBAIJSetPreallocationCSR(A, bs, i, j, v) )             # <<<<<<<<<<<<<<
  *     if sbaij == PETSC_TRUE:
  *         CHKERR( MatSeqSBAIJSetPreallocationCSR(A, bs, i, j, v) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIBAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_bs, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L29;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIBAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_bs, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 707, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":705
+ *         CHKERR( MatSeqAIJSetPreallocationCSR(A, i, j, v) )
+ *         CHKERR( MatMPIAIJSetPreallocationCSR(A, i, j, v) )
+ *     if baij == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSeqBAIJSetPreallocationCSR(A, bs, i, j, v) )
+ *         CHKERR( MatMPIBAIJSetPreallocationCSR(A, bs, i, j, v) )
+ */
   }
-  __pyx_L29:;
 
-  /* "PETSc/petscmat.pxi":672
+  /* "PETSc/petscmat.pxi":708
  *         CHKERR( MatSeqBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *         CHKERR( MatMPIBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *     if sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25999,28 +26911,34 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_t_3 = ((__pyx_v_sbaij == PETSC_TRUE) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":673
+    /* "PETSc/petscmat.pxi":709
  *         CHKERR( MatMPIBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *     if sbaij == PETSC_TRUE:
  *         CHKERR( MatSeqSBAIJSetPreallocationCSR(A, bs, i, j, v) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatMPISBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *     return 0
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqSBAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_bs, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqSBAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_bs, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 709, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":674
+    /* "PETSc/petscmat.pxi":710
  *     if sbaij == PETSC_TRUE:
  *         CHKERR( MatSeqSBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *         CHKERR( MatMPISBAIJSetPreallocationCSR(A, bs, i, j, v) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPISBAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_bs, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L30;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPISBAIJSetPreallocationCSR(__pyx_v_A, __pyx_v_bs, __pyx_v_i, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 710, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":708
+ *         CHKERR( MatSeqBAIJSetPreallocationCSR(A, bs, i, j, v) )
+ *         CHKERR( MatMPIBAIJSetPreallocationCSR(A, bs, i, j, v) )
+ *     if sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSeqSBAIJSetPreallocationCSR(A, bs, i, j, v) )
+ *         CHKERR( MatMPISBAIJSetPreallocationCSR(A, bs, i, j, v) )
+ */
   }
-  __pyx_L30:;
 
-  /* "PETSc/petscmat.pxi":675
+  /* "PETSc/petscmat.pxi":711
  *         CHKERR( MatSeqSBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *         CHKERR( MatMPISBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -26030,12 +26948,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":626
+  /* "PETSc/petscmat.pxi":662
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ_CSR(PetscMat A, object CSR) except -1:             # <<<<<<<<<<<<<<
  *     #
- *     cdef PetscBool aij, baij, sbaij
+ *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE
  */
 
   /* function exit code */
@@ -26056,7 +26974,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":677
+/* "PETSc/petscmat.pxi":713
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:             # <<<<<<<<<<<<<<
@@ -26070,12 +26988,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Mat_AllocAIJ", 0);
 
-  /* "PETSc/petscmat.pxi":678
+  /* "PETSc/petscmat.pxi":714
  * 
  * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:
  *     if CSR is not None:             # <<<<<<<<<<<<<<
@@ -26086,19 +27001,27 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":679
+    /* "PETSc/petscmat.pxi":715
  * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:
  *     if CSR is not None:
  *         return Mat_AllocAIJ_CSR(A, CSR)             # <<<<<<<<<<<<<<
  *     if NNZ is not None:
  *         return Mat_AllocAIJ_NNZ(A, NNZ)
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(__pyx_v_A, __pyx_v_CSR); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(__pyx_v_A, __pyx_v_CSR); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(6, 715, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
+
+    /* "PETSc/petscmat.pxi":714
+ * 
+ * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:
+ *     if CSR is not None:             # <<<<<<<<<<<<<<
+ *         return Mat_AllocAIJ_CSR(A, CSR)
+ *     if NNZ is not None:
+ */
   }
 
-  /* "PETSc/petscmat.pxi":680
+  /* "PETSc/petscmat.pxi":716
  *     if CSR is not None:
  *         return Mat_AllocAIJ_CSR(A, CSR)
  *     if NNZ is not None:             # <<<<<<<<<<<<<<
@@ -26109,19 +27032,27 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":681
+    /* "PETSc/petscmat.pxi":717
  *         return Mat_AllocAIJ_CSR(A, CSR)
  *     if NNZ is not None:
  *         return Mat_AllocAIJ_NNZ(A, NNZ)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(__pyx_v_A, __pyx_v_NNZ); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(__pyx_v_A, __pyx_v_NNZ); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(6, 717, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
+
+    /* "PETSc/petscmat.pxi":716
+ *     if CSR is not None:
+ *         return Mat_AllocAIJ_CSR(A, CSR)
+ *     if NNZ is not None:             # <<<<<<<<<<<<<<
+ *         return Mat_AllocAIJ_NNZ(A, NNZ)
+ *     return 0
+ */
   }
 
-  /* "PETSc/petscmat.pxi":682
+  /* "PETSc/petscmat.pxi":718
  *     if NNZ is not None:
  *         return Mat_AllocAIJ_NNZ(A, NNZ)
  *     return 0             # <<<<<<<<<<<<<<
@@ -26131,7 +27062,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":677
+  /* "PETSc/petscmat.pxi":713
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:             # <<<<<<<<<<<<<<
@@ -26148,7 +27079,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":684
+/* "PETSc/petscmat.pxi":720
  *     return 0
  * 
  * cdef inline object Mat_AllocDense(PetscMat A, object array):             # <<<<<<<<<<<<<<
@@ -26171,13 +27102,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   PyObject *__pyx_t_6 = NULL;
   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("Mat_AllocDense", 0);
   __Pyx_INCREF(__pyx_v_array);
 
-  /* "PETSc/petscmat.pxi":685
+  /* "PETSc/petscmat.pxi":721
  * 
  * cdef inline object Mat_AllocDense(PetscMat A, object array):
  *     cdef PetscInt m=0, N=0             # <<<<<<<<<<<<<<
@@ -26187,25 +27115,25 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   __pyx_v_m = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/petscmat.pxi":686
+  /* "PETSc/petscmat.pxi":722
  * cdef inline object Mat_AllocDense(PetscMat A, object array):
  *     cdef PetscInt m=0, N=0
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )             # <<<<<<<<<<<<<<
  *     CHKERR( MatGetSize(A, NULL, &N) )
  *     cdef PetscInt size=0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 722, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":687
+  /* "PETSc/petscmat.pxi":723
  *     cdef PetscInt m=0, N=0
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     CHKERR( MatGetSize(A, NULL, &N) )             # <<<<<<<<<<<<<<
  *     cdef PetscInt size=0
  *     cdef PetscScalar *data=NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_A, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_A, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 723, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":688
+  /* "PETSc/petscmat.pxi":724
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     CHKERR( MatGetSize(A, NULL, &N) )
  *     cdef PetscInt size=0             # <<<<<<<<<<<<<<
@@ -26214,7 +27142,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/petscmat.pxi":689
+  /* "PETSc/petscmat.pxi":725
  *     CHKERR( MatGetSize(A, NULL, &N) )
  *     cdef PetscInt size=0
  *     cdef PetscScalar *data=NULL             # <<<<<<<<<<<<<<
@@ -26223,7 +27151,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
  */
   __pyx_v_data = NULL;
 
-  /* "PETSc/petscmat.pxi":690
+  /* "PETSc/petscmat.pxi":726
  *     cdef PetscInt size=0
  *     cdef PetscScalar *data=NULL
  *     if array is not None:             # <<<<<<<<<<<<<<
@@ -26234,19 +27162,19 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":691
+    /* "PETSc/petscmat.pxi":727
  *     cdef PetscScalar *data=NULL
  *     if array is not None:
  *         array = ofarray_s(array, &size, &data)             # <<<<<<<<<<<<<<
  *         if m*N != size: raise ValueError(
  *             "size(array) is %d, expected %dx%d=%d" %
  */
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ofarray_s(__pyx_v_array, (&__pyx_v_size), (&__pyx_v_data))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ofarray_s(__pyx_v_array, (&__pyx_v_size), (&__pyx_v_data))); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 727, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":692
+    /* "PETSc/petscmat.pxi":728
  *     if array is not None:
  *         array = ofarray_s(array, &size, &data)
  *         if m*N != size: raise ValueError(             # <<<<<<<<<<<<<<
@@ -26256,22 +27184,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
     __pyx_t_3 = (((__pyx_v_m * __pyx_v_N) != __pyx_v_size) != 0);
     if (__pyx_t_3) {
 
-      /* "PETSc/petscmat.pxi":694
+      /* "PETSc/petscmat.pxi":730
  *         if m*N != size: raise ValueError(
  *             "size(array) is %d, expected %dx%d=%d" %
  *             (toInt(size), toInt(m), toInt(N), toInt(m*N)) )             # <<<<<<<<<<<<<<
  *     CHKERR( MatSeqDenseSetPreallocation(A, data) )
  *     CHKERR( MatMPIDenseSetPreallocation(A, data) )
  */
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 730, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 730, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 730, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m * __pyx_v_N)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m * __pyx_v_N)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 730, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 730, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
@@ -26286,59 +27214,65 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
       __pyx_t_6 = 0;
       __pyx_t_7 = 0;
 
-      /* "PETSc/petscmat.pxi":693
+      /* "PETSc/petscmat.pxi":729
  *         array = ofarray_s(array, &size, &data)
  *         if m*N != size: raise ValueError(
  *             "size(array) is %d, expected %dx%d=%d" %             # <<<<<<<<<<<<<<
  *             (toInt(size), toInt(m), toInt(N), toInt(m*N)) )
  *     CHKERR( MatSeqDenseSetPreallocation(A, data) )
  */
-      __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_size_array_is_d_expected_dx_d_d, __pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_size_array_is_d_expected_dx_d_d, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 729, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "PETSc/petscmat.pxi":692
+      /* "PETSc/petscmat.pxi":728
  *     if array is not None:
  *         array = ofarray_s(array, &size, &data)
  *         if m*N != size: raise ValueError(             # <<<<<<<<<<<<<<
  *             "size(array) is %d, expected %dx%d=%d" %
  *             (toInt(size), toInt(m), toInt(N), toInt(m*N)) )
  */
-      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 728, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_7);
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
       __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 728, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_Raise(__pyx_t_7, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 728, __pyx_L1_error)
     }
-    goto __pyx_L3;
+
+    /* "PETSc/petscmat.pxi":726
+ *     cdef PetscInt size=0
+ *     cdef PetscScalar *data=NULL
+ *     if array is not None:             # <<<<<<<<<<<<<<
+ *         array = ofarray_s(array, &size, &data)
+ *         if m*N != size: raise ValueError(
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":695
+  /* "PETSc/petscmat.pxi":731
  *             "size(array) is %d, expected %dx%d=%d" %
  *             (toInt(size), toInt(m), toInt(N), toInt(m*N)) )
  *     CHKERR( MatSeqDenseSetPreallocation(A, data) )             # <<<<<<<<<<<<<<
  *     CHKERR( MatMPIDenseSetPreallocation(A, data) )
  *     return array
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqDenseSetPreallocation(__pyx_v_A, __pyx_v_data)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqDenseSetPreallocation(__pyx_v_A, __pyx_v_data)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 731, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":696
+  /* "PETSc/petscmat.pxi":732
  *             (toInt(size), toInt(m), toInt(N), toInt(m*N)) )
  *     CHKERR( MatSeqDenseSetPreallocation(A, data) )
  *     CHKERR( MatMPIDenseSetPreallocation(A, data) )             # <<<<<<<<<<<<<<
  *     return array
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIDenseSetPreallocation(__pyx_v_A, __pyx_v_data)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIDenseSetPreallocation(__pyx_v_A, __pyx_v_data)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 732, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":697
+  /* "PETSc/petscmat.pxi":733
  *     CHKERR( MatSeqDenseSetPreallocation(A, data) )
  *     CHKERR( MatMPIDenseSetPreallocation(A, data) )
  *     return array             # <<<<<<<<<<<<<<
@@ -26350,7 +27284,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   __pyx_r = __pyx_v_array;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":684
+  /* "PETSc/petscmat.pxi":720
  *     return 0
  * 
  * cdef inline object Mat_AllocDense(PetscMat A, object array):             # <<<<<<<<<<<<<<
@@ -26374,7 +27308,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":705
+/* "PETSc/petscmat.pxi":741
  *                              const_PetscScalar[],PetscInsertMode)
  * 
  * cdef inline MatSetValuesFcn* matsetvalues_fcn(int blocked, int local):             # <<<<<<<<<<<<<<
@@ -26390,7 +27324,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("matsetvalues_fcn", 0);
 
-  /* "PETSc/petscmat.pxi":706
+  /* "PETSc/petscmat.pxi":742
  * 
  * cdef inline MatSetValuesFcn* matsetvalues_fcn(int blocked, int local):
  *     cdef MatSetValuesFcn *setvalues = NULL             # <<<<<<<<<<<<<<
@@ -26399,7 +27333,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
  */
   __pyx_v_setvalues = NULL;
 
-  /* "PETSc/petscmat.pxi":707
+  /* "PETSc/petscmat.pxi":743
  * cdef inline MatSetValuesFcn* matsetvalues_fcn(int blocked, int local):
  *     cdef MatSetValuesFcn *setvalues = NULL
  *     if blocked and local: setvalues = MatSetValuesBlockedLocal             # <<<<<<<<<<<<<<
@@ -26420,7 +27354,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":708
+  /* "PETSc/petscmat.pxi":744
  *     cdef MatSetValuesFcn *setvalues = NULL
  *     if blocked and local: setvalues = MatSetValuesBlockedLocal
  *     elif blocked:         setvalues = MatSetValuesBlocked             # <<<<<<<<<<<<<<
@@ -26433,7 +27367,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":709
+  /* "PETSc/petscmat.pxi":745
  *     if blocked and local: setvalues = MatSetValuesBlockedLocal
  *     elif blocked:         setvalues = MatSetValuesBlocked
  *     elif local:           setvalues = MatSetValuesLocal             # <<<<<<<<<<<<<<
@@ -26445,20 +27379,20 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
     __pyx_v_setvalues = MatSetValuesLocal;
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":710
+  /* "PETSc/petscmat.pxi":746
  *     elif blocked:         setvalues = MatSetValuesBlocked
  *     elif local:           setvalues = MatSetValuesLocal
  *     else:                 setvalues = MatSetValues             # <<<<<<<<<<<<<<
  *     return setvalues
  * 
  */
+  /*else*/ {
     __pyx_v_setvalues = MatSetValues;
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":711
+  /* "PETSc/petscmat.pxi":747
  *     elif local:           setvalues = MatSetValuesLocal
  *     else:                 setvalues = MatSetValues
  *     return setvalues             # <<<<<<<<<<<<<<
@@ -26468,7 +27402,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
   __pyx_r = __pyx_v_setvalues;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":705
+  /* "PETSc/petscmat.pxi":741
  *                              const_PetscScalar[],PetscInsertMode)
  * 
  * cdef inline MatSetValuesFcn* matsetvalues_fcn(int blocked, int local):             # <<<<<<<<<<<<<<
@@ -26482,7 +27416,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":713
+/* "PETSc/petscmat.pxi":749
  *     return setvalues
  * 
  * cdef inline int matsetvalues(PetscMat A,             # <<<<<<<<<<<<<<
@@ -26499,9 +27433,6 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   PetscInt *__pyx_v_j;
   PetscInt __pyx_v_nv;
   PetscScalar *__pyx_v_v;
-  CYTHON_UNUSED PyObject *__pyx_v_ai = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_aj = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_av = 0;
   __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_v_setvalues;
   InsertMode __pyx_v_addv;
   int __pyx_r;
@@ -26513,12 +27444,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   InsertMode __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matsetvalues", 0);
+  __Pyx_INCREF(__pyx_v_oi);
+  __Pyx_INCREF(__pyx_v_oj);
+  __Pyx_INCREF(__pyx_v_ov);
 
-  /* "PETSc/petscmat.pxi":717
+  /* "PETSc/petscmat.pxi":753
  *                              object oaddv, int blocked, int local) except -1:
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1             # <<<<<<<<<<<<<<
@@ -26528,7 +27459,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __pyx_v_rbs = 1;
   __pyx_v_cbs = 1;
 
-  /* "PETSc/petscmat.pxi":718
+  /* "PETSc/petscmat.pxi":754
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )             # <<<<<<<<<<<<<<
@@ -26537,12 +27468,10 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
  */
   __pyx_t_1 = (__pyx_v_blocked != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 754, __pyx_L1_error)
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":719
+  /* "PETSc/petscmat.pxi":755
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1             # <<<<<<<<<<<<<<
@@ -26552,11 +27481,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __pyx_t_1 = ((__pyx_v_rbs < 1) != 0);
   if (__pyx_t_1) {
     __pyx_v_rbs = 1;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscmat.pxi":720
+  /* "PETSc/petscmat.pxi":756
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1
  *     if cbs < 1: cbs = 1             # <<<<<<<<<<<<<<
@@ -26566,11 +27493,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __pyx_t_1 = ((__pyx_v_cbs < 1) != 0);
   if (__pyx_t_1) {
     __pyx_v_cbs = 1;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/petscmat.pxi":722
+  /* "PETSc/petscmat.pxi":758
  *     if cbs < 1: cbs = 1
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -26580,7 +27505,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/petscmat.pxi":723
+  /* "PETSc/petscmat.pxi":759
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL             # <<<<<<<<<<<<<<
@@ -26590,63 +27515,63 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __pyx_v_nj = 0;
   __pyx_v_j = NULL;
 
-  /* "PETSc/petscmat.pxi":724
+  /* "PETSc/petscmat.pxi":760
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0             # <<<<<<<<<<<<<<
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)
+ *     oi = iarray_i(oi, &ni, &i)
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":725
+  /* "PETSc/petscmat.pxi":761
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object aj = iarray_i(oj, &nj, &j)
+ *     oi = iarray_i(oi, &ni, &i)
+ *     oj = iarray_i(oj, &nj, &j)
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":726
+  /* "PETSc/petscmat.pxi":762
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)             # <<<<<<<<<<<<<<
- *     cdef object aj = iarray_i(oj, &nj, &j)
- *     cdef object av = iarray_s(ov, &nv, &v)
+ *     oi = iarray_i(oi, &ni, &i)             # <<<<<<<<<<<<<<
+ *     oj = iarray_i(oj, &nj, &j)
+ *     ov = iarray_s(ov, &nv, &v)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 762, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_ai = __pyx_t_3;
+  __Pyx_DECREF_SET(__pyx_v_oi, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":727
+  /* "PETSc/petscmat.pxi":763
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object aj = iarray_i(oj, &nj, &j)             # <<<<<<<<<<<<<<
- *     cdef object av = iarray_s(ov, &nv, &v)
+ *     oi = iarray_i(oi, &ni, &i)
+ *     oj = iarray_i(oj, &nj, &j)             # <<<<<<<<<<<<<<
+ *     ov = iarray_s(ov, &nv, &v)
  *     if ni*nj*rbs*cbs != nv: raise ValueError(
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 763, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_aj = __pyx_t_3;
+  __Pyx_DECREF_SET(__pyx_v_oj, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":728
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object aj = iarray_i(oj, &nj, &j)
- *     cdef object av = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
+  /* "PETSc/petscmat.pxi":764
+ *     oi = iarray_i(oi, &ni, &i)
+ *     oj = iarray_i(oj, &nj, &j)
+ *     ov = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
  *     if ni*nj*rbs*cbs != nv: raise ValueError(
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 764, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_av = __pyx_t_3;
+  __Pyx_DECREF_SET(__pyx_v_ov, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":729
- *     cdef object aj = iarray_i(oj, &nj, &j)
- *     cdef object av = iarray_s(ov, &nv, &v)
+  /* "PETSc/petscmat.pxi":765
+ *     oj = iarray_i(oj, &nj, &j)
+ *     ov = iarray_s(ov, &nv, &v)
  *     if ni*nj*rbs*cbs != nv: raise ValueError(             # <<<<<<<<<<<<<<
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
  *         (toInt(ni), toInt(nj), toInt(nv)) )
@@ -26654,20 +27579,20 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __pyx_t_1 = (((((__pyx_v_ni * __pyx_v_nj) * __pyx_v_rbs) * __pyx_v_cbs) != __pyx_v_nv) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":731
+    /* "PETSc/petscmat.pxi":767
  *     if ni*nj*rbs*cbs != nv: raise ValueError(
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
  *         (toInt(ni), toInt(nj), toInt(nv)) )             # <<<<<<<<<<<<<<
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -26679,38 +27604,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
     __pyx_t_4 = 0;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":730
- *     cdef object av = iarray_s(ov, &nv, &v)
+    /* "PETSc/petscmat.pxi":766
+ *     ov = iarray_s(ov, &nv, &v)
  *     if ni*nj*rbs*cbs != nv: raise ValueError(
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %             # <<<<<<<<<<<<<<
  *         (toInt(ni), toInt(nj), toInt(nv)) )
  *     # MatSetValuesXXX function and insert mode
  */
-    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_ni_d_nj, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_ni_d_nj, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":729
- *     cdef object aj = iarray_i(oj, &nj, &j)
- *     cdef object av = iarray_s(ov, &nv, &v)
+    /* "PETSc/petscmat.pxi":765
+ *     oj = iarray_i(oj, &nj, &j)
+ *     ov = iarray_s(ov, &nv, &v)
  *     if ni*nj*rbs*cbs != nv: raise ValueError(             # <<<<<<<<<<<<<<
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
  *         (toInt(ni), toInt(nj), toInt(nv)) )
  */
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 765, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 765, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 765, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":734
+  /* "PETSc/petscmat.pxi":770
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)             # <<<<<<<<<<<<<<
@@ -26719,26 +27644,26 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
  */
   __pyx_v_setvalues = __pyx_f_8petsc4py_5PETSc_matsetvalues_fcn(__pyx_v_blocked, __pyx_v_local);
 
-  /* "PETSc/petscmat.pxi":735
+  /* "PETSc/petscmat.pxi":771
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)
  *     cdef PetscInsertMode addv = insertmode(oaddv)             # <<<<<<<<<<<<<<
  *     # actual call
  *     CHKERR( setvalues(A, ni, i, nj, j, v, addv) )
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_7 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_7 == ((InsertMode)-1L))) __PYX_ERR(6, 771, __pyx_L1_error)
   __pyx_v_addv = __pyx_t_7;
 
-  /* "PETSc/petscmat.pxi":737
+  /* "PETSc/petscmat.pxi":773
  *     cdef PetscInsertMode addv = insertmode(oaddv)
  *     # actual call
  *     CHKERR( setvalues(A, ni, i, nj, j, v, addv) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_A, __pyx_v_ni, __pyx_v_i, __pyx_v_nj, __pyx_v_j, __pyx_v_v, __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_A, __pyx_v_ni, __pyx_v_i, __pyx_v_nj, __pyx_v_j, __pyx_v_v, __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 773, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":738
+  /* "PETSc/petscmat.pxi":774
  *     # actual call
  *     CHKERR( setvalues(A, ni, i, nj, j, v, addv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -26748,7 +27673,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":713
+  /* "PETSc/petscmat.pxi":749
  *     return setvalues
  * 
  * cdef inline int matsetvalues(PetscMat A,             # <<<<<<<<<<<<<<
@@ -26765,14 +27690,14 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __Pyx_AddTraceback("petsc4py.PETSc.matsetvalues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_ai);
-  __Pyx_XDECREF(__pyx_v_aj);
-  __Pyx_XDECREF(__pyx_v_av);
+  __Pyx_XDECREF(__pyx_v_oi);
+  __Pyx_XDECREF(__pyx_v_oj);
+  __Pyx_XDECREF(__pyx_v_ov);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":740
+/* "PETSc/petscmat.pxi":776
  *     return 0
  * 
  * cdef inline int matsetvalues_rcv(PetscMat A,             # <<<<<<<<<<<<<<
@@ -26810,12 +27735,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   PyObject *__pyx_t_7 = NULL;
   InsertMode __pyx_t_8;
   Py_ssize_t __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matsetvalues_rcv", 0);
 
-  /* "PETSc/petscmat.pxi":745
+  /* "PETSc/petscmat.pxi":781
  *                                  int blocked, int local) except -1:
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1             # <<<<<<<<<<<<<<
@@ -26825,7 +27747,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_v_rbs = 1;
   __pyx_v_cbs = 1;
 
-  /* "PETSc/petscmat.pxi":746
+  /* "PETSc/petscmat.pxi":782
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )             # <<<<<<<<<<<<<<
@@ -26834,12 +27756,10 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_t_1 = (__pyx_v_blocked != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 782, __pyx_L1_error)
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":747
+  /* "PETSc/petscmat.pxi":783
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1             # <<<<<<<<<<<<<<
@@ -26849,11 +27769,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_t_1 = ((__pyx_v_rbs < 1) != 0);
   if (__pyx_t_1) {
     __pyx_v_rbs = 1;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscmat.pxi":748
+  /* "PETSc/petscmat.pxi":784
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1
  *     if cbs < 1: cbs = 1             # <<<<<<<<<<<<<<
@@ -26863,11 +27781,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_t_1 = ((__pyx_v_cbs < 1) != 0);
   if (__pyx_t_1) {
     __pyx_v_cbs = 1;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/petscmat.pxi":750
+  /* "PETSc/petscmat.pxi":786
  *     if cbs < 1: cbs = 1
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -26877,7 +27793,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/petscmat.pxi":751
+  /* "PETSc/petscmat.pxi":787
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL             # <<<<<<<<<<<<<<
@@ -26887,7 +27803,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_v_nj = 0;
   __pyx_v_j = NULL;
 
-  /* "PETSc/petscmat.pxi":752
+  /* "PETSc/petscmat.pxi":788
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0             # <<<<<<<<<<<<<<
@@ -26896,7 +27812,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":753
+  /* "PETSc/petscmat.pxi":789
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -26905,43 +27821,43 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":754
+  /* "PETSc/petscmat.pxi":790
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL
  *     cdef ndarray ai = iarray_i(oi, &ni, &i)             # <<<<<<<<<<<<<<
  *     cdef ndarray aj = iarray_i(oj, &nj, &j)
  *     cdef ndarray av = iarray_s(ov, &nv, &v)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 790, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ai = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":755
+  /* "PETSc/petscmat.pxi":791
  *     cdef PetscScalar *v=NULL
  *     cdef ndarray ai = iarray_i(oi, &ni, &i)
  *     cdef ndarray aj = iarray_i(oj, &nj, &j)             # <<<<<<<<<<<<<<
  *     cdef ndarray av = iarray_s(ov, &nv, &v)
  *     # check various dimensions
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 791, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_aj = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":756
+  /* "PETSc/petscmat.pxi":792
  *     cdef ndarray ai = iarray_i(oi, &ni, &i)
  *     cdef ndarray aj = iarray_i(oj, &nj, &j)
  *     cdef ndarray av = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
  *     # check various dimensions
  *     if PyArray_NDIM(ai) != 2: raise ValueError(
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 756; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_av = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":758
+  /* "PETSc/petscmat.pxi":794
  *     cdef ndarray av = iarray_s(ov, &nv, &v)
  *     # check various dimensions
  *     if PyArray_NDIM(ai) != 2: raise ValueError(             # <<<<<<<<<<<<<<
@@ -26951,40 +27867,40 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_t_1 = ((PyArray_NDIM(__pyx_v_ai) != 2) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":760
+    /* "PETSc/petscmat.pxi":796
  *     if PyArray_NDIM(ai) != 2: raise ValueError(
  *         ("row indices must have two dimensions: "
  *          "rows.ndim=%d") % (PyArray_NDIM(ai)) )             # <<<<<<<<<<<<<<
  *     elif not PyArray_ISCONTIGUOUS(ai): raise ValueError(
  *         "expecting a C-contiguous array")
  */
-    __pyx_t_3 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_ai)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_ai)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 796, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_row_indices_must_have_two_dimens, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_row_indices_must_have_two_dimens, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 796, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":758
+    /* "PETSc/petscmat.pxi":794
  *     cdef ndarray av = iarray_s(ov, &nv, &v)
  *     # check various dimensions
  *     if PyArray_NDIM(ai) != 2: raise ValueError(             # <<<<<<<<<<<<<<
  *         ("row indices must have two dimensions: "
  *          "rows.ndim=%d") % (PyArray_NDIM(ai)) )
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 758; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 794, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 758; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 794, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 758; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 794, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":761
+  /* "PETSc/petscmat.pxi":797
  *         ("row indices must have two dimensions: "
  *          "rows.ndim=%d") % (PyArray_NDIM(ai)) )
  *     elif not PyArray_ISCONTIGUOUS(ai): raise ValueError(             # <<<<<<<<<<<<<<
@@ -26993,14 +27909,14 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_t_1 = ((!(PyArray_ISCONTIGUOUS(__pyx_v_ai) != 0)) != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 797, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 797, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":763
+  /* "PETSc/petscmat.pxi":799
  *     elif not PyArray_ISCONTIGUOUS(ai): raise ValueError(
  *         "expecting a C-contiguous array")
  *     if PyArray_NDIM(aj) != 2: raise ValueError(             # <<<<<<<<<<<<<<
@@ -27010,40 +27926,40 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_t_1 = ((PyArray_NDIM(__pyx_v_aj) != 2) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":765
+    /* "PETSc/petscmat.pxi":801
  *     if PyArray_NDIM(aj) != 2: raise ValueError(
  *         ("column indices must have two dimensions: "
  *          "cols.ndim=%d") % (PyArray_NDIM(aj)) )             # <<<<<<<<<<<<<<
  *     elif not PyArray_ISCONTIGUOUS(aj): raise ValueError(
  *         "expecting a C-contiguous array")
  */
-    __pyx_t_4 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_aj)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_aj)); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 801, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_column_indices_must_have_two_dim, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_column_indices_must_have_two_dim, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 801, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":763
+    /* "PETSc/petscmat.pxi":799
  *     elif not PyArray_ISCONTIGUOUS(ai): raise ValueError(
  *         "expecting a C-contiguous array")
  *     if PyArray_NDIM(aj) != 2: raise ValueError(             # <<<<<<<<<<<<<<
  *         ("column indices must have two dimensions: "
  *          "cols.ndim=%d") % (PyArray_NDIM(aj)) )
  */
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 799, __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 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 799, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 799, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":766
+  /* "PETSc/petscmat.pxi":802
  *         ("column indices must have two dimensions: "
  *          "cols.ndim=%d") % (PyArray_NDIM(aj)) )
  *     elif not PyArray_ISCONTIGUOUS(aj): raise ValueError(             # <<<<<<<<<<<<<<
@@ -27052,14 +27968,14 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_t_1 = ((!(PyArray_ISCONTIGUOUS(__pyx_v_aj) != 0)) != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 802, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 802, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":768
+  /* "PETSc/petscmat.pxi":804
  *     elif not PyArray_ISCONTIGUOUS(aj): raise ValueError(
  *         "expecting a C-contiguous array")
  *     if PyArray_NDIM(av) < 2: raise ValueError(             # <<<<<<<<<<<<<<
@@ -27069,40 +27985,40 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_t_1 = ((PyArray_NDIM(__pyx_v_av) < 2) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":770
+    /* "PETSc/petscmat.pxi":806
  *     if PyArray_NDIM(av) < 2: raise ValueError(
  *         ("values must have two or more dimensions: "
  *          "vals.ndim=%d") % (PyArray_NDIM(av)) )             # <<<<<<<<<<<<<<
  *     elif not PyArray_ISCONTIGUOUS(av): raise ValueError(
  *         "expecting a C-contiguous array")
  */
-    __pyx_t_3 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_av)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_av)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 806, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_values_must_have_two_or_more_dim, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_values_must_have_two_or_more_dim, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 806, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":768
+    /* "PETSc/petscmat.pxi":804
  *     elif not PyArray_ISCONTIGUOUS(aj): raise ValueError(
  *         "expecting a C-contiguous array")
  *     if PyArray_NDIM(av) < 2: raise ValueError(             # <<<<<<<<<<<<<<
  *         ("values must have two or more dimensions: "
  *          "vals.ndim=%d") % (PyArray_NDIM(av)) )
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 804, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 804, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 804, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":771
+  /* "PETSc/petscmat.pxi":807
  *         ("values must have two or more dimensions: "
  *          "vals.ndim=%d") % (PyArray_NDIM(av)) )
  *     elif not PyArray_ISCONTIGUOUS(av): raise ValueError(             # <<<<<<<<<<<<<<
@@ -27111,14 +28027,14 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_t_1 = ((!(PyArray_ISCONTIGUOUS(__pyx_v_av) != 0)) != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 807, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 807, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":774
+  /* "PETSc/petscmat.pxi":810
  *         "expecting a C-contiguous array")
  *     # check various shapes
  *     cdef Py_ssize_t nm = PyArray_DIM(ai, 0)             # <<<<<<<<<<<<<<
@@ -27127,7 +28043,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_nm = PyArray_DIM(__pyx_v_ai, 0);
 
-  /* "PETSc/petscmat.pxi":775
+  /* "PETSc/petscmat.pxi":811
  *     # check various shapes
  *     cdef Py_ssize_t nm = PyArray_DIM(ai, 0)
  *     cdef Py_ssize_t si = PyArray_DIM(ai, 1)             # <<<<<<<<<<<<<<
@@ -27136,7 +28052,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_si = PyArray_DIM(__pyx_v_ai, 1);
 
-  /* "PETSc/petscmat.pxi":776
+  /* "PETSc/petscmat.pxi":812
  *     cdef Py_ssize_t nm = PyArray_DIM(ai, 0)
  *     cdef Py_ssize_t si = PyArray_DIM(ai, 1)
  *     cdef Py_ssize_t sj = PyArray_DIM(aj, 1)             # <<<<<<<<<<<<<<
@@ -27145,7 +28061,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_sj = PyArray_DIM(__pyx_v_aj, 1);
 
-  /* "PETSc/petscmat.pxi":777
+  /* "PETSc/petscmat.pxi":813
  *     cdef Py_ssize_t si = PyArray_DIM(ai, 1)
  *     cdef Py_ssize_t sj = PyArray_DIM(aj, 1)
  *     cdef Py_ssize_t sv = PyArray_SIZE(av) // PyArray_DIM(av, 0)             # <<<<<<<<<<<<<<
@@ -27154,7 +28070,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_sv = (PyArray_SIZE(__pyx_v_av) / PyArray_DIM(__pyx_v_av, 0));
 
-  /* "PETSc/petscmat.pxi":778
+  /* "PETSc/petscmat.pxi":814
  *     cdef Py_ssize_t sj = PyArray_DIM(aj, 1)
  *     cdef Py_ssize_t sv = PyArray_SIZE(av) // PyArray_DIM(av, 0)
  *     if ((nm != PyArray_DIM(aj, 0)) or             # <<<<<<<<<<<<<<
@@ -27168,7 +28084,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
     goto __pyx_L10_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":779
+  /* "PETSc/petscmat.pxi":815
  *     cdef Py_ssize_t sv = PyArray_SIZE(av) // PyArray_DIM(av, 0)
  *     if ((nm != PyArray_DIM(aj, 0)) or
  *         (nm != PyArray_DIM(av, 0)) or             # <<<<<<<<<<<<<<
@@ -27182,7 +28098,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
     goto __pyx_L10_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":780
+  /* "PETSc/petscmat.pxi":816
  *     if ((nm != PyArray_DIM(aj, 0)) or
  *         (nm != PyArray_DIM(av, 0)) or
  *         (si*rbs * sj*cbs != sv)): raise ValueError(             # <<<<<<<<<<<<<<
@@ -27192,22 +28108,30 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_t_5 = (((((__pyx_v_si * __pyx_v_rbs) * __pyx_v_sj) * __pyx_v_cbs) != __pyx_v_sv) != 0);
   __pyx_t_1 = __pyx_t_5;
   __pyx_L10_bool_binop_done:;
+
+  /* "PETSc/petscmat.pxi":814
+ *     cdef Py_ssize_t sj = PyArray_DIM(aj, 1)
+ *     cdef Py_ssize_t sv = PyArray_SIZE(av) // PyArray_DIM(av, 0)
+ *     if ((nm != PyArray_DIM(aj, 0)) or             # <<<<<<<<<<<<<<
+ *         (nm != PyArray_DIM(av, 0)) or
+ *         (si*rbs * sj*cbs != sv)): raise ValueError(
+ */
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":783
+    /* "PETSc/petscmat.pxi":819
  *         ("input arrays have incompatible shapes: "
  *          "rows.shape=%s, cols.shape=%s, vals.shape=%s") %
  *         (ai.shape, aj.shape, av.shape))             # <<<<<<<<<<<<<<
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ai), __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ai), __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 819, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_aj), __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_aj), __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 819, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_av), __pyx_n_s_shape); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_av), __pyx_n_s_shape); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 819, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 819, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
@@ -27219,38 +28143,46 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
     __pyx_t_3 = 0;
     __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":782
+    /* "PETSc/petscmat.pxi":818
  *         (si*rbs * sj*cbs != sv)): raise ValueError(
  *         ("input arrays have incompatible shapes: "
  *          "rows.shape=%s, cols.shape=%s, vals.shape=%s") %             # <<<<<<<<<<<<<<
  *         (ai.shape, aj.shape, av.shape))
  *     # MatSetValuesXXX function and insert mode
  */
-    __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_input_arrays_have_incompatible_s, __pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_input_arrays_have_incompatible_s, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 818, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "PETSc/petscmat.pxi":780
+    /* "PETSc/petscmat.pxi":816
  *     if ((nm != PyArray_DIM(aj, 0)) or
  *         (nm != PyArray_DIM(av, 0)) or
  *         (si*rbs * sj*cbs != sv)): raise ValueError(             # <<<<<<<<<<<<<<
  *         ("input arrays have incompatible shapes: "
  *          "rows.shape=%s, cols.shape=%s, vals.shape=%s") %
  */
-    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 816, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
     __pyx_t_6 = 0;
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 816, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 816, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":814
+ *     cdef Py_ssize_t sj = PyArray_DIM(aj, 1)
+ *     cdef Py_ssize_t sv = PyArray_SIZE(av) // PyArray_DIM(av, 0)
+ *     if ((nm != PyArray_DIM(aj, 0)) or             # <<<<<<<<<<<<<<
+ *         (nm != PyArray_DIM(av, 0)) or
+ *         (si*rbs * sj*cbs != sv)): raise ValueError(
+ */
   }
 
-  /* "PETSc/petscmat.pxi":786
+  /* "PETSc/petscmat.pxi":822
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)             # <<<<<<<<<<<<<<
@@ -27259,17 +28191,17 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_setvalues = __pyx_f_8petsc4py_5PETSc_matsetvalues_fcn(__pyx_v_blocked, __pyx_v_local);
 
-  /* "PETSc/petscmat.pxi":787
+  /* "PETSc/petscmat.pxi":823
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)
  *     cdef PetscInsertMode addv = insertmode(oaddv)             # <<<<<<<<<<<<<<
  *     # actual calls
  *     cdef Py_ssize_t k=0
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_8 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_8 == ((InsertMode)-1L))) __PYX_ERR(6, 823, __pyx_L1_error)
   __pyx_v_addv = __pyx_t_8;
 
-  /* "PETSc/petscmat.pxi":789
+  /* "PETSc/petscmat.pxi":825
  *     cdef PetscInsertMode addv = insertmode(oaddv)
  *     # actual calls
  *     cdef Py_ssize_t k=0             # <<<<<<<<<<<<<<
@@ -27278,7 +28210,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_k = 0;
 
-  /* "PETSc/petscmat.pxi":790
+  /* "PETSc/petscmat.pxi":826
  *     # actual calls
  *     cdef Py_ssize_t k=0
  *     for k from 0 <= k < nm:             # <<<<<<<<<<<<<<
@@ -27288,17 +28220,17 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_t_9 = __pyx_v_nm;
   for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_9; __pyx_v_k++) {
 
-    /* "PETSc/petscmat.pxi":791
+    /* "PETSc/petscmat.pxi":827
  *     cdef Py_ssize_t k=0
  *     for k from 0 <= k < nm:
  *         CHKERR( setvalues(A,             # <<<<<<<<<<<<<<
  *                           <PetscInt>si, &i[k*si],
  *                           <PetscInt>sj, &j[k*sj],
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_A, ((PetscInt)__pyx_v_si), (&(__pyx_v_i[(__pyx_v_k * __pyx_v_si)])), ((PetscInt)__pyx_v_sj), (&(__pyx_v_j[(__pyx_v_k * __pyx_v_sj)])), (&(__pyx_v_v[(__pyx_v_k * __pyx_v_sv)])), __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 791; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_A, ((PetscInt)__pyx_v_si), (&(__pyx_v_i[(__pyx_v_k * __pyx_v_si)])), ((PetscInt)__pyx_v_sj), (&(__pyx_v_j[(__pyx_v_k * __pyx_v_sj)])), (&(__pyx_v_v[(__pyx_v_k * __pyx_v_sv)])), __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 827, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":795
+  /* "PETSc/petscmat.pxi":831
  *                           <PetscInt>sj, &j[k*sj],
  *                           &v[k*sv], addv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -27308,7 +28240,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":740
+  /* "PETSc/petscmat.pxi":776
  *     return 0
  * 
  * cdef inline int matsetvalues_rcv(PetscMat A,             # <<<<<<<<<<<<<<
@@ -27332,7 +28264,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":797
+/* "PETSc/petscmat.pxi":833
  *     return 0
  * 
  * cdef inline int matsetvalues_ijv(PetscMat A,             # <<<<<<<<<<<<<<
@@ -27349,10 +28281,6 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   PetscInt *__pyx_v_j;
   PetscInt __pyx_v_nv;
   PetscScalar *__pyx_v_v;
-  CYTHON_UNUSED PyObject *__pyx_v_ai = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_aj = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_av = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_am = 0;
   PetscInt __pyx_v_nm;
   PetscInt *__pyx_v_m;
   PetscInt __pyx_v_rs;
@@ -27376,12 +28304,13 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   InsertMode __pyx_t_7;
   PetscInt __pyx_t_8;
   PetscInt __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matsetvalues_ijv", 0);
+  __Pyx_INCREF(__pyx_v_oi);
+  __Pyx_INCREF(__pyx_v_oj);
+  __Pyx_INCREF(__pyx_v_ov);
+  __Pyx_INCREF(__pyx_v_om);
 
-  /* "PETSc/petscmat.pxi":803
+  /* "PETSc/petscmat.pxi":839
  *                                  int blocked, int local) except -1:
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1             # <<<<<<<<<<<<<<
@@ -27391,7 +28320,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_v_rbs = 1;
   __pyx_v_cbs = 1;
 
-  /* "PETSc/petscmat.pxi":804
+  /* "PETSc/petscmat.pxi":840
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )             # <<<<<<<<<<<<<<
@@ -27400,12 +28329,10 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
   __pyx_t_1 = (__pyx_v_blocked != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 840, __pyx_L1_error)
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":805
+  /* "PETSc/petscmat.pxi":841
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1             # <<<<<<<<<<<<<<
@@ -27415,11 +28342,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_t_1 = ((__pyx_v_rbs < 1) != 0);
   if (__pyx_t_1) {
     __pyx_v_rbs = 1;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscmat.pxi":806
+  /* "PETSc/petscmat.pxi":842
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1
  *     if cbs < 1: cbs = 1             # <<<<<<<<<<<<<<
@@ -27429,11 +28354,9 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_t_1 = ((__pyx_v_cbs < 1) != 0);
   if (__pyx_t_1) {
     __pyx_v_cbs = 1;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/petscmat.pxi":808
+  /* "PETSc/petscmat.pxi":844
  *     if cbs < 1: cbs = 1
  *     # column pointers, column indices, and values
  *     cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -27443,7 +28366,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/petscmat.pxi":809
+  /* "PETSc/petscmat.pxi":845
  *     # column pointers, column indices, and values
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL             # <<<<<<<<<<<<<<
@@ -27453,73 +28376,63 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_v_nj = 0;
   __pyx_v_j = NULL;
 
-  /* "PETSc/petscmat.pxi":810
+  /* "PETSc/petscmat.pxi":846
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0             # <<<<<<<<<<<<<<
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)
+ *     oi = iarray_i(oi, &ni, &i)
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":811
+  /* "PETSc/petscmat.pxi":847
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object aj = iarray_i(oj, &nj, &j)
+ *     oi = iarray_i(oi, &ni, &i)
+ *     oj = iarray_i(oj, &nj, &j)
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":812
+  /* "PETSc/petscmat.pxi":848
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)             # <<<<<<<<<<<<<<
- *     cdef object aj = iarray_i(oj, &nj, &j)
- *     cdef object av = iarray_s(ov, &nv, &v)
+ *     oi = iarray_i(oi, &ni, &i)             # <<<<<<<<<<<<<<
+ *     oj = iarray_i(oj, &nj, &j)
+ *     ov = iarray_s(ov, &nv, &v)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 848, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_ai = __pyx_t_3;
+  __Pyx_DECREF_SET(__pyx_v_oi, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":813
+  /* "PETSc/petscmat.pxi":849
  *     cdef PetscScalar *v=NULL
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object aj = iarray_i(oj, &nj, &j)             # <<<<<<<<<<<<<<
- *     cdef object av = iarray_s(ov, &nv, &v)
+ *     oi = iarray_i(oi, &ni, &i)
+ *     oj = iarray_i(oj, &nj, &j)             # <<<<<<<<<<<<<<
+ *     ov = iarray_s(ov, &nv, &v)
  *     # row indices
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_oj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 849, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_aj = __pyx_t_3;
+  __Pyx_DECREF_SET(__pyx_v_oj, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":814
- *     cdef object ai = iarray_i(oi, &ni, &i)
- *     cdef object aj = iarray_i(oj, &nj, &j)
- *     cdef object av = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
+  /* "PETSc/petscmat.pxi":850
+ *     oi = iarray_i(oi, &ni, &i)
+ *     oj = iarray_i(oj, &nj, &j)
+ *     ov = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
  *     # row indices
- *     cdef object am = None
+ *     cdef PetscInt nm=0, *m=NULL
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 814; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_ov, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 850, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_av = __pyx_t_3;
+  __Pyx_DECREF_SET(__pyx_v_ov, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":816
- *     cdef object av = iarray_s(ov, &nv, &v)
+  /* "PETSc/petscmat.pxi":852
+ *     ov = iarray_s(ov, &nv, &v)
  *     # row indices
- *     cdef object am = None             # <<<<<<<<<<<<<<
- *     cdef PetscInt nm=0, *m=NULL
- *     cdef PetscInt rs=0, re=ni-1
- */
-  __Pyx_INCREF(Py_None);
-  __pyx_v_am = Py_None;
-
-  /* "PETSc/petscmat.pxi":817
- *     # row indices
- *     cdef object am = None
  *     cdef PetscInt nm=0, *m=NULL             # <<<<<<<<<<<<<<
  *     cdef PetscInt rs=0, re=ni-1
  *     if om is not None:
@@ -27527,62 +28440,70 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_v_nm = 0;
   __pyx_v_m = NULL;
 
-  /* "PETSc/petscmat.pxi":818
- *     cdef object am = None
+  /* "PETSc/petscmat.pxi":853
+ *     # row indices
  *     cdef PetscInt nm=0, *m=NULL
  *     cdef PetscInt rs=0, re=ni-1             # <<<<<<<<<<<<<<
  *     if om is not None:
- *         am = iarray_i(om, &nm, &m)
+ *         om = iarray_i(om, &nm, &m)
  */
   __pyx_v_rs = 0;
   __pyx_v_re = (__pyx_v_ni - 1);
 
-  /* "PETSc/petscmat.pxi":819
+  /* "PETSc/petscmat.pxi":854
  *     cdef PetscInt nm=0, *m=NULL
  *     cdef PetscInt rs=0, re=ni-1
  *     if om is not None:             # <<<<<<<<<<<<<<
- *         am = iarray_i(om, &nm, &m)
+ *         om = iarray_i(om, &nm, &m)
  *     else:
  */
   __pyx_t_1 = (__pyx_v_om != Py_None);
   __pyx_t_4 = (__pyx_t_1 != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/petscmat.pxi":820
+    /* "PETSc/petscmat.pxi":855
  *     cdef PetscInt rs=0, re=ni-1
  *     if om is not None:
- *         am = iarray_i(om, &nm, &m)             # <<<<<<<<<<<<<<
+ *         om = iarray_i(om, &nm, &m)             # <<<<<<<<<<<<<<
  *     else:
  *         if not local:
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_om, (&__pyx_v_nm), (&__pyx_v_m))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_om, (&__pyx_v_nm), (&__pyx_v_m))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 855, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF_SET(__pyx_v_am, __pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_om, __pyx_t_3);
     __pyx_t_3 = 0;
+
+    /* "PETSc/petscmat.pxi":854
+ *     cdef PetscInt nm=0, *m=NULL
+ *     cdef PetscInt rs=0, re=ni-1
+ *     if om is not None:             # <<<<<<<<<<<<<<
+ *         om = iarray_i(om, &nm, &m)
+ *     else:
+ */
     goto __pyx_L6;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":822
- *         am = iarray_i(om, &nm, &m)
+  /* "PETSc/petscmat.pxi":857
+ *         om = iarray_i(om, &nm, &m)
  *     else:
  *         if not local:             # <<<<<<<<<<<<<<
  *             CHKERR( MatGetOwnershipRange(A, &rs, &re) )
  *             rs //= rbs; re //= rbs
  */
+  /*else*/ {
     __pyx_t_4 = ((!(__pyx_v_local != 0)) != 0);
     if (__pyx_t_4) {
 
-      /* "PETSc/petscmat.pxi":823
+      /* "PETSc/petscmat.pxi":858
  *     else:
  *         if not local:
  *             CHKERR( MatGetOwnershipRange(A, &rs, &re) )             # <<<<<<<<<<<<<<
  *             rs //= rbs; re //= rbs
  *         nm = re - rs
  */
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRange(__pyx_v_A, (&__pyx_v_rs), (&__pyx_v_re))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRange(__pyx_v_A, (&__pyx_v_rs), (&__pyx_v_re))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 858, __pyx_L1_error)
 
-      /* "PETSc/petscmat.pxi":824
+      /* "PETSc/petscmat.pxi":859
  *         if not local:
  *             CHKERR( MatGetOwnershipRange(A, &rs, &re) )
  *             rs //= rbs; re //= rbs             # <<<<<<<<<<<<<<
@@ -27591,11 +28512,17 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
       __pyx_v_rs = (__pyx_v_rs / __pyx_v_rbs);
       __pyx_v_re = (__pyx_v_re / __pyx_v_rbs);
-      goto __pyx_L7;
+
+      /* "PETSc/petscmat.pxi":857
+ *         om = iarray_i(om, &nm, &m)
+ *     else:
+ *         if not local:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatGetOwnershipRange(A, &rs, &re) )
+ *             rs //= rbs; re //= rbs
+ */
     }
-    __pyx_L7:;
 
-    /* "PETSc/petscmat.pxi":825
+    /* "PETSc/petscmat.pxi":860
  *             CHKERR( MatGetOwnershipRange(A, &rs, &re) )
  *             rs //= rbs; re //= rbs
  *         nm = re - rs             # <<<<<<<<<<<<<<
@@ -27606,7 +28533,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   }
   __pyx_L6:;
 
-  /* "PETSc/petscmat.pxi":827
+  /* "PETSc/petscmat.pxi":862
  *         nm = re - rs
  *     # check various sizes
  *     if (ni-1 != nm): raise ValueError(             # <<<<<<<<<<<<<<
@@ -27616,18 +28543,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_t_4 = (((__pyx_v_ni - 1) != __pyx_v_nm) != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/petscmat.pxi":829
+    /* "PETSc/petscmat.pxi":864
  *     if (ni-1 != nm): raise ValueError(
  *         "size(I) is %d, expected %d" %
  *         (toInt(ni), toInt(nm+1)) )             # <<<<<<<<<<<<<<
  *     if (i[0] != 0):raise ValueError(
  *         "I[0] is %d, expected %d" %
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 864, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_nm + 1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_nm + 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 864, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 864, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -27636,38 +28563,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     __pyx_t_3 = 0;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":828
+    /* "PETSc/petscmat.pxi":863
  *     # check various sizes
  *     if (ni-1 != nm): raise ValueError(
  *         "size(I) is %d, expected %d" %             # <<<<<<<<<<<<<<
  *         (toInt(ni), toInt(nm+1)) )
  *     if (i[0] != 0):raise ValueError(
  */
-    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_size_I_is_d_expected_d, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_size_I_is_d_expected_d, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 863, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":827
+    /* "PETSc/petscmat.pxi":862
  *         nm = re - rs
  *     # check various sizes
  *     if (ni-1 != nm): raise ValueError(             # <<<<<<<<<<<<<<
  *         "size(I) is %d, expected %d" %
  *         (toInt(ni), toInt(nm+1)) )
  */
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 862, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 862, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 862, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":830
+  /* "PETSc/petscmat.pxi":865
  *         "size(I) is %d, expected %d" %
  *         (toInt(ni), toInt(nm+1)) )
  *     if (i[0] != 0):raise ValueError(             # <<<<<<<<<<<<<<
@@ -27677,16 +28604,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_t_4 = (((__pyx_v_i[0]) != 0) != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/petscmat.pxi":832
+    /* "PETSc/petscmat.pxi":867
  *     if (i[0] != 0):raise ValueError(
  *         "I[0] is %d, expected %d" %
  *         (toInt(i[0]), 0) )             # <<<<<<<<<<<<<<
  *     if (i[ni-1] != nj): raise ValueError(
  *         "size(J) is %d, expected %d" %
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 867, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 867, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
@@ -27695,38 +28622,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_0);
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":831
+    /* "PETSc/petscmat.pxi":866
  *         (toInt(ni), toInt(nm+1)) )
  *     if (i[0] != 0):raise ValueError(
  *         "I[0] is %d, expected %d" %             # <<<<<<<<<<<<<<
  *         (toInt(i[0]), 0) )
  *     if (i[ni-1] != nj): raise ValueError(
  */
-    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_I_0_is_d_expected_d, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_I_0_is_d_expected_d, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 866, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":830
+    /* "PETSc/petscmat.pxi":865
  *         "size(I) is %d, expected %d" %
  *         (toInt(ni), toInt(nm+1)) )
  *     if (i[0] != 0):raise ValueError(             # <<<<<<<<<<<<<<
  *         "I[0] is %d, expected %d" %
  *         (toInt(i[0]), 0) )
  */
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 865, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 865, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 865, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":833
+  /* "PETSc/petscmat.pxi":868
  *         "I[0] is %d, expected %d" %
  *         (toInt(i[0]), 0) )
  *     if (i[ni-1] != nj): raise ValueError(             # <<<<<<<<<<<<<<
@@ -27736,18 +28663,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_t_4 = (((__pyx_v_i[(__pyx_v_ni - 1)]) != __pyx_v_nj) != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/petscmat.pxi":835
+    /* "PETSc/petscmat.pxi":870
  *     if (i[ni-1] != nj): raise ValueError(
  *         "size(J) is %d, expected %d" %
  *         (toInt(nj), toInt(i[ni-1])) )             # <<<<<<<<<<<<<<
  *     if (nj*rbs*cbs != nv): raise ValueError(
  *         "size(V) is %d, expected %d" %
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 870, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[(__pyx_v_ni - 1)])); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[(__pyx_v_ni - 1)])); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 870, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 870, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
@@ -27756,38 +28683,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":834
+    /* "PETSc/petscmat.pxi":869
  *         (toInt(i[0]), 0) )
  *     if (i[ni-1] != nj): raise ValueError(
  *         "size(J) is %d, expected %d" %             # <<<<<<<<<<<<<<
  *         (toInt(nj), toInt(i[ni-1])) )
  *     if (nj*rbs*cbs != nv): raise ValueError(
  */
-    __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_size_J_is_d_expected_d, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_size_J_is_d_expected_d, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 869, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":833
+    /* "PETSc/petscmat.pxi":868
  *         "I[0] is %d, expected %d" %
  *         (toInt(i[0]), 0) )
  *     if (i[ni-1] != nj): raise ValueError(             # <<<<<<<<<<<<<<
  *         "size(J) is %d, expected %d" %
  *         (toInt(nj), toInt(i[ni-1])) )
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 868, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
     __pyx_t_6 = 0;
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 868, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 868, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":836
+  /* "PETSc/petscmat.pxi":871
  *         "size(J) is %d, expected %d" %
  *         (toInt(nj), toInt(i[ni-1])) )
  *     if (nj*rbs*cbs != nv): raise ValueError(             # <<<<<<<<<<<<<<
@@ -27797,18 +28724,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_t_4 = ((((__pyx_v_nj * __pyx_v_rbs) * __pyx_v_cbs) != __pyx_v_nv) != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/petscmat.pxi":838
+    /* "PETSc/petscmat.pxi":873
  *     if (nj*rbs*cbs != nv): raise ValueError(
  *         "size(V) is %d, expected %d" %
  *         (toInt(nv), toInt(nj*rbs*cbs)) )             # <<<<<<<<<<<<<<
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 873, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(((__pyx_v_nj * __pyx_v_rbs) * __pyx_v_cbs)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(((__pyx_v_nj * __pyx_v_rbs) * __pyx_v_cbs)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 873, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 873, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
@@ -27817,38 +28744,38 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     __pyx_t_6 = 0;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":837
+    /* "PETSc/petscmat.pxi":872
  *         (toInt(nj), toInt(i[ni-1])) )
  *     if (nj*rbs*cbs != nv): raise ValueError(
  *         "size(V) is %d, expected %d" %             # <<<<<<<<<<<<<<
  *         (toInt(nv), toInt(nj*rbs*cbs)) )
  *     # MatSetValuesXXX function and insert mode
  */
-    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_size_V_is_d_expected_d, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_size_V_is_d_expected_d, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 872, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":836
+    /* "PETSc/petscmat.pxi":871
  *         "size(J) is %d, expected %d" %
  *         (toInt(nj), toInt(i[ni-1])) )
  *     if (nj*rbs*cbs != nv): raise ValueError(             # <<<<<<<<<<<<<<
  *         "size(V) is %d, expected %d" %
  *         (toInt(nv), toInt(nj*rbs*cbs)) )
  */
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 871, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 871, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 871, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":841
+  /* "PETSc/petscmat.pxi":876
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)             # <<<<<<<<<<<<<<
@@ -27857,17 +28784,17 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
   __pyx_v_setvalues = __pyx_f_8petsc4py_5PETSc_matsetvalues_fcn(__pyx_v_blocked, __pyx_v_local);
 
-  /* "PETSc/petscmat.pxi":842
+  /* "PETSc/petscmat.pxi":877
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)
  *     cdef PetscInsertMode addv = insertmode(oaddv)             # <<<<<<<<<<<<<<
  *     # actual call
  *     cdef PetscInt k=0, l=0
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_7 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_7 == ((InsertMode)-1L))) __PYX_ERR(6, 877, __pyx_L1_error)
   __pyx_v_addv = __pyx_t_7;
 
-  /* "PETSc/petscmat.pxi":844
+  /* "PETSc/petscmat.pxi":879
  *     cdef PetscInsertMode addv = insertmode(oaddv)
  *     # actual call
  *     cdef PetscInt k=0, l=0             # <<<<<<<<<<<<<<
@@ -27877,7 +28804,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_v_k = 0;
   __pyx_v_l = 0;
 
-  /* "PETSc/petscmat.pxi":845
+  /* "PETSc/petscmat.pxi":880
  *     # actual call
  *     cdef PetscInt k=0, l=0
  *     cdef PetscInt irow=0, ncol=0, *icol=NULL             # <<<<<<<<<<<<<<
@@ -27888,7 +28815,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_v_ncol = 0;
   __pyx_v_icol = NULL;
 
-  /* "PETSc/petscmat.pxi":846
+  /* "PETSc/petscmat.pxi":881
  *     cdef PetscInt k=0, l=0
  *     cdef PetscInt irow=0, ncol=0, *icol=NULL
  *     cdef PetscScalar *sval=NULL             # <<<<<<<<<<<<<<
@@ -27897,7 +28824,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
   __pyx_v_sval = NULL;
 
-  /* "PETSc/petscmat.pxi":847
+  /* "PETSc/petscmat.pxi":882
  *     cdef PetscInt irow=0, ncol=0, *icol=NULL
  *     cdef PetscScalar *sval=NULL
  *     for k from 0 <= k < nm:             # <<<<<<<<<<<<<<
@@ -27907,7 +28834,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_t_8 = __pyx_v_nm;
   for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_8; __pyx_v_k++) {
 
-    /* "PETSc/petscmat.pxi":848
+    /* "PETSc/petscmat.pxi":883
  *     cdef PetscScalar *sval=NULL
  *     for k from 0 <= k < nm:
  *         irow = m[k] if m!=NULL else rs+k             # <<<<<<<<<<<<<<
@@ -27921,7 +28848,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     }
     __pyx_v_irow = __pyx_t_9;
 
-    /* "PETSc/petscmat.pxi":849
+    /* "PETSc/petscmat.pxi":884
  *     for k from 0 <= k < nm:
  *         irow = m[k] if m!=NULL else rs+k
  *         ncol = i[k+1] - i[k]             # <<<<<<<<<<<<<<
@@ -27930,7 +28857,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
     __pyx_v_ncol = ((__pyx_v_i[(__pyx_v_k + 1)]) - (__pyx_v_i[__pyx_v_k]));
 
-    /* "PETSc/petscmat.pxi":850
+    /* "PETSc/petscmat.pxi":885
  *         irow = m[k] if m!=NULL else rs+k
  *         ncol = i[k+1] - i[k]
  *         icol = j + i[k]             # <<<<<<<<<<<<<<
@@ -27939,7 +28866,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
     __pyx_v_icol = (__pyx_v_j + (__pyx_v_i[__pyx_v_k]));
 
-    /* "PETSc/petscmat.pxi":851
+    /* "PETSc/petscmat.pxi":886
  *         ncol = i[k+1] - i[k]
  *         icol = j + i[k]
  *         if blocked:             # <<<<<<<<<<<<<<
@@ -27949,7 +28876,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     __pyx_t_4 = (__pyx_v_blocked != 0);
     if (__pyx_t_4) {
 
-      /* "PETSc/petscmat.pxi":852
+      /* "PETSc/petscmat.pxi":887
  *         icol = j + i[k]
  *         if blocked:
  *             sval = v + i[k]*rbs*cbs             # <<<<<<<<<<<<<<
@@ -27958,7 +28885,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
       __pyx_v_sval = (__pyx_v_v + (((__pyx_v_i[__pyx_v_k]) * __pyx_v_rbs) * __pyx_v_cbs));
 
-      /* "PETSc/petscmat.pxi":853
+      /* "PETSc/petscmat.pxi":888
  *         if blocked:
  *             sval = v + i[k]*rbs*cbs
  *             for l from 0 <= l < ncol:             # <<<<<<<<<<<<<<
@@ -27968,41 +28895,49 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
       __pyx_t_9 = __pyx_v_ncol;
       for (__pyx_v_l = 0; __pyx_v_l < __pyx_t_9; __pyx_v_l++) {
 
-        /* "PETSc/petscmat.pxi":854
+        /* "PETSc/petscmat.pxi":889
  *             sval = v + i[k]*rbs*cbs
  *             for l from 0 <= l < ncol:
  *                 CHKERR( setvalues(A, 1, &irow, 1, &icol[l],             # <<<<<<<<<<<<<<
  *                                   &sval[l*rbs*cbs], addv) )
  *         else:
  */
-        __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_A, 1, (&__pyx_v_irow), 1, (&(__pyx_v_icol[__pyx_v_l])), (&(__pyx_v_sval[((__pyx_v_l * __pyx_v_rbs) * __pyx_v_cbs)])), __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 854; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_A, 1, (&__pyx_v_irow), 1, (&(__pyx_v_icol[__pyx_v_l])), (&(__pyx_v_sval[((__pyx_v_l * __pyx_v_rbs) * __pyx_v_cbs)])), __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 889, __pyx_L1_error)
       }
+
+      /* "PETSc/petscmat.pxi":886
+ *         ncol = i[k+1] - i[k]
+ *         icol = j + i[k]
+ *         if blocked:             # <<<<<<<<<<<<<<
+ *             sval = v + i[k]*rbs*cbs
+ *             for l from 0 <= l < ncol:
+ */
       goto __pyx_L14;
     }
-    /*else*/ {
 
-      /* "PETSc/petscmat.pxi":857
+    /* "PETSc/petscmat.pxi":892
  *                                   &sval[l*rbs*cbs], addv) )
  *         else:
  *             sval = v + i[k]             # <<<<<<<<<<<<<<
  *             CHKERR( setvalues(A, 1, &irow, ncol, icol, sval, addv) )
  *     return 0
  */
+    /*else*/ {
       __pyx_v_sval = (__pyx_v_v + (__pyx_v_i[__pyx_v_k]));
 
-      /* "PETSc/petscmat.pxi":858
+      /* "PETSc/petscmat.pxi":893
  *         else:
  *             sval = v + i[k]
  *             CHKERR( setvalues(A, 1, &irow, ncol, icol, sval, addv) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_A, 1, (&__pyx_v_irow), __pyx_v_ncol, __pyx_v_icol, __pyx_v_sval, __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_v_setvalues(__pyx_v_A, 1, (&__pyx_v_irow), __pyx_v_ncol, __pyx_v_icol, __pyx_v_sval, __pyx_v_addv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 893, __pyx_L1_error)
     }
     __pyx_L14:;
   }
 
-  /* "PETSc/petscmat.pxi":859
+  /* "PETSc/petscmat.pxi":894
  *             sval = v + i[k]
  *             CHKERR( setvalues(A, 1, &irow, ncol, icol, sval, addv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -28012,7 +28947,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":797
+  /* "PETSc/petscmat.pxi":833
  *     return 0
  * 
  * cdef inline int matsetvalues_ijv(PetscMat A,             # <<<<<<<<<<<<<<
@@ -28028,15 +28963,15 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __Pyx_AddTraceback("petsc4py.PETSc.matsetvalues_ijv", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_ai);
-  __Pyx_XDECREF(__pyx_v_aj);
-  __Pyx_XDECREF(__pyx_v_av);
-  __Pyx_XDECREF(__pyx_v_am);
+  __Pyx_XDECREF(__pyx_v_oi);
+  __Pyx_XDECREF(__pyx_v_oj);
+  __Pyx_XDECREF(__pyx_v_ov);
+  __Pyx_XDECREF(__pyx_v_om);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":861
+/* "PETSc/petscmat.pxi":896
  *     return 0
  * 
  * cdef inline int matsetvalues_csr(PetscMat A,             # <<<<<<<<<<<<<<
@@ -28048,21 +28983,18 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(Mat __pyx_v_A
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matsetvalues_csr", 0);
 
-  /* "PETSc/petscmat.pxi":865
+  /* "PETSc/petscmat.pxi":900
  *                                  object oaddv,
  *                                  int blocked, int local) except -1:
  *     matsetvalues_ijv(A, oi, oj, ov, oaddv, None, blocked, local)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_A, __pyx_v_oi, __pyx_v_oj, __pyx_v_ov, __pyx_v_oaddv, Py_None, __pyx_v_blocked, __pyx_v_local); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_A, __pyx_v_oi, __pyx_v_oj, __pyx_v_ov, __pyx_v_oaddv, Py_None, __pyx_v_blocked, __pyx_v_local); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 900, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":866
+  /* "PETSc/petscmat.pxi":901
  *                                  int blocked, int local) except -1:
  *     matsetvalues_ijv(A, oi, oj, ov, oaddv, None, blocked, local)
  *     return 0             # <<<<<<<<<<<<<<
@@ -28072,7 +29004,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":861
+  /* "PETSc/petscmat.pxi":896
  *     return 0
  * 
  * cdef inline int matsetvalues_csr(PetscMat A,             # <<<<<<<<<<<<<<
@@ -28089,7 +29021,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":868
+/* "PETSc/petscmat.pxi":903
  *     return 0
  * 
  * cdef inline matgetvalues(PetscMat mat,             # <<<<<<<<<<<<<<
@@ -28115,13 +29047,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matgetvalues", 0);
   __Pyx_INCREF(__pyx_v_values);
 
-  /* "PETSc/petscmat.pxi":870
+  /* "PETSc/petscmat.pxi":905
  * cdef inline matgetvalues(PetscMat mat,
  *                          object orows, object ocols, object values):
  *     cdef PetscInt ni=0, nj=0, nv=0             # <<<<<<<<<<<<<<
@@ -28132,7 +29061,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __pyx_v_nj = 0;
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":871
+  /* "PETSc/petscmat.pxi":906
  *                          object orows, object ocols, object values):
  *     cdef PetscInt ni=0, nj=0, nv=0
  *     cdef PetscInt *i=NULL, *j=NULL             # <<<<<<<<<<<<<<
@@ -28142,7 +29071,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __pyx_v_i = NULL;
   __pyx_v_j = NULL;
 
-  /* "PETSc/petscmat.pxi":872
+  /* "PETSc/petscmat.pxi":907
  *     cdef PetscInt ni=0, nj=0, nv=0
  *     cdef PetscInt *i=NULL, *j=NULL
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -28151,31 +29080,31 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":873
+  /* "PETSc/petscmat.pxi":908
  *     cdef PetscInt *i=NULL, *j=NULL
  *     cdef PetscScalar *v=NULL
  *     cdef ndarray rows = iarray_i(orows, &ni, &i)             # <<<<<<<<<<<<<<
  *     cdef ndarray cols = iarray_i(ocols, &nj, &j)
  *     if values is None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_orows, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_orows, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 908, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rows = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":874
+  /* "PETSc/petscmat.pxi":909
  *     cdef PetscScalar *v=NULL
  *     cdef ndarray rows = iarray_i(orows, &ni, &i)
  *     cdef ndarray cols = iarray_i(ocols, &nj, &j)             # <<<<<<<<<<<<<<
  *     if values is None:
  *         values = empty_s(ni*nj)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_ocols, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_ocols, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 909, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_cols = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":875
+  /* "PETSc/petscmat.pxi":910
  *     cdef ndarray rows = iarray_i(orows, &ni, &i)
  *     cdef ndarray cols = iarray_i(ocols, &nj, &j)
  *     if values is None:             # <<<<<<<<<<<<<<
@@ -28186,52 +29115,58 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":876
+    /* "PETSc/petscmat.pxi":911
  *     cdef ndarray cols = iarray_i(ocols, &nj, &j)
  *     if values is None:
  *         values = empty_s(ni*nj)             # <<<<<<<<<<<<<<
  *         values.shape = rows.shape + cols.shape
  *     values = oarray_s(values, &nv, &v)
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_s((__pyx_v_ni * __pyx_v_nj))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_s((__pyx_v_ni * __pyx_v_nj))); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 911, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/petscmat.pxi":877
+    /* "PETSc/petscmat.pxi":912
  *     if values is None:
  *         values = empty_s(ni*nj)
  *         values.shape = rows.shape + cols.shape             # <<<<<<<<<<<<<<
  *     values = oarray_s(values, &nv, &v)
  *     if (ni*nj != nv): raise ValueError(
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_rows), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_rows), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 912, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 912, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 912, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_values, __pyx_n_s_shape, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_values, __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(6, 912, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/petscmat.pxi":910
+ *     cdef ndarray rows = iarray_i(orows, &ni, &i)
+ *     cdef ndarray cols = iarray_i(ocols, &nj, &j)
+ *     if values is None:             # <<<<<<<<<<<<<<
+ *         values = empty_s(ni*nj)
+ *         values.shape = rows.shape + cols.shape
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":878
+  /* "PETSc/petscmat.pxi":913
  *         values = empty_s(ni*nj)
  *         values.shape = rows.shape + cols.shape
  *     values = oarray_s(values, &nv, &v)             # <<<<<<<<<<<<<<
  *     if (ni*nj != nv): raise ValueError(
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
  */
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_v_values, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_v_values, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 913, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscmat.pxi":879
+  /* "PETSc/petscmat.pxi":914
  *         values.shape = rows.shape + cols.shape
  *     values = oarray_s(values, &nv, &v)
  *     if (ni*nj != nv): raise ValueError(             # <<<<<<<<<<<<<<
@@ -28241,20 +29176,20 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __pyx_t_3 = (((__pyx_v_ni * __pyx_v_nj) != __pyx_v_nv) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":881
+    /* "PETSc/petscmat.pxi":916
  *     if (ni*nj != nv): raise ValueError(
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
  *         (toInt(ni), toInt(nj), toInt(nv)))             # <<<<<<<<<<<<<<
  *     CHKERR( MatGetValues(mat, ni, i, nj, j, v) )
  *     return values
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 916, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 916, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 916, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 916, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
@@ -28266,47 +29201,47 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
     __pyx_t_4 = 0;
     __pyx_t_1 = 0;
 
-    /* "PETSc/petscmat.pxi":880
+    /* "PETSc/petscmat.pxi":915
  *     values = oarray_s(values, &nv, &v)
  *     if (ni*nj != nv): raise ValueError(
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %             # <<<<<<<<<<<<<<
  *         (toInt(ni), toInt(nj), toInt(nv)))
  *     CHKERR( MatGetValues(mat, ni, i, nj, j, v) )
  */
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_ni_d_nj, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_ni_d_nj, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 915, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":879
+    /* "PETSc/petscmat.pxi":914
  *         values.shape = rows.shape + cols.shape
  *     values = oarray_s(values, &nv, &v)
  *     if (ni*nj != nv): raise ValueError(             # <<<<<<<<<<<<<<
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
  *         (toInt(ni), toInt(nj), toInt(nv)))
  */
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 914, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 914, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 914, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":882
+  /* "PETSc/petscmat.pxi":917
  *         "incompatible array sizes: ni=%d, nj=%d, nv=%d" %
  *         (toInt(ni), toInt(nj), toInt(nv)))
  *     CHKERR( MatGetValues(mat, ni, i, nj, j, v) )             # <<<<<<<<<<<<<<
  *     return values
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetValues(__pyx_v_mat, __pyx_v_ni, __pyx_v_i, __pyx_v_nj, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetValues(__pyx_v_mat, __pyx_v_ni, __pyx_v_i, __pyx_v_nj, __pyx_v_j, __pyx_v_v)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(6, 917, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":883
+  /* "PETSc/petscmat.pxi":918
  *         (toInt(ni), toInt(nj), toInt(nv)))
  *     CHKERR( MatGetValues(mat, ni, i, nj, j, v) )
  *     return values             # <<<<<<<<<<<<<<
@@ -28318,7 +29253,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __pyx_r = __pyx_v_values;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":868
+  /* "PETSc/petscmat.pxi":903
  *     return 0
  * 
  * cdef inline matgetvalues(PetscMat mat,             # <<<<<<<<<<<<<<
@@ -28343,7 +29278,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":890
+/* "PETSc/petscmat.pxi":925
  *     int MatFactorInfoDefaults(PetscBool,PetscBool,PetscMatFactorInfo*)
  * 
  * cdef inline PetscMatFactorShiftType matfactorshifttype(object st) \             # <<<<<<<<<<<<<<
@@ -28359,12 +29294,9 @@ static CYTHON_INLINE MatFactorShiftType __pyx_f_8petsc4py_5PETSc_matfactorshiftt
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   MatFactorShiftType __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matfactorshifttype", 0);
 
-  /* "PETSc/petscmat.pxi":892
+  /* "PETSc/petscmat.pxi":927
  * cdef inline PetscMatFactorShiftType matfactorshifttype(object st) \
  *     except <PetscMatFactorShiftType>(-1):
  *     if isinstance(st, str):             # <<<<<<<<<<<<<<
@@ -28375,120 +29307,128 @@ static CYTHON_INLINE MatFactorShiftType __pyx_f_8petsc4py_5PETSc_matfactorshiftt
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":893
+    /* "PETSc/petscmat.pxi":928
  *     except <PetscMatFactorShiftType>(-1):
  *     if isinstance(st, str):
  *         if st == "none": return MAT_SHIFT_NONE             # <<<<<<<<<<<<<<
  *         if st == "nonzero": return MAT_SHIFT_NONZERO
  *         if st == "positive_definite": return MAT_SHIFT_POSITIVE_DEFINITE
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_none, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_none, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(6, 928, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_NONE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":894
+    /* "PETSc/petscmat.pxi":929
  *     if isinstance(st, str):
  *         if st == "none": return MAT_SHIFT_NONE
  *         if st == "nonzero": return MAT_SHIFT_NONZERO             # <<<<<<<<<<<<<<
  *         if st == "positive_definite": return MAT_SHIFT_POSITIVE_DEFINITE
  *         if st == "inblocks": return MAT_SHIFT_INBLOCKS
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_nonzero, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_nonzero, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(6, 929, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_NONZERO;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":895
+    /* "PETSc/petscmat.pxi":930
  *         if st == "none": return MAT_SHIFT_NONE
  *         if st == "nonzero": return MAT_SHIFT_NONZERO
  *         if st == "positive_definite": return MAT_SHIFT_POSITIVE_DEFINITE             # <<<<<<<<<<<<<<
  *         if st == "inblocks": return MAT_SHIFT_INBLOCKS
  *         if st == "na": return MAT_SHIFT_NONZERO
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_positive_definite, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_positive_definite, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(6, 930, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_POSITIVE_DEFINITE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":896
+    /* "PETSc/petscmat.pxi":931
  *         if st == "nonzero": return MAT_SHIFT_NONZERO
  *         if st == "positive_definite": return MAT_SHIFT_POSITIVE_DEFINITE
  *         if st == "inblocks": return MAT_SHIFT_INBLOCKS             # <<<<<<<<<<<<<<
  *         if st == "na": return MAT_SHIFT_NONZERO
  *         if st == "pd": return MAT_SHIFT_POSITIVE_DEFINITE
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_inblocks, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_inblocks, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(6, 931, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_INBLOCKS;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":897
+    /* "PETSc/petscmat.pxi":932
  *         if st == "positive_definite": return MAT_SHIFT_POSITIVE_DEFINITE
  *         if st == "inblocks": return MAT_SHIFT_INBLOCKS
  *         if st == "na": return MAT_SHIFT_NONZERO             # <<<<<<<<<<<<<<
  *         if st == "pd": return MAT_SHIFT_POSITIVE_DEFINITE
  *         else: raise ValueError("unknown shift type: %s" % st)
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_na, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_na, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(6, 932, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_NONZERO;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":898
+    /* "PETSc/petscmat.pxi":933
  *         if st == "inblocks": return MAT_SHIFT_INBLOCKS
  *         if st == "na": return MAT_SHIFT_NONZERO
  *         if st == "pd": return MAT_SHIFT_POSITIVE_DEFINITE             # <<<<<<<<<<<<<<
  *         else: raise ValueError("unknown shift type: %s" % st)
  *     return st
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_pd, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_st, __pyx_n_s_pd, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(6, 933, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_POSITIVE_DEFINITE;
       goto __pyx_L0;
     }
-    /*else*/ {
 
-      /* "PETSc/petscmat.pxi":899
+    /* "PETSc/petscmat.pxi":934
  *         if st == "na": return MAT_SHIFT_NONZERO
  *         if st == "pd": return MAT_SHIFT_POSITIVE_DEFINITE
  *         else: raise ValueError("unknown shift type: %s" % st)             # <<<<<<<<<<<<<<
  *     return st
  * 
  */
-      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_shift_type_s, __pyx_v_st); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_shift_type_s, __pyx_v_st); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 934, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 934, __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 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 934, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 934, __pyx_L1_error)
     }
+
+    /* "PETSc/petscmat.pxi":927
+ * cdef inline PetscMatFactorShiftType matfactorshifttype(object st) \
+ *     except <PetscMatFactorShiftType>(-1):
+ *     if isinstance(st, str):             # <<<<<<<<<<<<<<
+ *         if st == "none": return MAT_SHIFT_NONE
+ *         if st == "nonzero": return MAT_SHIFT_NONZERO
+ */
   }
 
-  /* "PETSc/petscmat.pxi":900
+  /* "PETSc/petscmat.pxi":935
  *         if st == "pd": return MAT_SHIFT_POSITIVE_DEFINITE
  *         else: raise ValueError("unknown shift type: %s" % st)
  *     return st             # <<<<<<<<<<<<<<
  * 
  * cdef int matfactorinfo(PetscBool inc, PetscBool chol, object opts,
  */
-  __pyx_t_5 = ((MatFactorShiftType)PyInt_AsLong(__pyx_v_st)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((MatFactorShiftType)__Pyx_PyInt_As_MatFactorShiftType(__pyx_v_st)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 935, __pyx_L1_error)
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":890
+  /* "PETSc/petscmat.pxi":925
  *     int MatFactorInfoDefaults(PetscBool,PetscBool,PetscMatFactorInfo*)
  * 
  * cdef inline PetscMatFactorShiftType matfactorshifttype(object st) \             # <<<<<<<<<<<<<<
@@ -28501,13 +29441,13 @@ static CYTHON_INLINE MatFactorShiftType __pyx_f_8petsc4py_5PETSc_matfactorshiftt
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("petsc4py.PETSc.matfactorshifttype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((MatFactorShiftType)-1);
+  __pyx_r = ((MatFactorShiftType)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":902
+/* "PETSc/petscmat.pxi":937
  *     return st
  * 
  * cdef int matfactorinfo(PetscBool inc, PetscBool chol, object opts,             # <<<<<<<<<<<<<<
@@ -28537,21 +29477,18 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   PetscInt __pyx_t_7;
   int __pyx_t_8;
   MatFactorShiftType __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matfactorinfo", 0);
 
-  /* "PETSc/petscmat.pxi":904
+  /* "PETSc/petscmat.pxi":939
  * cdef int matfactorinfo(PetscBool inc, PetscBool chol, object opts,
  *                        PetscMatFactorInfo *info) except -1:
  *     CHKERR( MatFactorInfoDefaults(inc,chol,info) )             # <<<<<<<<<<<<<<
  *     if opts is None: return 0
  *     cdef dict options = dict(opts)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatFactorInfoDefaults(__pyx_v_inc, __pyx_v_chol, __pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatFactorInfoDefaults(__pyx_v_inc, __pyx_v_chol, __pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(6, 939, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":905
+  /* "PETSc/petscmat.pxi":940
  *                        PetscMatFactorInfo *info) except -1:
  *     CHKERR( MatFactorInfoDefaults(inc,chol,info) )
  *     if opts is None: return 0             # <<<<<<<<<<<<<<
@@ -28565,40 +29502,40 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":906
+  /* "PETSc/petscmat.pxi":941
  *     CHKERR( MatFactorInfoDefaults(inc,chol,info) )
  *     if opts is None: return 0
  *     cdef dict options = dict(opts)             # <<<<<<<<<<<<<<
  *     #
  *     cdef fill = options.pop('fill', None)
  */
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 941, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_opts);
   __Pyx_GIVEREF(__pyx_v_opts);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_opts);
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyDict_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 941, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_options = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscmat.pxi":908
+  /* "PETSc/petscmat.pxi":943
  *     cdef dict options = dict(opts)
  *     #
  *     cdef fill = options.pop('fill', None)             # <<<<<<<<<<<<<<
  *     if fill is not None:
  *         info.fill = asReal(fill)
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 943, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 943, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_fill = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscmat.pxi":909
+  /* "PETSc/petscmat.pxi":944
  *     #
  *     cdef fill = options.pop('fill', None)
  *     if fill is not None:             # <<<<<<<<<<<<<<
@@ -28609,35 +29546,41 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":910
+    /* "PETSc/petscmat.pxi":945
  *     cdef fill = options.pop('fill', None)
  *     if fill is not None:
  *         info.fill = asReal(fill)             # <<<<<<<<<<<<<<
  *     #
  *     cdef zeropivot = options.pop('zeropivot', None)
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) __PYX_ERR(6, 945, __pyx_L1_error)
     __pyx_v_info->fill = __pyx_t_6;
-    goto __pyx_L4;
+
+    /* "PETSc/petscmat.pxi":944
+ *     #
+ *     cdef fill = options.pop('fill', None)
+ *     if fill is not None:             # <<<<<<<<<<<<<<
+ *         info.fill = asReal(fill)
+ *     #
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscmat.pxi":912
+  /* "PETSc/petscmat.pxi":947
  *         info.fill = asReal(fill)
  *     #
  *     cdef zeropivot = options.pop('zeropivot', None)             # <<<<<<<<<<<<<<
  *     if zeropivot is not None:
  *         info.zeropivot = asReal(zeropivot)
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 912; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 947, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 912; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 947, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_zeropivot = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscmat.pxi":913
+  /* "PETSc/petscmat.pxi":948
  *     #
  *     cdef zeropivot = options.pop('zeropivot', None)
  *     if zeropivot is not None:             # <<<<<<<<<<<<<<
@@ -28648,35 +29591,41 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":914
+    /* "PETSc/petscmat.pxi":949
  *     cdef zeropivot = options.pop('zeropivot', None)
  *     if zeropivot is not None:
  *         info.zeropivot = asReal(zeropivot)             # <<<<<<<<<<<<<<
  *     #
  *     cdef levels = options.pop('levels', None)
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zeropivot); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 914; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zeropivot); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) __PYX_ERR(6, 949, __pyx_L1_error)
     __pyx_v_info->zeropivot = __pyx_t_6;
-    goto __pyx_L5;
+
+    /* "PETSc/petscmat.pxi":948
+ *     #
+ *     cdef zeropivot = options.pop('zeropivot', None)
+ *     if zeropivot is not None:             # <<<<<<<<<<<<<<
+ *         info.zeropivot = asReal(zeropivot)
+ *     #
+ */
   }
-  __pyx_L5:;
 
-  /* "PETSc/petscmat.pxi":916
+  /* "PETSc/petscmat.pxi":951
  *         info.zeropivot = asReal(zeropivot)
  *     #
  *     cdef levels = options.pop('levels', None)             # <<<<<<<<<<<<<<
  *     if levels is not None:
  *         info.levels  = <PetscReal>asInt(levels)
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 951, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 951, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_levels = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscmat.pxi":917
+  /* "PETSc/petscmat.pxi":952
  *     #
  *     cdef levels = options.pop('levels', None)
  *     if levels is not None:             # <<<<<<<<<<<<<<
@@ -28687,35 +29636,41 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":918
+    /* "PETSc/petscmat.pxi":953
  *     cdef levels = options.pop('levels', None)
  *     if levels is not None:
  *         info.levels  = <PetscReal>asInt(levels)             # <<<<<<<<<<<<<<
  *     cdef diagonal_fill = options.pop('diagonal_fill', None)
  *     if diagonal_fill is not None:
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_7 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 918; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_7 == -1L && PyErr_Occurred())) __PYX_ERR(6, 953, __pyx_L1_error)
     __pyx_v_info->levels = ((PetscReal)__pyx_t_7);
-    goto __pyx_L6;
+
+    /* "PETSc/petscmat.pxi":952
+ *     #
+ *     cdef levels = options.pop('levels', None)
+ *     if levels is not None:             # <<<<<<<<<<<<<<
+ *         info.levels  = <PetscReal>asInt(levels)
+ *     cdef diagonal_fill = options.pop('diagonal_fill', None)
+ */
   }
-  __pyx_L6:;
 
-  /* "PETSc/petscmat.pxi":919
+  /* "PETSc/petscmat.pxi":954
  *     if levels is not None:
  *         info.levels  = <PetscReal>asInt(levels)
  *     cdef diagonal_fill = options.pop('diagonal_fill', None)             # <<<<<<<<<<<<<<
  *     if diagonal_fill is not None:
  *         info.diagonal_fill = <PetscReal>(<bint>diagonal_fill)
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 954, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 954, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_diagonal_fill = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscmat.pxi":920
+  /* "PETSc/petscmat.pxi":955
  *         info.levels  = <PetscReal>asInt(levels)
  *     cdef diagonal_fill = options.pop('diagonal_fill', None)
  *     if diagonal_fill is not None:             # <<<<<<<<<<<<<<
@@ -28726,35 +29681,41 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":921
+    /* "PETSc/petscmat.pxi":956
  *     cdef diagonal_fill = options.pop('diagonal_fill', None)
  *     if diagonal_fill is not None:
  *         info.diagonal_fill = <PetscReal>(<bint>diagonal_fill)             # <<<<<<<<<<<<<<
  *     #
  *     cdef dt = options.pop('dt', None)
  */
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_diagonal_fill); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_diagonal_fill); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(6, 956, __pyx_L1_error)
     __pyx_v_info->diagonal_fill = ((PetscReal)__pyx_t_3);
-    goto __pyx_L7;
+
+    /* "PETSc/petscmat.pxi":955
+ *         info.levels  = <PetscReal>asInt(levels)
+ *     cdef diagonal_fill = options.pop('diagonal_fill', None)
+ *     if diagonal_fill is not None:             # <<<<<<<<<<<<<<
+ *         info.diagonal_fill = <PetscReal>(<bint>diagonal_fill)
+ *     #
+ */
   }
-  __pyx_L7:;
 
-  /* "PETSc/petscmat.pxi":923
+  /* "PETSc/petscmat.pxi":958
  *         info.diagonal_fill = <PetscReal>(<bint>diagonal_fill)
  *     #
  *     cdef dt = options.pop('dt', None)             # <<<<<<<<<<<<<<
  *     if dt is not None:
  *         info.dt = asReal(dt)
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 958, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 958, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_dt = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscmat.pxi":924
+  /* "PETSc/petscmat.pxi":959
  *     #
  *     cdef dt = options.pop('dt', None)
  *     if dt is not None:             # <<<<<<<<<<<<<<
@@ -28765,35 +29726,41 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":925
+    /* "PETSc/petscmat.pxi":960
  *     cdef dt = options.pop('dt', None)
  *     if dt is not None:
  *         info.dt = asReal(dt)             # <<<<<<<<<<<<<<
  *     cdef dtcol = options.pop('dtcol', None)
  *     if dtcol is not None:
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_dt); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 925; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_dt); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) __PYX_ERR(6, 960, __pyx_L1_error)
     __pyx_v_info->dt = __pyx_t_6;
-    goto __pyx_L8;
+
+    /* "PETSc/petscmat.pxi":959
+ *     #
+ *     cdef dt = options.pop('dt', None)
+ *     if dt is not None:             # <<<<<<<<<<<<<<
+ *         info.dt = asReal(dt)
+ *     cdef dtcol = options.pop('dtcol', None)
+ */
   }
-  __pyx_L8:;
 
-  /* "PETSc/petscmat.pxi":926
+  /* "PETSc/petscmat.pxi":961
  *     if dt is not None:
  *         info.dt = asReal(dt)
  *     cdef dtcol = options.pop('dtcol', None)             # <<<<<<<<<<<<<<
  *     if dtcol is not None:
  *         info.dtcol = asReal(dtcol)
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 961, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 961, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_dtcol = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscmat.pxi":927
+  /* "PETSc/petscmat.pxi":962
  *         info.dt = asReal(dt)
  *     cdef dtcol = options.pop('dtcol', None)
  *     if dtcol is not None:             # <<<<<<<<<<<<<<
@@ -28804,35 +29771,41 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":928
+    /* "PETSc/petscmat.pxi":963
  *     cdef dtcol = options.pop('dtcol', None)
  *     if dtcol is not None:
  *         info.dtcol = asReal(dtcol)             # <<<<<<<<<<<<<<
  *     cdef dtcount = options.pop('dtcount', None)
  *     if dtcount is not None:
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_dtcol); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_dtcol); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) __PYX_ERR(6, 963, __pyx_L1_error)
     __pyx_v_info->dtcol = __pyx_t_6;
-    goto __pyx_L9;
+
+    /* "PETSc/petscmat.pxi":962
+ *         info.dt = asReal(dt)
+ *     cdef dtcol = options.pop('dtcol', None)
+ *     if dtcol is not None:             # <<<<<<<<<<<<<<
+ *         info.dtcol = asReal(dtcol)
+ *     cdef dtcount = options.pop('dtcount', None)
+ */
   }
-  __pyx_L9:;
 
-  /* "PETSc/petscmat.pxi":929
+  /* "PETSc/petscmat.pxi":964
  *     if dtcol is not None:
  *         info.dtcol = asReal(dtcol)
  *     cdef dtcount = options.pop('dtcount', None)             # <<<<<<<<<<<<<<
  *     if dtcount is not None:
  *         info.dtcount = <PetscReal>asInt(dtcount)
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 964, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 964, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_dtcount = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscmat.pxi":930
+  /* "PETSc/petscmat.pxi":965
  *         info.dtcol = asReal(dtcol)
  *     cdef dtcount = options.pop('dtcount', None)
  *     if dtcount is not None:             # <<<<<<<<<<<<<<
@@ -28843,20 +29816,26 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":931
+    /* "PETSc/petscmat.pxi":966
  *     cdef dtcount = options.pop('dtcount', None)
  *     if dtcount is not None:
  *         info.dtcount = <PetscReal>asInt(dtcount)             # <<<<<<<<<<<<<<
  *     if ((dt is not None) or
  *         (dtcol is not None) or
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dtcount); if (unlikely(__pyx_t_7 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dtcount); if (unlikely(__pyx_t_7 == -1L && PyErr_Occurred())) __PYX_ERR(6, 966, __pyx_L1_error)
     __pyx_v_info->dtcount = ((PetscReal)__pyx_t_7);
-    goto __pyx_L10;
+
+    /* "PETSc/petscmat.pxi":965
+ *         info.dtcol = asReal(dtcol)
+ *     cdef dtcount = options.pop('dtcount', None)
+ *     if dtcount is not None:             # <<<<<<<<<<<<<<
+ *         info.dtcount = <PetscReal>asInt(dtcount)
+ *     if ((dt is not None) or
+ */
   }
-  __pyx_L10:;
 
-  /* "PETSc/petscmat.pxi":932
+  /* "PETSc/petscmat.pxi":967
  *     if dtcount is not None:
  *         info.dtcount = <PetscReal>asInt(dtcount)
  *     if ((dt is not None) or             # <<<<<<<<<<<<<<
@@ -28871,7 +29850,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
     goto __pyx_L12_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":933
+  /* "PETSc/petscmat.pxi":968
  *         info.dtcount = <PetscReal>asInt(dtcount)
  *     if ((dt is not None) or
  *         (dtcol is not None) or             # <<<<<<<<<<<<<<
@@ -28886,7 +29865,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
     goto __pyx_L12_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":934
+  /* "PETSc/petscmat.pxi":969
  *     if ((dt is not None) or
  *         (dtcol is not None) or
  *         (dtcount is not None)):             # <<<<<<<<<<<<<<
@@ -28897,9 +29876,17 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_8 = (__pyx_t_3 != 0);
   __pyx_t_2 = __pyx_t_8;
   __pyx_L12_bool_binop_done:;
+
+  /* "PETSc/petscmat.pxi":967
+ *     if dtcount is not None:
+ *         info.dtcount = <PetscReal>asInt(dtcount)
+ *     if ((dt is not None) or             # <<<<<<<<<<<<<<
+ *         (dtcol is not None) or
+ *         (dtcount is not None)):
+ */
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":935
+    /* "PETSc/petscmat.pxi":970
  *         (dtcol is not None) or
  *         (dtcount is not None)):
  *         info.usedt = <PetscReal>PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -28907,26 +29894,32 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  *     cdef shifttype = options.pop('shifttype', None)
  */
     __pyx_v_info->usedt = ((PetscReal)PETSC_TRUE);
-    goto __pyx_L11;
+
+    /* "PETSc/petscmat.pxi":967
+ *     if dtcount is not None:
+ *         info.dtcount = <PetscReal>asInt(dtcount)
+ *     if ((dt is not None) or             # <<<<<<<<<<<<<<
+ *         (dtcol is not None) or
+ *         (dtcount is not None)):
+ */
   }
-  __pyx_L11:;
 
-  /* "PETSc/petscmat.pxi":937
+  /* "PETSc/petscmat.pxi":972
  *         info.usedt = <PetscReal>PETSC_TRUE
  *     #
  *     cdef shifttype = options.pop('shifttype', None)             # <<<<<<<<<<<<<<
  *     if shifttype is not None:
  *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 937; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 972, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 937; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 972, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_shifttype = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscmat.pxi":938
+  /* "PETSc/petscmat.pxi":973
  *     #
  *     cdef shifttype = options.pop('shifttype', None)
  *     if shifttype is not None:             # <<<<<<<<<<<<<<
@@ -28937,35 +29930,41 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_8 = (__pyx_t_2 != 0);
   if (__pyx_t_8) {
 
-    /* "PETSc/petscmat.pxi":939
+    /* "PETSc/petscmat.pxi":974
  *     cdef shifttype = options.pop('shifttype', None)
  *     if shifttype is not None:
  *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)             # <<<<<<<<<<<<<<
  *     cdef shiftamount = options.pop('shiftamount', None)
  *     if shiftamount is not None:
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_matfactorshifttype(__pyx_v_shifttype); if (unlikely(__pyx_t_9 == ((MatFactorShiftType)-1))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 939; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_matfactorshifttype(__pyx_v_shifttype); if (unlikely(__pyx_t_9 == ((MatFactorShiftType)-1L))) __PYX_ERR(6, 974, __pyx_L1_error)
     __pyx_v_info->shifttype = ((PetscReal)__pyx_t_9);
-    goto __pyx_L15;
+
+    /* "PETSc/petscmat.pxi":973
+ *     #
+ *     cdef shifttype = options.pop('shifttype', None)
+ *     if shifttype is not None:             # <<<<<<<<<<<<<<
+ *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
+ *     cdef shiftamount = options.pop('shiftamount', None)
+ */
   }
-  __pyx_L15:;
 
-  /* "PETSc/petscmat.pxi":940
+  /* "PETSc/petscmat.pxi":975
  *     if shifttype is not None:
  *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
  *     cdef shiftamount = options.pop('shiftamount', None)             # <<<<<<<<<<<<<<
  *     if shiftamount is not None:
  *         info.shiftamount = asReal(shiftamount)
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 975, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 975, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_shiftamount = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscmat.pxi":941
+  /* "PETSc/petscmat.pxi":976
  *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
  *     cdef shiftamount = options.pop('shiftamount', None)
  *     if shiftamount is not None:             # <<<<<<<<<<<<<<
@@ -28976,66 +29975,80 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_2 = (__pyx_t_8 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":942
+    /* "PETSc/petscmat.pxi":977
  *     cdef shiftamount = options.pop('shiftamount', None)
  *     if shiftamount is not None:
  *         info.shiftamount = asReal(shiftamount)             # <<<<<<<<<<<<<<
  *     #
  *     if options:
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_shiftamount); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_shiftamount); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) __PYX_ERR(6, 977, __pyx_L1_error)
     __pyx_v_info->shiftamount = __pyx_t_6;
-    goto __pyx_L16;
+
+    /* "PETSc/petscmat.pxi":976
+ *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
+ *     cdef shiftamount = options.pop('shiftamount', None)
+ *     if shiftamount is not None:             # <<<<<<<<<<<<<<
+ *         info.shiftamount = asReal(shiftamount)
+ *     #
+ */
   }
-  __pyx_L16:;
 
-  /* "PETSc/petscmat.pxi":944
+  /* "PETSc/petscmat.pxi":979
  *         info.shiftamount = asReal(shiftamount)
  *     #
  *     if options:             # <<<<<<<<<<<<<<
  *         raise ValueError("unknown options: %s"
  *                          % list(options.keys()))
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_options); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_options); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(6, 979, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":946
+    /* "PETSc/petscmat.pxi":981
  *     if options:
  *         raise ValueError("unknown options: %s"
  *                          % list(options.keys()))             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_4 = __Pyx_PyDict_Keys(__pyx_v_options); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyDict_Keys(__pyx_v_options); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 981, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 981, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unknown_options_s, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unknown_options_s, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 981, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":945
+    /* "PETSc/petscmat.pxi":980
  *     #
  *     if options:
  *         raise ValueError("unknown options: %s"             # <<<<<<<<<<<<<<
  *                          % list(options.keys()))
  *     return 0
  */
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 980, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 980, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 980, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":979
+ *         info.shiftamount = asReal(shiftamount)
+ *     #
+ *     if options:             # <<<<<<<<<<<<<<
+ *         raise ValueError("unknown options: %s"
+ *                          % list(options.keys()))
+ */
   }
 
-  /* "PETSc/petscmat.pxi":947
+  /* "PETSc/petscmat.pxi":982
  *         raise ValueError("unknown options: %s"
  *                          % list(options.keys()))
  *     return 0             # <<<<<<<<<<<<<<
@@ -29045,7 +30058,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":902
+  /* "PETSc/petscmat.pxi":937
  *     return st
  * 
  * cdef int matfactorinfo(PetscBool inc, PetscBool chol, object opts,             # <<<<<<<<<<<<<<
@@ -29074,7 +30087,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":951
+/* "PETSc/petscmat.pxi":986
  * # -----------------------------------------------------------------------------
  * 
  * cdef object mat_getitem(Mat self, object ij):             # <<<<<<<<<<<<<<
@@ -29101,12 +30114,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mat_getitem", 0);
 
-  /* "PETSc/petscmat.pxi":952
+  /* "PETSc/petscmat.pxi":987
  * 
  * cdef object mat_getitem(Mat self, object ij):
  *     cdef PetscInt M=0, N=0             # <<<<<<<<<<<<<<
@@ -29116,7 +30126,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/petscmat.pxi":953
+  /* "PETSc/petscmat.pxi":988
  * cdef object mat_getitem(Mat self, object ij):
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij             # <<<<<<<<<<<<<<
@@ -29133,7 +30143,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 988, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -29146,21 +30156,21 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_2);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 988, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 988, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_3 = PyObject_GetIter(__pyx_v_ij); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetIter(__pyx_v_ij); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 988, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_1);
     index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_2);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(6, 988, __pyx_L1_error)
     __pyx_t_4 = NULL;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L4_unpacking_done;
@@ -29168,7 +30178,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_4 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 988, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_rows = __pyx_t_1;
@@ -29176,7 +30186,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   __pyx_v_cols = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscmat.pxi":954
+  /* "PETSc/petscmat.pxi":989
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij
  *     if isinstance(rows, slice):             # <<<<<<<<<<<<<<
@@ -29187,25 +30197,25 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/petscmat.pxi":955
+    /* "PETSc/petscmat.pxi":990
  *     rows, cols = ij
  *     if isinstance(rows, slice):
  *         CHKERR( MatGetSize(self.mat, &M, NULL) )             # <<<<<<<<<<<<<<
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, (&__pyx_v_M), NULL)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, (&__pyx_v_M), NULL)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(6, 990, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":956
+    /* "PETSc/petscmat.pxi":991
  *     if isinstance(rows, slice):
  *         CHKERR( MatGetSize(self.mat, &M, NULL) )
  *         start, stop, stride = rows.indices(toInt(M))             # <<<<<<<<<<<<<<
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_rows, __pyx_n_s_indices); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_rows, __pyx_n_s_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 991, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 991, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -29218,17 +30228,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 991, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
@@ -29243,7 +30253,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 991, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -29259,17 +30269,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       __Pyx_INCREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_t_3);
       #else
-      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       #endif
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_4 = Py_TYPE(__pyx_t_8)->tp_iternext;
@@ -29279,7 +30289,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       __Pyx_GOTREF(__pyx_t_9);
       index = 2; __pyx_t_3 = __pyx_t_4(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_8), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_8), 3) < 0) __PYX_ERR(6, 991, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L7_unpacking_done;
@@ -29287,7 +30297,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_4 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 991, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_start = __pyx_t_1;
@@ -29297,22 +30307,28 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
     __pyx_v_stride = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":957
+    /* "PETSc/petscmat.pxi":992
  *         CHKERR( MatGetSize(self.mat, &M, NULL) )
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)             # <<<<<<<<<<<<<<
  *     if isinstance(cols, slice):
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 992, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_2);
     __pyx_t_2 = 0;
-    goto __pyx_L5;
+
+    /* "PETSc/petscmat.pxi":989
+ *     cdef PetscInt M=0, N=0
+ *     rows, cols = ij
+ *     if isinstance(rows, slice):             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetSize(self.mat, &M, NULL) )
+ *         start, stop, stride = rows.indices(toInt(M))
+ */
   }
-  __pyx_L5:;
 
-  /* "PETSc/petscmat.pxi":958
+  /* "PETSc/petscmat.pxi":993
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):             # <<<<<<<<<<<<<<
@@ -29323,25 +30339,25 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   __pyx_t_5 = (__pyx_t_6 != 0);
   if (__pyx_t_5) {
 
-    /* "PETSc/petscmat.pxi":959
+    /* "PETSc/petscmat.pxi":994
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )             # <<<<<<<<<<<<<<
  *         start, stop, stride = cols.indices(toInt(N))
  *         cols = arange(start, stop, stride)
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(6, 994, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":960
+    /* "PETSc/petscmat.pxi":995
  *     if isinstance(cols, slice):
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  *         start, stop, stride = cols.indices(toInt(N))             # <<<<<<<<<<<<<<
  *         cols = arange(start, stop, stride)
  *     return matgetvalues(self.mat, rows, cols, None)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_cols, __pyx_n_s_indices); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_cols, __pyx_n_s_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 995, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 995, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_1 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -29354,17 +30370,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       }
     }
     if (!__pyx_t_1) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 995, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 995, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1); __pyx_t_1 = NULL;
       __Pyx_GIVEREF(__pyx_t_9);
       PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_9);
       __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 995, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
@@ -29379,7 +30395,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 995, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -29395,17 +30411,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 995, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 995, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 995, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       #endif
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 995, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext;
@@ -29415,7 +30431,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       __Pyx_GOTREF(__pyx_t_8);
       index = 2; __pyx_t_9 = __pyx_t_4(__pyx_t_1); if (unlikely(!__pyx_t_9)) goto __pyx_L9_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_1), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_1), 3) < 0) __PYX_ERR(6, 995, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L10_unpacking_done;
@@ -29423,7 +30439,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_4 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 995, __pyx_L1_error)
       __pyx_L10_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_3);
@@ -29433,22 +30449,28 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
     __Pyx_XDECREF_SET(__pyx_v_stride, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscmat.pxi":961
+    /* "PETSc/petscmat.pxi":996
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  *         start, stop, stride = cols.indices(toInt(N))
  *         cols = arange(start, stop, stride)             # <<<<<<<<<<<<<<
  *     return matgetvalues(self.mat, rows, cols, None)
  * 
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 961; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 996, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_cols, __pyx_t_2);
     __pyx_t_2 = 0;
-    goto __pyx_L8;
+
+    /* "PETSc/petscmat.pxi":993
+ *         start, stop, stride = rows.indices(toInt(M))
+ *         rows = arange(start, stop, stride)
+ *     if isinstance(cols, slice):             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetSize(self.mat, NULL, &N) )
+ *         start, stop, stride = cols.indices(toInt(N))
+ */
   }
-  __pyx_L8:;
 
-  /* "PETSc/petscmat.pxi":962
+  /* "PETSc/petscmat.pxi":997
  *         start, stop, stride = cols.indices(toInt(N))
  *         cols = arange(start, stop, stride)
  *     return matgetvalues(self.mat, rows, cols, None)             # <<<<<<<<<<<<<<
@@ -29456,13 +30478,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_matgetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_matgetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 997, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":951
+  /* "PETSc/petscmat.pxi":986
  * # -----------------------------------------------------------------------------
  * 
  * cdef object mat_getitem(Mat self, object ij):             # <<<<<<<<<<<<<<
@@ -29490,7 +30512,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":965
+/* "PETSc/petscmat.pxi":1000
  * 
  * 
  * cdef int mat_setitem(Mat self, object ij, object v) except -1:             # <<<<<<<<<<<<<<
@@ -29517,12 +30539,9 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mat_setitem", 0);
 
-  /* "PETSc/petscmat.pxi":966
+  /* "PETSc/petscmat.pxi":1001
  * 
  * cdef int mat_setitem(Mat self, object ij, object v) except -1:
  *     cdef PetscInt M=0, N=0             # <<<<<<<<<<<<<<
@@ -29532,7 +30551,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/petscmat.pxi":967
+  /* "PETSc/petscmat.pxi":1002
  * cdef int mat_setitem(Mat self, object ij, object v) except -1:
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij             # <<<<<<<<<<<<<<
@@ -29549,7 +30568,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 1002, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -29562,21 +30581,21 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_2);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1002, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1002, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_3 = PyObject_GetIter(__pyx_v_ij); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetIter(__pyx_v_ij); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1002, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_1);
     index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_2);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(6, 1002, __pyx_L1_error)
     __pyx_t_4 = NULL;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L4_unpacking_done;
@@ -29584,7 +30603,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_4 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 1002, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_rows = __pyx_t_1;
@@ -29592,7 +30611,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   __pyx_v_cols = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscmat.pxi":968
+  /* "PETSc/petscmat.pxi":1003
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij
  *     if isinstance(rows, slice):             # <<<<<<<<<<<<<<
@@ -29603,25 +30622,25 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/petscmat.pxi":969
+    /* "PETSc/petscmat.pxi":1004
  *     rows, cols = ij
  *     if isinstance(rows, slice):
  *         CHKERR( MatGetSize(self.mat, &M, NULL) )             # <<<<<<<<<<<<<<
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, (&__pyx_v_M), NULL)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, (&__pyx_v_M), NULL)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(6, 1004, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":970
+    /* "PETSc/petscmat.pxi":1005
  *     if isinstance(rows, slice):
  *         CHKERR( MatGetSize(self.mat, &M, NULL) )
  *         start, stop, stride = rows.indices(toInt(M))             # <<<<<<<<<<<<<<
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_rows, __pyx_n_s_indices); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_rows, __pyx_n_s_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1005, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1005, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -29634,17 +30653,17 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1005, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1005, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1005, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
@@ -29659,7 +30678,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 1005, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -29675,17 +30694,17 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       __Pyx_INCREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_t_3);
       #else
-      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1005, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1005, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1005, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       #endif
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1005, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_4 = Py_TYPE(__pyx_t_8)->tp_iternext;
@@ -29695,7 +30714,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       __Pyx_GOTREF(__pyx_t_9);
       index = 2; __pyx_t_3 = __pyx_t_4(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_8), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_8), 3) < 0) __PYX_ERR(6, 1005, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L7_unpacking_done;
@@ -29703,7 +30722,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_4 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 1005, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_start = __pyx_t_1;
@@ -29713,22 +30732,28 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
     __pyx_v_stride = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":971
+    /* "PETSc/petscmat.pxi":1006
  *         CHKERR( MatGetSize(self.mat, &M, NULL) )
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)             # <<<<<<<<<<<<<<
  *     if isinstance(cols, slice):
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1006, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_2);
     __pyx_t_2 = 0;
-    goto __pyx_L5;
+
+    /* "PETSc/petscmat.pxi":1003
+ *     cdef PetscInt M=0, N=0
+ *     rows, cols = ij
+ *     if isinstance(rows, slice):             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetSize(self.mat, &M, NULL) )
+ *         start, stop, stride = rows.indices(toInt(M))
+ */
   }
-  __pyx_L5:;
 
-  /* "PETSc/petscmat.pxi":972
+  /* "PETSc/petscmat.pxi":1007
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):             # <<<<<<<<<<<<<<
@@ -29739,25 +30764,25 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   __pyx_t_5 = (__pyx_t_6 != 0);
   if (__pyx_t_5) {
 
-    /* "PETSc/petscmat.pxi":973
+    /* "PETSc/petscmat.pxi":1008
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )             # <<<<<<<<<<<<<<
  *         start, stop, stride = cols.indices(toInt(N))
  *         cols = arange(start, stop, stride)
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(6, 1008, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":974
+    /* "PETSc/petscmat.pxi":1009
  *     if isinstance(cols, slice):
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  *         start, stop, stride = cols.indices(toInt(N))             # <<<<<<<<<<<<<<
  *         cols = arange(start, stop, stride)
  *     matsetvalues(self.mat, rows, cols, v, None, 0, 0)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_cols, __pyx_n_s_indices); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_cols, __pyx_n_s_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1009, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1009, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_1 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -29770,17 +30795,17 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       }
     }
     if (!__pyx_t_1) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1009, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1009, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1); __pyx_t_1 = NULL;
       __Pyx_GIVEREF(__pyx_t_9);
       PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_9);
       __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1009, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
@@ -29795,7 +30820,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(6, 1009, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -29811,17 +30836,17 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1009, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1009, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1009, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       #endif
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1009, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext;
@@ -29831,7 +30856,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       __Pyx_GOTREF(__pyx_t_8);
       index = 2; __pyx_t_9 = __pyx_t_4(__pyx_t_1); if (unlikely(!__pyx_t_9)) goto __pyx_L9_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_1), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_1), 3) < 0) __PYX_ERR(6, 1009, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L10_unpacking_done;
@@ -29839,7 +30864,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_4 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(6, 1009, __pyx_L1_error)
       __pyx_L10_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_3);
@@ -29849,31 +30874,37 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
     __Pyx_XDECREF_SET(__pyx_v_stride, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscmat.pxi":975
+    /* "PETSc/petscmat.pxi":1010
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  *         start, stop, stride = cols.indices(toInt(N))
  *         cols = arange(start, stop, stride)             # <<<<<<<<<<<<<<
  *     matsetvalues(self.mat, rows, cols, v, None, 0, 0)
  *     return 0
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 975; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_v_start, __pyx_v_stop, __pyx_v_stride)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1010, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_cols, __pyx_t_2);
     __pyx_t_2 = 0;
-    goto __pyx_L8;
+
+    /* "PETSc/petscmat.pxi":1007
+ *         start, stop, stride = rows.indices(toInt(M))
+ *         rows = arange(start, stop, stride)
+ *     if isinstance(cols, slice):             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetSize(self.mat, NULL, &N) )
+ *         start, stop, stride = cols.indices(toInt(N))
+ */
   }
-  __pyx_L8:;
 
-  /* "PETSc/petscmat.pxi":976
+  /* "PETSc/petscmat.pxi":1011
  *         start, stop, stride = cols.indices(toInt(N))
  *         cols = arange(start, stop, stride)
  *     matsetvalues(self.mat, rows, cols, v, None, 0, 0)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_v, Py_None, 0, 0); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_v, Py_None, 0, 0); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(6, 1011, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":977
+  /* "PETSc/petscmat.pxi":1012
  *         cols = arange(start, stop, stride)
  *     matsetvalues(self.mat, rows, cols, v, None, 0, 0)
  *     return 0             # <<<<<<<<<<<<<<
@@ -29883,7 +30914,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":965
+  /* "PETSc/petscmat.pxi":1000
  * 
  * 
  * cdef int mat_setitem(Mat self, object ij, object v) except -1:             # <<<<<<<<<<<<<<
@@ -29910,7 +30941,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":985
+/* "PETSc/petscmat.pxi":1020
  *    cdef PetscMatStencil stencil
  *    property i:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -29935,22 +30966,19 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1i___set__(struct __pyx_obj_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":986
+  /* "PETSc/petscmat.pxi":1021
  *    property i:
  *        def __set__(self, value):
  *            self.stencil.i = asInt(value)             # <<<<<<<<<<<<<<
  *    property j:
  *        def __set__(self, value):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 986; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1021, __pyx_L1_error)
   __pyx_v_self->stencil.i = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":985
+  /* "PETSc/petscmat.pxi":1020
  *    cdef PetscMatStencil stencil
  *    property i:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -29969,7 +30997,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1i___set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":988
+/* "PETSc/petscmat.pxi":1023
  *            self.stencil.i = asInt(value)
  *    property j:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -29994,22 +31022,19 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1j___set__(struct __pyx_obj_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":989
+  /* "PETSc/petscmat.pxi":1024
  *    property j:
  *        def __set__(self, value):
  *            self.stencil.j = asInt(value)             # <<<<<<<<<<<<<<
  *    property k:
  *        def __set__(self, value):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 989; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1024, __pyx_L1_error)
   __pyx_v_self->stencil.j = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":988
+  /* "PETSc/petscmat.pxi":1023
  *            self.stencil.i = asInt(value)
  *    property j:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30028,7 +31053,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1j___set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":991
+/* "PETSc/petscmat.pxi":1026
  *            self.stencil.j = asInt(value)
  *    property k:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30053,22 +31078,19 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1k___set__(struct __pyx_obj_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":992
+  /* "PETSc/petscmat.pxi":1027
  *    property k:
  *        def __set__(self, value):
  *            self.stencil.k = asInt(value)             # <<<<<<<<<<<<<<
  *    property c:
  *        def __set__(self, value):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 992; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1027, __pyx_L1_error)
   __pyx_v_self->stencil.k = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":991
+  /* "PETSc/petscmat.pxi":1026
  *            self.stencil.j = asInt(value)
  *    property k:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30087,7 +31109,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1k___set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":994
+/* "PETSc/petscmat.pxi":1029
  *            self.stencil.k = asInt(value)
  *    property c:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30112,22 +31134,19 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1c___set__(struct __pyx_obj_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":995
+  /* "PETSc/petscmat.pxi":1030
  *    property c:
  *        def __set__(self, value):
  *            self.stencil.c = asInt(value)             # <<<<<<<<<<<<<<
  *    property index:
  *        def __set__(self, value):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1030, __pyx_L1_error)
   __pyx_v_self->stencil.c = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":994
+  /* "PETSc/petscmat.pxi":1029
  *            self.stencil.k = asInt(value)
  *    property c:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30146,7 +31165,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1c___set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":997
+/* "PETSc/petscmat.pxi":1032
  *            self.stencil.c = asInt(value)
  *    property index:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30172,12 +31191,9 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":998
+  /* "PETSc/petscmat.pxi":1033
  *    property index:
  *        def __set__(self, value):
  *            cdef PetscMatStencil *s = &self.stencil             # <<<<<<<<<<<<<<
@@ -30186,7 +31202,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_
  */
   __pyx_v_s = (&__pyx_v_self->stencil);
 
-  /* "PETSc/petscmat.pxi":999
+  /* "PETSc/petscmat.pxi":1034
  *        def __set__(self, value):
  *            cdef PetscMatStencil *s = &self.stencil
  *            s.k = s.j = s.i = 0             # <<<<<<<<<<<<<<
@@ -30197,16 +31213,16 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_
   __pyx_v_s->j = 0;
   __pyx_v_s->i = 0;
 
-  /* "PETSc/petscmat.pxi":1000
+  /* "PETSc/petscmat.pxi":1035
  *            cdef PetscMatStencil *s = &self.stencil
  *            s.k = s.j = s.i = 0
  *            asDims(value, &s.i, &s.j, &s.k)             # <<<<<<<<<<<<<<
  *    property field:
  *        def __set__(self, value):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_value, (&__pyx_v_s->i), (&__pyx_v_s->j), (&__pyx_v_s->k)); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1000; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_value, (&__pyx_v_s->i), (&__pyx_v_s->j), (&__pyx_v_s->k)); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1035, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":997
+  /* "PETSc/petscmat.pxi":1032
  *            self.stencil.c = asInt(value)
  *    property index:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30225,7 +31241,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1002
+/* "PETSc/petscmat.pxi":1037
  *            asDims(value, &s.i, &s.j, &s.k)
  *    property field:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30251,12 +31267,9 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5field___set__(struct __pyx_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":1003
+  /* "PETSc/petscmat.pxi":1038
  *    property field:
  *        def __set__(self, value):
  *            cdef PetscMatStencil *s = &self.stencil             # <<<<<<<<<<<<<<
@@ -30265,17 +31278,17 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5field___set__(struct __pyx_
  */
   __pyx_v_s = (&__pyx_v_self->stencil);
 
-  /* "PETSc/petscmat.pxi":1004
+  /* "PETSc/petscmat.pxi":1039
  *        def __set__(self, value):
  *            cdef PetscMatStencil *s = &self.stencil
  *            s.c = asInt(value)             # <<<<<<<<<<<<<<
  * 
  * cdef matsetvaluestencil(PetscMat A,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1039, __pyx_L1_error)
   __pyx_v_s->c = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":1002
+  /* "PETSc/petscmat.pxi":1037
  *            asDims(value, &s.i, &s.j, &s.k)
  *    property field:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30294,7 +31307,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5field___set__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1006
+/* "PETSc/petscmat.pxi":1041
  *            s.c = asInt(value)
  * 
  * cdef matsetvaluestencil(PetscMat A,             # <<<<<<<<<<<<<<
@@ -30307,19 +31320,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   PetscInt __pyx_v_cbs;
   PetscInt __pyx_v_nv;
   PetscScalar *__pyx_v_v;
-  CYTHON_UNUSED PyObject *__pyx_v_av = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   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("matsetvaluestencil", 0);
+  __Pyx_INCREF(__pyx_v_value);
 
-  /* "PETSc/petscmat.pxi":1010
+  /* "PETSc/petscmat.pxi":1045
  *                         PetscInsertMode im, int blocked):
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1             # <<<<<<<<<<<<<<
@@ -30329,7 +31339,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __pyx_v_rbs = 1;
   __pyx_v_cbs = 1;
 
-  /* "PETSc/petscmat.pxi":1011
+  /* "PETSc/petscmat.pxi":1046
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )             # <<<<<<<<<<<<<<
@@ -30338,12 +31348,10 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
  */
   __pyx_t_1 = (__pyx_v_blocked != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1011; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 1046, __pyx_L1_error)
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":1012
+  /* "PETSc/petscmat.pxi":1047
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1             # <<<<<<<<<<<<<<
@@ -30353,11 +31361,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __pyx_t_1 = ((__pyx_v_rbs < 1) != 0);
   if (__pyx_t_1) {
     __pyx_v_rbs = 1;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscmat.pxi":1013
+  /* "PETSc/petscmat.pxi":1048
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1
  *     if cbs < 1: cbs = 1             # <<<<<<<<<<<<<<
@@ -30367,43 +31373,41 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __pyx_t_1 = ((__pyx_v_cbs < 1) != 0);
   if (__pyx_t_1) {
     __pyx_v_cbs = 1;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/petscmat.pxi":1015
+  /* "PETSc/petscmat.pxi":1050
  *     if cbs < 1: cbs = 1
  *     # values
  *     cdef PetscInt    nv = 1             # <<<<<<<<<<<<<<
  *     cdef PetscScalar *v = NULL
- *     cdef object av = iarray_s(value, &nv, &v)
+ *     value = iarray_s(value, &nv, &v)
  */
   __pyx_v_nv = 1;
 
-  /* "PETSc/petscmat.pxi":1016
+  /* "PETSc/petscmat.pxi":1051
  *     # values
  *     cdef PetscInt    nv = 1
  *     cdef PetscScalar *v = NULL             # <<<<<<<<<<<<<<
- *     cdef object av = iarray_s(value, &nv, &v)
+ *     value = iarray_s(value, &nv, &v)
  *     if rbs*cbs != nv: raise ValueError(
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":1017
+  /* "PETSc/petscmat.pxi":1052
  *     cdef PetscInt    nv = 1
  *     cdef PetscScalar *v = NULL
- *     cdef object av = iarray_s(value, &nv, &v)             # <<<<<<<<<<<<<<
+ *     value = iarray_s(value, &nv, &v)             # <<<<<<<<<<<<<<
  *     if rbs*cbs != nv: raise ValueError(
  *         "incompatible array sizes: nv=%d" % toInt(nv) )
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_value, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1017; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_value, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1052, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_av = __pyx_t_3;
+  __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":1018
+  /* "PETSc/petscmat.pxi":1053
  *     cdef PetscScalar *v = NULL
- *     cdef object av = iarray_s(value, &nv, &v)
+ *     value = iarray_s(value, &nv, &v)
  *     if rbs*cbs != nv: raise ValueError(             # <<<<<<<<<<<<<<
  *         "incompatible array sizes: nv=%d" % toInt(nv) )
  *     if blocked:
@@ -30411,40 +31415,40 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __pyx_t_1 = (((__pyx_v_rbs * __pyx_v_cbs) != __pyx_v_nv) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":1019
- *     cdef object av = iarray_s(value, &nv, &v)
+    /* "PETSc/petscmat.pxi":1054
+ *     value = iarray_s(value, &nv, &v)
  *     if rbs*cbs != nv: raise ValueError(
  *         "incompatible array sizes: nv=%d" % toInt(nv) )             # <<<<<<<<<<<<<<
  *     if blocked:
  *         CHKERR( MatSetValuesBlockedStencil(A,
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1054, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_nv_d, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_incompatible_array_sizes_nv_d, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1054, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":1018
+    /* "PETSc/petscmat.pxi":1053
  *     cdef PetscScalar *v = NULL
- *     cdef object av = iarray_s(value, &nv, &v)
+ *     value = iarray_s(value, &nv, &v)
  *     if rbs*cbs != nv: raise ValueError(             # <<<<<<<<<<<<<<
  *         "incompatible array sizes: nv=%d" % toInt(nv) )
  *     if blocked:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1018; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1053, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1018; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1053, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1018; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(6, 1053, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":1020
+  /* "PETSc/petscmat.pxi":1055
  *     if rbs*cbs != nv: raise ValueError(
  *         "incompatible array sizes: nv=%d" % toInt(nv) )
  *     if blocked:             # <<<<<<<<<<<<<<
@@ -30454,30 +31458,46 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __pyx_t_1 = (__pyx_v_blocked != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":1021
+    /* "PETSc/petscmat.pxi":1056
  *         "incompatible array sizes: nv=%d" % toInt(nv) )
  *     if blocked:
  *         CHKERR( MatSetValuesBlockedStencil(A,             # <<<<<<<<<<<<<<
  *                                            1, &r.stencil,
  *                                            1, &c.stencil,
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetValuesBlockedStencil(__pyx_v_A, 1, (&__pyx_v_r->stencil), 1, (&__pyx_v_c->stencil), __pyx_v_v, __pyx_v_im)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetValuesBlockedStencil(__pyx_v_A, 1, (&__pyx_v_r->stencil), 1, (&__pyx_v_c->stencil), __pyx_v_v, __pyx_v_im)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 1056, __pyx_L1_error)
+
+    /* "PETSc/petscmat.pxi":1055
+ *     if rbs*cbs != nv: raise ValueError(
+ *         "incompatible array sizes: nv=%d" % toInt(nv) )
+ *     if blocked:             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSetValuesBlockedStencil(A,
+ *                                            1, &r.stencil,
+ */
     goto __pyx_L7;
   }
-  /*else*/ {
 
-    /* "PETSc/petscmat.pxi":1026
+  /* "PETSc/petscmat.pxi":1061
  *                                            v, im) )
  *     else:
  *         CHKERR( MatSetValuesStencil(A,             # <<<<<<<<<<<<<<
  *                                     1, &r.stencil,
  *                                     1, &c.stencil,
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetValuesStencil(__pyx_v_A, 1, (&__pyx_v_r->stencil), 1, (&__pyx_v_c->stencil), __pyx_v_v, __pyx_v_im)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+
+    /* "PETSc/petscmat.pxi":1064
+ *                                     1, &r.stencil,
+ *                                     1, &c.stencil,
+ *                                     v, im) )             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetValuesStencil(__pyx_v_A, 1, (&__pyx_v_r->stencil), 1, (&__pyx_v_c->stencil), __pyx_v_v, __pyx_v_im)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(6, 1061, __pyx_L1_error)
   }
   __pyx_L7:;
 
-  /* "PETSc/petscmat.pxi":1030
+  /* "PETSc/petscmat.pxi":1065
  *                                     1, &c.stencil,
  *                                     v, im) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -30489,7 +31509,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __pyx_r = __pyx_int_0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":1006
+  /* "PETSc/petscmat.pxi":1041
  *            s.c = asInt(value)
  * 
  * cdef matsetvaluestencil(PetscMat A,             # <<<<<<<<<<<<<<
@@ -30504,13 +31524,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __Pyx_AddTraceback("petsc4py.PETSc.matsetvaluestencil", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_av);
+  __Pyx_XDECREF(__pyx_v_value);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscksp.pxi":178
+/* "PETSc/petscksp.pxi":196
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline KSP ref_KSP(PetscKSP ksp):             # <<<<<<<<<<<<<<
@@ -30524,19 +31544,16 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
   __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_KSP", 0);
 
-  /* "PETSc/petscksp.pxi":179
+  /* "PETSc/petscksp.pxi":197
  * 
  * cdef inline KSP ref_KSP(PetscKSP ksp):
  *     cdef KSP ob = <KSP> KSP()             # <<<<<<<<<<<<<<
  *     ob.ksp = ksp
  *     PetscINCREF(ob.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[18]; __pyx_lineno = 179; __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(18, 197, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -30544,7 +31561,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
   __pyx_v_ob = ((struct PyPetscKSPObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscksp.pxi":180
+  /* "PETSc/petscksp.pxi":198
  * cdef inline KSP ref_KSP(PetscKSP ksp):
  *     cdef KSP ob = <KSP> KSP()
  *     ob.ksp = ksp             # <<<<<<<<<<<<<<
@@ -30553,7 +31570,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
  */
   __pyx_v_ob->ksp = __pyx_v_ksp;
 
-  /* "PETSc/petscksp.pxi":181
+  /* "PETSc/petscksp.pxi":199
  *     cdef KSP ob = <KSP> KSP()
  *     ob.ksp = ksp
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -30562,7 +31579,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petscksp.pxi":182
+  /* "PETSc/petscksp.pxi":200
  *     ob.ksp = ksp
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -30574,7 +31591,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscksp.pxi":178
+  /* "PETSc/petscksp.pxi":196
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline KSP ref_KSP(PetscKSP ksp):             # <<<<<<<<<<<<<<
@@ -30595,7 +31612,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
   return __pyx_r;
 }
 
-/* "PETSc/petscksp.pxi":186
+/* "PETSc/petscksp.pxi":204
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_Converged(             # <<<<<<<<<<<<<<
@@ -30620,34 +31637,31 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
   int __pyx_t_7;
   int __pyx_t_8;
   KSPConvergedReason __pyx_t_9;
-  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("KSP_Converged", 0);
 
-  /* "PETSc/petscksp.pxi":193
+  /* "PETSc/petscksp.pxi":211
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef KSP Ksp = ref_KSP(ksp)             # <<<<<<<<<<<<<<
  *     (converged, args, kargs) = Ksp.get_attr('__converged__')
  *     reason = converged(Ksp, toInt(its), toReal(rnm), *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":194
+  /* "PETSc/petscksp.pxi":212
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef KSP Ksp = ref_KSP(ksp)
  *     (converged, args, kargs) = Ksp.get_attr('__converged__')             # <<<<<<<<<<<<<<
  *     reason = converged(Ksp, toInt(its), toReal(rnm), *args, **kargs)
  *     if   reason is None:  r[0] = KSP_CONVERGED_ITERATING
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_Ksp->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ksp), __pyx_k_converged); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_Ksp->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ksp), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 212, __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;
@@ -30659,7 +31673,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[18]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(18, 212, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -30675,17 +31689,17 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     __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[18]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 212, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 212, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 212, __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[18]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 212, __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;
@@ -30695,7 +31709,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     __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[18]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(18, 212, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -30703,7 +31717,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[18]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(18, 212, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_converged = __pyx_t_2;
@@ -30713,18 +31727,18 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscksp.pxi":195
+  /* "PETSc/petscksp.pxi":213
  *     cdef KSP Ksp = ref_KSP(ksp)
  *     (converged, args, kargs) = Ksp.get_attr('__converged__')
  *     reason = converged(Ksp, toInt(its), toReal(rnm), *args, **kargs)             # <<<<<<<<<<<<<<
  *     if   reason is None:  r[0] = KSP_CONVERGED_ITERATING
  *     elif reason is False: r[0] = KSP_CONVERGED_ITERATING
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnm); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ksp));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ksp));
@@ -30735,31 +31749,31 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
   __pyx_t_1 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[18]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(18, 213, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 213, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 213, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_converged, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_converged, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_reason = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscksp.pxi":196
+  /* "PETSc/petscksp.pxi":214
  *     (converged, args, kargs) = Ksp.get_attr('__converged__')
  *     reason = converged(Ksp, toInt(its), toReal(rnm), *args, **kargs)
  *     if   reason is None:  r[0] = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -30773,7 +31787,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     goto __pyx_L5;
   }
 
-  /* "PETSc/petscksp.pxi":197
+  /* "PETSc/petscksp.pxi":215
  *     reason = converged(Ksp, toInt(its), toReal(rnm), *args, **kargs)
  *     if   reason is None:  r[0] = KSP_CONVERGED_ITERATING
  *     elif reason is False: r[0] = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -30787,7 +31801,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     goto __pyx_L5;
   }
 
-  /* "PETSc/petscksp.pxi":198
+  /* "PETSc/petscksp.pxi":216
  *     if   reason is None:  r[0] = KSP_CONVERGED_ITERATING
  *     elif reason is False: r[0] = KSP_CONVERGED_ITERATING
  *     elif reason is True:  r[0] = KSP_CONVERGED_ITS # XXX ?             # <<<<<<<<<<<<<<
@@ -30800,21 +31814,21 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     (__pyx_v_r[0]) = KSP_CONVERGED_ITS;
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/petscksp.pxi":199
+  /* "PETSc/petscksp.pxi":217
  *     elif reason is False: r[0] = KSP_CONVERGED_ITERATING
  *     elif reason is True:  r[0] = KSP_CONVERGED_ITS # XXX ?
  *     else:                 r[0] = reason             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_9 = ((KSPConvergedReason)PyInt_AsLong(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_9 = ((KSPConvergedReason)__Pyx_PyInt_As_KSPConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(18, 217, __pyx_L1_error)
     (__pyx_v_r[0]) = __pyx_t_9;
   }
   __pyx_L5:;
 
-  /* "PETSc/petscksp.pxi":200
+  /* "PETSc/petscksp.pxi":218
  *     elif reason is True:  r[0] = KSP_CONVERGED_ITS # XXX ?
  *     else:                 r[0] = reason
  *     return 0             # <<<<<<<<<<<<<<
@@ -30824,7 +31838,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscksp.pxi":186
+  /* "PETSc/petscksp.pxi":204
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_Converged(             # <<<<<<<<<<<<<<
@@ -30854,7 +31868,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
   return __pyx_r;
 }
 
-/* "PETSc/petscksp.pxi":204
+/* "PETSc/petscksp.pxi":222
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_Monitor(             # <<<<<<<<<<<<<<
@@ -30881,39 +31895,36 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
-  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("KSP_Monitor", 0);
 
-  /* "PETSc/petscksp.pxi":210
+  /* "PETSc/petscksp.pxi":228
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef KSP Ksp = ref_KSP(ksp)             # <<<<<<<<<<<<<<
  *     cdef object monitorlist = Ksp.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 228, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":211
+  /* "PETSc/petscksp.pxi":229
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef KSP Ksp = ref_KSP(ksp)
  *     cdef object monitorlist = Ksp.get_attr('__monitor__')             # <<<<<<<<<<<<<<
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_Ksp->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ksp), __pyx_k_monitor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_Ksp->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ksp), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 229, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_monitorlist = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":212
+  /* "PETSc/petscksp.pxi":230
  *     cdef KSP Ksp = ref_KSP(ksp)
  *     cdef object monitorlist = Ksp.get_attr('__monitor__')
  *     if monitorlist is None: return 0             # <<<<<<<<<<<<<<
@@ -30927,7 +31938,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscksp.pxi":213
+  /* "PETSc/petscksp.pxi":231
  *     cdef object monitorlist = Ksp.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -30938,26 +31949,26 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
     __pyx_t_1 = __pyx_v_monitorlist; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 231, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(18, 231, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 231, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(18, 231, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 231, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -30967,7 +31978,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
         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[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(18, 231, __pyx_L1_error)
         }
         break;
       }
@@ -30983,7 +31994,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(18, 231, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -30999,17 +32010,17 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 231, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(18, 231, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 231, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(18, 231, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -31019,7 +32030,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
       __Pyx_GOTREF(__pyx_t_8);
       index = 2; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(18, 231, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L7_unpacking_done;
@@ -31027,7 +32038,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[18]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(18, 231, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_7);
@@ -31037,18 +32048,18 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
     __Pyx_XDECREF_SET(__pyx_v_kargs, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscksp.pxi":214
+    /* "PETSc/petscksp.pxi":232
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Ksp, toInt(its), toReal(rnm), *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnm); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnm); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(18, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_INCREF(((PyObject *)__pyx_v_Ksp));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_Ksp));
@@ -31059,30 +32070,30 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
     PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_9);
     __pyx_t_6 = 0;
     __pyx_t_9 = 0;
-    __pyx_t_9 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_6 = PyNumber_Add(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyNumber_Add(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     if (unlikely(__pyx_v_kargs == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-      {__pyx_filename = __pyx_f[18]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(18, 232, __pyx_L1_error)
     }
-    if (likely(PyDict_Check(__pyx_v_kargs))) {
-      __pyx_t_9 = __pyx_v_kargs;
-      __Pyx_INCREF(__pyx_t_9);
+    if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+      __pyx_t_9 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 232, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
     } else {
-      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 232, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
     }
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_monitor, __pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_monitor, __pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(18, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscksp.pxi":213
+    /* "PETSc/petscksp.pxi":231
  *     cdef object monitorlist = Ksp.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -31092,7 +32103,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":215
+  /* "PETSc/petscksp.pxi":233
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Ksp, toInt(its), toReal(rnm), *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -31102,7 +32113,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscksp.pxi":204
+  /* "PETSc/petscksp.pxi":222
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_Monitor(             # <<<<<<<<<<<<<<
@@ -31133,6 +32144,551 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
   return __pyx_r;
 }
 
+/* "PETSc/petscksp.pxi":237
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef int KSP_ComputeRHS(             # <<<<<<<<<<<<<<
+ *     PetscKSP ksp,
+ *     PetscVec rhs,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_rhs, void *__pyx_v_ctx) {
+  struct PyPetscKSPObject *__pyx_v_Ksp = 0;
+  struct PyPetscVecObject *__pyx_v_Rhs = 0;
+  PyObject *__pyx_v_context = 0;
+  PyObject *__pyx_v_computerhs = NULL;
+  PyObject *__pyx_v_args = NULL;
+  PyObject *__pyx_v_kargs = NULL;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("KSP_ComputeRHS", 0);
+
+  /* "PETSc/petscksp.pxi":242
+ *     void*    ctx,
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef KSP Ksp = ref_KSP(ksp)             # <<<<<<<<<<<<<<
+ *     cdef Vec Rhs = ref_Vec(rhs)
+ *     cdef object context = Ksp.get_attr('__rhs__')
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 242, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscksp.pxi":243
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef KSP Ksp = ref_KSP(ksp)
+ *     cdef Vec Rhs = ref_Vec(rhs)             # <<<<<<<<<<<<<<
+ *     cdef object context = Ksp.get_attr('__rhs__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_rhs)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 243, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Rhs = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscksp.pxi":244
+ *     cdef KSP Ksp = ref_KSP(ksp)
+ *     cdef Vec Rhs = ref_Vec(rhs)
+ *     cdef object context = Ksp.get_attr('__rhs__')             # <<<<<<<<<<<<<<
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_Ksp->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ksp), ((char *)"__rhs__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 244, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscksp.pxi":245
+ *     cdef Vec Rhs = ref_Vec(rhs)
+ *     cdef object context = Ksp.get_attr('__rhs__')
+ *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (computerhs, args, kargs) = context
+ */
+  __pyx_t_3 = (__pyx_v_context == Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_4 = ((__pyx_v_ctx != NULL) != 0);
+  __pyx_t_2 = __pyx_t_4;
+  __pyx_L4_bool_binop_done:;
+  if (__pyx_t_2) {
+    __pyx_t_1 = ((PyObject *)__pyx_v_ctx);
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
+    __pyx_t_1 = 0;
+  }
+
+  /* "PETSc/petscksp.pxi":246
+ *     cdef object context = Ksp.get_attr('__rhs__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
+ *     (computerhs, args, kargs) = context
+ *     computerhs(Ksp, Rhs, *args, **kargs)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = (__pyx_v_context != Py_None);
+    __pyx_t_3 = (__pyx_t_4 != 0);
+    if (__pyx_t_3) {
+    } else {
+      __pyx_t_2 = __pyx_t_3;
+      goto __pyx_L6_bool_binop_done;
+    }
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
+    __pyx_t_4 = (__pyx_t_3 != 0);
+    __pyx_t_2 = __pyx_t_4;
+    __pyx_L6_bool_binop_done:;
+    if (unlikely(!__pyx_t_2)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(18, 246, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscksp.pxi":247
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (computerhs, args, kargs) = context             # <<<<<<<<<<<<<<
+ *     computerhs(Ksp, Rhs, *args, **kargs)
+ *     return 0
+ */
+  if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
+    PyObject* sequence = __pyx_v_context;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    Py_ssize_t size = Py_SIZE(sequence);
+    #else
+    Py_ssize_t size = PySequence_Size(sequence);
+    #endif
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(18, 247, __pyx_L1_error)
+    }
+    #if CYTHON_COMPILING_IN_CPYTHON
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_5);
+    __Pyx_INCREF(__pyx_t_6);
+    #else
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 247, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 247, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 247, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    #endif
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 247, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
+    index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_1);
+    index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_5);
+    index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_6);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(18, 247, __pyx_L1_error)
+    __pyx_t_8 = NULL;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    goto __pyx_L9_unpacking_done;
+    __pyx_L8_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __pyx_t_8 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(18, 247, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  __pyx_v_computerhs = __pyx_t_1;
+  __pyx_t_1 = 0;
+  __pyx_v_args = __pyx_t_5;
+  __pyx_t_5 = 0;
+  __pyx_v_kargs = __pyx_t_6;
+  __pyx_t_6 = 0;
+
+  /* "PETSc/petscksp.pxi":248
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (computerhs, args, kargs) = context
+ *     computerhs(Ksp, Rhs, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 248, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Ksp));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ksp));
+  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Ksp));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Rhs));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Rhs));
+  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Rhs));
+  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 248, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 248, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(__pyx_v_kargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+    __PYX_ERR(18, 248, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 248, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+  } else {
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 248, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+  }
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_computerhs, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 248, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+
+  /* "PETSc/petscksp.pxi":249
+ *     (computerhs, args, kargs) = context
+ *     computerhs(Ksp, Rhs, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int KSP_ComputeOps(
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscksp.pxi":237
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef int KSP_ComputeRHS(             # <<<<<<<<<<<<<<
+ *     PetscKSP ksp,
+ *     PetscVec rhs,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("petsc4py.PETSc.KSP_ComputeRHS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Ksp);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Rhs);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_computerhs);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscksp.pxi":251
+ *     return 0
+ * 
+ * cdef int KSP_ComputeOps(             # <<<<<<<<<<<<<<
+ *     PetscKSP ksp,
+ *     PetscMat A,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_A, Mat __pyx_v_B, void *__pyx_v_ctx) {
+  struct PyPetscKSPObject *__pyx_v_Ksp = 0;
+  struct PyPetscMatObject *__pyx_v_Amat = 0;
+  struct PyPetscMatObject *__pyx_v_Bmat = 0;
+  PyObject *__pyx_v_context = 0;
+  PyObject *__pyx_v_computeops = NULL;
+  PyObject *__pyx_v_args = NULL;
+  PyObject *__pyx_v_kargs = NULL;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("KSP_ComputeOps", 0);
+
+  /* "PETSc/petscksp.pxi":257
+ *     void*    ctx,
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef KSP Ksp  = ref_KSP(ksp)             # <<<<<<<<<<<<<<
+ *     cdef Mat Amat = ref_Mat(A)
+ *     cdef Mat Bmat = ref_Mat(B)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 257, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscksp.pxi":258
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef KSP Ksp  = ref_KSP(ksp)
+ *     cdef Mat Amat = ref_Mat(A)             # <<<<<<<<<<<<<<
+ *     cdef Mat Bmat = ref_Mat(B)
+ *     cdef object context = Ksp.get_attr('__operators__')
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_A)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 258, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Amat = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscksp.pxi":259
+ *     cdef KSP Ksp  = ref_KSP(ksp)
+ *     cdef Mat Amat = ref_Mat(A)
+ *     cdef Mat Bmat = ref_Mat(B)             # <<<<<<<<<<<<<<
+ *     cdef object context = Ksp.get_attr('__operators__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_B)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Bmat = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscksp.pxi":260
+ *     cdef Mat Amat = ref_Mat(A)
+ *     cdef Mat Bmat = ref_Mat(B)
+ *     cdef object context = Ksp.get_attr('__operators__')             # <<<<<<<<<<<<<<
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_Ksp->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ksp), ((char *)"__operators__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 260, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscksp.pxi":261
+ *     cdef Mat Bmat = ref_Mat(B)
+ *     cdef object context = Ksp.get_attr('__operators__')
+ *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (computeops, args, kargs) = context
+ */
+  __pyx_t_3 = (__pyx_v_context == Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_4 = ((__pyx_v_ctx != NULL) != 0);
+  __pyx_t_2 = __pyx_t_4;
+  __pyx_L4_bool_binop_done:;
+  if (__pyx_t_2) {
+    __pyx_t_1 = ((PyObject *)__pyx_v_ctx);
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
+    __pyx_t_1 = 0;
+  }
+
+  /* "PETSc/petscksp.pxi":262
+ *     cdef object context = Ksp.get_attr('__operators__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
+ *     (computeops, args, kargs) = context
+ *     computeops(Ksp, Amat, Bmat, *args, **kargs)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = (__pyx_v_context != Py_None);
+    __pyx_t_3 = (__pyx_t_4 != 0);
+    if (__pyx_t_3) {
+    } else {
+      __pyx_t_2 = __pyx_t_3;
+      goto __pyx_L6_bool_binop_done;
+    }
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
+    __pyx_t_4 = (__pyx_t_3 != 0);
+    __pyx_t_2 = __pyx_t_4;
+    __pyx_L6_bool_binop_done:;
+    if (unlikely(!__pyx_t_2)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(18, 262, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscksp.pxi":263
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (computeops, args, kargs) = context             # <<<<<<<<<<<<<<
+ *     computeops(Ksp, Amat, Bmat, *args, **kargs)
+ *     return 0
+ */
+  if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
+    PyObject* sequence = __pyx_v_context;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    Py_ssize_t size = Py_SIZE(sequence);
+    #else
+    Py_ssize_t size = PySequence_Size(sequence);
+    #endif
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(18, 263, __pyx_L1_error)
+    }
+    #if CYTHON_COMPILING_IN_CPYTHON
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_5);
+    __Pyx_INCREF(__pyx_t_6);
+    #else
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 263, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 263, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 263, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    #endif
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 263, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
+    index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_1);
+    index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_5);
+    index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_6);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(18, 263, __pyx_L1_error)
+    __pyx_t_8 = NULL;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    goto __pyx_L9_unpacking_done;
+    __pyx_L8_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __pyx_t_8 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(18, 263, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  __pyx_v_computeops = __pyx_t_1;
+  __pyx_t_1 = 0;
+  __pyx_v_args = __pyx_t_5;
+  __pyx_t_5 = 0;
+  __pyx_v_kargs = __pyx_t_6;
+  __pyx_t_6 = 0;
+
+  /* "PETSc/petscksp.pxi":264
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (computeops, args, kargs) = context
+ *     computeops(Ksp, Amat, Bmat, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 264, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Ksp));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ksp));
+  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Ksp));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Amat));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Amat));
+  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Amat));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Bmat));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Bmat));
+  PyTuple_SET_ITEM(__pyx_t_6, 2, ((PyObject *)__pyx_v_Bmat));
+  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 264, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 264, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(__pyx_v_kargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+    __PYX_ERR(18, 264, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 264, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+  } else {
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 264, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+  }
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_computeops, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 264, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+
+  /* "PETSc/petscksp.pxi":265
+ *     (computeops, args, kargs) = context
+ *     computeops(Ksp, Amat, Bmat, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscksp.pxi":251
+ *     return 0
+ * 
+ * cdef int KSP_ComputeOps(             # <<<<<<<<<<<<<<
+ *     PetscKSP ksp,
+ *     PetscMat A,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("petsc4py.PETSc.KSP_ComputeOps", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Ksp);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Amat);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Bmat);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_computeops);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
 /* "PETSc/petscsnes.pxi":216
  * # -----------------------------------------------------------------------------
  * 
@@ -31147,9 +32703,6 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES
   __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_SNES", 0);
 
   /* "PETSc/petscsnes.pxi":217
@@ -31159,7 +32712,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES
  *     ob.snes = snes
  *     PetscINCREF(ob.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -31243,9 +32796,6 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -31258,7 +32808,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef object context = Snes.get_attr('__initialguess__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 229, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -31270,7 +32820,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
  *     cdef object context = Snes.get_attr('__initialguess__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 230, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -31282,7 +32832,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), __pyx_k_initialguess); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), ((char *)"__initialguess__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -31309,9 +32859,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/petscsnes.pxi":233
  *     cdef object context = Snes.get_attr('__initialguess__')
@@ -31329,13 +32877,13 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 233, __pyx_L1_error)
     }
   }
   #endif
@@ -31357,7 +32905,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 234, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -31373,16 +32921,16 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 234, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 234, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 234, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 234, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -31391,7 +32939,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 234, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -31399,7 +32947,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 234, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_initialguess = __pyx_t_1;
@@ -31416,7 +32964,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
  *     return 0
  * 
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -31424,24 +32972,24 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
   __Pyx_INCREF(((PyObject *)__pyx_v_Xvec));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Xvec));
   PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Xvec));
-  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 235, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_5 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_5);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 235, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
   } else {
-    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 235, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_initialguess, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_initialguess, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -31513,9 +33061,6 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -31528,7 +33073,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef Vec  Fvec = ref_Vec(f)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 246, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -31540,7 +33085,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
  *     cdef Vec  Fvec = ref_Vec(f)
  *     cdef object context = Snes.get_attr('__function__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 247, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -31552,7 +33097,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
  *     cdef object context = Snes.get_attr('__function__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 248, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Fvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -31564,7 +33109,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), __pyx_k_function); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), ((char *)"__function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 249, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -31591,9 +33136,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/petscsnes.pxi":251
  *     cdef object context = Snes.get_attr('__function__')
@@ -31611,13 +33154,13 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 251, __pyx_L1_error)
     }
   }
   #endif
@@ -31639,7 +33182,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 252, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -31655,16 +33198,16 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -31673,7 +33216,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 252, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -31681,7 +33224,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 252, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_function = __pyx_t_1;
@@ -31698,7 +33241,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
  *     return 0
  * 
  */
-  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -31709,24 +33252,24 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
   __Pyx_INCREF(((PyObject *)__pyx_v_Fvec));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Fvec));
   PyTuple_SET_ITEM(__pyx_t_6, 2, ((PyObject *)__pyx_v_Fvec));
-  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 253, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_5 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_5);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 253, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
   } else {
-    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 253, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -31797,9 +33340,6 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -31812,7 +33352,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
  *     cdef object context = Snes.get_attr('__update__')
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 262, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -31824,7 +33364,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
  *     assert context is not None and type(context) is tuple # sanity check
  *     (update, args, kargs) = context
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), __pyx_k_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), ((char *)"__update__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 263, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -31845,13 +33385,13 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
       __pyx_t_2 = __pyx_t_4;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_4 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_4 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_3 = (__pyx_t_4 != 0);
     __pyx_t_2 = __pyx_t_3;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 264, __pyx_L1_error)
     }
   }
   #endif
@@ -31873,7 +33413,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 265, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -31889,16 +33429,16 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
@@ -31907,7 +33447,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 265, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -31915,7 +33455,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 265, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_update = __pyx_t_1;
@@ -31932,9 +33472,9 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
  *     return 0
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -31942,24 +33482,24 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
   __Pyx_GIVEREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 266, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 266, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 266, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_update, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_update, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -32031,9 +33571,6 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -32046,7 +33583,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef Mat  Jmat = ref_Mat(J)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -32058,7 +33595,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
  *     cdef Mat  Jmat = ref_Mat(J)
  *     cdef Mat  Pmat = ref_Mat(P)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -32070,7 +33607,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
  *     cdef Mat  Pmat = ref_Mat(P)
  *     cdef object context = Snes.get_attr('__jacobian__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -32082,7 +33619,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
  *     cdef object context = Snes.get_attr('__jacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 281, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Pmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -32094,7 +33631,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), __pyx_k_jacobian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), ((char *)"__jacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 282, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -32121,9 +33658,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/petscsnes.pxi":284
  *     cdef object context = Snes.get_attr('__jacobian__')
@@ -32141,13 +33676,13 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 284, __pyx_L1_error)
     }
   }
   #endif
@@ -32169,7 +33704,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 285, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -32185,16 +33720,16 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -32203,7 +33738,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 285, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -32211,7 +33746,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 285, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_1;
@@ -32228,7 +33763,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
  *     return 0
  * 
  */
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -32242,24 +33777,24 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
   __Pyx_INCREF(((PyObject *)__pyx_v_Pmat));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Pmat));
   PyTuple_SET_ITEM(__pyx_t_6, 3, ((PyObject *)__pyx_v_Pmat));
-  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 286, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_5 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_5);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 286, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
   } else {
-    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 286, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -32334,9 +33869,6 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   PetscReal __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -32349,7 +33881,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef object context = Snes.get_attr('__objective__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 297, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -32361,7 +33893,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
  *     cdef object context = Snes.get_attr('__objective__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 298, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -32373,7 +33905,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), __pyx_k_objective); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), ((char *)"__objective__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 299, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -32400,9 +33932,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/petscsnes.pxi":301
  *     cdef object context = Snes.get_attr('__objective__')
@@ -32420,13 +33950,13 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 301, __pyx_L1_error)
     }
   }
   #endif
@@ -32448,7 +33978,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 302, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -32464,16 +33994,16 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 302, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 302, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 302, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 302, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -32482,7 +34012,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 302, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -32490,7 +34020,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 302, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_objective = __pyx_t_1;
@@ -32507,7 +34037,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
  *     o[0] = asReal(obj)
  *     return 0
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -32515,24 +34045,24 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
   __Pyx_INCREF(((PyObject *)__pyx_v_Xvec));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Xvec));
   PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Xvec));
-  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 303, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_5 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_5);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 303, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
   } else {
-    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 303, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_objective, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_objective, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -32546,7 +34076,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
  *     return 0
  * 
  */
-  __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_obj); if (unlikely(__pyx_t_9 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_obj); if (unlikely(__pyx_t_9 == -1.0 && PyErr_Occurred())) __PYX_ERR(19, 304, __pyx_L1_error)
   (__pyx_v_o[0]) = __pyx_t_9;
 
   /* "PETSc/petscsnes.pxi":305
@@ -32620,9 +34150,6 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   SNESConvergedReason __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -32635,7 +34162,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  *     cdef object it = toInt(iters)
  *     cdef object xn = toReal(xnorm)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 318, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -32647,7 +34174,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  *     cdef object xn = toReal(xnorm)
  *     cdef object gn = toReal(gnorm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_iters); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_iters); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 319, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_it = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -32659,7 +34186,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  *     cdef object gn = toReal(gnorm)
  *     cdef object fn = toReal(fnorm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_xnorm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_xnorm); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_xn = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -32671,7 +34198,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  *     cdef object fn = toReal(fnorm)
  *     cdef object context = Snes.get_attr('__converged__')
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gnorm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gnorm); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_gn = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -32683,7 +34210,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  *     cdef object context = Snes.get_attr('__converged__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_fnorm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_fnorm); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 322, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_fn = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -32695,7 +34222,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), __pyx_k_converged); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -32722,9 +34249,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/petscsnes.pxi":325
  *     cdef object context = Snes.get_attr('__converged__')
@@ -32742,13 +34267,13 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 325, __pyx_L1_error)
     }
   }
   #endif
@@ -32770,7 +34295,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 326, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -32786,16 +34311,16 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 326, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 326, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 326, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 326, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -32804,7 +34329,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 326, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -32812,7 +34337,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 326, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_converged = __pyx_t_1;
@@ -32829,7 +34354,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  *     if   reason is None:  r[0] = SNES_CONVERGED_ITERATING
  *     elif reason is False: r[0] = SNES_CONVERGED_ITERATING
  */
-  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_xn);
   __Pyx_GIVEREF(__pyx_v_xn);
@@ -32840,7 +34365,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
   __Pyx_INCREF(__pyx_v_fn);
   __Pyx_GIVEREF(__pyx_v_fn);
   PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_fn);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -32851,24 +34376,24 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
   __Pyx_GIVEREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[19]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(19, 327, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 327, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 327, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_converged, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_converged, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -32916,16 +34441,16 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     (__pyx_v_r[0]) = SNES_CONVERGED_ITS;
     goto __pyx_L10;
   }
-  /*else*/ {
 
-    /* "PETSc/petscsnes.pxi":331
+  /* "PETSc/petscsnes.pxi":331
  *     elif reason is False: r[0] = SNES_CONVERGED_ITERATING
  *     elif reason is True:  r[0] = SNES_CONVERGED_ITS # XXX ?
  *     else:                 r[0] = reason             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_9 = ((SNESConvergedReason)PyInt_AsLong(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_9 = ((SNESConvergedReason)__Pyx_PyInt_As_SNESConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(19, 331, __pyx_L1_error)
     (__pyx_v_r[0]) = __pyx_t_9;
   }
   __pyx_L10:;
@@ -33003,9 +34528,6 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -33018,7 +34540,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
  *     cdef object monitorlist = Snes.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 342, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -33030,7 +34552,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
  *     if monitorlist is None: return 0
  *     cdef object it = toInt(iters)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), __pyx_k_monitor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_Snes->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Snes), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_monitorlist = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -33056,7 +34578,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
  *     cdef object rn = toReal(rnorm)
  *     for (monitor, args, kargs) in monitorlist:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_iters); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_iters); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_it = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -33068,7 +34590,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Snes, it, rn, *args, **kargs)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnorm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnorm); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rn = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -33084,26 +34606,26 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
     __pyx_t_1 = __pyx_v_monitorlist; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 347, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 347, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(19, 347, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 347, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(19, 347, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 347, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -33113,7 +34635,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
         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[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(19, 347, __pyx_L1_error)
         }
         break;
       }
@@ -33129,7 +34651,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(19, 347, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -33145,17 +34667,17 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 347, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(19, 347, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 347, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(19, 347, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -33165,7 +34687,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
       __Pyx_GOTREF(__pyx_t_8);
       index = 2; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(19, 347, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L7_unpacking_done;
@@ -33173,7 +34695,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 347, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_7);
@@ -33190,7 +34712,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
  *     return 0
  * 
  */
-    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 348, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -33201,24 +34723,24 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
     __Pyx_INCREF(__pyx_v_rn);
     __Pyx_GIVEREF(__pyx_v_rn);
     PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_rn);
-    __pyx_t_9 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 348, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PyNumber_Add(__pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyNumber_Add(__pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(19, 348, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     if (unlikely(__pyx_v_kargs == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-      {__pyx_filename = __pyx_f[19]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(19, 348, __pyx_L1_error)
     }
-    if (likely(PyDict_Check(__pyx_v_kargs))) {
-      __pyx_t_9 = __pyx_v_kargs;
-      __Pyx_INCREF(__pyx_t_9);
+    if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+      __pyx_t_9 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 348, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
     } else {
-      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 348, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
     }
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_monitor, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_monitor, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 348, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -33277,7 +34799,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":189
+/* "PETSc/petscts.pxi":199
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline TS ref_TS(PetscTS ts):             # <<<<<<<<<<<<<<
@@ -33291,19 +34813,16 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
   __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_TS", 0);
 
-  /* "PETSc/petscts.pxi":190
+  /* "PETSc/petscts.pxi":200
  * 
  * cdef inline TS ref_TS(PetscTS ts):
  *     cdef TS ob = <TS> TS()             # <<<<<<<<<<<<<<
  *     ob.ts = ts
  *     PetscINCREF(ob.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_TS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 200, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -33311,7 +34830,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
   __pyx_v_ob = ((struct PyPetscTSObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscts.pxi":191
+  /* "PETSc/petscts.pxi":201
  * cdef inline TS ref_TS(PetscTS ts):
  *     cdef TS ob = <TS> TS()
  *     ob.ts = ts             # <<<<<<<<<<<<<<
@@ -33320,7 +34839,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
  */
   __pyx_v_ob->ts = __pyx_v_ts;
 
-  /* "PETSc/petscts.pxi":192
+  /* "PETSc/petscts.pxi":202
  *     cdef TS ob = <TS> TS()
  *     ob.ts = ts
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -33329,7 +34848,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petscts.pxi":193
+  /* "PETSc/petscts.pxi":203
  *     ob.ts = ts
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -33341,7 +34860,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":189
+  /* "PETSc/petscts.pxi":199
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline TS ref_TS(PetscTS ts):             # <<<<<<<<<<<<<<
@@ -33362,7 +34881,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":197
+/* "PETSc/petscts.pxi":207
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_RHSFunction(             # <<<<<<<<<<<<<<
@@ -33388,63 +34907,60 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("TS_RHSFunction", 0);
 
-  /* "PETSc/petscts.pxi":204
+  /* "PETSc/petscts.pxi":214
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS  Ts   = ref_TS(ts)             # <<<<<<<<<<<<<<
  *     cdef Vec Xvec = ref_Vec(x)
  *     cdef Vec Fvec = ref_Vec(f)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":205
+  /* "PETSc/petscts.pxi":215
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS  Ts   = ref_TS(ts)
  *     cdef Vec Xvec = ref_Vec(x)             # <<<<<<<<<<<<<<
  *     cdef Vec Fvec = ref_Vec(f)
  *     cdef object context = Ts.get_attr('__rhsfunction__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 215, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":206
+  /* "PETSc/petscts.pxi":216
  *     cdef TS  Ts   = ref_TS(ts)
  *     cdef Vec Xvec = ref_Vec(x)
  *     cdef Vec Fvec = ref_Vec(f)             # <<<<<<<<<<<<<<
  *     cdef object context = Ts.get_attr('__rhsfunction__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Fvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":207
+  /* "PETSc/petscts.pxi":217
  *     cdef Vec Xvec = ref_Vec(x)
  *     cdef Vec Fvec = ref_Vec(f)
  *     cdef object context = Ts.get_attr('__rhsfunction__')             # <<<<<<<<<<<<<<
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), __pyx_k_rhsfunction); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), ((char *)"__rhsfunction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":208
+  /* "PETSc/petscts.pxi":218
  *     cdef Vec Fvec = ref_Vec(f)
  *     cdef object context = Ts.get_attr('__rhsfunction__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -33466,11 +34982,9 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscts.pxi":209
+  /* "PETSc/petscts.pxi":219
  *     cdef object context = Ts.get_attr('__rhsfunction__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
@@ -33486,18 +35000,18 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 219, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscts.pxi":210
+  /* "PETSc/petscts.pxi":220
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  *     (function, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -33514,7 +35028,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 220, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -33530,16 +35044,16 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -33548,7 +35062,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 220, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -33556,7 +35070,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 220, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_function = __pyx_t_1;
@@ -33566,16 +35080,16 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscts.pxi":211
+  /* "PETSc/petscts.pxi":221
  *     assert context is not None and type(context) is tuple # sanity check
  *     (function, args, kargs) = context
  *     function(Ts, toReal(t), Xvec, Fvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -33589,30 +35103,30 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Fvec));
   PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)__pyx_v_Fvec));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 221, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 221, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 221, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/petscts.pxi":212
+  /* "PETSc/petscts.pxi":222
  *     (function, args, kargs) = context
  *     function(Ts, toReal(t), Xvec, Fvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -33622,7 +35136,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":197
+  /* "PETSc/petscts.pxi":207
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_RHSFunction(             # <<<<<<<<<<<<<<
@@ -33653,7 +35167,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":214
+/* "PETSc/petscts.pxi":224
  *     return 0
  * 
  * cdef int TS_RHSJacobian(             # <<<<<<<<<<<<<<
@@ -33680,75 +35194,72 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("TS_RHSJacobian", 0);
 
-  /* "PETSc/petscts.pxi":222
+  /* "PETSc/petscts.pxi":232
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS  Ts   = ref_TS(ts)             # <<<<<<<<<<<<<<
  *     cdef Vec Xvec = ref_Vec(x)
  *     cdef Mat Jmat = ref_Mat(J)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 232, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":223
+  /* "PETSc/petscts.pxi":233
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS  Ts   = ref_TS(ts)
  *     cdef Vec Xvec = ref_Vec(x)             # <<<<<<<<<<<<<<
  *     cdef Mat Jmat = ref_Mat(J)
  *     cdef Mat Pmat = ref_Mat(P)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 233, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":224
+  /* "PETSc/petscts.pxi":234
  *     cdef TS  Ts   = ref_TS(ts)
  *     cdef Vec Xvec = ref_Vec(x)
  *     cdef Mat Jmat = ref_Mat(J)             # <<<<<<<<<<<<<<
  *     cdef Mat Pmat = ref_Mat(P)
  *     cdef object context = Ts.get_attr('__rhsjacobian__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 234, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":225
+  /* "PETSc/petscts.pxi":235
  *     cdef Vec Xvec = ref_Vec(x)
  *     cdef Mat Jmat = ref_Mat(J)
  *     cdef Mat Pmat = ref_Mat(P)             # <<<<<<<<<<<<<<
  *     cdef object context = Ts.get_attr('__rhsjacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Pmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":226
+  /* "PETSc/petscts.pxi":236
  *     cdef Mat Jmat = ref_Mat(J)
  *     cdef Mat Pmat = ref_Mat(P)
  *     cdef object context = Ts.get_attr('__rhsjacobian__')             # <<<<<<<<<<<<<<
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), __pyx_k_rhsjacobian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), ((char *)"__rhsjacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 236, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":227
+  /* "PETSc/petscts.pxi":237
  *     cdef Mat Pmat = ref_Mat(P)
  *     cdef object context = Ts.get_attr('__rhsjacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -33770,11 +35281,9 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscts.pxi":228
+  /* "PETSc/petscts.pxi":238
  *     cdef object context = Ts.get_attr('__rhsjacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
@@ -33790,18 +35299,18 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 238, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscts.pxi":229
+  /* "PETSc/petscts.pxi":239
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  *     (jacobian, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -33818,7 +35327,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 239, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -33834,16 +35343,16 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 239, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 239, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 239, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 239, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -33852,7 +35361,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 239, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -33860,7 +35369,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 239, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_1;
@@ -33870,16 +35379,16 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscts.pxi":230
+  /* "PETSc/petscts.pxi":240
  *     assert context is not None and type(context) is tuple # sanity check
  *     (jacobian, args, kargs) = context
  *     jacobian(Ts, toReal(t), Xvec, Jmat, Pmat, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -33896,30 +35405,30 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Pmat));
   PyTuple_SET_ITEM(__pyx_t_5, 4, ((PyObject *)__pyx_v_Pmat));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 240, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 240, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 240, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/petscts.pxi":231
+  /* "PETSc/petscts.pxi":241
  *     (jacobian, args, kargs) = context
  *     jacobian(Ts, toReal(t), Xvec, Jmat, Pmat, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -33929,7 +35438,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":214
+  /* "PETSc/petscts.pxi":224
  *     return 0
  * 
  * cdef int TS_RHSJacobian(             # <<<<<<<<<<<<<<
@@ -33961,7 +35470,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":235
+/* "PETSc/petscts.pxi":245
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_IFunction(             # <<<<<<<<<<<<<<
@@ -33988,75 +35497,72 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("TS_IFunction", 0);
 
-  /* "PETSc/petscts.pxi":243
+  /* "PETSc/petscts.pxi":253
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS  Ts    = ref_TS(ts)             # <<<<<<<<<<<<<<
  *     cdef Vec Xvec  = ref_Vec(x)
  *     cdef Vec XDvec = ref_Vec(xdot)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":244
+  /* "PETSc/petscts.pxi":254
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS  Ts    = ref_TS(ts)
  *     cdef Vec Xvec  = ref_Vec(x)             # <<<<<<<<<<<<<<
  *     cdef Vec XDvec = ref_Vec(xdot)
  *     cdef Vec Fvec  = ref_Vec(f)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":245
+  /* "PETSc/petscts.pxi":255
  *     cdef TS  Ts    = ref_TS(ts)
  *     cdef Vec Xvec  = ref_Vec(x)
  *     cdef Vec XDvec = ref_Vec(xdot)             # <<<<<<<<<<<<<<
  *     cdef Vec Fvec  = ref_Vec(f)
  *     cdef object context = Ts.get_attr('__ifunction__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdot)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdot)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 255, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_XDvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":246
+  /* "PETSc/petscts.pxi":256
  *     cdef Vec Xvec  = ref_Vec(x)
  *     cdef Vec XDvec = ref_Vec(xdot)
  *     cdef Vec Fvec  = ref_Vec(f)             # <<<<<<<<<<<<<<
  *     cdef object context = Ts.get_attr('__ifunction__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Fvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":247
+  /* "PETSc/petscts.pxi":257
  *     cdef Vec XDvec = ref_Vec(xdot)
  *     cdef Vec Fvec  = ref_Vec(f)
  *     cdef object context = Ts.get_attr('__ifunction__')             # <<<<<<<<<<<<<<
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), __pyx_k_ifunction); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), ((char *)"__ifunction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 257, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":248
+  /* "PETSc/petscts.pxi":258
  *     cdef Vec Fvec  = ref_Vec(f)
  *     cdef object context = Ts.get_attr('__ifunction__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -34078,11 +35584,9 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscts.pxi":249
+  /* "PETSc/petscts.pxi":259
  *     cdef object context = Ts.get_attr('__ifunction__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
@@ -34098,18 +35602,18 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 259, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscts.pxi":250
+  /* "PETSc/petscts.pxi":260
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  *     (function, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -34126,7 +35630,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 260, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -34142,16 +35646,16 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 260, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 260, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 260, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 260, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -34160,7 +35664,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 260, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -34168,7 +35672,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 260, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_function = __pyx_t_1;
@@ -34178,16 +35682,16 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscts.pxi":251
+  /* "PETSc/petscts.pxi":261
  *     assert context is not None and type(context) is tuple # sanity check
  *     (function, args, kargs) = context
  *     function(Ts, toReal(t), Xvec, XDvec, Fvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -34204,30 +35708,30 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Fvec));
   PyTuple_SET_ITEM(__pyx_t_5, 4, ((PyObject *)__pyx_v_Fvec));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 261, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 261, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 261, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/petscts.pxi":252
+  /* "PETSc/petscts.pxi":262
  *     (function, args, kargs) = context
  *     function(Ts, toReal(t), Xvec, XDvec, Fvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -34237,7 +35741,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":235
+  /* "PETSc/petscts.pxi":245
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_IFunction(             # <<<<<<<<<<<<<<
@@ -34269,7 +35773,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":254
+/* "PETSc/petscts.pxi":264
  *     return 0
  * 
  * cdef int TS_IJacobian(             # <<<<<<<<<<<<<<
@@ -34297,87 +35801,84 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("TS_IJacobian", 0);
 
-  /* "PETSc/petscts.pxi":264
+  /* "PETSc/petscts.pxi":274
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS   Ts    = ref_TS(ts)             # <<<<<<<<<<<<<<
  *     cdef Vec  Xvec  = ref_Vec(x)
  *     cdef Vec  XDvec = ref_Vec(xdot)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 274, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":265
+  /* "PETSc/petscts.pxi":275
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS   Ts    = ref_TS(ts)
  *     cdef Vec  Xvec  = ref_Vec(x)             # <<<<<<<<<<<<<<
  *     cdef Vec  XDvec = ref_Vec(xdot)
  *     cdef Mat  Jmat  = ref_Mat(J)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 275, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":266
+  /* "PETSc/petscts.pxi":276
  *     cdef TS   Ts    = ref_TS(ts)
  *     cdef Vec  Xvec  = ref_Vec(x)
  *     cdef Vec  XDvec = ref_Vec(xdot)             # <<<<<<<<<<<<<<
  *     cdef Mat  Jmat  = ref_Mat(J)
  *     cdef Mat  Pmat  = ref_Mat(P)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdot)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdot)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_XDvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":267
+  /* "PETSc/petscts.pxi":277
  *     cdef Vec  Xvec  = ref_Vec(x)
  *     cdef Vec  XDvec = ref_Vec(xdot)
  *     cdef Mat  Jmat  = ref_Mat(J)             # <<<<<<<<<<<<<<
  *     cdef Mat  Pmat  = ref_Mat(P)
  *     cdef object context = Ts.get_attr('__ijacobian__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":268
+  /* "PETSc/petscts.pxi":278
  *     cdef Vec  XDvec = ref_Vec(xdot)
  *     cdef Mat  Jmat  = ref_Mat(J)
  *     cdef Mat  Pmat  = ref_Mat(P)             # <<<<<<<<<<<<<<
  *     cdef object context = Ts.get_attr('__ijacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Pmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":269
+  /* "PETSc/petscts.pxi":279
  *     cdef Mat  Jmat  = ref_Mat(J)
  *     cdef Mat  Pmat  = ref_Mat(P)
  *     cdef object context = Ts.get_attr('__ijacobian__')             # <<<<<<<<<<<<<<
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), __pyx_k_ijacobian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), ((char *)"__ijacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":270
+  /* "PETSc/petscts.pxi":280
  *     cdef Mat  Pmat  = ref_Mat(P)
  *     cdef object context = Ts.get_attr('__ijacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -34399,11 +35900,9 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscts.pxi":271
+  /* "PETSc/petscts.pxi":281
  *     cdef object context = Ts.get_attr('__ijacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
@@ -34419,18 +35918,18 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
       __pyx_t_2 = __pyx_t_3;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_3 != 0);
     __pyx_t_2 = __pyx_t_4;
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 281, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscts.pxi":272
+  /* "PETSc/petscts.pxi":282
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  *     (jacobian, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -34447,7 +35946,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 282, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -34463,16 +35962,16 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 282, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 282, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 282, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 282, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
@@ -34481,7 +35980,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 282, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -34489,7 +35988,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 282, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_1;
@@ -34499,18 +35998,18 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscts.pxi":273
+  /* "PETSc/petscts.pxi":283
  *     assert context is not None and type(context) is tuple # sanity check
  *     (jacobian, args, kargs) = context
  *     jacobian(Ts, toReal(t), Xvec, XDvec, toReal(a), Jmat, Pmat, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 283, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_a); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_a); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 283, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 283, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -34533,30 +36032,30 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
   PyTuple_SET_ITEM(__pyx_t_1, 6, ((PyObject *)__pyx_v_Pmat));
   __pyx_t_6 = 0;
   __pyx_t_5 = 0;
-  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 283, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 283, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 283, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_5 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_5);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 283, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
   } else {
-    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 283, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 283, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":274
+  /* "PETSc/petscts.pxi":284
  *     (jacobian, args, kargs) = context
  *     jacobian(Ts, toReal(t), Xvec, XDvec, toReal(a), Jmat, Pmat, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -34566,7 +36065,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":254
+  /* "PETSc/petscts.pxi":264
  *     return 0
  * 
  * cdef int TS_IJacobian(             # <<<<<<<<<<<<<<
@@ -34599,7 +36098,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":278
+/* "PETSc/petscts.pxi":288
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_Monitor(             # <<<<<<<<<<<<<<
@@ -34627,51 +36126,48 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
-  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("TS_Monitor", 0);
 
-  /* "PETSc/petscts.pxi":285
+  /* "PETSc/petscts.pxi":295
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS  Ts = ref_TS(ts)             # <<<<<<<<<<<<<<
  *     cdef Vec Vu = ref_Vec(u)
  *     cdef object monitorlist = Ts.get_attr('__monitor__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 295, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":286
+  /* "PETSc/petscts.pxi":296
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS  Ts = ref_TS(ts)
  *     cdef Vec Vu = ref_Vec(u)             # <<<<<<<<<<<<<<
  *     cdef object monitorlist = Ts.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_u)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_u)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Vu = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":287
+  /* "PETSc/petscts.pxi":297
  *     cdef TS  Ts = ref_TS(ts)
  *     cdef Vec Vu = ref_Vec(u)
  *     cdef object monitorlist = Ts.get_attr('__monitor__')             # <<<<<<<<<<<<<<
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), __pyx_k_monitor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 297, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_monitorlist = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":288
+  /* "PETSc/petscts.pxi":298
  *     cdef Vec Vu = ref_Vec(u)
  *     cdef object monitorlist = Ts.get_attr('__monitor__')
  *     if monitorlist is None: return 0             # <<<<<<<<<<<<<<
@@ -34685,7 +36181,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscts.pxi":289
+  /* "PETSc/petscts.pxi":299
  *     cdef object monitorlist = Ts.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -34696,26 +36192,26 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
     __pyx_t_1 = __pyx_v_monitorlist; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 299, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 299, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(20, 299, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 299, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(20, 299, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 299, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -34725,7 +36221,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
         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[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(20, 299, __pyx_L1_error)
         }
         break;
       }
@@ -34741,7 +36237,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(20, 299, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -34757,17 +36253,17 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 299, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 299, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 299, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(20, 299, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -34777,7 +36273,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
       __Pyx_GOTREF(__pyx_t_8);
       index = 2; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(20, 299, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L7_unpacking_done;
@@ -34785,7 +36281,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 299, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_7);
@@ -34795,18 +36291,18 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
     __Pyx_XDECREF_SET(__pyx_v_kargs, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscts.pxi":290
+    /* "PETSc/petscts.pxi":300
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Ts, toInt(step), toReal(time), Vu, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_step); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_step); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 300, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_time); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 300, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 300, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -34820,30 +36316,30 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
     PyTuple_SET_ITEM(__pyx_t_8, 3, ((PyObject *)__pyx_v_Vu));
     __pyx_t_6 = 0;
     __pyx_t_9 = 0;
-    __pyx_t_9 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 300, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_6 = PyNumber_Add(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyNumber_Add(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 300, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     if (unlikely(__pyx_v_kargs == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 300, __pyx_L1_error)
     }
-    if (likely(PyDict_Check(__pyx_v_kargs))) {
-      __pyx_t_9 = __pyx_v_kargs;
-      __Pyx_INCREF(__pyx_t_9);
+    if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+      __pyx_t_9 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 300, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
     } else {
-      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 300, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
     }
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_monitor, __pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_monitor, __pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 300, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscts.pxi":289
+    /* "PETSc/petscts.pxi":299
  *     cdef object monitorlist = Ts.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -34853,7 +36349,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":291
+  /* "PETSc/petscts.pxi":301
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Ts, toInt(step), toReal(time), Vu, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -34863,7 +36359,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":278
+  /* "PETSc/petscts.pxi":288
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_Monitor(             # <<<<<<<<<<<<<<
@@ -34895,7 +36391,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":295
+/* "PETSc/petscts.pxi":305
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_PreStep(             # <<<<<<<<<<<<<<
@@ -34916,34 +36412,31 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TS_PreStep", 0);
 
-  /* "PETSc/petscts.pxi":298
+  /* "PETSc/petscts.pxi":308
  *     PetscTS ts,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS Ts = ref_TS(ts)             # <<<<<<<<<<<<<<
  *     (prestep, args, kargs) = Ts.get_attr('__prestep__')
  *     prestep(Ts, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 308, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":299
+  /* "PETSc/petscts.pxi":309
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS Ts = ref_TS(ts)
  *     (prestep, args, kargs) = Ts.get_attr('__prestep__')             # <<<<<<<<<<<<<<
  *     prestep(Ts, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), __pyx_k_prestep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), ((char *)"__prestep__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 309, __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;
@@ -34955,7 +36448,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 309, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -34971,17 +36464,17 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
     __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[20]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 309, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 309, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 309, __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[20]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 309, __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;
@@ -34991,7 +36484,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
     __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[20]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(20, 309, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -34999,7 +36492,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 309, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_prestep = __pyx_t_2;
@@ -35009,42 +36502,42 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscts.pxi":300
+  /* "PETSc/petscts.pxi":310
  *     cdef TS Ts = ref_TS(ts)
  *     (prestep, args, kargs) = Ts.get_attr('__prestep__')
  *     prestep(Ts, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_Ts));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 310, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 310, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 310, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_prestep, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_prestep, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":301
+  /* "PETSc/petscts.pxi":311
  *     (prestep, args, kargs) = Ts.get_attr('__prestep__')
  *     prestep(Ts, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -35054,7 +36547,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":295
+  /* "PETSc/petscts.pxi":305
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_PreStep(             # <<<<<<<<<<<<<<
@@ -35083,7 +36576,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":303
+/* "PETSc/petscts.pxi":313
  *     return 0
  * 
  * cdef int TS_PostStep(             # <<<<<<<<<<<<<<
@@ -35104,34 +36597,31 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TS_PostStep", 0);
 
-  /* "PETSc/petscts.pxi":306
+  /* "PETSc/petscts.pxi":316
  *     PetscTS ts,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS Ts = ref_TS(ts)             # <<<<<<<<<<<<<<
  *     (poststep, args, kargs) = Ts.get_attr('__poststep__')
  *     poststep(Ts, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 316, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":307
+  /* "PETSc/petscts.pxi":317
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef TS Ts = ref_TS(ts)
  *     (poststep, args, kargs) = Ts.get_attr('__poststep__')             # <<<<<<<<<<<<<<
  *     poststep(Ts, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), __pyx_k_poststep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_Ts->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Ts), ((char *)"__poststep__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 317, __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;
@@ -35143,7 +36633,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[20]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(20, 317, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -35159,17 +36649,17 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
     __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[20]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 317, __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[20]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 317, __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;
@@ -35179,7 +36669,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
     __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[20]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(20, 317, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -35187,7 +36677,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 317, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_poststep = __pyx_t_2;
@@ -35197,42 +36687,42 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscts.pxi":308
+  /* "PETSc/petscts.pxi":318
  *     cdef TS Ts = ref_TS(ts)
  *     (poststep, args, kargs) = Ts.get_attr('__poststep__')
  *     poststep(Ts, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 318, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_Ts));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 318, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 318, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[20]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(20, 318, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 318, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 318, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_poststep, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_poststep, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 318, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":309
+  /* "PETSc/petscts.pxi":319
  *     (poststep, args, kargs) = Ts.get_attr('__poststep__')
  *     poststep(Ts, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -35242,7 +36732,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":303
+  /* "PETSc/petscts.pxi":313
  *     return 0
  * 
  * cdef int TS_PostStep(             # <<<<<<<<<<<<<<
@@ -35271,7 +36761,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":151
+/* "PETSc/petsctao.pxi":154
  * # --------------------------------------------------------------------
  * 
  * cdef inline TAO ref_TAO(PetscTAO tao):             # <<<<<<<<<<<<<<
@@ -35285,19 +36775,16 @@ static CYTHON_INLINE struct PyPetscTAOObject *__pyx_f_8petsc4py_5PETSc_ref_TAO(T
   __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_TAO", 0);
 
-  /* "PETSc/petsctao.pxi":152
+  /* "PETSc/petsctao.pxi":155
  * 
  * cdef inline TAO ref_TAO(PetscTAO tao):
  *     cdef TAO ob = <TAO> TAO()             # <<<<<<<<<<<<<<
  *     ob.tao = tao
  *     PetscINCREF(ob.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_TAO)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -35305,7 +36792,7 @@ static CYTHON_INLINE struct PyPetscTAOObject *__pyx_f_8petsc4py_5PETSc_ref_TAO(T
   __pyx_v_ob = ((struct PyPetscTAOObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petsctao.pxi":153
+  /* "PETSc/petsctao.pxi":156
  * cdef inline TAO ref_TAO(PetscTAO tao):
  *     cdef TAO ob = <TAO> TAO()
  *     ob.tao = tao             # <<<<<<<<<<<<<<
@@ -35314,7 +36801,7 @@ static CYTHON_INLINE struct PyPetscTAOObject *__pyx_f_8petsc4py_5PETSc_ref_TAO(T
  */
   __pyx_v_ob->tao = __pyx_v_tao;
 
-  /* "PETSc/petsctao.pxi":154
+  /* "PETSc/petsctao.pxi":157
  *     cdef TAO ob = <TAO> TAO()
  *     ob.tao = tao
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -35323,7 +36810,7 @@ static CYTHON_INLINE struct PyPetscTAOObject *__pyx_f_8petsc4py_5PETSc_ref_TAO(T
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petsctao.pxi":155
+  /* "PETSc/petsctao.pxi":158
  *     ob.tao = tao
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -35335,7 +36822,7 @@ static CYTHON_INLINE struct PyPetscTAOObject *__pyx_f_8petsc4py_5PETSc_ref_TAO(T
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":151
+  /* "PETSc/petsctao.pxi":154
  * # --------------------------------------------------------------------
  * 
  * cdef inline TAO ref_TAO(PetscTAO tao):             # <<<<<<<<<<<<<<
@@ -35356,15 +36843,15 @@ static CYTHON_INLINE struct PyPetscTAOObject *__pyx_f_8petsc4py_5PETSc_ref_TAO(T
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":159
+/* "PETSc/petsctao.pxi":162
  * # --------------------------------------------------------------------
  * 
  * cdef int TAO_Objective(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                        PetscVec _x, PetscReal *_f,
- *                        void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                        void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v__x, PetscReal *__pyx_v__f, CYTHON_UNUSED void *__pyx_v__ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v__x, PetscReal *__pyx_v__f, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   PyObject *__pyx_v_objective = NULL;
@@ -35380,46 +36867,43 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   PetscReal __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("TAO_Objective", 0);
 
-  /* "PETSc/petsctao.pxi":163
- *                        void *_ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":166
+ *                        void *ctx) except PETSC_ERR_PYTHON with gil:
  * 
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec x   = ref_Vec(_x)
  *     (objective, args, kargs) = tao.get_attr("__objective__")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 166, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":164
+  /* "PETSc/petsctao.pxi":167
  * 
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
  *     (objective, args, kargs) = tao.get_attr("__objective__")
  *     retv = objective(tao, x, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":165
+  /* "PETSc/petsctao.pxi":168
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)
  *     (objective, args, kargs) = tao.get_attr("__objective__")             # <<<<<<<<<<<<<<
  *     retv = objective(tao, x, *args, **kargs)
  *     _f[0] = asReal(retv)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_objective); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__objective__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 168, __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;
@@ -35431,7 +36915,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 168, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -35447,17 +36931,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
     __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[21]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 168, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 168, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 168, __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[21]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 168, __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;
@@ -35467,7 +36951,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
     __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[21]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 168, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -35475,7 +36959,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 168, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_objective = __pyx_t_2;
@@ -35485,14 +36969,14 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petsctao.pxi":166
+  /* "PETSc/petsctao.pxi":169
  *     cdef Vec x   = ref_Vec(_x)
  *     (objective, args, kargs) = tao.get_attr("__objective__")
  *     retv = objective(tao, x, *args, **kargs)             # <<<<<<<<<<<<<<
  *     _f[0] = asReal(retv)
  *     return 0
  */
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 169, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
@@ -35500,41 +36984,41 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
   __Pyx_INCREF(((PyObject *)__pyx_v_x));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_x));
   PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_x));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 169, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 169, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 169, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 169, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 169, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_objective, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_objective, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 169, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_retv = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":167
+  /* "PETSc/petsctao.pxi":170
  *     (objective, args, kargs) = tao.get_attr("__objective__")
  *     retv = objective(tao, x, *args, **kargs)
  *     _f[0] = asReal(retv)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_retv); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_retv); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) __PYX_ERR(21, 170, __pyx_L1_error)
   (__pyx_v__f[0]) = __pyx_t_7;
 
-  /* "PETSc/petsctao.pxi":168
+  /* "PETSc/petsctao.pxi":171
  *     retv = objective(tao, x, *args, **kargs)
  *     _f[0] = asReal(retv)
  *     return 0             # <<<<<<<<<<<<<<
@@ -35544,12 +37028,12 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":159
+  /* "PETSc/petsctao.pxi":162
  * # --------------------------------------------------------------------
  * 
  * cdef int TAO_Objective(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                        PetscVec _x, PetscReal *_f,
- *                        void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                        void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
   /* function exit code */
@@ -35575,15 +37059,15 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":170
+/* "PETSc/petsctao.pxi":173
  *     return 0
  * 
  * cdef int TAO_SeparableObjective(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                                 PetscVec _x, PetscVec _f,
- *                                 void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                                 void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec __pyx_v__x, Vec __pyx_v__f, CYTHON_UNUSED void *__pyx_v__ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec __pyx_v__x, Vec __pyx_v__f, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_f = 0;
@@ -35598,58 +37082,55 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TAO_SeparableObjective", 0);
 
-  /* "PETSc/petsctao.pxi":174
- *                                 void *_ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":177
+ *                                 void *ctx) except PETSC_ERR_PYTHON with gil:
  * 
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec f   = ref_Vec(_f)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 177, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":175
+  /* "PETSc/petsctao.pxi":178
  * 
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
  *     cdef Vec f   = ref_Vec(_f)
  *     (separable, args, kargs) = tao.get_attr("__separable__")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 178, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":176
+  /* "PETSc/petsctao.pxi":179
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec f   = ref_Vec(_f)             # <<<<<<<<<<<<<<
  *     (separable, args, kargs) = tao.get_attr("__separable__")
  *     separable(tao, x, f, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__f)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__f)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_f = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":177
+  /* "PETSc/petsctao.pxi":180
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec f   = ref_Vec(_f)
  *     (separable, args, kargs) = tao.get_attr("__separable__")             # <<<<<<<<<<<<<<
  *     separable(tao, x, f, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_separable); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__separable__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 180, __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;
@@ -35661,7 +37142,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 180, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -35677,17 +37158,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
     __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[21]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 180, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 180, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 180, __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[21]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 180, __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;
@@ -35697,7 +37178,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
     __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[21]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 180, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -35705,7 +37186,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 180, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_separable = __pyx_t_2;
@@ -35715,14 +37196,14 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petsctao.pxi":178
+  /* "PETSc/petsctao.pxi":181
  *     cdef Vec f   = ref_Vec(_f)
  *     (separable, args, kargs) = tao.get_attr("__separable__")
  *     separable(tao, x, f, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
@@ -35733,30 +37214,30 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
   __Pyx_INCREF(((PyObject *)__pyx_v_f));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_f));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 181, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 181, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 181, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_separable, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_separable, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":179
+  /* "PETSc/petsctao.pxi":182
  *     (separable, args, kargs) = tao.get_attr("__separable__")
  *     separable(tao, x, f, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -35766,12 +37247,12 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":170
+  /* "PETSc/petsctao.pxi":173
  *     return 0
  * 
  * cdef int TAO_SeparableObjective(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                                 PetscVec _x, PetscVec _f,
- *                                 void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                                 void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
   /* function exit code */
@@ -35797,15 +37278,15 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":181
+/* "PETSc/petsctao.pxi":184
  *     return 0
  * 
  * cdef int TAO_Gradient(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                       PetscVec _x, PetscVec _g,
- *                       void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                       void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__x, Vec __pyx_v__g, CYTHON_UNUSED void *__pyx_v__ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__x, Vec __pyx_v__g, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_g = 0;
@@ -35820,58 +37301,55 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TAO_Gradient", 0);
 
-  /* "PETSc/petsctao.pxi":185
- *                       void *_ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":188
+ *                       void *ctx) except PETSC_ERR_PYTHON with gil:
  * 
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec g   = ref_Vec(_g)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":186
+  /* "PETSc/petsctao.pxi":189
  * 
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
  *     cdef Vec g   = ref_Vec(_g)
  *     (gradient, args, kargs) = tao.get_attr("__gradient__")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":187
+  /* "PETSc/petsctao.pxi":190
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec g   = ref_Vec(_g)             # <<<<<<<<<<<<<<
  *     (gradient, args, kargs) = tao.get_attr("__gradient__")
  *     gradient(tao, x, g, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__g)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__g)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_g = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":188
+  /* "PETSc/petsctao.pxi":191
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec g   = ref_Vec(_g)
  *     (gradient, args, kargs) = tao.get_attr("__gradient__")             # <<<<<<<<<<<<<<
  *     gradient(tao, x, g, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_gradient); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__gradient__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 191, __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;
@@ -35883,7 +37361,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 191, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -35899,17 +37377,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
     __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[21]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 191, __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[21]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 191, __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;
@@ -35919,7 +37397,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
     __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[21]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 191, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -35927,7 +37405,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 191, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_gradient = __pyx_t_2;
@@ -35937,14 +37415,14 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petsctao.pxi":189
+  /* "PETSc/petsctao.pxi":192
  *     cdef Vec g   = ref_Vec(_g)
  *     (gradient, args, kargs) = tao.get_attr("__gradient__")
  *     gradient(tao, x, g, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
@@ -35955,30 +37433,30 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
   __Pyx_INCREF(((PyObject *)__pyx_v_g));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_g));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_g));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 192, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 192, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 192, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_gradient, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_gradient, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":190
+  /* "PETSc/petsctao.pxi":193
  *     (gradient, args, kargs) = tao.get_attr("__gradient__")
  *     gradient(tao, x, g, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -35988,12 +37466,12 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":181
+  /* "PETSc/petsctao.pxi":184
  *     return 0
  * 
  * cdef int TAO_Gradient(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                       PetscVec _x, PetscVec _g,
- *                       void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                       void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
   /* function exit code */
@@ -36019,15 +37497,15 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":193
+/* "PETSc/petsctao.pxi":196
  * 
  * 
  * cdef int TAO_ObjGrad(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                      PetscVec _x, PetscReal *_f, PetscVec _g,
- *                      void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                      void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x, PetscReal *__pyx_v__f, Vec __pyx_v__g, CYTHON_UNUSED void *__pyx_v__ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x, PetscReal *__pyx_v__f, Vec __pyx_v__g, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_g = 0;
@@ -36044,58 +37522,55 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   PetscReal __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("TAO_ObjGrad", 0);
 
-  /* "PETSc/petsctao.pxi":197
- *                      void *_ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":200
+ *                      void *ctx) except PETSC_ERR_PYTHON with gil:
  * 
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec g   = ref_Vec(_g)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 200, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":198
+  /* "PETSc/petsctao.pxi":201
  * 
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
  *     cdef Vec g   = ref_Vec(_g)
  *     (objgrad, args, kargs) = tao.get_attr("__objgrad__")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 201, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":199
+  /* "PETSc/petsctao.pxi":202
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec g   = ref_Vec(_g)             # <<<<<<<<<<<<<<
  *     (objgrad, args, kargs) = tao.get_attr("__objgrad__")
  *     retv = objgrad(tao, x, g, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__g)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__g)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 202, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_g = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":200
+  /* "PETSc/petsctao.pxi":203
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec g   = ref_Vec(_g)
  *     (objgrad, args, kargs) = tao.get_attr("__objgrad__")             # <<<<<<<<<<<<<<
  *     retv = objgrad(tao, x, g, *args, **kargs)
  *     _f[0] = asReal(retv)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_objgrad); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__objgrad__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 203, __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;
@@ -36107,7 +37582,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 203, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -36123,17 +37598,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
     __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[21]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 203, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 203, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 203, __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[21]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 203, __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;
@@ -36143,7 +37618,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
     __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[21]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 203, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -36151,7 +37626,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 203, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_objgrad = __pyx_t_2;
@@ -36161,14 +37636,14 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petsctao.pxi":201
+  /* "PETSc/petsctao.pxi":204
  *     cdef Vec g   = ref_Vec(_g)
  *     (objgrad, args, kargs) = tao.get_attr("__objgrad__")
  *     retv = objgrad(tao, x, g, *args, **kargs)             # <<<<<<<<<<<<<<
  *     _f[0] = asReal(retv)
  *     return 0
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
@@ -36179,41 +37654,41 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
   __Pyx_INCREF(((PyObject *)__pyx_v_g));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_g));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_g));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 204, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 204, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_objgrad, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_objgrad, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_retv = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":202
+  /* "PETSc/petsctao.pxi":205
  *     (objgrad, args, kargs) = tao.get_attr("__objgrad__")
  *     retv = objgrad(tao, x, g, *args, **kargs)
  *     _f[0] = asReal(retv)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_retv); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_retv); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) __PYX_ERR(21, 205, __pyx_L1_error)
   (__pyx_v__f[0]) = __pyx_t_7;
 
-  /* "PETSc/petsctao.pxi":203
+  /* "PETSc/petsctao.pxi":206
  *     retv = objgrad(tao, x, g, *args, **kargs)
  *     _f[0] = asReal(retv)
  *     return 0             # <<<<<<<<<<<<<<
@@ -36223,12 +37698,12 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":193
+  /* "PETSc/petsctao.pxi":196
  * 
  * 
  * cdef int TAO_ObjGrad(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                      PetscVec _x, PetscReal *_f, PetscVec _g,
- *                      void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                      void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
   /* function exit code */
@@ -36255,15 +37730,15 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":205
+/* "PETSc/petsctao.pxi":208
  *     return 0
  * 
  * cdef int TAO_Constraints(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                          PetscVec _x, PetscVec _r,
- *                          void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                          void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_v__x, Vec __pyx_v__r, CYTHON_UNUSED void *__pyx_v__ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_v__x, Vec __pyx_v__r, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_r = 0;
@@ -36278,58 +37753,55 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TAO_Constraints", 0);
 
-  /* "PETSc/petsctao.pxi":209
- *                          void *_ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":212
+ *                          void *ctx) except PETSC_ERR_PYTHON with gil:
  * 
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec r   = ref_Vec(_r)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 212, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":210
+  /* "PETSc/petsctao.pxi":213
  * 
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
  *     cdef Vec r   = ref_Vec(_r)
  *     (constraints, args, kargs) = tao.get_attr("__constraints__")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":211
+  /* "PETSc/petsctao.pxi":214
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec r   = ref_Vec(_r)             # <<<<<<<<<<<<<<
  *     (constraints, args, kargs) = tao.get_attr("__constraints__")
  *     constraints(tao, x, r, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__r)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__r)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_r = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":212
+  /* "PETSc/petsctao.pxi":215
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Vec r   = ref_Vec(_r)
  *     (constraints, args, kargs) = tao.get_attr("__constraints__")             # <<<<<<<<<<<<<<
  *     constraints(tao, x, r, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_constraints); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__constraints__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 215, __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;
@@ -36341,7 +37813,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 215, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -36357,17 +37829,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
     __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[21]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 215, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 215, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 215, __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[21]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 215, __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;
@@ -36377,7 +37849,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
     __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[21]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 215, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -36385,7 +37857,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 215, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_constraints = __pyx_t_2;
@@ -36395,14 +37867,14 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petsctao.pxi":213
+  /* "PETSc/petsctao.pxi":216
  *     cdef Vec r   = ref_Vec(_r)
  *     (constraints, args, kargs) = tao.get_attr("__constraints__")
  *     constraints(tao, x, r, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
@@ -36413,30 +37885,30 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
   __Pyx_INCREF(((PyObject *)__pyx_v_r));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_r));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_r));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 216, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 216, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 216, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_constraints, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_constraints, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":214
+  /* "PETSc/petsctao.pxi":217
  *     (constraints, args, kargs) = tao.get_attr("__constraints__")
  *     constraints(tao, x, r, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -36446,12 +37918,12 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":205
+  /* "PETSc/petsctao.pxi":208
  *     return 0
  * 
  * cdef int TAO_Constraints(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                          PetscVec _x, PetscVec _r,
- *                          void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                          void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
   /* function exit code */
@@ -36477,15 +37949,15 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":216
+/* "PETSc/petsctao.pxi":219
  *     return 0
  * 
  * cdef int TAO_VarBounds(PetscTAO _tao,             # <<<<<<<<<<<<<<
  *                        PetscVec _xl, PetscVec _xu,
- *                        void *_ctx) except PETSC_ERR_PYTHON with gil:
+ *                        void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_VarBounds(Tao __pyx_v__tao, Vec __pyx_v__xl, Vec __pyx_v__xu, CYTHON_UNUSED void *__pyx_v__ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_VarBounds(Tao __pyx_v__tao, Vec __pyx_v__xl, Vec __pyx_v__xu, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_xl = 0;
   struct PyPetscVecObject *__pyx_v_xu = 0;
@@ -36500,293 +37972,55 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_VarBounds(Tao __pyx_v__tao, Vec __pyx_v_
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TAO_VarBounds", 0);
 
-  /* "PETSc/petsctao.pxi":220
- *                        void *_ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":223
+ *                        void *ctx) except PETSC_ERR_PYTHON with gil:
  * 
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec xl  = ref_Vec(_xl)
  *     cdef Vec xu  = ref_Vec(_xu)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":221
+  /* "PETSc/petsctao.pxi":224
  * 
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec xl  = ref_Vec(_xl)             # <<<<<<<<<<<<<<
  *     cdef Vec xu  = ref_Vec(_xu)
  *     (varbounds, args, kargs) = tao.get_attr("__varbounds__")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__xl)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__xl)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_xl = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":222
+  /* "PETSc/petsctao.pxi":225
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec xl  = ref_Vec(_xl)
  *     cdef Vec xu  = ref_Vec(_xu)             # <<<<<<<<<<<<<<
  *     (varbounds, args, kargs) = tao.get_attr("__varbounds__")
  *     varbounds(tao, xl, xu, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__xu)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__xu)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 225, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_xu = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":223
+  /* "PETSc/petsctao.pxi":226
  *     cdef Vec xl  = ref_Vec(_xl)
  *     cdef Vec xu  = ref_Vec(_xu)
  *     (varbounds, args, kargs) = tao.get_attr("__varbounds__")             # <<<<<<<<<<<<<<
  *     varbounds(tao, xl, xu, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_varbounds); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __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;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    Py_ssize_t size = Py_SIZE(sequence);
-    #else
-    Py_ssize_t size = PySequence_Size(sequence);
-    #endif
-    if (unlikely(size != 3)) {
-      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
-      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __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); 
-      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
-    } else {
-      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
-      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
-      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
-    }
-    __Pyx_INCREF(__pyx_t_2);
-    __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[21]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __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[21]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __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;
-    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
-    __Pyx_GOTREF(__pyx_t_2);
-    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
-    __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[21]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_6 = NULL;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    goto __pyx_L4_unpacking_done;
-    __pyx_L3_unpacking_failed:;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_6 = NULL;
-    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_L4_unpacking_done:;
-  }
-  __pyx_v_varbounds = __pyx_t_2;
-  __pyx_t_2 = 0;
-  __pyx_v_args = __pyx_t_3;
-  __pyx_t_3 = 0;
-  __pyx_v_kargs = __pyx_t_4;
-  __pyx_t_4 = 0;
-
-  /* "PETSc/petsctao.pxi":224
- *     cdef Vec xu  = ref_Vec(_xu)
- *     (varbounds, args, kargs) = tao.get_attr("__varbounds__")
- *     varbounds(tao, xl, xu, *args, **kargs)             # <<<<<<<<<<<<<<
- *     return 0
- * 
- */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_v_tao));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
-  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_tao));
-  __Pyx_INCREF(((PyObject *)__pyx_v_xl));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_xl));
-  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_xl));
-  __Pyx_INCREF(((PyObject *)__pyx_v_xu));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_xu));
-  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_xu));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 224; __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_4); __pyx_t_4 = 0;
-  if (unlikely(__pyx_v_kargs == Py_None)) {
-    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
-  } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-  }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_varbounds, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "PETSc/petsctao.pxi":225
- *     (varbounds, args, kargs) = tao.get_attr("__varbounds__")
- *     varbounds(tao, xl, xu, *args, **kargs)
- *     return 0             # <<<<<<<<<<<<<<
- * 
- * cdef int TAO_Hessian(PetscTAO _tao,
- */
-  __pyx_r = 0;
-  goto __pyx_L0;
-
-  /* "PETSc/petsctao.pxi":216
- *     return 0
- * 
- * cdef int TAO_VarBounds(PetscTAO _tao,             # <<<<<<<<<<<<<<
- *                        PetscVec _xl, PetscVec _xu,
- *                        void *_ctx) except PETSC_ERR_PYTHON with gil:
- */
-
-  /* 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_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO_VarBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = PETSC_ERR_PYTHON;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_tao);
-  __Pyx_XDECREF((PyObject *)__pyx_v_xl);
-  __Pyx_XDECREF((PyObject *)__pyx_v_xu);
-  __Pyx_XDECREF(__pyx_v_varbounds);
-  __Pyx_XDECREF(__pyx_v_args);
-  __Pyx_XDECREF(__pyx_v_kargs);
-  __Pyx_RefNannyFinishContext();
-  #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
-  #endif
-  return __pyx_r;
-}
-
-/* "PETSc/petsctao.pxi":227
- *     return 0
- * 
- * cdef int TAO_Hessian(PetscTAO _tao,             # <<<<<<<<<<<<<<
- *                      PetscVec  _x,
- *                      PetscMat  _H,
- */
-
-static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x, Mat __pyx_v__H, Mat __pyx_v__P, CYTHON_UNUSED void *__pyx_v_ctx) {
-  struct PyPetscTAOObject *__pyx_v_tao = 0;
-  struct PyPetscVecObject *__pyx_v_x = 0;
-  struct PyPetscMatObject *__pyx_v_H = 0;
-  struct PyPetscMatObject *__pyx_v_P = 0;
-  PyObject *__pyx_v_hessian = NULL;
-  PyObject *__pyx_v_args = NULL;
-  PyObject *__pyx_v_kargs = NULL;
-  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)(PyObject *);
-  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("TAO_Hessian", 0);
-
-  /* "PETSc/petsctao.pxi":232
- *                      PetscMat  _P,
- *                      void* ctx) except PETSC_ERR_PYTHON with gil:
- *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
- *     cdef Vec x   = ref_Vec(_x)
- *     cdef Mat H   = ref_Mat(_H)
- */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/petsctao.pxi":233
- *                      void* ctx) except PETSC_ERR_PYTHON with gil:
- *     cdef TAO tao = ref_TAO(_tao)
- *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
- *     cdef Mat H   = ref_Mat(_H)
- *     cdef Mat P   = ref_Mat(_P)
- */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/petsctao.pxi":234
- *     cdef TAO tao = ref_TAO(_tao)
- *     cdef Vec x   = ref_Vec(_x)
- *     cdef Mat H   = ref_Mat(_H)             # <<<<<<<<<<<<<<
- *     cdef Mat P   = ref_Mat(_P)
- *     (hessian, args, kargs) = tao.get_attr("__hessian__")
- */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__H)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_H = ((struct PyPetscMatObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/petsctao.pxi":235
- *     cdef Vec x   = ref_Vec(_x)
- *     cdef Mat H   = ref_Mat(_H)
- *     cdef Mat P   = ref_Mat(_P)             # <<<<<<<<<<<<<<
- *     (hessian, args, kargs) = tao.get_attr("__hessian__")
- *     hessian(tao, x, H, P, *args, **kargs)
- */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__P)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/petsctao.pxi":236
- *     cdef Mat H   = ref_Mat(_H)
- *     cdef Mat P   = ref_Mat(_P)
- *     (hessian, args, kargs) = tao.get_attr("__hessian__")             # <<<<<<<<<<<<<<
- *     hessian(tao, x, H, P, *args, **kargs)
- *     return 0
- */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_hessian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__varbounds__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 226, __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;
@@ -36798,7 +38032,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 226, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -36814,17 +38048,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
     __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[21]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 226, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 226, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 226, __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[21]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 226, __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;
@@ -36834,7 +38068,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
     __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[21]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 226, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -36842,76 +38076,73 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 226, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
-  __pyx_v_hessian = __pyx_t_2;
+  __pyx_v_varbounds = __pyx_t_2;
   __pyx_t_2 = 0;
   __pyx_v_args = __pyx_t_3;
   __pyx_t_3 = 0;
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petsctao.pxi":237
- *     cdef Mat P   = ref_Mat(_P)
- *     (hessian, args, kargs) = tao.get_attr("__hessian__")
- *     hessian(tao, x, H, P, *args, **kargs)             # <<<<<<<<<<<<<<
+  /* "PETSc/petsctao.pxi":227
+ *     cdef Vec xu  = ref_Vec(_xu)
+ *     (varbounds, args, kargs) = tao.get_attr("__varbounds__")
+ *     varbounds(tao, xl, xu, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_tao));
-  __Pyx_INCREF(((PyObject *)__pyx_v_x));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_x));
-  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_x));
-  __Pyx_INCREF(((PyObject *)__pyx_v_H));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_H));
-  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_H));
-  __Pyx_INCREF(((PyObject *)__pyx_v_P));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_P));
-  PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_P));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(((PyObject *)__pyx_v_xl));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_xl));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_xl));
+  __Pyx_INCREF(((PyObject *)__pyx_v_xu));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_xu));
+  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_xu));
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 227, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 227, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 227, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_hessian, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_varbounds, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":238
- *     (hessian, args, kargs) = tao.get_attr("__hessian__")
- *     hessian(tao, x, H, P, *args, **kargs)
+  /* "PETSc/petsctao.pxi":228
+ *     (varbounds, args, kargs) = tao.get_attr("__varbounds__")
+ *     varbounds(tao, xl, xu, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
  * 
- * cdef int TAO_Jacobian(PetscTAO _tao,
+ * cdef int TAO_Hessian(PetscTAO _tao,
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":227
+  /* "PETSc/petsctao.pxi":219
  *     return 0
  * 
- * cdef int TAO_Hessian(PetscTAO _tao,             # <<<<<<<<<<<<<<
- *                      PetscVec  _x,
- *                      PetscMat  _H,
+ * cdef int TAO_VarBounds(PetscTAO _tao,             # <<<<<<<<<<<<<<
+ *                        PetscVec _xl, PetscVec _xu,
+ *                        void *ctx) except PETSC_ERR_PYTHON with gil:
  */
 
   /* function exit code */
@@ -36921,14 +38152,13 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO_Hessian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO_VarBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_tao);
-  __Pyx_XDECREF((PyObject *)__pyx_v_x);
-  __Pyx_XDECREF((PyObject *)__pyx_v_H);
-  __Pyx_XDECREF((PyObject *)__pyx_v_P);
-  __Pyx_XDECREF(__pyx_v_hessian);
+  __Pyx_XDECREF((PyObject *)__pyx_v_xl);
+  __Pyx_XDECREF((PyObject *)__pyx_v_xu);
+  __Pyx_XDECREF(__pyx_v_varbounds);
   __Pyx_XDECREF(__pyx_v_args);
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
@@ -36938,20 +38168,20 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":240
+/* "PETSc/petsctao.pxi":230
  *     return 0
  * 
- * cdef int TAO_Jacobian(PetscTAO _tao,             # <<<<<<<<<<<<<<
- *                       PetscVec  _x,
- *                       PetscMat  _J,
+ * cdef int TAO_Hessian(PetscTAO _tao,             # <<<<<<<<<<<<<<
+ *                      PetscVec  _x,
+ *                      PetscMat  _H,
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__x, Mat __pyx_v__J, Mat __pyx_v__P, CYTHON_UNUSED void *__pyx_v_ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x, Mat __pyx_v__H, Mat __pyx_v__P, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
-  struct PyPetscMatObject *__pyx_v_J = 0;
+  struct PyPetscMatObject *__pyx_v_H = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
-  PyObject *__pyx_v_jacobian = NULL;
+  PyObject *__pyx_v_hessian = NULL;
   PyObject *__pyx_v_args = NULL;
   PyObject *__pyx_v_kargs = NULL;
   int __pyx_r;
@@ -36962,70 +38192,67 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TAO_Jacobian", 0);
+  __Pyx_RefNannySetupContext("TAO_Hessian", 0);
 
-  /* "PETSc/petsctao.pxi":245
- *                       PetscMat  _P,
- *                       void* ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":235
+ *                      PetscMat  _P,
+ *                      void* ctx) except PETSC_ERR_PYTHON with gil:
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec x   = ref_Vec(_x)
- *     cdef Mat J   = ref_Mat(_J)
+ *     cdef Mat H   = ref_Mat(_H)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":246
- *                       void* ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":236
+ *                      void* ctx) except PETSC_ERR_PYTHON with gil:
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
- *     cdef Mat J   = ref_Mat(_J)
+ *     cdef Mat H   = ref_Mat(_H)
  *     cdef Mat P   = ref_Mat(_P)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 236, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":247
+  /* "PETSc/petsctao.pxi":237
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)
- *     cdef Mat J   = ref_Mat(_J)             # <<<<<<<<<<<<<<
+ *     cdef Mat H   = ref_Mat(_H)             # <<<<<<<<<<<<<<
  *     cdef Mat P   = ref_Mat(_P)
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")
+ *     (hessian, args, kargs) = tao.get_attr("__hessian__")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__J)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__H)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 237, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_J = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_v_H = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":248
+  /* "PETSc/petsctao.pxi":238
  *     cdef Vec x   = ref_Vec(_x)
- *     cdef Mat J   = ref_Mat(_J)
+ *     cdef Mat H   = ref_Mat(_H)
  *     cdef Mat P   = ref_Mat(_P)             # <<<<<<<<<<<<<<
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")
- *     jacobian(tao, x, J, P, *args, **kargs)
+ *     (hessian, args, kargs) = tao.get_attr("__hessian__")
+ *     hessian(tao, x, H, P, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__P)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 238, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":249
- *     cdef Mat J   = ref_Mat(_J)
+  /* "PETSc/petsctao.pxi":239
+ *     cdef Mat H   = ref_Mat(_H)
  *     cdef Mat P   = ref_Mat(_P)
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")             # <<<<<<<<<<<<<<
- *     jacobian(tao, x, J, P, *args, **kargs)
+ *     (hessian, args, kargs) = tao.get_attr("__hessian__")             # <<<<<<<<<<<<<<
+ *     hessian(tao, x, H, P, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_jacobian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__hessian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 239, __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;
@@ -37037,7 +38264,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 239, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -37053,17 +38280,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
     __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[21]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 239, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 239, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 239, __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[21]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 239, __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;
@@ -37073,7 +38300,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
     __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[21]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 239, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -37081,24 +38308,24 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 239, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
-  __pyx_v_jacobian = __pyx_t_2;
+  __pyx_v_hessian = __pyx_t_2;
   __pyx_t_2 = 0;
   __pyx_v_args = __pyx_t_3;
   __pyx_t_3 = 0;
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petsctao.pxi":250
+  /* "PETSc/petsctao.pxi":240
  *     cdef Mat P   = ref_Mat(_P)
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")
- *     jacobian(tao, x, J, P, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     (hessian, args, kargs) = tao.get_attr("__hessian__")
+ *     hessian(tao, x, H, P, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
@@ -37106,51 +38333,51 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
   __Pyx_INCREF(((PyObject *)__pyx_v_x));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_x));
   PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_x));
-  __Pyx_INCREF(((PyObject *)__pyx_v_J));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
-  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_J));
+  __Pyx_INCREF(((PyObject *)__pyx_v_H));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_H));
+  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_H));
   __Pyx_INCREF(((PyObject *)__pyx_v_P));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_P));
   PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_P));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 240, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 240, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 240, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_hessian, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":251
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")
- *     jacobian(tao, x, J, P, *args, **kargs)
+  /* "PETSc/petsctao.pxi":241
+ *     (hessian, args, kargs) = tao.get_attr("__hessian__")
+ *     hessian(tao, x, H, P, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
  * 
- * cdef int TAO_JacobianState(PetscTAO _tao,
+ * cdef int TAO_Jacobian(PetscTAO _tao,
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":240
+  /* "PETSc/petsctao.pxi":230
  *     return 0
  * 
- * cdef int TAO_Jacobian(PetscTAO _tao,             # <<<<<<<<<<<<<<
- *                       PetscVec  _x,
- *                       PetscMat  _J,
+ * cdef int TAO_Hessian(PetscTAO _tao,             # <<<<<<<<<<<<<<
+ *                      PetscVec  _x,
+ *                      PetscMat  _H,
  */
 
   /* function exit code */
@@ -37160,14 +38387,14 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO_Jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO_Hessian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_tao);
   __Pyx_XDECREF((PyObject *)__pyx_v_x);
-  __Pyx_XDECREF((PyObject *)__pyx_v_J);
+  __Pyx_XDECREF((PyObject *)__pyx_v_H);
   __Pyx_XDECREF((PyObject *)__pyx_v_P);
-  __Pyx_XDECREF(__pyx_v_jacobian);
+  __Pyx_XDECREF(__pyx_v_hessian);
   __Pyx_XDECREF(__pyx_v_args);
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
@@ -37177,20 +38404,19 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":253
+/* "PETSc/petsctao.pxi":243
  *     return 0
  * 
- * cdef int TAO_JacobianState(PetscTAO _tao,             # <<<<<<<<<<<<<<
- *                            PetscVec  _x,
- *                            PetscMat  _J,
+ * cdef int TAO_Jacobian(PetscTAO _tao,             # <<<<<<<<<<<<<<
+ *                       PetscVec  _x,
+ *                       PetscMat  _J,
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __pyx_v__x, Mat __pyx_v__J, Mat __pyx_v__P, Mat __pyx_v__I, CYTHON_UNUSED void *__pyx_v_ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__x, Mat __pyx_v__J, Mat __pyx_v__P, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
-  struct PyPetscMatObject *__pyx_v_I = 0;
   PyObject *__pyx_v_jacobian = NULL;
   PyObject *__pyx_v_args = NULL;
   PyObject *__pyx_v_kargs = NULL;
@@ -37202,82 +38428,67 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TAO_JacobianState", 0);
+  __Pyx_RefNannySetupContext("TAO_Jacobian", 0);
 
-  /* "PETSc/petsctao.pxi":259
- *                            PetscMat  _I,
- *                            void* ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":248
+ *                       PetscMat  _P,
+ *                       void* ctx) except PETSC_ERR_PYTHON with gil:
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Mat J   = ref_Mat(_J)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 248, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":260
- *                            void* ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":249
+ *                       void* ctx) except PETSC_ERR_PYTHON with gil:
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
  *     cdef Mat J   = ref_Mat(_J)
  *     cdef Mat P   = ref_Mat(_P)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 249, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":261
+  /* "PETSc/petsctao.pxi":250
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Mat J   = ref_Mat(_J)             # <<<<<<<<<<<<<<
  *     cdef Mat P   = ref_Mat(_P)
- *     cdef Mat I   = ref_Mat(_I)
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__J)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 250, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_J = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":262
+  /* "PETSc/petsctao.pxi":251
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Mat J   = ref_Mat(_J)
  *     cdef Mat P   = ref_Mat(_P)             # <<<<<<<<<<<<<<
- *     cdef Mat I   = ref_Mat(_I)
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")
+ *     jacobian(tao, x, J, P, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__P)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":263
+  /* "PETSc/petsctao.pxi":252
  *     cdef Mat J   = ref_Mat(_J)
  *     cdef Mat P   = ref_Mat(_P)
- *     cdef Mat I   = ref_Mat(_I)             # <<<<<<<<<<<<<<
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")
- *     jacobian(tao, x, J, P, I, *args, **kargs)
- */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__I)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_I = ((struct PyPetscMatObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/petsctao.pxi":264
- *     cdef Mat P   = ref_Mat(_P)
- *     cdef Mat I   = ref_Mat(_I)
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")             # <<<<<<<<<<<<<<
- *     jacobian(tao, x, J, P, I, *args, **kargs)
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")             # <<<<<<<<<<<<<<
+ *     jacobian(tao, x, J, P, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_jacobian_state); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__jacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 252, __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;
@@ -37289,7 +38500,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 252, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -37305,17 +38516,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
     __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[21]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 252, __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[21]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 252, __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;
@@ -37325,7 +38536,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
     __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[21]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 252, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -37333,7 +38544,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 252, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_2;
@@ -37343,14 +38554,14 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petsctao.pxi":265
- *     cdef Mat I   = ref_Mat(_I)
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")
- *     jacobian(tao, x, J, P, I, *args, **kargs)             # <<<<<<<<<<<<<<
+  /* "PETSc/petsctao.pxi":253
+ *     cdef Mat P   = ref_Mat(_P)
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")
+ *     jacobian(tao, x, J, P, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
@@ -37364,48 +38575,45 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   __Pyx_INCREF(((PyObject *)__pyx_v_P));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_P));
   PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_P));
-  __Pyx_INCREF(((PyObject *)__pyx_v_I));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_I));
-  PyTuple_SET_ITEM(__pyx_t_1, 4, ((PyObject *)__pyx_v_I));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 253, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 253, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 253, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":266
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")
- *     jacobian(tao, x, J, P, I, *args, **kargs)
+  /* "PETSc/petsctao.pxi":254
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian__")
+ *     jacobian(tao, x, J, P, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
  * 
- * cdef int TAO_JacobianDesign(PetscTAO _tao,
+ * cdef int TAO_JacobianState(PetscTAO _tao,
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":253
+  /* "PETSc/petsctao.pxi":243
  *     return 0
  * 
- * cdef int TAO_JacobianState(PetscTAO _tao,             # <<<<<<<<<<<<<<
- *                            PetscVec  _x,
- *                            PetscMat  _J,
+ * cdef int TAO_Jacobian(PetscTAO _tao,             # <<<<<<<<<<<<<<
+ *                       PetscVec  _x,
+ *                       PetscMat  _J,
  */
 
   /* function exit code */
@@ -37415,14 +38623,13 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO_JacobianState", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO_Jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_tao);
   __Pyx_XDECREF((PyObject *)__pyx_v_x);
   __Pyx_XDECREF((PyObject *)__pyx_v_J);
   __Pyx_XDECREF((PyObject *)__pyx_v_P);
-  __Pyx_XDECREF((PyObject *)__pyx_v_I);
   __Pyx_XDECREF(__pyx_v_jacobian);
   __Pyx_XDECREF(__pyx_v_args);
   __Pyx_XDECREF(__pyx_v_kargs);
@@ -37433,18 +38640,20 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":268
+/* "PETSc/petsctao.pxi":256
  *     return 0
  * 
- * cdef int TAO_JacobianDesign(PetscTAO _tao,             # <<<<<<<<<<<<<<
- *                             PetscVec  _x,
- *                             PetscMat  _J,
+ * cdef int TAO_JacobianState(PetscTAO _tao,             # <<<<<<<<<<<<<<
+ *                            PetscVec  _x,
+ *                            PetscMat  _J,
  */
 
-static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __pyx_v__x, Mat __pyx_v__J, CYTHON_UNUSED void *__pyx_v_ctx) {
+static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __pyx_v__x, Mat __pyx_v__J, Mat __pyx_v__P, Mat __pyx_v__I, CYTHON_UNUSED void *__pyx_v_ctx) {
   struct PyPetscTAOObject *__pyx_v_tao = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscMatObject *__pyx_v_J = 0;
+  struct PyPetscMatObject *__pyx_v_P = 0;
+  struct PyPetscMatObject *__pyx_v_I = 0;
   PyObject *__pyx_v_jacobian = NULL;
   PyObject *__pyx_v_args = NULL;
   PyObject *__pyx_v_kargs = NULL;
@@ -37456,58 +38665,79 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
-  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("TAO_JacobianDesign", 0);
+  __Pyx_RefNannySetupContext("TAO_JacobianState", 0);
 
-  /* "PETSc/petsctao.pxi":272
- *                             PetscMat  _J,
- *                             void* ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":262
+ *                            PetscMat  _I,
+ *                            void* ctx) except PETSC_ERR_PYTHON with gil:
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Mat J   = ref_Mat(_J)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 262, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":273
- *                             void* ctx) except PETSC_ERR_PYTHON with gil:
+  /* "PETSc/petsctao.pxi":263
+ *                            void* ctx) except PETSC_ERR_PYTHON with gil:
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
  *     cdef Mat J   = ref_Mat(_J)
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian_design__")
+ *     cdef Mat P   = ref_Mat(_P)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 263, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":274
+  /* "PETSc/petsctao.pxi":264
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Mat J   = ref_Mat(_J)             # <<<<<<<<<<<<<<
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian_design__")
- *     jacobian(tao, x, J, *args, **kargs)
+ *     cdef Mat P   = ref_Mat(_P)
+ *     cdef Mat I   = ref_Mat(_I)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__J)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 264, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_J = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":275
+  /* "PETSc/petsctao.pxi":265
  *     cdef Vec x   = ref_Vec(_x)
  *     cdef Mat J   = ref_Mat(_J)
- *     (jacobian, args, kargs) = tao.get_attr("__jacobian_design__")             # <<<<<<<<<<<<<<
- *     jacobian(tao, x, J, *args, **kargs)
+ *     cdef Mat P   = ref_Mat(_P)             # <<<<<<<<<<<<<<
+ *     cdef Mat I   = ref_Mat(_I)
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 265, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petsctao.pxi":266
+ *     cdef Mat J   = ref_Mat(_J)
+ *     cdef Mat P   = ref_Mat(_P)
+ *     cdef Mat I   = ref_Mat(_I)             # <<<<<<<<<<<<<<
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")
+ *     jacobian(tao, x, J, P, I, *args, **kargs)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__I)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 266, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_I = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petsctao.pxi":267
+ *     cdef Mat P   = ref_Mat(_P)
+ *     cdef Mat I   = ref_Mat(_I)
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")             # <<<<<<<<<<<<<<
+ *     jacobian(tao, x, J, P, I, *args, **kargs)
  *     return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_jacobian_design); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__jacobian_state__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 267, __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;
@@ -37519,7 +38749,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 267, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -37535,17 +38765,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
     __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[21]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 267, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 267, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 267, __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[21]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 267, __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;
@@ -37555,7 +38785,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
     __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[21]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(21, 267, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -37563,7 +38793,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 267, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_2;
@@ -37573,14 +38803,241 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
+  /* "PETSc/petsctao.pxi":268
+ *     cdef Mat I   = ref_Mat(_I)
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")
+ *     jacobian(tao, x, J, P, I, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 268, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_tao));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_tao));
+  __Pyx_INCREF(((PyObject *)__pyx_v_x));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_x));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_x));
+  __Pyx_INCREF(((PyObject *)__pyx_v_J));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
+  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_J));
+  __Pyx_INCREF(((PyObject *)__pyx_v_P));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_P));
+  PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_P));
+  __Pyx_INCREF(((PyObject *)__pyx_v_I));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_I));
+  PyTuple_SET_ITEM(__pyx_t_1, 4, ((PyObject *)__pyx_v_I));
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 268, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 268, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  if (unlikely(__pyx_v_kargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+    __PYX_ERR(21, 268, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 268, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+  } else {
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 268, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+  }
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 268, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/petsctao.pxi":269
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian_state__")
+ *     jacobian(tao, x, J, P, I, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int TAO_JacobianDesign(PetscTAO _tao,
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petsctao.pxi":256
+ *     return 0
+ * 
+ * cdef int TAO_JacobianState(PetscTAO _tao,             # <<<<<<<<<<<<<<
+ *                            PetscVec  _x,
+ *                            PetscMat  _J,
+ */
+
+  /* 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_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO_JacobianState", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_tao);
+  __Pyx_XDECREF((PyObject *)__pyx_v_x);
+  __Pyx_XDECREF((PyObject *)__pyx_v_J);
+  __Pyx_XDECREF((PyObject *)__pyx_v_P);
+  __Pyx_XDECREF((PyObject *)__pyx_v_I);
+  __Pyx_XDECREF(__pyx_v_jacobian);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petsctao.pxi":271
+ *     return 0
+ * 
+ * cdef int TAO_JacobianDesign(PetscTAO _tao,             # <<<<<<<<<<<<<<
+ *                             PetscVec  _x,
+ *                             PetscMat  _J,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __pyx_v__x, Mat __pyx_v__J, CYTHON_UNUSED void *__pyx_v_ctx) {
+  struct PyPetscTAOObject *__pyx_v_tao = 0;
+  struct PyPetscVecObject *__pyx_v_x = 0;
+  struct PyPetscMatObject *__pyx_v_J = 0;
+  PyObject *__pyx_v_jacobian = NULL;
+  PyObject *__pyx_v_args = NULL;
+  PyObject *__pyx_v_kargs = NULL;
+  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)(PyObject *);
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("TAO_JacobianDesign", 0);
+
+  /* "PETSc/petsctao.pxi":275
+ *                             PetscMat  _J,
+ *                             void* ctx) except PETSC_ERR_PYTHON with gil:
+ *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
+ *     cdef Vec x   = ref_Vec(_x)
+ *     cdef Mat J   = ref_Mat(_J)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 275, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
   /* "PETSc/petsctao.pxi":276
+ *                             void* ctx) except PETSC_ERR_PYTHON with gil:
+ *     cdef TAO tao = ref_TAO(_tao)
+ *     cdef Vec x   = ref_Vec(_x)             # <<<<<<<<<<<<<<
+ *     cdef Mat J   = ref_Mat(_J)
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian_design__")
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v__x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 276, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_x = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petsctao.pxi":277
+ *     cdef TAO tao = ref_TAO(_tao)
+ *     cdef Vec x   = ref_Vec(_x)
+ *     cdef Mat J   = ref_Mat(_J)             # <<<<<<<<<<<<<<
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian_design__")
+ *     jacobian(tao, x, J, *args, **kargs)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v__J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 277, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_J = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petsctao.pxi":278
+ *     cdef Vec x   = ref_Vec(_x)
+ *     cdef Mat J   = ref_Mat(_J)
+ *     (jacobian, args, kargs) = tao.get_attr("__jacobian_design__")             # <<<<<<<<<<<<<<
+ *     jacobian(tao, x, J, *args, **kargs)
+ *     return 0
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__jacobian_design__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 278, __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;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    Py_ssize_t size = Py_SIZE(sequence);
+    #else
+    Py_ssize_t size = PySequence_Size(sequence);
+    #endif
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(21, 278, __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); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 278, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 278, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 278, __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_ERR(21, 278, __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;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __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_ERR(21, 278, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(21, 278, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_v_jacobian = __pyx_t_2;
+  __pyx_t_2 = 0;
+  __pyx_v_args = __pyx_t_3;
+  __pyx_t_3 = 0;
+  __pyx_v_kargs = __pyx_t_4;
+  __pyx_t_4 = 0;
+
+  /* "PETSc/petsctao.pxi":279
  *     cdef Mat J   = ref_Mat(_J)
  *     (jacobian, args, kargs) = tao.get_attr("__jacobian_design__")
  *     jacobian(tao, x, J, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
@@ -37591,30 +39048,30 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
   __Pyx_INCREF(((PyObject *)__pyx_v_J));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_J));
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 279, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_4 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_4);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 279, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
   } else {
-    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 279, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":277
+  /* "PETSc/petsctao.pxi":280
  *     (jacobian, args, kargs) = tao.get_attr("__jacobian_design__")
  *     jacobian(tao, x, J, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -37624,7 +39081,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":268
+  /* "PETSc/petsctao.pxi":271
  *     return 0
  * 
  * cdef int TAO_JacobianDesign(PetscTAO _tao,             # <<<<<<<<<<<<<<
@@ -37655,7 +39112,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":279
+/* "PETSc/petsctao.pxi":282
  *     return 0
  * 
  * cdef int TAO_Converged(PetscTAO _tao,             # <<<<<<<<<<<<<<
@@ -37684,44 +39141,41 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
   int __pyx_t_10;
   int __pyx_t_11;
   TaoConvergedReason __pyx_t_12;
-  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("TAO_Converged", 0);
 
-  /* "PETSc/petsctao.pxi":282
+  /* "PETSc/petsctao.pxi":285
  *                        void* ctx) except PETSC_ERR_PYTHON with gil:
  *     # call first the default convergence test
  *     CHKERR( TaoDefaultConvergenceTest(_tao, NULL) )             # <<<<<<<<<<<<<<
  *     # call next the user-provided convergence test
  *     cdef TAO tao = ref_TAO(_tao)
  */
-  __pyx_t_1 = TaoDefaultConvergenceTest(__pyx_v__tao, NULL); if (unlikely(__pyx_t_1 == PETSC_ERR_PYTHON)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = TaoDefaultConvergenceTest(__pyx_v__tao, NULL); if (unlikely(__pyx_t_1 == PETSC_ERR_PYTHON)) __PYX_ERR(21, 285, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(21, 285, __pyx_L1_error)
 
-  /* "PETSc/petsctao.pxi":284
+  /* "PETSc/petsctao.pxi":287
  *     CHKERR( TaoDefaultConvergenceTest(_tao, NULL) )
  *     # call next the user-provided convergence test
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     (converged, args, kargs) = tao.get_attr('__converged__')
  *     reason = converged(tao, *args, **kargs)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 287, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petsctao.pxi":285
+  /* "PETSc/petsctao.pxi":288
  *     # call next the user-provided convergence test
  *     cdef TAO tao = ref_TAO(_tao)
  *     (converged, args, kargs) = tao.get_attr('__converged__')             # <<<<<<<<<<<<<<
  *     reason = converged(tao, *args, **kargs)
  *     if reason is None:  return 0
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_converged); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__converged__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
     PyObject* sequence = __pyx_t_3;
@@ -37733,7 +39187,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 288, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -37749,17 +39203,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 288, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 288, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 288, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(21, 288, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -37769,7 +39223,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(21, 288, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L4_unpacking_done;
@@ -37777,7 +39231,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 288, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_converged = __pyx_t_4;
@@ -37787,43 +39241,43 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petsctao.pxi":286
+  /* "PETSc/petsctao.pxi":289
  *     cdef TAO tao = ref_TAO(_tao)
  *     (converged, args, kargs) = tao.get_attr('__converged__')
  *     reason = converged(tao, *args, **kargs)             # <<<<<<<<<<<<<<
  *     if reason is None:  return 0
  *     # handle value of convergence reason
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_tao));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_tao));
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyNumber_Add(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyNumber_Add(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[21]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(21, 289, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 289, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 289, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_converged, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_converged, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_v_reason = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petsctao.pxi":287
+  /* "PETSc/petsctao.pxi":290
  *     (converged, args, kargs) = tao.get_attr('__converged__')
  *     reason = converged(tao, *args, **kargs)
  *     if reason is None:  return 0             # <<<<<<<<<<<<<<
@@ -37837,7 +39291,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     goto __pyx_L0;
   }
 
-  /* "PETSc/petsctao.pxi":289
+  /* "PETSc/petsctao.pxi":292
  *     if reason is None:  return 0
  *     # handle value of convergence reason
  *     cdef PetscTAOConvergedReason creason = TAO_CONTINUE_ITERATING             # <<<<<<<<<<<<<<
@@ -37846,7 +39300,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
  */
   __pyx_v_creason = TAO_CONTINUE_ITERATING;
 
-  /* "PETSc/petsctao.pxi":290
+  /* "PETSc/petsctao.pxi":293
  *     # handle value of convergence reason
  *     cdef PetscTAOConvergedReason creason = TAO_CONTINUE_ITERATING
  *     if reason is False or reason == -1:             # <<<<<<<<<<<<<<
@@ -37860,14 +39314,15 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     __pyx_t_10 = __pyx_t_11;
     goto __pyx_L7_bool_binop_done;
   }
-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_reason, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_reason, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 293, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(21, 293, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_10 = __pyx_t_11;
   __pyx_L7_bool_binop_done:;
   if (__pyx_t_10) {
 
-    /* "PETSc/petsctao.pxi":291
+    /* "PETSc/petsctao.pxi":294
  *     cdef PetscTAOConvergedReason creason = TAO_CONTINUE_ITERATING
  *     if reason is False or reason == -1:
  *         creason = TAO_DIVERGED_USER             # <<<<<<<<<<<<<<
@@ -37875,10 +39330,18 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
  *         creason = TAO_CONVERGED_USER
  */
     __pyx_v_creason = TAO_DIVERGED_USER;
+
+    /* "PETSc/petsctao.pxi":293
+ *     # handle value of convergence reason
+ *     cdef PetscTAOConvergedReason creason = TAO_CONTINUE_ITERATING
+ *     if reason is False or reason == -1:             # <<<<<<<<<<<<<<
+ *         creason = TAO_DIVERGED_USER
+ *     elif reason is True or reason == 1:
+ */
     goto __pyx_L6;
   }
 
-  /* "PETSc/petsctao.pxi":292
+  /* "PETSc/petsctao.pxi":295
  *     if reason is False or reason == -1:
  *         creason = TAO_DIVERGED_USER
  *     elif reason is True or reason == 1:             # <<<<<<<<<<<<<<
@@ -37892,14 +39355,15 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     __pyx_t_10 = __pyx_t_9;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_reason, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_reason, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 295, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(21, 295, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_10 = __pyx_t_9;
   __pyx_L9_bool_binop_done:;
   if (__pyx_t_10) {
 
-    /* "PETSc/petsctao.pxi":293
+    /* "PETSc/petsctao.pxi":296
  *         creason = TAO_DIVERGED_USER
  *     elif reason is True or reason == 1:
  *         creason = TAO_CONVERGED_USER             # <<<<<<<<<<<<<<
@@ -37907,21 +39371,29 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
  *         creason = reason
  */
     __pyx_v_creason = TAO_CONVERGED_USER;
+
+    /* "PETSc/petsctao.pxi":295
+ *     if reason is False or reason == -1:
+ *         creason = TAO_DIVERGED_USER
+ *     elif reason is True or reason == 1:             # <<<<<<<<<<<<<<
+ *         creason = TAO_CONVERGED_USER
+ *     else:
+ */
     goto __pyx_L6;
   }
-  /*else*/ {
 
-    /* "PETSc/petsctao.pxi":295
+  /* "PETSc/petsctao.pxi":298
  *         creason = TAO_CONVERGED_USER
  *     else:
  *         creason = reason             # <<<<<<<<<<<<<<
  *         assert creason >= TAO_DIVERGED_USER
  *         assert creason <= TAO_CONVERGED_USER
  */
-    __pyx_t_12 = ((TaoConvergedReason)PyInt_AsLong(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_12 = ((TaoConvergedReason)__Pyx_PyInt_As_TaoConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(21, 298, __pyx_L1_error)
     __pyx_v_creason = __pyx_t_12;
 
-    /* "PETSc/petsctao.pxi":296
+    /* "PETSc/petsctao.pxi":299
  *     else:
  *         creason = reason
  *         assert creason >= TAO_DIVERGED_USER             # <<<<<<<<<<<<<<
@@ -37932,12 +39404,12 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     if (unlikely(!Py_OptimizeFlag)) {
       if (unlikely(!((__pyx_v_creason >= TAO_DIVERGED_USER) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[21]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(21, 299, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/petsctao.pxi":297
+    /* "PETSc/petsctao.pxi":300
  *         creason = reason
  *         assert creason >= TAO_DIVERGED_USER
  *         assert creason <= TAO_CONVERGED_USER             # <<<<<<<<<<<<<<
@@ -37948,23 +39420,23 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
     if (unlikely(!Py_OptimizeFlag)) {
       if (unlikely(!((__pyx_v_creason <= TAO_CONVERGED_USER) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[21]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(21, 300, __pyx_L1_error)
       }
     }
     #endif
   }
   __pyx_L6:;
 
-  /* "PETSc/petsctao.pxi":298
+  /* "PETSc/petsctao.pxi":301
  *         assert creason >= TAO_DIVERGED_USER
  *         assert creason <= TAO_CONVERGED_USER
  *     CHKERR( TaoSetConvergedReason(_tao, creason) )             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergedReason(__pyx_v__tao, __pyx_v_creason)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergedReason(__pyx_v__tao, __pyx_v_creason)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(21, 301, __pyx_L1_error)
 
-  /* "PETSc/petsctao.pxi":299
+  /* "PETSc/petsctao.pxi":302
  *         assert creason <= TAO_CONVERGED_USER
  *     CHKERR( TaoSetConvergedReason(_tao, creason) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -37974,7 +39446,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":279
+  /* "PETSc/petsctao.pxi":282
  *     return 0
  * 
  * cdef int TAO_Converged(PetscTAO _tao,             # <<<<<<<<<<<<<<
@@ -38004,7 +39476,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "PETSc/petsctao.pxi":301
+/* "PETSc/petsctao.pxi":304
  *     return 0
  * 
  * cdef int TAO_Monitor(PetscTAO _tao,             # <<<<<<<<<<<<<<
@@ -38031,39 +39503,36 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
-  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("TAO_Monitor", 0);
 
-  /* "PETSc/petsctao.pxi":303
+  /* "PETSc/petsctao.pxi":306
  * cdef int TAO_Monitor(PetscTAO _tao,
  *                      void* ctx) except PETSC_ERR_PYTHON with gil:
  *     cdef TAO tao = ref_TAO(_tao)             # <<<<<<<<<<<<<<
  *     cdef object monitorlist = tao.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TAO(__pyx_v__tao)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 306, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tao = ((struct PyPetscTAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":304
+  /* "PETSc/petsctao.pxi":307
  *                      void* ctx) except PETSC_ERR_PYTHON with gil:
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef object monitorlist = tao.get_attr('__monitor__')             # <<<<<<<<<<<<<<
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), __pyx_k_monitor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_tao->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_tao), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 307, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_monitorlist = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":305
+  /* "PETSc/petsctao.pxi":308
  *     cdef TAO tao = ref_TAO(_tao)
  *     cdef object monitorlist = tao.get_attr('__monitor__')
  *     if monitorlist is None: return 0             # <<<<<<<<<<<<<<
@@ -38077,7 +39546,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
     goto __pyx_L0;
   }
 
-  /* "PETSc/petsctao.pxi":306
+  /* "PETSc/petsctao.pxi":309
  *     cdef object monitorlist = tao.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -38088,26 +39557,26 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
     __pyx_t_1 = __pyx_v_monitorlist; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 309, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 309, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(21, 309, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 309, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(21, 309, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 309, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -38117,7 +39586,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
         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[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(21, 309, __pyx_L1_error)
         }
         break;
       }
@@ -38133,7 +39602,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(21, 309, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -38149,17 +39618,17 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(21, 309, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(21, 309, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(21, 309, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(21, 309, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -38169,7 +39638,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
       __Pyx_GOTREF(__pyx_t_8);
       index = 2; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(21, 309, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L7_unpacking_done;
@@ -38177,7 +39646,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 309, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_7);
@@ -38187,42 +39656,42 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
     __Pyx_XDECREF_SET(__pyx_v_kargs, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "PETSc/petsctao.pxi":307
+    /* "PETSc/petsctao.pxi":310
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(tao, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 310, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(((PyObject *)__pyx_v_tao));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_tao));
     PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_tao));
-    __pyx_t_9 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(21, 310, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PyNumber_Add(__pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyNumber_Add(__pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(21, 310, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     if (unlikely(__pyx_v_kargs == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-      {__pyx_filename = __pyx_f[21]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(21, 310, __pyx_L1_error)
     }
-    if (likely(PyDict_Check(__pyx_v_kargs))) {
-      __pyx_t_9 = __pyx_v_kargs;
-      __Pyx_INCREF(__pyx_t_9);
+    if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+      __pyx_t_9 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_9)) __PYX_ERR(21, 310, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
     } else {
-      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(21, 310, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
     }
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_monitor, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_monitor, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 310, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petsctao.pxi":306
+    /* "PETSc/petsctao.pxi":309
  *     cdef object monitorlist = tao.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -38232,7 +39701,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petsctao.pxi":308
+  /* "PETSc/petsctao.pxi":311
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(tao, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -38242,7 +39711,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petsctao.pxi":301
+  /* "PETSc/petsctao.pxi":304
  *     return 0
  * 
  * cdef int TAO_Monitor(PetscTAO _tao,             # <<<<<<<<<<<<<<
@@ -38273,7 +39742,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "PETSc/petscdm.pxi":85
+/* "PETSc/petscdm.pxi":108
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \             # <<<<<<<<<<<<<<
@@ -38289,12 +39758,9 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   DMBoundaryType __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("asBoundaryType", 0);
 
-  /* "PETSc/petscdm.pxi":87
+  /* "PETSc/petscdm.pxi":110
  * cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \
  *     except <PetscDMBoundaryType>(-1):
  *     if boundary is None:             # <<<<<<<<<<<<<<
@@ -38305,7 +39771,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdm.pxi":88
+    /* "PETSc/petscdm.pxi":111
  *     except <PetscDMBoundaryType>(-1):
  *     if boundary is None:
  *         return DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
@@ -38314,9 +39780,17 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
     __pyx_r = DM_BOUNDARY_NONE;
     goto __pyx_L0;
+
+    /* "PETSc/petscdm.pxi":110
+ * cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \
+ *     except <PetscDMBoundaryType>(-1):
+ *     if boundary is None:             # <<<<<<<<<<<<<<
+ *         return DM_BOUNDARY_NONE
+ *     if isinstance(boundary, str):
+ */
   }
 
-  /* "PETSc/petscdm.pxi":89
+  /* "PETSc/petscdm.pxi":112
  *     if boundary is None:
  *         return DM_BOUNDARY_NONE
  *     if isinstance(boundary, str):             # <<<<<<<<<<<<<<
@@ -38327,17 +39801,17 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscdm.pxi":90
+    /* "PETSc/petscdm.pxi":113
  *         return DM_BOUNDARY_NONE
  *     if isinstance(boundary, str):
  *         if boundary == 'none':             # <<<<<<<<<<<<<<
  *             return DM_BOUNDARY_NONE
  *         elif boundary == 'ghosted':
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_none, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_none, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(22, 113, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":91
+      /* "PETSc/petscdm.pxi":114
  *     if isinstance(boundary, str):
  *         if boundary == 'none':
  *             return DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
@@ -38346,19 +39820,27 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
       __pyx_r = DM_BOUNDARY_NONE;
       goto __pyx_L0;
+
+      /* "PETSc/petscdm.pxi":113
+ *         return DM_BOUNDARY_NONE
+ *     if isinstance(boundary, str):
+ *         if boundary == 'none':             # <<<<<<<<<<<<<<
+ *             return DM_BOUNDARY_NONE
+ *         elif boundary == 'ghosted':
+ */
     }
 
-    /* "PETSc/petscdm.pxi":92
+    /* "PETSc/petscdm.pxi":115
  *         if boundary == 'none':
  *             return DM_BOUNDARY_NONE
  *         elif boundary == 'ghosted':             # <<<<<<<<<<<<<<
  *             return DM_BOUNDARY_GHOSTED
  *         elif boundary == 'mirror':
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_ghosted, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_ghosted, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(22, 115, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":93
+      /* "PETSc/petscdm.pxi":116
  *             return DM_BOUNDARY_NONE
  *         elif boundary == 'ghosted':
  *             return DM_BOUNDARY_GHOSTED             # <<<<<<<<<<<<<<
@@ -38367,19 +39849,27 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
       __pyx_r = DM_BOUNDARY_GHOSTED;
       goto __pyx_L0;
+
+      /* "PETSc/petscdm.pxi":115
+ *         if boundary == 'none':
+ *             return DM_BOUNDARY_NONE
+ *         elif boundary == 'ghosted':             # <<<<<<<<<<<<<<
+ *             return DM_BOUNDARY_GHOSTED
+ *         elif boundary == 'mirror':
+ */
     }
 
-    /* "PETSc/petscdm.pxi":94
+    /* "PETSc/petscdm.pxi":117
  *         elif boundary == 'ghosted':
  *             return DM_BOUNDARY_GHOSTED
  *         elif boundary == 'mirror':             # <<<<<<<<<<<<<<
  *             return DM_BOUNDARY_MIRROR
  *         elif boundary == 'periodic':
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_mirror, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_mirror, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(22, 117, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":95
+      /* "PETSc/petscdm.pxi":118
  *             return DM_BOUNDARY_GHOSTED
  *         elif boundary == 'mirror':
  *             return DM_BOUNDARY_MIRROR             # <<<<<<<<<<<<<<
@@ -38388,19 +39878,27 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
       __pyx_r = DM_BOUNDARY_MIRROR;
       goto __pyx_L0;
+
+      /* "PETSc/petscdm.pxi":117
+ *         elif boundary == 'ghosted':
+ *             return DM_BOUNDARY_GHOSTED
+ *         elif boundary == 'mirror':             # <<<<<<<<<<<<<<
+ *             return DM_BOUNDARY_MIRROR
+ *         elif boundary == 'periodic':
+ */
     }
 
-    /* "PETSc/petscdm.pxi":96
+    /* "PETSc/petscdm.pxi":119
  *         elif boundary == 'mirror':
  *             return DM_BOUNDARY_MIRROR
  *         elif boundary == 'periodic':             # <<<<<<<<<<<<<<
  *             return DM_BOUNDARY_PERIODIC
  *         elif boundary == 'twist':
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_periodic, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_periodic, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(22, 119, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":97
+      /* "PETSc/petscdm.pxi":120
  *             return DM_BOUNDARY_MIRROR
  *         elif boundary == 'periodic':
  *             return DM_BOUNDARY_PERIODIC             # <<<<<<<<<<<<<<
@@ -38409,19 +39907,27 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
       __pyx_r = DM_BOUNDARY_PERIODIC;
       goto __pyx_L0;
+
+      /* "PETSc/petscdm.pxi":119
+ *         elif boundary == 'mirror':
+ *             return DM_BOUNDARY_MIRROR
+ *         elif boundary == 'periodic':             # <<<<<<<<<<<<<<
+ *             return DM_BOUNDARY_PERIODIC
+ *         elif boundary == 'twist':
+ */
     }
 
-    /* "PETSc/petscdm.pxi":98
+    /* "PETSc/petscdm.pxi":121
  *         elif boundary == 'periodic':
  *             return DM_BOUNDARY_PERIODIC
  *         elif boundary == 'twist':             # <<<<<<<<<<<<<<
  *             return DM_BOUNDARY_TWIST
  *         else:
  */
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_twist, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_boundary, __pyx_n_s_twist, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(22, 121, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":99
+      /* "PETSc/petscdm.pxi":122
  *             return DM_BOUNDARY_PERIODIC
  *         elif boundary == 'twist':
  *             return DM_BOUNDARY_TWIST             # <<<<<<<<<<<<<<
@@ -38430,44 +39936,60 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
       __pyx_r = DM_BOUNDARY_TWIST;
       goto __pyx_L0;
+
+      /* "PETSc/petscdm.pxi":121
+ *         elif boundary == 'periodic':
+ *             return DM_BOUNDARY_PERIODIC
+ *         elif boundary == 'twist':             # <<<<<<<<<<<<<<
+ *             return DM_BOUNDARY_TWIST
+ *         else:
+ */
     }
-    /*else*/ {
 
-      /* "PETSc/petscdm.pxi":101
+    /* "PETSc/petscdm.pxi":124
  *             return DM_BOUNDARY_TWIST
  *         else:
  *             raise ValueError("unknown boundary type: %s" % boundary)             # <<<<<<<<<<<<<<
  *     return boundary
  * 
  */
-      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_boundary_type_s, __pyx_v_boundary); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_boundary_type_s, __pyx_v_boundary); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 124, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 124, __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 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 124, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[22]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(22, 124, __pyx_L1_error)
     }
+
+    /* "PETSc/petscdm.pxi":112
+ *     if boundary is None:
+ *         return DM_BOUNDARY_NONE
+ *     if isinstance(boundary, str):             # <<<<<<<<<<<<<<
+ *         if boundary == 'none':
+ *             return DM_BOUNDARY_NONE
+ */
   }
 
-  /* "PETSc/petscdm.pxi":102
+  /* "PETSc/petscdm.pxi":125
  *         else:
  *             raise ValueError("unknown boundary type: %s" % boundary)
  *     return boundary             # <<<<<<<<<<<<<<
  * 
  * cdef inline PetscInt asBoundary(object boundary,
  */
-  __pyx_t_5 = ((DMBoundaryType)PyInt_AsLong(__pyx_v_boundary)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((DMBoundaryType)__Pyx_PyInt_As_DMBoundaryType(__pyx_v_boundary)); if (unlikely(PyErr_Occurred())) __PYX_ERR(22, 125, __pyx_L1_error)
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "PETSc/petscdm.pxi":85
+  /* "PETSc/petscdm.pxi":108
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \             # <<<<<<<<<<<<<<
@@ -38480,13 +40002,13 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("petsc4py.PETSc.asBoundaryType", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((DMBoundaryType)-1);
+  __pyx_r = ((DMBoundaryType)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscdm.pxi":104
+/* "PETSc/petscdm.pxi":127
  *     return boundary
  * 
  * cdef inline PetscInt asBoundary(object boundary,             # <<<<<<<<<<<<<<
@@ -38511,24 +40033,35 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   PyObject *(*__pyx_t_8)(PyObject *);
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("asBoundary", 0);
   __Pyx_INCREF(__pyx_v_boundary);
 
-  /* "PETSc/petscdm.pxi":108
+  /* "PETSc/petscdm.pxi":131
  *                                 PetscDMBoundaryType *_y,
  *                                 PetscDMBoundaryType *_z) except? -1:
  *     cdef PetscInt dim = PETSC_DECIDE             # <<<<<<<<<<<<<<
- *     cdef object x, y, z
+ *     cdef object x=None, y=None, z=None
  *     if (boundary is None or
  */
   __pyx_v_dim = PETSC_DECIDE;
 
-  /* "PETSc/petscdm.pxi":110
+  /* "PETSc/petscdm.pxi":132
+ *                                 PetscDMBoundaryType *_z) except? -1:
  *     cdef PetscInt dim = PETSC_DECIDE
- *     cdef object x, y, z
+ *     cdef object x=None, y=None, z=None             # <<<<<<<<<<<<<<
+ *     if (boundary is None or
+ *         isinstance(boundary, str) or
+ */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_x = Py_None;
+  __Pyx_INCREF(Py_None);
+  __pyx_v_y = Py_None;
+  __Pyx_INCREF(Py_None);
+  __pyx_v_z = Py_None;
+
+  /* "PETSc/petscdm.pxi":133
+ *     cdef PetscInt dim = PETSC_DECIDE
+ *     cdef object x=None, y=None, z=None
  *     if (boundary is None or             # <<<<<<<<<<<<<<
  *         isinstance(boundary, str) or
  *         isinstance(boundary, int)):
@@ -38541,8 +40074,8 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "PETSc/petscdm.pxi":111
- *     cdef object x, y, z
+  /* "PETSc/petscdm.pxi":134
+ *     cdef object x=None, y=None, z=None
  *     if (boundary is None or
  *         isinstance(boundary, str) or             # <<<<<<<<<<<<<<
  *         isinstance(boundary, int)):
@@ -38556,7 +40089,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "PETSc/petscdm.pxi":112
+  /* "PETSc/petscdm.pxi":135
  *     if (boundary is None or
  *         isinstance(boundary, str) or
  *         isinstance(boundary, int)):             # <<<<<<<<<<<<<<
@@ -38567,65 +40100,73 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   __pyx_t_3 = (__pyx_t_2 != 0);
   __pyx_t_1 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
+
+  /* "PETSc/petscdm.pxi":133
+ *     cdef PetscInt dim = PETSC_DECIDE
+ *     cdef object x=None, y=None, z=None
+ *     if (boundary is None or             # <<<<<<<<<<<<<<
+ *         isinstance(boundary, str) or
+ *         isinstance(boundary, int)):
+ */
   if (__pyx_t_1) {
 
-    /* "PETSc/petscdm.pxi":113
+    /* "PETSc/petscdm.pxi":136
  *         isinstance(boundary, str) or
  *         isinstance(boundary, int)):
  *         _x[0] = _y[0] = _z[0] = asBoundaryType(boundary)             # <<<<<<<<<<<<<<
  *     else:
  *         boundary = tuple(boundary)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_boundary); if (unlikely(__pyx_t_4 == ((DMBoundaryType)-1))) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_boundary); if (unlikely(__pyx_t_4 == ((DMBoundaryType)-1L))) __PYX_ERR(22, 136, __pyx_L1_error)
     (__pyx_v__x[0]) = __pyx_t_4;
     (__pyx_v__y[0]) = __pyx_t_4;
     (__pyx_v__z[0]) = __pyx_t_4;
+
+    /* "PETSc/petscdm.pxi":133
+ *     cdef PetscInt dim = PETSC_DECIDE
+ *     cdef object x=None, y=None, z=None
+ *     if (boundary is None or             # <<<<<<<<<<<<<<
+ *         isinstance(boundary, str) or
+ *         isinstance(boundary, int)):
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/petscdm.pxi":115
+  /* "PETSc/petscdm.pxi":138
  *         _x[0] = _y[0] = _z[0] = asBoundaryType(boundary)
  *     else:
  *         boundary = tuple(boundary)             # <<<<<<<<<<<<<<
  *         dim = <PetscInt>len(boundary)
  *         if   dim == 0: pass
  */
-    __pyx_t_5 = PySequence_Tuple(__pyx_v_boundary); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = PySequence_Tuple(__pyx_v_boundary); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 138, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_boundary, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscdm.pxi":116
+    /* "PETSc/petscdm.pxi":139
  *     else:
  *         boundary = tuple(boundary)
  *         dim = <PetscInt>len(boundary)             # <<<<<<<<<<<<<<
  *         if   dim == 0: pass
  *         elif dim == 1: (x,) = boundary
  */
-    __pyx_t_6 = PyObject_Length(__pyx_v_boundary); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Length(__pyx_v_boundary); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(22, 139, __pyx_L1_error)
     __pyx_v_dim = ((PetscInt)__pyx_t_6);
 
-    /* "PETSc/petscdm.pxi":120
- *         elif dim == 1: (x,) = boundary
- *         elif dim == 2: (x, y) = boundary
- *         elif dim == 3: (x, y, z) = boundary             # <<<<<<<<<<<<<<
- *         if dim >= 1: _x[0] = asBoundaryType(x)
- *         if dim >= 2: _y[0] = asBoundaryType(y)
- */
-    switch (__pyx_v_dim) {
-
-      /* "PETSc/petscdm.pxi":117
+    /* "PETSc/petscdm.pxi":140
  *         boundary = tuple(boundary)
  *         dim = <PetscInt>len(boundary)
  *         if   dim == 0: pass             # <<<<<<<<<<<<<<
  *         elif dim == 1: (x,) = boundary
  *         elif dim == 2: (x, y) = boundary
  */
+    switch (__pyx_v_dim) {
       case 0:
       break;
 
-      /* "PETSc/petscdm.pxi":118
+      /* "PETSc/petscdm.pxi":141
  *         dim = <PetscInt>len(boundary)
  *         if   dim == 0: pass
  *         elif dim == 1: (x,) = boundary             # <<<<<<<<<<<<<<
@@ -38643,7 +40184,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         if (unlikely(size != 1)) {
           if (size > 1) __Pyx_RaiseTooManyValuesError(1);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[22]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __PYX_ERR(22, 141, __pyx_L1_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -38653,17 +40194,17 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         }
         __Pyx_INCREF(__pyx_t_5);
         #else
-        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 141, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_7 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_7)) __PYX_ERR(22, 141, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
         index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L7_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_5);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 1) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 1) < 0) __PYX_ERR(22, 141, __pyx_L1_error)
         __pyx_t_8 = NULL;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         goto __pyx_L8_unpacking_done;
@@ -38671,14 +40212,14 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_t_8 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[22]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(22, 141, __pyx_L1_error)
         __pyx_L8_unpacking_done:;
       }
-      __pyx_v_x = __pyx_t_5;
+      __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_5);
       __pyx_t_5 = 0;
       break;
 
-      /* "PETSc/petscdm.pxi":119
+      /* "PETSc/petscdm.pxi":142
  *         if   dim == 0: pass
  *         elif dim == 1: (x,) = boundary
  *         elif dim == 2: (x, y) = boundary             # <<<<<<<<<<<<<<
@@ -38696,7 +40237,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[22]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __PYX_ERR(22, 142, __pyx_L1_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -38709,21 +40250,21 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(__pyx_t_7);
         #else
-        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 142, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(22, 142, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_9)) __PYX_ERR(22, 142, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __pyx_t_8 = Py_TYPE(__pyx_t_9)->tp_iternext;
         index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_9); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_5);
         index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L9_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_9), 2) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_9), 2) < 0) __PYX_ERR(22, 142, __pyx_L1_error)
         __pyx_t_8 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L10_unpacking_done;
@@ -38731,16 +40272,16 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_8 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[22]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(22, 142, __pyx_L1_error)
         __pyx_L10_unpacking_done:;
       }
-      __pyx_v_x = __pyx_t_5;
+      __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_5);
       __pyx_t_5 = 0;
-      __pyx_v_y = __pyx_t_7;
+      __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_7);
       __pyx_t_7 = 0;
       break;
 
-      /* "PETSc/petscdm.pxi":120
+      /* "PETSc/petscdm.pxi":143
  *         elif dim == 1: (x,) = boundary
  *         elif dim == 2: (x, y) = boundary
  *         elif dim == 3: (x, y, z) = boundary             # <<<<<<<<<<<<<<
@@ -38758,7 +40299,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[22]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __PYX_ERR(22, 143, __pyx_L1_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -38774,16 +40315,16 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(__pyx_t_9);
         #else
-        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(22, 143, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 143, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(22, 143, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_10 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_10)) __PYX_ERR(22, 143, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         __pyx_t_8 = Py_TYPE(__pyx_t_10)->tp_iternext;
         index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L11_unpacking_failed;
@@ -38792,7 +40333,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         __Pyx_GOTREF(__pyx_t_5);
         index = 2; __pyx_t_9 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L11_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 3) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 3) < 0) __PYX_ERR(22, 143, __pyx_L1_error)
         __pyx_t_8 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         goto __pyx_L12_unpacking_done;
@@ -38800,20 +40341,20 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_8 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[22]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(22, 143, __pyx_L1_error)
         __pyx_L12_unpacking_done:;
       }
-      __pyx_v_x = __pyx_t_7;
+      __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_7);
       __pyx_t_7 = 0;
-      __pyx_v_y = __pyx_t_5;
+      __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_5);
       __pyx_t_5 = 0;
-      __pyx_v_z = __pyx_t_9;
+      __Pyx_DECREF_SET(__pyx_v_z, __pyx_t_9);
       __pyx_t_9 = 0;
       break;
       default: break;
     }
 
-    /* "PETSc/petscdm.pxi":121
+    /* "PETSc/petscdm.pxi":144
  *         elif dim == 2: (x, y) = boundary
  *         elif dim == 3: (x, y, z) = boundary
  *         if dim >= 1: _x[0] = asBoundaryType(x)             # <<<<<<<<<<<<<<
@@ -38822,14 +40363,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  */
     __pyx_t_1 = ((__pyx_v_dim >= 1) != 0);
     if (__pyx_t_1) {
-      if (unlikely(!__pyx_v_x)) { __Pyx_RaiseUnboundLocalError("x"); {__pyx_filename = __pyx_f[22]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_x); if (unlikely(__pyx_t_4 == ((DMBoundaryType)-1))) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_x); if (unlikely(__pyx_t_4 == ((DMBoundaryType)-1L))) __PYX_ERR(22, 144, __pyx_L1_error)
       (__pyx_v__x[0]) = __pyx_t_4;
-      goto __pyx_L13;
     }
-    __pyx_L13:;
 
-    /* "PETSc/petscdm.pxi":122
+    /* "PETSc/petscdm.pxi":145
  *         elif dim == 3: (x, y, z) = boundary
  *         if dim >= 1: _x[0] = asBoundaryType(x)
  *         if dim >= 2: _y[0] = asBoundaryType(y)             # <<<<<<<<<<<<<<
@@ -38838,14 +40376,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  */
     __pyx_t_1 = ((__pyx_v_dim >= 2) != 0);
     if (__pyx_t_1) {
-      if (unlikely(!__pyx_v_y)) { __Pyx_RaiseUnboundLocalError("y"); {__pyx_filename = __pyx_f[22]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_y); if (unlikely(__pyx_t_4 == ((DMBoundaryType)-1))) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_y); if (unlikely(__pyx_t_4 == ((DMBoundaryType)-1L))) __PYX_ERR(22, 145, __pyx_L1_error)
       (__pyx_v__y[0]) = __pyx_t_4;
-      goto __pyx_L14;
     }
-    __pyx_L14:;
 
-    /* "PETSc/petscdm.pxi":123
+    /* "PETSc/petscdm.pxi":146
  *         if dim >= 1: _x[0] = asBoundaryType(x)
  *         if dim >= 2: _y[0] = asBoundaryType(y)
  *         if dim >= 3: _z[0] = asBoundaryType(z)             # <<<<<<<<<<<<<<
@@ -38854,16 +40389,13 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  */
     __pyx_t_1 = ((__pyx_v_dim >= 3) != 0);
     if (__pyx_t_1) {
-      if (unlikely(!__pyx_v_z)) { __Pyx_RaiseUnboundLocalError("z"); {__pyx_filename = __pyx_f[22]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_z); if (unlikely(__pyx_t_4 == ((DMBoundaryType)-1))) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_z); if (unlikely(__pyx_t_4 == ((DMBoundaryType)-1L))) __PYX_ERR(22, 146, __pyx_L1_error)
       (__pyx_v__z[0]) = __pyx_t_4;
-      goto __pyx_L15;
     }
-    __pyx_L15:;
   }
   __pyx_L3:;
 
-  /* "PETSc/petscdm.pxi":124
+  /* "PETSc/petscdm.pxi":147
  *         if dim >= 2: _y[0] = asBoundaryType(y)
  *         if dim >= 3: _z[0] = asBoundaryType(z)
  *     return dim             # <<<<<<<<<<<<<<
@@ -38873,7 +40405,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   __pyx_r = __pyx_v_dim;
   goto __pyx_L0;
 
-  /* "PETSc/petscdm.pxi":104
+  /* "PETSc/petscdm.pxi":127
  *     return boundary
  * 
  * cdef inline PetscInt asBoundary(object boundary,             # <<<<<<<<<<<<<<
@@ -38888,7 +40420,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   __Pyx_XDECREF(__pyx_t_9);
   __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("petsc4py.PETSc.asBoundary", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __pyx_r = -1L;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_x);
   __Pyx_XDECREF(__pyx_v_y);
@@ -38898,7 +40430,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   return __pyx_r;
 }
 
-/* "PETSc/petscdm.pxi":126
+/* "PETSc/petscdm.pxi":149
  *     return dim
  * 
  * cdef inline object toBoundary(PetscInt dim,             # <<<<<<<<<<<<<<
@@ -38913,27 +40445,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
   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("toBoundary", 0);
 
-  /* "PETSc/petscdm.pxi":133
- *     elif dim == 1: return (x,)
- *     elif dim == 2: return (x, y)
- *     elif dim == 3: return (x, y, z)             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  switch (__pyx_v_dim) {
-
-    /* "PETSc/petscdm.pxi":130
+  /* "PETSc/petscdm.pxi":153
  *                               PetscDMBoundaryType y,
  *                               PetscDMBoundaryType z):
  *     if   dim == 0: return ()             # <<<<<<<<<<<<<<
  *     elif dim == 1: return (x,)
  *     elif dim == 2: return (x, y)
  */
+  switch (__pyx_v_dim) {
     case 0:
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(__pyx_empty_tuple);
@@ -38941,7 +40462,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
     goto __pyx_L0;
     break;
 
-    /* "PETSc/petscdm.pxi":131
+    /* "PETSc/petscdm.pxi":154
  *                               PetscDMBoundaryType z):
  *     if   dim == 0: return ()
  *     elif dim == 1: return (x,)             # <<<<<<<<<<<<<<
@@ -38950,9 +40471,9 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
  */
     case 1:
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong(__pyx_v_x); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 154, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 154, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -38962,7 +40483,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
     goto __pyx_L0;
     break;
 
-    /* "PETSc/petscdm.pxi":132
+    /* "PETSc/petscdm.pxi":155
  *     if   dim == 0: return ()
  *     elif dim == 1: return (x,)
  *     elif dim == 2: return (x, y)             # <<<<<<<<<<<<<<
@@ -38971,11 +40492,11 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
  */
     case 2:
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = PyInt_FromLong(__pyx_v_x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 155, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PyInt_FromLong(__pyx_v_y); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 155, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 155, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
@@ -38988,7 +40509,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
     goto __pyx_L0;
     break;
 
-    /* "PETSc/petscdm.pxi":133
+    /* "PETSc/petscdm.pxi":156
  *     elif dim == 1: return (x,)
  *     elif dim == 2: return (x, y)
  *     elif dim == 3: return (x, y, z)             # <<<<<<<<<<<<<<
@@ -38997,13 +40518,13 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
  */
     case 3:
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = PyInt_FromLong(__pyx_v_x); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyInt_FromLong(__pyx_v_y); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyInt_FromLong(__pyx_v_z); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_z); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
@@ -39021,7 +40542,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
     default: break;
   }
 
-  /* "PETSc/petscdm.pxi":126
+  /* "PETSc/petscdm.pxi":149
  *     return dim
  * 
  * cdef inline object toBoundary(PetscInt dim,             # <<<<<<<<<<<<<<
@@ -39045,7 +40566,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":86
+/* "PETSc/petscdmda.pxi":88
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscDMDAStencilType asStencil(object stencil) \             # <<<<<<<<<<<<<<
@@ -39061,12 +40582,9 @@ static CYTHON_INLINE DMDAStencilType __pyx_f_8petsc4py_5PETSc_asStencil(PyObject
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   DMDAStencilType __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("asStencil", 0);
 
-  /* "PETSc/petscdmda.pxi":88
+  /* "PETSc/petscdmda.pxi":90
  * cdef inline PetscDMDAStencilType asStencil(object stencil) \
  *     except <PetscDMDAStencilType>(-1):
  *     if isinstance(stencil, str):             # <<<<<<<<<<<<<<
@@ -39077,68 +40595,76 @@ static CYTHON_INLINE DMDAStencilType __pyx_f_8petsc4py_5PETSc_asStencil(PyObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdmda.pxi":89
+    /* "PETSc/petscdmda.pxi":91
  *     except <PetscDMDAStencilType>(-1):
  *     if isinstance(stencil, str):
  *         if   stencil == "star": return DMDA_STENCIL_STAR             # <<<<<<<<<<<<<<
  *         elif stencil == "box":  return DMDA_STENCIL_BOX
  *         else: raise ValueError("unknown stencil type: %s" % stencil)
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_stencil, __pyx_n_s_star, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_stencil, __pyx_n_s_star, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(7, 91, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = DMDA_STENCIL_STAR;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscdmda.pxi":90
+    /* "PETSc/petscdmda.pxi":92
  *     if isinstance(stencil, str):
  *         if   stencil == "star": return DMDA_STENCIL_STAR
  *         elif stencil == "box":  return DMDA_STENCIL_BOX             # <<<<<<<<<<<<<<
  *         else: raise ValueError("unknown stencil type: %s" % stencil)
  *     return stencil
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_stencil, __pyx_n_s_box, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_stencil, __pyx_n_s_box, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(7, 92, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = DMDA_STENCIL_BOX;
       goto __pyx_L0;
     }
-    /*else*/ {
 
-      /* "PETSc/petscdmda.pxi":91
+    /* "PETSc/petscdmda.pxi":93
  *         if   stencil == "star": return DMDA_STENCIL_STAR
  *         elif stencil == "box":  return DMDA_STENCIL_BOX
  *         else: raise ValueError("unknown stencil type: %s" % stencil)             # <<<<<<<<<<<<<<
  *     return stencil
  * 
  */
-      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_stencil_type_s, __pyx_v_stencil); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_stencil_type_s, __pyx_v_stencil); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 93, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 93, __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 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 93, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 93, __pyx_L1_error)
     }
+
+    /* "PETSc/petscdmda.pxi":90
+ * cdef inline PetscDMDAStencilType asStencil(object stencil) \
+ *     except <PetscDMDAStencilType>(-1):
+ *     if isinstance(stencil, str):             # <<<<<<<<<<<<<<
+ *         if   stencil == "star": return DMDA_STENCIL_STAR
+ *         elif stencil == "box":  return DMDA_STENCIL_BOX
+ */
   }
 
-  /* "PETSc/petscdmda.pxi":92
+  /* "PETSc/petscdmda.pxi":94
  *         elif stencil == "box":  return DMDA_STENCIL_BOX
  *         else: raise ValueError("unknown stencil type: %s" % stencil)
  *     return stencil             # <<<<<<<<<<<<<<
  * 
  * cdef inline object toStencil(PetscDMDAStencilType stype):
  */
-  __pyx_t_5 = ((DMDAStencilType)PyInt_AsLong(__pyx_v_stencil)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((DMDAStencilType)__Pyx_PyInt_As_DMDAStencilType(__pyx_v_stencil)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 94, __pyx_L1_error)
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":86
+  /* "PETSc/petscdmda.pxi":88
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscDMDAStencilType asStencil(object stencil) \             # <<<<<<<<<<<<<<
@@ -39151,13 +40677,13 @@ static CYTHON_INLINE DMDAStencilType __pyx_f_8petsc4py_5PETSc_asStencil(PyObject
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("petsc4py.PETSc.asStencil", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((DMDAStencilType)-1);
+  __pyx_r = ((DMDAStencilType)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":94
+/* "PETSc/petscdmda.pxi":96
  *     return stencil
  * 
  * cdef inline object toStencil(PetscDMDAStencilType stype):             # <<<<<<<<<<<<<<
@@ -39170,22 +40696,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toStencil(DMDAStencilTyp
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("toStencil", 0);
 
-  /* "PETSc/petscdmda.pxi":96
- * cdef inline object toStencil(PetscDMDAStencilType stype):
- *     if   stype == DMDA_STENCIL_STAR: return "star"
- *     elif stype == DMDA_STENCIL_BOX:  return "box"             # <<<<<<<<<<<<<<
- * 
- * cdef inline PetscDMDAInterpolationType dainterpolationtype(object itype) \
- */
-  switch (__pyx_v_stype) {
-
-    /* "PETSc/petscdmda.pxi":95
+  /* "PETSc/petscdmda.pxi":97
  * 
  * cdef inline object toStencil(PetscDMDAStencilType stype):
  *     if   stype == DMDA_STENCIL_STAR: return "star"             # <<<<<<<<<<<<<<
  *     elif stype == DMDA_STENCIL_BOX:  return "box"
  * 
  */
+  switch (__pyx_v_stype) {
     case DMDA_STENCIL_STAR:
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(__pyx_n_s_star);
@@ -39193,7 +40711,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toStencil(DMDAStencilTyp
     goto __pyx_L0;
     break;
 
-    /* "PETSc/petscdmda.pxi":96
+    /* "PETSc/petscdmda.pxi":98
  * cdef inline object toStencil(PetscDMDAStencilType stype):
  *     if   stype == DMDA_STENCIL_STAR: return "star"
  *     elif stype == DMDA_STENCIL_BOX:  return "box"             # <<<<<<<<<<<<<<
@@ -39209,7 +40727,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toStencil(DMDAStencilTyp
     default: break;
   }
 
-  /* "PETSc/petscdmda.pxi":94
+  /* "PETSc/petscdmda.pxi":96
  *     return stencil
  * 
  * cdef inline object toStencil(PetscDMDAStencilType stype):             # <<<<<<<<<<<<<<
@@ -39225,7 +40743,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toStencil(DMDAStencilTyp
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":98
+/* "PETSc/petscdmda.pxi":100
  *     elif stype == DMDA_STENCIL_BOX:  return "box"
  * 
  * cdef inline PetscDMDAInterpolationType dainterpolationtype(object itype) \             # <<<<<<<<<<<<<<
@@ -39241,12 +40759,9 @@ static CYTHON_INLINE DMDAInterpolationType __pyx_f_8petsc4py_5PETSc_dainterpolat
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   DMDAInterpolationType __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("dainterpolationtype", 0);
 
-  /* "PETSc/petscdmda.pxi":100
+  /* "PETSc/petscdmda.pxi":102
  * cdef inline PetscDMDAInterpolationType dainterpolationtype(object itype) \
  *     except <PetscDMDAInterpolationType>(-1):
  *     if (isinstance(itype, str)):             # <<<<<<<<<<<<<<
@@ -39257,7 +40772,7 @@ static CYTHON_INLINE DMDAInterpolationType __pyx_f_8petsc4py_5PETSc_dainterpolat
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdmda.pxi":101
+    /* "PETSc/petscdmda.pxi":103
  *     except <PetscDMDAInterpolationType>(-1):
  *     if (isinstance(itype, str)):
  *         if itype in ("q0", "Q0"): return DMDA_INTERPOLATION_Q0             # <<<<<<<<<<<<<<
@@ -39266,13 +40781,13 @@ static CYTHON_INLINE DMDAInterpolationType __pyx_f_8petsc4py_5PETSc_dainterpolat
  */
     __Pyx_INCREF(__pyx_v_itype);
     __pyx_t_3 = __pyx_v_itype;
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_q0, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_q0, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(7, 103, __pyx_L1_error)
     if (!__pyx_t_1) {
     } else {
       __pyx_t_2 = __pyx_t_1;
       goto __pyx_L5_bool_binop_done;
     }
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Q0, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Q0, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(7, 103, __pyx_L1_error)
     __pyx_t_2 = __pyx_t_1;
     __pyx_L5_bool_binop_done:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -39282,7 +40797,7 @@ static CYTHON_INLINE DMDAInterpolationType __pyx_f_8petsc4py_5PETSc_dainterpolat
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscdmda.pxi":102
+    /* "PETSc/petscdmda.pxi":104
  *     if (isinstance(itype, str)):
  *         if itype in ("q0", "Q0"): return DMDA_INTERPOLATION_Q0
  *         if itype in ("q1", "Q1"): return DMDA_INTERPOLATION_Q1             # <<<<<<<<<<<<<<
@@ -39291,13 +40806,13 @@ static CYTHON_INLINE DMDAInterpolationType __pyx_f_8petsc4py_5PETSc_dainterpolat
  */
     __Pyx_INCREF(__pyx_v_itype);
     __pyx_t_3 = __pyx_v_itype;
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_q1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_q1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(7, 104, __pyx_L1_error)
     if (!__pyx_t_2) {
     } else {
       __pyx_t_1 = __pyx_t_2;
       goto __pyx_L8_bool_binop_done;
     }
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Q1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Q1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(7, 104, __pyx_L1_error)
     __pyx_t_1 = __pyx_t_2;
     __pyx_L8_bool_binop_done:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -39306,43 +40821,51 @@ static CYTHON_INLINE DMDAInterpolationType __pyx_f_8petsc4py_5PETSc_dainterpolat
       __pyx_r = DMDA_Q1;
       goto __pyx_L0;
     }
-    /*else*/ {
 
-      /* "PETSc/petscdmda.pxi":103
+    /* "PETSc/petscdmda.pxi":105
  *         if itype in ("q0", "Q0"): return DMDA_INTERPOLATION_Q0
  *         if itype in ("q1", "Q1"): return DMDA_INTERPOLATION_Q1
  *         else: raise ValueError("unknown interpolation type: %s" % itype)             # <<<<<<<<<<<<<<
  *     return itype
  * 
  */
-      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_interpolation_type_s, __pyx_v_itype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_interpolation_type_s, __pyx_v_itype); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 105, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 105, __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 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 105, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 105, __pyx_L1_error)
     }
+
+    /* "PETSc/petscdmda.pxi":102
+ * cdef inline PetscDMDAInterpolationType dainterpolationtype(object itype) \
+ *     except <PetscDMDAInterpolationType>(-1):
+ *     if (isinstance(itype, str)):             # <<<<<<<<<<<<<<
+ *         if itype in ("q0", "Q0"): return DMDA_INTERPOLATION_Q0
+ *         if itype in ("q1", "Q1"): return DMDA_INTERPOLATION_Q1
+ */
   }
 
-  /* "PETSc/petscdmda.pxi":104
+  /* "PETSc/petscdmda.pxi":106
  *         if itype in ("q1", "Q1"): return DMDA_INTERPOLATION_Q1
  *         else: raise ValueError("unknown interpolation type: %s" % itype)
  *     return itype             # <<<<<<<<<<<<<<
  * 
  * cdef inline PetscDMDAElementType daelementtype(object etype) \
  */
-  __pyx_t_5 = ((DMDAInterpolationType)PyInt_AsLong(__pyx_v_itype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((DMDAInterpolationType)__Pyx_PyInt_As_DMDAInterpolationType(__pyx_v_itype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 106, __pyx_L1_error)
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":98
+  /* "PETSc/petscdmda.pxi":100
  *     elif stype == DMDA_STENCIL_BOX:  return "box"
  * 
  * cdef inline PetscDMDAInterpolationType dainterpolationtype(object itype) \             # <<<<<<<<<<<<<<
@@ -39355,13 +40878,13 @@ static CYTHON_INLINE DMDAInterpolationType __pyx_f_8petsc4py_5PETSc_dainterpolat
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("petsc4py.PETSc.dainterpolationtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((DMDAInterpolationType)-1);
+  __pyx_r = ((DMDAInterpolationType)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":106
+/* "PETSc/petscdmda.pxi":108
  *     return itype
  * 
  * cdef inline PetscDMDAElementType daelementtype(object etype) \             # <<<<<<<<<<<<<<
@@ -39377,12 +40900,9 @@ static CYTHON_INLINE DMDAElementType __pyx_f_8petsc4py_5PETSc_daelementtype(PyOb
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   DMDAElementType __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("daelementtype", 0);
 
-  /* "PETSc/petscdmda.pxi":108
+  /* "PETSc/petscdmda.pxi":110
  * cdef inline PetscDMDAElementType daelementtype(object etype) \
  *     except <PetscDMDAElementType>(-1):
  *     if (isinstance(etype, str)):             # <<<<<<<<<<<<<<
@@ -39393,7 +40913,7 @@ static CYTHON_INLINE DMDAElementType __pyx_f_8petsc4py_5PETSc_daelementtype(PyOb
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdmda.pxi":109
+    /* "PETSc/petscdmda.pxi":111
  *     except <PetscDMDAElementType>(-1):
  *     if (isinstance(etype, str)):
  *         if etype in ("p1", "P1"): return DMDA_ELEMENT_P1             # <<<<<<<<<<<<<<
@@ -39402,13 +40922,13 @@ static CYTHON_INLINE DMDAElementType __pyx_f_8petsc4py_5PETSc_daelementtype(PyOb
  */
     __Pyx_INCREF(__pyx_v_etype);
     __pyx_t_3 = __pyx_v_etype;
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_p1, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_p1, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(7, 111, __pyx_L1_error)
     if (!__pyx_t_1) {
     } else {
       __pyx_t_2 = __pyx_t_1;
       goto __pyx_L5_bool_binop_done;
     }
-    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_P1, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_P1, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(7, 111, __pyx_L1_error)
     __pyx_t_2 = __pyx_t_1;
     __pyx_L5_bool_binop_done:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -39418,7 +40938,7 @@ static CYTHON_INLINE DMDAElementType __pyx_f_8petsc4py_5PETSc_daelementtype(PyOb
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscdmda.pxi":110
+    /* "PETSc/petscdmda.pxi":112
  *     if (isinstance(etype, str)):
  *         if etype in ("p1", "P1"): return DMDA_ELEMENT_P1
  *         if etype in ("q1", "Q1"): return DMDA_ELEMENT_Q1             # <<<<<<<<<<<<<<
@@ -39427,13 +40947,13 @@ static CYTHON_INLINE DMDAElementType __pyx_f_8petsc4py_5PETSc_daelementtype(PyOb
  */
     __Pyx_INCREF(__pyx_v_etype);
     __pyx_t_3 = __pyx_v_etype;
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_q1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_q1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(7, 112, __pyx_L1_error)
     if (!__pyx_t_2) {
     } else {
       __pyx_t_1 = __pyx_t_2;
       goto __pyx_L8_bool_binop_done;
     }
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Q1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Q1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(7, 112, __pyx_L1_error)
     __pyx_t_1 = __pyx_t_2;
     __pyx_L8_bool_binop_done:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -39442,43 +40962,51 @@ static CYTHON_INLINE DMDAElementType __pyx_f_8petsc4py_5PETSc_daelementtype(PyOb
       __pyx_r = DMDA_ELEMENT_Q1;
       goto __pyx_L0;
     }
-    /*else*/ {
 
-      /* "PETSc/petscdmda.pxi":111
+    /* "PETSc/petscdmda.pxi":113
  *         if etype in ("p1", "P1"): return DMDA_ELEMENT_P1
  *         if etype in ("q1", "Q1"): return DMDA_ELEMENT_Q1
  *         else: raise ValueError("unknown element type: %s" % etype)             # <<<<<<<<<<<<<<
  *     return etype
  * 
  */
-      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_element_type_s, __pyx_v_etype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_element_type_s, __pyx_v_etype); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 113, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 113, __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 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 113, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 113, __pyx_L1_error)
     }
+
+    /* "PETSc/petscdmda.pxi":110
+ * cdef inline PetscDMDAElementType daelementtype(object etype) \
+ *     except <PetscDMDAElementType>(-1):
+ *     if (isinstance(etype, str)):             # <<<<<<<<<<<<<<
+ *         if etype in ("p1", "P1"): return DMDA_ELEMENT_P1
+ *         if etype in ("q1", "Q1"): return DMDA_ELEMENT_Q1
+ */
   }
 
-  /* "PETSc/petscdmda.pxi":112
+  /* "PETSc/petscdmda.pxi":114
  *         if etype in ("q1", "Q1"): return DMDA_ELEMENT_Q1
  *         else: raise ValueError("unknown element type: %s" % etype)
  *     return etype             # <<<<<<<<<<<<<<
  * 
  * cdef inline int DMDAGetDim(PetscDM da, PetscInt *dim) nogil:
  */
-  __pyx_t_5 = ((DMDAElementType)PyInt_AsLong(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((DMDAElementType)__Pyx_PyInt_As_DMDAElementType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 114, __pyx_L1_error)
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":106
+  /* "PETSc/petscdmda.pxi":108
  *     return itype
  * 
  * cdef inline PetscDMDAElementType daelementtype(object etype) \             # <<<<<<<<<<<<<<
@@ -39491,13 +41019,13 @@ static CYTHON_INLINE DMDAElementType __pyx_f_8petsc4py_5PETSc_daelementtype(PyOb
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("petsc4py.PETSc.daelementtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((DMDAElementType)-1);
+  __pyx_r = ((DMDAElementType)-1L);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":114
+/* "PETSc/petscdmda.pxi":116
  *     return etype
  * 
  * cdef inline int DMDAGetDim(PetscDM da, PetscInt *dim) nogil:             # <<<<<<<<<<<<<<
@@ -39508,7 +41036,7 @@ static CYTHON_INLINE DMDAElementType __pyx_f_8petsc4py_5PETSc_daelementtype(PyOb
 static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_DMDAGetDim(DM __pyx_v_da, PetscInt *__pyx_v_dim) {
   int __pyx_r;
 
-  /* "PETSc/petscdmda.pxi":115
+  /* "PETSc/petscdmda.pxi":117
  * 
  * cdef inline int DMDAGetDim(PetscDM da, PetscInt *dim) nogil:
  *      return DMDAGetInfo(da, dim,             # <<<<<<<<<<<<<<
@@ -39518,7 +41046,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_DMDAGetDim(DM __pyx_v_da, Pets
   __pyx_r = DMDAGetInfo(__pyx_v_da, __pyx_v_dim, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":114
+  /* "PETSc/petscdmda.pxi":116
  *     return etype
  * 
  * cdef inline int DMDAGetDim(PetscDM da, PetscInt *dim) nogil:             # <<<<<<<<<<<<<<
@@ -39531,7 +41059,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_DMDAGetDim(DM __pyx_v_da, Pets
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":122
+/* "PETSc/petscdmda.pxi":124
  *                         NULL)
  * 
  * cdef inline PetscInt asDims(dims,             # <<<<<<<<<<<<<<
@@ -39554,63 +41082,66 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
   PetscInt __pyx_t_8;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("asDims", 0);
   __Pyx_INCREF(__pyx_v_dims);
 
-  /* "PETSc/petscdmda.pxi":126
+  /* "PETSc/petscdmda.pxi":128
  *                             PetscInt *_N,
  *                             PetscInt *_P) except? -1:
  *     cdef PetscInt dim = PETSC_DECIDE             # <<<<<<<<<<<<<<
- *     cdef object M, N, P
+ *     cdef object M=None, N=None, P=None
  *     dims = tuple(dims)
  */
   __pyx_v_dim = PETSC_DECIDE;
 
-  /* "PETSc/petscdmda.pxi":128
+  /* "PETSc/petscdmda.pxi":129
+ *                             PetscInt *_P) except? -1:
+ *     cdef PetscInt dim = PETSC_DECIDE
+ *     cdef object M=None, N=None, P=None             # <<<<<<<<<<<<<<
+ *     dims = tuple(dims)
+ *     dim = <PetscInt>len(dims)
+ */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_M = Py_None;
+  __Pyx_INCREF(Py_None);
+  __pyx_v_N = Py_None;
+  __Pyx_INCREF(Py_None);
+  __pyx_v_P = Py_None;
+
+  /* "PETSc/petscdmda.pxi":130
  *     cdef PetscInt dim = PETSC_DECIDE
- *     cdef object M, N, P
+ *     cdef object M=None, N=None, P=None
  *     dims = tuple(dims)             # <<<<<<<<<<<<<<
  *     dim = <PetscInt>len(dims)
  *     if   dim == 0: pass
  */
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_dims); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_dims, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmda.pxi":129
- *     cdef object M, N, P
+  /* "PETSc/petscdmda.pxi":131
+ *     cdef object M=None, N=None, P=None
  *     dims = tuple(dims)
  *     dim = <PetscInt>len(dims)             # <<<<<<<<<<<<<<
  *     if   dim == 0: pass
  *     elif dim == 1: M, = dims
  */
-  __pyx_t_2 = PyObject_Length(__pyx_v_dims); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_Length(__pyx_v_dims); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(7, 131, __pyx_L1_error)
   __pyx_v_dim = ((PetscInt)__pyx_t_2);
 
-  /* "PETSc/petscdmda.pxi":133
- *     elif dim == 1: M, = dims
- *     elif dim == 2: M, N = dims
- *     elif dim == 3: M, N, P = dims             # <<<<<<<<<<<<<<
- *     if dim >= 1: _M[0] = asInt(M)
- *     if dim >= 2: _N[0] = asInt(N)
- */
-  switch (__pyx_v_dim) {
-
-    /* "PETSc/petscdmda.pxi":130
+  /* "PETSc/petscdmda.pxi":132
  *     dims = tuple(dims)
  *     dim = <PetscInt>len(dims)
  *     if   dim == 0: pass             # <<<<<<<<<<<<<<
  *     elif dim == 1: M, = dims
  *     elif dim == 2: M, N = dims
  */
+  switch (__pyx_v_dim) {
     case 0:
     break;
 
-    /* "PETSc/petscdmda.pxi":131
+    /* "PETSc/petscdmda.pxi":133
  *     dim = <PetscInt>len(dims)
  *     if   dim == 0: pass
  *     elif dim == 1: M, = dims             # <<<<<<<<<<<<<<
@@ -39628,7 +41159,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       if (unlikely(size != 1)) {
         if (size > 1) __Pyx_RaiseTooManyValuesError(1);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[7]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(7, 133, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -39638,17 +41169,17 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       }
       __Pyx_INCREF(__pyx_t_1);
       #else
-      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 133, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_3 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 133, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
       index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_1);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 1) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 1) < 0) __PYX_ERR(7, 133, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       goto __pyx_L4_unpacking_done;
@@ -39656,14 +41187,14 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_4 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 133, __pyx_L1_error)
       __pyx_L4_unpacking_done:;
     }
-    __pyx_v_M = __pyx_t_1;
+    __Pyx_DECREF_SET(__pyx_v_M, __pyx_t_1);
     __pyx_t_1 = 0;
     break;
 
-    /* "PETSc/petscdmda.pxi":132
+    /* "PETSc/petscdmda.pxi":134
  *     if   dim == 0: pass
  *     elif dim == 1: M, = dims
  *     elif dim == 2: M, N = dims             # <<<<<<<<<<<<<<
@@ -39681,7 +41212,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[7]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(7, 134, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -39694,21 +41225,21 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       __Pyx_INCREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_t_3);
       #else
-      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 134, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 134, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_5 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 134, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_4 = Py_TYPE(__pyx_t_5)->tp_iternext;
       index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_1);
       index = 1; __pyx_t_3 = __pyx_t_4(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_5), 2) < 0) __PYX_ERR(7, 134, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L6_unpacking_done;
@@ -39716,16 +41247,16 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_4 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 134, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
-    __pyx_v_M = __pyx_t_1;
+    __Pyx_DECREF_SET(__pyx_v_M, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_v_N = __pyx_t_3;
+    __Pyx_DECREF_SET(__pyx_v_N, __pyx_t_3);
     __pyx_t_3 = 0;
     break;
 
-    /* "PETSc/petscdmda.pxi":133
+    /* "PETSc/petscdmda.pxi":135
  *     elif dim == 1: M, = dims
  *     elif dim == 2: M, N = dims
  *     elif dim == 3: M, N, P = dims             # <<<<<<<<<<<<<<
@@ -39743,7 +41274,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[7]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(7, 135, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -39759,16 +41290,16 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       __Pyx_INCREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 135, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 135, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 135, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 135, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_4 = Py_TYPE(__pyx_t_6)->tp_iternext;
       index = 0; __pyx_t_3 = __pyx_t_4(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
@@ -39777,7 +41308,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       __Pyx_GOTREF(__pyx_t_1);
       index = 2; __pyx_t_5 = __pyx_t_4(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L7_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_6), 3) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_6), 3) < 0) __PYX_ERR(7, 135, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L8_unpacking_done;
@@ -39785,20 +41316,20 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_4 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 135, __pyx_L1_error)
       __pyx_L8_unpacking_done:;
     }
-    __pyx_v_M = __pyx_t_3;
+    __Pyx_DECREF_SET(__pyx_v_M, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_v_N = __pyx_t_1;
+    __Pyx_DECREF_SET(__pyx_v_N, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_v_P = __pyx_t_5;
+    __Pyx_DECREF_SET(__pyx_v_P, __pyx_t_5);
     __pyx_t_5 = 0;
     break;
     default: break;
   }
 
-  /* "PETSc/petscdmda.pxi":134
+  /* "PETSc/petscdmda.pxi":136
  *     elif dim == 2: M, N = dims
  *     elif dim == 3: M, N, P = dims
  *     if dim >= 1: _M[0] = asInt(M)             # <<<<<<<<<<<<<<
@@ -39807,14 +41338,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  */
   __pyx_t_7 = ((__pyx_v_dim >= 1) != 0);
   if (__pyx_t_7) {
-    if (unlikely(!__pyx_v_M)) { __Pyx_RaiseUnboundLocalError("M"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_M); if (unlikely(__pyx_t_8 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_M); if (unlikely(__pyx_t_8 == -1L && PyErr_Occurred())) __PYX_ERR(7, 136, __pyx_L1_error)
     (__pyx_v__M[0]) = __pyx_t_8;
-    goto __pyx_L9;
   }
-  __pyx_L9:;
 
-  /* "PETSc/petscdmda.pxi":135
+  /* "PETSc/petscdmda.pxi":137
  *     elif dim == 3: M, N, P = dims
  *     if dim >= 1: _M[0] = asInt(M)
  *     if dim >= 2: _N[0] = asInt(N)             # <<<<<<<<<<<<<<
@@ -39823,14 +41351,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  */
   __pyx_t_7 = ((__pyx_v_dim >= 2) != 0);
   if (__pyx_t_7) {
-    if (unlikely(!__pyx_v_N)) { __Pyx_RaiseUnboundLocalError("N"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_N); if (unlikely(__pyx_t_8 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_N); if (unlikely(__pyx_t_8 == -1L && PyErr_Occurred())) __PYX_ERR(7, 137, __pyx_L1_error)
     (__pyx_v__N[0]) = __pyx_t_8;
-    goto __pyx_L10;
   }
-  __pyx_L10:;
 
-  /* "PETSc/petscdmda.pxi":136
+  /* "PETSc/petscdmda.pxi":138
  *     if dim >= 1: _M[0] = asInt(M)
  *     if dim >= 2: _N[0] = asInt(N)
  *     if dim >= 3: _P[0] = asInt(P)             # <<<<<<<<<<<<<<
@@ -39839,14 +41364,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  */
   __pyx_t_7 = ((__pyx_v_dim >= 3) != 0);
   if (__pyx_t_7) {
-    if (unlikely(!__pyx_v_P)) { __Pyx_RaiseUnboundLocalError("P"); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_P); if (unlikely(__pyx_t_8 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_P); if (unlikely(__pyx_t_8 == -1L && PyErr_Occurred())) __PYX_ERR(7, 138, __pyx_L1_error)
     (__pyx_v__P[0]) = __pyx_t_8;
-    goto __pyx_L11;
   }
-  __pyx_L11:;
 
-  /* "PETSc/petscdmda.pxi":137
+  /* "PETSc/petscdmda.pxi":139
  *     if dim >= 2: _N[0] = asInt(N)
  *     if dim >= 3: _P[0] = asInt(P)
  *     return dim             # <<<<<<<<<<<<<<
@@ -39856,7 +41378,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
   __pyx_r = __pyx_v_dim;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":122
+  /* "PETSc/petscdmda.pxi":124
  *                         NULL)
  * 
  * cdef inline PetscInt asDims(dims,             # <<<<<<<<<<<<<<
@@ -39871,7 +41393,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("petsc4py.PETSc.asDims", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __pyx_r = -1L;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_M);
   __Pyx_XDECREF(__pyx_v_N);
@@ -39881,7 +41403,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":139
+/* "PETSc/petscdmda.pxi":141
  *     return dim
  * 
  * cdef inline tuple toDims(PetscInt dim,             # <<<<<<<<<<<<<<
@@ -39896,27 +41418,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
   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("toDims", 0);
 
-  /* "PETSc/petscdmda.pxi":146
- *     elif dim == 1: return (toInt(M),)
- *     elif dim == 2: return (toInt(M), toInt(N))
- *     elif dim == 3: return (toInt(M), toInt(N), toInt(P))             # <<<<<<<<<<<<<<
- * 
- * cdef inline tuple asOwnershipRanges(object ownership_ranges,
- */
-  switch (__pyx_v_dim) {
-
-    /* "PETSc/petscdmda.pxi":143
+  /* "PETSc/petscdmda.pxi":145
  *                          PetscInt N,
  *                          PetscInt P):
  *     if   dim == 0: return ()             # <<<<<<<<<<<<<<
  *     elif dim == 1: return (toInt(M),)
  *     elif dim == 2: return (toInt(M), toInt(N))
  */
+  switch (__pyx_v_dim) {
     case 0:
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(__pyx_empty_tuple);
@@ -39924,7 +41435,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
     goto __pyx_L0;
     break;
 
-    /* "PETSc/petscdmda.pxi":144
+    /* "PETSc/petscdmda.pxi":146
  *                          PetscInt P):
  *     if   dim == 0: return ()
  *     elif dim == 1: return (toInt(M),)             # <<<<<<<<<<<<<<
@@ -39933,9 +41444,9 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
  */
     case 1:
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 146, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 146, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -39945,7 +41456,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
     goto __pyx_L0;
     break;
 
-    /* "PETSc/petscdmda.pxi":145
+    /* "PETSc/petscdmda.pxi":147
  *     if   dim == 0: return ()
  *     elif dim == 1: return (toInt(M),)
  *     elif dim == 2: return (toInt(M), toInt(N))             # <<<<<<<<<<<<<<
@@ -39954,11 +41465,11 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
  */
     case 2:
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 147, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 147, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 147, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
@@ -39971,7 +41482,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
     goto __pyx_L0;
     break;
 
-    /* "PETSc/petscdmda.pxi":146
+    /* "PETSc/petscdmda.pxi":148
  *     elif dim == 1: return (toInt(M),)
  *     elif dim == 2: return (toInt(M), toInt(N))
  *     elif dim == 3: return (toInt(M), toInt(N), toInt(P))             # <<<<<<<<<<<<<<
@@ -39980,13 +41491,13 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
  */
     case 3:
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 148, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 148, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_P); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_P); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 148, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 148, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
@@ -40004,7 +41515,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
     default: break;
   }
 
-  /* "PETSc/petscdmda.pxi":139
+  /* "PETSc/petscdmda.pxi":141
  *     return dim
  * 
  * cdef inline tuple toDims(PetscInt dim,             # <<<<<<<<<<<<<<
@@ -40028,7 +41539,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":148
+/* "PETSc/petscdmda.pxi":150
  *     elif dim == 3: return (toInt(M), toInt(N), toInt(P))
  * 
  * cdef inline tuple asOwnershipRanges(object ownership_ranges,             # <<<<<<<<<<<<<<
@@ -40037,11 +41548,11 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
  */
 
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObject *__pyx_v_ownership_ranges, PetscInt __pyx_v_dim, PetscInt *__pyx_v_m, PetscInt *__pyx_v_n, PetscInt *__pyx_v_p, PetscInt **__pyx_v__x, PetscInt **__pyx_v__y, PetscInt **__pyx_v__z) {
+  PyObject *__pyx_v_ranges = 0;
   PetscInt __pyx_v_rdim;
   PetscInt __pyx_v_nlx;
   PetscInt __pyx_v_nly;
   PetscInt __pyx_v_nlz;
-  PyObject *__pyx_v_ranges = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -40049,36 +41560,44 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
   int __pyx_t_3;
   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("asOwnershipRanges", 0);
 
-  /* "PETSc/petscdmda.pxi":155
+  /* "PETSc/petscdmda.pxi":156
+ *                                     PetscInt **_y,
  *                                     PetscInt **_z):
- *     cdef PetscInt rdim, nlx, nly, nlz
- *     ranges = list(ownership_ranges)             # <<<<<<<<<<<<<<
- *     rdim = <PetscInt>len(ranges)
- *     if dim == PETSC_DECIDE: dim = rdim
+ *     cdef object ranges = list(ownership_ranges)             # <<<<<<<<<<<<<<
+ *     cdef PetscInt rdim = <PetscInt>len(ranges)
+ *     cdef PetscInt nlx=0, nly=0, nlz=0
  */
-  __pyx_t_1 = PySequence_List(__pyx_v_ownership_ranges); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_List(__pyx_v_ownership_ranges); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_ranges = ((PyObject*)__pyx_t_1);
+  __pyx_v_ranges = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmda.pxi":156
- *     cdef PetscInt rdim, nlx, nly, nlz
- *     ranges = list(ownership_ranges)
- *     rdim = <PetscInt>len(ranges)             # <<<<<<<<<<<<<<
+  /* "PETSc/petscdmda.pxi":157
+ *                                     PetscInt **_z):
+ *     cdef object ranges = list(ownership_ranges)
+ *     cdef PetscInt rdim = <PetscInt>len(ranges)             # <<<<<<<<<<<<<<
+ *     cdef PetscInt nlx=0, nly=0, nlz=0
  *     if dim == PETSC_DECIDE: dim = rdim
- *     elif dim != rdim: raise ValueError(
  */
-  __pyx_t_2 = PyList_GET_SIZE(__pyx_v_ranges); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_Length(__pyx_v_ranges); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(7, 157, __pyx_L1_error)
   __pyx_v_rdim = ((PetscInt)__pyx_t_2);
 
-  /* "PETSc/petscdmda.pxi":157
- *     ranges = list(ownership_ranges)
- *     rdim = <PetscInt>len(ranges)
+  /* "PETSc/petscdmda.pxi":158
+ *     cdef object ranges = list(ownership_ranges)
+ *     cdef PetscInt rdim = <PetscInt>len(ranges)
+ *     cdef PetscInt nlx=0, nly=0, nlz=0             # <<<<<<<<<<<<<<
+ *     if dim == PETSC_DECIDE: dim = rdim
+ *     elif dim != rdim: raise ValueError(
+ */
+  __pyx_v_nlx = 0;
+  __pyx_v_nly = 0;
+  __pyx_v_nlz = 0;
+
+  /* "PETSc/petscdmda.pxi":159
+ *     cdef PetscInt rdim = <PetscInt>len(ranges)
+ *     cdef PetscInt nlx=0, nly=0, nlz=0
  *     if dim == PETSC_DECIDE: dim = rdim             # <<<<<<<<<<<<<<
  *     elif dim != rdim: raise ValueError(
  *         "number of dimensions %d and number ownership ranges %d" %
@@ -40089,8 +41608,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscdmda.pxi":158
- *     rdim = <PetscInt>len(ranges)
+  /* "PETSc/petscdmda.pxi":160
+ *     cdef PetscInt nlx=0, nly=0, nlz=0
  *     if dim == PETSC_DECIDE: dim = rdim
  *     elif dim != rdim: raise ValueError(             # <<<<<<<<<<<<<<
  *         "number of dimensions %d and number ownership ranges %d" %
@@ -40099,18 +41618,18 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
   __pyx_t_3 = ((__pyx_v_dim != __pyx_v_rdim) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscdmda.pxi":160
+    /* "PETSc/petscdmda.pxi":162
  *     elif dim != rdim: raise ValueError(
  *         "number of dimensions %d and number ownership ranges %d" %
  *         (toInt(dim), toInt(rdim)))             # <<<<<<<<<<<<<<
  *     if dim >= 1:
  *         ranges[0] = iarray_i(ranges[0], &nlx, _x)
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_dim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 162, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_rdim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_rdim); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 162, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 162, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -40119,39 +41638,39 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
     __pyx_t_1 = 0;
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscdmda.pxi":159
+    /* "PETSc/petscdmda.pxi":161
  *     if dim == PETSC_DECIDE: dim = rdim
  *     elif dim != rdim: raise ValueError(
  *         "number of dimensions %d and number ownership ranges %d" %             # <<<<<<<<<<<<<<
  *         (toInt(dim), toInt(rdim)))
  *     if dim >= 1:
  */
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_number_of_dimensions_d_and_numbe, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_number_of_dimensions_d_and_numbe, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 161, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscdmda.pxi":158
- *     rdim = <PetscInt>len(ranges)
+    /* "PETSc/petscdmda.pxi":160
+ *     cdef PetscInt nlx=0, nly=0, nlz=0
  *     if dim == PETSC_DECIDE: dim = rdim
  *     elif dim != rdim: raise ValueError(             # <<<<<<<<<<<<<<
  *         "number of dimensions %d and number ownership ranges %d" %
  *         (toInt(dim), toInt(rdim)))
  */
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 160, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 160, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[7]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(7, 160, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscdmda.pxi":161
+  /* "PETSc/petscdmda.pxi":163
  *         "number of dimensions %d and number ownership ranges %d" %
  *         (toInt(dim), toInt(rdim)))
  *     if dim >= 1:             # <<<<<<<<<<<<<<
@@ -40161,22 +41680,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
   __pyx_t_3 = ((__pyx_v_dim >= 1) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscdmda.pxi":162
+    /* "PETSc/petscdmda.pxi":164
  *         (toInt(dim), toInt(rdim)))
  *     if dim >= 1:
  *         ranges[0] = iarray_i(ranges[0], &nlx, _x)             # <<<<<<<<<<<<<<
  *         if m[0] == PETSC_DECIDE: m[0] = nlx
  *         elif m[0] != nlx: raise ValueError(
  */
-    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_ranges, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_ranges, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 164, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_t_4, (&__pyx_v_nlx), __pyx_v__x)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_t_4, (&__pyx_v_nlx), __pyx_v__x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 164, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(__Pyx_SetItemInt(__pyx_v_ranges, 0, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_ranges, 0, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1) < 0)) __PYX_ERR(7, 164, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscdmda.pxi":163
+    /* "PETSc/petscdmda.pxi":165
  *     if dim >= 1:
  *         ranges[0] = iarray_i(ranges[0], &nlx, _x)
  *         if m[0] == PETSC_DECIDE: m[0] = nlx             # <<<<<<<<<<<<<<
@@ -40189,7 +41708,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
       goto __pyx_L5;
     }
 
-    /* "PETSc/petscdmda.pxi":164
+    /* "PETSc/petscdmda.pxi":166
  *         ranges[0] = iarray_i(ranges[0], &nlx, _x)
  *         if m[0] == PETSC_DECIDE: m[0] = nlx
  *         elif m[0] != nlx: raise ValueError(             # <<<<<<<<<<<<<<
@@ -40199,18 +41718,18 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
     __pyx_t_3 = (((__pyx_v_m[0]) != __pyx_v_nlx) != 0);
     if (__pyx_t_3) {
 
-      /* "PETSc/petscdmda.pxi":166
+      /* "PETSc/petscdmda.pxi":168
  *         elif m[0] != nlx: raise ValueError(
  *             "ownership range size %d and number or processors %d" %
  *             (toInt(nlx), toInt(m[0])))             # <<<<<<<<<<<<<<
  *     if dim >= 2:
  *         ranges[1] = iarray_i(ranges[1], &nly, _y)
  */
-      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nlx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nlx); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 168, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 168, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 168, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_5);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
@@ -40219,42 +41738,48 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
       __pyx_t_5 = 0;
       __pyx_t_4 = 0;
 
-      /* "PETSc/petscdmda.pxi":165
+      /* "PETSc/petscdmda.pxi":167
  *         if m[0] == PETSC_DECIDE: m[0] = nlx
  *         elif m[0] != nlx: raise ValueError(
  *             "ownership range size %d and number or processors %d" %             # <<<<<<<<<<<<<<
  *             (toInt(nlx), toInt(m[0])))
  *     if dim >= 2:
  */
-      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_ownership_range_size_d_and_numbe, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_ownership_range_size_d_and_numbe, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 167, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "PETSc/petscdmda.pxi":164
+      /* "PETSc/petscdmda.pxi":166
  *         ranges[0] = iarray_i(ranges[0], &nlx, _x)
  *         if m[0] == PETSC_DECIDE: m[0] = nlx
  *         elif m[0] != nlx: raise ValueError(             # <<<<<<<<<<<<<<
  *             "ownership range size %d and number or processors %d" %
  *             (toInt(nlx), toInt(m[0])))
  */
-      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 166, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
       __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 166, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 166, __pyx_L1_error)
     }
     __pyx_L5:;
-    goto __pyx_L4;
+
+    /* "PETSc/petscdmda.pxi":163
+ *         "number of dimensions %d and number ownership ranges %d" %
+ *         (toInt(dim), toInt(rdim)))
+ *     if dim >= 1:             # <<<<<<<<<<<<<<
+ *         ranges[0] = iarray_i(ranges[0], &nlx, _x)
+ *         if m[0] == PETSC_DECIDE: m[0] = nlx
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscdmda.pxi":167
+  /* "PETSc/petscdmda.pxi":169
  *             "ownership range size %d and number or processors %d" %
  *             (toInt(nlx), toInt(m[0])))
  *     if dim >= 2:             # <<<<<<<<<<<<<<
@@ -40264,22 +41789,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
   __pyx_t_3 = ((__pyx_v_dim >= 2) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscdmda.pxi":168
+    /* "PETSc/petscdmda.pxi":170
  *             (toInt(nlx), toInt(m[0])))
  *     if dim >= 2:
  *         ranges[1] = iarray_i(ranges[1], &nly, _y)             # <<<<<<<<<<<<<<
  *         if n[0] == PETSC_DECIDE: n[0] = nly
  *         elif n[0] != nly: raise ValueError(
  */
-    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_ranges, 1, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_ranges, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 170, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_t_4, (&__pyx_v_nly), __pyx_v__y)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_t_4, (&__pyx_v_nly), __pyx_v__y)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 170, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(__Pyx_SetItemInt(__pyx_v_ranges, 1, __pyx_t_1, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_ranges, 1, __pyx_t_1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1) < 0)) __PYX_ERR(7, 170, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/petscdmda.pxi":169
+    /* "PETSc/petscdmda.pxi":171
  *     if dim >= 2:
  *         ranges[1] = iarray_i(ranges[1], &nly, _y)
  *         if n[0] == PETSC_DECIDE: n[0] = nly             # <<<<<<<<<<<<<<
@@ -40292,7 +41817,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
       goto __pyx_L7;
     }
 
-    /* "PETSc/petscdmda.pxi":170
+    /* "PETSc/petscdmda.pxi":172
  *         ranges[1] = iarray_i(ranges[1], &nly, _y)
  *         if n[0] == PETSC_DECIDE: n[0] = nly
  *         elif n[0] != nly: raise ValueError(             # <<<<<<<<<<<<<<
@@ -40302,18 +41827,18 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
     __pyx_t_3 = (((__pyx_v_n[0]) != __pyx_v_nly) != 0);
     if (__pyx_t_3) {
 
-      /* "PETSc/petscdmda.pxi":172
+      /* "PETSc/petscdmda.pxi":174
  *         elif n[0] != nly: raise ValueError(
  *             "ownership range size %d and number or processors %d" %
  *             (toInt(nly), toInt(n[0])))             # <<<<<<<<<<<<<<
  *     if dim >= 3:
  *         ranges[2] = iarray_i(ranges[2], &nlz, _z)
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nly); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nly); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 174, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_n[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_n[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 174, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 174, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -40322,42 +41847,48 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
       __pyx_t_1 = 0;
       __pyx_t_4 = 0;
 
-      /* "PETSc/petscdmda.pxi":171
+      /* "PETSc/petscdmda.pxi":173
  *         if n[0] == PETSC_DECIDE: n[0] = nly
  *         elif n[0] != nly: raise ValueError(
  *             "ownership range size %d and number or processors %d" %             # <<<<<<<<<<<<<<
  *             (toInt(nly), toInt(n[0])))
  *     if dim >= 3:
  */
-      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_ownership_range_size_d_and_numbe, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_ownership_range_size_d_and_numbe, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 173, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "PETSc/petscdmda.pxi":170
+      /* "PETSc/petscdmda.pxi":172
  *         ranges[1] = iarray_i(ranges[1], &nly, _y)
  *         if n[0] == PETSC_DECIDE: n[0] = nly
  *         elif n[0] != nly: raise ValueError(             # <<<<<<<<<<<<<<
  *             "ownership range size %d and number or processors %d" %
  *             (toInt(nly), toInt(n[0])))
  */
-      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 172, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
       __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 172, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 172, __pyx_L1_error)
     }
     __pyx_L7:;
-    goto __pyx_L6;
+
+    /* "PETSc/petscdmda.pxi":169
+ *             "ownership range size %d and number or processors %d" %
+ *             (toInt(nlx), toInt(m[0])))
+ *     if dim >= 2:             # <<<<<<<<<<<<<<
+ *         ranges[1] = iarray_i(ranges[1], &nly, _y)
+ *         if n[0] == PETSC_DECIDE: n[0] = nly
+ */
   }
-  __pyx_L6:;
 
-  /* "PETSc/petscdmda.pxi":173
+  /* "PETSc/petscdmda.pxi":175
  *             "ownership range size %d and number or processors %d" %
  *             (toInt(nly), toInt(n[0])))
  *     if dim >= 3:             # <<<<<<<<<<<<<<
@@ -40367,22 +41898,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
   __pyx_t_3 = ((__pyx_v_dim >= 3) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscdmda.pxi":174
+    /* "PETSc/petscdmda.pxi":176
  *             (toInt(nly), toInt(n[0])))
  *     if dim >= 3:
  *         ranges[2] = iarray_i(ranges[2], &nlz, _z)             # <<<<<<<<<<<<<<
  *         if p[0] == PETSC_DECIDE: p[0] = nlz
  *         elif p[0] != nlz: raise ValueError(
  */
-    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_ranges, 2, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_ranges, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 176, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_t_4, (&__pyx_v_nlz), __pyx_v__z)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_t_4, (&__pyx_v_nlz), __pyx_v__z)); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 176, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(__Pyx_SetItemInt(__pyx_v_ranges, 2, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_ranges, 2, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1) < 0)) __PYX_ERR(7, 176, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscdmda.pxi":175
+    /* "PETSc/petscdmda.pxi":177
  *     if dim >= 3:
  *         ranges[2] = iarray_i(ranges[2], &nlz, _z)
  *         if p[0] == PETSC_DECIDE: p[0] = nlz             # <<<<<<<<<<<<<<
@@ -40395,7 +41926,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
       goto __pyx_L9;
     }
 
-    /* "PETSc/petscdmda.pxi":176
+    /* "PETSc/petscdmda.pxi":178
  *         ranges[2] = iarray_i(ranges[2], &nlz, _z)
  *         if p[0] == PETSC_DECIDE: p[0] = nlz
  *         elif p[0] != nlz: raise ValueError(             # <<<<<<<<<<<<<<
@@ -40405,18 +41936,18 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
     __pyx_t_3 = (((__pyx_v_p[0]) != __pyx_v_nlz) != 0);
     if (__pyx_t_3) {
 
-      /* "PETSc/petscdmda.pxi":178
+      /* "PETSc/petscdmda.pxi":180
  *         elif p[0] != nlz: raise ValueError(
  *             "ownership range size %d and number or processors %d" %
  *              (toInt(nlz), toInt(p[0])))             # <<<<<<<<<<<<<<
  *     return ranges
  * 
  */
-      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nlz); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nlz); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 180, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_p[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_p[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 180, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 180, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_5);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
@@ -40425,42 +41956,48 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
       __pyx_t_5 = 0;
       __pyx_t_4 = 0;
 
-      /* "PETSc/petscdmda.pxi":177
+      /* "PETSc/petscdmda.pxi":179
  *         if p[0] == PETSC_DECIDE: p[0] = nlz
  *         elif p[0] != nlz: raise ValueError(
  *             "ownership range size %d and number or processors %d" %             # <<<<<<<<<<<<<<
  *              (toInt(nlz), toInt(p[0])))
  *     return ranges
  */
-      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_ownership_range_size_d_and_numbe, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_ownership_range_size_d_and_numbe, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 179, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "PETSc/petscdmda.pxi":176
+      /* "PETSc/petscdmda.pxi":178
  *         ranges[2] = iarray_i(ranges[2], &nlz, _z)
  *         if p[0] == PETSC_DECIDE: p[0] = nlz
  *         elif p[0] != nlz: raise ValueError(             # <<<<<<<<<<<<<<
  *             "ownership range size %d and number or processors %d" %
  *              (toInt(nlz), toInt(p[0])))
  */
-      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 178, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
       __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 178, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[7]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(7, 178, __pyx_L1_error)
     }
     __pyx_L9:;
-    goto __pyx_L8;
+
+    /* "PETSc/petscdmda.pxi":175
+ *             "ownership range size %d and number or processors %d" %
+ *             (toInt(nly), toInt(n[0])))
+ *     if dim >= 3:             # <<<<<<<<<<<<<<
+ *         ranges[2] = iarray_i(ranges[2], &nlz, _z)
+ *         if p[0] == PETSC_DECIDE: p[0] = nlz
+ */
   }
-  __pyx_L8:;
 
-  /* "PETSc/petscdmda.pxi":179
+  /* "PETSc/petscdmda.pxi":181
  *             "ownership range size %d and number or processors %d" %
  *              (toInt(nlz), toInt(p[0])))
  *     return ranges             # <<<<<<<<<<<<<<
@@ -40468,12 +42005,12 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
  * cdef inline tuple toOwnershipRanges(PetscInt dim,
  */
   __Pyx_XDECREF(__pyx_r);
-  if (!(likely(PyTuple_CheckExact(__pyx_v_ranges))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_ranges)->tp_name), 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyTuple_CheckExact(__pyx_v_ranges))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_ranges)->tp_name), 0))) __PYX_ERR(7, 181, __pyx_L1_error)
   __Pyx_INCREF(__pyx_v_ranges);
   __pyx_r = ((PyObject*)__pyx_v_ranges);
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":148
+  /* "PETSc/petscdmda.pxi":150
  *     elif dim == 3: return (toInt(M), toInt(N), toInt(P))
  * 
  * cdef inline tuple asOwnershipRanges(object ownership_ranges,             # <<<<<<<<<<<<<<
@@ -40495,7 +42032,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":181
+/* "PETSc/petscdmda.pxi":183
  *     return ranges
  * 
  * cdef inline tuple toOwnershipRanges(PetscInt dim,             # <<<<<<<<<<<<<<
@@ -40503,7 +42040,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
  *                                     const_PetscInt *lx,
  */
 
-static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscInt __pyx_v_dim, PetscInt __pyx_v_m, PetscInt __pyx_v_n, PetscInt __pyx_v_p, const PetscInt *__pyx_v_lx, const PetscInt *__pyx_v_ly, CYTHON_UNUSED const PetscInt *__pyx_v_lz) {
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscInt __pyx_v_dim, PetscInt __pyx_v_m, PetscInt __pyx_v_n, PetscInt __pyx_v_p, const PetscInt *__pyx_v_lx, const PetscInt *__pyx_v_ly, const PetscInt *__pyx_v_lz) {
   PyObject *__pyx_v_ranges = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -40511,21 +42048,18 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscI
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("toOwnershipRanges", 0);
 
-  /* "PETSc/petscdmda.pxi":187
+  /* "PETSc/petscdmda.pxi":189
  *                                     const_PetscInt *lz):
  *     # Returns tuple of arrays containing ownership ranges as Python arrays
  *     ranges = [array_i(m, lx)]             # <<<<<<<<<<<<<<
  *     if dim > 1:
  *         ranges.append(array_i(n, ly))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_m, __pyx_v_lx)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_m, __pyx_v_lx)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -40533,7 +42067,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscI
   __pyx_v_ranges = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmda.pxi":188
+  /* "PETSc/petscdmda.pxi":190
  *     # Returns tuple of arrays containing ownership ranges as Python arrays
  *     ranges = [array_i(m, lx)]
  *     if dim > 1:             # <<<<<<<<<<<<<<
@@ -40543,61 +42077,73 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscI
   __pyx_t_3 = ((__pyx_v_dim > 1) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscdmda.pxi":189
+    /* "PETSc/petscdmda.pxi":191
  *     ranges = [array_i(m, lx)]
  *     if dim > 1:
  *         ranges.append(array_i(n, ly))             # <<<<<<<<<<<<<<
  *     if dim > 2:
- *         ranges.append(array_i(p, ly))
+ *         ranges.append(array_i(p, lz))
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_n, __pyx_v_ly)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_n, __pyx_v_ly)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_ranges, __pyx_t_2); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_ranges, __pyx_t_2); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(7, 191, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/petscdmda.pxi":190
+ *     # Returns tuple of arrays containing ownership ranges as Python arrays
+ *     ranges = [array_i(m, lx)]
+ *     if dim > 1:             # <<<<<<<<<<<<<<
+ *         ranges.append(array_i(n, ly))
+ *     if dim > 2:
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscdmda.pxi":190
+  /* "PETSc/petscdmda.pxi":192
  *     if dim > 1:
  *         ranges.append(array_i(n, ly))
  *     if dim > 2:             # <<<<<<<<<<<<<<
- *         ranges.append(array_i(p, ly))
+ *         ranges.append(array_i(p, lz))
  *     return tuple(ranges)
  */
   __pyx_t_3 = ((__pyx_v_dim > 2) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscdmda.pxi":191
+    /* "PETSc/petscdmda.pxi":193
  *         ranges.append(array_i(n, ly))
  *     if dim > 2:
- *         ranges.append(array_i(p, ly))             # <<<<<<<<<<<<<<
+ *         ranges.append(array_i(p, lz))             # <<<<<<<<<<<<<<
  *     return tuple(ranges)
  * 
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_p, __pyx_v_ly)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_p, __pyx_v_lz)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_ranges, __pyx_t_2); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_ranges, __pyx_t_2); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(7, 193, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L4;
+
+    /* "PETSc/petscdmda.pxi":192
+ *     if dim > 1:
+ *         ranges.append(array_i(n, ly))
+ *     if dim > 2:             # <<<<<<<<<<<<<<
+ *         ranges.append(array_i(p, lz))
+ *     return tuple(ranges)
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscdmda.pxi":192
+  /* "PETSc/petscdmda.pxi":194
  *     if dim > 2:
- *         ranges.append(array_i(p, ly))
+ *         ranges.append(array_i(p, lz))
  *     return tuple(ranges)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyList_AsTuple(__pyx_v_ranges); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_AsTuple(__pyx_v_ranges); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 194, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":181
+  /* "PETSc/petscdmda.pxi":183
  *     return ranges
  * 
  * cdef inline tuple toOwnershipRanges(PetscInt dim,             # <<<<<<<<<<<<<<
@@ -40618,7 +42164,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscI
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":203
+/* "PETSc/petscdmda.pxi":205
  *     cdef readonly ndarray array
  * 
  *     def __cinit__(self, DMDA da not None, Vec vec not None, bint DOF=False):             # <<<<<<<<<<<<<<
@@ -40632,9 +42178,6 @@ static int __pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(PyObject *__py
   struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_da = 0;
   struct PyPetscVecObject *__pyx_v_vec = 0;
   int __pyx_v_DOF;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
@@ -40659,7 +42202,7 @@ static int __pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(7, 205, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -40668,7 +42211,7 @@ static int __pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(7, 205, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -40682,21 +42225,21 @@ static int __pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(PyObject *__py
     __pyx_v_da = ((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)values[0]);
     __pyx_v_vec = ((struct PyPetscVecObject *)values[1]);
     if (values[2]) {
-      __pyx_v_DOF = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_DOF == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_DOF = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_DOF == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 205, __pyx_L3_error)
     } else {
       __pyx_v_DOF = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 205, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._DMDA_Vec_array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_da), __pyx_ptype_8petsc4py_5PETSc_DMDA, 0, "da", 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_da), __pyx_ptype_8petsc4py_5PETSc_DMDA, 0, "da", 0))) __PYX_ERR(7, 205, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(7, 205, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(((struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self), __pyx_v_da, __pyx_v_vec, __pyx_v_DOF);
 
   /* function exit code */
@@ -40749,12 +42292,9 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   int __pyx_t_10;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/petscdmda.pxi":205
+  /* "PETSc/petscdmda.pxi":207
  *     def __cinit__(self, DMDA da not None, Vec vec not None, bint DOF=False):
  *         #
  *         cdef PetscInt dim=0, dof=0             # <<<<<<<<<<<<<<
@@ -40764,16 +42304,16 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_v_dim = 0;
   __pyx_v_dof = 0;
 
-  /* "PETSc/petscdmda.pxi":206
+  /* "PETSc/petscdmda.pxi":208
  *         #
  *         cdef PetscInt dim=0, dof=0
  *         CHKERR( DMDAGetInfo(da.dm,             # <<<<<<<<<<<<<<
  *                             &dim, NULL, NULL, NULL, NULL, NULL, NULL,
  *                             &dof, NULL, NULL, NULL, NULL, NULL) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_da->__pyx_base.dm, (&__pyx_v_dim), NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_dof), NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_da->__pyx_base.dm, (&__pyx_v_dim), NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_dof), NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 208, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":209
+  /* "PETSc/petscdmda.pxi":211
  *                             &dim, NULL, NULL, NULL, NULL, NULL, NULL,
  *                             &dof, NULL, NULL, NULL, NULL, NULL) )
  *         cdef PetscInt lxs=0, lys=0, lzs=0             # <<<<<<<<<<<<<<
@@ -40784,7 +42324,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_v_lys = 0;
   __pyx_v_lzs = 0;
 
-  /* "PETSc/petscdmda.pxi":210
+  /* "PETSc/petscdmda.pxi":212
  *                             &dof, NULL, NULL, NULL, NULL, NULL) )
  *         cdef PetscInt lxs=0, lys=0, lzs=0
  *         cdef PetscInt lxm=0, lym=0, lzm=0             # <<<<<<<<<<<<<<
@@ -40795,16 +42335,16 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_v_lym = 0;
   __pyx_v_lzm = 0;
 
-  /* "PETSc/petscdmda.pxi":211
+  /* "PETSc/petscdmda.pxi":213
  *         cdef PetscInt lxs=0, lys=0, lzs=0
  *         cdef PetscInt lxm=0, lym=0, lzm=0
  *         CHKERR( DMDAGetCorners(da.dm,             # <<<<<<<<<<<<<<
  *                                &lxs, &lys, &lzs,
  *                                &lxm, &lym, &lzm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetCorners(__pyx_v_da->__pyx_base.dm, (&__pyx_v_lxs), (&__pyx_v_lys), (&__pyx_v_lzs), (&__pyx_v_lxm), (&__pyx_v_lym), (&__pyx_v_lzm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetCorners(__pyx_v_da->__pyx_base.dm, (&__pyx_v_lxs), (&__pyx_v_lys), (&__pyx_v_lzs), (&__pyx_v_lxm), (&__pyx_v_lym), (&__pyx_v_lzm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 213, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":214
+  /* "PETSc/petscdmda.pxi":216
  *                                &lxs, &lys, &lzs,
  *                                &lxm, &lym, &lzm) )
  *         cdef PetscInt gxs=0, gys=0, gzs=0             # <<<<<<<<<<<<<<
@@ -40815,7 +42355,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_v_gys = 0;
   __pyx_v_gzs = 0;
 
-  /* "PETSc/petscdmda.pxi":215
+  /* "PETSc/petscdmda.pxi":217
  *                                &lxm, &lym, &lzm) )
  *         cdef PetscInt gxs=0, gys=0, gzs=0
  *         cdef PetscInt gxm=0, gym=0, gzm=0             # <<<<<<<<<<<<<<
@@ -40826,16 +42366,16 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_v_gym = 0;
   __pyx_v_gzm = 0;
 
-  /* "PETSc/petscdmda.pxi":216
+  /* "PETSc/petscdmda.pxi":218
  *         cdef PetscInt gxs=0, gys=0, gzs=0
  *         cdef PetscInt gxm=0, gym=0, gzm=0
  *         CHKERR( DMDAGetGhostCorners(da.dm,             # <<<<<<<<<<<<<<
  *                                     &gxs, &gys, &gzs,
  *                                     &gxm, &gym, &gzm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetGhostCorners(__pyx_v_da->__pyx_base.dm, (&__pyx_v_gxs), (&__pyx_v_gys), (&__pyx_v_gzs), (&__pyx_v_gxm), (&__pyx_v_gym), (&__pyx_v_gzm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetGhostCorners(__pyx_v_da->__pyx_base.dm, (&__pyx_v_gxs), (&__pyx_v_gys), (&__pyx_v_gzs), (&__pyx_v_gxm), (&__pyx_v_gym), (&__pyx_v_gzm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 218, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":220
+  /* "PETSc/petscdmda.pxi":222
  *                                     &gxm, &gym, &gzm) )
  *         #
  *         cdef PetscInt n=0             # <<<<<<<<<<<<<<
@@ -40844,16 +42384,16 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/petscdmda.pxi":221
+  /* "PETSc/petscdmda.pxi":223
  *         #
  *         cdef PetscInt n=0
  *         CHKERR( VecGetLocalSize(vec.vec, &n) )             # <<<<<<<<<<<<<<
  *         cdef PetscInt xs, ys, zs, xm, ym, zm
  *         if (n == lxm*lym*lzm*dof):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_vec->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_vec->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 223, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":223
+  /* "PETSc/petscdmda.pxi":225
  *         CHKERR( VecGetLocalSize(vec.vec, &n) )
  *         cdef PetscInt xs, ys, zs, xm, ym, zm
  *         if (n == lxm*lym*lzm*dof):             # <<<<<<<<<<<<<<
@@ -40863,7 +42403,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_t_2 = ((__pyx_v_n == (((__pyx_v_lxm * __pyx_v_lym) * __pyx_v_lzm) * __pyx_v_dof)) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdmda.pxi":224
+    /* "PETSc/petscdmda.pxi":226
  *         cdef PetscInt xs, ys, zs, xm, ym, zm
  *         if (n == lxm*lym*lzm*dof):
  *             xs, ys, zs = lxs, lys, lzs             # <<<<<<<<<<<<<<
@@ -40877,7 +42417,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
     __pyx_v_ys = __pyx_t_4;
     __pyx_v_zs = __pyx_t_5;
 
-    /* "PETSc/petscdmda.pxi":225
+    /* "PETSc/petscdmda.pxi":227
  *         if (n == lxm*lym*lzm*dof):
  *             xs, ys, zs = lxs, lys, lzs
  *             xm, ym, zm = lxm, lym, lzm             # <<<<<<<<<<<<<<
@@ -40890,10 +42430,18 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
     __pyx_v_xm = __pyx_t_5;
     __pyx_v_ym = __pyx_t_4;
     __pyx_v_zm = __pyx_t_3;
+
+    /* "PETSc/petscdmda.pxi":225
+ *         CHKERR( VecGetLocalSize(vec.vec, &n) )
+ *         cdef PetscInt xs, ys, zs, xm, ym, zm
+ *         if (n == lxm*lym*lzm*dof):             # <<<<<<<<<<<<<<
+ *             xs, ys, zs = lxs, lys, lzs
+ *             xm, ym, zm = lxm, lym, lzm
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscdmda.pxi":226
+  /* "PETSc/petscdmda.pxi":228
  *             xs, ys, zs = lxs, lys, lzs
  *             xm, ym, zm = lxm, lym, lzm
  *         elif (n == gxm*gym*gzm*dof):             # <<<<<<<<<<<<<<
@@ -40903,7 +42451,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_t_2 = ((__pyx_v_n == (((__pyx_v_gxm * __pyx_v_gym) * __pyx_v_gzm) * __pyx_v_dof)) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdmda.pxi":227
+    /* "PETSc/petscdmda.pxi":229
  *             xm, ym, zm = lxm, lym, lzm
  *         elif (n == gxm*gym*gzm*dof):
  *             xs, ys, zs = gxs, gys, gzs             # <<<<<<<<<<<<<<
@@ -40917,7 +42465,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
     __pyx_v_ys = __pyx_t_4;
     __pyx_v_zs = __pyx_t_5;
 
-    /* "PETSc/petscdmda.pxi":228
+    /* "PETSc/petscdmda.pxi":230
  *         elif (n == gxm*gym*gzm*dof):
  *             xs, ys, zs = gxs, gys, gzs
  *             xm, ym, zm = gxm, gym, gzm             # <<<<<<<<<<<<<<
@@ -40930,22 +42478,38 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
     __pyx_v_xm = __pyx_t_5;
     __pyx_v_ym = __pyx_t_4;
     __pyx_v_zm = __pyx_t_3;
+
+    /* "PETSc/petscdmda.pxi":228
+ *             xs, ys, zs = lxs, lys, lzs
+ *             xm, ym, zm = lxm, lym, lzm
+ *         elif (n == gxm*gym*gzm*dof):             # <<<<<<<<<<<<<<
+ *             xs, ys, zs = gxs, gys, gzs
+ *             xm, ym, zm = gxm, gym, gzm
+ */
     goto __pyx_L3;
   }
+
+  /* "PETSc/petscdmda.pxi":232
+ *             xm, ym, zm = gxm, gym, gzm
+ *         else:
+ *             raise ValueError(             # <<<<<<<<<<<<<<
+ *                 "Vector local size %d is not compatible "
+ *                 "with DMDA local sizes %s"
+ */
   /*else*/ {
 
-    /* "PETSc/petscdmda.pxi":233
+    /* "PETSc/petscdmda.pxi":235
  *                 "Vector local size %d is not compatible "
  *                 "with DMDA local sizes %s"
  *                 % (<Py_ssize_t>n, toDims(dim, lxm, lym, lzm)))             # <<<<<<<<<<<<<<
  *         #
  *         cdef tuple starts = toDims(dim, xs, ys, zs)
  */
-    __pyx_t_6 = PyInt_FromSsize_t(((Py_ssize_t)__pyx_v_n)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromSsize_t(((Py_ssize_t)__pyx_v_n)); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 235, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_lxm, __pyx_v_lym, __pyx_v_lzm); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_lxm, __pyx_v_lym, __pyx_v_lzm); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 235, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(7, 235, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
@@ -40953,56 +42517,56 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
     PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7);
     __pyx_t_6 = 0;
     __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_Vector_local_size_d_is_not_compa, __pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_Vector_local_size_d_is_not_compa, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 235, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscdmda.pxi":230
+    /* "PETSc/petscdmda.pxi":232
  *             xm, ym, zm = gxm, gym, gzm
  *         else:
  *             raise ValueError(             # <<<<<<<<<<<<<<
  *                 "Vector local size %d is not compatible "
  *                 "with DMDA local sizes %s"
  */
-    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(7, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
     __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_Raise(__pyx_t_7, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    {__pyx_filename = __pyx_f[7]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(7, 232, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscdmda.pxi":235
+  /* "PETSc/petscdmda.pxi":237
  *                 % (<Py_ssize_t>n, toDims(dim, lxm, lym, lzm)))
  *         #
  *         cdef tuple starts = toDims(dim, xs, ys, zs)             # <<<<<<<<<<<<<<
  *         cdef tuple sizes  = toDims(dim, xm, ym, zm)
  *         cdef Py_ssize_t k = <Py_ssize_t>sizeof(PetscScalar)
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_xs, __pyx_v_ys, __pyx_v_zs); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_xs, __pyx_v_ys, __pyx_v_zs); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 237, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __pyx_v_starts = ((PyObject*)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "PETSc/petscdmda.pxi":236
+  /* "PETSc/petscdmda.pxi":238
  *         #
  *         cdef tuple starts = toDims(dim, xs, ys, zs)
  *         cdef tuple sizes  = toDims(dim, xm, ym, zm)             # <<<<<<<<<<<<<<
  *         cdef Py_ssize_t k = <Py_ssize_t>sizeof(PetscScalar)
  *         cdef Py_ssize_t f = <Py_ssize_t>dof
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_xm, __pyx_v_ym, __pyx_v_zm); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_xm, __pyx_v_ym, __pyx_v_zm); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 238, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __pyx_v_sizes = ((PyObject*)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "PETSc/petscdmda.pxi":237
+  /* "PETSc/petscdmda.pxi":239
  *         cdef tuple starts = toDims(dim, xs, ys, zs)
  *         cdef tuple sizes  = toDims(dim, xm, ym, zm)
  *         cdef Py_ssize_t k = <Py_ssize_t>sizeof(PetscScalar)             # <<<<<<<<<<<<<<
@@ -41011,7 +42575,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
  */
   __pyx_v_k = ((Py_ssize_t)(sizeof(PetscScalar)));
 
-  /* "PETSc/petscdmda.pxi":238
+  /* "PETSc/petscdmda.pxi":240
  *         cdef tuple sizes  = toDims(dim, xm, ym, zm)
  *         cdef Py_ssize_t k = <Py_ssize_t>sizeof(PetscScalar)
  *         cdef Py_ssize_t f = <Py_ssize_t>dof             # <<<<<<<<<<<<<<
@@ -41020,7 +42584,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
  */
   __pyx_v_f = ((Py_ssize_t)__pyx_v_dof);
 
-  /* "PETSc/petscdmda.pxi":239
+  /* "PETSc/petscdmda.pxi":241
  *         cdef Py_ssize_t k = <Py_ssize_t>sizeof(PetscScalar)
  *         cdef Py_ssize_t f = <Py_ssize_t>dof
  *         cdef Py_ssize_t d = <Py_ssize_t>dim             # <<<<<<<<<<<<<<
@@ -41029,32 +42593,32 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
  */
   __pyx_v_d = ((Py_ssize_t)__pyx_v_dim);
 
-  /* "PETSc/petscdmda.pxi":240
+  /* "PETSc/petscdmda.pxi":242
  *         cdef Py_ssize_t f = <Py_ssize_t>dof
  *         cdef Py_ssize_t d = <Py_ssize_t>dim
  *         cdef tuple shape   = toDims(dim, xm, ym, zm)             # <<<<<<<<<<<<<<
  *         cdef tuple strides = (k*f, k*f*xm, k*f*xm*ym)[:d]
  *         if DOF or f > 1: shape   += (f,)
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_xm, __pyx_v_ym, __pyx_v_zm); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_xm, __pyx_v_ym, __pyx_v_zm); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __pyx_v_shape = ((PyObject*)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "PETSc/petscdmda.pxi":241
+  /* "PETSc/petscdmda.pxi":243
  *         cdef Py_ssize_t d = <Py_ssize_t>dim
  *         cdef tuple shape   = toDims(dim, xm, ym, zm)
  *         cdef tuple strides = (k*f, k*f*xm, k*f*xm*ym)[:d]             # <<<<<<<<<<<<<<
  *         if DOF or f > 1: shape   += (f,)
  *         if DOF or f > 1: strides += (k,)
  */
-  __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_k * __pyx_v_f)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_k * __pyx_v_f)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromSsize_t(((__pyx_v_k * __pyx_v_f) * __pyx_v_xm)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromSsize_t(((__pyx_v_k * __pyx_v_f) * __pyx_v_xm)); if (unlikely(!__pyx_t_8)) __PYX_ERR(7, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyInt_FromSsize_t((((__pyx_v_k * __pyx_v_f) * __pyx_v_xm) * __pyx_v_ym)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromSsize_t((((__pyx_v_k * __pyx_v_f) * __pyx_v_xm) * __pyx_v_ym)); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(7, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_GIVEREF(__pyx_t_7);
   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
@@ -41065,14 +42629,14 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_t_9, 0, __pyx_v_d, NULL, NULL, NULL, 0, 1, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_t_9, 0, __pyx_v_d, NULL, NULL, NULL, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  if (!(likely(PyTuple_CheckExact(__pyx_t_6))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_6)->tp_name), 0))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyTuple_CheckExact(__pyx_t_6))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(7, 243, __pyx_L1_error)
   __pyx_v_strides = ((PyObject*)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmda.pxi":242
+  /* "PETSc/petscdmda.pxi":244
  *         cdef tuple shape   = toDims(dim, xm, ym, zm)
  *         cdef tuple strides = (k*f, k*f*xm, k*f*xm*ym)[:d]
  *         if DOF or f > 1: shape   += (f,)             # <<<<<<<<<<<<<<
@@ -41089,23 +42653,21 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_t_2 = __pyx_t_10;
   __pyx_L5_bool_binop_done:;
   if (__pyx_t_2) {
-    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_f); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_f); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 244, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(7, 244, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6);
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_shape, __pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_shape, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 244, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF_SET(__pyx_v_shape, ((PyObject*)__pyx_t_6));
     __pyx_t_6 = 0;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/petscdmda.pxi":243
+  /* "PETSc/petscdmda.pxi":245
  *         cdef tuple strides = (k*f, k*f*xm, k*f*xm*ym)[:d]
  *         if DOF or f > 1: shape   += (f,)
  *         if DOF or f > 1: strides += (k,)             # <<<<<<<<<<<<<<
@@ -41122,35 +42684,33 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_t_2 = __pyx_t_10;
   __pyx_L8_bool_binop_done:;
   if (__pyx_t_2) {
-    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 245, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(7, 245, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6);
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_strides, __pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_strides, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 245, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF_SET(__pyx_v_strides, ((PyObject*)__pyx_t_6));
     __pyx_t_6 = 0;
-    goto __pyx_L7;
   }
-  __pyx_L7:;
 
-  /* "PETSc/petscdmda.pxi":245
+  /* "PETSc/petscdmda.pxi":247
  *         if DOF or f > 1: strides += (k,)
  *         #
  *         self.vecbuf = _Vec_buffer(vec)             # <<<<<<<<<<<<<<
  *         self.starts = starts
  *         self.sizes = sizes
  */
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 247, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_vec));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_vec));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_vec));
-  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer), __pyx_t_6, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(7, 247, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_GIVEREF(__pyx_t_9);
@@ -41159,7 +42719,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __pyx_v_self->vecbuf = ((struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *)__pyx_t_9);
   __pyx_t_9 = 0;
 
-  /* "PETSc/petscdmda.pxi":246
+  /* "PETSc/petscdmda.pxi":248
  *         #
  *         self.vecbuf = _Vec_buffer(vec)
  *         self.starts = starts             # <<<<<<<<<<<<<<
@@ -41172,7 +42732,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __Pyx_DECREF(__pyx_v_self->starts);
   __pyx_v_self->starts = __pyx_v_starts;
 
-  /* "PETSc/petscdmda.pxi":247
+  /* "PETSc/petscdmda.pxi":249
  *         self.vecbuf = _Vec_buffer(vec)
  *         self.starts = starts
  *         self.sizes = sizes             # <<<<<<<<<<<<<<
@@ -41185,7 +42745,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __Pyx_DECREF(__pyx_v_self->sizes);
   __pyx_v_self->sizes = __pyx_v_sizes;
 
-  /* "PETSc/petscdmda.pxi":248
+  /* "PETSc/petscdmda.pxi":250
  *         self.starts = starts
  *         self.sizes = sizes
  *         self.shape = shape             # <<<<<<<<<<<<<<
@@ -41198,7 +42758,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __Pyx_DECREF(__pyx_v_self->shape);
   __pyx_v_self->shape = __pyx_v_shape;
 
-  /* "PETSc/petscdmda.pxi":249
+  /* "PETSc/petscdmda.pxi":251
  *         self.sizes = sizes
  *         self.shape = shape
  *         self.strides = strides             # <<<<<<<<<<<<<<
@@ -41211,7 +42771,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __Pyx_DECREF(__pyx_v_self->strides);
   __pyx_v_self->strides = __pyx_v_strides;
 
-  /* "PETSc/petscdmda.pxi":203
+  /* "PETSc/petscdmda.pxi":205
  *     cdef readonly ndarray array
  * 
  *     def __cinit__(self, DMDA da not None, Vec vec not None, bint DOF=False):             # <<<<<<<<<<<<<<
@@ -41238,7 +42798,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":251
+/* "PETSc/petscdmda.pxi":253
  *         self.strides = strides
  * 
  *     cdef int acquire(self) except -1:             # <<<<<<<<<<<<<<
@@ -41254,21 +42814,18 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
   int __pyx_t_3;
   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("acquire", 0);
 
-  /* "PETSc/petscdmda.pxi":252
+  /* "PETSc/petscdmda.pxi":254
  * 
  *     cdef int acquire(self) except -1:
  *         self.vecbuf.acquire()             # <<<<<<<<<<<<<<
  *         if self.array is None:
  *             self.array = asarray(self.vecbuf)
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->vecbuf->__pyx_vtab)->acquire(__pyx_v_self->vecbuf); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->vecbuf->__pyx_vtab)->acquire(__pyx_v_self->vecbuf); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 254, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":253
+  /* "PETSc/petscdmda.pxi":255
  *     cdef int acquire(self) except -1:
  *         self.vecbuf.acquire()
  *         if self.array is None:             # <<<<<<<<<<<<<<
@@ -41279,7 +42836,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscdmda.pxi":254
+    /* "PETSc/petscdmda.pxi":256
  *         self.vecbuf.acquire()
  *         if self.array is None:
  *             self.array = asarray(self.vecbuf)             # <<<<<<<<<<<<<<
@@ -41288,7 +42845,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
  */
     __pyx_t_4 = ((PyObject *)__pyx_v_self->vecbuf);
     __Pyx_INCREF(__pyx_t_4);
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 256, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GIVEREF(__pyx_t_5);
@@ -41297,7 +42854,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
     __pyx_v_self->array = ((PyArrayObject *)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscdmda.pxi":255
+    /* "PETSc/petscdmda.pxi":257
  *         if self.array is None:
  *             self.array = asarray(self.vecbuf)
  *             self.array.shape = self.shape             # <<<<<<<<<<<<<<
@@ -41306,10 +42863,10 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
  */
     __pyx_t_5 = __pyx_v_self->shape;
     __Pyx_INCREF(__pyx_t_5);
-    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self->array), __pyx_n_s_shape, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self->array), __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(7, 257, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscdmda.pxi":256
+    /* "PETSc/petscdmda.pxi":258
  *             self.array = asarray(self.vecbuf)
  *             self.array.shape = self.shape
  *             self.array.strides = self.strides             # <<<<<<<<<<<<<<
@@ -41318,13 +42875,19 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
  */
     __pyx_t_5 = __pyx_v_self->strides;
     __Pyx_INCREF(__pyx_t_5);
-    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self->array), __pyx_n_s_strides, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self->array), __pyx_n_s_strides, __pyx_t_5) < 0) __PYX_ERR(7, 258, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/petscdmda.pxi":255
+ *     cdef int acquire(self) except -1:
+ *         self.vecbuf.acquire()
+ *         if self.array is None:             # <<<<<<<<<<<<<<
+ *             self.array = asarray(self.vecbuf)
+ *             self.array.shape = self.shape
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/petscdmda.pxi":257
+  /* "PETSc/petscdmda.pxi":259
  *             self.array.shape = self.shape
  *             self.array.strides = self.strides
  *         return 0             # <<<<<<<<<<<<<<
@@ -41334,7 +42897,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":251
+  /* "PETSc/petscdmda.pxi":253
  *         self.strides = strides
  * 
  *     cdef int acquire(self) except -1:             # <<<<<<<<<<<<<<
@@ -41353,7 +42916,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":259
+/* "PETSc/petscdmda.pxi":261
  *         return 0
  * 
  *     cdef int release(self) except -1:             # <<<<<<<<<<<<<<
@@ -41365,21 +42928,18 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_release(struct __pyx_obj_8
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("release", 0);
 
-  /* "PETSc/petscdmda.pxi":260
+  /* "PETSc/petscdmda.pxi":262
  * 
  *     cdef int release(self) except -1:
  *         self.vecbuf.release()             # <<<<<<<<<<<<<<
  *         self.array = None
  *         return 0
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->vecbuf->__pyx_vtab)->release(__pyx_v_self->vecbuf); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->vecbuf->__pyx_vtab)->release(__pyx_v_self->vecbuf); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 262, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":261
+  /* "PETSc/petscdmda.pxi":263
  *     cdef int release(self) except -1:
  *         self.vecbuf.release()
  *         self.array = None             # <<<<<<<<<<<<<<
@@ -41392,7 +42952,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_release(struct __pyx_obj_8
   __Pyx_DECREF(((PyObject *)__pyx_v_self->array));
   __pyx_v_self->array = ((PyArrayObject *)Py_None);
 
-  /* "PETSc/petscdmda.pxi":262
+  /* "PETSc/petscdmda.pxi":264
  *         self.vecbuf.release()
  *         self.array = None
  *         return 0             # <<<<<<<<<<<<<<
@@ -41402,7 +42962,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_release(struct __pyx_obj_8
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":259
+  /* "PETSc/petscdmda.pxi":261
  *         return 0
  * 
  *     cdef int release(self) except -1:             # <<<<<<<<<<<<<<
@@ -41419,7 +42979,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_release(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":266
+/* "PETSc/petscdmda.pxi":268
  *     #
  * 
  *     def __getitem__(self, index):             # <<<<<<<<<<<<<<
@@ -41446,22 +43006,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_2__getitem__(struct
   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("__getitem__", 0);
   __Pyx_INCREF(__pyx_v_index);
 
-  /* "PETSc/petscdmda.pxi":267
+  /* "PETSc/petscdmda.pxi":269
  * 
  *     def __getitem__(self, index):
  *         self.acquire()             # <<<<<<<<<<<<<<
  *         index = adjust_index_exp(self.starts, index)
  *         return self.array[index]
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 269, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":268
+  /* "PETSc/petscdmda.pxi":270
  *     def __getitem__(self, index):
  *         self.acquire()
  *         index = adjust_index_exp(self.starts, index)             # <<<<<<<<<<<<<<
@@ -41470,13 +43027,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_2__getitem__(struct
  */
   __pyx_t_2 = __pyx_v_self->starts;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_adjust_index_exp(__pyx_t_2, __pyx_v_index); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_adjust_index_exp(__pyx_t_2, __pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscdmda.pxi":269
+  /* "PETSc/petscdmda.pxi":271
  *         self.acquire()
  *         index = adjust_index_exp(self.starts, index)
  *         return self.array[index]             # <<<<<<<<<<<<<<
@@ -41484,13 +43041,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_2__getitem__(struct
  *     def __setitem__(self, index, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_self->array), __pyx_v_index); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_self->array), __pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 271, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":266
+  /* "PETSc/petscdmda.pxi":268
  *     #
  * 
  *     def __getitem__(self, index):             # <<<<<<<<<<<<<<
@@ -41511,7 +43068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_2__getitem__(struct
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":271
+/* "PETSc/petscdmda.pxi":273
  *         return self.array[index]
  * 
  *     def __setitem__(self, index, value):             # <<<<<<<<<<<<<<
@@ -41538,22 +43095,19 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_4__setitem__(struct __pyx
   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("__setitem__", 0);
   __Pyx_INCREF(__pyx_v_index);
 
-  /* "PETSc/petscdmda.pxi":272
+  /* "PETSc/petscdmda.pxi":274
  * 
  *     def __setitem__(self, index, value):
  *         self.acquire()             # <<<<<<<<<<<<<<
  *         index = adjust_index_exp(self.starts, index)
  *         self.array[index] = value
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 274, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":273
+  /* "PETSc/petscdmda.pxi":275
  *     def __setitem__(self, index, value):
  *         self.acquire()
  *         index = adjust_index_exp(self.starts, index)             # <<<<<<<<<<<<<<
@@ -41562,22 +43116,22 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_4__setitem__(struct __pyx
  */
   __pyx_t_2 = __pyx_v_self->starts;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_adjust_index_exp(__pyx_t_2, __pyx_v_index); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_adjust_index_exp(__pyx_t_2, __pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 275, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscdmda.pxi":274
+  /* "PETSc/petscdmda.pxi":276
  *         self.acquire()
  *         index = adjust_index_exp(self.starts, index)
  *         self.array[index] = value             # <<<<<<<<<<<<<<
  * 
  *     # 'with' statement (PEP 343)
  */
-  if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->array), __pyx_v_index, __pyx_v_value) < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->array), __pyx_v_index, __pyx_v_value) < 0)) __PYX_ERR(7, 276, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":271
+  /* "PETSc/petscdmda.pxi":273
  *         return self.array[index]
  * 
  *     def __setitem__(self, index, value):             # <<<<<<<<<<<<<<
@@ -41599,7 +43153,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_4__setitem__(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":278
+/* "PETSc/petscdmda.pxi":280
  *     # 'with' statement (PEP 343)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -41628,21 +43182,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_6__enter__(struct _
   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("__enter__", 0);
 
-  /* "PETSc/petscdmda.pxi":279
+  /* "PETSc/petscdmda.pxi":281
  * 
  *     def __enter__(self):
  *         self.acquire()             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 281, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":280
+  /* "PETSc/petscdmda.pxi":282
  *     def __enter__(self):
  *         self.acquire()
  *         return self             # <<<<<<<<<<<<<<
@@ -41654,7 +43205,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_6__enter__(struct _
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":278
+  /* "PETSc/petscdmda.pxi":280
  *     # 'with' statement (PEP 343)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -41672,7 +43223,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_6__enter__(struct _
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":282
+/* "PETSc/petscdmda.pxi":284
  *         return self
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -41703,21 +43254,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_8__exit__(struct __
   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("__exit__", 0);
 
-  /* "PETSc/petscdmda.pxi":283
+  /* "PETSc/petscdmda.pxi":285
  * 
  *     def __exit__(self, *exc):
  *         self.release()             # <<<<<<<<<<<<<<
  *         return None
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__DMDA_Vec_array *)__pyx_v_self->__pyx_vtab)->release(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 285, __pyx_L1_error)
 
-  /* "PETSc/petscdmda.pxi":284
+  /* "PETSc/petscdmda.pxi":286
  *     def __exit__(self, *exc):
  *         self.release()
  *         return None             # <<<<<<<<<<<<<<
@@ -41729,7 +43277,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_8__exit__(struct __
   __pyx_r = Py_None;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":282
+  /* "PETSc/petscdmda.pxi":284
  *         return self
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -41747,7 +43295,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_8__exit__(struct __
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":199
+/* "PETSc/petscdmda.pxi":201
  * 
  *     cdef _Vec_buffer vecbuf
  *     cdef readonly tuple starts, sizes             # <<<<<<<<<<<<<<
@@ -41813,7 +43361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_5sizes___get__(stru
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":200
+/* "PETSc/petscdmda.pxi":202
  *     cdef _Vec_buffer vecbuf
  *     cdef readonly tuple starts, sizes
  *     cdef readonly tuple shape, strides             # <<<<<<<<<<<<<<
@@ -41879,7 +43427,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_7strides___get__(st
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":201
+/* "PETSc/petscdmda.pxi":203
  *     cdef readonly tuple starts, sizes
  *     cdef readonly tuple shape, strides
  *     cdef readonly ndarray array             # <<<<<<<<<<<<<<
@@ -41916,7 +43464,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_5array___get__(stru
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":287
+/* "PETSc/petscdmda.pxi":289
  * 
  * 
  * cdef object adjust_index_exp(object starts, object index):             # <<<<<<<<<<<<<<
@@ -41937,13 +43485,10 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
   PyObject *(*__pyx_t_6)(PyObject *);
   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("adjust_index_exp", 0);
   __Pyx_INCREF(__pyx_v_index);
 
-  /* "PETSc/petscdmda.pxi":288
+  /* "PETSc/petscdmda.pxi":290
  * 
  * cdef object adjust_index_exp(object starts, object index):
  *      if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
@@ -41954,7 +43499,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdmda.pxi":289
+    /* "PETSc/petscdmda.pxi":291
  * cdef object adjust_index_exp(object starts, object index):
  *      if not isinstance(index, tuple):
  *          return adjust_index(starts[0], index)             # <<<<<<<<<<<<<<
@@ -41962,29 +43507,37 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
  *      for i, start in enumerate(starts):
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_starts, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_starts, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 291, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_adjust_index(__pyx_t_3, __pyx_v_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_adjust_index(__pyx_t_3, __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 291, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/petscdmda.pxi":290
+ * 
+ * cdef object adjust_index_exp(object starts, object index):
+ *      if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
+ *          return adjust_index(starts[0], index)
+ *      index = list(index)
+ */
   }
 
-  /* "PETSc/petscdmda.pxi":290
+  /* "PETSc/petscdmda.pxi":292
  *      if not isinstance(index, tuple):
  *          return adjust_index(starts[0], index)
  *      index = list(index)             # <<<<<<<<<<<<<<
  *      for i, start in enumerate(starts):
  *          index[i] = adjust_index(start, index[i])
  */
-  __pyx_t_4 = PySequence_List(__pyx_v_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_List(__pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscdmda.pxi":291
+  /* "PETSc/petscdmda.pxi":293
  *          return adjust_index(starts[0], index)
  *      index = list(index)
  *      for i, start in enumerate(starts):             # <<<<<<<<<<<<<<
@@ -41997,26 +43550,26 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
     __pyx_t_3 = __pyx_v_starts; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_starts); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_starts); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 293, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 293, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(7, 293, __pyx_L1_error)
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 293, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       } else {
         if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(7, 293, __pyx_L1_error)
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 293, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       }
@@ -42026,7 +43579,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
         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 = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(7, 293, __pyx_L1_error)
         }
         break;
       }
@@ -42036,28 +43589,28 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
     __pyx_t_7 = 0;
     __Pyx_INCREF(__pyx_t_4);
     __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4);
-    __pyx_t_7 = PyNumber_Add(__pyx_t_4, __pyx_int_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_4, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 293, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4);
     __pyx_t_4 = __pyx_t_7;
     __pyx_t_7 = 0;
 
-    /* "PETSc/petscdmda.pxi":292
+    /* "PETSc/petscdmda.pxi":294
  *      index = list(index)
  *      for i, start in enumerate(starts):
  *          index[i] = adjust_index(start, index[i])             # <<<<<<<<<<<<<<
  *      index = tuple(index)
  *      return index
  */
-    __pyx_t_7 = PyObject_GetItem(__pyx_v_index, __pyx_v_i); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_7 = PyObject_GetItem(__pyx_v_index, __pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 294, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_adjust_index(__pyx_v_start, __pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_adjust_index(__pyx_v_start, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(7, 294, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(PyObject_SetItem(__pyx_v_index, __pyx_v_i, __pyx_t_8) < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(PyObject_SetItem(__pyx_v_index, __pyx_v_i, __pyx_t_8) < 0)) __PYX_ERR(7, 294, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscdmda.pxi":291
+    /* "PETSc/petscdmda.pxi":293
  *          return adjust_index(starts[0], index)
  *      index = list(index)
  *      for i, start in enumerate(starts):             # <<<<<<<<<<<<<<
@@ -42068,19 +43621,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/petscdmda.pxi":293
+  /* "PETSc/petscdmda.pxi":295
  *      for i, start in enumerate(starts):
  *          index[i] = adjust_index(start, index[i])
  *      index = tuple(index)             # <<<<<<<<<<<<<<
  *      return index
  * 
  */
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 295, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscdmda.pxi":294
+  /* "PETSc/petscdmda.pxi":296
  *          index[i] = adjust_index(start, index[i])
  *      index = tuple(index)
  *      return index             # <<<<<<<<<<<<<<
@@ -42092,7 +43645,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
   __pyx_r = __pyx_v_index;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmda.pxi":287
+  /* "PETSc/petscdmda.pxi":289
  * 
  * 
  * cdef object adjust_index_exp(object starts, object index):             # <<<<<<<<<<<<<<
@@ -42117,7 +43670,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
   return __pyx_r;
 }
 
-/* "PETSc/petscdmda.pxi":296
+/* "PETSc/petscdmda.pxi":298
  *      return index
  * 
  * cdef object adjust_index(object lbound, object index):             # <<<<<<<<<<<<<<
@@ -42140,12 +43693,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
   int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("adjust_index", 0);
 
-  /* "PETSc/petscdmda.pxi":297
+  /* "PETSc/petscdmda.pxi":299
  * 
  * cdef object adjust_index(object lbound, object index):
  *     if index is None:             # <<<<<<<<<<<<<<
@@ -42156,7 +43706,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdmda.pxi":298
+    /* "PETSc/petscdmda.pxi":300
  * cdef object adjust_index(object lbound, object index):
  *     if index is None:
  *         return index             # <<<<<<<<<<<<<<
@@ -42167,9 +43717,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
     __Pyx_INCREF(__pyx_v_index);
     __pyx_r = __pyx_v_index;
     goto __pyx_L0;
+
+    /* "PETSc/petscdmda.pxi":299
+ * 
+ * cdef object adjust_index(object lbound, object index):
+ *     if index is None:             # <<<<<<<<<<<<<<
+ *         return index
+ *     if index is Ellipsis:
+ */
   }
 
-  /* "PETSc/petscdmda.pxi":299
+  /* "PETSc/petscdmda.pxi":301
  *     if index is None:
  *         return index
  *     if index is Ellipsis:             # <<<<<<<<<<<<<<
@@ -42180,7 +43738,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscdmda.pxi":300
+    /* "PETSc/petscdmda.pxi":302
  *         return index
  *     if index is Ellipsis:
  *         return index             # <<<<<<<<<<<<<<
@@ -42191,9 +43749,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
     __Pyx_INCREF(__pyx_v_index);
     __pyx_r = __pyx_v_index;
     goto __pyx_L0;
+
+    /* "PETSc/petscdmda.pxi":301
+ *     if index is None:
+ *         return index
+ *     if index is Ellipsis:             # <<<<<<<<<<<<<<
+ *         return index
+ *     if isinstance(index, slice):
+ */
   }
 
-  /* "PETSc/petscdmda.pxi":301
+  /* "PETSc/petscdmda.pxi":303
  *     if index is Ellipsis:
  *         return index
  *     if isinstance(index, slice):             # <<<<<<<<<<<<<<
@@ -42204,43 +43770,43 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscdmda.pxi":302
+    /* "PETSc/petscdmda.pxi":304
  *         return index
  *     if isinstance(index, slice):
  *         start = index.start             # <<<<<<<<<<<<<<
  *         stop  = index.stop
  *         step  = index.step
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 304, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_start = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscdmda.pxi":303
+    /* "PETSc/petscdmda.pxi":305
  *     if isinstance(index, slice):
  *         start = index.start
  *         stop  = index.stop             # <<<<<<<<<<<<<<
  *         step  = index.step
  *         if start is not None: start -= lbound
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 305, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_stop = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscdmda.pxi":304
+    /* "PETSc/petscdmda.pxi":306
  *         start = index.start
  *         stop  = index.stop
  *         step  = index.step             # <<<<<<<<<<<<<<
  *         if start is not None: start -= lbound
  *         if stop  is not None: stop  -= lbound
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 306, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_step = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscdmda.pxi":305
+    /* "PETSc/petscdmda.pxi":307
  *         stop  = index.stop
  *         step  = index.step
  *         if start is not None: start -= lbound             # <<<<<<<<<<<<<<
@@ -42250,15 +43816,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
     __pyx_t_2 = (__pyx_v_start != Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
-      __pyx_t_3 = PyNumber_InPlaceSubtract(__pyx_v_start, __pyx_v_lbound); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyNumber_InPlaceSubtract(__pyx_v_start, __pyx_v_lbound); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 307, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_start, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L6;
     }
-    __pyx_L6:;
 
-    /* "PETSc/petscdmda.pxi":306
+    /* "PETSc/petscdmda.pxi":308
  *         step  = index.step
  *         if start is not None: start -= lbound
  *         if stop  is not None: stop  -= lbound             # <<<<<<<<<<<<<<
@@ -42268,15 +43832,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
     __pyx_t_1 = (__pyx_v_stop != Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyNumber_InPlaceSubtract(__pyx_v_stop, __pyx_v_lbound); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyNumber_InPlaceSubtract(__pyx_v_stop, __pyx_v_lbound); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 308, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_stop, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L7;
     }
-    __pyx_L7:;
 
-    /* "PETSc/petscdmda.pxi":307
+    /* "PETSc/petscdmda.pxi":309
  *         if start is not None: start -= lbound
  *         if stop  is not None: stop  -= lbound
  *         return slice(start, stop, step)             # <<<<<<<<<<<<<<
@@ -42284,14 +43846,22 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
  *         return index - lbound
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = PySlice_New(__pyx_v_start, __pyx_v_stop, __pyx_v_step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySlice_New(__pyx_v_start, __pyx_v_stop, __pyx_v_step); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 309, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/petscdmda.pxi":303
+ *     if index is Ellipsis:
+ *         return index
+ *     if isinstance(index, slice):             # <<<<<<<<<<<<<<
+ *         start = index.start
+ *         stop  = index.stop
+ */
   }
 
-  /* "PETSc/petscdmda.pxi":308
+  /* "PETSc/petscdmda.pxi":310
  *         if stop  is not None: stop  -= lbound
  *         return slice(start, stop, step)
  *     try:             # <<<<<<<<<<<<<<
@@ -42299,13 +43869,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
  *     except TypeError:
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
     __Pyx_XGOTREF(__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_5);
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/petscdmda.pxi":309
+      /* "PETSc/petscdmda.pxi":311
  *         return slice(start, stop, step)
  *     try:
  *         return index - lbound             # <<<<<<<<<<<<<<
@@ -42313,31 +43885,40 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
  *         return index
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = PyNumber_Subtract(__pyx_v_index, __pyx_v_lbound); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_3 = PyNumber_Subtract(__pyx_v_index, __pyx_v_lbound); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 311, __pyx_L8_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L12_try_return;
+
+      /* "PETSc/petscdmda.pxi":310
+ *         if stop  is not None: stop  -= lbound
+ *         return slice(start, stop, step)
+ *     try:             # <<<<<<<<<<<<<<
+ *         return index - lbound
+ *     except TypeError:
+ */
     }
     __pyx_L8_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscdmda.pxi":310
+    /* "PETSc/petscdmda.pxi":312
  *     try:
  *         return index - lbound
  *     except TypeError:             # <<<<<<<<<<<<<<
  *         return index
  * 
  */
-    __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError);
+    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
     if (__pyx_t_7) {
       __Pyx_AddTraceback("petsc4py.PETSc.adjust_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_8, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(7, 312, __pyx_L10_except_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "PETSc/petscdmda.pxi":311
+      /* "PETSc/petscdmda.pxi":313
  *         return index - lbound
  *     except TypeError:
  *         return index             # <<<<<<<<<<<<<<
@@ -42354,18 +43935,29 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
     }
     goto __pyx_L10_except_error;
     __pyx_L10_except_error:;
+
+    /* "PETSc/petscdmda.pxi":310
+ *         if stop  is not None: stop  -= lbound
+ *         return slice(start, stop, step)
+ *     try:             # <<<<<<<<<<<<<<
+ *         return index - lbound
+ *     except TypeError:
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
     goto __pyx_L1_error;
     __pyx_L12_try_return:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
     goto __pyx_L0;
     __pyx_L11_except_return:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
@@ -42373,7 +43965,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscdmda.pxi":296
+  /* "PETSc/petscdmda.pxi":298
  *      return index
  * 
  * cdef object adjust_index(object lbound, object index):             # <<<<<<<<<<<<<<
@@ -42411,9 +44003,6 @@ static int __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(PyObject *
   struct PyPetscDMObject *__pyx_v_dm = 0;
   struct PyPetscVecObject *__pyx_v_gvec = 0;
   PyObject *__pyx_v_locs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
@@ -42439,7 +44028,7 @@ static int __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gvec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); {__pyx_filename = __pyx_f[23]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(23, 27, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -42448,7 +44037,7 @@ static int __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(23, 27, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -42465,14 +44054,14 @@ static int __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[23]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(23, 27, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._DMComposite_access.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 1, "dm", 0))) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 1, "dm", 0))) __PYX_ERR(23, 27, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) __PYX_ERR(23, 27, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(((struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *)__pyx_v_self), __pyx_v_dm, __pyx_v_gvec, __pyx_v_locs);
 
   /* function exit code */
@@ -42494,9 +44083,6 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
   int __pyx_t_5;
   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("__cinit__", 0);
   __Pyx_INCREF(__pyx_v_locs);
 
@@ -42517,7 +44103,7 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
  *         self.gvec = gvec.vec
  *         CHKERR( PetscINCREF(<PetscObject*>&self.gvec) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&__pyx_v_self->dm)))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&__pyx_v_self->dm)))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(23, 29, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":30
  *         self.dm = dm.dm
@@ -42536,7 +44122,7 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
  *         if locs is None:
  *             CHKERR( DMCompositeGetNumberDM(self.dm, &self.nlocs) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&__pyx_v_self->gvec)))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&__pyx_v_self->gvec)))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(23, 31, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":32
  *         self.gvec = gvec.vec
@@ -42556,7 +44142,7 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
  *             locs = arange(0, <long>self.nlocs, 1)
  *         self.locs_mem = iarray_i(locs, &self.nlocs, &self.locs)
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->dm, (&__pyx_v_self->nlocs))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->dm, (&__pyx_v_self->nlocs))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(23, 33, __pyx_L1_error)
 
     /* "PETSc/petscdmcomposite.pxi":34
  *         if locs is None:
@@ -42565,16 +44151,22 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
  *         self.locs_mem = iarray_i(locs, &self.nlocs, &self.locs)
  *         self.vecs_mem = oarray_p(empty_p(self.nlocs), NULL, <void**>&self.vecs)
  */
-    __pyx_t_6 = __Pyx_PyInt_From_long(((long)__pyx_v_self->nlocs)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_From_long(((long)__pyx_v_self->nlocs)); if (unlikely(!__pyx_t_6)) __PYX_ERR(23, 34, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_int_0, __pyx_t_6, __pyx_int_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_arange(__pyx_int_0, __pyx_t_6, __pyx_int_1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(23, 34, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF_SET(__pyx_v_locs, __pyx_t_7);
     __pyx_t_7 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/petscdmcomposite.pxi":32
+ *         self.gvec = gvec.vec
+ *         CHKERR( PetscINCREF(<PetscObject*>&self.gvec) )
+ *         if locs is None:             # <<<<<<<<<<<<<<
+ *             CHKERR( DMCompositeGetNumberDM(self.dm, &self.nlocs) )
+ *             locs = arange(0, <long>self.nlocs, 1)
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/petscdmcomposite.pxi":35
  *             CHKERR( DMCompositeGetNumberDM(self.dm, &self.nlocs) )
@@ -42583,7 +44175,7 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
  *         self.vecs_mem = oarray_p(empty_p(self.nlocs), NULL, <void**>&self.vecs)
  *         self.access   = None
  */
-  __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_locs, (&__pyx_v_self->nlocs), (&__pyx_v_self->locs))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_locs, (&__pyx_v_self->nlocs), (&__pyx_v_self->locs))); if (unlikely(!__pyx_t_7)) __PYX_ERR(23, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
   __Pyx_GOTREF(__pyx_v_self->locs_mem);
@@ -42598,9 +44190,9 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
  *         self.access   = None
  * 
  */
-  __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_self->nlocs)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_self->nlocs)); if (unlikely(!__pyx_t_7)) __PYX_ERR(23, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_7, NULL, ((void **)(&__pyx_v_self->vecs)))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_7, NULL, ((void **)(&__pyx_v_self->vecs)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(23, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_GIVEREF(__pyx_t_6);
@@ -42666,9 +44258,6 @@ static void __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_3__dealloc__(PyObjec
 static void __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
   /* "PETSc/petscdmcomposite.pxi":40
@@ -42678,7 +44267,7 @@ static void __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_2__dealloc__(struct
  *         CHKERR( VecDestroy(&self.gvec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDestroy((&__pyx_v_self->dm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDestroy((&__pyx_v_self->dm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(23, 40, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":41
  *     def __dealloc__(self):
@@ -42687,7 +44276,7 @@ static void __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_2__dealloc__(struct
  * 
  *     def __enter__(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->gvec))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->gvec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(23, 41, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":39
  *         self.access   = None
@@ -42740,9 +44329,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_4__enter__(stru
   PyObject *__pyx_t_3 = NULL;
   Py_ssize_t __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
   /* "PETSc/petscdmcomposite.pxi":44
@@ -42762,7 +44348,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_4__enter__(stru
  *         self.access = [ref_Vec(self.vecs[i]) for i from 0 <= i < n]
  *         return tuple(self.access)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetAccessArray(__pyx_v_self->dm, __pyx_v_self->gvec, __pyx_v_self->nlocs, __pyx_v_self->locs, __pyx_v_self->vecs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetAccessArray(__pyx_v_self->dm, __pyx_v_self->gvec, __pyx_v_self->nlocs, __pyx_v_self->locs, __pyx_v_self->vecs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(23, 45, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":46
  *         cdef Py_ssize_t i, n = self.nlocs
@@ -42771,13 +44357,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_4__enter__(stru
  *         return tuple(self.access)
  * 
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(23, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec((__pyx_v_self->vecs[__pyx_v_i]))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec((__pyx_v_self->vecs[__pyx_v_i]))); if (unlikely(!__pyx_t_5)) __PYX_ERR(23, 46, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_5))) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_5))) __PYX_ERR(23, 46, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __Pyx_GIVEREF(__pyx_t_3);
@@ -42794,7 +44380,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_4__enter__(stru
  *     def __exit__(self, *exc):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PySequence_Tuple(__pyx_v_self->access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PySequence_Tuple(__pyx_v_self->access); if (unlikely(!__pyx_t_3)) __PYX_ERR(23, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -42856,9 +44442,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_6__exit__(struc
   Py_ssize_t __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
   /* "PETSc/petscdmcomposite.pxi":50
@@ -42880,7 +44463,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_6__exit__(struc
  */
   __pyx_t_2 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_self->access, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_self->access, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(23, 51, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     ((struct PyPetscVecObject *)__pyx_t_3)->vec = NULL;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -42892,7 +44475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_6__exit__(struc
  *         CHKERR( DMCompositeRestoreAccessArray(self.dm, self.gvec, self.nlocs, self.locs, self.vecs) )             # <<<<<<<<<<<<<<
  *         self.access   = None
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeRestoreAccessArray(__pyx_v_self->dm, __pyx_v_self->gvec, __pyx_v_self->nlocs, __pyx_v_self->locs, __pyx_v_self->vecs)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeRestoreAccessArray(__pyx_v_self->dm, __pyx_v_self->gvec, __pyx_v_self->nlocs, __pyx_v_self->locs, __pyx_v_self->vecs)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(23, 52, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":53
  *         for i from 0 <= i < n: (<Vec>self.access[i]).vec = NULL
@@ -42926,8 +44509,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_6__exit__(struc
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":44
- *     int DMShellSetCreateFieldDecomposition(PetscDM,PetscDMShellCreateFieldDecompositionFunction)
+/* "PETSc/petscdmshell.pxi":50
+ *     int DMShellSetCreateSubDM(PetscDM,PetscDMShellCreateSubDM)
  * 
  * cdef int DMSHELL_CreateGlobalVector(             # <<<<<<<<<<<<<<
  *     PetscDM dm,
@@ -42952,31 +44535,28 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   Vec __pyx_t_9;
-  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("DMSHELL_CreateGlobalVector", 0);
 
-  /* "PETSc/petscdmshell.pxi":47
+  /* "PETSc/petscdmshell.pxi":53
  *     PetscDM dm,
  *     PetscVec *v) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Vec vec
  *     Dm.dm = dm
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 53, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":49
+  /* "PETSc/petscdmshell.pxi":55
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec vec
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -42985,7 +44565,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":50
+  /* "PETSc/petscdmshell.pxi":56
  *     cdef Vec vec
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -42994,19 +44574,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":51
+  /* "PETSc/petscdmshell.pxi":57
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_global_vector__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (create_gvec, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_create_global_vector); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__create_global_vector__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":52
+  /* "PETSc/petscdmshell.pxi":58
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_global_vector__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -43022,18 +44602,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 58, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":53
+  /* "PETSc/petscdmshell.pxi":59
  *     context = Dm.get_attr('__create_global_vector__')
  *     assert context is not None and type(context) is tuple
  *     (create_gvec, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -43050,7 +44630,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 59, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -43066,16 +44646,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 59, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 59, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 59, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 59, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -43084,7 +44664,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 59, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -43092,7 +44672,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 59, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_create_gvec = __pyx_t_2;
@@ -43102,44 +44682,44 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":54
+  /* "PETSc/petscdmshell.pxi":60
  *     assert context is not None and type(context) is tuple
  *     (create_gvec, args, kargs) = context
  *     vec = create_gvec(Dm, *args, **kargs)             # <<<<<<<<<<<<<<
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec
  */
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Dm));
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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[8]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 60, __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, 60, __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[8]; __pyx_lineno = 54; __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, 60, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_create_gvec, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_create_gvec, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(8, 60, __pyx_L1_error)
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":55
+  /* "PETSc/petscdmshell.pxi":61
  *     (create_gvec, args, kargs) = context
  *     vec = create_gvec(Dm, *args, **kargs)
  *     PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -43148,7 +44728,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":56
+  /* "PETSc/petscdmshell.pxi":62
  *     vec = create_gvec(Dm, *args, **kargs)
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec             # <<<<<<<<<<<<<<
@@ -43158,7 +44738,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
   __pyx_t_9 = __pyx_v_vec->vec;
   (__pyx_v_v[0]) = __pyx_t_9;
 
-  /* "PETSc/petscdmshell.pxi":57
+  /* "PETSc/petscdmshell.pxi":63
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec
  *     return 0             # <<<<<<<<<<<<<<
@@ -43168,8 +44748,8 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":44
- *     int DMShellSetCreateFieldDecomposition(PetscDM,PetscDMShellCreateFieldDecompositionFunction)
+  /* "PETSc/petscdmshell.pxi":50
+ *     int DMShellSetCreateSubDM(PetscDM,PetscDMShellCreateSubDM)
  * 
  * cdef int DMSHELL_CreateGlobalVector(             # <<<<<<<<<<<<<<
  *     PetscDM dm,
@@ -43198,7 +44778,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":59
+/* "PETSc/petscdmshell.pxi":65
  *     return 0
  * 
  * cdef int DMSHELL_CreateLocalVector(             # <<<<<<<<<<<<<<
@@ -43224,31 +44804,28 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   Vec __pyx_t_9;
-  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("DMSHELL_CreateLocalVector", 0);
 
-  /* "PETSc/petscdmshell.pxi":62
+  /* "PETSc/petscdmshell.pxi":68
  *     PetscDM dm,
  *     PetscVec *v) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Vec vec
  *     Dm.dm = dm
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 68, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":64
+  /* "PETSc/petscdmshell.pxi":70
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec vec
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -43257,7 +44834,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":65
+  /* "PETSc/petscdmshell.pxi":71
  *     cdef Vec vec
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -43266,19 +44843,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":66
+  /* "PETSc/petscdmshell.pxi":72
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_local_vector__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (create_lvec, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_create_local_vector); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__create_local_vector__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 72, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":67
+  /* "PETSc/petscdmshell.pxi":73
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_local_vector__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -43294,18 +44871,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 73, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":68
+  /* "PETSc/petscdmshell.pxi":74
  *     context = Dm.get_attr('__create_local_vector__')
  *     assert context is not None and type(context) is tuple
  *     (create_lvec, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -43322,7 +44899,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 74, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -43338,16 +44915,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -43356,7 +44933,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 74, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -43364,7 +44941,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 74, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_create_lvec = __pyx_t_2;
@@ -43374,44 +44951,44 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":69
+  /* "PETSc/petscdmshell.pxi":75
  *     assert context is not None and type(context) is tuple
  *     (create_lvec, args, kargs) = context
  *     vec = create_lvec(Dm, *args, **kargs)             # <<<<<<<<<<<<<<
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec
  */
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Dm));
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 75, __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, 75, __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[8]; __pyx_lineno = 69; __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, 75, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_create_lvec, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_create_lvec, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(8, 75, __pyx_L1_error)
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":70
+  /* "PETSc/petscdmshell.pxi":76
  *     (create_lvec, args, kargs) = context
  *     vec = create_lvec(Dm, *args, **kargs)
  *     PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -43420,7 +44997,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":71
+  /* "PETSc/petscdmshell.pxi":77
  *     vec = create_lvec(Dm, *args, **kargs)
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec             # <<<<<<<<<<<<<<
@@ -43430,7 +45007,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
   __pyx_t_9 = __pyx_v_vec->vec;
   (__pyx_v_v[0]) = __pyx_t_9;
 
-  /* "PETSc/petscdmshell.pxi":72
+  /* "PETSc/petscdmshell.pxi":78
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec
  *     return 0             # <<<<<<<<<<<<<<
@@ -43440,7 +45017,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":59
+  /* "PETSc/petscdmshell.pxi":65
  *     return 0
  * 
  * cdef int DMSHELL_CreateLocalVector(             # <<<<<<<<<<<<<<
@@ -43470,7 +45047,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":74
+/* "PETSc/petscdmshell.pxi":80
  *     return 0
  * 
  * cdef int DMSHELL_GlobalToLocalBegin(             # <<<<<<<<<<<<<<
@@ -43496,55 +45073,52 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("DMSHELL_GlobalToLocalBegin", 0);
 
-  /* "PETSc/petscdmshell.pxi":79
+  /* "PETSc/petscdmshell.pxi":85
  *     PetscInsertMode mode,
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 85, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":80
+  /* "PETSc/petscdmshell.pxi":86
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)             # <<<<<<<<<<<<<<
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 86, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":81
+  /* "PETSc/petscdmshell.pxi":87
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)             # <<<<<<<<<<<<<<
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 87, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":82
+  /* "PETSc/petscdmshell.pxi":88
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -43553,7 +45127,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":83
+  /* "PETSc/petscdmshell.pxi":89
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -43562,19 +45136,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":84
+  /* "PETSc/petscdmshell.pxi":90
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__g2l_begin__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_g2l_begin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__g2l_begin__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":85
+  /* "PETSc/petscdmshell.pxi":91
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__g2l_begin__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -43590,18 +45164,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 91, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":86
+  /* "PETSc/petscdmshell.pxi":92
  *     context = Dm.get_attr('__g2l_begin__')
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -43618,7 +45192,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 92, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -43634,16 +45208,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 92, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 92, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 92, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 92, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -43652,7 +45226,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 92, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -43660,7 +45234,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 92, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_begin = __pyx_t_2;
@@ -43670,16 +45244,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":87
+  /* "PETSc/petscdmshell.pxi":93
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_mode); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -43693,30 +45267,30 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
   __Pyx_GIVEREF(((PyObject *)__pyx_v_lvec));
   PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_lvec));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 93, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 93, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 93, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_begin, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_begin, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":88
+  /* "PETSc/petscdmshell.pxi":94
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -43726,7 +45300,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":74
+  /* "PETSc/petscdmshell.pxi":80
  *     return 0
  * 
  * cdef int DMSHELL_GlobalToLocalBegin(             # <<<<<<<<<<<<<<
@@ -43757,7 +45331,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":90
+/* "PETSc/petscdmshell.pxi":96
  *     return 0
  * 
  * cdef int DMSHELL_GlobalToLocalEnd(             # <<<<<<<<<<<<<<
@@ -43783,55 +45357,52 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("DMSHELL_GlobalToLocalEnd", 0);
 
-  /* "PETSc/petscdmshell.pxi":95
+  /* "PETSc/petscdmshell.pxi":101
  *     PetscInsertMode mode,
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 101, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":96
+  /* "PETSc/petscdmshell.pxi":102
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)             # <<<<<<<<<<<<<<
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":97
+  /* "PETSc/petscdmshell.pxi":103
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)             # <<<<<<<<<<<<<<
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":98
+  /* "PETSc/petscdmshell.pxi":104
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -43840,7 +45411,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":99
+  /* "PETSc/petscdmshell.pxi":105
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -43849,19 +45420,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":100
+  /* "PETSc/petscdmshell.pxi":106
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__g2l_end__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_g2l_end); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__g2l_end__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":101
+  /* "PETSc/petscdmshell.pxi":107
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__g2l_end__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -43877,18 +45448,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 107, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":102
+  /* "PETSc/petscdmshell.pxi":108
  *     context = Dm.get_attr('__g2l_end__')
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -43905,7 +45476,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 108, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -43921,16 +45492,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 108, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 108, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 108, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 108, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -43939,7 +45510,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 108, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -43947,7 +45518,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 108, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_end = __pyx_t_2;
@@ -43957,16 +45528,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":103
+  /* "PETSc/petscdmshell.pxi":109
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_mode); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -43980,30 +45551,30 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
   __Pyx_GIVEREF(((PyObject *)__pyx_v_lvec));
   PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_lvec));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 109, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 109, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 109, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_end, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_end, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":104
+  /* "PETSc/petscdmshell.pxi":110
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -44013,7 +45584,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":90
+  /* "PETSc/petscdmshell.pxi":96
  *     return 0
  * 
  * cdef int DMSHELL_GlobalToLocalEnd(             # <<<<<<<<<<<<<<
@@ -44044,7 +45615,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":106
+/* "PETSc/petscdmshell.pxi":112
  *     return 0
  * 
  * cdef int DMSHELL_LocalToGlobalBegin(             # <<<<<<<<<<<<<<
@@ -44070,55 +45641,52 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("DMSHELL_LocalToGlobalBegin", 0);
 
-  /* "PETSc/petscdmshell.pxi":111
+  /* "PETSc/petscdmshell.pxi":117
  *     PetscInsertMode mode,
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 117, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":112
+  /* "PETSc/petscdmshell.pxi":118
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)             # <<<<<<<<<<<<<<
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":113
+  /* "PETSc/petscdmshell.pxi":119
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)             # <<<<<<<<<<<<<<
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 119, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":114
+  /* "PETSc/petscdmshell.pxi":120
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -44127,7 +45695,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":115
+  /* "PETSc/petscdmshell.pxi":121
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -44136,19 +45704,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":116
+  /* "PETSc/petscdmshell.pxi":122
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2g_begin__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_l2g_begin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__l2g_begin__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":117
+  /* "PETSc/petscdmshell.pxi":123
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2g_begin__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -44164,18 +45732,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 123, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":118
+  /* "PETSc/petscdmshell.pxi":124
  *     context = Dm.get_attr('__l2g_begin__')
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -44192,7 +45760,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 124, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -44208,16 +45776,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 124, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 124, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 124, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 124, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -44226,7 +45794,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 124, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -44234,7 +45802,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 124, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_begin = __pyx_t_2;
@@ -44244,16 +45812,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":119
+  /* "PETSc/petscdmshell.pxi":125
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_mode); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -44267,30 +45835,30 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
   __Pyx_GIVEREF(((PyObject *)__pyx_v_lvec));
   PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_lvec));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 125, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 125, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 125, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_begin, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_begin, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":120
+  /* "PETSc/petscdmshell.pxi":126
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -44300,7 +45868,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":106
+  /* "PETSc/petscdmshell.pxi":112
  *     return 0
  * 
  * cdef int DMSHELL_LocalToGlobalBegin(             # <<<<<<<<<<<<<<
@@ -44331,7 +45899,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":122
+/* "PETSc/petscdmshell.pxi":128
  *     return 0
  * 
  * cdef int DMSHELL_LocalToGlobalEnd(             # <<<<<<<<<<<<<<
@@ -44357,55 +45925,52 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("DMSHELL_LocalToGlobalEnd", 0);
 
-  /* "PETSc/petscdmshell.pxi":127
+  /* "PETSc/petscdmshell.pxi":133
  *     PetscInsertMode mode,
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 133, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":128
+  /* "PETSc/petscdmshell.pxi":134
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)             # <<<<<<<<<<<<<<
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":129
+  /* "PETSc/petscdmshell.pxi":135
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)             # <<<<<<<<<<<<<<
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":130
+  /* "PETSc/petscdmshell.pxi":136
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -44414,7 +45979,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":131
+  /* "PETSc/petscdmshell.pxi":137
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -44423,19 +45988,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":132
+  /* "PETSc/petscdmshell.pxi":138
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2g_end__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_l2g_end); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__l2g_end__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 138, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":133
+  /* "PETSc/petscdmshell.pxi":139
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2g_end__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -44451,18 +46016,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 139, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":134
+  /* "PETSc/petscdmshell.pxi":140
  *     context = Dm.get_attr('__l2g_end__')
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -44479,7 +46044,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 140, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -44495,16 +46060,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 140, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 140, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 140, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 140, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -44513,7 +46078,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 140, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -44521,7 +46086,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 140, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_end = __pyx_t_2;
@@ -44531,16 +46096,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":135
+  /* "PETSc/petscdmshell.pxi":141
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_mode); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -44554,30 +46119,30 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
   __Pyx_GIVEREF(((PyObject *)__pyx_v_lvec));
   PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_lvec));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 141, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 141, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 141, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_end, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_end, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":136
+  /* "PETSc/petscdmshell.pxi":142
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -44587,7 +46152,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":122
+  /* "PETSc/petscdmshell.pxi":128
  *     return 0
  * 
  * cdef int DMSHELL_LocalToGlobalEnd(             # <<<<<<<<<<<<<<
@@ -44618,7 +46183,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":138
+/* "PETSc/petscdmshell.pxi":144
  *     return 0
  * 
  * cdef int DMSHELL_LocalToLocalBegin(             # <<<<<<<<<<<<<<
@@ -44644,55 +46209,52 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("DMSHELL_LocalToLocalBegin", 0);
 
-  /* "PETSc/petscdmshell.pxi":143
+  /* "PETSc/petscdmshell.pxi":149
  *     PetscInsertMode mode,
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 149, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 149, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 149, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":144
+  /* "PETSc/petscdmshell.pxi":150
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)             # <<<<<<<<<<<<<<
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 150, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":145
+  /* "PETSc/petscdmshell.pxi":151
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)             # <<<<<<<<<<<<<<
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 151, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":146
+  /* "PETSc/petscdmshell.pxi":152
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -44701,7 +46263,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":147
+  /* "PETSc/petscdmshell.pxi":153
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -44710,19 +46272,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":148
+  /* "PETSc/petscdmshell.pxi":154
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2l_begin__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_l2l_begin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__l2l_begin__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":149
+  /* "PETSc/petscdmshell.pxi":155
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2l_begin__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -44738,18 +46300,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 155, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":150
+  /* "PETSc/petscdmshell.pxi":156
  *     context = Dm.get_attr('__l2l_begin__')
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -44766,7 +46328,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 156, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -44782,16 +46344,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -44800,7 +46362,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 156, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -44808,7 +46370,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 156, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_begin = __pyx_t_2;
@@ -44818,16 +46380,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":151
+  /* "PETSc/petscdmshell.pxi":157
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_mode); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 157, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 157, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -44841,30 +46403,30 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
   __Pyx_GIVEREF(((PyObject *)__pyx_v_lvec));
   PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_lvec));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 157, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 157, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 157, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 157, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 157, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_begin, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_begin, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 157, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":152
+  /* "PETSc/petscdmshell.pxi":158
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -44874,7 +46436,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":138
+  /* "PETSc/petscdmshell.pxi":144
  *     return 0
  * 
  * cdef int DMSHELL_LocalToLocalBegin(             # <<<<<<<<<<<<<<
@@ -44905,7 +46467,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":154
+/* "PETSc/petscdmshell.pxi":160
  *     return 0
  * 
  * cdef int DMSHELL_LocalToLocalEnd(             # <<<<<<<<<<<<<<
@@ -44931,55 +46493,52 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  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("DMSHELL_LocalToLocalEnd", 0);
 
-  /* "PETSc/petscdmshell.pxi":159
+  /* "PETSc/petscdmshell.pxi":165
  *     PetscInsertMode mode,
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 165, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 165, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 165, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":160
+  /* "PETSc/petscdmshell.pxi":166
  *     PetscVec l) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)             # <<<<<<<<<<<<<<
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 166, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":161
+  /* "PETSc/petscdmshell.pxi":167
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)             # <<<<<<<<<<<<<<
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":162
+  /* "PETSc/petscdmshell.pxi":168
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -44988,7 +46547,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":163
+  /* "PETSc/petscdmshell.pxi":169
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -44997,19 +46556,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":164
+  /* "PETSc/petscdmshell.pxi":170
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2l_end__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_l2l_end); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__l2l_end__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 170, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":165
+  /* "PETSc/petscdmshell.pxi":171
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2l_end__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -45025,18 +46584,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 171, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":166
+  /* "PETSc/petscdmshell.pxi":172
  *     context = Dm.get_attr('__l2l_end__')
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -45053,7 +46612,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 172, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -45069,16 +46628,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 172, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 172, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 172, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 172, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -45087,7 +46646,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 172, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -45095,7 +46654,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 172, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_end = __pyx_t_2;
@@ -45105,16 +46664,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":167
+  /* "PETSc/petscdmshell.pxi":173
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_mode); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -45128,30 +46687,30 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
   __Pyx_GIVEREF(((PyObject *)__pyx_v_lvec));
   PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_lvec));
   __pyx_t_6 = 0;
-  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 173, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_6 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_6);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 173, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
   } else {
-    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 173, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
   }
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_end, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_end, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":168
+  /* "PETSc/petscdmshell.pxi":174
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -45161,7 +46720,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":154
+  /* "PETSc/petscdmshell.pxi":160
  *     return 0
  * 
  * cdef int DMSHELL_LocalToLocalEnd(             # <<<<<<<<<<<<<<
@@ -45192,7 +46751,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":170
+/* "PETSc/petscdmshell.pxi":176
  *     return 0
  * 
  * cdef int DMSHELL_CreateMatrix(             # <<<<<<<<<<<<<<
@@ -45218,31 +46777,28 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   Mat __pyx_t_9;
-  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("DMSHELL_CreateMatrix", 0);
 
-  /* "PETSc/petscdmshell.pxi":173
+  /* "PETSc/petscdmshell.pxi":179
  *     PetscDM dm,
  *     PetscMat *cmat) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef Mat mat
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 179, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":176
+  /* "PETSc/petscdmshell.pxi":182
  *     cdef Mat mat
  * 
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -45251,7 +46807,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":177
+  /* "PETSc/petscdmshell.pxi":183
  * 
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -45260,19 +46816,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":178
+  /* "PETSc/petscdmshell.pxi":184
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_matrix__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (matrix, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_create_matrix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__create_matrix__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":179
+  /* "PETSc/petscdmshell.pxi":185
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_matrix__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -45288,18 +46844,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 185, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":180
+  /* "PETSc/petscdmshell.pxi":186
  *     context = Dm.get_attr('__create_matrix__')
  *     assert context is not None and type(context) is tuple
  *     (matrix, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -45316,7 +46872,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 186, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -45332,16 +46888,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -45350,7 +46906,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 186, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -45358,7 +46914,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 186, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_matrix = __pyx_t_2;
@@ -45368,44 +46924,44 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":181
+  /* "PETSc/petscdmshell.pxi":187
  *     assert context is not None and type(context) is tuple
  *     (matrix, args, kargs) = context
  *     mat = matrix(Dm, *args, **kargs)             # <<<<<<<<<<<<<<
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  */
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Dm));
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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[8]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 187, __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, 187, __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[8]; __pyx_lineno = 181; __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, 187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_matrix, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_matrix, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(8, 187, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":182
+  /* "PETSc/petscdmshell.pxi":188
  *     (matrix, args, kargs) = context
  *     mat = matrix(Dm, *args, **kargs)
  *     PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -45414,7 +46970,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":183
+  /* "PETSc/petscdmshell.pxi":189
  *     mat = matrix(Dm, *args, **kargs)
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat             # <<<<<<<<<<<<<<
@@ -45424,7 +46980,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
   __pyx_t_9 = __pyx_v_mat->mat;
   (__pyx_v_cmat[0]) = __pyx_t_9;
 
-  /* "PETSc/petscdmshell.pxi":184
+  /* "PETSc/petscdmshell.pxi":190
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  *     return 0             # <<<<<<<<<<<<<<
@@ -45434,7 +46990,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":170
+  /* "PETSc/petscdmshell.pxi":176
  *     return 0
  * 
  * cdef int DMSHELL_CreateMatrix(             # <<<<<<<<<<<<<<
@@ -45464,7 +47020,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":186
+/* "PETSc/petscdmshell.pxi":192
  *     return 0
  * 
  * cdef int DMSHELL_Coarsen(             # <<<<<<<<<<<<<<
@@ -45491,43 +47047,40 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   DM __pyx_t_9;
-  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("DMSHELL_Coarsen", 0);
 
-  /* "PETSc/petscdmshell.pxi":190
+  /* "PETSc/petscdmshell.pxi":196
  *     MPI_Comm comm,
  *     PetscDM *dmc) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef DM Dmc
  *     cdef Comm Comm = new_Comm(comm)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 196, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 196, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 196, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":192
+  /* "PETSc/petscdmshell.pxi":198
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef DM Dmc
  *     cdef Comm Comm = new_Comm(comm)             # <<<<<<<<<<<<<<
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_new_Comm(__pyx_v_comm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_new_Comm(__pyx_v_comm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_Comm = ((struct PyPetscCommObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":193
+  /* "PETSc/petscdmshell.pxi":199
  *     cdef DM Dmc
  *     cdef Comm Comm = new_Comm(comm)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -45536,7 +47089,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":194
+  /* "PETSc/petscdmshell.pxi":200
  *     cdef Comm Comm = new_Comm(comm)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -45545,19 +47098,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":195
+  /* "PETSc/petscdmshell.pxi":201
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__coarsen__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (coarsen, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_coarsen); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__coarsen__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 201, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":196
+  /* "PETSc/petscdmshell.pxi":202
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__coarsen__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -45573,18 +47126,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 202, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":197
+  /* "PETSc/petscdmshell.pxi":203
  *     context = Dm.get_attr('__coarsen__')
  *     assert context is not None and type(context) is tuple
  *     (coarsen, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -45601,7 +47154,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 203, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -45617,16 +47170,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 203, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 203, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 203, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 203, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -45635,7 +47188,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 203, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -45643,7 +47196,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 203, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_coarsen = __pyx_t_2;
@@ -45653,14 +47206,14 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":198
+  /* "PETSc/petscdmshell.pxi":204
  *     assert context is not None and type(context) is tuple
  *     (coarsen, args, kargs) = context
  *     Dmc = coarsen(Dm, Comm, *args, **kargs)             # <<<<<<<<<<<<<<
  *     PetscINCREF(Dmc.obj)
  *     dmc[0] = Dmc.dm
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -45668,32 +47221,32 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
   __Pyx_INCREF(((PyObject *)__pyx_v_Comm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Comm));
   PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Comm));
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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[8]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 204, __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, 204, __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[8]; __pyx_lineno = 198; __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, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_coarsen, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_coarsen, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 204, __pyx_L1_error)
   __pyx_v_Dmc = ((struct PyPetscDMObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":199
+  /* "PETSc/petscdmshell.pxi":205
  *     (coarsen, args, kargs) = context
  *     Dmc = coarsen(Dm, Comm, *args, **kargs)
  *     PetscINCREF(Dmc.obj)             # <<<<<<<<<<<<<<
@@ -45702,7 +47255,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dmc->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":200
+  /* "PETSc/petscdmshell.pxi":206
  *     Dmc = coarsen(Dm, Comm, *args, **kargs)
  *     PetscINCREF(Dmc.obj)
  *     dmc[0] = Dmc.dm             # <<<<<<<<<<<<<<
@@ -45712,7 +47265,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
   __pyx_t_9 = __pyx_v_Dmc->dm;
   (__pyx_v_dmc[0]) = __pyx_t_9;
 
-  /* "PETSc/petscdmshell.pxi":201
+  /* "PETSc/petscdmshell.pxi":207
  *     PetscINCREF(Dmc.obj)
  *     dmc[0] = Dmc.dm
  *     return 0             # <<<<<<<<<<<<<<
@@ -45722,7 +47275,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":186
+  /* "PETSc/petscdmshell.pxi":192
  *     return 0
  * 
  * cdef int DMSHELL_Coarsen(             # <<<<<<<<<<<<<<
@@ -45753,7 +47306,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":203
+/* "PETSc/petscdmshell.pxi":209
  *     return 0
  * 
  * cdef int DMSHELL_Refine(             # <<<<<<<<<<<<<<
@@ -45780,43 +47333,40 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   DM __pyx_t_9;
-  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("DMSHELL_Refine", 0);
 
-  /* "PETSc/petscdmshell.pxi":207
+  /* "PETSc/petscdmshell.pxi":213
  *     MPI_Comm comm,
  *     PetscDM *dmf) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef DM Dmf
  *     cdef Comm Comm = new_Comm(comm)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 213, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":209
+  /* "PETSc/petscdmshell.pxi":215
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef DM Dmf
  *     cdef Comm Comm = new_Comm(comm)             # <<<<<<<<<<<<<<
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_new_Comm(__pyx_v_comm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_new_Comm(__pyx_v_comm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 215, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_Comm = ((struct PyPetscCommObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":210
+  /* "PETSc/petscdmshell.pxi":216
  *     cdef DM Dmf
  *     cdef Comm Comm = new_Comm(comm)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -45825,7 +47375,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":211
+  /* "PETSc/petscdmshell.pxi":217
  *     cdef Comm Comm = new_Comm(comm)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -45834,19 +47384,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":212
+  /* "PETSc/petscdmshell.pxi":218
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__refine__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (refine, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_refine); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__refine__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 218, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":213
+  /* "PETSc/petscdmshell.pxi":219
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__refine__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -45862,18 +47412,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 219, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":214
+  /* "PETSc/petscdmshell.pxi":220
  *     context = Dm.get_attr('__refine__')
  *     assert context is not None and type(context) is tuple
  *     (refine, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -45890,7 +47440,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 220, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -45906,16 +47456,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -45924,7 +47474,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 220, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -45932,7 +47482,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 220, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_refine = __pyx_t_2;
@@ -45942,14 +47492,14 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":215
+  /* "PETSc/petscdmshell.pxi":221
  *     assert context is not None and type(context) is tuple
  *     (refine, args, kargs) = context
  *     Dmf = refine(Dm, Comm, *args, **kargs)             # <<<<<<<<<<<<<<
  *     PetscINCREF(Dmf.obj)
  *     dmf[0] = Dmf.dm
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -45957,32 +47507,32 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
   __Pyx_INCREF(((PyObject *)__pyx_v_Comm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Comm));
   PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Comm));
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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[8]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 221, __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, 221, __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[8]; __pyx_lineno = 215; __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, 221, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_refine, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_refine, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 221, __pyx_L1_error)
   __pyx_v_Dmf = ((struct PyPetscDMObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":216
+  /* "PETSc/petscdmshell.pxi":222
  *     (refine, args, kargs) = context
  *     Dmf = refine(Dm, Comm, *args, **kargs)
  *     PetscINCREF(Dmf.obj)             # <<<<<<<<<<<<<<
@@ -45991,7 +47541,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dmf->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":217
+  /* "PETSc/petscdmshell.pxi":223
  *     Dmf = refine(Dm, Comm, *args, **kargs)
  *     PetscINCREF(Dmf.obj)
  *     dmf[0] = Dmf.dm             # <<<<<<<<<<<<<<
@@ -46001,7 +47551,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
   __pyx_t_9 = __pyx_v_Dmf->dm;
   (__pyx_v_dmf[0]) = __pyx_t_9;
 
-  /* "PETSc/petscdmshell.pxi":218
+  /* "PETSc/petscdmshell.pxi":224
  *     PetscINCREF(Dmf.obj)
  *     dmf[0] = Dmf.dm
  *     return 0             # <<<<<<<<<<<<<<
@@ -46011,7 +47561,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":203
+  /* "PETSc/petscdmshell.pxi":209
  *     return 0
  * 
  * cdef int DMSHELL_Refine(             # <<<<<<<<<<<<<<
@@ -46042,7 +47592,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":220
+/* "PETSc/petscdmshell.pxi":226
  *     return 0
  * 
  * cdef int DMSHELL_CreateInterpolation(             # <<<<<<<<<<<<<<
@@ -46071,47 +47621,44 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   PyObject *(*__pyx_t_8)(PyObject *);
   Mat __pyx_t_9;
   Vec __pyx_t_10;
-  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("DMSHELL_CreateInterpolation", 0);
 
-  /* "PETSc/petscdmshell.pxi":225
+  /* "PETSc/petscdmshell.pxi":231
  *     PetscMat *cmat,
  *     PetscVec *cvec) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dmc = subtype_DM(dmc)()             # <<<<<<<<<<<<<<
  *     cdef DM Dmf = subtype_DM(dmf)()
  *     cdef Mat mat
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 231, __pyx_L1_error)
   __pyx_v_Dmc = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":226
+  /* "PETSc/petscdmshell.pxi":232
  *     PetscVec *cvec) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dmc = subtype_DM(dmc)()
  *     cdef DM Dmf = subtype_DM(dmf)()             # <<<<<<<<<<<<<<
  *     cdef Mat mat
  *     cdef Vec vec
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmf)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmf)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 232, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 232, __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_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 232, __pyx_L1_error)
   __pyx_v_Dmf = ((struct PyPetscDMObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":229
+  /* "PETSc/petscdmshell.pxi":235
  *     cdef Mat mat
  *     cdef Vec vec
  *     Dmc.dm = dmc             # <<<<<<<<<<<<<<
@@ -46120,7 +47667,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
   __pyx_v_Dmc->dm = __pyx_v_dmc;
 
-  /* "PETSc/petscdmshell.pxi":230
+  /* "PETSc/petscdmshell.pxi":236
  *     cdef Vec vec
  *     Dmc.dm = dmc
  *     PetscINCREF(Dmc.obj)             # <<<<<<<<<<<<<<
@@ -46129,7 +47676,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dmc->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":231
+  /* "PETSc/petscdmshell.pxi":237
  *     Dmc.dm = dmc
  *     PetscINCREF(Dmc.obj)
  *     Dmf.dm = dmf             # <<<<<<<<<<<<<<
@@ -46138,7 +47685,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
   __pyx_v_Dmf->dm = __pyx_v_dmf;
 
-  /* "PETSc/petscdmshell.pxi":232
+  /* "PETSc/petscdmshell.pxi":238
  *     PetscINCREF(Dmc.obj)
  *     Dmf.dm = dmf
  *     PetscINCREF(Dmf.obj)             # <<<<<<<<<<<<<<
@@ -46147,19 +47694,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dmf->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":233
+  /* "PETSc/petscdmshell.pxi":239
  *     Dmf.dm = dmf
  *     PetscINCREF(Dmf.obj)
  *     context = Dmc.get_attr('__create_interpolation__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (interpolation, args, kargs) = context
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dmc->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dmc), __pyx_k_create_interpolation); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dmc->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dmc), ((char *)"__create_interpolation__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":234
+  /* "PETSc/petscdmshell.pxi":240
  *     PetscINCREF(Dmf.obj)
  *     context = Dmc.get_attr('__create_interpolation__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -46175,18 +47722,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 240, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":235
+  /* "PETSc/petscdmshell.pxi":241
  *     context = Dmc.get_attr('__create_interpolation__')
  *     assert context is not None and type(context) is tuple
  *     (interpolation, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -46203,7 +47750,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 241, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -46219,16 +47766,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 241, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 241, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 241, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 241, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
@@ -46237,7 +47784,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     __Pyx_GOTREF(__pyx_t_2);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 241, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -46245,7 +47792,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 241, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_interpolation = __pyx_t_1;
@@ -46255,14 +47802,14 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":236
+  /* "PETSc/petscdmshell.pxi":242
  *     assert context is not None and type(context) is tuple
  *     (interpolation, args, kargs) = context
  *     mat, vec = interpolation(Dmc, Dmf, *args, **kargs)             # <<<<<<<<<<<<<<
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dmc));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dmc));
@@ -46270,24 +47817,24 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   __Pyx_INCREF(((PyObject *)__pyx_v_Dmf));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dmf));
   PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Dmf));
-  __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 242, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_2 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_2);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_2 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 242, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 242, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_interpolation, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_interpolation, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -46301,7 +47848,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 242, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -46314,15 +47861,15 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_1);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 242, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 242, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     #endif
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 242, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -46330,7 +47877,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     __Pyx_GOTREF(__pyx_t_2);
     index = 1; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_1);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(8, 242, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L8_unpacking_done;
@@ -46338,17 +47885,17 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 242, __pyx_L1_error)
     __pyx_L8_unpacking_done:;
   }
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(8, 242, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(8, 242, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":237
+  /* "PETSc/petscdmshell.pxi":243
  *     (interpolation, args, kargs) = context
  *     mat, vec = interpolation(Dmc, Dmf, *args, **kargs)
  *     PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -46357,7 +47904,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":238
+  /* "PETSc/petscdmshell.pxi":244
  *     mat, vec = interpolation(Dmc, Dmf, *args, **kargs)
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat             # <<<<<<<<<<<<<<
@@ -46367,7 +47914,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   __pyx_t_9 = __pyx_v_mat->mat;
   (__pyx_v_cmat[0]) = __pyx_t_9;
 
-  /* "PETSc/petscdmshell.pxi":239
+  /* "PETSc/petscdmshell.pxi":245
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  *     if vec is None:             # <<<<<<<<<<<<<<
@@ -46378,7 +47925,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/petscdmshell.pxi":240
+    /* "PETSc/petscdmshell.pxi":246
  *     cmat[0] = mat.mat
  *     if vec is None:
  *         cvec[0] = NULL             # <<<<<<<<<<<<<<
@@ -46386,20 +47933,28 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  *         PetscINCREF(vec.obj)
  */
     (__pyx_v_cvec[0]) = NULL;
+
+    /* "PETSc/petscdmshell.pxi":245
+ *     PetscINCREF(mat.obj)
+ *     cmat[0] = mat.mat
+ *     if vec is None:             # <<<<<<<<<<<<<<
+ *         cvec[0] = NULL
+ *     else:
+ */
     goto __pyx_L9;
   }
-  /*else*/ {
 
-    /* "PETSc/petscdmshell.pxi":242
+  /* "PETSc/petscdmshell.pxi":248
  *         cvec[0] = NULL
  *     else:
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
  *         cvec[0] = vec.vec
  *     return 0
  */
+  /*else*/ {
     __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-    /* "PETSc/petscdmshell.pxi":243
+    /* "PETSc/petscdmshell.pxi":249
  *     else:
  *         PetscINCREF(vec.obj)
  *         cvec[0] = vec.vec             # <<<<<<<<<<<<<<
@@ -46411,7 +47966,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   }
   __pyx_L9:;
 
-  /* "PETSc/petscdmshell.pxi":244
+  /* "PETSc/petscdmshell.pxi":250
  *         PetscINCREF(vec.obj)
  *         cvec[0] = vec.vec
  *     return 0             # <<<<<<<<<<<<<<
@@ -46421,7 +47976,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":220
+  /* "PETSc/petscdmshell.pxi":226
  *     return 0
  * 
  * cdef int DMSHELL_CreateInterpolation(             # <<<<<<<<<<<<<<
@@ -46453,7 +48008,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":246
+/* "PETSc/petscdmshell.pxi":252
  *     return 0
  * 
  * cdef int DMSHELL_CreateInjection(             # <<<<<<<<<<<<<<
@@ -46480,47 +48035,44 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   Mat __pyx_t_9;
-  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("DMSHELL_CreateInjection", 0);
 
-  /* "PETSc/petscdmshell.pxi":250
+  /* "PETSc/petscdmshell.pxi":256
  *     PetscDM dmf,
  *     PetscMat *cmat) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dmc = subtype_DM(dmc)()             # <<<<<<<<<<<<<<
  *     cdef DM Dmf = subtype_DM(dmf)()
  *     cdef Mat mat
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 256, __pyx_L1_error)
   __pyx_v_Dmc = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":251
+  /* "PETSc/petscdmshell.pxi":257
  *     PetscMat *cmat) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dmc = subtype_DM(dmc)()
  *     cdef DM Dmf = subtype_DM(dmf)()             # <<<<<<<<<<<<<<
  *     cdef Mat mat
  *     Dmc.dm = dmc
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmf)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmf)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 257, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 257, __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_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 257, __pyx_L1_error)
   __pyx_v_Dmf = ((struct PyPetscDMObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":253
+  /* "PETSc/petscdmshell.pxi":259
  *     cdef DM Dmf = subtype_DM(dmf)()
  *     cdef Mat mat
  *     Dmc.dm = dmc             # <<<<<<<<<<<<<<
@@ -46529,7 +48081,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
  */
   __pyx_v_Dmc->dm = __pyx_v_dmc;
 
-  /* "PETSc/petscdmshell.pxi":254
+  /* "PETSc/petscdmshell.pxi":260
  *     cdef Mat mat
  *     Dmc.dm = dmc
  *     PetscINCREF(Dmc.obj)             # <<<<<<<<<<<<<<
@@ -46538,7 +48090,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dmc->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":255
+  /* "PETSc/petscdmshell.pxi":261
  *     Dmc.dm = dmc
  *     PetscINCREF(Dmc.obj)
  *     Dmf.dm = dmf             # <<<<<<<<<<<<<<
@@ -46547,7 +48099,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
  */
   __pyx_v_Dmf->dm = __pyx_v_dmf;
 
-  /* "PETSc/petscdmshell.pxi":256
+  /* "PETSc/petscdmshell.pxi":262
  *     PetscINCREF(Dmc.obj)
  *     Dmf.dm = dmf
  *     PetscINCREF(Dmf.obj)             # <<<<<<<<<<<<<<
@@ -46556,19 +48108,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dmf->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":257
+  /* "PETSc/petscdmshell.pxi":263
  *     Dmf.dm = dmf
  *     PetscINCREF(Dmf.obj)
  *     context = Dmc.get_attr('__create_injection__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (injection, args, kargs) = context
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dmc->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dmc), __pyx_k_create_injection); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dmc->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dmc), ((char *)"__create_injection__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 263, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":258
+  /* "PETSc/petscdmshell.pxi":264
  *     PetscINCREF(Dmf.obj)
  *     context = Dmc.get_attr('__create_injection__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -46584,18 +48136,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 264, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":259
+  /* "PETSc/petscdmshell.pxi":265
  *     context = Dmc.get_attr('__create_injection__')
  *     assert context is not None and type(context) is tuple
  *     (injection, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -46612,7 +48164,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 265, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -46628,16 +48180,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
@@ -46646,7 +48198,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
     __Pyx_GOTREF(__pyx_t_2);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 265, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -46654,7 +48206,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 265, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_injection = __pyx_t_1;
@@ -46664,14 +48216,14 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":260
+  /* "PETSc/petscdmshell.pxi":266
  *     assert context is not None and type(context) is tuple
  *     (injection, args, kargs) = context
  *     mat = injection(Dmc, Dmf, *args, **kargs)             # <<<<<<<<<<<<<<
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dmc));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dmc));
@@ -46679,32 +48231,32 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
   __Pyx_INCREF(((PyObject *)__pyx_v_Dmf));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dmf));
   PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Dmf));
-  __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 266, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_2 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_2);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_2 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 266, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 266, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_injection, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_injection, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(8, 266, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":261
+  /* "PETSc/petscdmshell.pxi":267
  *     (injection, args, kargs) = context
  *     mat = injection(Dmc, Dmf, *args, **kargs)
  *     PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -46713,7 +48265,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":262
+  /* "PETSc/petscdmshell.pxi":268
  *     mat = injection(Dmc, Dmf, *args, **kargs)
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat             # <<<<<<<<<<<<<<
@@ -46723,7 +48275,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
   __pyx_t_9 = __pyx_v_mat->mat;
   (__pyx_v_cmat[0]) = __pyx_t_9;
 
-  /* "PETSc/petscdmshell.pxi":263
+  /* "PETSc/petscdmshell.pxi":269
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  *     return 0             # <<<<<<<<<<<<<<
@@ -46733,7 +48285,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":246
+  /* "PETSc/petscdmshell.pxi":252
  *     return 0
  * 
  * cdef int DMSHELL_CreateInjection(             # <<<<<<<<<<<<<<
@@ -46764,7 +48316,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":265
+/* "PETSc/petscdmshell.pxi":271
  *     return 0
  * 
  * cdef int DMSHELL_CreateFieldDecomposition(             # <<<<<<<<<<<<<<
@@ -46799,31 +48351,28 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   int __pyx_t_12;
   IS __pyx_t_13;
   DM __pyx_t_14;
-  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("DMSHELL_CreateFieldDecomposition", 0);
 
-  /* "PETSc/petscdmshell.pxi":271
+  /* "PETSc/petscdmshell.pxi":277
  *     PetscIS **islist,
  *     PetscDM **dmlist) except PETSC_ERR_PYTHON with gil:
  *     cdef DM Dm = subtype_DM(dm)()             # <<<<<<<<<<<<<<
  *     cdef int i
  *     cdef const_char *cname = NULL
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 277, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":273
+  /* "PETSc/petscdmshell.pxi":279
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef int i
  *     cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -46832,7 +48381,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/petscdmshell.pxi":274
+  /* "PETSc/petscdmshell.pxi":280
  *     cdef int i
  *     cdef const_char *cname = NULL
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -46841,7 +48390,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":275
+  /* "PETSc/petscdmshell.pxi":281
  *     cdef const_char *cname = NULL
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -46850,19 +48399,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":276
+  /* "PETSc/petscdmshell.pxi":282
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_field_decomp__')             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple
  *     (decomp, args, kargs) = context
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), __pyx_k_create_field_decomp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__create_field_decomp__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 282, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":277
+  /* "PETSc/petscdmshell.pxi":283
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_field_decomp__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -46878,18 +48427,18 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L3_bool_binop_done;
     }
-    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)((PyObject*)(&PyTuple_Type))));
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
     __pyx_t_4 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_4;
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 283, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":278
+  /* "PETSc/petscdmshell.pxi":284
  *     context = Dm.get_attr('__create_field_decomp__')
  *     assert context is not None and type(context) is tuple
  *     (decomp, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -46906,7 +48455,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 284, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -46922,16 +48471,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 284, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 284, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 284, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 284, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
     index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
@@ -46940,7 +48489,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __Pyx_GOTREF(__pyx_t_1);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 284, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -46948,7 +48497,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 284, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_decomp = __pyx_t_2;
@@ -46958,36 +48507,36 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":279
+  /* "PETSc/petscdmshell.pxi":285
  *     assert context is not None and type(context) is tuple
  *     (decomp, args, kargs) = context
  *     names, ises, dms = decomp(Dm, *args, **kargs)             # <<<<<<<<<<<<<<
  * 
  *     if clen != NULL:
  */
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 285, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Dm));
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 285, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 285, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 285, __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, 285, __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[8]; __pyx_lineno = 279; __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, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   }
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_decomp, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_decomp, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 285, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -47001,7 +48550,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 285, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -47017,17 +48566,17 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_7);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     #endif
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_8 = Py_TYPE(__pyx_t_9)->tp_iternext;
@@ -47037,7 +48586,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __Pyx_GOTREF(__pyx_t_2);
     index = 2; __pyx_t_7 = __pyx_t_8(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L7_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_7);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_9), 3) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_9), 3) < 0) __PYX_ERR(8, 285, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     goto __pyx_L8_unpacking_done;
@@ -47045,7 +48594,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[8]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 285, __pyx_L1_error)
     __pyx_L8_unpacking_done:;
   }
   __pyx_v_names = __pyx_t_1;
@@ -47055,7 +48604,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_v_dms = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "PETSc/petscdmshell.pxi":281
+  /* "PETSc/petscdmshell.pxi":287
  *     names, ises, dms = decomp(Dm, *args, **kargs)
  * 
  *     if clen != NULL:             # <<<<<<<<<<<<<<
@@ -47065,7 +48614,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_t_3 = ((__pyx_v_clen != NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/petscdmshell.pxi":282
+    /* "PETSc/petscdmshell.pxi":288
  * 
  *     if clen != NULL:
  *         if names is not None:             # <<<<<<<<<<<<<<
@@ -47076,19 +48625,27 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __pyx_t_4 = (__pyx_t_3 != 0);
     if (__pyx_t_4) {
 
-      /* "PETSc/petscdmshell.pxi":283
+      /* "PETSc/petscdmshell.pxi":289
  *     if clen != NULL:
  *         if names is not None:
  *             clen[0] = <PetscInt>len(names)             # <<<<<<<<<<<<<<
  *         elif ises is not None:
  *             clen[0] = <PetscInt>len(ises)
  */
-      __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 289, __pyx_L1_error)
       (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_10);
+
+      /* "PETSc/petscdmshell.pxi":288
+ * 
+ *     if clen != NULL:
+ *         if names is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(names)
+ *         elif ises is not None:
+ */
       goto __pyx_L10;
     }
 
-    /* "PETSc/petscdmshell.pxi":284
+    /* "PETSc/petscdmshell.pxi":290
  *         if names is not None:
  *             clen[0] = <PetscInt>len(names)
  *         elif ises is not None:             # <<<<<<<<<<<<<<
@@ -47099,19 +48656,27 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "PETSc/petscdmshell.pxi":285
+      /* "PETSc/petscdmshell.pxi":291
  *             clen[0] = <PetscInt>len(names)
  *         elif ises is not None:
  *             clen[0] = <PetscInt>len(ises)             # <<<<<<<<<<<<<<
  *         elif dms is not None:
  *             clen[0] = <PetscInt>len(dms)
  */
-      __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 291, __pyx_L1_error)
       (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_10);
+
+      /* "PETSc/petscdmshell.pxi":290
+ *         if names is not None:
+ *             clen[0] = <PetscInt>len(names)
+ *         elif ises is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(ises)
+ *         elif dms is not None:
+ */
       goto __pyx_L10;
     }
 
-    /* "PETSc/petscdmshell.pxi":286
+    /* "PETSc/petscdmshell.pxi":292
  *         elif ises is not None:
  *             clen[0] = <PetscInt>len(ises)
  *         elif dms is not None:             # <<<<<<<<<<<<<<
@@ -47122,34 +48687,48 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __pyx_t_4 = (__pyx_t_3 != 0);
     if (__pyx_t_4) {
 
-      /* "PETSc/petscdmshell.pxi":287
+      /* "PETSc/petscdmshell.pxi":293
  *             clen[0] = <PetscInt>len(ises)
  *         elif dms is not None:
  *             clen[0] = <PetscInt>len(dms)             # <<<<<<<<<<<<<<
  *         else:
  *             clen[0] = 0
  */
-      __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 293, __pyx_L1_error)
       (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_10);
+
+      /* "PETSc/petscdmshell.pxi":292
+ *         elif ises is not None:
+ *             clen[0] = <PetscInt>len(ises)
+ *         elif dms is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(dms)
+ *         else:
+ */
       goto __pyx_L10;
     }
-    /*else*/ {
 
-      /* "PETSc/petscdmshell.pxi":289
+    /* "PETSc/petscdmshell.pxi":295
  *             clen[0] = <PetscInt>len(dms)
  *         else:
  *             clen[0] = 0             # <<<<<<<<<<<<<<
  * 
  *     if namelist != NULL and names is not None:
  */
+    /*else*/ {
       (__pyx_v_clen[0]) = 0;
     }
     __pyx_L10:;
-    goto __pyx_L9;
+
+    /* "PETSc/petscdmshell.pxi":287
+ *     names, ises, dms = decomp(Dm, *args, **kargs)
+ * 
+ *     if clen != NULL:             # <<<<<<<<<<<<<<
+ *         if names is not None:
+ *             clen[0] = <PetscInt>len(names)
+ */
   }
-  __pyx_L9:;
 
-  /* "PETSc/petscdmshell.pxi":291
+  /* "PETSc/petscdmshell.pxi":297
  *             clen[0] = 0
  * 
  *     if namelist != NULL and names is not None:             # <<<<<<<<<<<<<<
@@ -47168,56 +48747,62 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_L12_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "PETSc/petscdmshell.pxi":292
+    /* "PETSc/petscdmshell.pxi":298
  * 
  *     if namelist != NULL and names is not None:
  *         CHKERR( PetscMalloc(len(names)*sizeof(char**), namelist) )             # <<<<<<<<<<<<<<
  *         for i in range(len(names)):
  *             names[i] = str2bytes(names[i], &cname)
  */
-    __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_10 * (sizeof(char **))), __pyx_v_namelist)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 298, __pyx_L1_error)
+    __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_10 * (sizeof(char **))), __pyx_v_namelist)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(8, 298, __pyx_L1_error)
 
-    /* "PETSc/petscdmshell.pxi":293
+    /* "PETSc/petscdmshell.pxi":299
  *     if namelist != NULL and names is not None:
  *         CHKERR( PetscMalloc(len(names)*sizeof(char**), namelist) )
  *         for i in range(len(names)):             # <<<<<<<<<<<<<<
  *             names[i] = str2bytes(names[i], &cname)
  *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )
  */
-    __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 299, __pyx_L1_error)
     for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
       __pyx_v_i = __pyx_t_11;
 
-      /* "PETSc/petscdmshell.pxi":294
+      /* "PETSc/petscdmshell.pxi":300
  *         CHKERR( PetscMalloc(len(names)*sizeof(char**), namelist) )
  *         for i in range(len(names)):
  *             names[i] = str2bytes(names[i], &cname)             # <<<<<<<<<<<<<<
  *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )
  * 
  */
-      __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_names, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_names, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 300, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_t_6, (&__pyx_v_cname)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_t_6, (&__pyx_v_cname)); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 300, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      if (unlikely(__Pyx_SetItemInt(__pyx_v_names, __pyx_v_i, __pyx_t_7, int, 1, __Pyx_PyInt_From_int, 0, 1, 1) < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(__Pyx_SetItemInt(__pyx_v_names, __pyx_v_i, __pyx_t_7, int, 1, __Pyx_PyInt_From_int, 0, 1, 1) < 0)) __PYX_ERR(8, 300, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "PETSc/petscdmshell.pxi":295
+      /* "PETSc/petscdmshell.pxi":301
  *         for i in range(len(names)):
  *             names[i] = str2bytes(names[i], &cname)
  *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )             # <<<<<<<<<<<<<<
  * 
  *     if islist != NULL and ises is not None:
  */
-      __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscStrallocpy(__pyx_v_cname, (&((__pyx_v_namelist[0])[__pyx_v_i])))); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscStrallocpy(__pyx_v_cname, (&((__pyx_v_namelist[0])[__pyx_v_i])))); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(8, 301, __pyx_L1_error)
     }
-    goto __pyx_L11;
+
+    /* "PETSc/petscdmshell.pxi":297
+ *             clen[0] = 0
+ * 
+ *     if namelist != NULL and names is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(names)*sizeof(char**), namelist) )
+ *         for i in range(len(names)):
+ */
   }
-  __pyx_L11:;
 
-  /* "PETSc/petscdmshell.pxi":297
+  /* "PETSc/petscdmshell.pxi":303
  *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )
  * 
  *     if islist != NULL and ises is not None:             # <<<<<<<<<<<<<<
@@ -47236,59 +48821,65 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_L17_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "PETSc/petscdmshell.pxi":298
+    /* "PETSc/petscdmshell.pxi":304
  * 
  *     if islist != NULL and ises is not None:
  *         CHKERR( PetscMalloc(len(ises)*sizeof(PetscIS), islist) )             # <<<<<<<<<<<<<<
  *         for i in range(len(ises)):
  *             islist[0][i] = (<IS?>ises[i]).iset
  */
-    __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_10 * (sizeof(IS))), __pyx_v_islist)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 304, __pyx_L1_error)
+    __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_10 * (sizeof(IS))), __pyx_v_islist)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(8, 304, __pyx_L1_error)
 
-    /* "PETSc/petscdmshell.pxi":299
+    /* "PETSc/petscdmshell.pxi":305
  *     if islist != NULL and ises is not None:
  *         CHKERR( PetscMalloc(len(ises)*sizeof(PetscIS), islist) )
  *         for i in range(len(ises)):             # <<<<<<<<<<<<<<
  *             islist[0][i] = (<IS?>ises[i]).iset
  *             PetscINCREF((<IS?>ises[i]).obj)
  */
-    __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 305, __pyx_L1_error)
     for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
       __pyx_v_i = __pyx_t_11;
 
-      /* "PETSc/petscdmshell.pxi":300
+      /* "PETSc/petscdmshell.pxi":306
  *         CHKERR( PetscMalloc(len(ises)*sizeof(PetscIS), islist) )
  *         for i in range(len(ises)):
  *             islist[0][i] = (<IS?>ises[i]).iset             # <<<<<<<<<<<<<<
  *             PetscINCREF((<IS?>ises[i]).obj)
  * 
  */
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_ises, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_ises, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 306, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 306, __pyx_L1_error)
       __pyx_t_13 = ((struct PyPetscISObject *)__pyx_t_7)->iset;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       ((__pyx_v_islist[0])[__pyx_v_i]) = __pyx_t_13;
 
-      /* "PETSc/petscdmshell.pxi":301
+      /* "PETSc/petscdmshell.pxi":307
  *         for i in range(len(ises)):
  *             islist[0][i] = (<IS?>ises[i]).iset
  *             PetscINCREF((<IS?>ises[i]).obj)             # <<<<<<<<<<<<<<
  * 
  *     if dmlist != NULL and dms is not None:
  */
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_ises, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_ises, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 307, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 307, __pyx_L1_error)
       __pyx_f_8petsc4py_5PETSc_PetscINCREF(((struct PyPetscISObject *)__pyx_t_7)->__pyx_base.obj);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
-    goto __pyx_L16;
+
+    /* "PETSc/petscdmshell.pxi":303
+ *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )
+ * 
+ *     if islist != NULL and ises is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(ises)*sizeof(PetscIS), islist) )
+ *         for i in range(len(ises)):
+ */
   }
-  __pyx_L16:;
 
-  /* "PETSc/petscdmshell.pxi":303
+  /* "PETSc/petscdmshell.pxi":309
  *             PetscINCREF((<IS?>ises[i]).obj)
  * 
  *     if dmlist != NULL and dms is not None:             # <<<<<<<<<<<<<<
@@ -47307,66 +48898,75 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_L22_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "PETSc/petscdmshell.pxi":304
+    /* "PETSc/petscdmshell.pxi":310
  * 
  *     if dmlist != NULL and dms is not None:
  *         CHKERR( PetscMalloc(len(dms)*sizeof(PetscDM), dmlist) )             # <<<<<<<<<<<<<<
  *         for i in range(len(dms)):
  *             dmlist[0][i] = (<DM?>dms[i]).dm
  */
-    __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_10 * (sizeof(DM))), __pyx_v_dmlist)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 310, __pyx_L1_error)
+    __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_10 * (sizeof(DM))), __pyx_v_dmlist)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(8, 310, __pyx_L1_error)
 
-    /* "PETSc/petscdmshell.pxi":305
+    /* "PETSc/petscdmshell.pxi":311
  *     if dmlist != NULL and dms is not None:
  *         CHKERR( PetscMalloc(len(dms)*sizeof(PetscDM), dmlist) )
  *         for i in range(len(dms)):             # <<<<<<<<<<<<<<
  *             dmlist[0][i] = (<DM?>dms[i]).dm
  *             PetscINCREF((<DM?>dms[i]).obj)
  */
-    __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(8, 311, __pyx_L1_error)
     for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
       __pyx_v_i = __pyx_t_11;
 
-      /* "PETSc/petscdmshell.pxi":306
+      /* "PETSc/petscdmshell.pxi":312
  *         CHKERR( PetscMalloc(len(dms)*sizeof(PetscDM), dmlist) )
  *         for i in range(len(dms)):
  *             dmlist[0][i] = (<DM?>dms[i]).dm             # <<<<<<<<<<<<<<
  *             PetscINCREF((<DM?>dms[i]).obj)
  *     return 0
  */
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dms, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dms, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 312, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_DM)))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(8, 312, __pyx_L1_error)
       __pyx_t_14 = ((struct PyPetscDMObject *)__pyx_t_7)->dm;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       ((__pyx_v_dmlist[0])[__pyx_v_i]) = __pyx_t_14;
 
-      /* "PETSc/petscdmshell.pxi":307
+      /* "PETSc/petscdmshell.pxi":313
  *         for i in range(len(dms)):
  *             dmlist[0][i] = (<DM?>dms[i]).dm
  *             PetscINCREF((<DM?>dms[i]).obj)             # <<<<<<<<<<<<<<
  *     return 0
+ * 
  */
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dms, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dms, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 313, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_DM)))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(8, 313, __pyx_L1_error)
       __pyx_f_8petsc4py_5PETSc_PetscINCREF(((struct PyPetscDMObject *)__pyx_t_7)->__pyx_base.obj);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
-    goto __pyx_L21;
+
+    /* "PETSc/petscdmshell.pxi":309
+ *             PetscINCREF((<IS?>ises[i]).obj)
+ * 
+ *     if dmlist != NULL and dms is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(dms)*sizeof(PetscDM), dmlist) )
+ *         for i in range(len(dms)):
+ */
   }
-  __pyx_L21:;
 
-  /* "PETSc/petscdmshell.pxi":308
+  /* "PETSc/petscdmshell.pxi":314
  *             dmlist[0][i] = (<DM?>dms[i]).dm
  *             PetscINCREF((<DM?>dms[i]).obj)
  *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int DMSHELL_CreateSubDM(
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":265
+  /* "PETSc/petscdmshell.pxi":271
  *     return 0
  * 
  * cdef int DMSHELL_CreateFieldDecomposition(             # <<<<<<<<<<<<<<
@@ -47399,6 +48999,356 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   return __pyx_r;
 }
 
+/* "PETSc/petscdmshell.pxi":316
+ *     return 0
+ * 
+ * cdef int DMSHELL_CreateSubDM(             # <<<<<<<<<<<<<<
+ *     PetscDM cdm,
+ *     PetscInt numFields,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt __pyx_v_numFields, PetscInt *__pyx_v_cfields, IS *__pyx_v_ciset, DM *__pyx_v_csubdm) {
+  struct PyPetscDMObject *__pyx_v_dm = 0;
+  struct PyPetscISObject *__pyx_v_iset = 0;
+  struct PyPetscDMObject *__pyx_v_subdm = 0;
+  PyObject *__pyx_v_context = NULL;
+  PyObject *__pyx_v_create_subdm = NULL;
+  PyObject *__pyx_v_args = NULL;
+  PyObject *__pyx_v_kargs = NULL;
+  PyArrayObject *__pyx_v_fields = NULL;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  IS __pyx_t_9;
+  DM __pyx_t_10;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("DMSHELL_CreateSubDM", 0);
+
+  /* "PETSc/petscdmshell.pxi":322
+ *     PetscIS *ciset,
+ *     PetscDM *csubdm) except PETSC_ERR_PYTHON with gil:
+ *     cdef DM dm = subtype_DM(cdm)()             # <<<<<<<<<<<<<<
+ *     cdef IS iset
+ *     cdef DM subdm
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_cdm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 322, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 322, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 322, __pyx_L1_error)
+  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/petscdmshell.pxi":325
+ *     cdef IS iset
+ *     cdef DM subdm
+ *     dm.dm = cdm             # <<<<<<<<<<<<<<
+ *     PetscINCREF(dm.obj)
+ *     context = dm.get_attr('__create_subdm__')
+ */
+  __pyx_v_dm->dm = __pyx_v_cdm;
+
+  /* "PETSc/petscdmshell.pxi":326
+ *     cdef DM subdm
+ *     dm.dm = cdm
+ *     PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
+ *     context = dm.get_attr('__create_subdm__')
+ *     assert context is not None and type(context) is tuple
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
+
+  /* "PETSc/petscdmshell.pxi":327
+ *     dm.dm = cdm
+ *     PetscINCREF(dm.obj)
+ *     context = dm.get_attr('__create_subdm__')             # <<<<<<<<<<<<<<
+ *     assert context is not None and type(context) is tuple
+ *     (create_subdm, args, kargs) = context
+ */
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_dm), ((char *)"__create_subdm__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 327, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_context = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "PETSc/petscdmshell.pxi":328
+ *     PetscINCREF(dm.obj)
+ *     context = dm.get_attr('__create_subdm__')
+ *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
+ *     (create_subdm, args, kargs) = context
+ * 
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = (__pyx_v_context != Py_None);
+    __pyx_t_5 = (__pyx_t_4 != 0);
+    if (__pyx_t_5) {
+    } else {
+      __pyx_t_3 = __pyx_t_5;
+      goto __pyx_L3_bool_binop_done;
+    }
+    __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
+    __pyx_t_4 = (__pyx_t_5 != 0);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_L3_bool_binop_done:;
+    if (unlikely(!__pyx_t_3)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(8, 328, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscdmshell.pxi":329
+ *     context = dm.get_attr('__create_subdm__')
+ *     assert context is not None and type(context) is tuple
+ *     (create_subdm, args, kargs) = context             # <<<<<<<<<<<<<<
+ * 
+ *     fields = array_i(numFields, cfields)
+ */
+  if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
+    PyObject* sequence = __pyx_v_context;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    Py_ssize_t size = Py_SIZE(sequence);
+    #else
+    Py_ssize_t size = PySequence_Size(sequence);
+    #endif
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(8, 329, __pyx_L1_error)
+    }
+    #if CYTHON_COMPILING_IN_CPYTHON
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_6);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 329, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 329, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 329, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    #endif
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 329, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_1);
+    index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_6);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 329, __pyx_L1_error)
+    __pyx_t_8 = NULL;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    goto __pyx_L6_unpacking_done;
+    __pyx_L5_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __pyx_t_8 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(8, 329, __pyx_L1_error)
+    __pyx_L6_unpacking_done:;
+  }
+  __pyx_v_create_subdm = __pyx_t_2;
+  __pyx_t_2 = 0;
+  __pyx_v_args = __pyx_t_1;
+  __pyx_t_1 = 0;
+  __pyx_v_kargs = __pyx_t_6;
+  __pyx_t_6 = 0;
+
+  /* "PETSc/petscdmshell.pxi":331
+ *     (create_subdm, args, kargs) = context
+ * 
+ *     fields = array_i(numFields, cfields)             # <<<<<<<<<<<<<<
+ * 
+ *     iset, subdm = create_subdm(dm, fields, *args, **kargs)
+ */
+  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_numFields, __pyx_v_cfields)); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 331, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_v_fields = ((PyArrayObject *)__pyx_t_6);
+  __pyx_t_6 = 0;
+
+  /* "PETSc/petscdmshell.pxi":333
+ *     fields = array_i(numFields, cfields)
+ * 
+ *     iset, subdm = create_subdm(dm, fields, *args, **kargs)             # <<<<<<<<<<<<<<
+ * 
+ *     PetscINCREF(iset.obj)
+ */
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 333, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_dm));
+  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_dm));
+  __Pyx_INCREF(((PyObject *)__pyx_v_fields));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_fields));
+  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_fields));
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 333, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 333, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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_ERR(8, 333, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 333, __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_ERR(8, 333, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  }
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_create_subdm, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 333, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
+    PyObject* sequence = __pyx_t_6;
+    #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(8, 333, __pyx_L1_error)
+    }
+    #if CYTHON_COMPILING_IN_CPYTHON
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_2);
+    #else
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 333, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 333, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    #endif
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 333, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
+    index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_1);
+    index = 1; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(8, 333, __pyx_L1_error)
+    __pyx_t_8 = NULL;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    goto __pyx_L8_unpacking_done;
+    __pyx_L7_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __pyx_t_8 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(8, 333, __pyx_L1_error)
+    __pyx_L8_unpacking_done:;
+  }
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS))))) __PYX_ERR(8, 333, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 333, __pyx_L1_error)
+  __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_v_subdm = ((struct PyPetscDMObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/petscdmshell.pxi":335
+ *     iset, subdm = create_subdm(dm, fields, *args, **kargs)
+ * 
+ *     PetscINCREF(iset.obj)             # <<<<<<<<<<<<<<
+ *     PetscINCREF(subdm.obj)
+ *     ciset[0] = iset.iset
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_iset->__pyx_base.obj);
+
+  /* "PETSc/petscdmshell.pxi":336
+ * 
+ *     PetscINCREF(iset.obj)
+ *     PetscINCREF(subdm.obj)             # <<<<<<<<<<<<<<
+ *     ciset[0] = iset.iset
+ *     csubdm[0] = subdm.dm
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_subdm->__pyx_base.obj);
+
+  /* "PETSc/petscdmshell.pxi":337
+ *     PetscINCREF(iset.obj)
+ *     PetscINCREF(subdm.obj)
+ *     ciset[0] = iset.iset             # <<<<<<<<<<<<<<
+ *     csubdm[0] = subdm.dm
+ */
+  __pyx_t_9 = __pyx_v_iset->iset;
+  (__pyx_v_ciset[0]) = __pyx_t_9;
+
+  /* "PETSc/petscdmshell.pxi":338
+ *     PetscINCREF(subdm.obj)
+ *     ciset[0] = iset.iset
+ *     csubdm[0] = subdm.dm             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_10 = __pyx_v_subdm->dm;
+  (__pyx_v_csubdm[0]) = __pyx_t_10;
+
+  /* "PETSc/petscdmshell.pxi":316
+ *     return 0
+ * 
+ * cdef int DMSHELL_CreateSubDM(             # <<<<<<<<<<<<<<
+ *     PetscDM cdm,
+ *     PetscInt numFields,
+ */
+
+  /* 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_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMSHELL_CreateSubDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
+  __Pyx_XDECREF((PyObject *)__pyx_v_iset);
+  __Pyx_XDECREF((PyObject *)__pyx_v_subdm);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_create_subdm);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XDECREF((PyObject *)__pyx_v_fields);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
 /* "PETSc/Error.pyx":7
  *     _traceback_ = []
  * 
@@ -47414,9 +49364,6 @@ static PyMethodDef __pyx_mdef_8petsc4py_5PETSc_5Error_1__init__ = {"__init__", (
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_self = 0;
   int __pyx_v_ierr;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
@@ -47444,7 +49391,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_1__init__(PyObject *__pyx_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 7, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -47456,14 +49403,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_1__init__(PyObject *__pyx_self
     }
     __pyx_v_self = values[0];
     if (values[1]) {
-      __pyx_v_ierr = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_ierr == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_ierr = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_ierr == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7, __pyx_L3_error)
     } else {
       __pyx_v_ierr = ((int)((int)0));
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 7, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Error.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -47485,9 +49432,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObjec
   PyObject *__pyx_t_4 = NULL;
   Py_ssize_t __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
   /* "PETSc/Error.pyx":8
@@ -47497,9 +49441,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObjec
  *         RuntimeError.__init__(self, self.ierr)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_ierr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_ierr, __pyx_t_1) < 0) __PYX_ERR(1, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Error.pyx":9
@@ -47509,9 +49453,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObjec
  * 
  *     def __nonzero__(self):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_RuntimeError, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_RuntimeError, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ierr); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ierr); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   __pyx_t_5 = 0;
@@ -47525,7 +49469,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObjec
       __pyx_t_5 = 1;
     }
   }
-  __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   if (__pyx_t_4) {
     __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -47536,7 +49480,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObjec
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -47581,9 +49525,6 @@ static char __pyx_doc_8petsc4py_5PETSc_5Error_2__nonzero__[] = "Error.__nonzero_
 static PyMethodDef __pyx_mdef_8petsc4py_5PETSc_5Error_3__nonzero__ = {"__nonzero__", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5Error_3__nonzero__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5Error_2__nonzero__};
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_3__nonzero__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_self = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__nonzero__ (wrapper)", 0);
@@ -47605,7 +49546,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_3__nonzero__(PyObject *__pyx_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__nonzero__") < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__nonzero__") < 0)) __PYX_ERR(1, 11, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -47616,7 +49557,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_3__nonzero__(PyObject *__pyx_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__nonzero__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__nonzero__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 11, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Error.__nonzero__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -47635,9 +49576,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_2__nonzero__(CYTHON_UNUSED PyO
   __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("__nonzero__", 0);
 
   /* "PETSc/Error.pyx":12
@@ -47647,9 +49585,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_2__nonzero__(CYTHON_UNUSED PyO
  *         return ierr != 0
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ierr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_ierr = __pyx_t_2;
 
@@ -47661,7 +49599,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_2__nonzero__(CYTHON_UNUSED PyO
  *     def __repr__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_ierr != 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_ierr != 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -47700,9 +49638,6 @@ static char __pyx_doc_8petsc4py_5PETSc_5Error_4__repr__[] = "Error.__repr__(self
 static PyMethodDef __pyx_mdef_8petsc4py_5PETSc_5Error_5__repr__ = {"__repr__", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5Error_5__repr__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5Error_4__repr__};
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_5__repr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_self = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
@@ -47724,7 +49659,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_5__repr__(PyObject *__pyx_self
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__repr__") < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__repr__") < 0)) __PYX_ERR(1, 15, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -47735,7 +49670,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_5__repr__(PyObject *__pyx_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 15, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Error.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -47753,9 +49688,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_4__repr__(CYTHON_UNUSED PyObje
   __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("__repr__", 0);
 
   /* "PETSc/Error.pyx":16
@@ -47766,9 +49698,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_4__repr__(CYTHON_UNUSED PyObje
  *     def __str__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ierr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_PETSc_Error_d, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_PETSc_Error_d, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -47809,9 +49741,6 @@ static char __pyx_doc_8petsc4py_5PETSc_5Error_6__str__[] = "Error.__str__(self)"
 static PyMethodDef __pyx_mdef_8petsc4py_5PETSc_5Error_7__str__ = {"__str__", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5Error_7__str__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5Error_6__str__};
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_7__str__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_self = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
@@ -47833,7 +49762,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_7__str__(PyObject *__pyx_self,
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__str__") < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__str__") < 0)) __PYX_ERR(1, 18, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -47844,7 +49773,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_7__str__(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 18, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Error.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -47876,9 +49805,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   int __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__str__", 0);
 
   /* "PETSc/Error.pyx":19
@@ -47918,9 +49844,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
  *         tblist = ['error code %d' % self.ierr]
  */
     MPI_Comm_rank(PETSC_COMM_WORLD, (&__pyx_v_crank));
-    goto __pyx_L3;
+
+    /* "PETSc/Error.pyx":20
+ *     def __str__(self):
+ *         cdef int csize=1, crank=0
+ *         if not (<int>PetscFinalizeCalled):             # <<<<<<<<<<<<<<
+ *             MPI_Comm_size(PETSC_COMM_WORLD, &csize)
+ *             MPI_Comm_rank(PETSC_COMM_WORLD, &crank)
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/Error.pyx":23
  *             MPI_Comm_size(PETSC_COMM_WORLD, &csize)
@@ -47929,17 +49861,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
  *         tblist = ['error code %d' % self.ierr]
  *         for entry in self._traceback_:
  */
-  __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_csize - 1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_csize - 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(1, 23, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_5 = __pyx_v_crank;
   __pyx_v_width = __pyx_t_4;
@@ -47952,12 +49884,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
  *         for entry in self._traceback_:
  *             tbline = '[%*d] %s' % (width, rank, entry)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ierr); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ierr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_error_code_d, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_error_code_d, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_3);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
@@ -47972,15 +49904,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
  *             tbline = '[%*d] %s' % (width, rank, entry)
  *             tblist.append(tbline)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_traceback); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_traceback); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
     __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 25, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 25, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
@@ -47988,17 +49920,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(1, 25, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 25, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(1, 25, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 25, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -48008,7 +49940,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(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[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(1, 25, __pyx_L1_error)
         }
         break;
       }
@@ -48024,11 +49956,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
  *             tblist.append(tbline)
  *         return '\n'.join(tblist)
  */
-    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_width); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 26, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 26, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 26, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
@@ -48039,7 +49971,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
     PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_entry);
     __pyx_t_2 = 0;
     __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_d_s, __pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_d_s, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 26, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_XDECREF_SET(__pyx_v_tbline, ((PyObject*)__pyx_t_7));
@@ -48052,7 +49984,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
  *         return '\n'.join(tblist)
  * 
  */
-    __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_tblist, __pyx_v_tbline); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_tblist, __pyx_v_tbline); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(1, 27, __pyx_L1_error)
 
     /* "PETSc/Error.pyx":25
  *         width, rank = len(str(csize-1)), crank
@@ -48072,7 +50004,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyString_Join(__pyx_kp_s__32, __pyx_v_tblist); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyString_Join(__pyx_kp_s__32, __pyx_v_tblist); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 28, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -48103,21 +50035,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":7
- *     cdef object _prefix
+/* "PETSc/Options.pyx":8
+ *     cdef object       _prefix
  * 
  *     def __init__(self, prefix=None):             # <<<<<<<<<<<<<<
+ *         self.opt = NULL
  *         self.prefix  = prefix
- * 
  */
 
 /* Python wrapper */
 static int __pyx_pw_8petsc4py_5PETSc_7Options_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static int __pyx_pw_8petsc4py_5PETSc_7Options_1__init__(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;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
@@ -48142,7 +50071,7 @@ static int __pyx_pw_8petsc4py_5PETSc_7Options_1__init__(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(24, 8, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -48155,7 +50084,7 @@ static int __pyx_pw_8petsc4py_5PETSc_7Options_1__init__(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 8, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -48171,26 +50100,32 @@ static int __pyx_pw_8petsc4py_5PETSc_7Options_1__init__(PyObject *__pyx_v_self,
 static int __pyx_pf_8petsc4py_5PETSc_7Options___init__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "PETSc/Options.pyx":8
+  /* "PETSc/Options.pyx":9
  * 
  *     def __init__(self, prefix=None):
+ *         self.opt = NULL             # <<<<<<<<<<<<<<
+ *         self.prefix  = prefix
+ * 
+ */
+  __pyx_v_self->opt = NULL;
+
+  /* "PETSc/Options.pyx":10
+ *     def __init__(self, prefix=None):
+ *         self.opt = NULL
  *         self.prefix  = prefix             # <<<<<<<<<<<<<<
  * 
- *     def __contains__(self, item):
+ *     def __dealloc__(self):
  */
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix, __pyx_v_prefix) < 0) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix, __pyx_v_prefix) < 0) __PYX_ERR(24, 10, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":7
- *     cdef object _prefix
+  /* "PETSc/Options.pyx":8
+ *     cdef object       _prefix
  * 
  *     def __init__(self, prefix=None):             # <<<<<<<<<<<<<<
+ *         self.opt = NULL
  *         self.prefix  = prefix
- * 
  */
 
   /* function exit code */
@@ -48204,28 +50139,90 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options___init__(struct __pyx_obj_8petsc4p
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":10
+/* "PETSc/Options.pyx":12
+ *         self.prefix  = prefix
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
+ */
+
+/* Python wrapper */
+static void __pyx_pw_8petsc4py_5PETSc_7Options_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pw_8petsc4py_5PETSc_7Options_3__dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+  __pyx_pf_8petsc4py_5PETSc_7Options_2__dealloc__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_pf_8petsc4py_5PETSc_7Options_2__dealloc__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+  /* "PETSc/Options.pyx":13
+ * 
+ *     def __dealloc__(self):
+ *         if self.opt == NULL: return             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
+ * 
+ */
+  __pyx_t_1 = ((__pyx_v_self->opt == NULL) != 0);
+  if (__pyx_t_1) {
+    goto __pyx_L0;
+  }
+
+  /* "PETSc/Options.pyx":14
+ *     def __dealloc__(self):
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )             # <<<<<<<<<<<<<<
+ * 
+ *     def __contains__(self, item):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsDestroy((&__pyx_v_self->opt))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(24, 14, __pyx_L1_error)
+
+  /* "PETSc/Options.pyx":12
  *         self.prefix  = prefix
  * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
+ */
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_WriteUnraisable("petsc4py.PETSc.Options.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "PETSc/Options.pyx":16
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
+ * 
  *     def __contains__(self, item):             # <<<<<<<<<<<<<<
  *         return self.hasName(item)
  * 
  */
 
 /* Python wrapper */
-static int __pyx_pw_8petsc4py_5PETSc_7Options_3__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
-static int __pyx_pw_8petsc4py_5PETSc_7Options_3__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
+static int __pyx_pw_8petsc4py_5PETSc_7Options_5__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
+static int __pyx_pw_8petsc4py_5PETSc_7Options_5__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_2__contains__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), ((PyObject *)__pyx_v_item));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_4__contains__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), ((PyObject *)__pyx_v_item));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8petsc4py_5PETSc_7Options_2__contains__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item) {
+static int __pyx_pf_8petsc4py_5PETSc_7Options_4__contains__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -48233,19 +50230,16 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_2__contains__(struct __pyx_obj_8pe
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__contains__", 0);
 
-  /* "PETSc/Options.pyx":11
+  /* "PETSc/Options.pyx":17
  * 
  *     def __contains__(self, item):
  *         return self.hasName(item)             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, item):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_hasName); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_hasName); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -48258,27 +50252,27 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_2__contains__(struct __pyx_obj_8pe
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 17, __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[24]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 17, __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_item);
     __Pyx_GIVEREF(__pyx_v_item);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_item);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 11; __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(24, 17, __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_t_5 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(24, 17, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "PETSc/Options.pyx":10
- *         self.prefix  = prefix
+  /* "PETSc/Options.pyx":16
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
  * 
  *     def __contains__(self, item):             # <<<<<<<<<<<<<<
  *         return self.hasName(item)
@@ -48298,7 +50292,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_2__contains__(struct __pyx_obj_8pe
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":13
+/* "PETSc/Options.pyx":19
  *         return self.hasName(item)
  * 
  *     def __getitem__(self, item):             # <<<<<<<<<<<<<<
@@ -48307,31 +50301,28 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_2__contains__(struct __pyx_obj_8pe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_7__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_7__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_4__getitem__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), ((PyObject *)__pyx_v_item));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_6__getitem__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), ((PyObject *)__pyx_v_item));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_4__getitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6__getitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item) {
   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("__getitem__", 0);
 
-  /* "PETSc/Options.pyx":14
+  /* "PETSc/Options.pyx":20
  * 
  *     def __getitem__(self, item):
  *         return self.getString(item)             # <<<<<<<<<<<<<<
@@ -48339,7 +50330,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_4__getitem__(struct __pyx_ob
  *     def __setitem__(self, item, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getString); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getString); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -48352,16 +50343,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_4__getitem__(struct __pyx_ob
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 20, __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[24]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 20, __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_item);
     __Pyx_GIVEREF(__pyx_v_item);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_item);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 14; __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(24, 20, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -48370,7 +50361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_4__getitem__(struct __pyx_ob
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Options.pyx":13
+  /* "PETSc/Options.pyx":19
  *         return self.hasName(item)
  * 
  *     def __getitem__(self, item):             # <<<<<<<<<<<<<<
@@ -48392,7 +50383,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_4__getitem__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":16
+/* "PETSc/Options.pyx":22
  *         return self.getString(item)
  * 
  *     def __setitem__(self, item, value):             # <<<<<<<<<<<<<<
@@ -48401,19 +50392,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_4__getitem__(struct __pyx_ob
  */
 
 /* Python wrapper */
-static int __pyx_pw_8petsc4py_5PETSc_7Options_7__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8petsc4py_5PETSc_7Options_7__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
+static int __pyx_pw_8petsc4py_5PETSc_7Options_9__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8petsc4py_5PETSc_7Options_9__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_6__setitem__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_8__setitem__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8petsc4py_5PETSc_7Options_6__setitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
+static int __pyx_pf_8petsc4py_5PETSc_7Options_8__setitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -48421,19 +50412,16 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6__setitem__(struct __pyx_obj_8pet
   PyObject *__pyx_t_3 = NULL;
   Py_ssize_t __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "PETSc/Options.pyx":17
+  /* "PETSc/Options.pyx":23
  * 
  *     def __setitem__(self, item, value):
  *         self.setValue(item, value)             # <<<<<<<<<<<<<<
  * 
  *     def __delitem__(self, item):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setValue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setValue); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
@@ -48447,7 +50435,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6__setitem__(struct __pyx_obj_8pet
       __pyx_t_4 = 1;
     }
   }
-  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(24, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   if (__pyx_t_3) {
     __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
@@ -48458,13 +50446,13 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6__setitem__(struct __pyx_obj_8pet
   __Pyx_INCREF(__pyx_v_value);
   __Pyx_GIVEREF(__pyx_v_value);
   PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_value);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Options.pyx":16
+  /* "PETSc/Options.pyx":22
  *         return self.getString(item)
  * 
  *     def __setitem__(self, item, value):             # <<<<<<<<<<<<<<
@@ -48487,7 +50475,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6__setitem__(struct __pyx_obj_8pet
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":19
+/* "PETSc/Options.pyx":25
  *         self.setValue(item, value)
  * 
  *     def __delitem__(self, item):             # <<<<<<<<<<<<<<
@@ -48496,38 +50484,35 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6__setitem__(struct __pyx_obj_8pet
  */
 
 /* Python wrapper */
-static int __pyx_pw_8petsc4py_5PETSc_7Options_9__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
-static int __pyx_pw_8petsc4py_5PETSc_7Options_9__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
+static int __pyx_pw_8petsc4py_5PETSc_7Options_11__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
+static int __pyx_pw_8petsc4py_5PETSc_7Options_11__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_8__delitem__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), ((PyObject *)__pyx_v_item));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_10__delitem__(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), ((PyObject *)__pyx_v_item));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8petsc4py_5PETSc_7Options_8__delitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item) {
+static int __pyx_pf_8petsc4py_5PETSc_7Options_10__delitem__(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_item) {
   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("__delitem__", 0);
 
-  /* "PETSc/Options.pyx":20
+  /* "PETSc/Options.pyx":26
  * 
  *     def __delitem__(self, item):
  *         self.delValue(item)             # <<<<<<<<<<<<<<
  * 
  *     property prefix:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_delValue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_delValue); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 26, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -48540,23 +50525,23 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_8__delitem__(struct __pyx_obj_8pet
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 26, __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[24]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 26, __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_item);
     __Pyx_GIVEREF(__pyx_v_item);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_item);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 20; __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(24, 26, __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;
 
-  /* "PETSc/Options.pyx":19
+  /* "PETSc/Options.pyx":25
  *         self.setValue(item, value)
  * 
  *     def __delitem__(self, item):             # <<<<<<<<<<<<<<
@@ -48579,7 +50564,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_8__delitem__(struct __pyx_obj_8pet
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":23
+/* "PETSc/Options.pyx":29
  * 
  *     property prefix:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -48605,7 +50590,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6prefix___get__(struct __pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Options.pyx":24
+  /* "PETSc/Options.pyx":30
  *     property prefix:
  *         def __get__(self):
  *             return self._prefix             # <<<<<<<<<<<<<<
@@ -48617,7 +50602,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6prefix___get__(struct __pyx
   __pyx_r = __pyx_v_self->_prefix;
   goto __pyx_L0;
 
-  /* "PETSc/Options.pyx":23
+  /* "PETSc/Options.pyx":29
  * 
  *     property prefix:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -48632,7 +50617,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6prefix___get__(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":25
+/* "PETSc/Options.pyx":31
  *         def __get__(self):
  *             return self._prefix
  *         def __set__(self, prefix):             # <<<<<<<<<<<<<<
@@ -48657,19 +50642,16 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_2__set__(struct __pyx_obj_
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Options.pyx":26
+  /* "PETSc/Options.pyx":32
  *             return self._prefix
  *         def __set__(self, prefix):
  *             self._prefix = getprefix(prefix)             # <<<<<<<<<<<<<<
  *         def __del__(self):
  *             self._prefix = None
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getprefix(__pyx_v_prefix, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getprefix(__pyx_v_prefix, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_prefix);
@@ -48677,7 +50659,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_2__set__(struct __pyx_obj_
   __pyx_v_self->_prefix = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Options.pyx":25
+  /* "PETSc/Options.pyx":31
  *         def __get__(self):
  *             return self._prefix
  *         def __set__(self, prefix):             # <<<<<<<<<<<<<<
@@ -48697,7 +50679,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_2__set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":27
+/* "PETSc/Options.pyx":33
  *         def __set__(self, prefix):
  *             self._prefix = getprefix(prefix)
  *         def __del__(self):             # <<<<<<<<<<<<<<
@@ -48723,7 +50705,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_4__del__(struct __pyx_obj_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "PETSc/Options.pyx":28
+  /* "PETSc/Options.pyx":34
  *             self._prefix = getprefix(prefix)
  *         def __del__(self):
  *             self._prefix = None             # <<<<<<<<<<<<<<
@@ -48736,7 +50718,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_4__del__(struct __pyx_obj_
   __Pyx_DECREF(__pyx_v_self->_prefix);
   __pyx_v_self->_prefix = Py_None;
 
-  /* "PETSc/Options.pyx":27
+  /* "PETSc/Options.pyx":33
  *         def __set__(self, prefix):
  *             self._prefix = getprefix(prefix)
  *         def __del__(self):             # <<<<<<<<<<<<<<
@@ -48750,54 +50732,436 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_6prefix_4__del__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":31
+/* "PETSc/Options.pyx":37
+ *     #
+ * 
+ *     def create(self):             # <<<<<<<<<<<<<<
+ *         if self.opt != NULL: return
+ *         CHKERR( PetscOptionsCreate(&self.opt) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_13create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_12create[] = "Options.create(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_13create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("create", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "create", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_12create(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_12create(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("create", 0);
+
+  /* "PETSc/Options.pyx":38
+ * 
+ *     def create(self):
+ *         if self.opt != NULL: return             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsCreate(&self.opt) )
+ *         return self
+ */
+  __pyx_t_1 = ((__pyx_v_self->opt != NULL) != 0);
+  if (__pyx_t_1) {
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+  }
+
+  /* "PETSc/Options.pyx":39
+ *     def create(self):
+ *         if self.opt != NULL: return
+ *         CHKERR( PetscOptionsCreate(&self.opt) )             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsCreate((&__pyx_v_self->opt))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(24, 39, __pyx_L1_error)
+
+  /* "PETSc/Options.pyx":40
+ *         if self.opt != NULL: return
+ *         CHKERR( PetscOptionsCreate(&self.opt) )
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def destroy(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
+
+  /* "PETSc/Options.pyx":37
  *     #
  * 
+ *     def create(self):             # <<<<<<<<<<<<<<
+ *         if self.opt != NULL: return
+ *         CHKERR( PetscOptionsCreate(&self.opt) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Options.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Options.pyx":42
+ *         return self
+ * 
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_15destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_14destroy[] = "Options.destroy(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_15destroy(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_8petsc4py_5PETSc_7Options_14destroy(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_14destroy(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("destroy", 0);
+
+  /* "PETSc/Options.pyx":43
+ * 
+ *     def destroy(self):
+ *         if self.opt == NULL: return             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
+ *         return self
+ */
+  __pyx_t_1 = ((__pyx_v_self->opt == NULL) != 0);
+  if (__pyx_t_1) {
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+  }
+
+  /* "PETSc/Options.pyx":44
+ *     def destroy(self):
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsDestroy((&__pyx_v_self->opt))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(24, 44, __pyx_L1_error)
+
+  /* "PETSc/Options.pyx":45
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def clear(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
+
+  /* "PETSc/Options.pyx":42
+ *         return self
+ * 
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsDestroy(&self.opt) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Options.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Options.pyx":47
+ *         return self
+ * 
+ *     def clear(self):             # <<<<<<<<<<<<<<
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsClear(self.opt) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_17clear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_16clear[] = "Options.clear(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_17clear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "clear", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_16clear(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16clear(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("clear", 0);
+
+  /* "PETSc/Options.pyx":48
+ * 
+ *     def clear(self):
+ *         if self.opt == NULL: return             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsClear(self.opt) )
+ *         return self
+ */
+  __pyx_t_1 = ((__pyx_v_self->opt == NULL) != 0);
+  if (__pyx_t_1) {
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+  }
+
+  /* "PETSc/Options.pyx":49
+ *     def clear(self):
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsClear(self.opt) )             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsClear(__pyx_v_self->opt)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(24, 49, __pyx_L1_error)
+
+  /* "PETSc/Options.pyx":50
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsClear(self.opt) )
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def view(self, Viewer viewer=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
+
+  /* "PETSc/Options.pyx":47
+ *         return self
+ * 
+ *     def clear(self):             # <<<<<<<<<<<<<<
+ *         if self.opt == NULL: return
+ *         CHKERR( PetscOptionsClear(self.opt) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Options.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Options.pyx":52
+ *         return self
+ * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_19view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_18view[] = "Options.view(self, Viewer viewer=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_19view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 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_ERR(24, 52, __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(24, 52, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Options.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(24, 52, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_18view(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__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_8petsc4py_5PETSc_7Options_18view(struct __pyx_obj_8petsc4py_5PETSc_Options *__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;
+  __Pyx_RefNannySetupContext("view", 0);
+
+  /* "PETSc/Options.pyx":53
+ * 
+ *     def view(self, Viewer viewer=None):
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( PetscOptionsView(self.opt, vwr) )
+ */
+  __pyx_v_vwr = NULL;
+
+  /* "PETSc/Options.pyx":54
+ *     def view(self, Viewer viewer=None):
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsView(self.opt, 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;
+  }
+
+  /* "PETSc/Options.pyx":55
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( PetscOptionsView(self.opt, vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setFromOptions(self):
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsView(__pyx_v_self->opt, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(24, 55, __pyx_L1_error)
+
+  /* "PETSc/Options.pyx":52
+ *         return self
+ * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Options.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Options.pyx":57
+ *         CHKERR( PetscOptionsView(self.opt, vwr) )
+ * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsSetFromOptions() )
+ *         CHKERR( PetscOptionsSetFromOptions(self.opt) )
  *     #
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_11setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_10setFromOptions[] = "Options.setFromOptions(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_11setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_20setFromOptions[] = "Options.setFromOptions(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_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_8petsc4py_5PETSc_7Options_10setFromOptions(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_20setFromOptions(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_10setFromOptions(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20setFromOptions(struct __pyx_obj_8petsc4py_5PETSc_Options *__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);
 
-  /* "PETSc/Options.pyx":32
+  /* "PETSc/Options.pyx":58
  * 
  *     def setFromOptions(self):
- *         CHKERR( PetscOptionsSetFromOptions() )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsSetFromOptions(self.opt) )             # <<<<<<<<<<<<<<
  *     #
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsSetFromOptions()); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsSetFromOptions(__pyx_v_self->opt)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(24, 58, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":31
- *     #
+  /* "PETSc/Options.pyx":57
+ *         CHKERR( PetscOptionsView(self.opt, vwr) )
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsSetFromOptions() )
+ *         CHKERR( PetscOptionsSetFromOptions(self.opt) )
  *     #
  */
 
@@ -48813,7 +51177,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_10setFromOptions(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":35
+/* "PETSc/Options.pyx":61
  *     #
  * 
  *     def prefixPush(self, prefix):             # <<<<<<<<<<<<<<
@@ -48822,13 +51186,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_10setFromOptions(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_13prefixPush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_12prefixPush[] = "Options.prefixPush(self, prefix)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_13prefixPush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_23prefixPush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_22prefixPush[] = "Options.prefixPush(self, prefix)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_23prefixPush(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("prefixPush (wrapper)", 0);
@@ -48850,7 +51211,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_13prefixPush(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, "prefixPush") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "prefixPush") < 0)) __PYX_ERR(24, 61, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -48861,74 +51222,71 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_13prefixPush(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("prefixPush", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("prefixPush", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 61, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.prefixPush", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_12prefixPush(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_22prefixPush(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_12prefixPush(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_22prefixPush(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_prefix) {
   const char *__pyx_v_cprefix;
   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("prefixPush", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "PETSc/Options.pyx":36
+  /* "PETSc/Options.pyx":62
  * 
  *     def prefixPush(self, prefix):
  *         prefix = getprefix(prefix)             # <<<<<<<<<<<<<<
  *         cdef const_char *cprefix = NULL
  *         prefix = str2bytes(prefix, &cprefix)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getprefix(__pyx_v_prefix, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_getprefix(__pyx_v_prefix, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 62, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Options.pyx":37
+  /* "PETSc/Options.pyx":63
  *     def prefixPush(self, prefix):
  *         prefix = getprefix(prefix)
  *         cdef const_char *cprefix = NULL             # <<<<<<<<<<<<<<
  *         prefix = str2bytes(prefix, &cprefix)
- *         CHKERR( PetscOptionsPrefixPush(cprefix) )
+ *         CHKERR( PetscOptionsPrefixPush(self.opt, cprefix) )
  */
   __pyx_v_cprefix = NULL;
 
-  /* "PETSc/Options.pyx":38
+  /* "PETSc/Options.pyx":64
  *         prefix = getprefix(prefix)
  *         cdef const_char *cprefix = NULL
  *         prefix = str2bytes(prefix, &cprefix)             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsPrefixPush(cprefix) )
+ *         CHKERR( PetscOptionsPrefixPush(self.opt, cprefix) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cprefix)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cprefix)); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Options.pyx":39
+  /* "PETSc/Options.pyx":65
  *         cdef const_char *cprefix = NULL
  *         prefix = str2bytes(prefix, &cprefix)
- *         CHKERR( PetscOptionsPrefixPush(cprefix) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsPrefixPush(self.opt, cprefix) )             # <<<<<<<<<<<<<<
  * 
  *     def prefixPop(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsPrefixPush(__pyx_v_cprefix)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsPrefixPush(__pyx_v_self->opt, __pyx_v_cprefix)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(24, 65, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":35
+  /* "PETSc/Options.pyx":61
  *     #
  * 
  *     def prefixPush(self, prefix):             # <<<<<<<<<<<<<<
@@ -48950,54 +51308,51 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_12prefixPush(CYTHON_UNUSED s
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":41
- *         CHKERR( PetscOptionsPrefixPush(cprefix) )
+/* "PETSc/Options.pyx":67
+ *         CHKERR( PetscOptionsPrefixPush(self.opt, cprefix) )
  * 
  *     def prefixPop(self):             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsPrefixPop() )
+ *         CHKERR( PetscOptionsPrefixPop(self.opt) )
  *     #
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_15prefixPop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_14prefixPop[] = "Options.prefixPop(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_15prefixPop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_25prefixPop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_24prefixPop[] = "Options.prefixPop(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_25prefixPop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("prefixPop (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("prefixPop", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "prefixPop", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_14prefixPop(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_24prefixPop(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_14prefixPop(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_24prefixPop(struct __pyx_obj_8petsc4py_5PETSc_Options *__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("prefixPop", 0);
 
-  /* "PETSc/Options.pyx":42
+  /* "PETSc/Options.pyx":68
  * 
  *     def prefixPop(self):
- *         CHKERR( PetscOptionsPrefixPop() )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsPrefixPop(self.opt) )             # <<<<<<<<<<<<<<
  *     #
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsPrefixPop()); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsPrefixPop(__pyx_v_self->opt)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(24, 68, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":41
- *         CHKERR( PetscOptionsPrefixPush(cprefix) )
+  /* "PETSc/Options.pyx":67
+ *         CHKERR( PetscOptionsPrefixPush(self.opt, cprefix) )
  * 
  *     def prefixPop(self):             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsPrefixPop() )
+ *         CHKERR( PetscOptionsPrefixPop(self.opt) )
  *     #
  */
 
@@ -49013,7 +51368,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_14prefixPop(CYTHON_UNUSED st
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":45
+/* "PETSc/Options.pyx":71
  *     #
  * 
  *     def hasName(self, name):             # <<<<<<<<<<<<<<
@@ -49022,13 +51377,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_14prefixPop(CYTHON_UNUSED st
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_17hasName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_16hasName[] = "Options.hasName(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_17hasName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_27hasName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_26hasName[] = "Options.hasName(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_27hasName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("hasName (wrapper)", 0);
@@ -49050,7 +51402,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_17hasName(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, "hasName") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hasName") < 0)) __PYX_ERR(24, 71, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -49061,20 +51413,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_17hasName(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("hasName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("hasName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 71, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.hasName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_16hasName(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_26hasName(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16hasName(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_26hasName(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_pr;
   const char *__pyx_v_nm;
   CYTHON_UNUSED PyObject *__pyx_v_tmp = NULL;
@@ -49084,12 +51436,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16hasName(struct __pyx_obj_8
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("hasName", 0);
 
-  /* "PETSc/Options.pyx":46
+  /* "PETSc/Options.pyx":72
  * 
  *     def hasName(self, name):
  *         cdef const_char *pr = NULL             # <<<<<<<<<<<<<<
@@ -49098,7 +51447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16hasName(struct __pyx_obj_8
  */
   __pyx_v_pr = NULL;
 
-  /* "PETSc/Options.pyx":47
+  /* "PETSc/Options.pyx":73
  *     def hasName(self, name):
  *         cdef const_char *pr = NULL
  *         cdef const_char *nm = NULL             # <<<<<<<<<<<<<<
@@ -49107,54 +51456,54 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16hasName(struct __pyx_obj_8
  */
   __pyx_v_nm = NULL;
 
-  /* "PETSc/Options.pyx":48
+  /* "PETSc/Options.pyx":74
  *         cdef const_char *pr = NULL
  *         cdef const_char *nm = NULL
  *         tmp = getpair(self.prefix, name, &pr, &nm)             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
- *         CHKERR( PetscOptionsHasName(pr, nm, &flag) )
+ *         CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getpair(__pyx_t_1, __pyx_v_name, (&__pyx_v_pr), (&__pyx_v_nm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getpair(__pyx_t_1, __pyx_v_name, (&__pyx_v_pr), (&__pyx_v_nm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_tmp = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/Options.pyx":49
+  /* "PETSc/Options.pyx":75
  *         cdef const_char *nm = NULL
  *         tmp = getpair(self.prefix, name, &pr, &nm)
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsHasName(pr, nm, &flag) )
+ *         CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )
  *         return <bint> flag
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Options.pyx":50
+  /* "PETSc/Options.pyx":76
  *         tmp = getpair(self.prefix, name, &pr, &nm)
  *         cdef PetscBool flag = PETSC_FALSE
- *         CHKERR( PetscOptionsHasName(pr, nm, &flag) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint> flag
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsHasName(__pyx_v_pr, __pyx_v_nm, (&__pyx_v_flag))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsHasName(__pyx_v_self->opt, __pyx_v_pr, __pyx_v_nm, (&__pyx_v_flag))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(24, 76, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":51
+  /* "PETSc/Options.pyx":77
  *         cdef PetscBool flag = PETSC_FALSE
- *         CHKERR( PetscOptionsHasName(pr, nm, &flag) )
+ *         CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )
  *         return <bint> flag             # <<<<<<<<<<<<<<
  * 
  *     def setValue(self, name, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Options.pyx":45
+  /* "PETSc/Options.pyx":71
  *     #
  * 
  *     def hasName(self, name):             # <<<<<<<<<<<<<<
@@ -49175,7 +51524,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16hasName(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":53
+/* "PETSc/Options.pyx":79
  *         return <bint> flag
  * 
  *     def setValue(self, name, value):             # <<<<<<<<<<<<<<
@@ -49184,14 +51533,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16hasName(struct __pyx_obj_8
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_19setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_18setValue[] = "Options.setValue(self, name, value)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_19setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_29setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_28setValue[] = "Options.setValue(self, name, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_29setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_value = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValue (wrapper)", 0);
@@ -49215,11 +51561,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_19setValue(PyObject *__pyx_v
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValue", 1, 2, 2, 1); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValue", 1, 2, 2, 1); __PYX_ERR(24, 79, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValue") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValue") < 0)) __PYX_ERR(24, 79, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -49232,25 +51578,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_19setValue(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 79, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.setValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_18setValue(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_28setValue(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_28setValue(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
   const char *__pyx_v_pr;
   const char *__pyx_v_nm;
   CYTHON_UNUSED PyObject *__pyx_v_tmp = NULL;
   PyObject *__pyx_v_option = NULL;
-  const char *__pyx_v_opt;
+  const char *__pyx_v_key;
   const char *__pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -49260,13 +51606,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setValue", 0);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "PETSc/Options.pyx":54
+  /* "PETSc/Options.pyx":80
  * 
  *     def setValue(self, name, value):
  *         cdef const_char *pr = NULL             # <<<<<<<<<<<<<<
@@ -49275,7 +51618,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
  */
   __pyx_v_pr = NULL;
 
-  /* "PETSc/Options.pyx":55
+  /* "PETSc/Options.pyx":81
  *     def setValue(self, name, value):
  *         cdef const_char *pr = NULL
  *         cdef const_char *nm = NULL             # <<<<<<<<<<<<<<
@@ -49284,22 +51627,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
  */
   __pyx_v_nm = NULL;
 
-  /* "PETSc/Options.pyx":56
+  /* "PETSc/Options.pyx":82
  *         cdef const_char *pr = NULL
  *         cdef const_char *nm = NULL
  *         tmp = getpair(self.prefix, name, &pr, &nm)             # <<<<<<<<<<<<<<
  *         if pr == NULL:
  *             option = bytes2str(nm)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getpair(__pyx_t_1, __pyx_v_name, (&__pyx_v_pr), (&__pyx_v_nm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getpair(__pyx_t_1, __pyx_v_name, (&__pyx_v_pr), (&__pyx_v_nm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_tmp = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/Options.pyx":57
+  /* "PETSc/Options.pyx":83
  *         cdef const_char *nm = NULL
  *         tmp = getpair(self.prefix, name, &pr, &nm)
  *         if pr == NULL:             # <<<<<<<<<<<<<<
@@ -49309,33 +51652,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
   __pyx_t_3 = ((__pyx_v_pr == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Options.pyx":58
+    /* "PETSc/Options.pyx":84
  *         tmp = getpair(self.prefix, name, &pr, &nm)
  *         if pr == NULL:
  *             option = bytes2str(nm)             # <<<<<<<<<<<<<<
  *         else:
  *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_nm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_nm); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 84, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_option = __pyx_t_2;
     __pyx_t_2 = 0;
+
+    /* "PETSc/Options.pyx":83
+ *         cdef const_char *nm = NULL
+ *         tmp = getpair(self.prefix, name, &pr, &nm)
+ *         if pr == NULL:             # <<<<<<<<<<<<<<
+ *             option = bytes2str(nm)
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Options.pyx":60
+  /* "PETSc/Options.pyx":86
  *             option = bytes2str(nm)
  *         else:
  *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))             # <<<<<<<<<<<<<<
  *         if type(value) is bool:
  *             value = str(value).lower()
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_pr); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_pr); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str((&(__pyx_v_nm[1]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str((&(__pyx_v_nm[1]))); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -49343,7 +51694,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
     __pyx_t_2 = 0;
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_option = __pyx_t_1;
@@ -49351,7 +51702,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
   }
   __pyx_L3:;
 
-  /* "PETSc/Options.pyx":61
+  /* "PETSc/Options.pyx":87
  *         else:
  *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))
  *         if type(value) is bool:             # <<<<<<<<<<<<<<
@@ -49362,22 +51713,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
   __pyx_t_5 = (__pyx_t_3 != 0);
   if (__pyx_t_5) {
 
-    /* "PETSc/Options.pyx":62
+    /* "PETSc/Options.pyx":88
  *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))
  *         if type(value) is bool:
  *             value = str(value).lower()             # <<<<<<<<<<<<<<
  *         elif value is not None :
  *             value = str(value)
  */
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 88, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_value);
     __Pyx_GIVEREF(__pyx_v_value);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_value);
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 88, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 88, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = NULL;
@@ -49391,102 +51742,117 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
       }
     }
     if (__pyx_t_2) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 88, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
-      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 88, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1);
     __pyx_t_1 = 0;
+
+    /* "PETSc/Options.pyx":87
+ *         else:
+ *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))
+ *         if type(value) is bool:             # <<<<<<<<<<<<<<
+ *             value = str(value).lower()
+ *         elif value is not None :
+ */
     goto __pyx_L4;
   }
 
-  /* "PETSc/Options.pyx":63
+  /* "PETSc/Options.pyx":89
  *         if type(value) is bool:
  *             value = str(value).lower()
  *         elif value is not None :             # <<<<<<<<<<<<<<
  *             value = str(value)
- *         cdef const_char *opt = NULL
+ *         cdef const_char *key = NULL
  */
   __pyx_t_5 = (__pyx_v_value != Py_None);
   __pyx_t_3 = (__pyx_t_5 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Options.pyx":64
+    /* "PETSc/Options.pyx":90
  *             value = str(value).lower()
  *         elif value is not None :
  *             value = str(value)             # <<<<<<<<<<<<<<
- *         cdef const_char *opt = NULL
+ *         cdef const_char *key = NULL
  *         cdef const_char *val = NULL
  */
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 90, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_value);
     __Pyx_GIVEREF(__pyx_v_value);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_value);
-    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 90, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L4;
+
+    /* "PETSc/Options.pyx":89
+ *         if type(value) is bool:
+ *             value = str(value).lower()
+ *         elif value is not None :             # <<<<<<<<<<<<<<
+ *             value = str(value)
+ *         cdef const_char *key = NULL
+ */
   }
   __pyx_L4:;
 
-  /* "PETSc/Options.pyx":65
+  /* "PETSc/Options.pyx":91
  *         elif value is not None :
  *             value = str(value)
- *         cdef const_char *opt = NULL             # <<<<<<<<<<<<<<
+ *         cdef const_char *key = NULL             # <<<<<<<<<<<<<<
  *         cdef const_char *val = NULL
- *         option = str2bytes(option, &opt)
+ *         option = str2bytes(option, &key)
  */
-  __pyx_v_opt = NULL;
+  __pyx_v_key = NULL;
 
-  /* "PETSc/Options.pyx":66
+  /* "PETSc/Options.pyx":92
  *             value = str(value)
- *         cdef const_char *opt = NULL
+ *         cdef const_char *key = NULL
  *         cdef const_char *val = NULL             # <<<<<<<<<<<<<<
- *         option = str2bytes(option, &opt)
+ *         option = str2bytes(option, &key)
  *         value  = str2bytes(value,  &val)
  */
   __pyx_v_val = NULL;
 
-  /* "PETSc/Options.pyx":67
- *         cdef const_char *opt = NULL
+  /* "PETSc/Options.pyx":93
+ *         cdef const_char *key = NULL
  *         cdef const_char *val = NULL
- *         option = str2bytes(option, &opt)             # <<<<<<<<<<<<<<
+ *         option = str2bytes(option, &key)             # <<<<<<<<<<<<<<
  *         value  = str2bytes(value,  &val)
- *         CHKERR( PetscOptionsSetValue(opt, val) )
+ *         CHKERR( PetscOptionsSetValue(self.opt, key, val) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_option, (&__pyx_v_opt)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_option, (&__pyx_v_key)); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_option, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/Options.pyx":68
+  /* "PETSc/Options.pyx":94
  *         cdef const_char *val = NULL
- *         option = str2bytes(option, &opt)
+ *         option = str2bytes(option, &key)
  *         value  = str2bytes(value,  &val)             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsSetValue(opt, val) )
+ *         CHKERR( PetscOptionsSetValue(self.opt, key, val) )
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_value, (&__pyx_v_val)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_value, (&__pyx_v_val)); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 94, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/Options.pyx":69
- *         option = str2bytes(option, &opt)
+  /* "PETSc/Options.pyx":95
+ *         option = str2bytes(option, &key)
  *         value  = str2bytes(value,  &val)
- *         CHKERR( PetscOptionsSetValue(opt, val) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsSetValue(self.opt, key, val) )             # <<<<<<<<<<<<<<
  * 
  *     def delValue(self, name):
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsSetValue(__pyx_v_opt, __pyx_v_val)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsSetValue(__pyx_v_self->opt, __pyx_v_key, __pyx_v_val)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(24, 95, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":53
+  /* "PETSc/Options.pyx":79
  *         return <bint> flag
  * 
  *     def setValue(self, name, value):             # <<<<<<<<<<<<<<
@@ -49512,8 +51878,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":71
- *         CHKERR( PetscOptionsSetValue(opt, val) )
+/* "PETSc/Options.pyx":97
+ *         CHKERR( PetscOptionsSetValue(self.opt, key, val) )
  * 
  *     def delValue(self, name):             # <<<<<<<<<<<<<<
  *         cdef const_char *pr = NULL
@@ -49521,13 +51887,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18setValue(struct __pyx_obj_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_21delValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_20delValue[] = "Options.delValue(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_21delValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_31delValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_30delValue[] = "Options.delValue(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_31delValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("delValue (wrapper)", 0);
@@ -49549,7 +51912,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_21delValue(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, "delValue") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "delValue") < 0)) __PYX_ERR(24, 97, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -49560,25 +51923,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_21delValue(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("delValue", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("delValue", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 97, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.delValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_20delValue(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_30delValue(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_30delValue(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_pr;
   const char *__pyx_v_nm;
   CYTHON_UNUSED PyObject *__pyx_v_tmp = NULL;
   PyObject *__pyx_v_option = NULL;
-  const char *__pyx_v_opt;
+  const char *__pyx_v_key;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -49586,12 +51949,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("delValue", 0);
 
-  /* "PETSc/Options.pyx":72
+  /* "PETSc/Options.pyx":98
  * 
  *     def delValue(self, name):
  *         cdef const_char *pr = NULL             # <<<<<<<<<<<<<<
@@ -49600,7 +51960,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_
  */
   __pyx_v_pr = NULL;
 
-  /* "PETSc/Options.pyx":73
+  /* "PETSc/Options.pyx":99
  *     def delValue(self, name):
  *         cdef const_char *pr = NULL
  *         cdef const_char *nm = NULL             # <<<<<<<<<<<<<<
@@ -49609,22 +51969,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_
  */
   __pyx_v_nm = NULL;
 
-  /* "PETSc/Options.pyx":74
+  /* "PETSc/Options.pyx":100
  *         cdef const_char *pr = NULL
  *         cdef const_char *nm = NULL
  *         tmp = getpair(self.prefix, name, &pr, &nm)             # <<<<<<<<<<<<<<
  *         if pr == NULL:
  *             option = bytes2str(nm)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getpair(__pyx_t_1, __pyx_v_name, (&__pyx_v_pr), (&__pyx_v_nm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getpair(__pyx_t_1, __pyx_v_name, (&__pyx_v_pr), (&__pyx_v_nm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_tmp = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/Options.pyx":75
+  /* "PETSc/Options.pyx":101
  *         cdef const_char *nm = NULL
  *         tmp = getpair(self.prefix, name, &pr, &nm)
  *         if pr == NULL:             # <<<<<<<<<<<<<<
@@ -49634,33 +51994,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_
   __pyx_t_3 = ((__pyx_v_pr == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Options.pyx":76
+    /* "PETSc/Options.pyx":102
  *         tmp = getpair(self.prefix, name, &pr, &nm)
  *         if pr == NULL:
  *             option = bytes2str(nm)             # <<<<<<<<<<<<<<
  *         else:
  *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_nm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_nm); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 102, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_option = __pyx_t_2;
     __pyx_t_2 = 0;
+
+    /* "PETSc/Options.pyx":101
+ *         cdef const_char *nm = NULL
+ *         tmp = getpair(self.prefix, name, &pr, &nm)
+ *         if pr == NULL:             # <<<<<<<<<<<<<<
+ *             option = bytes2str(nm)
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Options.pyx":78
+  /* "PETSc/Options.pyx":104
  *             option = bytes2str(nm)
  *         else:
  *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))             # <<<<<<<<<<<<<<
- *         cdef const_char *opt = NULL
- *         option = str2bytes(option, &opt)
+ *         cdef const_char *key = NULL
+ *         option = str2bytes(option, &key)
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_pr); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_pr); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 104, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str((&(__pyx_v_nm[1]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str((&(__pyx_v_nm[1]))); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 104, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 104, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -49668,7 +52036,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
     __pyx_t_2 = 0;
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 104, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_option = __pyx_t_1;
@@ -49676,38 +52044,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_
   }
   __pyx_L3:;
 
-  /* "PETSc/Options.pyx":79
+  /* "PETSc/Options.pyx":105
  *         else:
  *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))
- *         cdef const_char *opt = NULL             # <<<<<<<<<<<<<<
- *         option = str2bytes(option, &opt)
- *         CHKERR( PetscOptionsClearValue(opt) )
+ *         cdef const_char *key = NULL             # <<<<<<<<<<<<<<
+ *         option = str2bytes(option, &key)
+ *         CHKERR( PetscOptionsClearValue(self.opt, key) )
  */
-  __pyx_v_opt = NULL;
+  __pyx_v_key = NULL;
 
-  /* "PETSc/Options.pyx":80
+  /* "PETSc/Options.pyx":106
  *             option = '-%s%s' % (bytes2str(pr), bytes2str(&nm[1]))
- *         cdef const_char *opt = NULL
- *         option = str2bytes(option, &opt)             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsClearValue(opt) )
+ *         cdef const_char *key = NULL
+ *         option = str2bytes(option, &key)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsClearValue(self.opt, key) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_option, (&__pyx_v_opt)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_option, (&__pyx_v_key)); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_option, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Options.pyx":81
- *         cdef const_char *opt = NULL
- *         option = str2bytes(option, &opt)
- *         CHKERR( PetscOptionsClearValue(opt) )             # <<<<<<<<<<<<<<
+  /* "PETSc/Options.pyx":107
+ *         cdef const_char *key = NULL
+ *         option = str2bytes(option, &key)
+ *         CHKERR( PetscOptionsClearValue(self.opt, key) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsClearValue(__pyx_v_opt)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsClearValue(__pyx_v_self->opt, __pyx_v_key)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(24, 107, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":71
- *         CHKERR( PetscOptionsSetValue(opt, val) )
+  /* "PETSc/Options.pyx":97
+ *         CHKERR( PetscOptionsSetValue(self.opt, key, val) )
  * 
  *     def delValue(self, name):             # <<<<<<<<<<<<<<
  *         cdef const_char *pr = NULL
@@ -49731,23 +52099,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20delValue(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":85
+/* "PETSc/Options.pyx":111
  *     #
  * 
  *     def getBool(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_BOOL, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_BOOL, self.prefix, name, default)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_23getBool(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_22getBool[] = "Options.getBool(self, name, default=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_23getBool(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_33getBool(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_32getBool[] = "Options.getBool(self, name, default=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_33getBool(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_default = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getBool (wrapper)", 0);
@@ -49776,7 +52141,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_23getBool(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getBool") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getBool") < 0)) __PYX_ERR(24, 111, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -49791,51 +52156,48 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_23getBool(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getBool", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getBool", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 111, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.getBool", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_22getBool(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_32getBool(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_22getBool(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_32getBool(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
   PyObject *__pyx_r = NULL;
   __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("getBool", 0);
 
-  /* "PETSc/Options.pyx":86
+  /* "PETSc/Options.pyx":112
  * 
  *     def getBool(self, name, default=None):
- *         return getopt(OPT_BOOL, self.prefix, name, default)             # <<<<<<<<<<<<<<
+ *         return getopt(self.opt, OPT_BOOL, self.prefix, name, default)             # <<<<<<<<<<<<<<
  * 
  *     def getInt(self, name, default=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_e_8petsc4py_5PETSc_OPT_BOOL, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_v_self->opt, __pyx_e_8petsc4py_5PETSc_OPT_BOOL, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 112, __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;
 
-  /* "PETSc/Options.pyx":85
+  /* "PETSc/Options.pyx":111
  *     #
  * 
  *     def getBool(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_BOOL, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_BOOL, self.prefix, name, default)
  * 
  */
 
@@ -49851,23 +52213,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_22getBool(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":88
- *         return getopt(OPT_BOOL, self.prefix, name, default)
+/* "PETSc/Options.pyx":114
+ *         return getopt(self.opt, OPT_BOOL, self.prefix, name, default)
  * 
  *     def getInt(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_INT, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_INT, self.prefix, name, default)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_25getInt(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_24getInt[] = "Options.getInt(self, name, default=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_25getInt(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_35getInt(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_34getInt[] = "Options.getInt(self, name, default=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_35getInt(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_default = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getInt (wrapper)", 0);
@@ -49896,7 +52255,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_25getInt(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getInt") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getInt") < 0)) __PYX_ERR(24, 114, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -49911,51 +52270,48 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_25getInt(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getInt", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getInt", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 114, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.getInt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_24getInt(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_34getInt(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_24getInt(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_34getInt(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
   PyObject *__pyx_r = NULL;
   __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("getInt", 0);
 
-  /* "PETSc/Options.pyx":89
+  /* "PETSc/Options.pyx":115
  * 
  *     def getInt(self, name, default=None):
- *         return getopt(OPT_INT, self.prefix, name, default)             # <<<<<<<<<<<<<<
+ *         return getopt(self.opt, OPT_INT, self.prefix, name, default)             # <<<<<<<<<<<<<<
  * 
  *     def getReal(self, name, default=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 115, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_e_8petsc4py_5PETSc_OPT_INT, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_v_self->opt, __pyx_e_8petsc4py_5PETSc_OPT_INT, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 115, __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;
 
-  /* "PETSc/Options.pyx":88
- *         return getopt(OPT_BOOL, self.prefix, name, default)
+  /* "PETSc/Options.pyx":114
+ *         return getopt(self.opt, OPT_BOOL, self.prefix, name, default)
  * 
  *     def getInt(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_INT, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_INT, self.prefix, name, default)
  * 
  */
 
@@ -49971,23 +52327,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_24getInt(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":91
- *         return getopt(OPT_INT, self.prefix, name, default)
+/* "PETSc/Options.pyx":117
+ *         return getopt(self.opt, OPT_INT, self.prefix, name, default)
  * 
  *     def getReal(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_REAL, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_REAL, self.prefix, name, default)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_27getReal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_26getReal[] = "Options.getReal(self, name, default=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_27getReal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_37getReal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_36getReal[] = "Options.getReal(self, name, default=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_37getReal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_default = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getReal (wrapper)", 0);
@@ -50016,7 +52369,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_27getReal(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getReal") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getReal") < 0)) __PYX_ERR(24, 117, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -50031,51 +52384,48 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_27getReal(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getReal", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getReal", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 117, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.getReal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_26getReal(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_36getReal(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_26getReal(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_36getReal(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
   PyObject *__pyx_r = NULL;
   __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("getReal", 0);
 
-  /* "PETSc/Options.pyx":92
+  /* "PETSc/Options.pyx":118
  * 
  *     def getReal(self, name, default=None):
- *         return getopt(OPT_REAL, self.prefix, name, default)             # <<<<<<<<<<<<<<
+ *         return getopt(self.opt, OPT_REAL, self.prefix, name, default)             # <<<<<<<<<<<<<<
  * 
  *     def getScalar(self, name, default=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_e_8petsc4py_5PETSc_OPT_REAL, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_v_self->opt, __pyx_e_8petsc4py_5PETSc_OPT_REAL, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 118, __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;
 
-  /* "PETSc/Options.pyx":91
- *         return getopt(OPT_INT, self.prefix, name, default)
+  /* "PETSc/Options.pyx":117
+ *         return getopt(self.opt, OPT_INT, self.prefix, name, default)
  * 
  *     def getReal(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_REAL, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_REAL, self.prefix, name, default)
  * 
  */
 
@@ -50091,23 +52441,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_26getReal(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":94
- *         return getopt(OPT_REAL, self.prefix, name, default)
+/* "PETSc/Options.pyx":120
+ *         return getopt(self.opt, OPT_REAL, self.prefix, name, default)
  * 
  *     def getScalar(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_SCALAR, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_SCALAR, self.prefix, name, default)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_29getScalar(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_28getScalar[] = "Options.getScalar(self, name, default=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_29getScalar(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_39getScalar(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_38getScalar[] = "Options.getScalar(self, name, default=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_39getScalar(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_default = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getScalar (wrapper)", 0);
@@ -50136,7 +52483,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_29getScalar(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getScalar") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getScalar") < 0)) __PYX_ERR(24, 120, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -50151,51 +52498,48 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_29getScalar(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getScalar", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getScalar", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 120, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.getScalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_28getScalar(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_38getScalar(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_28getScalar(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_38getScalar(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
   PyObject *__pyx_r = NULL;
   __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("getScalar", 0);
 
-  /* "PETSc/Options.pyx":95
+  /* "PETSc/Options.pyx":121
  * 
  *     def getScalar(self, name, default=None):
- *         return getopt(OPT_SCALAR, self.prefix, name, default)             # <<<<<<<<<<<<<<
+ *         return getopt(self.opt, OPT_SCALAR, self.prefix, name, default)             # <<<<<<<<<<<<<<
  * 
  *     def getString(self, name, default=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 121, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_e_8petsc4py_5PETSc_OPT_SCALAR, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_v_self->opt, __pyx_e_8petsc4py_5PETSc_OPT_SCALAR, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 121, __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;
 
-  /* "PETSc/Options.pyx":94
- *         return getopt(OPT_REAL, self.prefix, name, default)
+  /* "PETSc/Options.pyx":120
+ *         return getopt(self.opt, OPT_REAL, self.prefix, name, default)
  * 
  *     def getScalar(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_SCALAR, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_SCALAR, self.prefix, name, default)
  * 
  */
 
@@ -50211,23 +52555,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_28getScalar(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":97
- *         return getopt(OPT_SCALAR, self.prefix, name, default)
+/* "PETSc/Options.pyx":123
+ *         return getopt(self.opt, OPT_SCALAR, self.prefix, name, default)
  * 
  *     def getString(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_STRING, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_STRING, self.prefix, name, default)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_31getString(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_30getString[] = "Options.getString(self, name, default=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_31getString(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_41getString(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_40getString[] = "Options.getString(self, name, default=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_41getString(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_default = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getString (wrapper)", 0);
@@ -50256,7 +52597,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_31getString(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getString") < 0)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getString") < 0)) __PYX_ERR(24, 123, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -50271,51 +52612,48 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_31getString(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getString", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[24]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getString", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 123, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Options.getString", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_30getString(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_40getString(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self), __pyx_v_name, __pyx_v_default);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_30getString(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_40getString(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_default) {
   PyObject *__pyx_r = NULL;
   __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("getString", 0);
 
-  /* "PETSc/Options.pyx":98
+  /* "PETSc/Options.pyx":124
  * 
  *     def getString(self, name, default=None):
- *         return getopt(OPT_STRING, self.prefix, name, default)             # <<<<<<<<<<<<<<
+ *         return getopt(self.opt, OPT_STRING, self.prefix, name, default)             # <<<<<<<<<<<<<<
  * 
  *     def getAll(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_e_8petsc4py_5PETSc_OPT_STRING, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getopt(__pyx_v_self->opt, __pyx_e_8petsc4py_5PETSc_OPT_STRING, __pyx_t_1, __pyx_v_name, __pyx_v_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 124, __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;
 
-  /* "PETSc/Options.pyx":97
- *         return getopt(OPT_SCALAR, self.prefix, name, default)
+  /* "PETSc/Options.pyx":123
+ *         return getopt(self.opt, OPT_SCALAR, self.prefix, name, default)
  * 
  *     def getString(self, name, default=None):             # <<<<<<<<<<<<<<
- *         return getopt(OPT_STRING, self.prefix, name, default)
+ *         return getopt(self.opt, OPT_STRING, self.prefix, name, default)
  * 
  */
 
@@ -50331,32 +52669,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_30getString(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/Options.pyx":100
- *         return getopt(OPT_STRING, self.prefix, name, default)
+/* "PETSc/Options.pyx":126
+ *         return getopt(self.opt, OPT_STRING, self.prefix, name, default)
  * 
  *     def getAll(self):             # <<<<<<<<<<<<<<
  *         cdef char *allopts = NULL
- *         CHKERR( PetscOptionsGetAll(&allopts) )
+ *         CHKERR( PetscOptionsGetAll(self.opt, &allopts) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_33getAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7Options_32getAll[] = "Options.getAll(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_33getAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_43getAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7Options_42getAll[] = "Options.getAll(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_43getAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getAll (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getAll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAll", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_32getAll(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Options_42getAll(((struct __pyx_obj_8petsc4py_5PETSc_Options *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_32getAll(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_42getAll(struct __pyx_obj_8petsc4py_5PETSc_Options *__pyx_v_self) {
   char *__pyx_v_allopts;
   PyObject *__pyx_v_options = NULL;
   PyObject *__pyx_r = NULL;
@@ -50364,51 +52702,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_32getAll(struct __pyx_obj_8p
   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("getAll", 0);
 
-  /* "PETSc/Options.pyx":101
+  /* "PETSc/Options.pyx":127
  * 
  *     def getAll(self):
  *         cdef char *allopts = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( PetscOptionsGetAll(&allopts) )
+ *         CHKERR( PetscOptionsGetAll(self.opt, &allopts) )
  *         options = bytes2str(allopts)
  */
   __pyx_v_allopts = NULL;
 
-  /* "PETSc/Options.pyx":102
+  /* "PETSc/Options.pyx":128
  *     def getAll(self):
  *         cdef char *allopts = NULL
- *         CHKERR( PetscOptionsGetAll(&allopts) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscOptionsGetAll(self.opt, &allopts) )             # <<<<<<<<<<<<<<
  *         options = bytes2str(allopts)
  *         CHKERR( PetscFree(allopts) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetAll((&__pyx_v_allopts))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetAll(__pyx_v_self->opt, (&__pyx_v_allopts))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(24, 128, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":103
+  /* "PETSc/Options.pyx":129
  *         cdef char *allopts = NULL
- *         CHKERR( PetscOptionsGetAll(&allopts) )
+ *         CHKERR( PetscOptionsGetAll(self.opt, &allopts) )
  *         options = bytes2str(allopts)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscFree(allopts) )
  *         return parseopt(options, self.prefix)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_allopts); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_allopts); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 129, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_options = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/Options.pyx":104
- *         CHKERR( PetscOptionsGetAll(&allopts) )
+  /* "PETSc/Options.pyx":130
+ *         CHKERR( PetscOptionsGetAll(self.opt, &allopts) )
  *         options = bytes2str(allopts)
  *         CHKERR( PetscFree(allopts) )             # <<<<<<<<<<<<<<
  *         return parseopt(options, self.prefix)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_allopts)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_allopts)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(24, 130, __pyx_L1_error)
 
-  /* "PETSc/Options.pyx":105
+  /* "PETSc/Options.pyx":131
  *         options = bytes2str(allopts)
  *         CHKERR( PetscFree(allopts) )
  *         return parseopt(options, self.prefix)             # <<<<<<<<<<<<<<
@@ -50416,21 +52751,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_32getAll(struct __pyx_obj_8p
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 131, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_parseopt(__pyx_v_options, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_parseopt(__pyx_v_options, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 131, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Options.pyx":100
- *         return getopt(OPT_STRING, self.prefix, name, default)
+  /* "PETSc/Options.pyx":126
+ *         return getopt(self.opt, OPT_STRING, self.prefix, name, default)
  * 
  *     def getAll(self):             # <<<<<<<<<<<<<<
  *         cdef char *allopts = NULL
- *         CHKERR( PetscOptionsGetAll(&allopts) )
+ *         CHKERR( PetscOptionsGetAll(self.opt, &allopts) )
  */
 
   /* function exit code */
@@ -50462,9 +52797,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_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);
@@ -50518,7 +52850,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_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[25]; __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(25, 6, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -50537,13 +52869,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_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[25]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getVersion", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 6, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.getVersion", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(((PyObject*)__pyx_v_cls), __pyx_v_patch, __pyx_v_devel, __pyx_v_date, __pyx_v_author);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(((PyTypeObject*)__pyx_v_cls), __pyx_v_patch, __pyx_v_devel, __pyx_v_date, __pyx_v_author);
 
   /* "PETSc/Sys.pyx":6
  * 
@@ -50558,7 +52890,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_1getVersion(PyObject *__pyx_v_cl
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_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_8petsc4py_5PETSc_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;
@@ -50581,9 +52913,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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_date);
   __Pyx_INCREF(__pyx_v_author);
@@ -50658,13 +52987,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __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(25, 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[25]; __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(25, 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[25]; __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(25, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
@@ -50695,25 +53024,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __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(25, 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[25]; __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(25, 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[25]; __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(25, 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[25]; __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(25, 17, __pyx_L1_error)
   __pyx_t_5 = __pyx_t_6;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_5) {
@@ -50725,7 +53054,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 18, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_version);
     __Pyx_GIVEREF(__pyx_v_version);
@@ -50740,7 +53069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __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(25, 19, __pyx_L1_error)
     if (__pyx_t_5) {
 
       /* "PETSc/Sys.pyx":20
@@ -50750,13 +53079,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __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(25, 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[25]; __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(25, 20, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      goto __pyx_L8;
+
+      /* "PETSc/Sys.pyx":19
+ *         if patch or devel or date or author:
+ *             out = [version]
+ *             if patch:             # <<<<<<<<<<<<<<
+ *                 out.append(cpatch)
+ *             if devel:
+ */
     }
-    __pyx_L8:;
 
     /* "PETSc/Sys.pyx":21
  *             if patch:
@@ -50765,7 +53100,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __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(25, 21, __pyx_L1_error)
     if (__pyx_t_5) {
 
       /* "PETSc/Sys.pyx":22
@@ -50775,13 +53110,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *             if date:
  *                 date = bytes2str(cdate)
  */
-      __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_cdevel != 0)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __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(25, 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[25]; __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(25, 22, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      goto __pyx_L9;
+
+      /* "PETSc/Sys.pyx":21
+ *             if patch:
+ *                 out.append(cpatch)
+ *             if devel:             # <<<<<<<<<<<<<<
+ *                 out.append(<bint>cdevel)
+ *             if date:
+ */
     }
-    __pyx_L9:;
 
     /* "PETSc/Sys.pyx":23
  *             if devel:
@@ -50790,7 +53131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 date = bytes2str(cdate)
  *                 out.append(date)
  */
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_date); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[25]; __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(25, 23, __pyx_L1_error)
     if (__pyx_t_5) {
 
       /* "PETSc/Sys.pyx":24
@@ -50800,7 +53141,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 out.append(date)
  *             if author:
  */
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cdate); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cdate); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 24, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_date, __pyx_t_4);
       __pyx_t_4 = 0;
@@ -50812,10 +53153,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *             if author:
  *                 author = bytes2str(cauthorinfo).split('\n')
  */
-      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_date); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L10;
+      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_date); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(25, 25, __pyx_L1_error)
+
+      /* "PETSc/Sys.pyx":23
+ *             if devel:
+ *                 out.append(<bint>cdevel)
+ *             if date:             # <<<<<<<<<<<<<<
+ *                 date = bytes2str(cdate)
+ *                 out.append(date)
+ */
     }
-    __pyx_L10:;
 
     /* "PETSc/Sys.pyx":26
  *                 date = bytes2str(cdate)
@@ -50824,7 +53171,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_author); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(25, 26, __pyx_L1_error)
     if (__pyx_t_5) {
 
       /* "PETSc/Sys.pyx":27
@@ -50834,12 +53181,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 author = [s.strip() for s in author if s]
  *                 out.append(author)
  */
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cauthorinfo); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cauthorinfo); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 27, __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[25]; __pyx_lineno = 27; __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(25, 27, __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__33, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 27, __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);
@@ -50852,32 +53199,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 28, __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[25]; __pyx_lineno = 28; __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(25, 28, __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[25]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(25, 28, __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[25]; __pyx_lineno = 28; __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(25, 28, __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[25]; __pyx_lineno = 28; __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(25, 28, __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[25]; __pyx_lineno = 28; __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(25, 28, __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[25]; __pyx_lineno = 28; __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(25, 28, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_2);
             #endif
           }
@@ -50887,7 +53234,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              else __PYX_ERR(25, 28, __pyx_L1_error)
             }
             break;
           }
@@ -50895,9 +53242,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_s); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(25, 28, __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[25]; __pyx_lineno = 28; __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(25, 28, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           __pyx_t_10 = NULL;
           if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -50910,18 +53257,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 28; __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(25, 28, __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[25]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 28, __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[25]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_2))) __PYX_ERR(25, 28, __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);
@@ -50934,13 +53279,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 29; __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(25, 29, __pyx_L1_error)
+
+      /* "PETSc/Sys.pyx":26
+ *                 date = bytes2str(cdate)
+ *                 out.append(date)
+ *             if author:             # <<<<<<<<<<<<<<
+ *                 author = bytes2str(cauthorinfo).split('\n')
+ *                 author = [s.strip() for s in author if s]
+ */
     }
-    __pyx_L11:;
-    goto __pyx_L3;
+
+    /* "PETSc/Sys.pyx":17
+ *         version = (cmajor, cminor, cmicro)
+ *         out = version
+ *         if patch or devel or date or author:             # <<<<<<<<<<<<<<
+ *             out = [version]
+ *             if patch:
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/Sys.pyx":30
  *                 author = [s.strip() for s in author if s]
@@ -50950,7 +53307,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_out); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
@@ -51002,14 +53359,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_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_8petsc4py_5PETSc_3Sys_2getVersionInfo(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_2getVersionInfo(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_2getVersionInfo(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_2getVersionInfo(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   int __pyx_v_cmajor;
   int __pyx_v_cminor;
   int __pyx_v_cmicro;
@@ -51029,9 +53386,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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);
 
   /* "PETSc/Sys.pyx":34
@@ -51104,12 +53458,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *         author = [s.strip() for s in author if s]
  *         return dict(major      = cmajor,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cauthorinfo); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cauthorinfo); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 41, __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[25]; __pyx_lineno = 41; __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(25, 41, __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__34, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_author = __pyx_t_1;
@@ -51122,32 +53476,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 42, __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[25]; __pyx_lineno = 42; __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(25, 42, __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[25]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 42, __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[25]; __pyx_lineno = 42; __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(25, 42, __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[25]; __pyx_lineno = 42; __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(25, 42, __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[25]; __pyx_lineno = 42; __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(25, 42, __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[25]; __pyx_lineno = 42; __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(25, 42, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       }
@@ -51157,7 +53511,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(25, 42, __pyx_L1_error)
         }
         break;
       }
@@ -51165,9 +53519,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_s); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(25, 42, __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[25]; __pyx_lineno = 42; __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(25, 42, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_8 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
@@ -51180,18 +53534,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 42; __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(25, 42, __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[25]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 42, __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[25]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(25, 42, __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);
@@ -51205,11 +53557,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 43, __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[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cmajor); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 43, __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[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_major, __pyx_t_2) < 0) __PYX_ERR(25, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "PETSc/Sys.pyx":44
@@ -51219,9 +53571,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cminor); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 44, __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[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_minor, __pyx_t_2) < 0) __PYX_ERR(25, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "PETSc/Sys.pyx":45
@@ -51231,9 +53583,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cmicro); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 45, __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[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_subminor, __pyx_t_2) < 0) __PYX_ERR(25, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "PETSc/Sys.pyx":46
@@ -51243,9 +53595,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cpatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 46, __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[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_patch, __pyx_t_2) < 0) __PYX_ERR(25, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "PETSc/Sys.pyx":47
@@ -51255,9 +53607,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_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[25]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_crelease != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 47, __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[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_release, __pyx_t_2) < 0) __PYX_ERR(25, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "PETSc/Sys.pyx":48
@@ -51267,9 +53619,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *                     authorinfo = author)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cdate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cdate); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 48, __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[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_date, __pyx_t_2) < 0) __PYX_ERR(25, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "PETSc/Sys.pyx":49
@@ -51279,7 +53631,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  * 
  *     # --- xxx ---
  */
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_authorinfo, __pyx_v_author) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_authorinfo, __pyx_v_author) < 0) __PYX_ERR(25, 43, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
@@ -51327,20 +53679,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_5isInitialized(PyObject *__pyx_v
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("isInitialized", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isInitialized", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   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("isInitialized", 0);
 
   /* "PETSc/Sys.pyx":55
@@ -51351,7 +53700,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(CYTHON_UNUSED PyO
  *     @classmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(PetscInitializeCalled); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_PetscBool(PetscInitializeCalled); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -51394,20 +53743,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_7isFinalized(PyObject *__pyx_v_c
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("isFinalized", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isFinalized", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   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("isFinalized", 0);
 
   /* "PETSc/Sys.pyx":59
@@ -51418,7 +53764,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(CYTHON_UNUSED PyObj
  *     # --- xxx ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(PetscFinalizeCalled); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_PetscBool(PetscFinalizeCalled); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -51461,21 +53807,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_9getDefaultComm(PyObject *__pyx_
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getDefaultComm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDefaultComm", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   struct PyPetscCommObject *__pyx_v_comm = 0;
   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("getDefaultComm", 0);
 
   /* "PETSc/Sys.pyx":65
@@ -51485,7 +53828,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED Py
  *         comm.comm = PETSC_COMM_DEFAULT
  *         return comm
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_comm = ((struct PyPetscCommObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -51544,9 +53887,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_11setDefaultComm(PyObject *__pyx
 static char __pyx_doc_8petsc4py_5PETSc_3Sys_10setDefaultComm[] = "Sys.setDefaultComm(type cls, comm)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_11setDefaultComm(PyObject *__pyx_v_cls, 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("setDefaultComm (wrapper)", 0);
@@ -51568,7 +53908,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_11setDefaultComm(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, "setDefaultComm") < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDefaultComm") < 0)) __PYX_ERR(25, 70, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -51579,29 +53919,26 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_11setDefaultComm(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDefaultComm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[25]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDefaultComm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 70, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.setDefaultComm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(((PyObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   MPI_Comm __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("setDefaultComm", 0);
 
   /* "PETSc/Sys.pyx":71
@@ -51611,7 +53948,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED P
  *         if ccomm == MPI_COMM_NULL:
  *             raise ValueError("null communicator")
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, PETSC_COMM_WORLD); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, PETSC_COMM_WORLD); if (unlikely(PyErr_Occurred())) __PYX_ERR(25, 71, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/Sys.pyx":72
@@ -51631,11 +53968,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED P
  *         global PETSC_COMM_DEFAULT
  *         PETSC_COMM_DEFAULT = ccomm
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 73, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[25]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(25, 73, __pyx_L1_error)
+
+    /* "PETSc/Sys.pyx":72
+ *     def setDefaultComm(cls, comm):
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_WORLD)
+ *         if ccomm == MPI_COMM_NULL:             # <<<<<<<<<<<<<<
+ *             raise ValueError("null communicator")
+ *         global PETSC_COMM_DEFAULT
+ */
   }
 
   /* "PETSc/Sys.pyx":75
@@ -51686,12 +54031,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_13Print(PyObject *__pyx_v_cls, P
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("Print (wrapper)", 0);
   if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Print", 1))) return NULL;
-  __pyx_v_kargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New();
-  if (unlikely(!__pyx_v_kargs)) return NULL;
+  __pyx_v_kargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); if (unlikely(!__pyx_v_kargs)) return NULL;
   __Pyx_GOTREF(__pyx_v_kargs);
   __Pyx_INCREF(__pyx_args);
   __pyx_v_args = __pyx_args;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_12Print(((PyObject*)__pyx_v_cls), __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_12Print(((PyTypeObject*)__pyx_v_cls), __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_XDECREF(__pyx_v_args);
@@ -51700,7 +54044,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_13Print(PyObject *__pyx_v_cls, P
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_comm = 0;
   MPI_Comm __pyx_v_ccomm;
   PyObject *__pyx_v_sep = 0;
@@ -51717,9 +54061,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
   int __pyx_t_5;
   Py_ssize_t __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Print", 0);
   __Pyx_INCREF(__pyx_v_args);
 
@@ -51730,7 +54071,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef object sep = kargs.get('sep', ' ')
  */
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_comm, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_comm, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_comm = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -51742,7 +54083,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *         cdef object sep = kargs.get('sep', ' ')
  *         cdef object end = kargs.get('end', '\n')
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(25, 82, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_2;
 
   /* "PETSc/Sys.pyx":83
@@ -51752,7 +54093,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *         cdef object end = kargs.get('end', '\n')
  *         if comm_rank(ccomm) == 0:
  */
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_sep, __pyx_kp_s__2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_sep, __pyx_kp_s__2); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 83, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sep = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -51764,7 +54105,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *         if comm_rank(ccomm) == 0:
  *             if not args: args = ('',)
  */
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_end, __pyx_kp_s__32); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_end, __pyx_kp_s__32); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 84, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_end = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -51776,7 +54117,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *             if not args: args = ('',)
  *             format = ['%s', sep] * len(args)
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_comm_rank(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_comm_rank(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) __PYX_ERR(25, 85, __pyx_L1_error)
   __pyx_t_4 = ((__pyx_t_3 == 0) != 0);
   if (__pyx_t_4) {
 
@@ -51792,9 +54133,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
     if (__pyx_t_5) {
       __Pyx_INCREF(__pyx_tuple__36);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_tuple__36);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/Sys.pyx":87
  *         if comm_rank(ccomm) == 0:
@@ -51803,8 +54142,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *             format[-1] = end
  *             message = ''.join(format) % args
  */
-    __pyx_t_6 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_1 = PyList_New(2 * ((__pyx_t_6<0) ? 0:__pyx_t_6)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(25, 87, __pyx_L1_error)
+    __pyx_t_1 = PyList_New(2 * ((__pyx_t_6<0) ? 0:__pyx_t_6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 87, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     { Py_ssize_t __pyx_temp;
       for (__pyx_temp=0; __pyx_temp < __pyx_t_6; __pyx_temp++) {
@@ -51826,7 +54165,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *             message = ''.join(format) % args
  *         else:
  */
-    if (unlikely(__Pyx_SetItemInt(__pyx_v_format, -1, __pyx_v_end, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_format, -1L, __pyx_v_end, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0)) __PYX_ERR(25, 88, __pyx_L1_error)
 
     /* "PETSc/Sys.pyx":89
  *             format = ['%s', sep] * len(args)
@@ -51835,24 +54174,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *         else:
  *             message = ''
  */
-    __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__10, __pyx_v_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__10, __pyx_v_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 89, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = PyNumber_Remainder(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyNumber_Remainder(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(25, 89, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_v_message = __pyx_t_7;
     __pyx_t_7 = 0;
+
+    /* "PETSc/Sys.pyx":85
+ *         cdef object sep = kargs.get('sep', ' ')
+ *         cdef object end = kargs.get('end', '\n')
+ *         if comm_rank(ccomm) == 0:             # <<<<<<<<<<<<<<
+ *             if not args: args = ('',)
+ *             format = ['%s', sep] * len(args)
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Sys.pyx":91
+  /* "PETSc/Sys.pyx":91
  *             message = ''.join(format) % args
  *         else:
  *             message = ''             # <<<<<<<<<<<<<<
  *         cdef const_char *m = NULL
  *         message = str2bytes(message, &m)
  */
+  /*else*/ {
     __Pyx_INCREF(__pyx_kp_s__10);
     __pyx_v_message = __pyx_kp_s__10;
   }
@@ -51874,7 +54221,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  *         CHKERR( PetscPrintf(ccomm, m) )
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_message, (&__pyx_v_m)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_message, (&__pyx_v_m)); if (unlikely(!__pyx_t_7)) __PYX_ERR(25, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_7);
   __pyx_t_7 = 0;
@@ -51886,7 +54233,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyObject *
  * 
  *     @classmethod
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPrintf(__pyx_v_ccomm, __pyx_v_m)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPrintf(__pyx_v_ccomm, __pyx_v_m)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(25, 94, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":80
  * 
@@ -51934,12 +54281,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_15syncPrint(PyObject *__pyx_v_cl
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("syncPrint (wrapper)", 0);
   if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "syncPrint", 1))) return NULL;
-  __pyx_v_kargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New();
-  if (unlikely(!__pyx_v_kargs)) return NULL;
+  __pyx_v_kargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); if (unlikely(!__pyx_v_kargs)) return NULL;
   __Pyx_GOTREF(__pyx_v_kargs);
   __Pyx_INCREF(__pyx_args);
   __pyx_v_args = __pyx_args;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(((PyObject*)__pyx_v_cls), __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(((PyTypeObject*)__pyx_v_cls), __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_XDECREF(__pyx_v_args);
@@ -51948,7 +54294,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_15syncPrint(PyObject *__pyx_v_cl
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_comm = 0;
   MPI_Comm __pyx_v_ccomm;
   PyObject *__pyx_v_sep = 0;
@@ -51966,9 +54312,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
   Py_ssize_t __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("syncPrint", 0);
   __Pyx_INCREF(__pyx_v_args);
 
@@ -51979,7 +54322,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef object sep = kargs.get('sep', ' ')
  */
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_comm, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_comm, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 98, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_comm = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -51991,7 +54334,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         cdef object sep = kargs.get('sep', ' ')
  *         cdef object end = kargs.get('end', '\n')
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(25, 99, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_2;
 
   /* "PETSc/Sys.pyx":100
@@ -52001,7 +54344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         cdef object end = kargs.get('end', '\n')
  *         cdef object flush = kargs.get('flush', False)
  */
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_sep, __pyx_kp_s__2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_sep, __pyx_kp_s__2); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sep = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -52013,7 +54356,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         cdef object flush = kargs.get('flush', False)
  *         if not args: args = ('',)
  */
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_end, __pyx_kp_s__32); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_end, __pyx_kp_s__32); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_end = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -52025,7 +54368,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         if not args: args = ('',)
  *         format = ['%s', sep] * len(args)
  */
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_flush, Py_False); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_kargs, __pyx_n_s_flush, Py_False); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_flush = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -52042,9 +54385,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
   if (__pyx_t_4) {
     __Pyx_INCREF(__pyx_tuple__37);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_tuple__37);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/Sys.pyx":104
  *         cdef object flush = kargs.get('flush', False)
@@ -52053,8 +54394,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         format[-1] = end
  *         message = ''.join(format) % args
  */
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = PyList_New(2 * ((__pyx_t_5<0) ? 0:__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(25, 104, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(2 * ((__pyx_t_5<0) ? 0:__pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   { Py_ssize_t __pyx_temp;
     for (__pyx_temp=0; __pyx_temp < __pyx_t_5; __pyx_temp++) {
@@ -52076,7 +54417,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         message = ''.join(format) % args
  *         cdef const_char *m = NULL
  */
-  if (unlikely(__Pyx_SetItemInt(__pyx_v_format, -1, __pyx_v_end, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(__Pyx_SetItemInt(__pyx_v_format, -1L, __pyx_v_end, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0)) __PYX_ERR(25, 105, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":106
  *         format = ['%s', sep] * len(args)
@@ -52085,9 +54426,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         cdef const_char *m = NULL
  *         message = str2bytes(message, &m)
  */
-  __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__10, __pyx_v_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__10, __pyx_v_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = PyNumber_Remainder(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyNumber_Remainder(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(25, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_message = __pyx_t_6;
@@ -52109,7 +54450,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         CHKERR( PetscSynchronizedPrintf(ccomm, m) )
  *         if flush: CHKERR( PetscSynchronizedFlush(ccomm, PETSC_STDOUT) )
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_message, (&__pyx_v_m)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_message, (&__pyx_v_m)); if (unlikely(!__pyx_t_6)) __PYX_ERR(25, 108, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_6);
   __pyx_t_6 = 0;
@@ -52121,7 +54462,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  *         if flush: CHKERR( PetscSynchronizedFlush(ccomm, PETSC_STDOUT) )
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedPrintf(__pyx_v_ccomm, __pyx_v_m)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedPrintf(__pyx_v_ccomm, __pyx_v_m)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(25, 109, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":110
  *         message = str2bytes(message, &m)
@@ -52130,12 +54471,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyObje
  * 
  *     @classmethod
  */
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_flush); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_flush); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(25, 110, __pyx_L1_error)
   if (__pyx_t_4) {
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedFlush(__pyx_v_ccomm, PETSC_STDOUT)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedFlush(__pyx_v_ccomm, PETSC_STDOUT)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(25, 110, __pyx_L1_error)
   }
-  __pyx_L4:;
 
   /* "PETSc/Sys.pyx":97
  * 
@@ -52179,9 +54518,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_17syncFlush(PyObject *__pyx_v_cl
 static char __pyx_doc_8petsc4py_5PETSc_3Sys_16syncFlush[] = "Sys.syncFlush(type cls, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_17syncFlush(PyObject *__pyx_v_cls, 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("syncFlush (wrapper)", 0);
@@ -52206,7 +54542,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_17syncFlush(PyObject *__pyx_v_cl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "syncFlush") < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "syncFlush") < 0)) __PYX_ERR(25, 113, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -52219,28 +54555,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_17syncFlush(PyObject *__pyx_v_cl
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("syncFlush", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[25]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("syncFlush", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 113, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.syncFlush", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(((PyObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   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("syncFlush", 0);
 
   /* "PETSc/Sys.pyx":114
@@ -52250,7 +54583,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(CYTHON_UNUSED PyObje
  *         CHKERR( PetscSynchronizedFlush(ccomm, PETSC_STDOUT) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(25, 114, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/Sys.pyx":115
@@ -52260,7 +54593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(CYTHON_UNUSED PyObje
  * 
  *     # --- xxx ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedFlush(__pyx_v_ccomm, PETSC_STDOUT)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedFlush(__pyx_v_ccomm, PETSC_STDOUT)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(25, 115, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":113
  * 
@@ -52297,9 +54630,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_19splitOwnership(PyObject *__pyx
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
   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("splitOwnership (wrapper)", 0);
@@ -52335,7 +54665,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_19splitOwnership(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "splitOwnership") < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "splitOwnership") < 0)) __PYX_ERR(25, 120, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -52352,20 +54682,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_19splitOwnership(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("splitOwnership", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[25]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("splitOwnership", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 120, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.splitOwnership", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(((PyObject*)__pyx_v_cls), __pyx_v_size, __pyx_v_bsize, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(((PyTypeObject*)__pyx_v_cls), __pyx_v_size, __pyx_v_bsize, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_size, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   PetscInt __pyx_v_bs;
   PetscInt __pyx_v_n;
@@ -52378,9 +54708,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
   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("splitOwnership", 0);
 
   /* "PETSc/Sys.pyx":121
@@ -52390,7 +54717,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
  *         cdef PetscInt bs=0, n=0, N=0
  *         Sys_Sizes(size, bsize, &bs, &n, &N)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(25, 121, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/Sys.pyx":122
@@ -52411,7 +54738,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
  *         if bs == PETSC_DECIDE: bs = 1
  *         if n > 0: n = n // bs
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(25, 123, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":124
  *         cdef PetscInt bs=0, n=0, N=0
@@ -52423,9 +54750,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
   __pyx_t_3 = ((__pyx_v_bs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_bs = 1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/Sys.pyx":125
  *         Sys_Sizes(size, bsize, &bs, &n, &N)
@@ -52437,9 +54762,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
   __pyx_t_3 = ((__pyx_v_n > 0) != 0);
   if (__pyx_t_3) {
     __pyx_v_n = (__pyx_v_n / __pyx_v_bs);
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/Sys.pyx":126
  *         if bs == PETSC_DECIDE: bs = 1
@@ -52451,9 +54774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
   __pyx_t_3 = ((__pyx_v_N > 0) != 0);
   if (__pyx_t_3) {
     __pyx_v_N = (__pyx_v_N / __pyx_v_bs);
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
   /* "PETSc/Sys.pyx":127
  *         if n > 0: n = n // bs
@@ -52462,7 +54783,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
  *         n = n * bs
  *         N = N * bs
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSplitOwnership(__pyx_v_ccomm, (&__pyx_v_n), (&__pyx_v_N))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSplitOwnership(__pyx_v_ccomm, (&__pyx_v_n), (&__pyx_v_N))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(25, 127, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":128
  *         if N > 0: N = N // bs
@@ -52490,11 +54811,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
  *     @classmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(25, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -52540,9 +54861,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_21sleep(PyObject *__pyx_v_cls, P
 static char __pyx_doc_8petsc4py_5PETSc_3Sys_20sleep[] = "Sys.sleep(type cls, seconds=1)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_21sleep(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_seconds = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("sleep (wrapper)", 0);
@@ -52567,7 +54885,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_21sleep(PyObject *__pyx_v_cls, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sleep") < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sleep") < 0)) __PYX_ERR(25, 133, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -52580,27 +54898,24 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_21sleep(PyObject *__pyx_v_cls, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("sleep", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[25]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("sleep", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 133, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.sleep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(((PyObject*)__pyx_v_cls), __pyx_v_seconds);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(((PyTypeObject*)__pyx_v_cls), __pyx_v_seconds);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_seconds) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_seconds) {
   int __pyx_v_s;
   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("sleep", 0);
 
   /* "PETSc/Sys.pyx":134
@@ -52610,7 +54925,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(CYTHON_UNUSED PyObject *
  *         CHKERR( PetscSleep(s) )
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_seconds); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_seconds); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(25, 134, __pyx_L1_error)
   __pyx_v_s = __pyx_t_1;
 
   /* "PETSc/Sys.pyx":135
@@ -52620,7 +54935,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(CYTHON_UNUSED PyObject *
  * 
  *     # --- xxx ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSleep(__pyx_v_s)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSleep(__pyx_v_s)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(25, 135, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":133
  * 
@@ -52655,9 +54970,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_23pushErrorHandler(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_3Sys_22pushErrorHandler[] = "Sys.pushErrorHandler(type cls, errhandler)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_23pushErrorHandler(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_errhandler = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("pushErrorHandler (wrapper)", 0);
@@ -52679,7 +54991,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_23pushErrorHandler(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, "pushErrorHandler") < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pushErrorHandler") < 0)) __PYX_ERR(25, 140, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -52690,20 +55002,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_23pushErrorHandler(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pushErrorHandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[25]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pushErrorHandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 140, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.pushErrorHandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(((PyObject*)__pyx_v_cls), __pyx_v_errhandler);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(((PyTypeObject*)__pyx_v_cls), __pyx_v_errhandler);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_errhandler) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_errhandler) {
   PetscErrorHandlerFunction __pyx_v_handler;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -52711,9 +55023,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pushErrorHandler", 0);
 
   /* "PETSc/Sys.pyx":141
@@ -52732,7 +55041,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = <PetscErrorHandlerFunction> \
  *                       PetscPythonErrorHandler
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_python, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_python, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 142, __pyx_L1_error)
   if (__pyx_t_1) {
 
     /* "PETSc/Sys.pyx":143
@@ -52743,6 +55052,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *         elif errhandler == "debugger":
  */
     __pyx_v_handler = ((PetscErrorHandlerFunction)__pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler);
+
+    /* "PETSc/Sys.pyx":142
+ *     def pushErrorHandler(cls, errhandler):
+ *         cdef PetscErrorHandlerFunction handler = NULL
+ *         if errhandler == "python":             # <<<<<<<<<<<<<<
+ *             handler = <PetscErrorHandlerFunction> \
+ *                       PetscPythonErrorHandler
+ */
     goto __pyx_L3;
   }
 
@@ -52753,7 +55070,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscAttachDebuggerErrorHandler
  *         elif errhandler == "emacs":
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_debugger, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_debugger, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 145, __pyx_L1_error)
   if (__pyx_t_1) {
 
     /* "PETSc/Sys.pyx":146
@@ -52764,6 +55081,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscEmacsClientErrorHandler
  */
     __pyx_v_handler = PetscAttachDebuggerErrorHandler;
+
+    /* "PETSc/Sys.pyx":145
+ *             handler = <PetscErrorHandlerFunction> \
+ *                       PetscPythonErrorHandler
+ *         elif errhandler == "debugger":             # <<<<<<<<<<<<<<
+ *             handler = PetscAttachDebuggerErrorHandler
+ *         elif errhandler == "emacs":
+ */
     goto __pyx_L3;
   }
 
@@ -52774,7 +55099,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscEmacsClientErrorHandler
  *         elif errhandler == "traceback":
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_emacs, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_emacs, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 147, __pyx_L1_error)
   if (__pyx_t_1) {
 
     /* "PETSc/Sys.pyx":148
@@ -52785,6 +55110,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscTraceBackErrorHandler
  */
     __pyx_v_handler = PetscEmacsClientErrorHandler;
+
+    /* "PETSc/Sys.pyx":147
+ *         elif errhandler == "debugger":
+ *             handler = PetscAttachDebuggerErrorHandler
+ *         elif errhandler == "emacs":             # <<<<<<<<<<<<<<
+ *             handler = PetscEmacsClientErrorHandler
+ *         elif errhandler == "traceback":
+ */
     goto __pyx_L3;
   }
 
@@ -52795,7 +55128,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscTraceBackErrorHandler
  *         elif errhandler == "ignore":
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_traceback_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_traceback_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 149, __pyx_L1_error)
   if (__pyx_t_1) {
 
     /* "PETSc/Sys.pyx":150
@@ -52806,6 +55139,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscIgnoreErrorHandler
  */
     __pyx_v_handler = PetscTraceBackErrorHandler;
+
+    /* "PETSc/Sys.pyx":149
+ *         elif errhandler == "emacs":
+ *             handler = PetscEmacsClientErrorHandler
+ *         elif errhandler == "traceback":             # <<<<<<<<<<<<<<
+ *             handler = PetscTraceBackErrorHandler
+ *         elif errhandler == "ignore":
+ */
     goto __pyx_L3;
   }
 
@@ -52816,7 +55157,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscIgnoreErrorHandler
  *         elif errhandler == "mpiabort":
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_ignore, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_ignore, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 151, __pyx_L1_error)
   if (__pyx_t_1) {
 
     /* "PETSc/Sys.pyx":152
@@ -52827,6 +55168,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscMPIAbortErrorHandler
  */
     __pyx_v_handler = PetscIgnoreErrorHandler;
+
+    /* "PETSc/Sys.pyx":151
+ *         elif errhandler == "traceback":
+ *             handler = PetscTraceBackErrorHandler
+ *         elif errhandler == "ignore":             # <<<<<<<<<<<<<<
+ *             handler = PetscIgnoreErrorHandler
+ *         elif errhandler == "mpiabort":
+ */
     goto __pyx_L3;
   }
 
@@ -52837,7 +55186,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscMPIAbortErrorHandler
  *         elif errhandler == "abort":
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_mpiabort, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_mpiabort, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 153, __pyx_L1_error)
   if (__pyx_t_1) {
 
     /* "PETSc/Sys.pyx":154
@@ -52848,6 +55197,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscAbortErrorHandler
  */
     __pyx_v_handler = PetscMPIAbortErrorHandler;
+
+    /* "PETSc/Sys.pyx":153
+ *         elif errhandler == "ignore":
+ *             handler = PetscIgnoreErrorHandler
+ *         elif errhandler == "mpiabort":             # <<<<<<<<<<<<<<
+ *             handler = PetscMPIAbortErrorHandler
+ *         elif errhandler == "abort":
+ */
     goto __pyx_L3;
   }
 
@@ -52858,7 +55215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             handler = PetscAbortErrorHandler
  *         else:
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_abort, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_errhandler, __pyx_n_s_abort, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 155, __pyx_L1_error)
   if (__pyx_t_1) {
 
     /* "PETSc/Sys.pyx":156
@@ -52869,8 +55226,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *             raise ValueError(
  */
     __pyx_v_handler = PetscAbortErrorHandler;
+
+    /* "PETSc/Sys.pyx":155
+ *         elif errhandler == "mpiabort":
+ *             handler = PetscMPIAbortErrorHandler
+ *         elif errhandler == "abort":             # <<<<<<<<<<<<<<
+ *             handler = PetscAbortErrorHandler
+ *         else:
+ */
     goto __pyx_L3;
   }
+
+  /* "PETSc/Sys.pyx":158
+ *             handler = PetscAbortErrorHandler
+ *         else:
+ *             raise ValueError(             # <<<<<<<<<<<<<<
+ *                 "unknown error handler: %s" % errhandler)
+ *         CHKERR( PetscPushErrorHandler(handler, NULL) )
+ */
   /*else*/ {
 
     /* "PETSc/Sys.pyx":159
@@ -52880,7 +55253,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *         CHKERR( PetscPushErrorHandler(handler, NULL) )
  * 
  */
-    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_unknown_error_handler_s, __pyx_v_errhandler); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_unknown_error_handler_s, __pyx_v_errhandler); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 159, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
 
     /* "PETSc/Sys.pyx":158
@@ -52890,17 +55263,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  *                 "unknown error handler: %s" % errhandler)
  *         CHKERR( PetscPushErrorHandler(handler, NULL) )
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 158, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 158, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[25]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(25, 158, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -52911,7 +55284,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  * 
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPushErrorHandler(__pyx_v_handler, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPushErrorHandler(__pyx_v_handler, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(25, 160, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":140
  * 
@@ -52953,20 +55326,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_25popErrorHandler(PyObject *__py
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("popErrorHandler", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "popErrorHandler", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   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("popErrorHandler", 0);
 
   /* "PETSc/Sys.pyx":165
@@ -52974,9 +55344,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED
  *     def popErrorHandler(cls):
  *         CHKERR( PetscPopErrorHandler() )             # <<<<<<<<<<<<<<
  * 
- * # --------------------------------------------------------------------
+ *     @classmethod
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPopErrorHandler()); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPopErrorHandler()); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(25, 165, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":164
  * 
@@ -52998,6 +55368,399 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED
   return __pyx_r;
 }
 
+/* "PETSc/Sys.pyx":168
+ * 
+ *     @classmethod
+ *     def infoAllow(cls, flag):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_27infoAllow(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Sys_26infoAllow[] = "Sys.infoAllow(type cls, flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_27infoAllow(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("infoAllow (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, "infoAllow") < 0)) __PYX_ERR(25, 168, __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];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("infoAllow", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 168, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Sys.infoAllow", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_26infoAllow(((PyTypeObject*)__pyx_v_cls), __pyx_v_flag);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_26infoAllow(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_flag) {
+  PetscBool __pyx_v_tval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("infoAllow", 0);
+
+  /* "PETSc/Sys.pyx":169
+ *     @classmethod
+ *     def infoAllow(cls, flag):
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         if flag: tval = PETSC_TRUE
+ *         CHKERR( PetscInfoAllow(tval, NULL) )
+ */
+  __pyx_v_tval = PETSC_FALSE;
+
+  /* "PETSc/Sys.pyx":170
+ *     def infoAllow(cls, flag):
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscInfoAllow(tval, NULL) )
+ * 
+ */
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 170, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_v_tval = PETSC_TRUE;
+  }
+
+  /* "PETSc/Sys.pyx":171
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE
+ *         CHKERR( PetscInfoAllow(tval, NULL) )             # <<<<<<<<<<<<<<
+ * 
+ *     @classmethod
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscInfoAllow(__pyx_v_tval, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(25, 171, __pyx_L1_error)
+
+  /* "PETSc/Sys.pyx":168
+ * 
+ *     @classmethod
+ *     def infoAllow(cls, flag):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Sys.infoAllow", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Sys.pyx":174
+ * 
+ *     @classmethod
+ *     def registerCitation(cls, citation):             # <<<<<<<<<<<<<<
+ *         if not citation: raise ValueError("empty citation")
+ *         cdef const_char *cit = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_29registerCitation(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Sys_28registerCitation[] = "Sys.registerCitation(type cls, citation)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_29registerCitation(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_citation = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("registerCitation (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_citation,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_citation)) != 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, "registerCitation") < 0)) __PYX_ERR(25, 174, __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_citation = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("registerCitation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 174, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Sys.registerCitation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_28registerCitation(((PyTypeObject*)__pyx_v_cls), __pyx_v_citation);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_28registerCitation(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_citation) {
+  const char *__pyx_v_cit;
+  PetscBool __pyx_v_set;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("registerCitation", 0);
+  __Pyx_INCREF(__pyx_v_citation);
+
+  /* "PETSc/Sys.pyx":175
+ *     @classmethod
+ *     def registerCitation(cls, citation):
+ *         if not citation: raise ValueError("empty citation")             # <<<<<<<<<<<<<<
+ *         cdef const_char *cit = NULL
+ *         citation = str2bytes(citation, &cit)
+ */
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_citation); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 175, __pyx_L1_error)
+  __pyx_t_2 = ((!__pyx_t_1) != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 175, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(25, 175, __pyx_L1_error)
+  }
+
+  /* "PETSc/Sys.pyx":176
+ *     def registerCitation(cls, citation):
+ *         if not citation: raise ValueError("empty citation")
+ *         cdef const_char *cit = NULL             # <<<<<<<<<<<<<<
+ *         citation = str2bytes(citation, &cit)
+ *         cdef PetscBool set = get_citation(citation)
+ */
+  __pyx_v_cit = NULL;
+
+  /* "PETSc/Sys.pyx":177
+ *         if not citation: raise ValueError("empty citation")
+ *         cdef const_char *cit = NULL
+ *         citation = str2bytes(citation, &cit)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool set = get_citation(citation)
+ *         CHKERR( PetscCitationsRegister(cit, &set) )
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_citation, (&__pyx_v_cit)); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 177, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF_SET(__pyx_v_citation, __pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/Sys.pyx":178
+ *         cdef const_char *cit = NULL
+ *         citation = str2bytes(citation, &cit)
+ *         cdef PetscBool set = get_citation(citation)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscCitationsRegister(cit, &set) )
+ *         set_citation(citation, <bint>set)
+ */
+  __pyx_v_set = __pyx_f_8petsc4py_5PETSc_get_citation(__pyx_v_citation);
+
+  /* "PETSc/Sys.pyx":179
+ *         citation = str2bytes(citation, &cit)
+ *         cdef PetscBool set = get_citation(citation)
+ *         CHKERR( PetscCitationsRegister(cit, &set) )             # <<<<<<<<<<<<<<
+ *         set_citation(citation, <bint>set)
+ * 
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCitationsRegister(__pyx_v_cit, (&__pyx_v_set))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(25, 179, __pyx_L1_error)
+
+  /* "PETSc/Sys.pyx":180
+ *         cdef PetscBool set = get_citation(citation)
+ *         CHKERR( PetscCitationsRegister(cit, &set) )
+ *         set_citation(citation, <bint>set)             # <<<<<<<<<<<<<<
+ * 
+ * cdef dict citations_registry = { }
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_set_citation(__pyx_v_citation, __pyx_v_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 180, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/Sys.pyx":174
+ * 
+ *     @classmethod
+ *     def registerCitation(cls, citation):             # <<<<<<<<<<<<<<
+ *         if not citation: raise ValueError("empty citation")
+ *         cdef const_char *cit = NULL
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Sys.registerCitation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_citation);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Sys.pyx":184
+ * cdef dict citations_registry = { }
+ * 
+ * cdef PetscBool get_citation(object citation):             # <<<<<<<<<<<<<<
+ *     cdef bint is_set = citations_registry.get(citation)
+ *     return PETSC_TRUE if is_set else PETSC_FALSE
+ */
+
+static PetscBool __pyx_f_8petsc4py_5PETSc_get_citation(PyObject *__pyx_v_citation) {
+  int __pyx_v_is_set;
+  PetscBool __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PetscBool __pyx_t_3;
+  __Pyx_RefNannySetupContext("get_citation", 0);
+
+  /* "PETSc/Sys.pyx":185
+ * 
+ * cdef PetscBool get_citation(object citation):
+ *     cdef bint is_set = citations_registry.get(citation)             # <<<<<<<<<<<<<<
+ *     return PETSC_TRUE if is_set else PETSC_FALSE
+ * 
+ */
+  if (unlikely(__pyx_v_8petsc4py_5PETSc_citations_registry == Py_None)) {
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
+    __PYX_ERR(25, 185, __pyx_L1_error)
+  }
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_8petsc4py_5PETSc_citations_registry, __pyx_v_citation, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 185, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(25, 185, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_is_set = __pyx_t_2;
+
+  /* "PETSc/Sys.pyx":186
+ * cdef PetscBool get_citation(object citation):
+ *     cdef bint is_set = citations_registry.get(citation)
+ *     return PETSC_TRUE if is_set else PETSC_FALSE             # <<<<<<<<<<<<<<
+ * 
+ * cdef set_citation(object citation, bint is_set):
+ */
+  if ((__pyx_v_is_set != 0)) {
+    __pyx_t_3 = PETSC_TRUE;
+  } else {
+    __pyx_t_3 = PETSC_FALSE;
+  }
+  __pyx_r = __pyx_t_3;
+  goto __pyx_L0;
+
+  /* "PETSc/Sys.pyx":184
+ * cdef dict citations_registry = { }
+ * 
+ * cdef PetscBool get_citation(object citation):             # <<<<<<<<<<<<<<
+ *     cdef bint is_set = citations_registry.get(citation)
+ *     return PETSC_TRUE if is_set else PETSC_FALSE
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.get_citation", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __pyx_r = (PetscBool) 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Sys.pyx":188
+ *     return PETSC_TRUE if is_set else PETSC_FALSE
+ * 
+ * cdef set_citation(object citation, bint is_set):             # <<<<<<<<<<<<<<
+ *     citations_registry[citation] = is_set
+ * 
+ */
+
+static PyObject *__pyx_f_8petsc4py_5PETSc_set_citation(PyObject *__pyx_v_citation, int __pyx_v_is_set) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("set_citation", 0);
+
+  /* "PETSc/Sys.pyx":189
+ * 
+ * cdef set_citation(object citation, bint is_set):
+ *     citations_registry[citation] = is_set             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
+ */
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_is_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 189, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (unlikely(__pyx_v_8petsc4py_5PETSc_citations_registry == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+    __PYX_ERR(25, 189, __pyx_L1_error)
+  }
+  if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_citations_registry, __pyx_v_citation, __pyx_t_1) < 0)) __PYX_ERR(25, 189, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/Sys.pyx":188
+ *     return PETSC_TRUE if is_set else PETSC_FALSE
+ * 
+ * cdef set_citation(object citation, bint is_set):             # <<<<<<<<<<<<<<
+ *     citations_registry[citation] = is_set
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.set_citation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
 /* "PETSc/Log.pyx":6
  * 
  *     @classmethod
@@ -53011,9 +55774,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_1Stage(PyObject *__pyx_v_cls, Py
 static char __pyx_doc_8petsc4py_5PETSc_3Log_Stage[] = "Log.Stage(type cls, name)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_1Stage(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("Stage (wrapper)", 0);
@@ -53035,7 +55795,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_1Stage(PyObject *__pyx_v_cls, Py
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Stage") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Stage") < 0)) __PYX_ERR(26, 6, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -53046,20 +55806,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_1Stage(PyObject *__pyx_v_cls, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("Stage", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("Stage", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 6, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Log.Stage", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_Stage(((PyObject*)__pyx_v_cls), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_Stage(((PyTypeObject*)__pyx_v_cls), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name) {
   const char *__pyx_v_cname;
   PetscLogStage __pyx_v_stageid;
   struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_stage = 0;
@@ -53069,9 +55829,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Stage", 0);
   __Pyx_INCREF(__pyx_v_name);
 
@@ -53082,14 +55839,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 7, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 7, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 7, __pyx_L1_error)
   }
 
   /* "PETSc/Log.pyx":8
@@ -53108,7 +55865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__
  *         cdef PetscLogStage stageid = -1
  *         cdef LogStage stage = get_LogStage(name)
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
   __pyx_t_3 = 0;
@@ -53129,7 +55886,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__
  *         if stage is not None: return stage
  *         CHKERR( PetscLogStageFindId(cname, &stageid) )
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_get_LogStage(__pyx_v_name)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_get_LogStage(__pyx_v_name)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_stage = ((struct __pyx_obj_8petsc4py_5PETSc_LogStage *)__pyx_t_3);
   __pyx_t_3 = 0;
@@ -53157,7 +55914,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__
  *         if stageid == -1:
  *             CHKERR( PetscLogStageRegister(cname, &stageid) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageFindId(__pyx_v_cname, (&__pyx_v_stageid))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageFindId(__pyx_v_cname, (&__pyx_v_stageid))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(26, 13, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":14
  *         if stage is not None: return stage
@@ -53166,7 +55923,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__
  *             CHKERR( PetscLogStageRegister(cname, &stageid) )
  *         stage = reg_LogStage(name, stageid)
  */
-  __pyx_t_1 = ((__pyx_v_stageid == -1) != 0);
+  __pyx_t_1 = ((__pyx_v_stageid == -1L) != 0);
   if (__pyx_t_1) {
 
     /* "PETSc/Log.pyx":15
@@ -53176,10 +55933,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__
  *         stage = reg_LogStage(name, stageid)
  *         return stage
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageRegister(__pyx_v_cname, (&__pyx_v_stageid))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageRegister(__pyx_v_cname, (&__pyx_v_stageid))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(26, 15, __pyx_L1_error)
+
+    /* "PETSc/Log.pyx":14
+ *         if stage is not None: return stage
+ *         CHKERR( PetscLogStageFindId(cname, &stageid) )
+ *         if stageid == -1:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscLogStageRegister(cname, &stageid) )
+ *         stage = reg_LogStage(name, stageid)
+ */
   }
-  __pyx_L5:;
 
   /* "PETSc/Log.pyx":16
  *         if stageid == -1:
@@ -53188,7 +55951,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyObject *__
  *         return stage
  * 
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_reg_LogStage(__pyx_v_name, __pyx_v_stageid)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_reg_LogStage(__pyx_v_name, __pyx_v_stageid)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_stage, ((struct __pyx_obj_8petsc4py_5PETSc_LogStage *)__pyx_t_3));
   __pyx_t_3 = 0;
@@ -53239,9 +56002,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_3Class(PyObject *__pyx_v_cls, Py
 static char __pyx_doc_8petsc4py_5PETSc_3Log_2Class[] = "Log.Class(type cls, name)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_3Class(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("Class (wrapper)", 0);
@@ -53263,7 +56023,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_3Class(PyObject *__pyx_v_cls, Py
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Class") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Class") < 0)) __PYX_ERR(26, 20, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -53274,20 +56034,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_3Class(PyObject *__pyx_v_cls, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("Class", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("Class", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 20, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Log.Class", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_2Class(((PyObject*)__pyx_v_cls), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_2Class(((PyTypeObject*)__pyx_v_cls), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name) {
   const char *__pyx_v_cname;
   PetscClassId __pyx_v_classid;
   struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_klass = 0;
@@ -53297,9 +56057,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *_
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Class", 0);
   __Pyx_INCREF(__pyx_v_name);
 
@@ -53310,14 +56067,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *_
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 21, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 21, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 21, __pyx_L1_error)
   }
 
   /* "PETSc/Log.pyx":22
@@ -53336,7 +56093,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *_
  *         cdef PetscLogClass classid = -1
  *         cdef LogClass klass = get_LogClass(name)
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
   __pyx_t_3 = 0;
@@ -53357,7 +56114,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *_
  *         if klass is not None: return klass
  *         CHKERR( PetscLogClassFindId(cname, &classid) )
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_get_LogClass(__pyx_v_name)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_get_LogClass(__pyx_v_name)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_klass = ((struct __pyx_obj_8petsc4py_5PETSc_LogClass *)__pyx_t_3);
   __pyx_t_3 = 0;
@@ -53385,7 +56142,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *_
  *         if classid == -1:
  *             CHKERR( PetscLogClassRegister(cname, &classid) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogClassFindId(__pyx_v_cname, (&__pyx_v_classid))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogClassFindId(__pyx_v_cname, (&__pyx_v_classid))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(26, 27, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":28
  *         if klass is not None: return klass
@@ -53394,7 +56151,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *_
  *             CHKERR( PetscLogClassRegister(cname, &classid) )
  *         klass = reg_LogClass(name, classid)
  */
-  __pyx_t_1 = ((__pyx_v_classid == -1) != 0);
+  __pyx_t_1 = ((__pyx_v_classid == -1L) != 0);
   if (__pyx_t_1) {
 
     /* "PETSc/Log.pyx":29
@@ -53404,10 +56161,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *_
  *         klass = reg_LogClass(name, classid)
  *         return klass
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscClassIdRegister(__pyx_v_cname, (&__pyx_v_classid))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscClassIdRegister(__pyx_v_cname, (&__pyx_v_classid))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(26, 29, __pyx_L1_error)
+
+    /* "PETSc/Log.pyx":28
+ *         if klass is not None: return klass
+ *         CHKERR( PetscLogClassFindId(cname, &classid) )
+ *         if classid == -1:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscLogClassRegister(cname, &classid) )
+ *         klass = reg_LogClass(name, classid)
+ */
   }
-  __pyx_L5:;
 
   /* "PETSc/Log.pyx":30
  *         if classid == -1:
@@ -53416,7 +56179,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyObject *_
  *         return klass
  * 
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_reg_LogClass(__pyx_v_name, __pyx_v_classid)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_reg_LogClass(__pyx_v_name, __pyx_v_classid)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_klass, ((struct __pyx_obj_8petsc4py_5PETSc_LogClass *)__pyx_t_3));
   __pyx_t_3 = 0;
@@ -53468,9 +56231,6 @@ static char __pyx_doc_8petsc4py_5PETSc_3Log_4Event[] = "Log.Event(type cls, name
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_5Event(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_klass = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("Event (wrapper)", 0);
@@ -53499,7 +56259,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_5Event(PyObject *__pyx_v_cls, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Event") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Event") < 0)) __PYX_ERR(26, 34, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -53514,20 +56274,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_5Event(PyObject *__pyx_v_cls, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("Event", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("Event", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 34, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Log.Event", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_4Event(((PyObject*)__pyx_v_cls), __pyx_v_name, __pyx_v_klass);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_4Event(((PyTypeObject*)__pyx_v_cls), __pyx_v_name, __pyx_v_klass);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_klass) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_klass) {
   const char *__pyx_v_cname;
   PetscClassId __pyx_v_classid;
   PetscLogEvent __pyx_v_eventid;
@@ -53539,9 +56299,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
   PyObject *__pyx_t_3 = NULL;
   PetscClassId __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Event", 0);
   __Pyx_INCREF(__pyx_v_name);
 
@@ -53552,14 +56309,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 35, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__41, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 35, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 35, __pyx_L1_error)
   }
 
   /* "PETSc/Log.pyx":36
@@ -53578,7 +56335,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
  *         cdef PetscLogClass classid = PETSC_OBJECT_CLASSID
  *         cdef PetscLogEvent eventid = -1
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
   __pyx_t_3 = 0;
@@ -53611,11 +56368,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
   __pyx_t_2 = (__pyx_v_klass != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __Pyx_PyInt_As_PetscClassId(__pyx_v_klass); if (unlikely((__pyx_t_4 == (PetscClassId)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyInt_As_PetscClassId(__pyx_v_klass); if (unlikely((__pyx_t_4 == (PetscClassId)-1) && PyErr_Occurred())) __PYX_ERR(26, 40, __pyx_L1_error)
     __pyx_v_classid = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/Log.pyx":41
  *         cdef PetscLogEvent eventid = -1
@@ -53624,7 +56379,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
  *         if event is not None: return event
  *         CHKERR( PetscLogEventFindId(cname, &eventid) )
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_get_LogEvent(__pyx_v_name)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_get_LogEvent(__pyx_v_name)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_event = ((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_t_3);
   __pyx_t_3 = 0;
@@ -53652,7 +56407,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
  *         if eventid == -1:
  *             CHKERR( PetscLogEventRegister(cname, classid, &eventid) )
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventFindId(__pyx_v_cname, (&__pyx_v_eventid))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventFindId(__pyx_v_cname, (&__pyx_v_eventid))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(26, 43, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":44
  *         if event is not None: return event
@@ -53661,7 +56416,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
  *             CHKERR( PetscLogEventRegister(cname, classid, &eventid) )
  *         event = reg_LogEvent(name, eventid)
  */
-  __pyx_t_2 = ((__pyx_v_eventid == -1) != 0);
+  __pyx_t_2 = ((__pyx_v_eventid == -1L) != 0);
   if (__pyx_t_2) {
 
     /* "PETSc/Log.pyx":45
@@ -53671,10 +56426,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
  *         event = reg_LogEvent(name, eventid)
  *         return event
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventRegister(__pyx_v_cname, __pyx_v_classid, (&__pyx_v_eventid))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventRegister(__pyx_v_cname, __pyx_v_classid, (&__pyx_v_eventid))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(26, 45, __pyx_L1_error)
+
+    /* "PETSc/Log.pyx":44
+ *         if event is not None: return event
+ *         CHKERR( PetscLogEventFindId(cname, &eventid) )
+ *         if eventid == -1:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscLogEventRegister(cname, classid, &eventid) )
+ *         event = reg_LogEvent(name, eventid)
+ */
   }
-  __pyx_L6:;
 
   /* "PETSc/Log.pyx":46
  *         if eventid == -1:
@@ -53683,7 +56444,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
  *         return event
  * 
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_reg_LogEvent(__pyx_v_name, __pyx_v_eventid)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_reg_LogEvent(__pyx_v_name, __pyx_v_eventid)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_event, ((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_t_3));
   __pyx_t_3 = 0;
@@ -53726,7 +56487,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyObject *_
  *     @classmethod
  *     def begin(cls, all=False):             # <<<<<<<<<<<<<<
  *         if all: CHKERR( PetscLogAllBegin() )
- *         else:   CHKERR( PetscLogBegin() )
+ *         else:   CHKERR( PetscLogDefaultBegin() )
  */
 
 /* Python wrapper */
@@ -53734,9 +56495,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_7begin(PyObject *__pyx_v_cls, Py
 static char __pyx_doc_8petsc4py_5PETSc_3Log_6begin[] = "Log.begin(type cls, all=False)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_7begin(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_all = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("begin (wrapper)", 0);
@@ -53761,7 +56519,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_7begin(PyObject *__pyx_v_cls, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "begin") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "begin") < 0)) __PYX_ERR(26, 50, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -53774,51 +56532,48 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_7begin(PyObject *__pyx_v_cls, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("begin", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("begin", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 50, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Log.begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_6begin(((PyObject*)__pyx_v_cls), __pyx_v_all);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_6begin(((PyTypeObject*)__pyx_v_cls), __pyx_v_all);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_6begin(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_all) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_6begin(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_all) {
   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("begin", 0);
 
   /* "PETSc/Log.pyx":51
  *     @classmethod
  *     def begin(cls, all=False):
  *         if all: CHKERR( PetscLogAllBegin() )             # <<<<<<<<<<<<<<
- *         else:   CHKERR( PetscLogBegin() )
+ *         else:   CHKERR( PetscLogDefaultBegin() )
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_all); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_all); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 51, __pyx_L1_error)
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogAllBegin()); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogAllBegin()); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 51, __pyx_L1_error)
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Log.pyx":52
+  /* "PETSc/Log.pyx":52
  *     def begin(cls, all=False):
  *         if all: CHKERR( PetscLogAllBegin() )
- *         else:   CHKERR( PetscLogBegin() )             # <<<<<<<<<<<<<<
+ *         else:   CHKERR( PetscLogDefaultBegin() )             # <<<<<<<<<<<<<<
  * 
  *     @classmethod
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogBegin()); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogDefaultBegin()); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 52, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -53827,7 +56582,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_6begin(CYTHON_UNUSED PyObject *_
  *     @classmethod
  *     def begin(cls, all=False):             # <<<<<<<<<<<<<<
  *         if all: CHKERR( PetscLogAllBegin() )
- *         else:   CHKERR( PetscLogBegin() )
+ *         else:   CHKERR( PetscLogDefaultBegin() )
  */
 
   /* function exit code */
@@ -53845,19 +56600,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_6begin(CYTHON_UNUSED PyObject *_
 /* "PETSc/Log.pyx":55
  * 
  *     @classmethod
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def view(cls, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Log_8view[] = "Log.view(type self, Viewer viewer=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Log_8view[] = "Log.view(type cls, Viewer viewer=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(PyObject *__pyx_v_cls, 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);
@@ -53882,7 +56634,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(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[26]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(26, 55, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -53895,14 +56647,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(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[26]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 55, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Log.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[26]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_8view(((PyObject*)__pyx_v_self), __pyx_v_viewer);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(26, 55, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_8view(((PyTypeObject*)__pyx_v_cls), __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -53913,7 +56665,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(PyObject *__pyx_v_self, Py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyPetscViewerObject *__pyx_v_viewer) {
   PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -53921,14 +56673,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyObject *__
   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);
 
   /* "PETSc/Log.pyx":56
  *     @classmethod
- *     def view(self, Viewer viewer=None):
+ *     def view(cls, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
  *         if viewer is not None: vwr = viewer.vwr
  *         if vwr == NULL: vwr = PETSC_VIEWER_STDOUT_WORLD
@@ -53936,7 +56685,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyObject *__
   __pyx_v_vwr = NULL;
 
   /* "PETSc/Log.pyx":57
- *     def view(self, Viewer viewer=None):
+ *     def view(cls, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
  *         if vwr == NULL: vwr = PETSC_VIEWER_STDOUT_WORLD
@@ -53947,9 +56696,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyObject *__
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/Log.pyx":58
  *         cdef PetscViewer vwr = NULL
@@ -53961,9 +56708,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyObject *__
   __pyx_t_2 = ((__pyx_v_vwr == NULL) != 0);
   if (__pyx_t_2) {
     __pyx_v_vwr = PETSC_VIEWER_STDOUT_WORLD;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/Log.pyx":59
  *         if viewer is not None: vwr = viewer.vwr
@@ -53972,12 +56717,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyObject *__
  * 
  *     @classmethod
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogView(__pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogView(__pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(26, 59, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":55
  * 
  *     @classmethod
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def view(cls, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  */
@@ -54012,20 +56757,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_11destroy(PyObject *__pyx_v_cls,
   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_8petsc4py_5PETSc_3Log_10destroy(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_10destroy(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_10destroy(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_10destroy(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   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);
 
   /* "PETSc/Log.pyx":63
@@ -54035,7 +56777,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_10destroy(CYTHON_UNUSED PyObject
  * 
  *     @classmethod
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogDestroy()); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogDestroy()); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 63, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":62
  * 
@@ -54070,9 +56812,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_13logFlops(PyObject *__pyx_v_cls
 static char __pyx_doc_8petsc4py_5PETSc_3Log_12logFlops[] = "Log.logFlops(type cls, flops)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_13logFlops(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flops = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("logFlops (wrapper)", 0);
@@ -54094,7 +56833,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_13logFlops(PyObject *__pyx_v_cls
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logFlops") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logFlops") < 0)) __PYX_ERR(26, 66, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -54105,28 +56844,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_13logFlops(PyObject *__pyx_v_cls
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("logFlops", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("logFlops", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 66, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Log.logFlops", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(((PyObject*)__pyx_v_cls), __pyx_v_flops);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(((PyTypeObject*)__pyx_v_cls), __pyx_v_flops);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_flops) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_flops) {
   PetscLogDouble __pyx_v_cflops;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscLogDouble __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("logFlops", 0);
 
   /* "PETSc/Log.pyx":67
@@ -54136,7 +56872,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(CYTHON_UNUSED PyObjec
  *         CHKERR( PetscLogFlops(cflops) )
  * 
  */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_flops); if (unlikely((__pyx_t_1 == (PetscLogDouble)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_flops); if (unlikely((__pyx_t_1 == (PetscLogDouble)-1) && PyErr_Occurred())) __PYX_ERR(26, 67, __pyx_L1_error)
   __pyx_v_cflops = __pyx_t_1;
 
   /* "PETSc/Log.pyx":68
@@ -54146,7 +56882,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(CYTHON_UNUSED PyObjec
  * 
  *     @classmethod
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogFlops(__pyx_v_cflops)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogFlops(__pyx_v_cflops)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 68, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":66
  * 
@@ -54181,9 +56917,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_15addFlops(PyObject *__pyx_v_cls
 static char __pyx_doc_8petsc4py_5PETSc_3Log_14addFlops[] = "Log.addFlops(type cls, flops)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_15addFlops(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flops = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addFlops (wrapper)", 0);
@@ -54205,7 +56938,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_15addFlops(PyObject *__pyx_v_cls
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addFlops") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addFlops") < 0)) __PYX_ERR(26, 71, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -54216,28 +56949,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_15addFlops(PyObject *__pyx_v_cls
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("addFlops", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("addFlops", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 71, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Log.addFlops", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(((PyObject*)__pyx_v_cls), __pyx_v_flops);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(((PyTypeObject*)__pyx_v_cls), __pyx_v_flops);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_flops) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_flops) {
   PetscLogDouble __pyx_v_cflops;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscLogDouble __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("addFlops", 0);
 
   /* "PETSc/Log.pyx":72
@@ -54247,7 +56977,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(CYTHON_UNUSED PyObjec
  *         CHKERR( PetscLogFlops(cflops) )
  * 
  */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_flops); if (unlikely((__pyx_t_1 == (PetscLogDouble)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_flops); if (unlikely((__pyx_t_1 == (PetscLogDouble)-1) && PyErr_Occurred())) __PYX_ERR(26, 72, __pyx_L1_error)
   __pyx_v_cflops = __pyx_t_1;
 
   /* "PETSc/Log.pyx":73
@@ -54257,7 +56987,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(CYTHON_UNUSED PyObjec
  * 
  *     @classmethod
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogFlops(__pyx_v_cflops)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogFlops(__pyx_v_cflops)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 73, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":71
  * 
@@ -54297,22 +57027,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_17getFlops(PyObject *__pyx_v_cls
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getFlops", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFlops", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   PetscLogDouble __pyx_v_cflops;
   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("getFlops", 0);
 
   /* "PETSc/Log.pyx":77
@@ -54331,7 +57058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(CYTHON_UNUSED PyObjec
  *         return cflops
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscGetFlops((&__pyx_v_cflops))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscGetFlops((&__pyx_v_cflops))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 78, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":79
  *         cdef PetscLogDouble cflops=0
@@ -54341,7 +57068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(CYTHON_UNUSED PyObjec
  *     @classmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cflops); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cflops); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 79, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -54384,22 +57111,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_19getTime(PyObject *__pyx_v_cls,
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getTime", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTime", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_18getTime(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_18getTime(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_18getTime(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_18getTime(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   PetscLogDouble __pyx_v_wctime;
   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("getTime", 0);
 
   /* "PETSc/Log.pyx":83
@@ -54418,7 +57142,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_18getTime(CYTHON_UNUSED PyObject
  *         return wctime
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTime((&__pyx_v_wctime))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTime((&__pyx_v_wctime))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 84, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":85
  *         cdef PetscLogDouble wctime=0
@@ -54428,7 +57152,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_18getTime(CYTHON_UNUSED PyObject
  *     @classmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_wctime); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_wctime); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -54471,22 +57195,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_21getCPUTime(PyObject *__pyx_v_c
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getCPUTime", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCPUTime", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   PetscLogDouble __pyx_v_cputime;
   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("getCPUTime", 0);
 
   /* "PETSc/Log.pyx":89
@@ -54505,7 +57226,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(CYTHON_UNUSED PyObj
  *         return cputime
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscGetCPUTime((&__pyx_v_cputime))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscGetCPUTime((&__pyx_v_cputime))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 90, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":91
  *         cdef PetscLogDouble cputime=0
@@ -54515,7 +57236,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(CYTHON_UNUSED PyObj
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cputime); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cputime); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 91, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -54617,9 +57338,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_2__int__(struct __pyx_obj_8
   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("__int__", 0);
 
   /* "PETSc/Log.pyx":103
@@ -54630,7 +57348,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_2__int__(struct __pyx_obj_8
  *     def __enter__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(((int)__pyx_v_self->id)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(((int)__pyx_v_self->id)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -54686,9 +57404,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4__enter__(struct __pyx_obj
   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("__enter__", 0);
 
   /* "PETSc/Log.pyx":106
@@ -54698,7 +57413,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4__enter__(struct __pyx_obj
  *         return self
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_push); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_push); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -54711,10 +57426,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4__enter__(struct __pyx_obj
     }
   }
   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[26]; __pyx_lineno = 106; __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(26, 106, __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[26]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 106, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -54784,9 +57499,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6__exit__(struct __pyx_obj_
   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("__exit__", 0);
 
   /* "PETSc/Log.pyx":110
@@ -54796,7 +57508,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6__exit__(struct __pyx_obj_
  * 
  *     #
  */
-  __pyx_t_1 = __Pyx_PyObject_Pop(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Pop(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
@@ -54850,9 +57562,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_8push(struct __pyx_obj_8pet
   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("push", 0);
 
   /* "PETSc/Log.pyx":115
@@ -54862,7 +57571,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_8push(struct __pyx_obj_8pet
  * 
  *     def pop(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStagePush(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStagePush(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 115, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":114
  *     #
@@ -54888,8 +57597,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_8push(struct __pyx_obj_8pet
  *         CHKERR( PetscLogStagePush(self.id) )
  * 
  *     def pop(self):             # <<<<<<<<<<<<<<
+ *         <void>self # unused
  *         CHKERR( PetscLogStagePop() )
- * 
  */
 
 /* Python wrapper */
@@ -54909,30 +57618,36 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_11pop(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_10pop(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_10pop(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__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("pop", 0);
 
   /* "PETSc/Log.pyx":118
  * 
  *     def pop(self):
+ *         <void>self # unused             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscLogStagePop() )
+ * 
+ */
+  ((void)__pyx_v_self);
+
+  /* "PETSc/Log.pyx":119
+ *     def pop(self):
+ *         <void>self # unused
  *         CHKERR( PetscLogStagePop() )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStagePop()); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStagePop()); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 119, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":117
  *         CHKERR( PetscLogStagePush(self.id) )
  * 
  *     def pop(self):             # <<<<<<<<<<<<<<
+ *         <void>self # unused
  *         CHKERR( PetscLogStagePop() )
- * 
  */
 
   /* function exit code */
@@ -54947,7 +57662,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_10pop(CYTHON_UNUSED struct
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":122
+/* "PETSc/Log.pyx":123
  *     #
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -54978,12 +57693,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_12getName(struct __pyx_obj_
   __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("getName", 0);
 
-  /* "PETSc/Log.pyx":123
+  /* "PETSc/Log.pyx":124
  * 
  *     def getName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -54992,16 +57704,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_12getName(struct __pyx_obj_
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Log.pyx":124
+  /* "PETSc/Log.pyx":125
  *     def getName(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscLogStageFindName(self.id, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 125, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":125
+  /* "PETSc/Log.pyx":126
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscLogStageFindName(self.id, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -55009,13 +57721,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_12getName(struct __pyx_obj_
  *     property name:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":122
+  /* "PETSc/Log.pyx":123
  *     #
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -55034,7 +57746,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_12getName(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":128
+/* "PETSc/Log.pyx":129
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -55061,20 +57773,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4name___get__(struct __pyx_
   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);
 
-  /* "PETSc/Log.pyx":129
+  /* "PETSc/Log.pyx":130
  *     property name:
  *         def __get__(self):
  *             return self.getName()             # <<<<<<<<<<<<<<
  *         def __set__(self, value):
- *             raise TypeError("readonly attribute")
+ *             <void>self; <void>value; # unused
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getName); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getName); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -55087,10 +57796,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4name___get__(struct __pyx_
     }
   }
   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[26]; __pyx_lineno = 129; __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(26, 130, __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[26]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 130, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -55098,7 +57807,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4name___get__(struct __pyx_
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":128
+  /* "PETSc/Log.pyx":129
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -55119,12 +57828,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4name___get__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":130
+/* "PETSc/Log.pyx":131
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")
- * 
  */
 
 /* Python wrapper */
@@ -55140,34 +57849,41 @@ static int __pyx_pw_8petsc4py_5PETSc_8LogStage_4name_3__set__(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static int __pyx_pf_8petsc4py_5PETSc_8LogStage_4name_2__set__(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_value) {
+static int __pyx_pf_8petsc4py_5PETSc_8LogStage_4name_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Log.pyx":131
+  /* "PETSc/Log.pyx":132
  *             return self.getName()
  *         def __set__(self, value):
+ *             <void>self; <void>value; # unused             # <<<<<<<<<<<<<<
+ *             raise TypeError("readonly attribute")
+ * 
+ */
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_value);
+
+  /* "PETSc/Log.pyx":133
+ *         def __set__(self, value):
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__41, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__42, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  {__pyx_filename = __pyx_f[26]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(26, 133, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":130
+  /* "PETSc/Log.pyx":131
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")
- * 
  */
 
   /* function exit code */
@@ -55179,7 +57895,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_4name_2__set__(CYTHON_UNUSED stru
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":135
+/* "PETSc/Log.pyx":137
  *     #
  * 
  *     def activate(self):             # <<<<<<<<<<<<<<
@@ -55208,21 +57924,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_14activate(struct __pyx_obj
   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("activate", 0);
 
-  /* "PETSc/Log.pyx":136
+  /* "PETSc/Log.pyx":138
  * 
  *     def activate(self):
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_TRUE) )             # <<<<<<<<<<<<<<
  * 
  *     def deactivate(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, PETSC_TRUE)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, PETSC_TRUE)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 138, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":135
+  /* "PETSc/Log.pyx":137
  *     #
  * 
  *     def activate(self):             # <<<<<<<<<<<<<<
@@ -55242,7 +57955,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_14activate(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":138
+/* "PETSc/Log.pyx":140
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_TRUE) )
  * 
  *     def deactivate(self):             # <<<<<<<<<<<<<<
@@ -55271,21 +57984,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_16deactivate(struct __pyx_o
   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("deactivate", 0);
 
-  /* "PETSc/Log.pyx":139
+  /* "PETSc/Log.pyx":141
  * 
  *     def deactivate(self):
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_FALSE) )             # <<<<<<<<<<<<<<
  * 
  *     def getActive(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, PETSC_FALSE)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, PETSC_FALSE)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 141, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":138
+  /* "PETSc/Log.pyx":140
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_TRUE) )
  * 
  *     def deactivate(self):             # <<<<<<<<<<<<<<
@@ -55305,7 +58015,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_16deactivate(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":141
+/* "PETSc/Log.pyx":143
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_FALSE) )
  * 
  *     def getActive(self):             # <<<<<<<<<<<<<<
@@ -55336,12 +58046,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_ob
   __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("getActive", 0);
 
-  /* "PETSc/Log.pyx":142
+  /* "PETSc/Log.pyx":144
  * 
  *     def getActive(self):
  *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -55350,16 +58057,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_ob
  */
   __pyx_v_tval = PETSC_FALSE;
 
-  /* "PETSc/Log.pyx":143
+  /* "PETSc/Log.pyx":145
  *     def getActive(self):
  *         cdef PetscBool tval = PETSC_FALSE
  *         CHKERR( PetscLogStageGetActive(self.id, &tval) )             # <<<<<<<<<<<<<<
  *         return <bint> tval
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageGetActive(__pyx_v_self->id, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageGetActive(__pyx_v_self->id, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 145, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":144
+  /* "PETSc/Log.pyx":146
  *         cdef PetscBool tval = PETSC_FALSE
  *         CHKERR( PetscLogStageGetActive(self.id, &tval) )
  *         return <bint> tval             # <<<<<<<<<<<<<<
@@ -55367,13 +58074,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_ob
  *     def setActive(self, flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 146, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":141
+  /* "PETSc/Log.pyx":143
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_FALSE) )
  * 
  *     def getActive(self):             # <<<<<<<<<<<<<<
@@ -55392,7 +58099,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":146
+/* "PETSc/Log.pyx":148
  *         return <bint> tval
  * 
  *     def setActive(self, flag):             # <<<<<<<<<<<<<<
@@ -55405,9 +58112,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_21setActive(PyObject *__pyx
 static char __pyx_doc_8petsc4py_5PETSc_8LogStage_20setActive[] = "LogStage.setActive(self, flag)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_21setActive(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("setActive (wrapper)", 0);
@@ -55429,7 +58133,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_21setActive(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, "setActive") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setActive") < 0)) __PYX_ERR(26, 148, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -55440,7 +58144,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_21setActive(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 148, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LogStage.setActive", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -55459,12 +58163,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_20setActive(struct __pyx_ob
   __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("setActive", 0);
 
-  /* "PETSc/Log.pyx":147
+  /* "PETSc/Log.pyx":149
  * 
  *     def setActive(self, flag):
  *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -55473,30 +58174,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_20setActive(struct __pyx_ob
  */
   __pyx_v_tval = PETSC_FALSE;
 
-  /* "PETSc/Log.pyx":148
+  /* "PETSc/Log.pyx":150
  *     def setActive(self, flag):
  *         cdef PetscBool tval = PETSC_FALSE
  *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
  *         CHKERR( PetscLogStageSetActive(self.id, tval) )
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 150, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_tval = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Log.pyx":149
+  /* "PETSc/Log.pyx":151
  *         cdef PetscBool tval = PETSC_FALSE
  *         if flag: tval = PETSC_TRUE
  *         CHKERR( PetscLogStageSetActive(self.id, tval) )             # <<<<<<<<<<<<<<
  * 
  *     property active:
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 151, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":146
+  /* "PETSc/Log.pyx":148
  *         return <bint> tval
  * 
  *     def setActive(self, flag):             # <<<<<<<<<<<<<<
@@ -55516,7 +58215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_20setActive(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":152
+/* "PETSc/Log.pyx":154
  * 
  *     property active:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -55543,12 +58242,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6active___get__(struct __py
   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);
 
-  /* "PETSc/Log.pyx":153
+  /* "PETSc/Log.pyx":155
  *     property active:
  *         def __get__(self):
  *             return self.getActive()             # <<<<<<<<<<<<<<
@@ -55556,7 +58252,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6active___get__(struct __py
  *             self.setActive(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getActive); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getActive); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -55569,10 +58265,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6active___get__(struct __py
     }
   }
   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[26]; __pyx_lineno = 153; __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(26, 155, __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[26]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 155, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -55580,7 +58276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6active___get__(struct __py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":152
+  /* "PETSc/Log.pyx":154
  * 
  *     property active:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -55601,7 +58297,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6active___get__(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":154
+/* "PETSc/Log.pyx":156
  *         def __get__(self):
  *             return self.getActive()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -55629,19 +58325,16 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_6active_2__set__(struct __pyx_obj
   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);
 
-  /* "PETSc/Log.pyx":155
+  /* "PETSc/Log.pyx":157
  *             return self.getActive()
  *         def __set__(self, value):
  *             self.setActive(value)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setActive); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setActive); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 157, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -55654,23 +58347,23 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_6active_2__set__(struct __pyx_obj
     }
   }
   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[26]; __pyx_lineno = 155; __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(26, 157, __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[26]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(26, 157, __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[26]; __pyx_lineno = 155; __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(26, 157, __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;
 
-  /* "PETSc/Log.pyx":154
+  /* "PETSc/Log.pyx":156
  *         def __get__(self):
  *             return self.getActive()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -55693,7 +58386,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_6active_2__set__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":159
+/* "PETSc/Log.pyx":161
  *     #
  * 
  *     def getVisible(self):             # <<<<<<<<<<<<<<
@@ -55724,12 +58417,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_o
   __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("getVisible", 0);
 
-  /* "PETSc/Log.pyx":160
+  /* "PETSc/Log.pyx":162
  * 
  *     def getVisible(self):
  *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -55738,16 +58428,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_o
  */
   __pyx_v_tval = PETSC_FALSE;
 
-  /* "PETSc/Log.pyx":161
+  /* "PETSc/Log.pyx":163
  *     def getVisible(self):
  *         cdef PetscBool tval = PETSC_FALSE
  *         CHKERR( PetscLogStageGetVisible(self.id, &tval) )             # <<<<<<<<<<<<<<
  *         return <bint> tval
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageGetVisible(__pyx_v_self->id, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageGetVisible(__pyx_v_self->id, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 163, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":162
+  /* "PETSc/Log.pyx":164
  *         cdef PetscBool tval = PETSC_FALSE
  *         CHKERR( PetscLogStageGetVisible(self.id, &tval) )
  *         return <bint> tval             # <<<<<<<<<<<<<<
@@ -55755,13 +58445,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_o
  *     def setVisible(self, flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":159
+  /* "PETSc/Log.pyx":161
  *     #
  * 
  *     def getVisible(self):             # <<<<<<<<<<<<<<
@@ -55780,7 +58470,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":164
+/* "PETSc/Log.pyx":166
  *         return <bint> tval
  * 
  *     def setVisible(self, flag):             # <<<<<<<<<<<<<<
@@ -55793,9 +58483,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_25setVisible(PyObject *__py
 static char __pyx_doc_8petsc4py_5PETSc_8LogStage_24setVisible[] = "LogStage.setVisible(self, flag)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_25setVisible(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("setVisible (wrapper)", 0);
@@ -55817,7 +58504,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_25setVisible(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, "setVisible") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVisible") < 0)) __PYX_ERR(26, 166, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -55828,7 +58515,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_25setVisible(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setVisible", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setVisible", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 166, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LogStage.setVisible", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -55847,12 +58534,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_24setVisible(struct __pyx_o
   __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("setVisible", 0);
 
-  /* "PETSc/Log.pyx":165
+  /* "PETSc/Log.pyx":167
  * 
  *     def setVisible(self, flag):
  *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -55861,30 +58545,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_24setVisible(struct __pyx_o
  */
   __pyx_v_tval = PETSC_FALSE;
 
-  /* "PETSc/Log.pyx":166
+  /* "PETSc/Log.pyx":168
  *     def setVisible(self, flag):
  *         cdef PetscBool tval = PETSC_FALSE
  *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
  *         CHKERR( PetscLogStageSetVisible(self.id, tval) )
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 168, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_tval = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Log.pyx":167
+  /* "PETSc/Log.pyx":169
  *         cdef PetscBool tval = PETSC_FALSE
  *         if flag: tval = PETSC_TRUE
  *         CHKERR( PetscLogStageSetVisible(self.id, tval) )             # <<<<<<<<<<<<<<
  * 
  *     property visible:
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetVisible(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetVisible(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 169, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":164
+  /* "PETSc/Log.pyx":166
  *         return <bint> tval
  * 
  *     def setVisible(self, flag):             # <<<<<<<<<<<<<<
@@ -55904,7 +58586,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_24setVisible(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":170
+/* "PETSc/Log.pyx":172
  * 
  *     property visible:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -55931,12 +58613,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_7visible___get__(struct __p
   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);
 
-  /* "PETSc/Log.pyx":171
+  /* "PETSc/Log.pyx":173
  *     property visible:
  *         def __get__(self):
  *             return self.getVisible()             # <<<<<<<<<<<<<<
@@ -55944,7 +58623,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_7visible___get__(struct __p
  *             self.setVisible(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getVisible); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getVisible); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -55957,10 +58636,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_7visible___get__(struct __p
     }
   }
   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[26]; __pyx_lineno = 171; __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(26, 173, __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[26]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 173, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -55968,7 +58647,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_7visible___get__(struct __p
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":170
+  /* "PETSc/Log.pyx":172
  * 
  *     property visible:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -55989,7 +58668,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_7visible___get__(struct __p
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":172
+/* "PETSc/Log.pyx":174
  *         def __get__(self):
  *             return self.getVisible()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -56017,19 +58696,16 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_7visible_2__set__(struct __pyx_ob
   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);
 
-  /* "PETSc/Log.pyx":173
+  /* "PETSc/Log.pyx":175
  *             return self.getVisible()
  *         def __set__(self, value):
  *             self.setVisible(value)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setVisible); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setVisible); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -56042,23 +58718,23 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_7visible_2__set__(struct __pyx_ob
     }
   }
   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[26]; __pyx_lineno = 173; __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(26, 175, __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[26]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(26, 175, __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[26]; __pyx_lineno = 173; __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(26, 175, __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;
 
-  /* "PETSc/Log.pyx":172
+  /* "PETSc/Log.pyx":174
  *         def __get__(self):
  *             return self.getVisible()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -56106,12 +58782,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_2id___get__(struct __pyx_ob
   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("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscLogStage(__pyx_v_self->id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_PetscLogStage(__pyx_v_self->id); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 97, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -56128,7 +58801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_2id___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":178
+/* "PETSc/Log.pyx":180
  * cdef dict stage_registry = { }
  * 
  * cdef LogStage get_LogStage(object name):             # <<<<<<<<<<<<<<
@@ -56140,12 +58813,9 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_get_
   struct __pyx_obj_8petsc4py_5PETSc_LogStage *__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("get_LogStage", 0);
 
-  /* "PETSc/Log.pyx":179
+  /* "PETSc/Log.pyx":181
  * 
  * cdef LogStage get_LogStage(object name):
  *     return stage_registry.get(name)             # <<<<<<<<<<<<<<
@@ -56155,16 +58825,16 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_get_
   __Pyx_XDECREF(((PyObject *)__pyx_r));
   if (unlikely(__pyx_v_8petsc4py_5PETSc_stage_registry == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 181, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_8petsc4py_5PETSc_stage_registry, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_8petsc4py_5PETSc_stage_registry, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_LogStage))))) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_LogStage))))) __PYX_ERR(26, 181, __pyx_L1_error)
   __pyx_r = ((struct __pyx_obj_8petsc4py_5PETSc_LogStage *)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":178
+  /* "PETSc/Log.pyx":180
  * cdef dict stage_registry = { }
  * 
  * cdef LogStage get_LogStage(object name):             # <<<<<<<<<<<<<<
@@ -56183,7 +58853,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_get_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":181
+/* "PETSc/Log.pyx":183
  *     return stage_registry.get(name)
  * 
  * cdef LogStage reg_LogStage(object name, PetscLogStage stageid):             # <<<<<<<<<<<<<<
@@ -56196,24 +58866,21 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_reg_
   struct __pyx_obj_8petsc4py_5PETSc_LogStage *__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("reg_LogStage", 0);
 
-  /* "PETSc/Log.pyx":182
+  /* "PETSc/Log.pyx":184
  * 
  * cdef LogStage reg_LogStage(object name, PetscLogStage stageid):
  *     cdef LogStage stage = LogStage()             # <<<<<<<<<<<<<<
  *     stage.id = stageid
  *     stage_registry[name] = stage
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_LogStage)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LogStage), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_stage = ((struct __pyx_obj_8petsc4py_5PETSc_LogStage *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Log.pyx":183
+  /* "PETSc/Log.pyx":185
  * cdef LogStage reg_LogStage(object name, PetscLogStage stageid):
  *     cdef LogStage stage = LogStage()
  *     stage.id = stageid             # <<<<<<<<<<<<<<
@@ -56222,7 +58889,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_reg_
  */
   __pyx_v_stage->id = __pyx_v_stageid;
 
-  /* "PETSc/Log.pyx":184
+  /* "PETSc/Log.pyx":186
  *     cdef LogStage stage = LogStage()
  *     stage.id = stageid
  *     stage_registry[name] = stage             # <<<<<<<<<<<<<<
@@ -56231,11 +58898,11 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_reg_
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_stage_registry == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 186, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_stage_registry, __pyx_v_name, ((PyObject *)__pyx_v_stage)) < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_stage_registry, __pyx_v_name, ((PyObject *)__pyx_v_stage)) < 0)) __PYX_ERR(26, 186, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":185
+  /* "PETSc/Log.pyx":187
  *     stage.id = stageid
  *     stage_registry[name] = stage
  *     return stage             # <<<<<<<<<<<<<<
@@ -56247,7 +58914,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_reg_
   __pyx_r = __pyx_v_stage;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":181
+  /* "PETSc/Log.pyx":183
  *     return stage_registry.get(name)
  * 
  * cdef LogStage reg_LogStage(object name, PetscLogStage stageid):             # <<<<<<<<<<<<<<
@@ -56267,7 +58934,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_f_8petsc4py_5PETSc_reg_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":193
+/* "PETSc/Log.pyx":195
  *     cdef readonly PetscLogClass id
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -56296,7 +58963,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass___cinit__(struct __pyx_obj_8petsc
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Log.pyx":194
+  /* "PETSc/Log.pyx":196
  * 
  *     def __cinit__(self):
  *         self.id = PETSC_OBJECT_CLASSID             # <<<<<<<<<<<<<<
@@ -56305,7 +58972,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass___cinit__(struct __pyx_obj_8petsc
  */
   __pyx_v_self->id = PETSC_OBJECT_CLASSID;
 
-  /* "PETSc/Log.pyx":193
+  /* "PETSc/Log.pyx":195
  *     cdef readonly PetscLogClass id
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -56319,7 +58986,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass___cinit__(struct __pyx_obj_8petsc
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":196
+/* "PETSc/Log.pyx":198
  *         self.id = PETSC_OBJECT_CLASSID
  * 
  *     def __int__(self):             # <<<<<<<<<<<<<<
@@ -56344,12 +59011,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2__int__(struct __pyx_obj_8
   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("__int__", 0);
 
-  /* "PETSc/Log.pyx":197
+  /* "PETSc/Log.pyx":199
  * 
  *     def __int__(self):
  *         return <int> self.id             # <<<<<<<<<<<<<<
@@ -56357,13 +59021,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2__int__(struct __pyx_obj_8
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(((int)__pyx_v_self->id)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(((int)__pyx_v_self->id)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 199, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":196
+  /* "PETSc/Log.pyx":198
  *         self.id = PETSC_OBJECT_CLASSID
  * 
  *     def __int__(self):             # <<<<<<<<<<<<<<
@@ -56382,7 +59046,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2__int__(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":201
+/* "PETSc/Log.pyx":203
  *     #
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -56413,12 +59077,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4getName(struct __pyx_obj_8
   __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("getName", 0);
 
-  /* "PETSc/Log.pyx":202
+  /* "PETSc/Log.pyx":204
  * 
  *     def getName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -56427,16 +59088,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4getName(struct __pyx_obj_8
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Log.pyx":203
+  /* "PETSc/Log.pyx":205
  *     def getName(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscLogClassFindName(self.id, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogClassFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogClassFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 205, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":204
+  /* "PETSc/Log.pyx":206
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscLogClassFindName(self.id, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -56444,13 +59105,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4getName(struct __pyx_obj_8
  *     property name:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 206, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":201
+  /* "PETSc/Log.pyx":203
  *     #
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -56469,7 +59130,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4getName(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":207
+/* "PETSc/Log.pyx":209
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -56496,20 +59157,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4name___get__(struct __pyx_
   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);
 
-  /* "PETSc/Log.pyx":208
+  /* "PETSc/Log.pyx":210
  *     property name:
  *         def __get__(self):
  *             return self.getName()             # <<<<<<<<<<<<<<
  *         def __set__(self, value):
- *             raise TypeError("readonly attribute")
+ *             <void>self; <void>value; # unused
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getName); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getName); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -56522,10 +59180,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4name___get__(struct __pyx_
     }
   }
   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[26]; __pyx_lineno = 208; __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(26, 210, __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[26]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 210, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -56533,7 +59191,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4name___get__(struct __pyx_
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":207
+  /* "PETSc/Log.pyx":209
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -56554,12 +59212,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4name___get__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":209
+/* "PETSc/Log.pyx":211
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")
- * 
  */
 
 /* Python wrapper */
@@ -56575,34 +59233,41 @@ static int __pyx_pw_8petsc4py_5PETSc_8LogClass_4name_3__set__(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static int __pyx_pf_8petsc4py_5PETSc_8LogClass_4name_2__set__(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_value) {
+static int __pyx_pf_8petsc4py_5PETSc_8LogClass_4name_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Log.pyx":210
+  /* "PETSc/Log.pyx":212
  *             return self.getName()
  *         def __set__(self, value):
+ *             <void>self; <void>value; # unused             # <<<<<<<<<<<<<<
+ *             raise TypeError("readonly attribute")
+ * 
+ */
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_value);
+
+  /* "PETSc/Log.pyx":213
+ *         def __set__(self, value):
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__42, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  {__pyx_filename = __pyx_f[26]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(26, 213, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":209
+  /* "PETSc/Log.pyx":211
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")
- * 
  */
 
   /* function exit code */
@@ -56614,7 +59279,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass_4name_2__set__(CYTHON_UNUSED stru
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":214
+/* "PETSc/Log.pyx":217
  *     #
  * 
  *     def activate(self):             # <<<<<<<<<<<<<<
@@ -56643,21 +59308,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6activate(struct __pyx_obj_
   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("activate", 0);
 
-  /* "PETSc/Log.pyx":215
+  /* "PETSc/Log.pyx":218
  * 
  *     def activate(self):
  *         CHKERR( PetscLogClassActivate(self.id) )             # <<<<<<<<<<<<<<
  * 
  *     def deactivate(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 218, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":214
+  /* "PETSc/Log.pyx":217
  *     #
  * 
  *     def activate(self):             # <<<<<<<<<<<<<<
@@ -56677,7 +59339,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6activate(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":217
+/* "PETSc/Log.pyx":220
  *         CHKERR( PetscLogClassActivate(self.id) )
  * 
  *     def deactivate(self):             # <<<<<<<<<<<<<<
@@ -56706,21 +59368,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_8deactivate(struct __pyx_ob
   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("deactivate", 0);
 
-  /* "PETSc/Log.pyx":218
+  /* "PETSc/Log.pyx":221
  * 
  *     def deactivate(self):
  *         CHKERR( PetscLogClassDeactivate(self.id) )             # <<<<<<<<<<<<<<
  * 
  *     def getActive(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 221, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":217
+  /* "PETSc/Log.pyx":220
  *         CHKERR( PetscLogClassActivate(self.id) )
  * 
  *     def deactivate(self):             # <<<<<<<<<<<<<<
@@ -56740,12 +59399,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_8deactivate(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":220
+/* "PETSc/Log.pyx":223
  *         CHKERR( PetscLogClassDeactivate(self.id) )
  * 
  *     def getActive(self):             # <<<<<<<<<<<<<<
+ *         <void>self # unused
  *         raise NotImplementedError
- * 
  */
 
 /* Python wrapper */
@@ -56765,30 +59424,36 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogClass_11getActive(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_10getActive(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_10getActive(struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getActive", 0);
 
-  /* "PETSc/Log.pyx":221
+  /* "PETSc/Log.pyx":224
  * 
  *     def getActive(self):
+ *         <void>self # unused             # <<<<<<<<<<<<<<
+ *         raise NotImplementedError
+ * 
+ */
+  ((void)__pyx_v_self);
+
+  /* "PETSc/Log.pyx":225
+ *     def getActive(self):
+ *         <void>self # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def setActive(self, flag):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[26]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(26, 225, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":220
+  /* "PETSc/Log.pyx":223
  *         CHKERR( PetscLogClassDeactivate(self.id) )
  * 
  *     def getActive(self):             # <<<<<<<<<<<<<<
+ *         <void>self # unused
  *         raise NotImplementedError
- * 
  */
 
   /* function exit code */
@@ -56800,7 +59465,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_10getActive(CYTHON_UNUSED s
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":223
+/* "PETSc/Log.pyx":227
  *         raise NotImplementedError
  * 
  *     def setActive(self, flag):             # <<<<<<<<<<<<<<
@@ -56813,9 +59478,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogClass_13setActive(PyObject *__pyx
 static char __pyx_doc_8petsc4py_5PETSc_8LogClass_12setActive[] = "LogClass.setActive(self, flag)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogClass_13setActive(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("setActive (wrapper)", 0);
@@ -56837,7 +59499,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogClass_13setActive(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, "setActive") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setActive") < 0)) __PYX_ERR(26, 227, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -56848,7 +59510,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogClass_13setActive(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 227, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LogClass.setActive", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -56866,45 +59528,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_12setActive(struct __pyx_ob
   __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("setActive", 0);
 
-  /* "PETSc/Log.pyx":224
+  /* "PETSc/Log.pyx":228
  * 
  *     def setActive(self, flag):
  *         if flag:             # <<<<<<<<<<<<<<
  *             CHKERR( PetscLogClassActivate(self.id) )
  *         else:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 228, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Log.pyx":225
+    /* "PETSc/Log.pyx":229
  *     def setActive(self, flag):
  *         if flag:
  *             CHKERR( PetscLogClassActivate(self.id) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( PetscLogClassDeactivate(self.id) )
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 229, __pyx_L1_error)
+
+    /* "PETSc/Log.pyx":228
+ * 
+ *     def setActive(self, flag):
+ *         if flag:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscLogClassActivate(self.id) )
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Log.pyx":227
+  /* "PETSc/Log.pyx":231
  *             CHKERR( PetscLogClassActivate(self.id) )
  *         else:
  *             CHKERR( PetscLogClassDeactivate(self.id) )             # <<<<<<<<<<<<<<
  * 
  *     property active:
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 231, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Log.pyx":223
+  /* "PETSc/Log.pyx":227
  *         raise NotImplementedError
  * 
  *     def setActive(self, flag):             # <<<<<<<<<<<<<<
@@ -56924,7 +59591,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_12setActive(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":230
+/* "PETSc/Log.pyx":234
  * 
  *     property active:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -56951,12 +59618,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6active___get__(struct __py
   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);
 
-  /* "PETSc/Log.pyx":231
+  /* "PETSc/Log.pyx":235
  *     property active:
  *         def __get__(self):
  *             return self.getActive()             # <<<<<<<<<<<<<<
@@ -56964,7 +59628,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6active___get__(struct __py
  *             self.setActive(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getActive); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getActive); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -56977,10 +59641,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6active___get__(struct __py
     }
   }
   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[26]; __pyx_lineno = 231; __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(26, 235, __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[26]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 235, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -56988,7 +59652,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6active___get__(struct __py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":230
+  /* "PETSc/Log.pyx":234
  * 
  *     property active:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -57009,7 +59673,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6active___get__(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":232
+/* "PETSc/Log.pyx":236
  *         def __get__(self):
  *             return self.getActive()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -57037,19 +59701,16 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass_6active_2__set__(struct __pyx_obj
   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);
 
-  /* "PETSc/Log.pyx":233
+  /* "PETSc/Log.pyx":237
  *             return self.getActive()
  *         def __set__(self, value):
  *             self.setActive(value)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setActive); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setActive); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 237, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -57062,23 +59723,23 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass_6active_2__set__(struct __pyx_obj
     }
   }
   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[26]; __pyx_lineno = 233; __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(26, 237, __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[26]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(26, 237, __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[26]; __pyx_lineno = 233; __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(26, 237, __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;
 
-  /* "PETSc/Log.pyx":232
+  /* "PETSc/Log.pyx":236
  *         def __get__(self):
  *             return self.getActive()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -57101,7 +59762,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass_6active_2__set__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":191
+/* "PETSc/Log.pyx":193
  * cdef class LogClass:
  * 
  *     cdef readonly PetscLogClass id             # <<<<<<<<<<<<<<
@@ -57126,12 +59787,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2id___get__(struct __pyx_ob
   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("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscClassId(__pyx_v_self->id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_PetscClassId(__pyx_v_self->id); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 193, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -57148,7 +59806,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_2id___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":238
+/* "PETSc/Log.pyx":242
  * cdef dict class_registry = { }
  * 
  * cdef LogClass get_LogClass(object name):             # <<<<<<<<<<<<<<
@@ -57160,12 +59818,9 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_get_
   struct __pyx_obj_8petsc4py_5PETSc_LogClass *__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("get_LogClass", 0);
 
-  /* "PETSc/Log.pyx":239
+  /* "PETSc/Log.pyx":243
  * 
  * cdef LogClass get_LogClass(object name):
  *     return class_registry.get(name)             # <<<<<<<<<<<<<<
@@ -57175,16 +59830,16 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_get_
   __Pyx_XDECREF(((PyObject *)__pyx_r));
   if (unlikely(__pyx_v_8petsc4py_5PETSc_class_registry == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 243, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_8petsc4py_5PETSc_class_registry, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_8petsc4py_5PETSc_class_registry, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_LogClass))))) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_LogClass))))) __PYX_ERR(26, 243, __pyx_L1_error)
   __pyx_r = ((struct __pyx_obj_8petsc4py_5PETSc_LogClass *)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":238
+  /* "PETSc/Log.pyx":242
  * cdef dict class_registry = { }
  * 
  * cdef LogClass get_LogClass(object name):             # <<<<<<<<<<<<<<
@@ -57203,7 +59858,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_get_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":241
+/* "PETSc/Log.pyx":245
  *     return class_registry.get(name)
  * 
  * cdef LogClass reg_LogClass(object name, PetscLogClass classid):             # <<<<<<<<<<<<<<
@@ -57216,24 +59871,21 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_reg_
   struct __pyx_obj_8petsc4py_5PETSc_LogClass *__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("reg_LogClass", 0);
 
-  /* "PETSc/Log.pyx":242
+  /* "PETSc/Log.pyx":246
  * 
  * cdef LogClass reg_LogClass(object name, PetscLogClass classid):
  *     cdef LogClass klass = LogClass()             # <<<<<<<<<<<<<<
  *     klass.id = classid
  *     class_registry[name] = klass
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_LogClass)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LogClass), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 246, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_klass = ((struct __pyx_obj_8petsc4py_5PETSc_LogClass *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Log.pyx":243
+  /* "PETSc/Log.pyx":247
  * cdef LogClass reg_LogClass(object name, PetscLogClass classid):
  *     cdef LogClass klass = LogClass()
  *     klass.id = classid             # <<<<<<<<<<<<<<
@@ -57242,7 +59894,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_reg_
  */
   __pyx_v_klass->id = __pyx_v_classid;
 
-  /* "PETSc/Log.pyx":244
+  /* "PETSc/Log.pyx":248
  *     cdef LogClass klass = LogClass()
  *     klass.id = classid
  *     class_registry[name] = klass             # <<<<<<<<<<<<<<
@@ -57251,11 +59903,11 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_reg_
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_class_registry == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 248, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_class_registry, __pyx_v_name, ((PyObject *)__pyx_v_klass)) < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_class_registry, __pyx_v_name, ((PyObject *)__pyx_v_klass)) < 0)) __PYX_ERR(26, 248, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":245
+  /* "PETSc/Log.pyx":249
  *     klass.id = classid
  *     class_registry[name] = klass
  *     return klass             # <<<<<<<<<<<<<<
@@ -57267,7 +59919,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_reg_
   __pyx_r = __pyx_v_klass;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":241
+  /* "PETSc/Log.pyx":245
  *     return class_registry.get(name)
  * 
  * cdef LogClass reg_LogClass(object name, PetscLogClass classid):             # <<<<<<<<<<<<<<
@@ -57287,7 +59939,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogClass *__pyx_f_8petsc4py_5PETSc_reg_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":253
+/* "PETSc/Log.pyx":257
  *     cdef readonly PetscLogEvent id
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -57316,7 +59968,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent___cinit__(struct __pyx_obj_8petsc
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Log.pyx":254
+  /* "PETSc/Log.pyx":258
  * 
  *     def __cinit__(self):
  *         self.id = 0             # <<<<<<<<<<<<<<
@@ -57325,7 +59977,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent___cinit__(struct __pyx_obj_8petsc
  */
   __pyx_v_self->id = 0;
 
-  /* "PETSc/Log.pyx":253
+  /* "PETSc/Log.pyx":257
  *     cdef readonly PetscLogEvent id
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -57339,7 +59991,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent___cinit__(struct __pyx_obj_8petsc
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":256
+/* "PETSc/Log.pyx":260
  *         self.id = 0
  * 
  *     def __int__(self):             # <<<<<<<<<<<<<<
@@ -57364,12 +60016,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2__int__(struct __pyx_obj_8
   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("__int__", 0);
 
-  /* "PETSc/Log.pyx":257
+  /* "PETSc/Log.pyx":261
  * 
  *     def __int__(self):
  *         return <int> self.id             # <<<<<<<<<<<<<<
@@ -57377,13 +60026,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2__int__(struct __pyx_obj_8
  *     def __enter__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(((int)__pyx_v_self->id)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(((int)__pyx_v_self->id)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":256
+  /* "PETSc/Log.pyx":260
  *         self.id = 0
  * 
  *     def __int__(self):             # <<<<<<<<<<<<<<
@@ -57402,7 +60051,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2__int__(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":259
+/* "PETSc/Log.pyx":263
  *         return <int> self.id
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -57433,19 +60082,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4__enter__(struct __pyx_obj
   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("__enter__", 0);
 
-  /* "PETSc/Log.pyx":260
+  /* "PETSc/Log.pyx":264
  * 
  *     def __enter__(self):
  *         self.begin()             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_begin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_begin); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 264, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -57458,16 +60104,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4__enter__(struct __pyx_obj
     }
   }
   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[26]; __pyx_lineno = 260; __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(26, 264, __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[26]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 264, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Log.pyx":261
+  /* "PETSc/Log.pyx":265
  *     def __enter__(self):
  *         self.begin()
  *         return self             # <<<<<<<<<<<<<<
@@ -57479,7 +60125,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4__enter__(struct __pyx_obj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":259
+  /* "PETSc/Log.pyx":263
  *         return <int> self.id
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -57500,7 +60146,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4__enter__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":263
+/* "PETSc/Log.pyx":267
  *         return self
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -57533,19 +60179,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6__exit__(struct __pyx_obj_
   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("__exit__", 0);
 
-  /* "PETSc/Log.pyx":264
+  /* "PETSc/Log.pyx":268
  * 
  *     def __exit__(self, *exc):
  *         self.end()             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_end); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_end); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -57558,16 +60201,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6__exit__(struct __pyx_obj_
     }
   }
   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[26]; __pyx_lineno = 264; __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(26, 268, __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[26]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 268, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Log.pyx":263
+  /* "PETSc/Log.pyx":267
  *         return self
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -57590,7 +60233,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6__exit__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":268
+/* "PETSc/Log.pyx":272
  *     #
  * 
  *     def begin(self, *objs):             # <<<<<<<<<<<<<<
@@ -57622,30 +60265,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_8begin(struct __pyx_obj_8pe
   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("begin", 0);
 
-  /* "PETSc/Log.pyx":270
+  /* "PETSc/Log.pyx":274
  *     def begin(self, *objs):
  *         cdef PetscObject o[4]
  *         event_args2objs(objs, o)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscLogEventBegin(self.id, o[0], o[1], o[2], o[3]) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 274, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":271
+  /* "PETSc/Log.pyx":275
  *         cdef PetscObject o[4]
  *         event_args2objs(objs, o)
  *         CHKERR( PetscLogEventBegin(self.id, o[0], o[1], o[2], o[3]) )             # <<<<<<<<<<<<<<
  * 
  *     def end(self, *objs):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventBegin(__pyx_v_self->id, (__pyx_v_o[0]), (__pyx_v_o[1]), (__pyx_v_o[2]), (__pyx_v_o[3]))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventBegin(__pyx_v_self->id, (__pyx_v_o[0]), (__pyx_v_o[1]), (__pyx_v_o[2]), (__pyx_v_o[3]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 275, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":268
+  /* "PETSc/Log.pyx":272
  *     #
  * 
  *     def begin(self, *objs):             # <<<<<<<<<<<<<<
@@ -57665,7 +60305,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_8begin(struct __pyx_obj_8pe
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":273
+/* "PETSc/Log.pyx":277
  *         CHKERR( PetscLogEventBegin(self.id, o[0], o[1], o[2], o[3]) )
  * 
  *     def end(self, *objs):             # <<<<<<<<<<<<<<
@@ -57697,30 +60337,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10end(struct __pyx_obj_8pet
   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("end", 0);
 
-  /* "PETSc/Log.pyx":275
+  /* "PETSc/Log.pyx":279
  *     def end(self, *objs):
  *         cdef PetscObject o[4]
  *         event_args2objs(objs, o)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscLogEventEnd(self.id, o[0], o[1], o[2], o[3]) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 279, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":276
+  /* "PETSc/Log.pyx":280
  *         cdef PetscObject o[4]
  *         event_args2objs(objs, o)
  *         CHKERR( PetscLogEventEnd(self.id, o[0], o[1], o[2], o[3]) )             # <<<<<<<<<<<<<<
  * 
  *     def barrierBegin(self, Comm comm=None, *objs):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventEnd(__pyx_v_self->id, (__pyx_v_o[0]), (__pyx_v_o[1]), (__pyx_v_o[2]), (__pyx_v_o[3]))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventEnd(__pyx_v_self->id, (__pyx_v_o[0]), (__pyx_v_o[1]), (__pyx_v_o[2]), (__pyx_v_o[3]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 280, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":273
+  /* "PETSc/Log.pyx":277
  *         CHKERR( PetscLogEventBegin(self.id, o[0], o[1], o[2], o[3]) )
  * 
  *     def end(self, *objs):             # <<<<<<<<<<<<<<
@@ -57740,7 +60377,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10end(struct __pyx_obj_8pet
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":278
+/* "PETSc/Log.pyx":282
  *         CHKERR( PetscLogEventEnd(self.id, o[0], o[1], o[2], o[3]) )
  * 
  *     def barrierBegin(self, Comm comm=None, *objs):             # <<<<<<<<<<<<<<
@@ -57754,9 +60391,6 @@ static char __pyx_doc_8petsc4py_5PETSc_8LogEvent_12barrierBegin[] = "LogEvent.ba
 static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_13barrierBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscCommObject *__pyx_v_comm = 0;
   PyObject *__pyx_v_objs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("barrierBegin (wrapper)", 0);
@@ -57792,7 +60426,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_13barrierBegin(PyObject *__
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "barrierBegin") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "barrierBegin") < 0)) __PYX_ERR(26, 282, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -57810,7 +60444,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_13barrierBegin(PyObject *__
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_8petsc4py_5PETSc_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_8petsc4py_5PETSc_Comm, 1, "comm", 0))) __PYX_ERR(26, 282, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_8LogEvent_12barrierBegin(((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_v_self), __pyx_v_comm, __pyx_v_objs);
 
   /* function exit code */
@@ -57831,31 +60465,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_12barrierBegin(struct __pyx
   int __pyx_t_1;
   MPI_Comm __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("barrierBegin", 0);
 
-  /* "PETSc/Log.pyx":280
+  /* "PETSc/Log.pyx":284
  *     def barrierBegin(self, Comm comm=None, *objs):
  *         cdef PetscObject o[4]
  *         event_args2objs(objs, o)             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         if ccomm == MPI_COMM_NULL: ccomm = PETSC_COMM_DEFAULT
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 284, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":281
+  /* "PETSc/Log.pyx":285
  *         cdef PetscObject o[4]
  *         event_args2objs(objs, o)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         if ccomm == MPI_COMM_NULL: ccomm = PETSC_COMM_DEFAULT
  *         CHKERR( PetscLogEventBarrierBegin(self.id, o[0], o[1], o[2], o[3], ccomm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(((PyObject *)__pyx_v_comm), __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(((PyObject *)__pyx_v_comm), __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(26, 285, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_2;
 
-  /* "PETSc/Log.pyx":282
+  /* "PETSc/Log.pyx":286
  *         event_args2objs(objs, o)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         if ccomm == MPI_COMM_NULL: ccomm = PETSC_COMM_DEFAULT             # <<<<<<<<<<<<<<
@@ -57865,20 +60496,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_12barrierBegin(struct __pyx
   __pyx_t_3 = ((__pyx_v_ccomm == MPI_COMM_NULL) != 0);
   if (__pyx_t_3) {
     __pyx_v_ccomm = __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Log.pyx":283
+  /* "PETSc/Log.pyx":287
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         if ccomm == MPI_COMM_NULL: ccomm = PETSC_COMM_DEFAULT
  *         CHKERR( PetscLogEventBarrierBegin(self.id, o[0], o[1], o[2], o[3], ccomm) )             # <<<<<<<<<<<<<<
  * 
  *     def barrierEnd(self, Comm comm=None, *objs):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventBarrierBegin(__pyx_v_self->id, (__pyx_v_o[0]), (__pyx_v_o[1]), (__pyx_v_o[2]), (__pyx_v_o[3]), __pyx_v_ccomm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventBarrierBegin(__pyx_v_self->id, (__pyx_v_o[0]), (__pyx_v_o[1]), (__pyx_v_o[2]), (__pyx_v_o[3]), __pyx_v_ccomm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 287, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":278
+  /* "PETSc/Log.pyx":282
  *         CHKERR( PetscLogEventEnd(self.id, o[0], o[1], o[2], o[3]) )
  * 
  *     def barrierBegin(self, Comm comm=None, *objs):             # <<<<<<<<<<<<<<
@@ -57898,7 +60527,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_12barrierBegin(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":285
+/* "PETSc/Log.pyx":289
  *         CHKERR( PetscLogEventBarrierBegin(self.id, o[0], o[1], o[2], o[3], ccomm) )
  * 
  *     def barrierEnd(self, Comm comm=None, *objs):             # <<<<<<<<<<<<<<
@@ -57912,9 +60541,6 @@ static char __pyx_doc_8petsc4py_5PETSc_8LogEvent_14barrierEnd[] = "LogEvent.barr
 static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_15barrierEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscCommObject *__pyx_v_comm = 0;
   PyObject *__pyx_v_objs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("barrierEnd (wrapper)", 0);
@@ -57950,7 +60576,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_15barrierEnd(PyObject *__py
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "barrierEnd") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "barrierEnd") < 0)) __PYX_ERR(26, 289, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -57968,7 +60594,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_15barrierEnd(PyObject *__py
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_8petsc4py_5PETSc_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_8petsc4py_5PETSc_Comm, 1, "comm", 0))) __PYX_ERR(26, 289, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_8LogEvent_14barrierEnd(((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_v_self), __pyx_v_comm, __pyx_v_objs);
 
   /* function exit code */
@@ -57989,31 +60615,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_14barrierEnd(struct __pyx_o
   int __pyx_t_1;
   MPI_Comm __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("barrierEnd", 0);
 
-  /* "PETSc/Log.pyx":287
+  /* "PETSc/Log.pyx":291
  *     def barrierEnd(self, Comm comm=None, *objs):
  *         cdef PetscObject o[4]
  *         event_args2objs(objs, o)             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         if ccomm == MPI_COMM_NULL: ccomm = PETSC_COMM_DEFAULT
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 291, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":288
+  /* "PETSc/Log.pyx":292
  *         cdef PetscObject o[4]
  *         event_args2objs(objs, o)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         if ccomm == MPI_COMM_NULL: ccomm = PETSC_COMM_DEFAULT
  *         CHKERR( PetscLogEventBarrierEnd(self.id, o[0], o[1], o[2], o[3], ccomm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(((PyObject *)__pyx_v_comm), __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(((PyObject *)__pyx_v_comm), __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(26, 292, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_2;
 
-  /* "PETSc/Log.pyx":289
+  /* "PETSc/Log.pyx":293
  *         event_args2objs(objs, o)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         if ccomm == MPI_COMM_NULL: ccomm = PETSC_COMM_DEFAULT             # <<<<<<<<<<<<<<
@@ -58023,20 +60646,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_14barrierEnd(struct __pyx_o
   __pyx_t_3 = ((__pyx_v_ccomm == MPI_COMM_NULL) != 0);
   if (__pyx_t_3) {
     __pyx_v_ccomm = __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Log.pyx":290
+  /* "PETSc/Log.pyx":294
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         if ccomm == MPI_COMM_NULL: ccomm = PETSC_COMM_DEFAULT
  *         CHKERR( PetscLogEventBarrierEnd(self.id, o[0], o[1], o[2], o[3], ccomm) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventBarrierEnd(__pyx_v_self->id, (__pyx_v_o[0]), (__pyx_v_o[1]), (__pyx_v_o[2]), (__pyx_v_o[3]), __pyx_v_ccomm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventBarrierEnd(__pyx_v_self->id, (__pyx_v_o[0]), (__pyx_v_o[1]), (__pyx_v_o[2]), (__pyx_v_o[3]), __pyx_v_ccomm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 294, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":285
+  /* "PETSc/Log.pyx":289
  *         CHKERR( PetscLogEventBarrierBegin(self.id, o[0], o[1], o[2], o[3], ccomm) )
  * 
  *     def barrierEnd(self, Comm comm=None, *objs):             # <<<<<<<<<<<<<<
@@ -58056,7 +60677,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_14barrierEnd(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":294
+/* "PETSc/Log.pyx":298
  *     #
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -58087,12 +60708,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_16getName(struct __pyx_obj_
   __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("getName", 0);
 
-  /* "PETSc/Log.pyx":295
+  /* "PETSc/Log.pyx":299
  * 
  *     def getName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -58101,16 +60719,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_16getName(struct __pyx_obj_
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Log.pyx":296
+  /* "PETSc/Log.pyx":300
  *     def getName(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscLogEventFindName(self.id, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 300, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":297
+  /* "PETSc/Log.pyx":301
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscLogEventFindName(self.id, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -58118,13 +60736,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_16getName(struct __pyx_obj_
  *     property name:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 301, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":294
+  /* "PETSc/Log.pyx":298
  *     #
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -58143,7 +60761,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_16getName(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":300
+/* "PETSc/Log.pyx":304
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58170,20 +60788,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4name___get__(struct __pyx_
   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);
 
-  /* "PETSc/Log.pyx":301
+  /* "PETSc/Log.pyx":305
  *     property name:
  *         def __get__(self):
  *             return self.getName()             # <<<<<<<<<<<<<<
  *         def __set__(self, value):
- *             raise TypeError("readonly attribute")
+ *             <void>self; <void>value; # unused
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getName); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getName); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 305, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -58196,10 +60811,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4name___get__(struct __pyx_
     }
   }
   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[26]; __pyx_lineno = 301; __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(26, 305, __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[26]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 305, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -58207,7 +60822,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4name___get__(struct __pyx_
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":300
+  /* "PETSc/Log.pyx":304
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58228,12 +60843,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4name___get__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":302
+/* "PETSc/Log.pyx":306
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")
- * 
  */
 
 /* Python wrapper */
@@ -58249,34 +60864,41 @@ static int __pyx_pw_8petsc4py_5PETSc_8LogEvent_4name_3__set__(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_4name_2__set__(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_value) {
+static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_4name_2__set__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Log.pyx":303
+  /* "PETSc/Log.pyx":307
  *             return self.getName()
  *         def __set__(self, value):
+ *             <void>self; <void>value; # unused             # <<<<<<<<<<<<<<
+ *             raise TypeError("readonly attribute")
+ * 
+ */
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_value);
+
+  /* "PETSc/Log.pyx":308
+ *         def __set__(self, value):
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 308, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  {__pyx_filename = __pyx_f[26]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(26, 308, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":302
+  /* "PETSc/Log.pyx":306
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")
- * 
  */
 
   /* function exit code */
@@ -58288,7 +60910,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_4name_2__set__(CYTHON_UNUSED stru
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":307
+/* "PETSc/Log.pyx":312
  *     #
  * 
  *     def activate(self):             # <<<<<<<<<<<<<<
@@ -58317,21 +60939,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_18activate(struct __pyx_obj
   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("activate", 0);
 
-  /* "PETSc/Log.pyx":308
+  /* "PETSc/Log.pyx":313
  * 
  *     def activate(self):
  *         CHKERR( PetscLogEventActivate(self.id) )             # <<<<<<<<<<<<<<
  * 
  *     def deactivate(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivate(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivate(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 313, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":307
+  /* "PETSc/Log.pyx":312
  *     #
  * 
  *     def activate(self):             # <<<<<<<<<<<<<<
@@ -58351,7 +60970,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_18activate(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":310
+/* "PETSc/Log.pyx":315
  *         CHKERR( PetscLogEventActivate(self.id) )
  * 
  *     def deactivate(self):             # <<<<<<<<<<<<<<
@@ -58380,21 +60999,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_20deactivate(struct __pyx_o
   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("deactivate", 0);
 
-  /* "PETSc/Log.pyx":311
+  /* "PETSc/Log.pyx":316
  * 
  *     def deactivate(self):
  *         CHKERR( PetscLogEventDeactivate(self.id) )             # <<<<<<<<<<<<<<
  * 
  *     def getActive(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivate(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivate(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 316, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":310
+  /* "PETSc/Log.pyx":315
  *         CHKERR( PetscLogEventActivate(self.id) )
  * 
  *     def deactivate(self):             # <<<<<<<<<<<<<<
@@ -58414,12 +61030,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_20deactivate(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":313
+/* "PETSc/Log.pyx":318
  *         CHKERR( PetscLogEventDeactivate(self.id) )
  * 
  *     def getActive(self):             # <<<<<<<<<<<<<<
+ *         <void>self # unused
  *         raise NotImplementedError
- * 
  */
 
 /* Python wrapper */
@@ -58439,30 +61055,36 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_23getActive(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_22getActive(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_22getActive(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getActive", 0);
 
-  /* "PETSc/Log.pyx":314
+  /* "PETSc/Log.pyx":319
  * 
  *     def getActive(self):
+ *         <void>self # unused             # <<<<<<<<<<<<<<
+ *         raise NotImplementedError
+ * 
+ */
+  ((void)__pyx_v_self);
+
+  /* "PETSc/Log.pyx":320
+ *     def getActive(self):
+ *         <void>self # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def setActive(self, flag):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[26]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(26, 320, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":313
+  /* "PETSc/Log.pyx":318
  *         CHKERR( PetscLogEventDeactivate(self.id) )
  * 
  *     def getActive(self):             # <<<<<<<<<<<<<<
+ *         <void>self # unused
  *         raise NotImplementedError
- * 
  */
 
   /* function exit code */
@@ -58474,7 +61096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_22getActive(CYTHON_UNUSED s
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":316
+/* "PETSc/Log.pyx":322
  *         raise NotImplementedError
  * 
  *     def setActive(self, flag):             # <<<<<<<<<<<<<<
@@ -58487,9 +61109,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_25setActive(PyObject *__pyx
 static char __pyx_doc_8petsc4py_5PETSc_8LogEvent_24setActive[] = "LogEvent.setActive(self, flag)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_25setActive(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("setActive (wrapper)", 0);
@@ -58511,7 +61130,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_25setActive(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, "setActive") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setActive") < 0)) __PYX_ERR(26, 322, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -58522,7 +61141,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_25setActive(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 322, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LogEvent.setActive", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -58540,45 +61159,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_24setActive(struct __pyx_ob
   __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("setActive", 0);
 
-  /* "PETSc/Log.pyx":317
+  /* "PETSc/Log.pyx":323
  * 
  *     def setActive(self, flag):
  *         if flag:             # <<<<<<<<<<<<<<
  *             CHKERR( PetscLogEventActivate(self.id) )
  *         else:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 323, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Log.pyx":318
+    /* "PETSc/Log.pyx":324
  *     def setActive(self, flag):
  *         if flag:
  *             CHKERR( PetscLogEventActivate(self.id) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( PetscLogEventDeactivate(self.id) )
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivate(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivate(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 324, __pyx_L1_error)
+
+    /* "PETSc/Log.pyx":323
+ * 
+ *     def setActive(self, flag):
+ *         if flag:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscLogEventActivate(self.id) )
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Log.pyx":320
+  /* "PETSc/Log.pyx":326
  *             CHKERR( PetscLogEventActivate(self.id) )
  *         else:
  *             CHKERR( PetscLogEventDeactivate(self.id) )             # <<<<<<<<<<<<<<
  * 
  *     property active:
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivate(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivate(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 326, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Log.pyx":316
+  /* "PETSc/Log.pyx":322
  *         raise NotImplementedError
  * 
  *     def setActive(self, flag):             # <<<<<<<<<<<<<<
@@ -58598,7 +61222,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_24setActive(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":323
+/* "PETSc/Log.pyx":329
  * 
  *     property active:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58625,12 +61249,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6active___get__(struct __py
   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);
 
-  /* "PETSc/Log.pyx":324
+  /* "PETSc/Log.pyx":330
  *     property active:
  *         def __get__(self):
  *             return self.getActive()             # <<<<<<<<<<<<<<
@@ -58638,7 +61259,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6active___get__(struct __py
  *             self.setActive(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getActive); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getActive); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 330, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -58651,10 +61272,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6active___get__(struct __py
     }
   }
   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[26]; __pyx_lineno = 324; __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(26, 330, __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[26]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 330, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -58662,7 +61283,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6active___get__(struct __py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":323
+  /* "PETSc/Log.pyx":329
  * 
  *     property active:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58683,7 +61304,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6active___get__(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":325
+/* "PETSc/Log.pyx":331
  *         def __get__(self):
  *             return self.getActive()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -58711,19 +61332,16 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_6active_2__set__(struct __pyx_obj
   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);
 
-  /* "PETSc/Log.pyx":326
+  /* "PETSc/Log.pyx":332
  *             return self.getActive()
  *         def __set__(self, value):
  *             self.setActive(value)             # <<<<<<<<<<<<<<
  * 
- *     def setActiveAll(self, flag):
+ *     def getActiveAll(self):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setActive); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setActive); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 332, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -58736,23 +61354,23 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_6active_2__set__(struct __pyx_obj
     }
   }
   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[26]; __pyx_lineno = 326; __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(26, 332, __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[26]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(26, 332, __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[26]; __pyx_lineno = 326; __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(26, 332, __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;
 
-  /* "PETSc/Log.pyx":325
+  /* "PETSc/Log.pyx":331
  *         def __get__(self):
  *             return self.getActive()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -58775,22 +61393,85 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_6active_2__set__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":328
+/* "PETSc/Log.pyx":334
+ *             self.setActive(value)
+ * 
+ *     def getActiveAll(self):             # <<<<<<<<<<<<<<
+ *         <void>self # unused
+ *         raise NotImplementedError
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_27getActiveAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_8LogEvent_26getActiveAll[] = "LogEvent.getActiveAll(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_27getActiveAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getActiveAll (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getActiveAll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getActiveAll", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_8LogEvent_26getActiveAll(((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_26getActiveAll(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getActiveAll", 0);
+
+  /* "PETSc/Log.pyx":335
+ * 
+ *     def getActiveAll(self):
+ *         <void>self # unused             # <<<<<<<<<<<<<<
+ *         raise NotImplementedError
+ * 
+ */
+  ((void)__pyx_v_self);
+
+  /* "PETSc/Log.pyx":336
+ *     def getActiveAll(self):
+ *         <void>self # unused
+ *         raise NotImplementedError             # <<<<<<<<<<<<<<
+ * 
+ *     def setActiveAll(self, flag):
+ */
+  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
+  __PYX_ERR(26, 336, __pyx_L1_error)
+
+  /* "PETSc/Log.pyx":334
  *             self.setActive(value)
  * 
+ *     def getActiveAll(self):             # <<<<<<<<<<<<<<
+ *         <void>self # unused
+ *         raise NotImplementedError
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.LogEvent.getActiveAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Log.pyx":338
+ *         raise NotImplementedError
+ * 
  *     def setActiveAll(self, flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool tval = PETSC_FALSE
  *         if flag: tval = PETSC_TRUE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_27setActiveAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_8LogEvent_26setActiveAll[] = "LogEvent.setActiveAll(self, flag)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_27setActiveAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_29setActiveAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_8LogEvent_28setActiveAll[] = "LogEvent.setActiveAll(self, flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_29setActiveAll(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("setActiveAll (wrapper)", 0);
@@ -58812,7 +61493,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_27setActiveAll(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setActiveAll") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setActiveAll") < 0)) __PYX_ERR(26, 338, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -58823,31 +61504,28 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_27setActiveAll(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setActiveAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setActiveAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 338, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LogEvent.setActiveAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_8LogEvent_26setActiveAll(((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_8LogEvent_28setActiveAll(((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_26setActiveAll(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28setActiveAll(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__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;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setActiveAll", 0);
 
-  /* "PETSc/Log.pyx":329
+  /* "PETSc/Log.pyx":339
  * 
  *     def setActiveAll(self, flag):
  *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -58856,31 +61534,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_26setActiveAll(struct __pyx
  */
   __pyx_v_tval = PETSC_FALSE;
 
-  /* "PETSc/Log.pyx":330
+  /* "PETSc/Log.pyx":340
  *     def setActiveAll(self, flag):
  *         cdef PetscBool tval = PETSC_FALSE
  *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
  *         CHKERR( PetscLogEventSetActiveAll(self.id, tval) )
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(26, 340, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_tval = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Log.pyx":331
+  /* "PETSc/Log.pyx":341
  *         cdef PetscBool tval = PETSC_FALSE
  *         if flag: tval = PETSC_TRUE
  *         CHKERR( PetscLogEventSetActiveAll(self.id, tval) )             # <<<<<<<<<<<<<<
  * 
  *     property active_all:
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventSetActiveAll(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventSetActiveAll(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 341, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":328
- *             self.setActive(value)
+  /* "PETSc/Log.pyx":338
+ *         raise NotImplementedError
  * 
  *     def setActiveAll(self, flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool tval = PETSC_FALSE
@@ -58899,11 +61575,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_26setActiveAll(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":334
+/* "PETSc/Log.pyx":344
  * 
  *     property active_all:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             raise NotImplementedError
+ *             self.getActiveAll()
  *         def __set__(self, value):
  */
 
@@ -58920,44 +61596,69 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_10active_all_1__get__(PyObj
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all___get__(CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all___get__(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Log.pyx":335
+  /* "PETSc/Log.pyx":345
  *     property active_all:
  *         def __get__(self):
- *             raise NotImplementedError             # <<<<<<<<<<<<<<
+ *             self.getActiveAll()             # <<<<<<<<<<<<<<
  *         def __set__(self, value):
  *             self.setActiveAll(value)
  */
-  __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[26]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getActiveAll); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 345, __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(26, 345, __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(26, 345, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Log.pyx":334
+  /* "PETSc/Log.pyx":344
  * 
  *     property active_all:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             raise NotImplementedError
+ *             self.getActiveAll()
  *         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("petsc4py.PETSc.LogEvent.active_all.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":336
+/* "PETSc/Log.pyx":346
  *         def __get__(self):
- *             raise NotImplementedError
+ *             self.getActiveAll()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
  *             self.setActiveAll(value)
  * 
@@ -58983,19 +61684,16 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all_2__set__(struct __py
   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);
 
-  /* "PETSc/Log.pyx":337
- *             raise NotImplementedError
+  /* "PETSc/Log.pyx":347
+ *             self.getActiveAll()
  *         def __set__(self, value):
  *             self.setActiveAll(value)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setActiveAll); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setActiveAll); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 347, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -59008,25 +61706,25 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all_2__set__(struct __py
     }
   }
   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[26]; __pyx_lineno = 337; __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(26, 347, __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[26]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(26, 347, __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[26]; __pyx_lineno = 337; __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(26, 347, __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;
 
-  /* "PETSc/Log.pyx":336
+  /* "PETSc/Log.pyx":346
  *         def __get__(self):
- *             raise NotImplementedError
+ *             self.getActiveAll()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
  *             self.setActiveAll(value)
  * 
@@ -59047,7 +61745,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all_2__set__(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":341
+/* "PETSc/Log.pyx":351
  *     #
  * 
  *     def getPerfInfo(self, stage=None):             # <<<<<<<<<<<<<<
@@ -59056,13 +61754,10 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all_2__set__(struct __py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_29getPerfInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_8LogEvent_28getPerfInfo[] = "LogEvent.getPerfInfo(self, stage=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_29getPerfInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_31getPerfInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_8LogEvent_30getPerfInfo[] = "LogEvent.getPerfInfo(self, stage=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_31getPerfInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_stage = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getPerfInfo (wrapper)", 0);
@@ -59087,7 +61782,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_29getPerfInfo(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getPerfInfo") < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getPerfInfo") < 0)) __PYX_ERR(26, 351, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -59100,20 +61795,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_29getPerfInfo(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getPerfInfo", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[26]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getPerfInfo", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 351, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LogEvent.getPerfInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_8LogEvent_28getPerfInfo(((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_v_self), __pyx_v_stage);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_8LogEvent_30getPerfInfo(((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_v_self), __pyx_v_stage);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28getPerfInfo(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_stage) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_30getPerfInfo(struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_v_self, PyObject *__pyx_v_stage) {
   PetscEventPerfInfo __pyx_v_info;
   PetscInt __pyx_v_cstage;
   PyObject *__pyx_r = NULL;
@@ -59123,12 +61818,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28getPerfInfo(struct __pyx_
   PetscInt __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("getPerfInfo", 0);
 
-  /* "PETSc/Log.pyx":343
+  /* "PETSc/Log.pyx":353
  *     def getPerfInfo(self, stage=None):
  *         cdef PetscEventPerfInfo info
  *         cdef PetscInt cstage = PETSC_DETERMINE             # <<<<<<<<<<<<<<
@@ -59137,7 +61829,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28getPerfInfo(struct __pyx_
  */
   __pyx_v_cstage = PETSC_DETERMINE;
 
-  /* "PETSc/Log.pyx":344
+  /* "PETSc/Log.pyx":354
  *         cdef PetscEventPerfInfo info
  *         cdef PetscInt cstage = PETSC_DETERMINE
  *         if stage is not None: cstage = asInt(stage)             # <<<<<<<<<<<<<<
@@ -59147,22 +61839,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28getPerfInfo(struct __pyx_
   __pyx_t_1 = (__pyx_v_stage != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stage); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stage); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(26, 354, __pyx_L1_error)
     __pyx_v_cstage = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Log.pyx":345
+  /* "PETSc/Log.pyx":355
  *         cdef PetscInt cstage = PETSC_DETERMINE
  *         if stage is not None: cstage = asInt(stage)
  *         CHKERR( PetscLogEventGetPerfInfo(cstage, self.id, &info) )             # <<<<<<<<<<<<<<
  *         return info
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventGetPerfInfo(__pyx_v_cstage, __pyx_v_self->id, (&__pyx_v_info))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventGetPerfInfo(__pyx_v_cstage, __pyx_v_self->id, (&__pyx_v_info))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(26, 355, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":346
+  /* "PETSc/Log.pyx":356
  *         if stage is not None: cstage = asInt(stage)
  *         CHKERR( PetscLogEventGetPerfInfo(cstage, self.id, &info) )
  *         return info             # <<<<<<<<<<<<<<
@@ -59170,13 +61860,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28getPerfInfo(struct __pyx_
  * cdef dict event_registry = { }
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_convert__to_py_PetscEventPerfInfo(__pyx_v_info); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_convert__to_py_PetscEventPerfInfo(__pyx_v_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(26, 356, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":341
+  /* "PETSc/Log.pyx":351
  *     #
  * 
  *     def getPerfInfo(self, stage=None):             # <<<<<<<<<<<<<<
@@ -59195,7 +61885,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28getPerfInfo(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":251
+/* "PETSc/Log.pyx":255
  * cdef class LogEvent:
  * 
  *     cdef readonly PetscLogEvent id             # <<<<<<<<<<<<<<
@@ -59220,12 +61910,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2id___get__(struct __pyx_ob
   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("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscLogEvent(__pyx_v_self->id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_PetscLogEvent(__pyx_v_self->id); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 255, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -59242,7 +61929,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_2id___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":350
+/* "PETSc/Log.pyx":360
  * cdef dict event_registry = { }
  * 
  * cdef LogEvent get_LogEvent(object name):             # <<<<<<<<<<<<<<
@@ -59254,12 +61941,9 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_f_8petsc4py_5PETSc_get_
   struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__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("get_LogEvent", 0);
 
-  /* "PETSc/Log.pyx":351
+  /* "PETSc/Log.pyx":361
  * 
  * cdef LogEvent get_LogEvent(object name):
  *     return event_registry.get(name)             # <<<<<<<<<<<<<<
@@ -59269,16 +61953,16 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_f_8petsc4py_5PETSc_get_
   __Pyx_XDECREF(((PyObject *)__pyx_r));
   if (unlikely(__pyx_v_8petsc4py_5PETSc_event_registry == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 361, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_8petsc4py_5PETSc_event_registry, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_8petsc4py_5PETSc_event_registry, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_LogEvent))))) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_LogEvent))))) __PYX_ERR(26, 361, __pyx_L1_error)
   __pyx_r = ((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":350
+  /* "PETSc/Log.pyx":360
  * cdef dict event_registry = { }
  * 
  * cdef LogEvent get_LogEvent(object name):             # <<<<<<<<<<<<<<
@@ -59297,7 +61981,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_f_8petsc4py_5PETSc_get_
   return __pyx_r;
 }
 
-/* "PETSc/Log.pyx":353
+/* "PETSc/Log.pyx":363
  *     return event_registry.get(name)
  * 
  * cdef LogEvent reg_LogEvent(object name, PetscLogEvent eventid):             # <<<<<<<<<<<<<<
@@ -59310,24 +61994,21 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_f_8petsc4py_5PETSc_reg_
   struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__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("reg_LogEvent", 0);
 
-  /* "PETSc/Log.pyx":354
+  /* "PETSc/Log.pyx":364
  * 
  * cdef LogEvent reg_LogEvent(object name, PetscLogEvent eventid):
  *     cdef LogEvent event = LogEvent()             # <<<<<<<<<<<<<<
  *     event.id = eventid
  *     event_registry[name] = event
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_LogEvent)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LogEvent), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 364, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_event = ((struct __pyx_obj_8petsc4py_5PETSc_LogEvent *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Log.pyx":355
+  /* "PETSc/Log.pyx":365
  * cdef LogEvent reg_LogEvent(object name, PetscLogEvent eventid):
  *     cdef LogEvent event = LogEvent()
  *     event.id = eventid             # <<<<<<<<<<<<<<
@@ -59336,7 +62017,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_f_8petsc4py_5PETSc_reg_
  */
   __pyx_v_event->id = __pyx_v_eventid;
 
-  /* "PETSc/Log.pyx":356
+  /* "PETSc/Log.pyx":366
  *     cdef LogEvent event = LogEvent()
  *     event.id = eventid
  *     event_registry[name] = event             # <<<<<<<<<<<<<<
@@ -59345,11 +62026,11 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_f_8petsc4py_5PETSc_reg_
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_event_registry == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    {__pyx_filename = __pyx_f[26]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(26, 366, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_event_registry, __pyx_v_name, ((PyObject *)__pyx_v_event)) < 0)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_event_registry, __pyx_v_name, ((PyObject *)__pyx_v_event)) < 0)) __PYX_ERR(26, 366, __pyx_L1_error)
 
-  /* "PETSc/Log.pyx":357
+  /* "PETSc/Log.pyx":367
  *     event.id = eventid
  *     event_registry[name] = event
  *     return event             # <<<<<<<<<<<<<<
@@ -59361,7 +62042,7 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_f_8petsc4py_5PETSc_reg_
   __pyx_r = __pyx_v_event;
   goto __pyx_L0;
 
-  /* "PETSc/Log.pyx":353
+  /* "PETSc/Log.pyx":363
  *     return event_registry.get(name)
  * 
  * cdef LogEvent reg_LogEvent(object name, PetscLogEvent eventid):             # <<<<<<<<<<<<<<
@@ -59393,9 +62074,6 @@ static struct __pyx_obj_8petsc4py_5PETSc_LogEvent *__pyx_f_8petsc4py_5PETSc_reg_
 static int __pyx_pw_8petsc4py_5PETSc_4Comm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static int __pyx_pw_8petsc4py_5PETSc_4Comm_1__cinit__(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;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
@@ -59420,7 +62098,7 @@ static int __pyx_pw_8petsc4py_5PETSc_4Comm_1__cinit__(PyObject *__pyx_v_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 7, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -59433,7 +62111,7 @@ static int __pyx_pw_8petsc4py_5PETSc_4Comm_1__cinit__(PyObject *__pyx_v_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 7, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Comm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -59451,9 +62129,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4Comm___cinit__(struct PyPetscCommObject *_
   __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("__cinit__", 0);
 
   /* "PETSc/Comm.pyx":8
@@ -59463,7 +62138,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4Comm___cinit__(struct PyPetscCommObject *_
  *         self.isdup = 0
  *         if self.comm != MPI_COMM_NULL:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, MPI_COMM_NULL); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, MPI_COMM_NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(9, 8, __pyx_L1_error)
   __pyx_v_self->comm = __pyx_t_1;
 
   /* "PETSc/Comm.pyx":9
@@ -59497,17 +62172,25 @@ static int __pyx_pf_8petsc4py_5PETSc_4Comm___cinit__(struct PyPetscCommObject *_
     __Pyx_GOTREF(__pyx_v_self->base);
     __Pyx_DECREF(__pyx_v_self->base);
     __pyx_v_self->base = __pyx_v_comm;
+
+    /* "PETSc/Comm.pyx":10
+ *         self.comm = def_Comm(comm, MPI_COMM_NULL)
+ *         self.isdup = 0
+ *         if self.comm != MPI_COMM_NULL:             # <<<<<<<<<<<<<<
+ *             self.base = comm
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Comm.pyx":13
+  /* "PETSc/Comm.pyx":13
  *             self.base = comm
  *         else:
  *             self.base = None             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
+  /*else*/ {
     __Pyx_INCREF(Py_None);
     __Pyx_GIVEREF(Py_None);
     __Pyx_GOTREF(__pyx_v_self->base);
@@ -59558,9 +62241,6 @@ static void __pyx_pf_8petsc4py_5PETSc_4Comm_2__dealloc__(struct PyPetscCommObjec
   __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("__dealloc__", 0);
 
   /* "PETSc/Comm.pyx":16
@@ -59580,10 +62260,16 @@ static void __pyx_pf_8petsc4py_5PETSc_4Comm_2__dealloc__(struct PyPetscCommObjec
  *         self.comm = MPI_COMM_NULL
  *         self.isdup = 0
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscCommDEALLOC((&__pyx_v_self->comm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscCommDEALLOC((&__pyx_v_self->comm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(9, 17, __pyx_L1_error)
+
+    /* "PETSc/Comm.pyx":16
+ * 
+ *     def __dealloc__(self):
+ *         if self.isdup:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscCommDEALLOC(&self.comm) )
+ *         self.comm = MPI_COMM_NULL
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/Comm.pyx":18
  *         if self.isdup:
@@ -59668,9 +62354,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
   MPI_Comm __pyx_t_4;
   int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__richcmp__", 0);
 
   /* "PETSc/Comm.pyx":23
@@ -59680,7 +62363,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
  *         if not isinstance(other, Comm): return NotImplemented
  *         if op!=2 and op!=3: raise TypeError("only '==' and '!='")
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Comm); 
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
@@ -59696,7 +62379,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
  *         if op!=2 and op!=3: raise TypeError("only '==' and '!='")
  *         cdef Comm s = self
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Comm); 
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
@@ -59722,11 +62405,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
     break;
   }
   if (__pyx_t_1) {
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 25, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[9]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(9, 25, __pyx_L1_error)
   }
 
   /* "PETSc/Comm.pyx":26
@@ -59736,7 +62419,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
  *         cdef Comm o = other
  *         cdef int eq = (op == 2)
  */
-  if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Comm))))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Comm))))) __PYX_ERR(9, 26, __pyx_L1_error)
   __pyx_t_3 = __pyx_v_self;
   __Pyx_INCREF(__pyx_t_3);
   __pyx_v_s = ((struct PyPetscCommObject *)__pyx_t_3);
@@ -59749,7 +62432,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
  *         cdef int eq = (op == 2)
  *         cdef MPI_Comm comm1 = s.comm
  */
-  if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Comm))))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Comm))))) __PYX_ERR(9, 27, __pyx_L1_error)
   __pyx_t_3 = __pyx_v_other;
   __Pyx_INCREF(__pyx_t_3);
   __pyx_v_o = ((struct PyPetscCommObject *)__pyx_t_3);
@@ -59818,7 +62501,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
  *             if eq: return (flag==<int>MPI_IDENT or  flag==<int>MPI_CONGRUENT)
  *             else:  return (flag!=<int>MPI_IDENT and flag!=<int>MPI_CONGRUENT)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_compare(__pyx_v_comm1, __pyx_v_comm2, (&__pyx_v_flag))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_compare(__pyx_v_comm1, __pyx_v_comm2, (&__pyx_v_flag))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(9, 33, __pyx_L1_error)
 
     /* "PETSc/Comm.pyx":34
  *         if comm1 != MPI_COMM_NULL and comm2 != MPI_COMM_NULL:
@@ -59833,14 +62516,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
       __pyx_t_1 = (__pyx_v_flag == ((int)MPI_IDENT));
       if (!__pyx_t_1) {
       } else {
-        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 34, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_3 = __pyx_t_6;
         __pyx_t_6 = 0;
         goto __pyx_L10_bool_binop_done;
       }
       __pyx_t_1 = (__pyx_v_flag == ((int)MPI_CONGRUENT));
-      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 34, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_3 = __pyx_t_6;
       __pyx_t_6 = 0;
@@ -59849,27 +62532,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
       __pyx_t_3 = 0;
       goto __pyx_L0;
     }
-    /*else*/ {
 
-      /* "PETSc/Comm.pyx":35
+    /* "PETSc/Comm.pyx":35
  *             CHKERR( MPI_Comm_compare(comm1, comm2, &flag) )
  *             if eq: return (flag==<int>MPI_IDENT or  flag==<int>MPI_CONGRUENT)
  *             else:  return (flag!=<int>MPI_IDENT and flag!=<int>MPI_CONGRUENT)             # <<<<<<<<<<<<<<
  *         else:
  *             if eq: return (comm1 == comm2)
  */
+    /*else*/ {
       __Pyx_XDECREF(__pyx_r);
       __pyx_t_1 = (__pyx_v_flag != ((int)MPI_IDENT));
       if (__pyx_t_1) {
       } else {
-        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 35, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_3 = __pyx_t_6;
         __pyx_t_6 = 0;
         goto __pyx_L12_bool_binop_done;
       }
       __pyx_t_1 = (__pyx_v_flag != ((int)MPI_CONGRUENT));
-      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 35, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_3 = __pyx_t_6;
       __pyx_t_6 = 0;
@@ -59878,36 +62561,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
       __pyx_t_3 = 0;
       goto __pyx_L0;
     }
+
+    /* "PETSc/Comm.pyx":32
+ *         cdef MPI_Comm comm2 = o.comm
+ *         cdef int flag = 0
+ *         if comm1 != MPI_COMM_NULL and comm2 != MPI_COMM_NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MPI_Comm_compare(comm1, comm2, &flag) )
+ *             if eq: return (flag==<int>MPI_IDENT or  flag==<int>MPI_CONGRUENT)
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Comm.pyx":37
+  /* "PETSc/Comm.pyx":37
  *             else:  return (flag!=<int>MPI_IDENT and flag!=<int>MPI_CONGRUENT)
  *         else:
  *             if eq: return (comm1 == comm2)             # <<<<<<<<<<<<<<
  *             else:  return (comm1 != comm2)
  * 
  */
+  /*else*/ {
     __pyx_t_1 = (__pyx_v_eq != 0);
     if (__pyx_t_1) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_comm1 == __pyx_v_comm2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_comm1 == __pyx_v_comm2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 37, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L0;
     }
-    /*else*/ {
 
-      /* "PETSc/Comm.pyx":38
+    /* "PETSc/Comm.pyx":38
  *         else:
  *             if eq: return (comm1 == comm2)
  *             else:  return (comm1 != comm2)             # <<<<<<<<<<<<<<
  * 
  *     def __nonzero__(self):
  */
+    /*else*/ {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_comm1 != __pyx_v_comm2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_comm1 != __pyx_v_comm2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 38, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
@@ -60018,9 +62709,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_8destroy(struct PyPetscCommObje
   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("destroy", 0);
 
   /* "PETSc/Comm.pyx":46
@@ -60054,11 +62742,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_8destroy(struct PyPetscCommObje
  *         CHKERR( PetscCommDestroy(&self.comm) )
  *         self.comm = MPI_COMM_NULL
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 48, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[9]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(9, 48, __pyx_L1_error)
+
+    /* "PETSc/Comm.pyx":47
+ *     def destroy(self):
+ *         if self.comm == MPI_COMM_NULL: return
+ *         if not self.isdup:             # <<<<<<<<<<<<<<
+ *             raise ValueError("communicator not owned")
+ *         CHKERR( PetscCommDestroy(&self.comm) )
+ */
   }
 
   /* "PETSc/Comm.pyx":49
@@ -60068,7 +62764,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_8destroy(struct PyPetscCommObje
  *         self.comm = MPI_COMM_NULL
  *         self.isdup = 0
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCommDestroy((&__pyx_v_self->comm))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCommDestroy((&__pyx_v_self->comm))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(9, 49, __pyx_L1_error)
 
   /* "PETSc/Comm.pyx":50
  *             raise ValueError("communicator not owned")
@@ -60157,9 +62853,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_10duplicate(struct PyPetscCommO
   int __pyx_t_3;
   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("duplicate", 0);
 
   /* "PETSc/Comm.pyx":55
@@ -60179,11 +62872,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_10duplicate(struct PyPetscCommO
  *         cdef MPI_Comm newcomm = MPI_COMM_NULL
  *         CHKERR( PetscCommDuplicate(self.comm, &newcomm, NULL) )
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 56, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[9]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(9, 56, __pyx_L1_error)
+
+    /* "PETSc/Comm.pyx":55
+ * 
+ *     def duplicate(self):
+ *         if self.comm == MPI_COMM_NULL:             # <<<<<<<<<<<<<<
+ *             raise ValueError("null communicator")
+ *         cdef MPI_Comm newcomm = MPI_COMM_NULL
+ */
   }
 
   /* "PETSc/Comm.pyx":57
@@ -60202,7 +62903,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_10duplicate(struct PyPetscCommO
  *         cdef Comm comm = type(self)()
  *         comm.comm  = newcomm
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCommDuplicate(__pyx_v_self->comm, (&__pyx_v_newcomm), NULL)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCommDuplicate(__pyx_v_self->comm, (&__pyx_v_newcomm), NULL)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(9, 58, __pyx_L1_error)
 
   /* "PETSc/Comm.pyx":59
  *         cdef MPI_Comm newcomm = MPI_COMM_NULL
@@ -60223,14 +62924,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_10duplicate(struct PyPetscCommO
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 59, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 59, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Comm))))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Comm))))) __PYX_ERR(9, 59, __pyx_L1_error)
   __pyx_v_comm = ((struct PyPetscCommObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
@@ -60332,9 +63033,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_12getSize(struct PyPetscCommObj
   __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("getSize", 0);
 
   /* "PETSc/Comm.pyx":66
@@ -60354,11 +63052,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_12getSize(struct PyPetscCommObj
  *         cdef int size=0
  *         MPI_Comm_size(self.comm, &size)
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__48, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 67, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[9]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(9, 67, __pyx_L1_error)
+
+    /* "PETSc/Comm.pyx":66
+ * 
+ *     def getSize(self):
+ *         if self.comm == MPI_COMM_NULL:             # <<<<<<<<<<<<<<
+ *             raise ValueError("null communicator")
+ *         cdef int size=0
+ */
   }
 
   /* "PETSc/Comm.pyx":68
@@ -60387,7 +63093,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_12getSize(struct PyPetscCommObj
  *     def getRank(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 70, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -60443,9 +63149,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_14getRank(struct PyPetscCommObj
   __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("getRank", 0);
 
   /* "PETSc/Comm.pyx":73
@@ -60465,11 +63168,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_14getRank(struct PyPetscCommObj
  *         cdef int rank=0
  *         MPI_Comm_rank(self.comm, &rank)
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__48, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__49, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[9]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(9, 74, __pyx_L1_error)
+
+    /* "PETSc/Comm.pyx":73
+ * 
+ *     def getRank(self):
+ *         if self.comm == MPI_COMM_NULL:             # <<<<<<<<<<<<<<
+ *             raise ValueError("null communicator")
+ *         cdef int rank=0
+ */
   }
 
   /* "PETSc/Comm.pyx":75
@@ -60498,7 +63209,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_14getRank(struct PyPetscCommObj
  *     def barrier(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -60553,9 +63264,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_16barrier(struct PyPetscCommObj
   __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("barrier", 0);
 
   /* "PETSc/Comm.pyx":80
@@ -60575,11 +63283,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_16barrier(struct PyPetscCommObj
  *         MPI_Barrier(self.comm)
  * 
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__49, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 81, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[9]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(9, 81, __pyx_L1_error)
+
+    /* "PETSc/Comm.pyx":80
+ * 
+ *     def barrier(self):
+ *         if self.comm == MPI_COMM_NULL:             # <<<<<<<<<<<<<<
+ *             raise ValueError("null communicator")
+ *         MPI_Barrier(self.comm)
+ */
   }
 
   /* "PETSc/Comm.pyx":82
@@ -60639,9 +63355,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4size___get__(struct PyPetscCom
   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);
 
   /* "PETSc/Comm.pyx":88
@@ -60652,7 +63365,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4size___get__(struct PyPetscCom
  *     property rank:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -60665,10 +63378,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4size___get__(struct PyPetscCom
     }
   }
   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[9]; __pyx_lineno = 88; __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(9, 88, __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[9]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 88, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -60724,9 +63437,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4rank___get__(struct PyPetscCom
   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);
 
   /* "PETSc/Comm.pyx":92
@@ -60737,7 +63447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4rank___get__(struct PyPetscCom
  *     # --- Fortran support ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRank); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRank); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 92, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -60750,10 +63460,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4rank___get__(struct PyPetscCom
     }
   }
   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[9]; __pyx_lineno = 92; __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(9, 92, __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[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 92, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -60809,9 +63519,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_7fortran___get__(struct PyPetsc
   __Pyx_RefNannyDeclarations
   MPI_Comm __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
   /* "PETSc/Comm.pyx":98
@@ -60832,7 +63539,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_7fortran___get__(struct PyPetsc
  *     # --- mpi4py support ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_MPI_Fint(MPI_Comm_c2f(__pyx_v_comm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_MPI_Fint(MPI_Comm_c2f(__pyx_v_comm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 99, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -60888,9 +63595,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_18tompi4py(struct PyPetscCommOb
   __Pyx_RefNannyDeclarations
   MPI_Comm __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("tompi4py", 0);
 
   /* "PETSc/Comm.pyx":104
@@ -60911,7 +63615,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_18tompi4py(struct PyPetscCommOb
  *     # --- mpi4py compatibility API ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_New(__pyx_v_comm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_New(__pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 105, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -60948,9 +63652,6 @@ static MPI_Comm __pyx_f_8petsc4py_5PETSc_GetComm(PyObject *__pyx_v_comm, MPI_Com
   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("GetComm", 0);
 
   /* "PETSc/Comm.pyx":131
@@ -60960,7 +63661,7 @@ static MPI_Comm __pyx_f_8petsc4py_5PETSc_GetComm(PyObject *__pyx_v_comm, MPI_Com
  * 
  * cdef MPI_Comm GetCommDefault():
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_defv); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_defv); if (unlikely(PyErr_Occurred())) __PYX_ERR(9, 131, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
@@ -61101,9 +63802,6 @@ static void __pyx_pw_8petsc4py_5PETSc_6Object_3__dealloc__(PyObject *__pyx_v_sel
 static void __pyx_pf_8petsc4py_5PETSc_6Object_2__dealloc__(struct PyPetscObjectObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
   /* "PETSc/Object.pyx":12
@@ -61113,7 +63811,7 @@ static void __pyx_pf_8petsc4py_5PETSc_6Object_2__dealloc__(struct PyPetscObjectO
  *         self.obj = NULL
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscDEALLOC((&(__pyx_v_self->obj[0])))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscDEALLOC((&(__pyx_v_self->obj[0])))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 12, __pyx_L1_error)
 
   /* "PETSc/Object.pyx":13
  *     def __dealloc__(self):
@@ -61169,9 +63867,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_
   int __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("__richcmp__", 0);
 
   /* "PETSc/Object.pyx":16
@@ -61181,7 +63876,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_
  *         if not isinstance(other, Object): return NotImplemented
  *         cdef Object s = self, o = other
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Object); 
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
@@ -61197,7 +63892,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_
  *         cdef Object s = self, o = other
  *         if   op == 2: return (s.obj[0] == o.obj[0])
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Object); 
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
@@ -61213,36 +63908,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_
  *         if   op == 2: return (s.obj[0] == o.obj[0])
  *         elif op == 3: return (s.obj[0] != o.obj[0])
  */
-  if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Object))))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(10, 18, __pyx_L1_error)
   __pyx_t_3 = __pyx_v_self;
   __Pyx_INCREF(__pyx_t_3);
   __pyx_v_s = ((struct PyPetscObjectObject *)__pyx_t_3);
   __pyx_t_3 = 0;
-  if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Object))))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(10, 18, __pyx_L1_error)
   __pyx_t_3 = __pyx_v_other;
   __Pyx_INCREF(__pyx_t_3);
   __pyx_v_o = ((struct PyPetscObjectObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/Object.pyx":20
- *         cdef Object s = self, o = other
- *         if   op == 2: return (s.obj[0] == o.obj[0])
- *         elif op == 3: return (s.obj[0] != o.obj[0])             # <<<<<<<<<<<<<<
- *         else: raise TypeError("only '==' and '!='")
- * 
- */
-  switch (__pyx_v_op) {
-
-    /* "PETSc/Object.pyx":19
+  /* "PETSc/Object.pyx":19
  *         if not isinstance(other, Object): return NotImplemented
  *         cdef Object s = self, o = other
  *         if   op == 2: return (s.obj[0] == o.obj[0])             # <<<<<<<<<<<<<<
  *         elif op == 3: return (s.obj[0] != o.obj[0])
  *         else: raise TypeError("only '==' and '!='")
  */
+  switch (__pyx_v_op) {
     case 2:
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyBool_FromLong(((__pyx_v_s->obj[0]) == (__pyx_v_o->obj[0]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyBool_FromLong(((__pyx_v_s->obj[0]) == (__pyx_v_o->obj[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 19, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -61258,7 +63945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_
  */
     case 3:
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyBool_FromLong(((__pyx_v_s->obj[0]) != (__pyx_v_o->obj[0]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyBool_FromLong(((__pyx_v_s->obj[0]) != (__pyx_v_o->obj[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 20, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -61273,11 +63960,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_
  * 
  *     def __nonzero__(self):
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__51, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 21, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[10]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(10, 21, __pyx_L1_error)
     break;
   }
 
@@ -61387,9 +64074,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjec
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__copy__", 0);
 
   /* "PETSc/Object.pyx":27
@@ -61411,14 +64095,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjec
     }
   }
   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[10]; __pyx_lineno = 27; __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(10, 27, __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[10]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 27, __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_8petsc4py_5PETSc_Object))))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(10, 27, __pyx_L1_error)
   __pyx_v_obj = ((struct PyPetscObjectObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
@@ -61448,10 +64132,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjec
  *         obj.obj[0] = o
  *         return obj
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(__pyx_v_o)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(__pyx_v_o)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(10, 30, __pyx_L1_error)
+
+    /* "PETSc/Object.pyx":29
+ *         cdef Object obj = type(self)()
+ *         cdef PetscObject o = self.obj[0]
+ *         if o != NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectReference(o) )
+ *         obj.obj[0] = o
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/Object.pyx":31
  *         if o != NULL:
@@ -61508,10 +64198,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjec
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_11__deepcopy__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static char __pyx_doc_8petsc4py_5PETSc_6Object_10__deepcopy__[] = "Object.__deepcopy__(self, dict memo)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_11__deepcopy__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED PyObject *__pyx_v_memo = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  PyObject *__pyx_v_memo = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__deepcopy__ (wrapper)", 0);
@@ -61533,7 +64220,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_11__deepcopy__(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, "__deepcopy__") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__deepcopy__") < 0)) __PYX_ERR(10, 34, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -61544,13 +64231,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_11__deepcopy__(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__deepcopy__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__deepcopy__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 34, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.__deepcopy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_memo), (&PyDict_Type), 0, "memo", 1))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_memo), (&PyDict_Type), 0, "memo", 1))) __PYX_ERR(10, 34, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_memo);
 
   /* function exit code */
@@ -61562,7 +64249,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_11__deepcopy__(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetscObjectObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_memo) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_memo) {
   PyObject *__pyx_v_obj_copy = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -61573,9 +64260,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
   int __pyx_t_5;
   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("__deepcopy__", 0);
 
   /* "PETSc/Object.pyx":35
@@ -61596,6 +64280,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
  *         except AttributeError:
  */
   {
+    __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);
@@ -61609,16 +64295,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
  *         except AttributeError:
  *             raise NotImplementedError
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 37, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_obj_copy, __pyx_t_4);
       __pyx_t_4 = 0;
+
+      /* "PETSc/Object.pyx":36
+ *     def __deepcopy__(self, dict memo not None):
+ *         cdef object obj_copy = None
+ *         try:             # <<<<<<<<<<<<<<
+ *             obj_copy = self.copy
+ *         except AttributeError:
+ */
     }
     __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_4); __pyx_t_4 = 0;
 
     /* "PETSc/Object.pyx":38
@@ -61626,12 +64321,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
  *             obj_copy = self.copy
  *         except AttributeError:             # <<<<<<<<<<<<<<
  *             raise NotImplementedError
- *         return obj_copy()
+ *         <void>memo # unused
  */
-    __pyx_t_5 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
+    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
     if (__pyx_t_5) {
       __Pyx_AddTraceback("petsc4py.PETSc.Object.__deepcopy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(10, 38, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_7);
@@ -61640,14 +64335,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
  *             obj_copy = self.copy
  *         except AttributeError:
  *             raise NotImplementedError             # <<<<<<<<<<<<<<
+ *         <void>memo # unused
  *         return obj_copy()
- * 
  */
       __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-      {__pyx_filename = __pyx_f[10]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      __PYX_ERR(10, 39, __pyx_L5_except_error)
     }
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
+
+    /* "PETSc/Object.pyx":36
+ *     def __deepcopy__(self, dict memo not None):
+ *         cdef object obj_copy = None
+ *         try:             # <<<<<<<<<<<<<<
+ *             obj_copy = self.copy
+ *         except AttributeError:
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_1);
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
@@ -61659,6 +64363,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
   /* "PETSc/Object.pyx":40
  *         except AttributeError:
  *             raise NotImplementedError
+ *         <void>memo # unused             # <<<<<<<<<<<<<<
+ *         return obj_copy()
+ * 
+ */
+  ((void)__pyx_v_memo);
+
+  /* "PETSc/Object.pyx":41
+ *             raise NotImplementedError
+ *         <void>memo # unused
  *         return obj_copy()             # <<<<<<<<<<<<<<
  * 
  *     # --- attribute management ---
@@ -61676,10 +64389,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 41, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 41, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -61709,7 +64422,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":44
+/* "PETSc/Object.pyx":45
  *     # --- attribute management ---
  * 
  *     cdef object get_attr(self, char name[]):             # <<<<<<<<<<<<<<
@@ -61721,12 +64434,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_get_attr(struct PyPetscObjectO
   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("get_attr", 0);
 
-  /* "PETSc/Object.pyx":45
+  /* "PETSc/Object.pyx":46
  * 
  *     cdef object get_attr(self, char name[]):
  *         return PetscGetPyObj(self.obj[0], name)             # <<<<<<<<<<<<<<
@@ -61734,13 +64444,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_get_attr(struct PyPetscObjectO
  *     cdef object set_attr(self, char name[], object attr):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscGetPyObj((__pyx_v_self->obj[0]), __pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscGetPyObj((__pyx_v_self->obj[0]), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":44
+  /* "PETSc/Object.pyx":45
  *     # --- attribute management ---
  * 
  *     cdef object get_attr(self, char name[]):             # <<<<<<<<<<<<<<
@@ -61759,7 +64469,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_get_attr(struct PyPetscObjectO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":47
+/* "PETSc/Object.pyx":48
  *         return PetscGetPyObj(self.obj[0], name)
  * 
  *     cdef object set_attr(self, char name[], object attr):             # <<<<<<<<<<<<<<
@@ -61771,12 +64481,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_set_attr(struct PyPetscObjectO
   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("set_attr", 0);
 
-  /* "PETSc/Object.pyx":48
+  /* "PETSc/Object.pyx":49
  * 
  *     cdef object set_attr(self, char name[], object attr):
  *         return PetscSetPyObj(self.obj[0], name, attr)             # <<<<<<<<<<<<<<
@@ -61784,13 +64491,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_set_attr(struct PyPetscObjectO
  *     cdef object get_dict(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscSetPyObj((__pyx_v_self->obj[0]), __pyx_v_name, __pyx_v_attr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscSetPyObj((__pyx_v_self->obj[0]), __pyx_v_name, __pyx_v_attr); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":47
+  /* "PETSc/Object.pyx":48
  *         return PetscGetPyObj(self.obj[0], name)
  * 
  *     cdef object set_attr(self, char name[], object attr):             # <<<<<<<<<<<<<<
@@ -61809,7 +64516,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_set_attr(struct PyPetscObjectO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":50
+/* "PETSc/Object.pyx":51
  *         return PetscSetPyObj(self.obj[0], name, attr)
  * 
  *     cdef object get_dict(self):             # <<<<<<<<<<<<<<
@@ -61821,12 +64528,9 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_get_dict(struct PyPetscObjectO
   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("get_dict", 0);
 
-  /* "PETSc/Object.pyx":51
+  /* "PETSc/Object.pyx":52
  * 
  *     cdef object get_dict(self):
  *         return PetscGetPyDict(self.obj[0], True)             # <<<<<<<<<<<<<<
@@ -61834,13 +64538,13 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_get_dict(struct PyPetscObjectO
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict((__pyx_v_self->obj[0]), 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict((__pyx_v_self->obj[0]), 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":50
+  /* "PETSc/Object.pyx":51
  *         return PetscSetPyObj(self.obj[0], name, attr)
  * 
  *     cdef object get_dict(self):             # <<<<<<<<<<<<<<
@@ -61859,7 +64563,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_get_dict(struct PyPetscObjectO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":55
+/* "PETSc/Object.pyx":56
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -61872,9 +64576,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_13view(PyObject *__pyx_v_self
 static char __pyx_doc_8petsc4py_5PETSc_6Object_12view[] = "Object.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_13view(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);
@@ -61899,7 +64600,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_13view(PyObject *__pyx_v_self
         }
       }
       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 = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(10, 56, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -61912,13 +64613,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_13view(PyObject *__pyx_v_self
   }
   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 = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 56, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.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 = 55; __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(10, 56, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_12view(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -61938,12 +64639,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_12view(struct PyPetscObjectOb
   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);
 
-  /* "PETSc/Object.pyx":56
+  /* "PETSc/Object.pyx":57
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -61952,7 +64650,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_12view(struct PyPetscObjectOb
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/Object.pyx":57
+  /* "PETSc/Object.pyx":58
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -61964,20 +64662,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_12view(struct PyPetscObjectOb
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Object.pyx":58
+  /* "PETSc/Object.pyx":59
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( PetscObjectView(self.obj[0], vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectView((__pyx_v_self->obj[0]), __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectView((__pyx_v_self->obj[0]), __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(10, 59, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":55
+  /* "PETSc/Object.pyx":56
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -61997,7 +64693,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_12view(struct PyPetscObjectOb
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":60
+/* "PETSc/Object.pyx":61
  *         CHKERR( PetscObjectView(self.obj[0], vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -62026,21 +64722,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_14destroy(struct PyPetscObjec
   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);
 
-  /* "PETSc/Object.pyx":61
+  /* "PETSc/Object.pyx":62
  * 
  *     def destroy(self):
  *         CHKERR( PetscObjectDestroy(&self.obj[0]) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectDestroy((&(__pyx_v_self->obj[0])))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectDestroy((&(__pyx_v_self->obj[0])))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 62, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":62
+  /* "PETSc/Object.pyx":63
  *     def destroy(self):
  *         CHKERR( PetscObjectDestroy(&self.obj[0]) )
  *         return self             # <<<<<<<<<<<<<<
@@ -62052,7 +64745,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_14destroy(struct PyPetscObjec
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":60
+  /* "PETSc/Object.pyx":61
  *         CHKERR( PetscObjectView(self.obj[0], vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -62070,7 +64763,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_14destroy(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":64
+/* "PETSc/Object.pyx":65
  *         return self
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -62101,12 +64794,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_16getType(struct PyPetscObjec
   __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);
 
-  /* "PETSc/Object.pyx":65
+  /* "PETSc/Object.pyx":66
  * 
  *     def getType(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -62115,16 +64805,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_16getType(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":66
+  /* "PETSc/Object.pyx":67
  *     def getType(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetType(self.obj[0], &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetType((__pyx_v_self->obj[0]), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetType((__pyx_v_self->obj[0]), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 67, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":67
+  /* "PETSc/Object.pyx":68
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetType(self.obj[0], &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -62132,13 +64822,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_16getType(struct PyPetscObjec
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":64
+  /* "PETSc/Object.pyx":65
  *         return self
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -62157,7 +64847,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_16getType(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":71
+/* "PETSc/Object.pyx":72
  *     #
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -62170,9 +64860,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_19setOptionsPrefix(PyObject *
 static char __pyx_doc_8petsc4py_5PETSc_6Object_18setOptionsPrefix[] = "Object.setOptionsPrefix(self, prefix)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_19setOptionsPrefix(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);
@@ -62194,7 +64881,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_19setOptionsPrefix(PyObject *
         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 = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(10, 72, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -62205,7 +64892,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_19setOptionsPrefix(PyObject *
   }
   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 = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 72, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -62224,13 +64911,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_18setOptionsPrefix(struct PyP
   __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);
 
-  /* "PETSc/Object.pyx":72
+  /* "PETSc/Object.pyx":73
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -62239,28 +64923,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_18setOptionsPrefix(struct PyP
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":73
+  /* "PETSc/Object.pyx":74
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscObjectSetOptionsPrefix(self.obj[0], cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":74
+  /* "PETSc/Object.pyx":75
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
  *         CHKERR( PetscObjectSetOptionsPrefix(self.obj[0], cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetOptionsPrefix((__pyx_v_self->obj[0]), __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetOptionsPrefix((__pyx_v_self->obj[0]), __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 75, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":71
+  /* "PETSc/Object.pyx":72
  *     #
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -62282,7 +64966,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_18setOptionsPrefix(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":76
+/* "PETSc/Object.pyx":77
  *         CHKERR( PetscObjectSetOptionsPrefix(self.obj[0], cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -62313,12 +64997,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_20getOptionsPrefix(struct PyP
   __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);
 
-  /* "PETSc/Object.pyx":77
+  /* "PETSc/Object.pyx":78
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -62327,16 +65008,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_20getOptionsPrefix(struct PyP
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":78
+  /* "PETSc/Object.pyx":79
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetOptionsPrefix(self.obj[0], &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetOptionsPrefix((__pyx_v_self->obj[0]), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetOptionsPrefix((__pyx_v_self->obj[0]), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 79, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":79
+  /* "PETSc/Object.pyx":80
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetOptionsPrefix(self.obj[0], &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -62344,13 +65025,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_20getOptionsPrefix(struct PyP
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 80, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":76
+  /* "PETSc/Object.pyx":77
  *         CHKERR( PetscObjectSetOptionsPrefix(self.obj[0], cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -62369,7 +65050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_20getOptionsPrefix(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":81
+/* "PETSc/Object.pyx":82
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -62398,21 +65079,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_22setFromOptions(struct PyPet
   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);
 
-  /* "PETSc/Object.pyx":82
+  /* "PETSc/Object.pyx":83
  * 
  *     def setFromOptions(self):
  *         CHKERR( PetscObjectSetFromOptions(self.obj[0]) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetFromOptions((__pyx_v_self->obj[0]))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetFromOptions((__pyx_v_self->obj[0]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 83, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":81
+  /* "PETSc/Object.pyx":82
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -62432,7 +65110,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_22setFromOptions(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":86
+/* "PETSc/Object.pyx":87
  *     #
  * 
  *     def getComm(self):             # <<<<<<<<<<<<<<
@@ -62463,33 +65141,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjec
   __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("getComm", 0);
 
-  /* "PETSc/Object.pyx":87
+  /* "PETSc/Object.pyx":88
  * 
  *     def getComm(self):
  *         cdef Comm comm = Comm()             # <<<<<<<<<<<<<<
  *         CHKERR( PetscObjectGetComm(self.obj[0], &comm.comm) )
  *         return comm
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_comm = ((struct PyPetscCommObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":88
+  /* "PETSc/Object.pyx":89
  *     def getComm(self):
  *         cdef Comm comm = Comm()
  *         CHKERR( PetscObjectGetComm(self.obj[0], &comm.comm) )             # <<<<<<<<<<<<<<
  *         return comm
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm((__pyx_v_self->obj[0]), (&__pyx_v_comm->comm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm((__pyx_v_self->obj[0]), (&__pyx_v_comm->comm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 89, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":89
+  /* "PETSc/Object.pyx":90
  *         cdef Comm comm = Comm()
  *         CHKERR( PetscObjectGetComm(self.obj[0], &comm.comm) )
  *         return comm             # <<<<<<<<<<<<<<
@@ -62501,7 +65176,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjec
   __pyx_r = ((PyObject *)__pyx_v_comm);
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":86
+  /* "PETSc/Object.pyx":87
  *     #
  * 
  *     def getComm(self):             # <<<<<<<<<<<<<<
@@ -62521,7 +65196,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":91
+/* "PETSc/Object.pyx":92
  *         return comm
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -62552,12 +65227,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjec
   __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("getName", 0);
 
-  /* "PETSc/Object.pyx":92
+  /* "PETSc/Object.pyx":93
  * 
  *     def getName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -62566,16 +65238,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":93
+  /* "PETSc/Object.pyx":94
  *     def getName(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetName(self.obj[0], &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetName((__pyx_v_self->obj[0]), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetName((__pyx_v_self->obj[0]), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 94, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":94
+  /* "PETSc/Object.pyx":95
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetName(self.obj[0], &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -62583,13 +65255,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjec
  *     def setName(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 95, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":91
+  /* "PETSc/Object.pyx":92
  *         return comm
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -62608,7 +65280,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":96
+/* "PETSc/Object.pyx":97
  *         return bytes2str(cval)
  * 
  *     def setName(self, name):             # <<<<<<<<<<<<<<
@@ -62621,9 +65293,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_29setName(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_6Object_28setName[] = "Object.setName(self, name)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_29setName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setName (wrapper)", 0);
@@ -62645,7 +65314,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_29setName(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setName") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setName") < 0)) __PYX_ERR(10, 97, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -62656,7 +65325,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_29setName(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 97, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.setName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -62675,13 +65344,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjec
   __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("setName", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":97
+  /* "PETSc/Object.pyx":98
  * 
  *     def setName(self, name):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -62690,28 +65356,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":98
+  /* "PETSc/Object.pyx":99
  *     def setName(self, name):
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscObjectSetName(self.obj[0], cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 99, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":99
+  /* "PETSc/Object.pyx":100
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)
  *         CHKERR( PetscObjectSetName(self.obj[0], cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getClassId(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetName((__pyx_v_self->obj[0]), __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetName((__pyx_v_self->obj[0]), __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 100, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":96
+  /* "PETSc/Object.pyx":97
  *         return bytes2str(cval)
  * 
  *     def setName(self, name):             # <<<<<<<<<<<<<<
@@ -62733,7 +65399,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":101
+/* "PETSc/Object.pyx":102
  *         CHKERR( PetscObjectSetName(self.obj[0], cval) )
  * 
  *     def getClassId(self):             # <<<<<<<<<<<<<<
@@ -62764,12 +65430,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscOb
   __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("getClassId", 0);
 
-  /* "PETSc/Object.pyx":102
+  /* "PETSc/Object.pyx":103
  * 
  *     def getClassId(self):
  *         cdef PetscClassId classid = 0             # <<<<<<<<<<<<<<
@@ -62778,16 +65441,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscOb
  */
   __pyx_v_classid = 0;
 
-  /* "PETSc/Object.pyx":103
+  /* "PETSc/Object.pyx":104
  *     def getClassId(self):
  *         cdef PetscClassId classid = 0
  *         CHKERR( PetscObjectGetClassId(self.obj[0], &classid) )             # <<<<<<<<<<<<<<
  *         return <long>classid
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetClassId((__pyx_v_self->obj[0]), (&__pyx_v_classid))); 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_8petsc4py_5PETSc_CHKERR(PetscObjectGetClassId((__pyx_v_self->obj[0]), (&__pyx_v_classid))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 104, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":104
+  /* "PETSc/Object.pyx":105
  *         cdef PetscClassId classid = 0
  *         CHKERR( PetscObjectGetClassId(self.obj[0], &classid) )
  *         return <long>classid             # <<<<<<<<<<<<<<
@@ -62795,13 +65458,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscOb
  *     def getClassName(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 105, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":101
+  /* "PETSc/Object.pyx":102
  *         CHKERR( PetscObjectSetName(self.obj[0], cval) )
  * 
  *     def getClassId(self):             # <<<<<<<<<<<<<<
@@ -62820,7 +65483,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscOb
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":106
+/* "PETSc/Object.pyx":107
  *         return <long>classid
  * 
  *     def getClassName(self):             # <<<<<<<<<<<<<<
@@ -62851,12 +65514,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetsc
   __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("getClassName", 0);
 
-  /* "PETSc/Object.pyx":107
+  /* "PETSc/Object.pyx":108
  * 
  *     def getClassName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -62865,16 +65525,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":108
+  /* "PETSc/Object.pyx":109
  *     def getClassName(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetClassName(self.obj[0], &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetClassName((__pyx_v_self->obj[0]), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetClassName((__pyx_v_self->obj[0]), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 109, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":109
+  /* "PETSc/Object.pyx":110
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetClassName(self.obj[0], &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -62882,13 +65542,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetsc
  *     def getRefCount(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":106
+  /* "PETSc/Object.pyx":107
  *         return <long>classid
  * 
  *     def getClassName(self):             # <<<<<<<<<<<<<<
@@ -62907,7 +65567,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":111
+/* "PETSc/Object.pyx":112
  *         return bytes2str(cval)
  * 
  *     def getRefCount(self):             # <<<<<<<<<<<<<<
@@ -62939,12 +65599,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
   int __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("getRefCount", 0);
 
-  /* "PETSc/Object.pyx":112
+  /* "PETSc/Object.pyx":113
  * 
  *     def getRefCount(self):
  *         if self.obj[0] == NULL: return 0             # <<<<<<<<<<<<<<
@@ -62959,7 +65616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
     goto __pyx_L0;
   }
 
-  /* "PETSc/Object.pyx":113
+  /* "PETSc/Object.pyx":114
  *     def getRefCount(self):
  *         if self.obj[0] == NULL: return 0
  *         cdef PetscInt refcnt = 0             # <<<<<<<<<<<<<<
@@ -62968,16 +65625,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
  */
   __pyx_v_refcnt = 0;
 
-  /* "PETSc/Object.pyx":114
+  /* "PETSc/Object.pyx":115
  *         if self.obj[0] == NULL: return 0
  *         cdef PetscInt refcnt = 0
  *         CHKERR( PetscObjectGetReference(self.obj[0], &refcnt) )             # <<<<<<<<<<<<<<
  *         return toInt(refcnt)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetReference((__pyx_v_self->obj[0]), (&__pyx_v_refcnt))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetReference((__pyx_v_self->obj[0]), (&__pyx_v_refcnt))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 115, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":115
+  /* "PETSc/Object.pyx":116
  *         cdef PetscInt refcnt = 0
  *         CHKERR( PetscObjectGetReference(self.obj[0], &refcnt) )
  *         return toInt(refcnt)             # <<<<<<<<<<<<<<
@@ -62985,13 +65642,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
  *     # --- general support ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_refcnt); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_refcnt); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":111
+  /* "PETSc/Object.pyx":112
  *         return bytes2str(cval)
  * 
  *     def getRefCount(self):             # <<<<<<<<<<<<<<
@@ -63010,7 +65667,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":119
+/* "PETSc/Object.pyx":120
  *     # --- general support ---
  * 
  *     def compose(self, name, Object obj):             # <<<<<<<<<<<<<<
@@ -63024,9 +65681,6 @@ static char __pyx_doc_8petsc4py_5PETSc_6Object_36compose[] = "Object.compose(sel
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37compose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   struct PyPetscObjectObject *__pyx_v_obj = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("compose (wrapper)", 0);
@@ -63050,11 +65704,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37compose(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("compose", 1, 2, 2, 1); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("compose", 1, 2, 2, 1); __PYX_ERR(10, 120, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compose") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compose") < 0)) __PYX_ERR(10, 120, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -63067,13 +65721,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37compose(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("compose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("compose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 120, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.compose", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "obj", 0))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "obj", 0))) __PYX_ERR(10, 120, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_36compose(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name, __pyx_v_obj);
 
   /* function exit code */
@@ -63094,13 +65748,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
   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("compose", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":120
+  /* "PETSc/Object.pyx":121
  * 
  *     def compose(self, name, Object obj):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -63109,7 +65760,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":121
+  /* "PETSc/Object.pyx":122
  *     def compose(self, name, Object obj):
  *         cdef const_char *cval = NULL
  *         cdef PetscObject cobj = NULL             # <<<<<<<<<<<<<<
@@ -63118,19 +65769,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
  */
   __pyx_v_cobj = NULL;
 
-  /* "PETSc/Object.pyx":122
+  /* "PETSc/Object.pyx":123
  *         cdef const_char *cval = NULL
  *         cdef PetscObject cobj = NULL
  *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
  *         if obj is not None: cobj = obj.obj[0]
  *         CHKERR( PetscObjectCompose(self.obj[0], cval, cobj) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 123, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":123
+  /* "PETSc/Object.pyx":124
  *         cdef PetscObject cobj = NULL
  *         name = str2bytes(name, &cval)
  *         if obj is not None: cobj = obj.obj[0]             # <<<<<<<<<<<<<<
@@ -63141,20 +65792,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
     __pyx_v_cobj = (__pyx_v_obj->obj[0]);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Object.pyx":124
+  /* "PETSc/Object.pyx":125
  *         name = str2bytes(name, &cval)
  *         if obj is not None: cobj = obj.obj[0]
  *         CHKERR( PetscObjectCompose(self.obj[0], cval, cobj) )             # <<<<<<<<<<<<<<
  * 
  *     def query(self, name):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectCompose((__pyx_v_self->obj[0]), __pyx_v_cval, __pyx_v_cobj)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectCompose((__pyx_v_self->obj[0]), __pyx_v_cval, __pyx_v_cobj)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(10, 125, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":119
+  /* "PETSc/Object.pyx":120
  *     # --- general support ---
  * 
  *     def compose(self, name, Object obj):             # <<<<<<<<<<<<<<
@@ -63176,7 +65825,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":126
+/* "PETSc/Object.pyx":127
  *         CHKERR( PetscObjectCompose(self.obj[0], cval, cobj) )
  * 
  *     def query(self, name):             # <<<<<<<<<<<<<<
@@ -63189,9 +65838,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_39query(PyObject *__pyx_v_sel
 static char __pyx_doc_8petsc4py_5PETSc_6Object_38query[] = "Object.query(self, name)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_39query(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("query (wrapper)", 0);
@@ -63213,7 +65859,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_39query(PyObject *__pyx_v_sel
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "query") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "query") < 0)) __PYX_ERR(10, 127, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -63224,7 +65870,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_39query(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("query", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("query", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 127, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -63247,13 +65893,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
   int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("query", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":127
+  /* "PETSc/Object.pyx":128
  * 
  *     def query(self, name):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -63262,7 +65905,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":128
+  /* "PETSc/Object.pyx":129
  *     def query(self, name):
  *         cdef const_char *cval = NULL
  *         cdef PetscObject cobj = NULL             # <<<<<<<<<<<<<<
@@ -63271,28 +65914,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
   __pyx_v_cobj = NULL;
 
-  /* "PETSc/Object.pyx":129
+  /* "PETSc/Object.pyx":130
  *         cdef const_char *cval = NULL
  *         cdef PetscObject cobj = NULL
  *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscObjectQuery(self.obj[0], cval, &cobj) )
  *         if cobj == NULL: return None
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__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_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":130
+  /* "PETSc/Object.pyx":131
  *         cdef PetscObject cobj = NULL
  *         name = str2bytes(name, &cval)
  *         CHKERR( PetscObjectQuery(self.obj[0], cval, &cobj) )             # <<<<<<<<<<<<<<
  *         if cobj == NULL: return None
  *         cdef Object obj = subtype_Object(cobj)()
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectQuery((__pyx_v_self->obj[0]), __pyx_v_cval, (&__pyx_v_cobj))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectQuery((__pyx_v_self->obj[0]), __pyx_v_cval, (&__pyx_v_cobj))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 131, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":131
+  /* "PETSc/Object.pyx":132
  *         name = str2bytes(name, &cval)
  *         CHKERR( PetscObjectQuery(self.obj[0], cval, &cobj) )
  *         if cobj == NULL: return None             # <<<<<<<<<<<<<<
@@ -63307,23 +65950,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
     goto __pyx_L0;
   }
 
-  /* "PETSc/Object.pyx":132
+  /* "PETSc/Object.pyx":133
  *         CHKERR( PetscObjectQuery(self.obj[0], cval, &cobj) )
  *         if cobj == NULL: return None
  *         cdef Object obj = subtype_Object(cobj)()             # <<<<<<<<<<<<<<
  *         obj.obj[0] = cobj
  *         PetscINCREF(obj.obj)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_Object(__pyx_v_cobj)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_Object(__pyx_v_cobj)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_Object))))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(10, 133, __pyx_L1_error)
   __pyx_v_obj = ((struct PyPetscObjectObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/Object.pyx":133
+  /* "PETSc/Object.pyx":134
  *         if cobj == NULL: return None
  *         cdef Object obj = subtype_Object(cobj)()
  *         obj.obj[0] = cobj             # <<<<<<<<<<<<<<
@@ -63332,7 +65975,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
   (__pyx_v_obj->obj[0]) = __pyx_v_cobj;
 
-  /* "PETSc/Object.pyx":134
+  /* "PETSc/Object.pyx":135
  *         cdef Object obj = subtype_Object(cobj)()
  *         obj.obj[0] = cobj
  *         PetscINCREF(obj.obj)             # <<<<<<<<<<<<<<
@@ -63341,7 +65984,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_obj->obj);
 
-  /* "PETSc/Object.pyx":135
+  /* "PETSc/Object.pyx":136
  *         obj.obj[0] = cobj
  *         PetscINCREF(obj.obj)
  *         return obj             # <<<<<<<<<<<<<<
@@ -63353,7 +65996,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
   __pyx_r = ((PyObject *)__pyx_v_obj);
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":126
+  /* "PETSc/Object.pyx":127
  *         CHKERR( PetscObjectCompose(self.obj[0], cval, cobj) )
  * 
  *     def query(self, name):             # <<<<<<<<<<<<<<
@@ -63375,7 +66018,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":137
+/* "PETSc/Object.pyx":138
  *         return obj
  * 
  *     def incRef(self):             # <<<<<<<<<<<<<<
@@ -63408,12 +66051,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
   int __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("incRef", 0);
 
-  /* "PETSc/Object.pyx":138
+  /* "PETSc/Object.pyx":139
  * 
  *     def incRef(self):
  *         cdef PetscObject obj = self.obj[0]             # <<<<<<<<<<<<<<
@@ -63422,7 +66062,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
  */
   __pyx_v_obj = (__pyx_v_self->obj[0]);
 
-  /* "PETSc/Object.pyx":139
+  /* "PETSc/Object.pyx":140
  *     def incRef(self):
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0             # <<<<<<<<<<<<<<
@@ -63431,7 +66071,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
  */
   __pyx_v_refct = 0;
 
-  /* "PETSc/Object.pyx":140
+  /* "PETSc/Object.pyx":141
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0
  *         if obj != NULL:             # <<<<<<<<<<<<<<
@@ -63441,28 +66081,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
   __pyx_t_1 = ((__pyx_v_obj != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Object.pyx":141
+    /* "PETSc/Object.pyx":142
  *         cdef PetscInt refct = 0
  *         if obj != NULL:
  *             CHKERR( PetscObjectReference(obj) )             # <<<<<<<<<<<<<<
  *             CHKERR( PetscObjectGetReference(obj, &refct) )
  *         return (<long>refct)
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(__pyx_v_obj)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(__pyx_v_obj)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 142, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":142
+    /* "PETSc/Object.pyx":143
  *         if obj != NULL:
  *             CHKERR( PetscObjectReference(obj) )
  *             CHKERR( PetscObjectGetReference(obj, &refct) )             # <<<<<<<<<<<<<<
  *         return (<long>refct)
  * 
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetReference(__pyx_v_obj, (&__pyx_v_refct))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetReference(__pyx_v_obj, (&__pyx_v_refct))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 143, __pyx_L1_error)
+
+    /* "PETSc/Object.pyx":141
+ *         cdef PetscObject obj = self.obj[0]
+ *         cdef PetscInt refct = 0
+ *         if obj != NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectReference(obj) )
+ *             CHKERR( PetscObjectGetReference(obj, &refct) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Object.pyx":143
+  /* "PETSc/Object.pyx":144
  *             CHKERR( PetscObjectReference(obj) )
  *             CHKERR( PetscObjectGetReference(obj, &refct) )
  *         return (<long>refct)             # <<<<<<<<<<<<<<
@@ -63470,13 +66116,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
  *     def decRef(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_refct)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_refct)); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":137
+  /* "PETSc/Object.pyx":138
  *         return obj
  * 
  *     def incRef(self):             # <<<<<<<<<<<<<<
@@ -63495,7 +66141,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":145
+/* "PETSc/Object.pyx":146
  *         return (<long>refct)
  * 
  *     def decRef(self):             # <<<<<<<<<<<<<<
@@ -63528,12 +66174,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
   int __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("decRef", 0);
 
-  /* "PETSc/Object.pyx":146
+  /* "PETSc/Object.pyx":147
  * 
  *     def decRef(self):
  *         cdef PetscObject obj = self.obj[0]             # <<<<<<<<<<<<<<
@@ -63542,7 +66185,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  */
   __pyx_v_obj = (__pyx_v_self->obj[0]);
 
-  /* "PETSc/Object.pyx":147
+  /* "PETSc/Object.pyx":148
  *     def decRef(self):
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0             # <<<<<<<<<<<<<<
@@ -63551,7 +66194,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  */
   __pyx_v_refct = 0;
 
-  /* "PETSc/Object.pyx":148
+  /* "PETSc/Object.pyx":149
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0
  *         if obj != NULL:             # <<<<<<<<<<<<<<
@@ -63561,25 +66204,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
   __pyx_t_1 = ((__pyx_v_obj != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Object.pyx":149
+    /* "PETSc/Object.pyx":150
  *         cdef PetscInt refct = 0
  *         if obj != NULL:
  *             CHKERR( PetscObjectGetReference(obj, &refct) )             # <<<<<<<<<<<<<<
  *             CHKERR( PetscObjectDereference(obj) )
  *             if refct == 1: self.obj[0] = NULL
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetReference(__pyx_v_obj, (&__pyx_v_refct))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetReference(__pyx_v_obj, (&__pyx_v_refct))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 150, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":150
+    /* "PETSc/Object.pyx":151
  *         if obj != NULL:
  *             CHKERR( PetscObjectGetReference(obj, &refct) )
  *             CHKERR( PetscObjectDereference(obj) )             # <<<<<<<<<<<<<<
  *             if refct == 1: self.obj[0] = NULL
  *             refct -= 1
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectDereference(__pyx_v_obj)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectDereference(__pyx_v_obj)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 151, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":151
+    /* "PETSc/Object.pyx":152
  *             CHKERR( PetscObjectGetReference(obj, &refct) )
  *             CHKERR( PetscObjectDereference(obj) )
  *             if refct == 1: self.obj[0] = NULL             # <<<<<<<<<<<<<<
@@ -63589,11 +66232,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
     __pyx_t_1 = ((__pyx_v_refct == 1) != 0);
     if (__pyx_t_1) {
       (__pyx_v_self->obj[0]) = NULL;
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
-    /* "PETSc/Object.pyx":152
+    /* "PETSc/Object.pyx":153
  *             CHKERR( PetscObjectDereference(obj) )
  *             if refct == 1: self.obj[0] = NULL
  *             refct -= 1             # <<<<<<<<<<<<<<
@@ -63601,11 +66242,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  * 
  */
     __pyx_v_refct = (__pyx_v_refct - 1);
-    goto __pyx_L3;
+
+    /* "PETSc/Object.pyx":149
+ *         cdef PetscObject obj = self.obj[0]
+ *         cdef PetscInt refct = 0
+ *         if obj != NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectGetReference(obj, &refct) )
+ *             CHKERR( PetscObjectDereference(obj) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Object.pyx":153
+  /* "PETSc/Object.pyx":154
  *             if refct == 1: self.obj[0] = NULL
  *             refct -= 1
  *         return (<long>refct)             # <<<<<<<<<<<<<<
@@ -63613,13 +66260,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  *     def getAttr(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_refct)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_refct)); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":145
+  /* "PETSc/Object.pyx":146
  *         return (<long>refct)
  * 
  *     def decRef(self):             # <<<<<<<<<<<<<<
@@ -63638,7 +66285,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":155
+/* "PETSc/Object.pyx":156
  *         return (<long>refct)
  * 
  *     def getAttr(self, name):             # <<<<<<<<<<<<<<
@@ -63651,9 +66298,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_45getAttr(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_6Object_44getAttr[] = "Object.getAttr(self, name)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_45getAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getAttr (wrapper)", 0);
@@ -63675,7 +66319,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_45getAttr(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getAttr") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getAttr") < 0)) __PYX_ERR(10, 156, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -63686,7 +66330,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_45getAttr(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getAttr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getAttr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 156, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.getAttr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -63704,13 +66348,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjec
   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("getAttr", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":156
+  /* "PETSc/Object.pyx":157
  * 
  *     def getAttr(self, name):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -63719,19 +66360,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":157
+  /* "PETSc/Object.pyx":158
  *     def getAttr(self, name):
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
  *         return self.get_attr(<char*>cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 158, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":158
+  /* "PETSc/Object.pyx":159
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)
  *         return self.get_attr(<char*>cval)             # <<<<<<<<<<<<<<
@@ -63739,13 +66380,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjec
  *     def setAttr(self, name, attr):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *)__pyx_v_self->__pyx_vtab)->get_attr(__pyx_v_self, ((char *)__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *)__pyx_v_self->__pyx_vtab)->get_attr(__pyx_v_self, ((char *)__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":155
+  /* "PETSc/Object.pyx":156
  *         return (<long>refct)
  * 
  *     def getAttr(self, name):             # <<<<<<<<<<<<<<
@@ -63765,7 +66406,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":160
+/* "PETSc/Object.pyx":161
  *         return self.get_attr(<char*>cval)
  * 
  *     def setAttr(self, name, attr):             # <<<<<<<<<<<<<<
@@ -63779,9 +66420,6 @@ static char __pyx_doc_8petsc4py_5PETSc_6Object_46setAttr[] = "Object.setAttr(sel
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47setAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_attr = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAttr (wrapper)", 0);
@@ -63805,11 +66443,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47setAttr(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attr)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setAttr", 1, 2, 2, 1); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setAttr", 1, 2, 2, 1); __PYX_ERR(10, 161, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAttr") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAttr") < 0)) __PYX_ERR(10, 161, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -63822,7 +66460,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47setAttr(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAttr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAttr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 161, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.setAttr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -63840,13 +66478,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjec
   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("setAttr", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":161
+  /* "PETSc/Object.pyx":162
  * 
  *     def setAttr(self, name, attr):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -63855,30 +66490,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":162
+  /* "PETSc/Object.pyx":163
  *     def setAttr(self, name, attr):
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
  *         self.set_attr(<char*>cval, attr)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 163, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":163
+  /* "PETSc/Object.pyx":164
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)
  *         self.set_attr(<char*>cval, attr)             # <<<<<<<<<<<<<<
  * 
  *     def getDict(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *)__pyx_v_self->__pyx_vtab)->set_attr(__pyx_v_self, ((char *)__pyx_v_cval), __pyx_v_attr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *)__pyx_v_self->__pyx_vtab)->set_attr(__pyx_v_self, ((char *)__pyx_v_cval), __pyx_v_attr); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":160
+  /* "PETSc/Object.pyx":161
  *         return self.get_attr(<char*>cval)
  * 
  *     def setAttr(self, name, attr):             # <<<<<<<<<<<<<<
@@ -63900,7 +66535,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":165
+/* "PETSc/Object.pyx":166
  *         self.set_attr(<char*>cval, attr)
  * 
  *     def getDict(self):             # <<<<<<<<<<<<<<
@@ -63929,12 +66564,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48getDict(struct PyPetscObjec
   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("getDict", 0);
 
-  /* "PETSc/Object.pyx":166
+  /* "PETSc/Object.pyx":167
  * 
  *     def getDict(self):
  *         return self.get_dict()             # <<<<<<<<<<<<<<
@@ -63942,13 +66574,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48getDict(struct PyPetscObjec
  *     def stateIncrease(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *)__pyx_v_self->__pyx_vtab)->get_dict(__pyx_v_self); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *)__pyx_v_self->__pyx_vtab)->get_dict(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":165
+  /* "PETSc/Object.pyx":166
  *         self.set_attr(<char*>cval, attr)
  * 
  *     def getDict(self):             # <<<<<<<<<<<<<<
@@ -63967,7 +66599,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48getDict(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":168
+/* "PETSc/Object.pyx":169
  *         return self.get_dict()
  * 
  *     def stateIncrease(self):             # <<<<<<<<<<<<<<
@@ -63997,7 +66629,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPets
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("stateIncrease", 0);
 
-  /* "PETSc/Object.pyx":169
+  /* "PETSc/Object.pyx":170
  * 
  *     def stateIncrease(self):
  *         PetscINCSTATE(self.obj)             # <<<<<<<<<<<<<<
@@ -64006,7 +66638,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPets
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCSTATE(__pyx_v_self->obj);
 
-  /* "PETSc/Object.pyx":168
+  /* "PETSc/Object.pyx":169
  *         return self.get_dict()
  * 
  *     def stateIncrease(self):             # <<<<<<<<<<<<<<
@@ -64021,7 +66653,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":173
+/* "PETSc/Object.pyx":174
  *     # --- tab level ---
  * 
  *     def incrementTabLevel(self, tab, Object parent=None):             # <<<<<<<<<<<<<<
@@ -64035,9 +66667,6 @@ static char __pyx_doc_8petsc4py_5PETSc_6Object_52incrementTabLevel[] = "Object.i
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tab = 0;
   struct PyPetscObjectObject *__pyx_v_parent = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("incrementTabLevel (wrapper)", 0);
@@ -64066,7 +66695,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "incrementTabLevel") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "incrementTabLevel") < 0)) __PYX_ERR(10, 174, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -64081,13 +66710,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("incrementTabLevel", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("incrementTabLevel", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 174, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.incrementTabLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parent), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "parent", 0))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parent), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "parent", 0))) __PYX_ERR(10, 174, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_tab, __pyx_v_parent);
 
   /* function exit code */
@@ -64108,22 +66737,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct Py
   PetscObject __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("incrementTabLevel", 0);
 
-  /* "PETSc/Object.pyx":174
+  /* "PETSc/Object.pyx":175
  * 
  *     def incrementTabLevel(self, tab, Object parent=None):
  *         cdef PetscInt ctab = asInt(tab)             # <<<<<<<<<<<<<<
  *         cdef PetscObject cobj = <PetscObject> NULL if parent is None else parent.obj[0]
  *         CHKERR( PetscObjectIncrementTabLevel(self.obj[0], cobj, ctab) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_tab); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_tab); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(10, 175, __pyx_L1_error)
   __pyx_v_ctab = __pyx_t_1;
 
-  /* "PETSc/Object.pyx":175
+  /* "PETSc/Object.pyx":176
  *     def incrementTabLevel(self, tab, Object parent=None):
  *         cdef PetscInt ctab = asInt(tab)
  *         cdef PetscObject cobj = <PetscObject> NULL if parent is None else parent.obj[0]             # <<<<<<<<<<<<<<
@@ -64138,16 +66764,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct Py
   }
   __pyx_v_cobj = __pyx_t_2;
 
-  /* "PETSc/Object.pyx":176
+  /* "PETSc/Object.pyx":177
  *         cdef PetscInt ctab = asInt(tab)
  *         cdef PetscObject cobj = <PetscObject> NULL if parent is None else parent.obj[0]
  *         CHKERR( PetscObjectIncrementTabLevel(self.obj[0], cobj, ctab) )             # <<<<<<<<<<<<<<
  * 
  *     def setTabLevel(self, level):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectIncrementTabLevel((__pyx_v_self->obj[0]), __pyx_v_cobj, __pyx_v_ctab)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectIncrementTabLevel((__pyx_v_self->obj[0]), __pyx_v_cobj, __pyx_v_ctab)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(10, 177, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":173
+  /* "PETSc/Object.pyx":174
  *     # --- tab level ---
  * 
  *     def incrementTabLevel(self, tab, Object parent=None):             # <<<<<<<<<<<<<<
@@ -64167,7 +66793,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":178
+/* "PETSc/Object.pyx":179
  *         CHKERR( PetscObjectIncrementTabLevel(self.obj[0], cobj, ctab) )
  * 
  *     def setTabLevel(self, level):             # <<<<<<<<<<<<<<
@@ -64180,9 +66806,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_55setTabLevel(PyObject *__pyx
 static char __pyx_doc_8petsc4py_5PETSc_6Object_54setTabLevel[] = "Object.setTabLevel(self, level)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_55setTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTabLevel (wrapper)", 0);
@@ -64204,7 +66827,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_55setTabLevel(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, "setTabLevel") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTabLevel") < 0)) __PYX_ERR(10, 179, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -64215,7 +66838,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_55setTabLevel(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTabLevel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTabLevel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 179, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.setTabLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -64234,31 +66857,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(struct PyPetscO
   __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("setTabLevel", 0);
 
-  /* "PETSc/Object.pyx":179
+  /* "PETSc/Object.pyx":180
  * 
  *     def setTabLevel(self, level):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscObjectSetTabLevel(self.obj[0], clevel) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(10, 180, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/Object.pyx":180
+  /* "PETSc/Object.pyx":181
  *     def setTabLevel(self, level):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PetscObjectSetTabLevel(self.obj[0], clevel) )             # <<<<<<<<<<<<<<
  * 
  *     def getTabLevel(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetTabLevel((__pyx_v_self->obj[0]), __pyx_v_clevel)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetTabLevel((__pyx_v_self->obj[0]), __pyx_v_clevel)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 181, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":178
+  /* "PETSc/Object.pyx":179
  *         CHKERR( PetscObjectIncrementTabLevel(self.obj[0], cobj, ctab) )
  * 
  *     def setTabLevel(self, level):             # <<<<<<<<<<<<<<
@@ -64278,7 +66898,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":182
+/* "PETSc/Object.pyx":183
  *         CHKERR( PetscObjectSetTabLevel(self.obj[0], clevel) )
  * 
  *     def getTabLevel(self):             # <<<<<<<<<<<<<<
@@ -64309,12 +66929,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscO
   __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("getTabLevel", 0);
 
-  /* "PETSc/Object.pyx":183
+  /* "PETSc/Object.pyx":184
  * 
  *     def getTabLevel(self):
  *         cdef PetscInt clevel = 0             # <<<<<<<<<<<<<<
@@ -64323,16 +66940,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscO
  */
   __pyx_v_clevel = 0;
 
-  /* "PETSc/Object.pyx":184
+  /* "PETSc/Object.pyx":185
  *     def getTabLevel(self):
  *         cdef PetscInt clevel = 0
  *         CHKERR( PetscObjectGetTabLevel(self.obj[0], &clevel) )             # <<<<<<<<<<<<<<
  *         return toInt(clevel)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetTabLevel((__pyx_v_self->obj[0]), (&__pyx_v_clevel))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetTabLevel((__pyx_v_self->obj[0]), (&__pyx_v_clevel))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 185, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":185
+  /* "PETSc/Object.pyx":186
  *         cdef PetscInt clevel = 0
  *         CHKERR( PetscObjectGetTabLevel(self.obj[0], &clevel) )
  *         return toInt(clevel)             # <<<<<<<<<<<<<<
@@ -64340,13 +66957,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscO
  *     # --- properties ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_clevel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_clevel); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 186, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":182
+  /* "PETSc/Object.pyx":183
  *         CHKERR( PetscObjectSetTabLevel(self.obj[0], clevel) )
  * 
  *     def getTabLevel(self):             # <<<<<<<<<<<<<<
@@ -64365,7 +66982,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":190
+/* "PETSc/Object.pyx":191
  * 
  *     property type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -64392,12 +67009,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscO
   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);
 
-  /* "PETSc/Object.pyx":191
+  /* "PETSc/Object.pyx":192
  *     property type:
  *         def __get__(self):
  *             return self.getType()             # <<<<<<<<<<<<<<
@@ -64405,7 +67019,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscO
  *             self.setType(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getType); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -64418,10 +67032,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscO
     }
   }
   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[10]; __pyx_lineno = 191; __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(10, 192, __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[10]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 192, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -64429,7 +67043,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":190
+  /* "PETSc/Object.pyx":191
  * 
  *     property type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -64450,7 +67064,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":192
+/* "PETSc/Object.pyx":193
  *         def __get__(self):
  *             return self.getType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -64478,19 +67092,16 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4type_2__set__(struct PyPetscObject
   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);
 
-  /* "PETSc/Object.pyx":193
+  /* "PETSc/Object.pyx":194
  *             return self.getType()
  *         def __set__(self, value):
  *             self.setType(value)             # <<<<<<<<<<<<<<
  * 
  *     property prefix:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setType); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 194, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -64503,23 +67114,23 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4type_2__set__(struct PyPetscObject
     }
   }
   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[10]; __pyx_lineno = 193; __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(10, 194, __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[10]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 194, __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[10]; __pyx_lineno = 193; __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(10, 194, __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;
 
-  /* "PETSc/Object.pyx":192
+  /* "PETSc/Object.pyx":193
  *         def __get__(self):
  *             return self.getType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -64542,7 +67153,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4type_2__set__(struct PyPetscObject
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":196
+/* "PETSc/Object.pyx":197
  * 
  *     property prefix:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -64569,12 +67180,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPets
   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);
 
-  /* "PETSc/Object.pyx":197
+  /* "PETSc/Object.pyx":198
  *     property prefix:
  *         def __get__(self):
  *             return self.getOptionsPrefix()             # <<<<<<<<<<<<<<
@@ -64582,7 +67190,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPets
  *             self.setOptionsPrefix(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOptionsPrefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOptionsPrefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -64595,10 +67203,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPets
     }
   }
   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[10]; __pyx_lineno = 197; __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(10, 198, __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[10]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 198, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -64606,7 +67214,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":196
+  /* "PETSc/Object.pyx":197
  * 
  *     property prefix:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -64627,7 +67235,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":198
+/* "PETSc/Object.pyx":199
  *         def __get__(self):
  *             return self.getOptionsPrefix()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -64655,19 +67263,16 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_6prefix_2__set__(struct PyPetscObje
   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);
 
-  /* "PETSc/Object.pyx":199
+  /* "PETSc/Object.pyx":200
  *             return self.getOptionsPrefix()
  *         def __set__(self, value):
  *             self.setOptionsPrefix(value)             # <<<<<<<<<<<<<<
  * 
  *     property comm:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setOptionsPrefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setOptionsPrefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 200, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -64680,23 +67285,23 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_6prefix_2__set__(struct PyPetscObje
     }
   }
   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[10]; __pyx_lineno = 199; __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(10, 200, __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[10]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 200, __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[10]; __pyx_lineno = 199; __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(10, 200, __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;
 
-  /* "PETSc/Object.pyx":198
+  /* "PETSc/Object.pyx":199
  *         def __get__(self):
  *             return self.getOptionsPrefix()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -64719,7 +67324,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_6prefix_2__set__(struct PyPetscObje
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":202
+/* "PETSc/Object.pyx":203
  * 
  *     property comm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -64746,12 +67351,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscO
   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);
 
-  /* "PETSc/Object.pyx":203
+  /* "PETSc/Object.pyx":204
  *     property comm:
  *         def __get__(self):
  *             return self.getComm()             # <<<<<<<<<<<<<<
@@ -64759,7 +67361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscO
  *     property name:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getComm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getComm); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -64772,10 +67374,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscO
     }
   }
   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[10]; __pyx_lineno = 203; __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(10, 204, __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[10]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 204, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -64783,7 +67385,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":202
+  /* "PETSc/Object.pyx":203
  * 
  *     property comm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -64804,7 +67406,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":206
+/* "PETSc/Object.pyx":207
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -64831,12 +67433,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscO
   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);
 
-  /* "PETSc/Object.pyx":207
+  /* "PETSc/Object.pyx":208
  *     property name:
  *         def __get__(self):
  *             return self.getName()             # <<<<<<<<<<<<<<
@@ -64844,7 +67443,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscO
  *             self.setName(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getName); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getName); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 208, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -64857,10 +67456,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscO
     }
   }
   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[10]; __pyx_lineno = 207; __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(10, 208, __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[10]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 208, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -64868,7 +67467,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":206
+  /* "PETSc/Object.pyx":207
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -64889,7 +67488,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":208
+/* "PETSc/Object.pyx":209
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -64917,19 +67516,16 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4name_2__set__(struct PyPetscObject
   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);
 
-  /* "PETSc/Object.pyx":209
+  /* "PETSc/Object.pyx":210
  *             return self.getName()
  *         def __set__(self, value):
  *             self.setName(value)             # <<<<<<<<<<<<<<
  * 
  *     property classid:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setName); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setName); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -64942,23 +67538,23 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4name_2__set__(struct PyPetscObject
     }
   }
   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[10]; __pyx_lineno = 209; __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(10, 210, __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[10]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 210, __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[10]; __pyx_lineno = 209; __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(10, 210, __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;
 
-  /* "PETSc/Object.pyx":208
+  /* "PETSc/Object.pyx":209
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -64981,7 +67577,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4name_2__set__(struct PyPetscObject
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":212
+/* "PETSc/Object.pyx":213
  * 
  *     property classid:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65008,12 +67604,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPet
   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);
 
-  /* "PETSc/Object.pyx":213
+  /* "PETSc/Object.pyx":214
  *     property classid:
  *         def __get__(self):
  *             return self.getClassId()             # <<<<<<<<<<<<<<
@@ -65021,7 +67614,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPet
  *     property klass:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getClassId); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getClassId); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -65034,10 +67627,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPet
     }
   }
   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[10]; __pyx_lineno = 213; __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(10, 214, __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[10]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 214, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -65045,7 +67638,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPet
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":212
+  /* "PETSc/Object.pyx":213
  * 
  *     property classid:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65066,7 +67659,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":216
+/* "PETSc/Object.pyx":217
  * 
  *     property klass:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65093,12 +67686,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetsc
   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);
 
-  /* "PETSc/Object.pyx":217
+  /* "PETSc/Object.pyx":218
  *     property klass:
  *         def __get__(self):
  *             return self.getClassName()             # <<<<<<<<<<<<<<
@@ -65106,7 +67696,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetsc
  *     property refcount:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getClassName); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getClassName); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 218, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -65119,10 +67709,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetsc
     }
   }
   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[10]; __pyx_lineno = 217; __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(10, 218, __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[10]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 218, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -65130,7 +67720,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":216
+  /* "PETSc/Object.pyx":217
  * 
  *     property klass:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65151,7 +67741,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":220
+/* "PETSc/Object.pyx":221
  * 
  *     property refcount:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65178,12 +67768,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPe
   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);
 
-  /* "PETSc/Object.pyx":221
+  /* "PETSc/Object.pyx":222
  *     property refcount:
  *         def __get__(self):
  *             return self.getRefCount()             # <<<<<<<<<<<<<<
@@ -65191,7 +67778,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPe
  *     # --- ctypes support  ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRefCount); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRefCount); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -65204,10 +67791,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPe
     }
   }
   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[10]; __pyx_lineno = 221; __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(10, 222, __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[10]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 222, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -65215,7 +67802,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":220
+  /* "PETSc/Object.pyx":221
  * 
  *     property refcount:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65236,7 +67823,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":226
+/* "PETSc/Object.pyx":227
  * 
  *     property handle:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65262,12 +67849,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPets
   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("__get__", 0);
 
-  /* "PETSc/Object.pyx":227
+  /* "PETSc/Object.pyx":228
  *     property handle:
  *         def __get__(self):
  *             cdef PetscObject obj = self.obj[0]             # <<<<<<<<<<<<<<
@@ -65276,7 +67860,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPets
  */
   __pyx_v_obj = (__pyx_v_self->obj[0]);
 
-  /* "PETSc/Object.pyx":228
+  /* "PETSc/Object.pyx":229
  *         def __get__(self):
  *             cdef PetscObject obj = self.obj[0]
  *             return PyLong_FromVoidPtr(<void*>obj)             # <<<<<<<<<<<<<<
@@ -65284,13 +67868,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPets
  *     # --- Fortran support  ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyLong_FromVoidPtr(((void *)__pyx_v_obj)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromVoidPtr(((void *)__pyx_v_obj)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 229, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":226
+  /* "PETSc/Object.pyx":227
  * 
  *     property handle:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65309,7 +67893,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":233
+/* "PETSc/Object.pyx":234
  * 
  *     property fortran:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65335,12 +67919,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7fortran___get__(struct PyPet
   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("__get__", 0);
 
-  /* "PETSc/Object.pyx":234
+  /* "PETSc/Object.pyx":235
  *     property fortran:
  *         def __get__(self):
  *             cdef PetscObject obj = self.obj[0]             # <<<<<<<<<<<<<<
@@ -65349,7 +67930,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7fortran___get__(struct PyPet
  */
   __pyx_v_obj = (__pyx_v_self->obj[0]);
 
-  /* "PETSc/Object.pyx":235
+  /* "PETSc/Object.pyx":236
  *         def __get__(self):
  *             cdef PetscObject obj = self.obj[0]
  *             return Object_toFortran(obj)             # <<<<<<<<<<<<<<
@@ -65357,13 +67938,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7fortran___get__(struct PyPet
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_f_8petsc4py_5PETSc_Object_toFortran(__pyx_v_obj)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_f_8petsc4py_5PETSc_Object_toFortran(__pyx_v_obj)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 236, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":233
+  /* "PETSc/Object.pyx":234
  * 
  *     property fortran:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -65469,9 +68050,15 @@ static int __pyx_f_8petsc4py_5PETSc_tp_traverse(PyObject *__pyx_v_o, visitproc _
  * 
  */
     _Py_AS_GC(__pyx_v_d)->gc.gc_refs = 1;
-    goto __pyx_L5;
+
+    /* "PETSc/cyclicgc.pxi":27
+ *     cdef PyObject *d = <PyObject*>p.python_context
+ *     if d == NULL: return 0
+ *     if arg == NULL and _Py_AS_GC(d).gc_refs == 0:             # <<<<<<<<<<<<<<
+ *         _Py_AS_GC(d).gc_refs = 1
+ *     return visit(d, arg)
+ */
   }
-  __pyx_L5:;
 
   /* "PETSc/cyclicgc.pxi":29
  *     if arg == NULL and _Py_AS_GC(d).gc_refs == 0:
@@ -65597,7 +68184,7 @@ static CYTHON_INLINE void __pyx_f_8petsc4py_5PETSc_TypeEnableGC(PyTypeObject *__
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/Object.pyx":244
+/* "PETSc/Object.pyx":245
  * __type_registry__ = type_registry
  * 
  * cdef int PyPetscType_Register(int classid, type cls) except -1:             # <<<<<<<<<<<<<<
@@ -65605,7 +68192,7 @@ static CYTHON_INLINE void __pyx_f_8petsc4py_5PETSc_TypeEnableGC(PyTypeObject *__
  *     cdef object key = <long>classid
  */
 
-static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, PyObject *__pyx_v_cls) {
+static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, PyTypeObject *__pyx_v_cls) {
   PyObject *__pyx_v_key = 0;
   PyObject *__pyx_v_value = 0;
   const char *__pyx_v_dummy;
@@ -65615,24 +68202,21 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscType_Register", 0);
 
-  /* "PETSc/Object.pyx":246
+  /* "PETSc/Object.pyx":247
  * cdef int PyPetscType_Register(int classid, type cls) except -1:
  *     global type_registry
  *     cdef object key = <long>classid             # <<<<<<<<<<<<<<
  *     cdef object value = cls
  *     cdef const_char *dummy = NULL
  */
-  __pyx_t_1 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 247, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_key = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":247
+  /* "PETSc/Object.pyx":248
  *     global type_registry
  *     cdef object key = <long>classid
  *     cdef object value = cls             # <<<<<<<<<<<<<<
@@ -65642,7 +68226,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   __Pyx_INCREF(((PyObject *)__pyx_v_cls));
   __pyx_v_value = ((PyObject *)__pyx_v_cls);
 
-  /* "PETSc/Object.pyx":248
+  /* "PETSc/Object.pyx":249
  *     cdef object key = <long>classid
  *     cdef object value = cls
  *     cdef const_char *dummy = NULL             # <<<<<<<<<<<<<<
@@ -65651,7 +68235,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
  */
   __pyx_v_dummy = NULL;
 
-  /* "PETSc/Object.pyx":249
+  /* "PETSc/Object.pyx":250
  *     cdef object value = cls
  *     cdef const_char *dummy = NULL
  *     if key not in type_registry:             # <<<<<<<<<<<<<<
@@ -65660,13 +68244,13 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_type_registry == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    {__pyx_filename = __pyx_f[10]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(10, 250, __pyx_L1_error)
   }
-  __pyx_t_2 = (__Pyx_PyDict_Contains(__pyx_v_key, __pyx_v_8petsc4py_5PETSc_type_registry, Py_NE)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_key, __pyx_v_8petsc4py_5PETSc_type_registry, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(10, 250, __pyx_L1_error)
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Object.pyx":250
+    /* "PETSc/Object.pyx":251
  *     cdef const_char *dummy = NULL
  *     if key not in type_registry:
  *         type_registry[key] = cls             # <<<<<<<<<<<<<<
@@ -65675,36 +68259,36 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
  */
     if (unlikely(__pyx_v_8petsc4py_5PETSc_type_registry == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[10]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(10, 251, __pyx_L1_error)
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key, ((PyObject *)__pyx_v_cls)) < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key, ((PyObject *)__pyx_v_cls)) < 0)) __PYX_ERR(10, 251, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":251
+    /* "PETSc/Object.pyx":252
  *     if key not in type_registry:
  *         type_registry[key] = cls
  *         reg_LogClass(str2bytes(cls.__name__, &dummy),             # <<<<<<<<<<<<<<
  *                      <PetscLogClass>classid)
  *         TypeEnableGC(<PyTypeObject*>cls)
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_t_1, (&__pyx_v_dummy)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_t_1, (&__pyx_v_dummy)); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/Object.pyx":252
+    /* "PETSc/Object.pyx":253
  *         type_registry[key] = cls
  *         reg_LogClass(str2bytes(cls.__name__, &dummy),
  *                      <PetscLogClass>classid)             # <<<<<<<<<<<<<<
  *         TypeEnableGC(<PyTypeObject*>cls)
  *     else:
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_reg_LogClass(__pyx_t_4, ((PetscClassId)__pyx_v_classid))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_reg_LogClass(__pyx_t_4, ((PetscClassId)__pyx_v_classid))); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/Object.pyx":253
+    /* "PETSc/Object.pyx":254
  *         reg_LogClass(str2bytes(cls.__name__, &dummy),
  *                      <PetscLogClass>classid)
  *         TypeEnableGC(<PyTypeObject*>cls)             # <<<<<<<<<<<<<<
@@ -65712,45 +68296,53 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
  *         value = type_registry[key]
  */
     __pyx_f_8petsc4py_5PETSc_TypeEnableGC(((PyTypeObject *)__pyx_v_cls));
+
+    /* "PETSc/Object.pyx":250
+ *     cdef object value = cls
+ *     cdef const_char *dummy = NULL
+ *     if key not in type_registry:             # <<<<<<<<<<<<<<
+ *         type_registry[key] = cls
+ *         reg_LogClass(str2bytes(cls.__name__, &dummy),
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Object.pyx":255
+  /* "PETSc/Object.pyx":256
  *         TypeEnableGC(<PyTypeObject*>cls)
  *     else:
  *         value = type_registry[key]             # <<<<<<<<<<<<<<
  *         if cls is not value:
  *             raise ValueError(
  */
+  /*else*/ {
     if (unlikely(__pyx_v_8petsc4py_5PETSc_type_registry == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[10]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(10, 256, __pyx_L1_error)
     }
-    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 256, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/Object.pyx":256
+    /* "PETSc/Object.pyx":257
  *     else:
  *         value = type_registry[key]
  *         if cls is not value:             # <<<<<<<<<<<<<<
  *             raise ValueError(
  *                 "key: %d, cannot register: %s, " \
  */
-    __pyx_t_3 = (__pyx_v_cls != ((PyObject*)__pyx_v_value));
+    __pyx_t_3 = (__pyx_v_cls != ((PyTypeObject*)__pyx_v_value));
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "PETSc/Object.pyx":259
+      /* "PETSc/Object.pyx":260
  *             raise ValueError(
  *                 "key: %d, cannot register: %s, " \
  *                 "already registered: %s" % (key, cls, value))             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 260, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_v_key);
       __Pyx_GIVEREF(__pyx_v_key);
@@ -65761,33 +68353,41 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
       __Pyx_INCREF(__pyx_v_value);
       __Pyx_GIVEREF(__pyx_v_value);
       PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_value);
-      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_key_d_cannot_register_s_already, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_key_d_cannot_register_s_already, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 260, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "PETSc/Object.pyx":257
+      /* "PETSc/Object.pyx":258
  *         value = type_registry[key]
  *         if cls is not value:
  *             raise ValueError(             # <<<<<<<<<<<<<<
  *                 "key: %d, cannot register: %s, " \
  *                 "already registered: %s" % (key, cls, value))
  */
-      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 258, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
       __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 258, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[10]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(10, 258, __pyx_L1_error)
+
+      /* "PETSc/Object.pyx":257
+ *     else:
+ *         value = type_registry[key]
+ *         if cls is not value:             # <<<<<<<<<<<<<<
+ *             raise ValueError(
+ *                 "key: %d, cannot register: %s, " \
+ */
     }
   }
   __pyx_L3:;
 
-  /* "PETSc/Object.pyx":260
+  /* "PETSc/Object.pyx":261
  *                 "key: %d, cannot register: %s, " \
  *                 "already registered: %s" % (key, cls, value))
  *     return 0             # <<<<<<<<<<<<<<
@@ -65797,7 +68397,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":244
+  /* "PETSc/Object.pyx":245
  * __type_registry__ = type_registry
  * 
  * cdef int PyPetscType_Register(int classid, type cls) except -1:             # <<<<<<<<<<<<<<
@@ -65818,7 +68418,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":262
+/* "PETSc/Object.pyx":263
  *     return 0
  * 
  * cdef type PyPetscType_Lookup(int classid):             # <<<<<<<<<<<<<<
@@ -65826,10 +68426,10 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
  *     cdef object key = <long>classid
  */
 
-static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid) {
+static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid) {
   PyObject *__pyx_v_key = 0;
-  PyObject *__pyx_v_cls = 0;
-  PyObject *__pyx_r = NULL;
+  PyTypeObject *__pyx_v_cls = 0;
+  PyTypeObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
@@ -65838,34 +68438,31 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid
   int __pyx_t_5;
   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("PyPetscType_Lookup", 0);
 
-  /* "PETSc/Object.pyx":264
+  /* "PETSc/Object.pyx":265
  * cdef type PyPetscType_Lookup(int classid):
  *     global type_registry
  *     cdef object key = <long>classid             # <<<<<<<<<<<<<<
  *     cdef type cls = Object
  *     try:
  */
-  __pyx_t_1 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_key = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":265
+  /* "PETSc/Object.pyx":266
  *     global type_registry
  *     cdef object key = <long>classid
  *     cdef type cls = Object             # <<<<<<<<<<<<<<
  *     try:
  *         cls = type_registry[key]
  */
-  __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object)));
-  __pyx_v_cls = ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object);
+  __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Object));
+  __pyx_v_cls = __pyx_ptype_8petsc4py_5PETSc_Object;
 
-  /* "PETSc/Object.pyx":266
+  /* "PETSc/Object.pyx":267
  *     cdef object key = <long>classid
  *     cdef type cls = Object
  *     try:             # <<<<<<<<<<<<<<
@@ -65873,13 +68470,15 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid
  *     except KeyError:
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_2);
     __Pyx_XGOTREF(__pyx_t_3);
     __Pyx_XGOTREF(__pyx_t_4);
     /*try:*/ {
 
-      /* "PETSc/Object.pyx":267
+      /* "PETSc/Object.pyx":268
  *     cdef type cls = Object
  *     try:
  *         cls = type_registry[key]             # <<<<<<<<<<<<<<
@@ -65888,45 +68487,54 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid
  */
       if (unlikely(__pyx_v_8petsc4py_5PETSc_type_registry == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        {__pyx_filename = __pyx_f[10]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __PYX_ERR(10, 268, __pyx_L3_error)
       }
-      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;};
+      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 268, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_1);
-      if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_DECREF_SET(__pyx_v_cls, ((PyObject*)__pyx_t_1));
+      if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(10, 268, __pyx_L3_error)
+      __Pyx_DECREF_SET(__pyx_v_cls, ((PyTypeObject*)__pyx_t_1));
       __pyx_t_1 = 0;
+
+      /* "PETSc/Object.pyx":267
+ *     cdef object key = <long>classid
+ *     cdef type cls = Object
+ *     try:             # <<<<<<<<<<<<<<
+ *         cls = type_registry[key]
+ *     except KeyError:
+ */
     }
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L10_try_end;
     __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/Object.pyx":268
+    /* "PETSc/Object.pyx":269
  *     try:
  *         cls = type_registry[key]
  *     except KeyError:             # <<<<<<<<<<<<<<
  *         cls = Object
  *     return cls
  */
-    __pyx_t_5 = PyErr_ExceptionMatches(__pyx_builtin_KeyError);
+    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
     if (__pyx_t_5) {
       __Pyx_AddTraceback("petsc4py.PETSc.PyPetscType_Lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(10, 269, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_7);
 
-      /* "PETSc/Object.pyx":269
+      /* "PETSc/Object.pyx":270
  *         cls = type_registry[key]
  *     except KeyError:
  *         cls = Object             # <<<<<<<<<<<<<<
  *     return cls
  * 
  */
-      __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object)));
-      __Pyx_DECREF_SET(__pyx_v_cls, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object));
+      __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Object));
+      __Pyx_DECREF_SET(__pyx_v_cls, __pyx_ptype_8petsc4py_5PETSc_Object);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -65934,12 +68542,22 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid
     }
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
+
+    /* "PETSc/Object.pyx":267
+ *     cdef object key = <long>classid
+ *     cdef type cls = Object
+ *     try:             # <<<<<<<<<<<<<<
+ *         cls = type_registry[key]
+ *     except KeyError:
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
     goto __pyx_L1_error;
     __pyx_L4_exception_handled:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
@@ -65947,7 +68565,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid
     __pyx_L10_try_end:;
   }
 
-  /* "PETSc/Object.pyx":270
+  /* "PETSc/Object.pyx":271
  *     except KeyError:
  *         cls = Object
  *     return cls             # <<<<<<<<<<<<<<
@@ -65959,7 +68577,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid
   __pyx_r = __pyx_v_cls;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":262
+  /* "PETSc/Object.pyx":263
  *     return 0
  * 
  * cdef type PyPetscType_Lookup(int classid):             # <<<<<<<<<<<<<<
@@ -65977,12 +68595,12 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_classid
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_key);
   __Pyx_XDECREF(__pyx_v_cls);
-  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_XGIVEREF((PyObject *)__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":82
+/* "PETSc/Viewer.pyx":83
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -66011,7 +68629,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObjec
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Viewer.pyx":83
+  /* "PETSc/Viewer.pyx":84
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.vwr             # <<<<<<<<<<<<<<
@@ -66020,7 +68638,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObjec
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->vwr));
 
-  /* "PETSc/Viewer.pyx":84
+  /* "PETSc/Viewer.pyx":85
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.vwr
  *         self.vwr = NULL             # <<<<<<<<<<<<<<
@@ -66029,7 +68647,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObjec
  */
   __pyx_v_self->vwr = NULL;
 
-  /* "PETSc/Viewer.pyx":82
+  /* "PETSc/Viewer.pyx":83
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -66043,7 +68661,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObjec
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":86
+/* "PETSc/Viewer.pyx":87
  *         self.vwr = NULL
  * 
  *     def __call__(self, Object obj):             # <<<<<<<<<<<<<<
@@ -66055,9 +68673,6 @@ static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObjec
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscObjectObject *__pyx_v_obj = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
@@ -66079,7 +68694,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_3__call__(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(27, 87, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -66090,13 +68705,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_3__call__(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 87, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "obj", 0))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "obj", 0))) __PYX_ERR(27, 87, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_obj);
 
   /* function exit code */
@@ -66112,12 +68727,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(struct PyPetscViewe
   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("__call__", 0);
 
-  /* "PETSc/Viewer.pyx":87
+  /* "PETSc/Viewer.pyx":88
  * 
  *     def __call__(self, Object obj):
  *         assert obj.obj != NULL             # <<<<<<<<<<<<<<
@@ -66128,21 +68740,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(struct PyPetscViewe
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_obj->obj != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[27]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(27, 88, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/Viewer.pyx":88
+  /* "PETSc/Viewer.pyx":89
  *     def __call__(self, Object obj):
  *         assert obj.obj != NULL
  *         CHKERR( PetscObjectView(obj.obj[0], self.vwr) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectView((__pyx_v_obj->obj[0]), __pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectView((__pyx_v_obj->obj[0]), __pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 89, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":86
+  /* "PETSc/Viewer.pyx":87
  *         self.vwr = NULL
  * 
  *     def __call__(self, Object obj):             # <<<<<<<<<<<<<<
@@ -66162,7 +68774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(struct PyPetscViewe
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":92
+/* "PETSc/Viewer.pyx":93
  *     #
  * 
  *     def view(self, obj=None):             # <<<<<<<<<<<<<<
@@ -66175,9 +68787,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_5view(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_6Viewer_4view[] = "Viewer.view(self, obj=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_5view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_obj = 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);
@@ -66202,7 +68811,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_5view(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(27, 93, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -66215,7 +68824,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_5view(PyObject *__pyx_v_self,
   }
   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[27]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 93, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -66234,12 +68843,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/Viewer.pyx":93
+  /* "PETSc/Viewer.pyx":94
  * 
  *     def view(self, obj=None):
  *         if obj is None:             # <<<<<<<<<<<<<<
@@ -66250,71 +68856,87 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Viewer.pyx":94
+    /* "PETSc/Viewer.pyx":95
  *     def view(self, obj=None):
  *         if obj is None:
  *             CHKERR( PetscViewerView(self.vwr, NULL) )             # <<<<<<<<<<<<<<
  *         elif isinstance(obj, Viewer):
  *             CHKERR( PetscViewerView(self.vwr, (<Viewer?>obj).vwr) )
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerView(__pyx_v_self->vwr, NULL)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerView(__pyx_v_self->vwr, NULL)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(27, 95, __pyx_L1_error)
+
+    /* "PETSc/Viewer.pyx":94
+ * 
+ *     def view(self, obj=None):
+ *         if obj is None:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscViewerView(self.vwr, NULL) )
+ *         elif isinstance(obj, Viewer):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/Viewer.pyx":95
+  /* "PETSc/Viewer.pyx":96
  *         if obj is None:
  *             CHKERR( PetscViewerView(self.vwr, NULL) )
  *         elif isinstance(obj, Viewer):             # <<<<<<<<<<<<<<
  *             CHKERR( PetscViewerView(self.vwr, (<Viewer?>obj).vwr) )
  *         else:
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_obj, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Viewer); 
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Viewer.pyx":96
+    /* "PETSc/Viewer.pyx":97
  *             CHKERR( PetscViewerView(self.vwr, NULL) )
  *         elif isinstance(obj, Viewer):
  *             CHKERR( PetscViewerView(self.vwr, (<Viewer?>obj).vwr) )             # <<<<<<<<<<<<<<
  *         else:
  *             assert (<Object?>obj).obj != NULL
  */
-    if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerView(__pyx_v_self->vwr, ((struct PyPetscViewerObject *)__pyx_v_obj)->vwr)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) __PYX_ERR(27, 97, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerView(__pyx_v_self->vwr, ((struct PyPetscViewerObject *)__pyx_v_obj)->vwr)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(27, 97, __pyx_L1_error)
+
+    /* "PETSc/Viewer.pyx":96
+ *         if obj is None:
+ *             CHKERR( PetscViewerView(self.vwr, NULL) )
+ *         elif isinstance(obj, Viewer):             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscViewerView(self.vwr, (<Viewer?>obj).vwr) )
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Viewer.pyx":98
+  /* "PETSc/Viewer.pyx":99
  *             CHKERR( PetscViewerView(self.vwr, (<Viewer?>obj).vwr) )
  *         else:
  *             assert (<Object?>obj).obj != NULL             # <<<<<<<<<<<<<<
  *             CHKERR( PetscObjectView((<Object?>obj).obj[0], self.vwr) )
  * 
  */
+  /*else*/ {
     #ifndef CYTHON_WITHOUT_ASSERTIONS
     if (unlikely(!Py_OptimizeFlag)) {
-      if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Object)))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Object)))) __PYX_ERR(27, 99, __pyx_L1_error)
       if (unlikely(!((((struct PyPetscObjectObject *)__pyx_v_obj)->obj != NULL) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[27]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(27, 99, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/Viewer.pyx":99
+    /* "PETSc/Viewer.pyx":100
  *         else:
  *             assert (<Object?>obj).obj != NULL
  *             CHKERR( PetscObjectView((<Object?>obj).obj[0], self.vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-    if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Object)))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectView((((struct PyPetscObjectObject *)__pyx_v_obj)->obj[0]), __pyx_v_self->vwr)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Object)))) __PYX_ERR(27, 100, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectView((((struct PyPetscObjectObject *)__pyx_v_obj)->obj[0]), __pyx_v_self->vwr)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(27, 100, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Viewer.pyx":92
+  /* "PETSc/Viewer.pyx":93
  *     #
  * 
  *     def view(self, obj=None):             # <<<<<<<<<<<<<<
@@ -66334,7 +68956,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":101
+/* "PETSc/Viewer.pyx":102
  *             CHKERR( PetscObjectView((<Object?>obj).obj[0], self.vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -66363,21 +68985,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_6destroy(struct PyPetscViewer
   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);
 
-  /* "PETSc/Viewer.pyx":102
+  /* "PETSc/Viewer.pyx":103
  * 
  *     def destroy(self):
  *         CHKERR( PetscViewerDestroy(&self.vwr) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDestroy((&__pyx_v_self->vwr))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDestroy((&__pyx_v_self->vwr))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 103, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":103
+  /* "PETSc/Viewer.pyx":104
  *     def destroy(self):
  *         CHKERR( PetscViewerDestroy(&self.vwr) )
  *         return self             # <<<<<<<<<<<<<<
@@ -66389,7 +69008,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_6destroy(struct PyPetscViewer
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":101
+  /* "PETSc/Viewer.pyx":102
  *             CHKERR( PetscObjectView((<Object?>obj).obj[0], self.vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -66407,7 +69026,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_6destroy(struct PyPetscViewer
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":105
+/* "PETSc/Viewer.pyx":106
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -66420,9 +69039,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_9create(PyObject *__pyx_v_sel
 static char __pyx_doc_8petsc4py_5PETSc_6Viewer_8create[] = "Viewer.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_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);
@@ -66447,7 +69063,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_9create(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(27, 106, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -66460,7 +69076,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_9create(PyObject *__pyx_v_sel
   }
   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[27]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 106, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -66480,22 +69096,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerO
   __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);
 
-  /* "PETSc/Viewer.pyx":106
+  /* "PETSc/Viewer.pyx":107
  * 
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 107, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":107
+  /* "PETSc/Viewer.pyx":108
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -66504,16 +69117,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerO
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":108
+  /* "PETSc/Viewer.pyx":109
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(27, 109, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":109
+  /* "PETSc/Viewer.pyx":110
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -66523,19 +69136,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerO
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":110
+  /* "PETSc/Viewer.pyx":111
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createASCII(self, name, mode=None, format=None, comm=None):
+ *     def createASCII(self, name, mode=None, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":105
+  /* "PETSc/Viewer.pyx":106
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -66553,39 +69166,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerO
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":112
+/* "PETSc/Viewer.pyx":113
  *         return self
  * 
- *     def createASCII(self, name, mode=None, format=None, comm=None):             # <<<<<<<<<<<<<<
+ *     def createASCII(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_11createASCII(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_10createASCII[] = "Viewer.createASCII(self, name, mode=None, format=None, comm=None)";
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_10createASCII[] = "Viewer.createASCII(self, name, mode=None, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_11createASCII(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_mode = 0;
-  PyObject *__pyx_v_format = 0;
   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("createASCII (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_mode,&__pyx_n_s_format,&__pyx_n_s_comm,0};
-    PyObject* values[4] = {0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_mode,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
     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);
@@ -66604,21 +69211,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_11createASCII(PyObject *__pyx
         }
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_format);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[3] = value; kw_args--; }
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createASCII") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createASCII") < 0)) __PYX_ERR(27, 113, __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);
@@ -66628,29 +69229,27 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_11createASCII(PyObject *__pyx
     }
     __pyx_v_name = values[0];
     __pyx_v_mode = values[1];
-    __pyx_v_format = values[2];
-    __pyx_v_comm = values[3];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createASCII", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createASCII", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 113, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createASCII", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name, __pyx_v_mode, __pyx_v_format, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_format, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   const char *__pyx_v_cname;
   PetscFileMode __pyx_v_cmode;
-  PetscViewerFormat __pyx_v_cvfmt;
   PetscViewer __pyx_v_newvwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -66659,26 +69258,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
   int __pyx_t_3;
   int __pyx_t_4;
   PetscFileMode __pyx_t_5;
-  PetscViewerFormat __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  int __pyx_t_6;
   __Pyx_RefNannySetupContext("createASCII", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":113
+  /* "PETSc/Viewer.pyx":114
  * 
- *     def createASCII(self, name, mode=None, format=None, comm=None):
+ *     def createASCII(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 114, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":114
- *     def createASCII(self, name, mode=None, format=None, comm=None):
+  /* "PETSc/Viewer.pyx":115
+ *     def createASCII(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
  *         name = str2bytes(name, &cname)
@@ -66686,86 +69281,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":115
+  /* "PETSc/Viewer.pyx":116
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE
  *         if mode is not None: filemode(mode)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":116
+  /* "PETSc/Viewer.pyx":117
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE             # <<<<<<<<<<<<<<
  *         if mode is not None: filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
+ *         cdef PetscViewer newvwr = NULL
  */
   __pyx_v_cmode = FILE_MODE_WRITE;
 
-  /* "PETSc/Viewer.pyx":117
+  /* "PETSc/Viewer.pyx":118
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE
  *         if mode is not None: filemode(mode)             # <<<<<<<<<<<<<<
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format
+ *         cdef PetscViewer newvwr = NULL
+ *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  */
   __pyx_t_3 = (__pyx_v_mode != Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_5 == ((PetscFileMode)-1))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_5 == ((PetscFileMode)-1L))) __PYX_ERR(27, 118, __pyx_L1_error)
   }
-  __pyx_L3:;
-
-  /* "PETSc/Viewer.pyx":118
- *         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE
- *         if mode is not None: filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT             # <<<<<<<<<<<<<<
- *         if format is not None: cvfmt = format
- *         cdef PetscViewer newvwr = NULL
- */
-  __pyx_v_cvfmt = PETSC_VIEWER_DEFAULT;
 
   /* "PETSc/Viewer.pyx":119
+ *         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE
  *         if mode is not None: filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format             # <<<<<<<<<<<<<<
- *         cdef PetscViewer newvwr = NULL
- *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
- */
-  __pyx_t_4 = (__pyx_v_format != Py_None);
-  __pyx_t_3 = (__pyx_t_4 != 0);
-  if (__pyx_t_3) {
-    __pyx_t_6 = ((PetscViewerFormat)PyInt_AsLong(__pyx_v_format)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_cvfmt = __pyx_t_6;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "PETSc/Viewer.pyx":120
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":121
- *         if format is not None: cvfmt = format
+  /* "PETSc/Viewer.pyx":120
+ *         if mode is not None: filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERASCII) )
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(27, 120, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":122
+  /* "PETSc/Viewer.pyx":121
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -66775,58 +69343,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":123
+  /* "PETSc/Viewer.pyx":122
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERASCII) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERASCII)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERASCII)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(27, 122, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":124
+  /* "PETSc/Viewer.pyx":123
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERASCII) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
+ *         return self
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(27, 123, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":125
+  /* "PETSc/Viewer.pyx":124
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERASCII) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )             # <<<<<<<<<<<<<<
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
- *         return self
- */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/Viewer.pyx":126
- *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
- *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetFormat(__pyx_v_self->vwr, __pyx_v_cvfmt)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(27, 124, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":127
+  /* "PETSc/Viewer.pyx":125
+ *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createBinary(self, name, mode=None, format=None, comm=None):
+ *     def createBinary(self, name, mode=None, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":112
+  /* "PETSc/Viewer.pyx":113
  *         return self
  * 
- *     def createASCII(self, name, mode=None, format=None, comm=None):             # <<<<<<<<<<<<<<
+ *     def createASCII(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  */
@@ -66843,39 +69402,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":129
+/* "PETSc/Viewer.pyx":127
  *         return self
  * 
- *     def createBinary(self, name, mode=None, format=None, comm=None):             # <<<<<<<<<<<<<<
+ *     def createBinary(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_13createBinary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_12createBinary[] = "Viewer.createBinary(self, name, mode=None, format=None, comm=None)";
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_12createBinary[] = "Viewer.createBinary(self, name, mode=None, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_13createBinary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_mode = 0;
-  PyObject *__pyx_v_format = 0;
   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("createBinary (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_mode,&__pyx_n_s_format,&__pyx_n_s_comm,0};
-    PyObject* values[4] = {0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_mode,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
     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);
@@ -66894,21 +69447,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_13createBinary(PyObject *__py
         }
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_format);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[3] = value; kw_args--; }
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBinary") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBinary") < 0)) __PYX_ERR(27, 127, __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);
@@ -66918,29 +69465,27 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_13createBinary(PyObject *__py
     }
     __pyx_v_name = values[0];
     __pyx_v_mode = values[1];
-    __pyx_v_format = values[2];
-    __pyx_v_comm = values[3];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createBinary", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createBinary", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 127, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createBinary", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name, __pyx_v_mode, __pyx_v_format, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_format, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   const char *__pyx_v_cname;
   PetscFileMode __pyx_v_cmode;
-  PetscViewerFormat __pyx_v_cvfmt;
   PetscViewer __pyx_v_newvwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -66948,27 +69493,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   PetscFileMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_t_5;
-  PetscViewerFormat __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createBinary", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":130
+  /* "PETSc/Viewer.pyx":128
  * 
- *     def createBinary(self, name, mode=None, format=None, comm=None):
+ *     def createBinary(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 128, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":131
- *     def createBinary(self, name, mode=None, format=None, comm=None):
+  /* "PETSc/Viewer.pyx":129
+ *     def createBinary(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
  *         name = str2bytes(name, &cname)
@@ -66976,106 +69515,72 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":132
+  /* "PETSc/Viewer.pyx":130
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef PetscFileMode cmode = filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
+ *         cdef PetscViewer newvwr = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":133
+  /* "PETSc/Viewer.pyx":131
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)             # <<<<<<<<<<<<<<
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format
+ *         cdef PetscViewer newvwr = NULL
+ *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1L))) __PYX_ERR(27, 131, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":134
+  /* "PETSc/Viewer.pyx":132
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT             # <<<<<<<<<<<<<<
- *         if format is not None: cvfmt = format
- *         cdef PetscViewer newvwr = NULL
- */
-  __pyx_v_cvfmt = PETSC_VIEWER_DEFAULT;
-
-  /* "PETSc/Viewer.pyx":135
- *         cdef PetscFileMode cmode = filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format             # <<<<<<<<<<<<<<
- *         cdef PetscViewer newvwr = NULL
- *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )
- */
-  __pyx_t_4 = (__pyx_v_format != Py_None);
-  __pyx_t_5 = (__pyx_t_4 != 0);
-  if (__pyx_t_5) {
-    __pyx_t_6 = ((PetscViewerFormat)PyInt_AsLong(__pyx_v_format)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_cvfmt = __pyx_t_6;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "PETSc/Viewer.pyx":136
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":137
- *         if format is not None: cvfmt = format
+  /* "PETSc/Viewer.pyx":133
+ *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
+ *         return self
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerBinaryOpen(__pyx_v_ccomm, __pyx_v_cname, __pyx_v_cmode, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerBinaryOpen(__pyx_v_ccomm, __pyx_v_cname, __pyx_v_cmode, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 133, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":138
+  /* "PETSc/Viewer.pyx":134
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
  *         return self
+ * 
  */
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":139
+  /* "PETSc/Viewer.pyx":135
  *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetFormat(__pyx_v_self->vwr, __pyx_v_cvfmt)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/Viewer.pyx":140
- *         PetscCLEAR(self.obj); self.vwr = newvwr
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createMPIIO(self, name, mode=None, format=None, comm=None):
+ *     def createMPIIO(self, name, mode=None, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":129
+  /* "PETSc/Viewer.pyx":127
  *         return self
  * 
- *     def createBinary(self, name, mode=None, format=None, comm=None):             # <<<<<<<<<<<<<<
+ *     def createBinary(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  */
@@ -67092,39 +69597,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":142
+/* "PETSc/Viewer.pyx":137
  *         return self
  * 
- *     def createMPIIO(self, name, mode=None, format=None, comm=None):             # <<<<<<<<<<<<<<
+ *     def createMPIIO(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_14createMPIIO[] = "Viewer.createMPIIO(self, name, mode=None, format=None, comm=None)";
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_14createMPIIO[] = "Viewer.createMPIIO(self, name, mode=None, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_mode = 0;
-  PyObject *__pyx_v_format = 0;
   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("createMPIIO (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_mode,&__pyx_n_s_format,&__pyx_n_s_comm,0};
-    PyObject* values[4] = {0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_mode,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
     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);
@@ -67143,21 +69642,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO(PyObject *__pyx
         }
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_format);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[3] = value; kw_args--; }
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMPIIO") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMPIIO") < 0)) __PYX_ERR(27, 137, __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);
@@ -67167,29 +69660,27 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO(PyObject *__pyx
     }
     __pyx_v_name = values[0];
     __pyx_v_mode = values[1];
-    __pyx_v_format = values[2];
-    __pyx_v_comm = values[3];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createMPIIO", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createMPIIO", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 137, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createMPIIO", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name, __pyx_v_mode, __pyx_v_format, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_format, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_mode, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   const char *__pyx_v_cname;
   PetscFileMode __pyx_v_cmode;
-  PetscViewerFormat __pyx_v_cvfmt;
   PetscViewer __pyx_v_newvwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -67197,27 +69688,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   PetscFileMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_t_5;
-  PetscViewerFormat __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createMPIIO", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":143
+  /* "PETSc/Viewer.pyx":138
  * 
- *     def createMPIIO(self, name, mode=None, format=None, comm=None):
+ *     def createMPIIO(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 138, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":144
- *     def createMPIIO(self, name, mode=None, format=None, comm=None):
+  /* "PETSc/Viewer.pyx":139
+ *     def createMPIIO(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
  *         name = str2bytes(name, &cname)
@@ -67225,72 +69710,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":145
+  /* "PETSc/Viewer.pyx":140
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef PetscFileMode cmode = filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
+ *         cdef PetscViewer newvwr = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 140, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":146
+  /* "PETSc/Viewer.pyx":141
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)             # <<<<<<<<<<<<<<
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format
+ *         cdef PetscViewer newvwr = NULL
+ *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1L))) __PYX_ERR(27, 141, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":147
+  /* "PETSc/Viewer.pyx":142
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT             # <<<<<<<<<<<<<<
- *         if format is not None: cvfmt = format
- *         cdef PetscViewer newvwr = NULL
- */
-  __pyx_v_cvfmt = PETSC_VIEWER_DEFAULT;
-
-  /* "PETSc/Viewer.pyx":148
- *         cdef PetscFileMode cmode = filemode(mode)
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format             # <<<<<<<<<<<<<<
- *         cdef PetscViewer newvwr = NULL
- *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
- */
-  __pyx_t_4 = (__pyx_v_format != Py_None);
-  __pyx_t_5 = (__pyx_t_4 != 0);
-  if (__pyx_t_5) {
-    __pyx_t_6 = ((PetscViewerFormat)PyInt_AsLong(__pyx_v_format)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_cvfmt = __pyx_t_6;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "PETSc/Viewer.pyx":149
- *         cdef PetscViewerFormat cvfmt = PETSC_VIEWER_DEFAULT
- *         if format is not None: cvfmt = format
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":150
- *         if format is not None: cvfmt = format
+  /* "PETSc/Viewer.pyx":143
+ *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERBINARY) )
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 143, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":151
+  /* "PETSc/Viewer.pyx":144
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -67300,54 +69760,45 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":152
+  /* "PETSc/Viewer.pyx":145
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERBINARY) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerBinarySetUseMPIIO(self.vwr, PETSC_TRUE) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERBINARY)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERBINARY)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 145, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":153
+  /* "PETSc/Viewer.pyx":146
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERBINARY) )
  *         CHKERR( PetscViewerBinarySetUseMPIIO(self.vwr, PETSC_TRUE) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerBinarySetUseMPIIO(__pyx_v_self->vwr, PETSC_TRUE)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerBinarySetUseMPIIO(__pyx_v_self->vwr, PETSC_TRUE)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 146, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":154
+  /* "PETSc/Viewer.pyx":147
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERBINARY) )
  *         CHKERR( PetscViewerBinarySetUseMPIIO(self.vwr, PETSC_TRUE) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
+ *         return self
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 147, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":155
+  /* "PETSc/Viewer.pyx":148
  *         CHKERR( PetscViewerBinarySetUseMPIIO(self.vwr, PETSC_TRUE) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )             # <<<<<<<<<<<<<<
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
- *         return self
- */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/Viewer.pyx":156
- *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
- *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetFormat(__pyx_v_self->vwr, __pyx_v_cvfmt)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 148, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":157
+  /* "PETSc/Viewer.pyx":149
+ *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
- *         CHKERR( PetscViewerSetFormat(self.vwr, cvfmt) )
  *         return self             # <<<<<<<<<<<<<<
  * 
  *     def createVTK(self, name, mode=None, comm=None):
@@ -67357,10 +69808,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":142
+  /* "PETSc/Viewer.pyx":137
  *         return self
  * 
- *     def createMPIIO(self, name, mode=None, format=None, comm=None):             # <<<<<<<<<<<<<<
+ *     def createMPIIO(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  */
@@ -67377,7 +69828,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":159
+/* "PETSc/Viewer.pyx":151
  *         return self
  * 
  *     def createVTK(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -67392,9 +69843,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_17createVTK(PyObject *__pyx_v
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_mode = 0;
   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("createVTK (wrapper)", 0);
@@ -67430,7 +69878,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_17createVTK(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createVTK") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createVTK") < 0)) __PYX_ERR(27, 151, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -67447,7 +69895,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_17createVTK(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createVTK", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createVTK", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 151, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createVTK", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -67471,23 +69919,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
   PyObject *__pyx_t_2 = NULL;
   PetscFileMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createVTK", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":160
+  /* "PETSc/Viewer.pyx":152
  * 
  *     def createVTK(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 152, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":161
+  /* "PETSc/Viewer.pyx":153
  *     def createVTK(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -67496,29 +69941,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":162
+  /* "PETSc/Viewer.pyx":154
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":163
+  /* "PETSc/Viewer.pyx":155
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)             # <<<<<<<<<<<<<<
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1L))) __PYX_ERR(27, 155, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":164
+  /* "PETSc/Viewer.pyx":156
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -67527,16 +69972,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":165
+  /* "PETSc/Viewer.pyx":157
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERVTK) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 157, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":166
+  /* "PETSc/Viewer.pyx":158
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -67546,34 +69991,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":167
+  /* "PETSc/Viewer.pyx":159
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERVTK) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERVTK)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERVTK)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 159, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":168
+  /* "PETSc/Viewer.pyx":160
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERVTK) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 160, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":169
+  /* "PETSc/Viewer.pyx":161
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERVTK) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 161, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":170
+  /* "PETSc/Viewer.pyx":162
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
@@ -67585,7 +70030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":159
+  /* "PETSc/Viewer.pyx":151
  *         return self
  * 
  *     def createVTK(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -67605,7 +70050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":172
+/* "PETSc/Viewer.pyx":164
  *         return self
  * 
  *     def createHDF5(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -67620,9 +70065,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_19createHDF5(PyObject *__pyx_
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_mode = 0;
   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("createHDF5 (wrapper)", 0);
@@ -67658,7 +70100,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_19createHDF5(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createHDF5") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createHDF5") < 0)) __PYX_ERR(27, 164, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -67675,7 +70117,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_19createHDF5(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createHDF5", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createHDF5", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 164, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createHDF5", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -67699,23 +70141,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
   PyObject *__pyx_t_2 = NULL;
   PetscFileMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createHDF5", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":173
+  /* "PETSc/Viewer.pyx":165
  * 
  *     def createHDF5(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 165, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":174
+  /* "PETSc/Viewer.pyx":166
  *     def createHDF5(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -67724,29 +70163,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":175
+  /* "PETSc/Viewer.pyx":167
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":176
+  /* "PETSc/Viewer.pyx":168
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)             # <<<<<<<<<<<<<<
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1L))) __PYX_ERR(27, 168, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":177
+  /* "PETSc/Viewer.pyx":169
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -67755,16 +70194,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":178
+  /* "PETSc/Viewer.pyx":170
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERHDF5) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 170, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":179
+  /* "PETSc/Viewer.pyx":171
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -67774,34 +70213,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":180
+  /* "PETSc/Viewer.pyx":172
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERHDF5) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERHDF5)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERHDF5)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 172, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":181
+  /* "PETSc/Viewer.pyx":173
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERHDF5) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 173, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":182
+  /* "PETSc/Viewer.pyx":174
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERHDF5) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 174, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":183
+  /* "PETSc/Viewer.pyx":175
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
@@ -67813,7 +70252,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":172
+  /* "PETSc/Viewer.pyx":164
  *         return self
  * 
  *     def createHDF5(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -67833,7 +70272,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":185
+/* "PETSc/Viewer.pyx":177
  *         return self
  * 
  *     def createNetCDF(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -67848,9 +70287,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_21createNetCDF(PyObject *__py
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_mode = 0;
   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("createNetCDF (wrapper)", 0);
@@ -67886,7 +70322,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_21createNetCDF(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createNetCDF") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createNetCDF") < 0)) __PYX_ERR(27, 177, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -67903,7 +70339,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_21createNetCDF(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createNetCDF", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createNetCDF", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 177, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createNetCDF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -67927,23 +70363,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   PetscFileMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createNetCDF", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":186
+  /* "PETSc/Viewer.pyx":178
  * 
  *     def createNetCDF(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 178, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":187
+  /* "PETSc/Viewer.pyx":179
  *     def createNetCDF(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -67952,29 +70385,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetsc
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":188
+  /* "PETSc/Viewer.pyx":180
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 180, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":189
+  /* "PETSc/Viewer.pyx":181
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)             # <<<<<<<<<<<<<<
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1L))) __PYX_ERR(27, 181, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":190
+  /* "PETSc/Viewer.pyx":182
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -67983,16 +70416,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetsc
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":191
+  /* "PETSc/Viewer.pyx":183
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERNETCDF) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 183, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":192
+  /* "PETSc/Viewer.pyx":184
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -68002,34 +70435,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetsc
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":193
+  /* "PETSc/Viewer.pyx":185
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERNETCDF) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERNETCDF)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERNETCDF)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 185, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":194
+  /* "PETSc/Viewer.pyx":186
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERNETCDF) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 186, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":195
+  /* "PETSc/Viewer.pyx":187
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERNETCDF) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 187, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":196
+  /* "PETSc/Viewer.pyx":188
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
@@ -68041,7 +70474,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":185
+  /* "PETSc/Viewer.pyx":177
  *         return self
  * 
  *     def createNetCDF(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -68061,7 +70494,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":198
+/* "PETSc/Viewer.pyx":190
  *         return self
  * 
  *     def createDraw(self, display=None, title=None,             # <<<<<<<<<<<<<<
@@ -68078,9 +70511,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
   PyObject *__pyx_v_position = 0;
   PyObject *__pyx_v_size = 0;
   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("createDraw (wrapper)", 0);
@@ -68090,7 +70520,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
 
-    /* "PETSc/Viewer.pyx":199
+    /* "PETSc/Viewer.pyx":191
  * 
  *     def createDraw(self, display=None, title=None,
  *                    position=None, size=None, comm=None):             # <<<<<<<<<<<<<<
@@ -68141,7 +70571,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDraw") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDraw") < 0)) __PYX_ERR(27, 190, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -68162,7 +70592,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createDraw", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createDraw", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 190, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createDraw", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -68170,7 +70600,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_display, __pyx_v_title, __pyx_v_position, __pyx_v_size, __pyx_v_comm);
 
-  /* "PETSc/Viewer.pyx":198
+  /* "PETSc/Viewer.pyx":190
  *         return self
  * 
  *     def createDraw(self, display=None, title=None,             # <<<<<<<<<<<<<<
@@ -68206,24 +70636,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createDraw", 0);
   __Pyx_INCREF(__pyx_v_display);
   __Pyx_INCREF(__pyx_v_title);
 
-  /* "PETSc/Viewer.pyx":200
+  /* "PETSc/Viewer.pyx":192
  *     def createDraw(self, display=None, title=None,
  *                    position=None, size=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cdisplay = NULL
  *         cdef const_char *ctitle = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 192, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":201
+  /* "PETSc/Viewer.pyx":193
  *                    position=None, size=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cdisplay = NULL             # <<<<<<<<<<<<<<
@@ -68232,7 +70659,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   __pyx_v_cdisplay = NULL;
 
-  /* "PETSc/Viewer.pyx":202
+  /* "PETSc/Viewer.pyx":194
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cdisplay = NULL
  *         cdef const_char *ctitle = NULL             # <<<<<<<<<<<<<<
@@ -68241,31 +70668,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   __pyx_v_ctitle = NULL;
 
-  /* "PETSc/Viewer.pyx":203
+  /* "PETSc/Viewer.pyx":195
  *         cdef const_char *cdisplay = NULL
  *         cdef const_char *ctitle = NULL
  *         display = str2bytes(display, &cdisplay)             # <<<<<<<<<<<<<<
  *         title = str2bytes(title, &ctitle)
  *         cdef int x, y, h, w
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_display, (&__pyx_v_cdisplay)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_display, (&__pyx_v_cdisplay)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_display, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":204
+  /* "PETSc/Viewer.pyx":196
  *         cdef const_char *ctitle = NULL
  *         display = str2bytes(display, &cdisplay)
  *         title = str2bytes(title, &ctitle)             # <<<<<<<<<<<<<<
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_title, (&__pyx_v_ctitle)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_title, (&__pyx_v_ctitle)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 196, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_title, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":206
+  /* "PETSc/Viewer.pyx":198
  *         title = str2bytes(title, &ctitle)
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -68277,7 +70704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   __pyx_v_h = PETSC_DECIDE;
   __pyx_v_w = PETSC_DECIDE;
 
-  /* "PETSc/Viewer.pyx":207
+  /* "PETSc/Viewer.pyx":199
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -68286,19 +70713,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   __Pyx_INCREF(__pyx_v_position);
   __pyx_t_2 = __pyx_v_position;
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 199, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(27, 199, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_5) {
   } else {
     __pyx_t_3 = __pyx_t_5;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_4 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 199, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 199, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(27, 199, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_3 = __pyx_t_5;
   __pyx_L4_bool_binop_done:;
@@ -68306,7 +70733,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   __pyx_t_5 = (__pyx_t_3 != 0);
   if (__pyx_t_5) {
 
-    /* "PETSc/Viewer.pyx":208
+    /* "PETSc/Viewer.pyx":200
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position             # <<<<<<<<<<<<<<
@@ -68323,7 +70750,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[27]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(27, 200, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -68336,21 +70763,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
       __Pyx_INCREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 200, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 200, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_4 = PyObject_GetIter(__pyx_v_position); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_GetIter(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 200, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext;
       index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_2);
       index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_4), 2) < 0) __PYX_ERR(27, 200, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       goto __pyx_L7_unpacking_done;
@@ -68358,20 +70785,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[27]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(27, 200, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
-    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 200, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 200, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_x = __pyx_t_8;
     __pyx_v_y = __pyx_t_9;
-    goto __pyx_L3;
+
+    /* "PETSc/Viewer.pyx":199
+ *         cdef int x, y, h, w
+ *         x = y = h = w = PETSC_DECIDE
+ *         if position not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
+ *             x, y = position
+ *         if size not in (None, PETSC_DECIDE):
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Viewer.pyx":209
+  /* "PETSc/Viewer.pyx":201
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -68380,19 +70813,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   __Pyx_INCREF(__pyx_v_size);
   __pyx_t_6 = __pyx_v_size;
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 201, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(27, 201, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
   } else {
     __pyx_t_5 = __pyx_t_3;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 201, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 201, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(27, 201, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_5 = __pyx_t_3;
   __pyx_L9_bool_binop_done:;
@@ -68400,7 +70833,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   __pyx_t_3 = (__pyx_t_5 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Viewer.pyx":210
+    /* "PETSc/Viewer.pyx":202
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):
  *             try:             # <<<<<<<<<<<<<<
@@ -68408,13 +70841,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  *             except TypeError:
  */
     {
+      __Pyx_PyThreadState_declare
+      __Pyx_PyThreadState_assign
       __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
       __Pyx_XGOTREF(__pyx_t_10);
       __Pyx_XGOTREF(__pyx_t_11);
       __Pyx_XGOTREF(__pyx_t_12);
       /*try:*/ {
 
-        /* "PETSc/Viewer.pyx":211
+        /* "PETSc/Viewer.pyx":203
  *         if size not in (None, PETSC_DECIDE):
  *             try:
  *                 w, h = size             # <<<<<<<<<<<<<<
@@ -68431,7 +70866,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            {__pyx_filename = __pyx_f[27]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __PYX_ERR(27, 203, __pyx_L11_error)
           }
           #if CYTHON_COMPILING_IN_CPYTHON
           if (likely(PyTuple_CheckExact(sequence))) {
@@ -68444,21 +70879,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
           __Pyx_INCREF(__pyx_t_6);
           __Pyx_INCREF(__pyx_t_4);
           #else
-          __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 203, __pyx_L11_error)
           __Pyx_GOTREF(__pyx_t_6);
-          __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 203, __pyx_L11_error)
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         } else {
           Py_ssize_t index = -1;
-          __pyx_t_2 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_2 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 203, __pyx_L11_error)
           __Pyx_GOTREF(__pyx_t_2);
           __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext;
           index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_6)) goto __pyx_L19_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_6);
           index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_4)) goto __pyx_L19_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_4);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) __PYX_ERR(27, 203, __pyx_L11_error)
           __pyx_t_7 = NULL;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           goto __pyx_L20_unpacking_done;
@@ -68466,48 +70901,57 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __pyx_t_7 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          {__pyx_filename = __pyx_f[27]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __PYX_ERR(27, 203, __pyx_L11_error)
           __pyx_L20_unpacking_done:;
         }
-        __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 203, __pyx_L11_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 203, __pyx_L11_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_v_w = __pyx_t_9;
         __pyx_v_h = __pyx_t_8;
+
+        /* "PETSc/Viewer.pyx":202
+ *             x, y = position
+ *         if size not in (None, PETSC_DECIDE):
+ *             try:             # <<<<<<<<<<<<<<
+ *                 w, h = size
+ *             except TypeError:
+ */
       }
       __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
       __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
       goto __pyx_L18_try_end;
       __pyx_L11_error:;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "PETSc/Viewer.pyx":212
+      /* "PETSc/Viewer.pyx":204
  *             try:
  *                 w, h = size
  *             except TypeError:             # <<<<<<<<<<<<<<
  *                 w = h = size
  *         cdef PetscViewer newvwr = NULL
  */
-      __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_TypeError);
+      __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
       if (__pyx_t_8) {
         __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createDraw", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
+        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_2) < 0) __PYX_ERR(27, 204, __pyx_L13_except_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_GOTREF(__pyx_t_2);
 
-        /* "PETSc/Viewer.pyx":213
+        /* "PETSc/Viewer.pyx":205
  *                 w, h = size
  *             except TypeError:
  *                 w = h = size             # <<<<<<<<<<<<<<
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerDrawOpen(ccomm, cdisplay, ctitle,
  */
-        __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
+        __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 205, __pyx_L13_except_error)
         __pyx_v_w = __pyx_t_8;
         __pyx_v_h = __pyx_t_8;
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -68517,23 +70961,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
       }
       goto __pyx_L13_except_error;
       __pyx_L13_except_error:;
+
+      /* "PETSc/Viewer.pyx":202
+ *             x, y = position
+ *         if size not in (None, PETSC_DECIDE):
+ *             try:             # <<<<<<<<<<<<<<
+ *                 w, h = size
+ *             except TypeError:
+ */
+      __Pyx_PyThreadState_assign
       __Pyx_XGIVEREF(__pyx_t_10);
       __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_XGIVEREF(__pyx_t_12);
       __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
       goto __pyx_L1_error;
       __pyx_L12_exception_handled:;
+      __Pyx_PyThreadState_assign
       __Pyx_XGIVEREF(__pyx_t_10);
       __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_XGIVEREF(__pyx_t_12);
       __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
       __pyx_L18_try_end:;
     }
-    goto __pyx_L8;
+
+    /* "PETSc/Viewer.pyx":201
+ *         if position not in (None, PETSC_DECIDE):
+ *             x, y = position
+ *         if size not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
+ *             try:
+ *                 w, h = size
+ */
   }
-  __pyx_L8:;
 
-  /* "PETSc/Viewer.pyx":214
+  /* "PETSc/Viewer.pyx":206
  *             except TypeError:
  *                 w = h = size
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -68542,16 +71002,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":215
+  /* "PETSc/Viewer.pyx":207
  *                 w = h = size
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerDrawOpen(ccomm, cdisplay, ctitle,             # <<<<<<<<<<<<<<
  *                                     x, y, w, h, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDrawOpen(__pyx_v_ccomm, __pyx_v_cdisplay, __pyx_v_ctitle, __pyx_v_x, __pyx_v_y, __pyx_v_w, __pyx_v_h, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDrawOpen(__pyx_v_ccomm, __pyx_v_cdisplay, __pyx_v_ctitle, __pyx_v_x, __pyx_v_y, __pyx_v_w, __pyx_v_h, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(27, 207, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":217
+  /* "PETSc/Viewer.pyx":209
  *         CHKERR( PetscViewerDrawOpen(ccomm, cdisplay, ctitle,
  *                                     x, y, w, h, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -68561,7 +71021,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":218
+  /* "PETSc/Viewer.pyx":210
  *                                     x, y, w, h, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         return self             # <<<<<<<<<<<<<<
@@ -68573,7 +71033,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":198
+  /* "PETSc/Viewer.pyx":190
  *         return self
  * 
  *     def createDraw(self, display=None, title=None,             # <<<<<<<<<<<<<<
@@ -68596,7 +71056,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":220
+/* "PETSc/Viewer.pyx":212
  *         return self
  * 
  *     def setType(self, vwr_type):             # <<<<<<<<<<<<<<
@@ -68609,9 +71069,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_25setType(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_6Viewer_24setType[] = "Viewer.setType(self, vwr_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_25setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_vwr_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);
@@ -68633,7 +71090,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_25setType(PyObject *__pyx_v_s
         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[27]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(27, 212, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -68644,7 +71101,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_25setType(PyObject *__pyx_v_s
   }
   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[27]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 212, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -68663,13 +71120,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewe
   __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_vwr_type);
 
-  /* "PETSc/Viewer.pyx":221
+  /* "PETSc/Viewer.pyx":213
  * 
  *     def setType(self, vwr_type):
  *         cdef PetscViewerType cval = NULL             # <<<<<<<<<<<<<<
@@ -68678,28 +71132,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewe
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Viewer.pyx":222
+  /* "PETSc/Viewer.pyx":214
  *     def setType(self, vwr_type):
  *         cdef PetscViewerType cval = NULL
  *         vwr_type = str2bytes(vwr_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerSetType(self.vwr, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_vwr_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_vwr_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_vwr_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":223
+  /* "PETSc/Viewer.pyx":215
  *         cdef PetscViewerType cval = NULL
  *         vwr_type = str2bytes(vwr_type, &cval)
  *         CHKERR( PetscViewerSetType(self.vwr, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(27, 215, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":220
+  /* "PETSc/Viewer.pyx":212
  *         return self
  * 
  *     def setType(self, vwr_type):             # <<<<<<<<<<<<<<
@@ -68721,7 +71175,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewe
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":225
+/* "PETSc/Viewer.pyx":217
  *         CHKERR( PetscViewerSetType(self.vwr, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -68752,12 +71206,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewe
   __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);
 
-  /* "PETSc/Viewer.pyx":226
+  /* "PETSc/Viewer.pyx":218
  * 
  *     def getType(self):
  *         cdef PetscViewerType cval = NULL             # <<<<<<<<<<<<<<
@@ -68766,30 +71217,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewe
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Viewer.pyx":227
+  /* "PETSc/Viewer.pyx":219
  *     def getType(self):
  *         cdef PetscViewerType cval = NULL
  *         CHKERR( PetscViewerGetType(self.vwr, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerGetType(__pyx_v_self->vwr, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerGetType(__pyx_v_self->vwr, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 219, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":228
+  /* "PETSc/Viewer.pyx":220
  *         cdef PetscViewerType cval = NULL
  *         CHKERR( PetscViewerGetType(self.vwr, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
  * 
- *     def setFormat(self, format):
+ *     def getFormat(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 220, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":225
+  /* "PETSc/Viewer.pyx":217
  *         CHKERR( PetscViewerSetType(self.vwr, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -68808,144 +71259,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewe
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":230
- *         return bytes2str(cval)
- * 
- *     def setFormat(self, format):             # <<<<<<<<<<<<<<
- *         CHKERR( PetscViewerSetFormat(self.vwr, format) )
- * 
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_29setFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_28setFormat[] = "Viewer.setFormat(self, format)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_29setFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_format = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFormat (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_format,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_format)) != 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, "setFormat") < 0)) {__pyx_filename = __pyx_f[27]; __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_format = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFormat", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setFormat", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_28setFormat(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_format);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28setFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PetscViewerFormat __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFormat", 0);
-
-  /* "PETSc/Viewer.pyx":231
- * 
- *     def setFormat(self, format):
- *         CHKERR( PetscViewerSetFormat(self.vwr, format) )             # <<<<<<<<<<<<<<
- * 
- *     def getFormat(self):
- */
-  __pyx_t_1 = ((PetscViewerFormat)PyInt_AsLong(__pyx_v_format)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetFormat(__pyx_v_self->vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/Viewer.pyx":230
+/* "PETSc/Viewer.pyx":222
  *         return bytes2str(cval)
  * 
- *     def setFormat(self, format):             # <<<<<<<<<<<<<<
- *         CHKERR( PetscViewerSetFormat(self.vwr, format) )
- * 
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setFormat", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/Viewer.pyx":233
- *         CHKERR( PetscViewerSetFormat(self.vwr, format) )
- * 
  *     def getFormat(self):             # <<<<<<<<<<<<<<
  *         cdef PetscViewerFormat format = PETSC_VIEWER_DEFAULT
  *         CHKERR( PetscViewerGetFormat(self.vwr, &format) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31getFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_30getFormat[] = "Viewer.getFormat(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31getFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_29getFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_28getFormat[] = "Viewer.getFormat(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_29getFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFormat (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getFormat", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFormat", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_30getFormat(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30getFormat(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(struct PyPetscViewerObject *__pyx_v_self) {
   PetscViewerFormat __pyx_v_format;
   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("getFormat", 0);
 
-  /* "PETSc/Viewer.pyx":234
+  /* "PETSc/Viewer.pyx":223
  * 
  *     def getFormat(self):
  *         cdef PetscViewerFormat format = PETSC_VIEWER_DEFAULT             # <<<<<<<<<<<<<<
@@ -68954,16 +71301,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30getFormat(struct PyPetscVie
  */
   __pyx_v_format = PETSC_VIEWER_DEFAULT;
 
-  /* "PETSc/Viewer.pyx":235
+  /* "PETSc/Viewer.pyx":224
  *     def getFormat(self):
  *         cdef PetscViewerFormat format = PETSC_VIEWER_DEFAULT
  *         CHKERR( PetscViewerGetFormat(self.vwr, &format) )             # <<<<<<<<<<<<<<
  *         return format
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerGetFormat(__pyx_v_self->vwr, (&__pyx_v_format))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerGetFormat(__pyx_v_self->vwr, (&__pyx_v_format))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 224, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":236
+  /* "PETSc/Viewer.pyx":225
  *         cdef PetscViewerFormat format = PETSC_VIEWER_DEFAULT
  *         CHKERR( PetscViewerGetFormat(self.vwr, &format) )
  *         return format             # <<<<<<<<<<<<<<
@@ -68971,14 +71318,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30getFormat(struct PyPetscVie
  *     def pushFormat(self, format):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscViewerFormat(__pyx_v_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 225, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":233
- *         CHKERR( PetscViewerSetFormat(self.vwr, format) )
+  /* "PETSc/Viewer.pyx":222
+ *         return bytes2str(cval)
  * 
  *     def getFormat(self):             # <<<<<<<<<<<<<<
  *         cdef PetscViewerFormat format = PETSC_VIEWER_DEFAULT
@@ -68996,7 +71343,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30getFormat(struct PyPetscVie
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":238
+/* "PETSc/Viewer.pyx":227
  *         return format
  * 
  *     def pushFormat(self, format):             # <<<<<<<<<<<<<<
@@ -69005,13 +71352,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30getFormat(struct PyPetscVie
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_33pushFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_32pushFormat[] = "Viewer.pushFormat(self, format)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_33pushFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31pushFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_30pushFormat[] = "Viewer.pushFormat(self, format)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31pushFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_format = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("pushFormat (wrapper)", 0);
@@ -69033,7 +71377,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_33pushFormat(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, "pushFormat") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pushFormat") < 0)) __PYX_ERR(27, 227, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -69044,40 +71388,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_33pushFormat(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pushFormat", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pushFormat", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 227, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.pushFormat", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_32pushFormat(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_format);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_30pushFormat(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_format);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32pushFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30pushFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscViewerFormat __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pushFormat", 0);
 
-  /* "PETSc/Viewer.pyx":239
+  /* "PETSc/Viewer.pyx":228
  * 
  *     def pushFormat(self, format):
  *         CHKERR( PetscViewerPushFormat(self.vwr, format) )             # <<<<<<<<<<<<<<
  * 
  *     def popFormat(self):
  */
-  __pyx_t_1 = ((PetscViewerFormat)PyInt_AsLong(__pyx_v_format)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerPushFormat(__pyx_v_self->vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscViewerFormat)__Pyx_PyInt_As_PetscViewerFormat(__pyx_v_format)); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 228, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerPushFormat(__pyx_v_self->vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(27, 228, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":238
+  /* "PETSc/Viewer.pyx":227
  *         return format
  * 
  *     def pushFormat(self, format):             # <<<<<<<<<<<<<<
@@ -69097,7 +71438,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32pushFormat(struct PyPetscVi
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":241
+/* "PETSc/Viewer.pyx":230
  *         CHKERR( PetscViewerPushFormat(self.vwr, format) )
  * 
  *     def popFormat(self):             # <<<<<<<<<<<<<<
@@ -69106,41 +71447,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32pushFormat(struct PyPetscVi
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35popFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_34popFormat[] = "Viewer.popFormat(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35popFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_33popFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_32popFormat[] = "Viewer.popFormat(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_33popFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("popFormat (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("popFormat", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "popFormat", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_34popFormat(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_32popFormat(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34popFormat(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32popFormat(struct PyPetscViewerObject *__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("popFormat", 0);
 
-  /* "PETSc/Viewer.pyx":242
+  /* "PETSc/Viewer.pyx":231
  * 
  *     def popFormat(self):
  *         CHKERR( PetscViewerPopFormat(self.vwr) )             # <<<<<<<<<<<<<<
  * 
  *     @classmethod
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerPopFormat(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerPopFormat(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 231, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":241
+  /* "PETSc/Viewer.pyx":230
  *         CHKERR( PetscViewerPushFormat(self.vwr, format) )
  * 
  *     def popFormat(self):             # <<<<<<<<<<<<<<
@@ -69160,7 +71498,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34popFormat(struct PyPetscVie
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":245
+/* "PETSc/Viewer.pyx":234
  * 
  *     @classmethod
  *     def STDOUT(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -69169,13 +71507,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34popFormat(struct PyPetscVie
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDOUT(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_36STDOUT[] = "Viewer.STDOUT(type cls, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDOUT(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDOUT(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_34STDOUT[] = "Viewer.STDOUT(type cls, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDOUT(PyObject *__pyx_v_cls, 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("STDOUT (wrapper)", 0);
@@ -69200,7 +71535,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDOUT(PyObject *__pyx_v_cl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "STDOUT") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "STDOUT") < 0)) __PYX_ERR(27, 234, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -69213,20 +71548,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDOUT(PyObject *__pyx_v_cl
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("STDOUT", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("STDOUT", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 234, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.STDOUT", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_36STDOUT(((PyObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDOUT(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = NULL;
@@ -69234,44 +71569,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDOUT(CYTHON_UNUSED PyObje
   MPI_Comm __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PetscViewer __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("STDOUT", 0);
 
-  /* "PETSc/Viewer.pyx":246
+  /* "PETSc/Viewer.pyx":235
  *     @classmethod
  *     def STDOUT(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_STDOUT_(ccomm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 235, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":247
+  /* "PETSc/Viewer.pyx":236
  *     def STDOUT(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()             # <<<<<<<<<<<<<<
  *         viewer.vwr = PETSC_VIEWER_STDOUT_(ccomm)
  *         PetscINCREF(viewer.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 236, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":248
+  /* "PETSc/Viewer.pyx":237
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_STDOUT_(ccomm)             # <<<<<<<<<<<<<<
  *         PetscINCREF(viewer.obj)
  *         return viewer
  */
-  __pyx_t_3 = PETSC_VIEWER_STDOUT_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PETSC_VIEWER_STDOUT_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) __PYX_ERR(27, 237, __pyx_L1_error)
   __pyx_v_viewer->vwr = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":249
+  /* "PETSc/Viewer.pyx":238
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_STDOUT_(ccomm)
  *         PetscINCREF(viewer.obj)             # <<<<<<<<<<<<<<
@@ -69280,7 +71612,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDOUT(CYTHON_UNUSED PyObje
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_viewer->__pyx_base.obj);
 
-  /* "PETSc/Viewer.pyx":250
+  /* "PETSc/Viewer.pyx":239
  *         viewer.vwr = PETSC_VIEWER_STDOUT_(ccomm)
  *         PetscINCREF(viewer.obj)
  *         return viewer             # <<<<<<<<<<<<<<
@@ -69292,7 +71624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDOUT(CYTHON_UNUSED PyObje
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":245
+  /* "PETSc/Viewer.pyx":234
  * 
  *     @classmethod
  *     def STDOUT(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -69312,7 +71644,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDOUT(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":253
+/* "PETSc/Viewer.pyx":242
  * 
  *     @classmethod
  *     def STDERR(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -69321,13 +71653,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDOUT(CYTHON_UNUSED PyObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39STDERR(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_38STDERR[] = "Viewer.STDERR(type cls, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39STDERR(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDERR(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_36STDERR[] = "Viewer.STDERR(type cls, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDERR(PyObject *__pyx_v_cls, 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("STDERR (wrapper)", 0);
@@ -69352,7 +71681,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39STDERR(PyObject *__pyx_v_cl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "STDERR") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "STDERR") < 0)) __PYX_ERR(27, 242, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -69365,20 +71694,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39STDERR(PyObject *__pyx_v_cl
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("STDERR", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("STDERR", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 242, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.STDERR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_38STDERR(((PyObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38STDERR(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = NULL;
@@ -69386,44 +71715,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38STDERR(CYTHON_UNUSED PyObje
   MPI_Comm __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PetscViewer __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("STDERR", 0);
 
-  /* "PETSc/Viewer.pyx":254
+  /* "PETSc/Viewer.pyx":243
  *     @classmethod
  *     def STDERR(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_STDERR_(ccomm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 243, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":255
+  /* "PETSc/Viewer.pyx":244
  *     def STDERR(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()             # <<<<<<<<<<<<<<
  *         viewer.vwr = PETSC_VIEWER_STDERR_(ccomm)
  *         PetscINCREF(viewer.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 244, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":256
+  /* "PETSc/Viewer.pyx":245
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_STDERR_(ccomm)             # <<<<<<<<<<<<<<
  *         PetscINCREF(viewer.obj)
  *         return viewer
  */
-  __pyx_t_3 = PETSC_VIEWER_STDERR_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PETSC_VIEWER_STDERR_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) __PYX_ERR(27, 245, __pyx_L1_error)
   __pyx_v_viewer->vwr = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":257
+  /* "PETSc/Viewer.pyx":246
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_STDERR_(ccomm)
  *         PetscINCREF(viewer.obj)             # <<<<<<<<<<<<<<
@@ -69432,7 +71758,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38STDERR(CYTHON_UNUSED PyObje
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_viewer->__pyx_base.obj);
 
-  /* "PETSc/Viewer.pyx":258
+  /* "PETSc/Viewer.pyx":247
  *         viewer.vwr = PETSC_VIEWER_STDERR_(ccomm)
  *         PetscINCREF(viewer.obj)
  *         return viewer             # <<<<<<<<<<<<<<
@@ -69444,7 +71770,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38STDERR(CYTHON_UNUSED PyObje
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":253
+  /* "PETSc/Viewer.pyx":242
  * 
  *     @classmethod
  *     def STDERR(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -69464,7 +71790,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38STDERR(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":261
+/* "PETSc/Viewer.pyx":250
  * 
  *     @classmethod
  *     def ASCII(cls, name, comm=None):             # <<<<<<<<<<<<<<
@@ -69473,14 +71799,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38STDERR(CYTHON_UNUSED PyObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41ASCII(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_40ASCII[] = "Viewer.ASCII(type cls, name, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41ASCII(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39ASCII(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_38ASCII[] = "Viewer.ASCII(type cls, name, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39ASCII(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   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("ASCII (wrapper)", 0);
@@ -69509,7 +71832,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41ASCII(PyObject *__pyx_v_cls
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ASCII") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ASCII") < 0)) __PYX_ERR(27, 250, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -69524,20 +71847,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41ASCII(PyObject *__pyx_v_cls
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ASCII", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("ASCII", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 250, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.ASCII", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_40ASCII(((PyObject*)__pyx_v_cls), __pyx_v_name, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_38ASCII(((PyTypeObject*)__pyx_v_cls), __pyx_v_name, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40ASCII(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38ASCII(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   const char *__pyx_v_cname;
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
@@ -69546,23 +71869,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40ASCII(CYTHON_UNUSED PyObjec
   MPI_Comm __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("ASCII", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":262
+  /* "PETSc/Viewer.pyx":251
  *     @classmethod
  *     def ASCII(cls, name, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 251, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":263
+  /* "PETSc/Viewer.pyx":252
  *     def ASCII(cls, name, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -69571,40 +71891,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40ASCII(CYTHON_UNUSED PyObjec
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":264
+  /* "PETSc/Viewer.pyx":253
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef Viewer viewer = Viewer()
  *         CHKERR( PetscViewerASCIIOpen(ccomm, cname, &viewer.vwr) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":265
+  /* "PETSc/Viewer.pyx":254
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef Viewer viewer = Viewer()             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerASCIIOpen(ccomm, cname, &viewer.vwr) )
  *         return viewer
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":266
+  /* "PETSc/Viewer.pyx":255
  *         name = str2bytes(name, &cname)
  *         cdef Viewer viewer = Viewer()
  *         CHKERR( PetscViewerASCIIOpen(ccomm, cname, &viewer.vwr) )             # <<<<<<<<<<<<<<
  *         return viewer
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIOpen(__pyx_v_ccomm, __pyx_v_cname, (&__pyx_v_viewer->vwr))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIOpen(__pyx_v_ccomm, __pyx_v_cname, (&__pyx_v_viewer->vwr))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(27, 255, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":267
+  /* "PETSc/Viewer.pyx":256
  *         cdef Viewer viewer = Viewer()
  *         CHKERR( PetscViewerASCIIOpen(ccomm, cname, &viewer.vwr) )
  *         return viewer             # <<<<<<<<<<<<<<
@@ -69616,7 +71936,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40ASCII(CYTHON_UNUSED PyObjec
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":261
+  /* "PETSc/Viewer.pyx":250
  * 
  *     @classmethod
  *     def ASCII(cls, name, comm=None):             # <<<<<<<<<<<<<<
@@ -69637,7 +71957,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40ASCII(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":270
+/* "PETSc/Viewer.pyx":259
  * 
  *     @classmethod
  *     def BINARY(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -69646,13 +71966,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40ASCII(CYTHON_UNUSED PyObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43BINARY(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_42BINARY[] = "Viewer.BINARY(type cls, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43BINARY(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41BINARY(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_40BINARY[] = "Viewer.BINARY(type cls, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41BINARY(PyObject *__pyx_v_cls, 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("BINARY (wrapper)", 0);
@@ -69677,7 +71994,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43BINARY(PyObject *__pyx_v_cl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "BINARY") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "BINARY") < 0)) __PYX_ERR(27, 259, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -69690,20 +72007,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43BINARY(PyObject *__pyx_v_cl
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("BINARY", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("BINARY", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 259, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.BINARY", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_42BINARY(((PyObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42BINARY(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = NULL;
@@ -69711,44 +72028,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42BINARY(CYTHON_UNUSED PyObje
   MPI_Comm __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PetscViewer __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("BINARY", 0);
 
-  /* "PETSc/Viewer.pyx":271
+  /* "PETSc/Viewer.pyx":260
  *     @classmethod
  *     def BINARY(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_BINARY_(ccomm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 260, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":272
+  /* "PETSc/Viewer.pyx":261
  *     def BINARY(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()             # <<<<<<<<<<<<<<
  *         viewer.vwr = PETSC_VIEWER_BINARY_(ccomm)
  *         PetscINCREF(viewer.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":273
+  /* "PETSc/Viewer.pyx":262
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_BINARY_(ccomm)             # <<<<<<<<<<<<<<
  *         PetscINCREF(viewer.obj)
  *         return viewer
  */
-  __pyx_t_3 = PETSC_VIEWER_BINARY_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PETSC_VIEWER_BINARY_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) __PYX_ERR(27, 262, __pyx_L1_error)
   __pyx_v_viewer->vwr = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":274
+  /* "PETSc/Viewer.pyx":263
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_BINARY_(ccomm)
  *         PetscINCREF(viewer.obj)             # <<<<<<<<<<<<<<
@@ -69757,7 +72071,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42BINARY(CYTHON_UNUSED PyObje
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_viewer->__pyx_base.obj);
 
-  /* "PETSc/Viewer.pyx":275
+  /* "PETSc/Viewer.pyx":264
  *         viewer.vwr = PETSC_VIEWER_BINARY_(ccomm)
  *         PetscINCREF(viewer.obj)
  *         return viewer             # <<<<<<<<<<<<<<
@@ -69769,7 +72083,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42BINARY(CYTHON_UNUSED PyObje
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":270
+  /* "PETSc/Viewer.pyx":259
  * 
  *     @classmethod
  *     def BINARY(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -69789,7 +72103,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42BINARY(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":278
+/* "PETSc/Viewer.pyx":267
  * 
  *     @classmethod
  *     def DRAW(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -69798,13 +72112,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42BINARY(CYTHON_UNUSED PyObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_45DRAW(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_44DRAW[] = "Viewer.DRAW(type cls, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_45DRAW(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43DRAW(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_42DRAW[] = "Viewer.DRAW(type cls, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43DRAW(PyObject *__pyx_v_cls, 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("DRAW (wrapper)", 0);
@@ -69829,7 +72140,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_45DRAW(PyObject *__pyx_v_cls,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "DRAW") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "DRAW") < 0)) __PYX_ERR(27, 267, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -69842,20 +72153,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_45DRAW(PyObject *__pyx_v_cls,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("DRAW", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("DRAW", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 267, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.DRAW", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_44DRAW(((PyObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_42DRAW(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44DRAW(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42DRAW(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = NULL;
@@ -69863,44 +72174,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44DRAW(CYTHON_UNUSED PyObject
   MPI_Comm __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PetscViewer __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("DRAW", 0);
 
-  /* "PETSc/Viewer.pyx":279
+  /* "PETSc/Viewer.pyx":268
  *     @classmethod
  *     def DRAW(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_DRAW_(ccomm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 268, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":280
+  /* "PETSc/Viewer.pyx":269
  *     def DRAW(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()             # <<<<<<<<<<<<<<
  *         viewer.vwr = PETSC_VIEWER_DRAW_(ccomm)
  *         PetscINCREF(viewer.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 269, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":281
+  /* "PETSc/Viewer.pyx":270
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_DRAW_(ccomm)             # <<<<<<<<<<<<<<
  *         PetscINCREF(viewer.obj)
  *         return viewer
  */
-  __pyx_t_3 = PETSC_VIEWER_DRAW_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PETSC_VIEWER_DRAW_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) __PYX_ERR(27, 270, __pyx_L1_error)
   __pyx_v_viewer->vwr = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":282
+  /* "PETSc/Viewer.pyx":271
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_DRAW_(ccomm)
  *         PetscINCREF(viewer.obj)             # <<<<<<<<<<<<<<
@@ -69909,7 +72217,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44DRAW(CYTHON_UNUSED PyObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_viewer->__pyx_base.obj);
 
-  /* "PETSc/Viewer.pyx":283
+  /* "PETSc/Viewer.pyx":272
  *         viewer.vwr = PETSC_VIEWER_DRAW_(ccomm)
  *         PetscINCREF(viewer.obj)
  *         return viewer             # <<<<<<<<<<<<<<
@@ -69921,7 +72229,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44DRAW(CYTHON_UNUSED PyObject
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":278
+  /* "PETSc/Viewer.pyx":267
  * 
  *     @classmethod
  *     def DRAW(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -69941,7 +72249,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44DRAW(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":287
+/* "PETSc/Viewer.pyx":276
  *     # --- methods specific to file viewers ---
  * 
  *     def flush(self):             # <<<<<<<<<<<<<<
@@ -69950,41 +72258,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44DRAW(CYTHON_UNUSED PyObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47flush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_46flush[] = "Viewer.flush(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47flush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_45flush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_44flush[] = "Viewer.flush(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_45flush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("flush (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("flush", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "flush", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_46flush(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_44flush(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46flush(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44flush(struct PyPetscViewerObject *__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("flush", 0);
 
-  /* "PETSc/Viewer.pyx":288
+  /* "PETSc/Viewer.pyx":277
  * 
  *     def flush(self):
  *         CHKERR( PetscViewerFlush(self.vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def setFileMode(self, mode):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFlush(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFlush(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 277, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":287
+  /* "PETSc/Viewer.pyx":276
  *     # --- methods specific to file viewers ---
  * 
  *     def flush(self):             # <<<<<<<<<<<<<<
@@ -70004,7 +72309,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46flush(struct PyPetscViewerO
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":290
+/* "PETSc/Viewer.pyx":279
  *         CHKERR( PetscViewerFlush(self.vwr) )
  * 
  *     def setFileMode(self, mode):             # <<<<<<<<<<<<<<
@@ -70013,13 +72318,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46flush(struct PyPetscViewerO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_49setFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_48setFileMode[] = "Viewer.setFileMode(self, mode)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_49setFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47setFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_46setFileMode[] = "Viewer.setFileMode(self, mode)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47setFileMode(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("setFileMode (wrapper)", 0);
@@ -70041,7 +72343,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_49setFileMode(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, "setFileMode") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFileMode") < 0)) __PYX_ERR(27, 279, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -70052,40 +72354,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_49setFileMode(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFileMode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFileMode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 279, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setFileMode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_48setFileMode(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_mode);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_46setFileMode(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48setFileMode(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_mode) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46setFileMode(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_mode) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscFileMode __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFileMode", 0);
 
-  /* "PETSc/Viewer.pyx":291
+  /* "PETSc/Viewer.pyx":280
  * 
  *     def setFileMode(self, mode):
  *         CHKERR( PetscViewerFileSetMode(self.vwr, filemode(mode)) )             # <<<<<<<<<<<<<<
  * 
  *     def getFileMode(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_1 == ((PetscFileMode)-1))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_1 == ((PetscFileMode)-1L))) __PYX_ERR(27, 280, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(27, 280, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":290
+  /* "PETSc/Viewer.pyx":279
  *         CHKERR( PetscViewerFlush(self.vwr) )
  * 
  *     def setFileMode(self, mode):             # <<<<<<<<<<<<<<
@@ -70105,7 +72404,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48setFileMode(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":293
+/* "PETSc/Viewer.pyx":282
  *         CHKERR( PetscViewerFileSetMode(self.vwr, filemode(mode)) )
  * 
  *     def getFileMode(self):             # <<<<<<<<<<<<<<
@@ -70114,34 +72413,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48setFileMode(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51getFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_50getFileMode[] = "Viewer.getFileMode(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51getFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_49getFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_48getFileMode[] = "Viewer.getFileMode(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_49getFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFileMode (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getFileMode", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFileMode", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_50getFileMode(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50getFileMode(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(struct PyPetscViewerObject *__pyx_v_self) {
   PetscFileMode __pyx_v_mode;
   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("getFileMode", 0);
 
-  /* "PETSc/Viewer.pyx":294
+  /* "PETSc/Viewer.pyx":283
  * 
  *     def getFileMode(self):
  *         cdef PetscFileMode mode = PETSC_FILE_MODE_READ             # <<<<<<<<<<<<<<
@@ -70150,16 +72446,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50getFileMode(struct PyPetscV
  */
   __pyx_v_mode = FILE_MODE_READ;
 
-  /* "PETSc/Viewer.pyx":295
+  /* "PETSc/Viewer.pyx":284
  *     def getFileMode(self):
  *         cdef PetscFileMode mode = PETSC_FILE_MODE_READ
  *         CHKERR( PetscViewerFileGetMode(self.vwr, &mode) )             # <<<<<<<<<<<<<<
  *         return mode
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileGetMode(__pyx_v_self->vwr, (&__pyx_v_mode))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileGetMode(__pyx_v_self->vwr, (&__pyx_v_mode))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 284, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":296
+  /* "PETSc/Viewer.pyx":285
  *         cdef PetscFileMode mode = PETSC_FILE_MODE_READ
  *         CHKERR( PetscViewerFileGetMode(self.vwr, &mode) )
  *         return mode             # <<<<<<<<<<<<<<
@@ -70167,13 +72463,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50getFileMode(struct PyPetscV
  *     def setFileName(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_mode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscFileMode(__pyx_v_mode); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 285, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":293
+  /* "PETSc/Viewer.pyx":282
  *         CHKERR( PetscViewerFileSetMode(self.vwr, filemode(mode)) )
  * 
  *     def getFileMode(self):             # <<<<<<<<<<<<<<
@@ -70192,7 +72488,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50getFileMode(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":298
+/* "PETSc/Viewer.pyx":287
  *         return mode
  * 
  *     def setFileName(self, name):             # <<<<<<<<<<<<<<
@@ -70201,13 +72497,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50getFileMode(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_53setFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_52setFileName[] = "Viewer.setFileName(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_53setFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51setFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_50setFileName[] = "Viewer.setFileName(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51setFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFileName (wrapper)", 0);
@@ -70229,7 +72522,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_53setFileName(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, "setFileName") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFileName") < 0)) __PYX_ERR(27, 287, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -70240,32 +72533,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_53setFileName(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFileName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFileName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 287, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setFileName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_52setFileName(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_50setFileName(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52setFileName(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50setFileName(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name) {
   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("setFileName", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":299
+  /* "PETSc/Viewer.pyx":288
  * 
  *     def setFileName(self, name):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -70274,28 +72564,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52setFileName(struct PyPetscV
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Viewer.pyx":300
+  /* "PETSc/Viewer.pyx":289
  *     def setFileName(self, name):
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetName(self.vwr, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":301
+  /* "PETSc/Viewer.pyx":290
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)
  *         CHKERR( PetscViewerFileSetName(self.vwr, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getFileName(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(27, 290, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":298
+  /* "PETSc/Viewer.pyx":287
  *         return mode
  * 
  *     def setFileName(self, name):             # <<<<<<<<<<<<<<
@@ -70317,7 +72607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52setFileName(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":303
+/* "PETSc/Viewer.pyx":292
  *         CHKERR( PetscViewerFileSetName(self.vwr, cval) )
  * 
  *     def getFileName(self):             # <<<<<<<<<<<<<<
@@ -70326,34 +72616,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52setFileName(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55getFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_54getFileName[] = "Viewer.getFileName(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55getFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_53getFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_52getFileName[] = "Viewer.getFileName(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_53getFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFileName (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getFileName", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFileName", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_54getFileName(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54getFileName(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(struct PyPetscViewerObject *__pyx_v_self) {
   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("getFileName", 0);
 
-  /* "PETSc/Viewer.pyx":304
+  /* "PETSc/Viewer.pyx":293
  * 
  *     def getFileName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -70362,16 +72649,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54getFileName(struct PyPetscV
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Viewer.pyx":305
+  /* "PETSc/Viewer.pyx":294
  *     def getFileName(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscViewerFileGetName(self.vwr, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileGetName(__pyx_v_self->vwr, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileGetName(__pyx_v_self->vwr, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 294, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":306
+  /* "PETSc/Viewer.pyx":295
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscViewerFileGetName(self.vwr, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -70379,13 +72666,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54getFileName(struct PyPetscV
  *     # --- methods specific to draw viewers ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 295, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":303
+  /* "PETSc/Viewer.pyx":292
  *         CHKERR( PetscViewerFileSetName(self.vwr, cval) )
  * 
  *     def getFileName(self):             # <<<<<<<<<<<<<<
@@ -70404,7 +72691,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54getFileName(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":310
+/* "PETSc/Viewer.pyx":299
  *     # --- methods specific to draw viewers ---
  * 
  *     def setDrawInfo(self,  display=None, title=None, position=None, size=None):             # <<<<<<<<<<<<<<
@@ -70413,16 +72700,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54getFileName(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_57setDrawInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_56setDrawInfo[] = "Viewer.setDrawInfo(self, display=None, title=None, position=None, size=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_57setDrawInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55setDrawInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_54setDrawInfo[] = "Viewer.setDrawInfo(self, display=None, title=None, position=None, size=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55setDrawInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_display = 0;
   PyObject *__pyx_v_title = 0;
   PyObject *__pyx_v_position = 0;
   PyObject *__pyx_v_size = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDrawInfo (wrapper)", 0);
@@ -70468,7 +72752,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_57setDrawInfo(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDrawInfo") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDrawInfo") < 0)) __PYX_ERR(27, 299, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -70487,20 +72771,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_57setDrawInfo(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDrawInfo", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDrawInfo", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 299, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setDrawInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_display, __pyx_v_title, __pyx_v_position, __pyx_v_size);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_display, __pyx_v_title, __pyx_v_position, __pyx_v_size);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_display, PyObject *__pyx_v_title, PyObject *__pyx_v_position, PyObject *__pyx_v_size) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_display, PyObject *__pyx_v_title, PyObject *__pyx_v_position, PyObject *__pyx_v_size) {
   const char *__pyx_v_cdisplay;
   const char *__pyx_v_ctitle;
   int __pyx_v_x;
@@ -70520,14 +72804,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setDrawInfo", 0);
   __Pyx_INCREF(__pyx_v_display);
   __Pyx_INCREF(__pyx_v_title);
 
-  /* "PETSc/Viewer.pyx":311
+  /* "PETSc/Viewer.pyx":300
  * 
  *     def setDrawInfo(self,  display=None, title=None, position=None, size=None):
  *         cdef const_char *cdisplay = NULL             # <<<<<<<<<<<<<<
@@ -70536,7 +72817,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
  */
   __pyx_v_cdisplay = NULL;
 
-  /* "PETSc/Viewer.pyx":312
+  /* "PETSc/Viewer.pyx":301
  *     def setDrawInfo(self,  display=None, title=None, position=None, size=None):
  *         cdef const_char *cdisplay = NULL
  *         cdef const_char *ctitle = NULL             # <<<<<<<<<<<<<<
@@ -70545,31 +72826,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
  */
   __pyx_v_ctitle = NULL;
 
-  /* "PETSc/Viewer.pyx":313
+  /* "PETSc/Viewer.pyx":302
  *         cdef const_char *cdisplay = NULL
  *         cdef const_char *ctitle = NULL
  *         display = str2bytes(display, &cdisplay)             # <<<<<<<<<<<<<<
  *         title = str2bytes(title, &ctitle)
  *         cdef int x, y, h, w
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_display, (&__pyx_v_cdisplay)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_display, (&__pyx_v_cdisplay)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 302, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_display, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":314
+  /* "PETSc/Viewer.pyx":303
  *         cdef const_char *ctitle = NULL
  *         display = str2bytes(display, &cdisplay)
  *         title = str2bytes(title, &ctitle)             # <<<<<<<<<<<<<<
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_title, (&__pyx_v_ctitle)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_title, (&__pyx_v_ctitle)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_title, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":316
+  /* "PETSc/Viewer.pyx":305
  *         title = str2bytes(title, &ctitle)
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -70581,7 +72862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
   __pyx_v_h = PETSC_DECIDE;
   __pyx_v_w = PETSC_DECIDE;
 
-  /* "PETSc/Viewer.pyx":317
+  /* "PETSc/Viewer.pyx":306
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -70590,19 +72871,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
  */
   __Pyx_INCREF(__pyx_v_position);
   __pyx_t_1 = __pyx_v_position;
-  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 306, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(27, 306, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (__pyx_t_4) {
   } else {
     __pyx_t_2 = __pyx_t_4;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_3 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 306, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 306, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(27, 306, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_2 = __pyx_t_4;
   __pyx_L4_bool_binop_done:;
@@ -70610,7 +72891,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
   __pyx_t_4 = (__pyx_t_2 != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/Viewer.pyx":318
+    /* "PETSc/Viewer.pyx":307
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position             # <<<<<<<<<<<<<<
@@ -70627,7 +72908,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[27]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(27, 307, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -70640,21 +72921,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
       __Pyx_INCREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 307, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 307, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_3 = PyObject_GetIter(__pyx_v_position); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_GetIter(__pyx_v_position); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 307, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext;
       index = 0; __pyx_t_1 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_1);
       index = 1; __pyx_t_5 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_3), 2) < 0) __PYX_ERR(27, 307, __pyx_L1_error)
       __pyx_t_6 = NULL;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       goto __pyx_L7_unpacking_done;
@@ -70662,20 +72943,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_6 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[27]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(27, 307, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
-    __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 307, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 307, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_v_x = __pyx_t_7;
     __pyx_v_y = __pyx_t_8;
-    goto __pyx_L3;
+
+    /* "PETSc/Viewer.pyx":306
+ *         cdef int x, y, h, w
+ *         x = y = h = w = PETSC_DECIDE
+ *         if position not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
+ *             x, y = position
+ *         if size not in (None, PETSC_DECIDE):
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Viewer.pyx":319
+  /* "PETSc/Viewer.pyx":308
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -70684,19 +72971,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
  */
   __Pyx_INCREF(__pyx_v_size);
   __pyx_t_5 = __pyx_v_size;
-  __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 308, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(27, 308, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
   } else {
     __pyx_t_4 = __pyx_t_2;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 308, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 308, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(27, 308, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_4 = __pyx_t_2;
   __pyx_L9_bool_binop_done:;
@@ -70704,7 +72991,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
   __pyx_t_2 = (__pyx_t_4 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Viewer.pyx":320
+    /* "PETSc/Viewer.pyx":309
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):
  *             try:             # <<<<<<<<<<<<<<
@@ -70712,13 +72999,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
  *             except TypeError:
  */
     {
+      __Pyx_PyThreadState_declare
+      __Pyx_PyThreadState_assign
       __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
       __Pyx_XGOTREF(__pyx_t_9);
       __Pyx_XGOTREF(__pyx_t_10);
       __Pyx_XGOTREF(__pyx_t_11);
       /*try:*/ {
 
-        /* "PETSc/Viewer.pyx":321
+        /* "PETSc/Viewer.pyx":310
  *         if size not in (None, PETSC_DECIDE):
  *             try:
  *                 w, h = size             # <<<<<<<<<<<<<<
@@ -70735,7 +73024,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            {__pyx_filename = __pyx_f[27]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __PYX_ERR(27, 310, __pyx_L11_error)
           }
           #if CYTHON_COMPILING_IN_CPYTHON
           if (likely(PyTuple_CheckExact(sequence))) {
@@ -70748,21 +73037,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
           __Pyx_INCREF(__pyx_t_5);
           __Pyx_INCREF(__pyx_t_3);
           #else
-          __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 310, __pyx_L11_error)
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 310, __pyx_L11_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         } else {
           Py_ssize_t index = -1;
-          __pyx_t_1 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_1 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 310, __pyx_L11_error)
           __Pyx_GOTREF(__pyx_t_1);
           __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
           index = 0; __pyx_t_5 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_5)) goto __pyx_L19_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_5);
           index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L19_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_3);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 2) < 0) __PYX_ERR(27, 310, __pyx_L11_error)
           __pyx_t_6 = NULL;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           goto __pyx_L20_unpacking_done;
@@ -70770,48 +73059,57 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_t_6 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          {__pyx_filename = __pyx_f[27]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __PYX_ERR(27, 310, __pyx_L11_error)
           __pyx_L20_unpacking_done:;
         }
-        __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 310, __pyx_L11_error)
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 310, __pyx_L11_error)
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_v_w = __pyx_t_8;
         __pyx_v_h = __pyx_t_7;
+
+        /* "PETSc/Viewer.pyx":309
+ *             x, y = position
+ *         if size not in (None, PETSC_DECIDE):
+ *             try:             # <<<<<<<<<<<<<<
+ *                 w, h = size
+ *             except TypeError:
+ */
       }
       __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
       __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
       goto __pyx_L18_try_end;
       __pyx_L11_error:;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "PETSc/Viewer.pyx":322
+      /* "PETSc/Viewer.pyx":311
  *             try:
  *                 w, h = size
  *             except TypeError:             # <<<<<<<<<<<<<<
  *                 w = h = size
  *         CHKERR( PetscViewerDrawSetInfo(self.vwr,
  */
-      __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError);
+      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
       if (__pyx_t_7) {
         __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setDrawInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
+        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(27, 311, __pyx_L13_except_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_GOTREF(__pyx_t_1);
 
-        /* "PETSc/Viewer.pyx":323
+        /* "PETSc/Viewer.pyx":312
  *                 w, h = size
  *             except TypeError:
  *                 w = h = size             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerDrawSetInfo(self.vwr,
  *                                        cdisplay, ctitle,
  */
-        __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
+        __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 312, __pyx_L13_except_error)
         __pyx_v_w = __pyx_t_7;
         __pyx_v_h = __pyx_t_7;
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -70821,32 +73119,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
       }
       goto __pyx_L13_except_error;
       __pyx_L13_except_error:;
+
+      /* "PETSc/Viewer.pyx":309
+ *             x, y = position
+ *         if size not in (None, PETSC_DECIDE):
+ *             try:             # <<<<<<<<<<<<<<
+ *                 w, h = size
+ *             except TypeError:
+ */
+      __Pyx_PyThreadState_assign
       __Pyx_XGIVEREF(__pyx_t_9);
       __Pyx_XGIVEREF(__pyx_t_10);
       __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
       goto __pyx_L1_error;
       __pyx_L12_exception_handled:;
+      __Pyx_PyThreadState_assign
       __Pyx_XGIVEREF(__pyx_t_9);
       __Pyx_XGIVEREF(__pyx_t_10);
       __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
       __pyx_L18_try_end:;
     }
-    goto __pyx_L8;
+
+    /* "PETSc/Viewer.pyx":308
+ *         if position not in (None, PETSC_DECIDE):
+ *             x, y = position
+ *         if size not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
+ *             try:
+ *                 w, h = size
+ */
   }
-  __pyx_L8:;
 
-  /* "PETSc/Viewer.pyx":324
+  /* "PETSc/Viewer.pyx":313
  *             except TypeError:
  *                 w = h = size
  *         CHKERR( PetscViewerDrawSetInfo(self.vwr,             # <<<<<<<<<<<<<<
  *                                        cdisplay, ctitle,
  *                                        x, y, w, h) )
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDrawSetInfo(__pyx_v_self->vwr, __pyx_v_cdisplay, __pyx_v_ctitle, __pyx_v_x, __pyx_v_y, __pyx_v_w, __pyx_v_h)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDrawSetInfo(__pyx_v_self->vwr, __pyx_v_cdisplay, __pyx_v_ctitle, __pyx_v_x, __pyx_v_y, __pyx_v_w, __pyx_v_h)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(27, 313, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":310
+  /* "PETSc/Viewer.pyx":299
  *     # --- methods specific to draw viewers ---
  * 
  *     def setDrawInfo(self,  display=None, title=None, position=None, size=None):             # <<<<<<<<<<<<<<
@@ -70871,7 +73185,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":328
+/* "PETSc/Viewer.pyx":317
  *                                        x, y, w, h) )
  * 
  *     def clearDraw(self):             # <<<<<<<<<<<<<<
@@ -70880,41 +73194,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56setDrawInfo(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_59clearDraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_58clearDraw[] = "Viewer.clearDraw(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_59clearDraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_57clearDraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_56clearDraw[] = "Viewer.clearDraw(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_57clearDraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("clearDraw (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("clearDraw", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "clearDraw", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_58clearDraw(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_56clearDraw(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_58clearDraw(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56clearDraw(struct PyPetscViewerObject *__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("clearDraw", 0);
 
-  /* "PETSc/Viewer.pyx":329
+  /* "PETSc/Viewer.pyx":318
  * 
  *     def clearDraw(self):
  *         CHKERR( PetscViewerDrawClear(self.vwr) )             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDrawClear(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDrawClear(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 318, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":328
+  /* "PETSc/Viewer.pyx":317
  *                                        x, y, w, h) )
  * 
  *     def clearDraw(self):             # <<<<<<<<<<<<<<
@@ -70934,7 +73245,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_58clearDraw(struct PyPetscVie
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":335
+/* "PETSc/Viewer.pyx":324
  * cdef class ViewerHDF5(Viewer):
  * 
  *     def create(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -70949,9 +73260,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_1create(PyObject *__pyx_
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_mode = 0;
   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);
@@ -70987,7 +73295,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_1create(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(27, 324, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -71004,7 +73312,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_1create(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 324, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.ViewerHDF5.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -71028,23 +73336,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
   PyObject *__pyx_t_2 = NULL;
   PetscFileMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":336
+  /* "PETSc/Viewer.pyx":325
  * 
  *     def create(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 325, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":337
+  /* "PETSc/Viewer.pyx":326
  *     def create(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -71053,29 +73358,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":338
+  /* "PETSc/Viewer.pyx":327
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":339
+  /* "PETSc/Viewer.pyx":328
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)             # <<<<<<<<<<<<<<
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1))) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)-1L))) __PYX_ERR(27, 328, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":340
+  /* "PETSc/Viewer.pyx":329
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -71084,16 +73389,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":341
+  /* "PETSc/Viewer.pyx":330
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERHDF5) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 330, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":342
+  /* "PETSc/Viewer.pyx":331
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -71103,34 +73408,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
   __pyx_v_self->__pyx_base.vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":343
+  /* "PETSc/Viewer.pyx":332
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERHDF5) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->__pyx_base.vwr, PETSCVIEWERHDF5)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->__pyx_base.vwr, PETSCVIEWERHDF5)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 332, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":344
+  /* "PETSc/Viewer.pyx":333
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERHDF5) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->__pyx_base.vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->__pyx_base.vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 333, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":345
+  /* "PETSc/Viewer.pyx":334
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERHDF5) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->__pyx_base.vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->__pyx_base.vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(27, 334, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":346
+  /* "PETSc/Viewer.pyx":335
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
@@ -71142,7 +73447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":335
+  /* "PETSc/Viewer.pyx":324
  * cdef class ViewerHDF5(Viewer):
  * 
  *     def create(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -71162,7 +73467,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":348
+/* "PETSc/Viewer.pyx":337
  *         return self
  * 
  *     def getTimestep(self):             # <<<<<<<<<<<<<<
@@ -71193,12 +73498,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __py
   __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("getTimestep", 0);
 
-  /* "PETSc/Viewer.pyx":349
+  /* "PETSc/Viewer.pyx":338
  * 
  *     def getTimestep(self):
  *         cdef PetscInt ctimestep = 0             # <<<<<<<<<<<<<<
@@ -71207,16 +73509,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __py
  */
   __pyx_v_ctimestep = 0;
 
-  /* "PETSc/Viewer.pyx":350
+  /* "PETSc/Viewer.pyx":339
  *     def getTimestep(self):
  *         cdef PetscInt ctimestep = 0
  *         CHKERR( PetscViewerHDF5GetTimestep(self.vwr, &ctimestep) )             # <<<<<<<<<<<<<<
  *         return toInt(ctimestep)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5GetTimestep(__pyx_v_self->__pyx_base.vwr, (&__pyx_v_ctimestep))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5GetTimestep(__pyx_v_self->__pyx_base.vwr, (&__pyx_v_ctimestep))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 339, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":351
+  /* "PETSc/Viewer.pyx":340
  *         cdef PetscInt ctimestep = 0
  *         CHKERR( PetscViewerHDF5GetTimestep(self.vwr, &ctimestep) )
  *         return toInt(ctimestep)             # <<<<<<<<<<<<<<
@@ -71224,13 +73526,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __py
  *     def setTimestep(self, timestep):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ctimestep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ctimestep); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":348
+  /* "PETSc/Viewer.pyx":337
  *         return self
  * 
  *     def getTimestep(self):             # <<<<<<<<<<<<<<
@@ -71249,7 +73551,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":353
+/* "PETSc/Viewer.pyx":342
  *         return toInt(ctimestep)
  * 
  *     def setTimestep(self, timestep):             # <<<<<<<<<<<<<<
@@ -71262,9 +73564,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_5setTimestep(PyObject *_
 static char __pyx_doc_8petsc4py_5PETSc_10ViewerHDF5_4setTimestep[] = "ViewerHDF5.setTimestep(self, timestep)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_5setTimestep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_timestep = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTimestep (wrapper)", 0);
@@ -71286,7 +73585,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_5setTimestep(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTimestep") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTimestep") < 0)) __PYX_ERR(27, 342, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -71297,7 +73596,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_5setTimestep(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTimestep", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTimestep", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 342, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.ViewerHDF5.setTimestep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -71315,22 +73614,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_4setTimestep(struct __py
   __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("setTimestep", 0);
 
-  /* "PETSc/Viewer.pyx":354
+  /* "PETSc/Viewer.pyx":343
  * 
  *     def setTimestep(self, timestep):
  *         CHKERR( PetscViewerHDF5SetTimestep(self.vwr, asInt(timestep)) )             # <<<<<<<<<<<<<<
  * 
- *     def incrementTimestep(self, timestep):
+ *     def incrementTimestep(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_timestep); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5SetTimestep(__pyx_v_self->__pyx_base.vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_timestep); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(27, 343, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5SetTimestep(__pyx_v_self->__pyx_base.vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(27, 343, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":353
+  /* "PETSc/Viewer.pyx":342
  *         return toInt(ctimestep)
  * 
  *     def setTimestep(self, timestep):             # <<<<<<<<<<<<<<
@@ -71350,89 +73646,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_4setTimestep(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":356
+/* "PETSc/Viewer.pyx":345
  *         CHKERR( PetscViewerHDF5SetTimestep(self.vwr, asInt(timestep)) )
  * 
- *     def incrementTimestep(self, timestep):             # <<<<<<<<<<<<<<
+ *     def incrementTimestep(self):             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerHDF5IncrementTimestep(self.vwr) )
  * 
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_7incrementTimestep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep[] = "ViewerHDF5.incrementTimestep(self, timestep)";
+static char __pyx_doc_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep[] = "ViewerHDF5.incrementTimestep(self)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_7incrementTimestep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED PyObject *__pyx_v_timestep = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("incrementTimestep (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_timestep,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_timestep)) != 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, "incrementTimestep") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 356; __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_timestep = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("incrementTimestep", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.ViewerHDF5.incrementTimestep", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(((struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *)__pyx_v_self), __pyx_v_timestep);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("incrementTimestep", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "incrementTimestep", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(((struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_timestep) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5 *__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("incrementTimestep", 0);
 
-  /* "PETSc/Viewer.pyx":357
+  /* "PETSc/Viewer.pyx":346
  * 
- *     def incrementTimestep(self, timestep):
+ *     def incrementTimestep(self):
  *         CHKERR( PetscViewerHDF5IncrementTimestep(self.vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def pushGroup(self, group):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5IncrementTimestep(__pyx_v_self->__pyx_base.vwr)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5IncrementTimestep(__pyx_v_self->__pyx_base.vwr)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 346, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":356
+  /* "PETSc/Viewer.pyx":345
  *         CHKERR( PetscViewerHDF5SetTimestep(self.vwr, asInt(timestep)) )
  * 
- *     def incrementTimestep(self, timestep):             # <<<<<<<<<<<<<<
+ *     def incrementTimestep(self):             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerHDF5IncrementTimestep(self.vwr) )
  * 
  */
@@ -71449,7 +73706,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(struc
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":359
+/* "PETSc/Viewer.pyx":348
  *         CHKERR( PetscViewerHDF5IncrementTimestep(self.vwr) )
  * 
  *     def pushGroup(self, group):             # <<<<<<<<<<<<<<
@@ -71462,9 +73719,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_9pushGroup(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup[] = "ViewerHDF5.pushGroup(self, group)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_9pushGroup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_group = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("pushGroup (wrapper)", 0);
@@ -71486,7 +73740,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_9pushGroup(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, "pushGroup") < 0)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pushGroup") < 0)) __PYX_ERR(27, 348, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -71497,7 +73751,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_9pushGroup(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pushGroup", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[27]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pushGroup", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 348, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.ViewerHDF5.pushGroup", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -71516,13 +73770,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup(struct __pyx_
   __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("pushGroup", 0);
   __Pyx_INCREF(__pyx_v_group);
 
-  /* "PETSc/Viewer.pyx":360
+  /* "PETSc/Viewer.pyx":349
  * 
  *     def pushGroup(self, group):
  *         cdef const_char *cgroup = NULL             # <<<<<<<<<<<<<<
@@ -71531,28 +73782,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup(struct __pyx_
  */
   __pyx_v_cgroup = NULL;
 
-  /* "PETSc/Viewer.pyx":361
+  /* "PETSc/Viewer.pyx":350
  *     def pushGroup(self, group):
  *         cdef const_char *cgroup = NULL
  *         group = str2bytes(group, &cgroup)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerHDF5PushGroup(self.vwr, cgroup) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_group, (&__pyx_v_cgroup)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_group, (&__pyx_v_cgroup)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 350, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_group, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":362
+  /* "PETSc/Viewer.pyx":351
  *         cdef const_char *cgroup = NULL
  *         group = str2bytes(group, &cgroup)
  *         CHKERR( PetscViewerHDF5PushGroup(self.vwr, cgroup) )             # <<<<<<<<<<<<<<
  * 
  *     def popGroup(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5PushGroup(__pyx_v_self->__pyx_base.vwr, __pyx_v_cgroup)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5PushGroup(__pyx_v_self->__pyx_base.vwr, __pyx_v_cgroup)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(27, 351, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":359
+  /* "PETSc/Viewer.pyx":348
  *         CHKERR( PetscViewerHDF5IncrementTimestep(self.vwr) )
  * 
  *     def pushGroup(self, group):             # <<<<<<<<<<<<<<
@@ -71574,7 +73825,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":364
+/* "PETSc/Viewer.pyx":353
  *         CHKERR( PetscViewerHDF5PushGroup(self.vwr, cgroup) )
  * 
  *     def popGroup(self):             # <<<<<<<<<<<<<<
@@ -71603,21 +73854,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_10popGroup(struct __pyx_
   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("popGroup", 0);
 
-  /* "PETSc/Viewer.pyx":365
+  /* "PETSc/Viewer.pyx":354
  * 
  *     def popGroup(self):
  *         CHKERR( PetscViewerHDF5PopGroup(self.vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def getGroup(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5PopGroup(__pyx_v_self->__pyx_base.vwr)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5PopGroup(__pyx_v_self->__pyx_base.vwr)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 354, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":364
+  /* "PETSc/Viewer.pyx":353
  *         CHKERR( PetscViewerHDF5PushGroup(self.vwr, cgroup) )
  * 
  *     def popGroup(self):             # <<<<<<<<<<<<<<
@@ -71637,7 +73885,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_10popGroup(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":367
+/* "PETSc/Viewer.pyx":356
  *         CHKERR( PetscViewerHDF5PopGroup(self.vwr) )
  * 
  *     def getGroup(self):             # <<<<<<<<<<<<<<
@@ -71668,12 +73916,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_12getGroup(struct __pyx_
   __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("getGroup", 0);
 
-  /* "PETSc/Viewer.pyx":368
+  /* "PETSc/Viewer.pyx":357
  * 
  *     def getGroup(self):
  *         cdef const_char *cgroup = NULL             # <<<<<<<<<<<<<<
@@ -71682,16 +73927,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_12getGroup(struct __pyx_
  */
   __pyx_v_cgroup = NULL;
 
-  /* "PETSc/Viewer.pyx":369
+  /* "PETSc/Viewer.pyx":358
  *     def getGroup(self):
  *         cdef const_char *cgroup = NULL
  *         CHKERR( PetscViewerHDF5GetGroup(self.vwr, &cgroup) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cgroup)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5GetGroup(__pyx_v_self->__pyx_base.vwr, (&__pyx_v_cgroup))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5GetGroup(__pyx_v_self->__pyx_base.vwr, (&__pyx_v_cgroup))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(27, 358, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":370
+  /* "PETSc/Viewer.pyx":359
  *         cdef const_char *cgroup = NULL
  *         CHKERR( PetscViewerHDF5GetGroup(self.vwr, &cgroup) )
  *         return bytes2str(cgroup)             # <<<<<<<<<<<<<<
@@ -71699,13 +73944,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_12getGroup(struct __pyx_
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cgroup); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cgroup); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 359, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":367
+  /* "PETSc/Viewer.pyx":356
  *         CHKERR( PetscViewerHDF5PopGroup(self.vwr) )
  * 
  *     def getGroup(self):             # <<<<<<<<<<<<<<
@@ -71724,7 +73969,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_12getGroup(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":14
+/* "PETSc/Random.pyx":15
  *     Type = RandomType
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -71753,7 +73998,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random___cinit__(struct PyPetscRandomObjec
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Random.pyx":15
+  /* "PETSc/Random.pyx":16
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.rnd             # <<<<<<<<<<<<<<
@@ -71762,7 +74007,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random___cinit__(struct PyPetscRandomObjec
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->rnd));
 
-  /* "PETSc/Random.pyx":16
+  /* "PETSc/Random.pyx":17
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.rnd
  *         self.rnd = NULL             # <<<<<<<<<<<<<<
@@ -71771,7 +74016,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random___cinit__(struct PyPetscRandomObjec
  */
   __pyx_v_self->rnd = NULL;
 
-  /* "PETSc/Random.pyx":14
+  /* "PETSc/Random.pyx":15
  *     Type = RandomType
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -71785,7 +74030,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random___cinit__(struct PyPetscRandomObjec
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":18
+/* "PETSc/Random.pyx":19
  *         self.rnd = NULL
  * 
  *     def __call__(self):             # <<<<<<<<<<<<<<
@@ -71815,12 +74060,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_2__call__(struct PyPetscRando
   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("__call__", 0);
 
-  /* "PETSc/Random.pyx":19
+  /* "PETSc/Random.pyx":20
  * 
  *     def __call__(self):
  *         return self.getValue()             # <<<<<<<<<<<<<<
@@ -71828,7 +74070,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_2__call__(struct PyPetscRando
  *     def view(self, Viewer viewer=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getValue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getValue); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -71841,10 +74083,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_2__call__(struct PyPetscRando
     }
   }
   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[28]; __pyx_lineno = 19; __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(28, 20, __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[28]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 20, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -71852,7 +74094,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_2__call__(struct PyPetscRando
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":18
+  /* "PETSc/Random.pyx":19
  *         self.rnd = NULL
  * 
  *     def __call__(self):             # <<<<<<<<<<<<<<
@@ -71873,7 +74115,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_2__call__(struct PyPetscRando
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":21
+/* "PETSc/Random.pyx":22
  *         return self.getValue()
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -71886,9 +74128,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_5view(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_6Random_4view[] = "Random.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_5view(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);
@@ -71913,7 +74152,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_5view(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(28, 22, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -71926,13 +74165,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_5view(PyObject *__pyx_v_self,
   }
   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[28]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 22, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Random.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[28]; __pyx_lineno = 21; __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(28, 22, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Random_4view(((struct PyPetscRandomObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -71952,12 +74191,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4view(struct PyPetscRandomObj
   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);
 
-  /* "PETSc/Random.pyx":22
+  /* "PETSc/Random.pyx":23
  * 
  *     def view(self, Viewer viewer=None):
  *         assert self.obj != NULL             # <<<<<<<<<<<<<<
@@ -71968,12 +74204,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4view(struct PyPetscRandomObj
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->__pyx_base.obj != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[28]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(28, 23, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/Random.pyx":23
+  /* "PETSc/Random.pyx":24
  *     def view(self, Viewer viewer=None):
  *         assert self.obj != NULL
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -71982,7 +74218,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4view(struct PyPetscRandomObj
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/Random.pyx":24
+  /* "PETSc/Random.pyx":25
  *         assert self.obj != NULL
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -71994,20 +74230,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4view(struct PyPetscRandomObj
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Random.pyx":25
+  /* "PETSc/Random.pyx":26
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( PetscRandomView(self.rnd, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomView(__pyx_v_self->rnd, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomView(__pyx_v_self->rnd, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(28, 26, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":21
+  /* "PETSc/Random.pyx":22
  *         return self.getValue()
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -72027,7 +74261,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4view(struct PyPetscRandomObj
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":27
+/* "PETSc/Random.pyx":28
  *         CHKERR( PetscRandomView(self.rnd, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -72056,21 +74290,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_6destroy(struct PyPetscRandom
   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);
 
-  /* "PETSc/Random.pyx":28
+  /* "PETSc/Random.pyx":29
  * 
  *     def destroy(self):
  *         CHKERR( PetscRandomDestroy(&self.rnd) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomDestroy((&__pyx_v_self->rnd))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomDestroy((&__pyx_v_self->rnd))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(28, 29, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":29
+  /* "PETSc/Random.pyx":30
  *     def destroy(self):
  *         CHKERR( PetscRandomDestroy(&self.rnd) )
  *         return self             # <<<<<<<<<<<<<<
@@ -72082,7 +74313,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_6destroy(struct PyPetscRandom
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":27
+  /* "PETSc/Random.pyx":28
  *         CHKERR( PetscRandomView(self.rnd, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -72100,7 +74331,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_6destroy(struct PyPetscRandom
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":31
+/* "PETSc/Random.pyx":32
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -72113,9 +74344,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_9create(PyObject *__pyx_v_sel
 static char __pyx_doc_8petsc4py_5PETSc_6Random_8create[] = "Random.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_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);
@@ -72140,7 +74368,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_9create(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(28, 32, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -72153,7 +74381,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_9create(PyObject *__pyx_v_sel
   }
   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[28]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 32, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Random.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -72172,31 +74400,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8create(struct PyPetscRandomO
   __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);
 
-  /* "PETSc/Random.pyx":32
+  /* "PETSc/Random.pyx":33
  * 
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscRandomCreate(ccomm, &self.rnd) )
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(28, 33, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Random.pyx":33
+  /* "PETSc/Random.pyx":34
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         CHKERR( PetscRandomCreate(ccomm, &self.rnd) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomCreate(__pyx_v_ccomm, (&__pyx_v_self->rnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomCreate(__pyx_v_ccomm, (&__pyx_v_self->rnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(28, 34, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":34
+  /* "PETSc/Random.pyx":35
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         CHKERR( PetscRandomCreate(ccomm, &self.rnd) )
  *         return self             # <<<<<<<<<<<<<<
@@ -72208,7 +74433,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8create(struct PyPetscRandomO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":31
+  /* "PETSc/Random.pyx":32
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -72226,7 +74451,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8create(struct PyPetscRandomO
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":36
+/* "PETSc/Random.pyx":37
  *         return self
  * 
  *     def setType(self, rnd_type):             # <<<<<<<<<<<<<<
@@ -72239,9 +74464,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_11setType(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_6Random_10setType[] = "Random.setType(self, rnd_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rnd_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);
@@ -72263,7 +74485,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_11setType(PyObject *__pyx_v_s
         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[28]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(28, 37, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -72274,7 +74496,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_11setType(PyObject *__pyx_v_s
   }
   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[28]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 37, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Random.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -72293,13 +74515,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_10setType(struct PyPetscRando
   __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_rnd_type);
 
-  /* "PETSc/Random.pyx":37
+  /* "PETSc/Random.pyx":38
  * 
  *     def setType(self, rnd_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -72308,28 +74527,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_10setType(struct PyPetscRando
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Random.pyx":38
+  /* "PETSc/Random.pyx":39
  *     def setType(self, rnd_type):
  *         cdef const_char *cval = NULL
  *         rnd_type = str2bytes(rnd_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscRandomSetType(self.rnd, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_rnd_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_rnd_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_rnd_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Random.pyx":39
+  /* "PETSc/Random.pyx":40
  *         cdef const_char *cval = NULL
  *         rnd_type = str2bytes(rnd_type, &cval)
  *         CHKERR( PetscRandomSetType(self.rnd, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetType(__pyx_v_self->rnd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetType(__pyx_v_self->rnd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(28, 40, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":36
+  /* "PETSc/Random.pyx":37
  *         return self
  * 
  *     def setType(self, rnd_type):             # <<<<<<<<<<<<<<
@@ -72351,7 +74570,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_10setType(struct PyPetscRando
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":41
+/* "PETSc/Random.pyx":42
  *         CHKERR( PetscRandomSetType(self.rnd, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -72382,12 +74601,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_12getType(struct PyPetscRando
   __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);
 
-  /* "PETSc/Random.pyx":42
+  /* "PETSc/Random.pyx":43
  * 
  *     def getType(self):
  *         cdef PetscRandomType cval = NULL             # <<<<<<<<<<<<<<
@@ -72396,16 +74612,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_12getType(struct PyPetscRando
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Random.pyx":43
+  /* "PETSc/Random.pyx":44
  *     def getType(self):
  *         cdef PetscRandomType cval = NULL
  *         CHKERR( PetscRandomGetType(self.rnd, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetType(__pyx_v_self->rnd, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetType(__pyx_v_self->rnd, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(28, 44, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":44
+  /* "PETSc/Random.pyx":45
  *         cdef PetscRandomType cval = NULL
  *         CHKERR( PetscRandomGetType(self.rnd, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -72413,13 +74629,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_12getType(struct PyPetscRando
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":41
+  /* "PETSc/Random.pyx":42
  *         CHKERR( PetscRandomSetType(self.rnd, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -72438,7 +74654,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_12getType(struct PyPetscRando
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":46
+/* "PETSc/Random.pyx":47
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -72467,21 +74683,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_14setFromOptions(struct PyPet
   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);
 
-  /* "PETSc/Random.pyx":47
+  /* "PETSc/Random.pyx":48
  * 
  *     def setFromOptions(self):
  *         CHKERR( PetscRandomSetFromOptions(self.rnd) )             # <<<<<<<<<<<<<<
  * 
  *     def getValue(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetFromOptions(__pyx_v_self->rnd)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetFromOptions(__pyx_v_self->rnd)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(28, 48, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":46
+  /* "PETSc/Random.pyx":47
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -72501,7 +74714,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_14setFromOptions(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":49
+/* "PETSc/Random.pyx":50
  *         CHKERR( PetscRandomSetFromOptions(self.rnd) )
  * 
  *     def getValue(self):             # <<<<<<<<<<<<<<
@@ -72532,12 +74745,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_16getValue(struct PyPetscRand
   __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("getValue", 0);
 
-  /* "PETSc/Random.pyx":50
+  /* "PETSc/Random.pyx":51
  * 
  *     def getValue(self):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -72546,16 +74756,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_16getValue(struct PyPetscRand
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Random.pyx":51
+  /* "PETSc/Random.pyx":52
  *     def getValue(self):
  *         cdef PetscScalar sval = 0
  *         CHKERR( PetscRandomGetValue(self.rnd, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetValue(__pyx_v_self->rnd, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetValue(__pyx_v_self->rnd, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(28, 52, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":52
+  /* "PETSc/Random.pyx":53
  *         cdef PetscScalar sval = 0
  *         CHKERR( PetscRandomGetValue(self.rnd, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -72563,13 +74773,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_16getValue(struct PyPetscRand
  *     def getValueReal(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":49
+  /* "PETSc/Random.pyx":50
  *         CHKERR( PetscRandomSetFromOptions(self.rnd) )
  * 
  *     def getValue(self):             # <<<<<<<<<<<<<<
@@ -72588,7 +74798,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_16getValue(struct PyPetscRand
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":54
+/* "PETSc/Random.pyx":55
  *         return toScalar(sval)
  * 
  *     def getValueReal(self):             # <<<<<<<<<<<<<<
@@ -72619,12 +74829,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_18getValueReal(struct PyPetsc
   __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("getValueReal", 0);
 
-  /* "PETSc/Random.pyx":55
+  /* "PETSc/Random.pyx":56
  * 
  *     def getValueReal(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -72633,16 +74840,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_18getValueReal(struct PyPetsc
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Random.pyx":56
+  /* "PETSc/Random.pyx":57
  *     def getValueReal(self):
  *         cdef PetscReal rval = 0
  *         CHKERR( PetscRandomGetValueReal(self.rnd, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetValueReal(__pyx_v_self->rnd, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetValueReal(__pyx_v_self->rnd, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(28, 57, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":57
+  /* "PETSc/Random.pyx":58
  *         cdef PetscReal rval = 0
  *         CHKERR( PetscRandomGetValueReal(self.rnd, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -72650,13 +74857,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_18getValueReal(struct PyPetsc
  *     def getSeed(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":54
+  /* "PETSc/Random.pyx":55
  *         return toScalar(sval)
  * 
  *     def getValueReal(self):             # <<<<<<<<<<<<<<
@@ -72675,7 +74882,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_18getValueReal(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":59
+/* "PETSc/Random.pyx":60
  *         return toReal(rval)
  * 
  *     def getSeed(self):             # <<<<<<<<<<<<<<
@@ -72706,12 +74913,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_20getSeed(struct PyPetscRando
   __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("getSeed", 0);
 
-  /* "PETSc/Random.pyx":60
+  /* "PETSc/Random.pyx":61
  * 
  *     def getSeed(self):
  *         cdef unsigned long seed = 0             # <<<<<<<<<<<<<<
@@ -72720,16 +74924,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_20getSeed(struct PyPetscRando
  */
   __pyx_v_seed = 0;
 
-  /* "PETSc/Random.pyx":61
+  /* "PETSc/Random.pyx":62
  *     def getSeed(self):
  *         cdef unsigned long seed = 0
  *         CHKERR( PetscRandomGetSeed(self.rnd, &seed) )             # <<<<<<<<<<<<<<
  *         return seed
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetSeed(__pyx_v_self->rnd, (&__pyx_v_seed))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetSeed(__pyx_v_self->rnd, (&__pyx_v_seed))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(28, 62, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":62
+  /* "PETSc/Random.pyx":63
  *         cdef unsigned long seed = 0
  *         CHKERR( PetscRandomGetSeed(self.rnd, &seed) )
  *         return seed             # <<<<<<<<<<<<<<
@@ -72737,13 +74941,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_20getSeed(struct PyPetscRando
  *     def setSeed(self, seed=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_unsigned_long(__pyx_v_seed); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_unsigned_long(__pyx_v_seed); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":59
+  /* "PETSc/Random.pyx":60
  *         return toReal(rval)
  * 
  *     def getSeed(self):             # <<<<<<<<<<<<<<
@@ -72762,7 +74966,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_20getSeed(struct PyPetscRando
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":64
+/* "PETSc/Random.pyx":65
  *         return seed
  * 
  *     def setSeed(self, seed=None):             # <<<<<<<<<<<<<<
@@ -72775,9 +74979,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_23setSeed(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_6Random_22setSeed[] = "Random.setSeed(self, seed=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_23setSeed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_seed = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setSeed (wrapper)", 0);
@@ -72802,7 +75003,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_23setSeed(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSeed") < 0)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSeed") < 0)) __PYX_ERR(28, 65, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -72815,7 +75016,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_23setSeed(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSeed", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[28]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSeed", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 65, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Random.setSeed", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -72835,12 +75036,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_22setSeed(struct PyPetscRando
   int __pyx_t_2;
   unsigned long __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setSeed", 0);
 
-  /* "PETSc/Random.pyx":65
+  /* "PETSc/Random.pyx":66
  * 
  *     def setSeed(self, seed=None):
  *         if seed is not None:             # <<<<<<<<<<<<<<
@@ -72851,29 +75049,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_22setSeed(struct PyPetscRando
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Random.pyx":66
+    /* "PETSc/Random.pyx":67
  *     def setSeed(self, seed=None):
  *         if seed is not None:
  *             CHKERR( PetscRandomSetSeed(self.rnd, seed) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscRandomSeed(self.rnd) )
  * 
  */
-    __pyx_t_3 = __Pyx_PyInt_As_unsigned_long(__pyx_v_seed); if (unlikely((__pyx_t_3 == (unsigned long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetSeed(__pyx_v_self->rnd, __pyx_t_3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __Pyx_PyInt_As_unsigned_long(__pyx_v_seed); if (unlikely((__pyx_t_3 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(28, 67, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetSeed(__pyx_v_self->rnd, __pyx_t_3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(28, 67, __pyx_L1_error)
+
+    /* "PETSc/Random.pyx":66
+ * 
+ *     def setSeed(self, seed=None):
+ *         if seed is not None:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscRandomSetSeed(self.rnd, seed) )
+ *         CHKERR( PetscRandomSeed(self.rnd) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Random.pyx":67
+  /* "PETSc/Random.pyx":68
  *         if seed is not None:
  *             CHKERR( PetscRandomSetSeed(self.rnd, seed) )
  *         CHKERR( PetscRandomSeed(self.rnd) )             # <<<<<<<<<<<<<<
  * 
  *     def getInterval(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSeed(__pyx_v_self->rnd)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSeed(__pyx_v_self->rnd)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(28, 68, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":64
+  /* "PETSc/Random.pyx":65
  *         return seed
  * 
  *     def setSeed(self, seed=None):             # <<<<<<<<<<<<<<
@@ -72893,7 +75097,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_22setSeed(struct PyPetscRando
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":69
+/* "PETSc/Random.pyx":70
  *         CHKERR( PetscRandomSeed(self.rnd) )
  * 
  *     def getInterval(self):             # <<<<<<<<<<<<<<
@@ -72927,12 +75131,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscR
   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);
 
-  /* "PETSc/Random.pyx":70
+  /* "PETSc/Random.pyx":71
  * 
  *     def getInterval(self):
  *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
@@ -72941,7 +75142,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscR
  */
   __pyx_v_sval1 = 0.0;
 
-  /* "PETSc/Random.pyx":71
+  /* "PETSc/Random.pyx":72
  *     def getInterval(self):
  *         cdef PetscScalar sval1 = 0
  *         cdef PetscScalar sval2 = 1             # <<<<<<<<<<<<<<
@@ -72950,16 +75151,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscR
  */
   __pyx_v_sval2 = 1.0;
 
-  /* "PETSc/Random.pyx":72
+  /* "PETSc/Random.pyx":73
  *         cdef PetscScalar sval1 = 0
  *         cdef PetscScalar sval2 = 1
  *         CHKERR( PetscRandomGetInterval(self.rnd, &sval1, &sval2) )             # <<<<<<<<<<<<<<
  *         return (toScalar(sval1), toScalar(sval2))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetInterval(__pyx_v_self->rnd, (&__pyx_v_sval1), (&__pyx_v_sval2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetInterval(__pyx_v_self->rnd, (&__pyx_v_sval1), (&__pyx_v_sval2))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(28, 73, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":73
+  /* "PETSc/Random.pyx":74
  *         cdef PetscScalar sval2 = 1
  *         CHKERR( PetscRandomGetInterval(self.rnd, &sval1, &sval2) )
  *         return (toScalar(sval1), toScalar(sval2))             # <<<<<<<<<<<<<<
@@ -72967,11 +75168,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscR
  *     def setInterval(self, interval):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -72983,7 +75184,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscR
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":69
+  /* "PETSc/Random.pyx":70
  *         CHKERR( PetscRandomSeed(self.rnd) )
  * 
  *     def getInterval(self):             # <<<<<<<<<<<<<<
@@ -73004,7 +75205,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscR
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":75
+/* "PETSc/Random.pyx":76
  *         return (toScalar(sval1), toScalar(sval2))
  * 
  *     def setInterval(self, interval):             # <<<<<<<<<<<<<<
@@ -73017,9 +75218,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_27setInterval(PyObject *__pyx
 static char __pyx_doc_8petsc4py_5PETSc_6Random_26setInterval[] = "Random.setInterval(self, interval)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_27setInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_interval = 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);
@@ -73041,7 +75239,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_27setInterval(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, "setInterval") < 0)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInterval") < 0)) __PYX_ERR(28, 76, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -73052,7 +75250,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_27setInterval(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInterval", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[28]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInterval", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 76, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Random.setInterval", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -73078,12 +75276,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
   PyObject *(*__pyx_t_4)(PyObject *);
   PetscScalar __pyx_t_5;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setInterval", 0);
 
-  /* "PETSc/Random.pyx":76
+  /* "PETSc/Random.pyx":77
  * 
  *     def setInterval(self, interval):
  *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
@@ -73092,7 +75287,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
  */
   __pyx_v_sval1 = 0.0;
 
-  /* "PETSc/Random.pyx":77
+  /* "PETSc/Random.pyx":78
  *     def setInterval(self, interval):
  *         cdef PetscScalar sval1 = 0
  *         cdef PetscScalar sval2 = 1             # <<<<<<<<<<<<<<
@@ -73101,7 +75296,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
  */
   __pyx_v_sval2 = 1.0;
 
-  /* "PETSc/Random.pyx":78
+  /* "PETSc/Random.pyx":79
  *         cdef PetscScalar sval1 = 0
  *         cdef PetscScalar sval2 = 1
  *         low, high = interval             # <<<<<<<<<<<<<<
@@ -73118,7 +75313,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[28]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(28, 79, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -73131,21 +75326,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
     __Pyx_INCREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_t_2);
     #else
-    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 79, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 79, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_3 = PyObject_GetIter(__pyx_v_interval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetIter(__pyx_v_interval); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 79, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
     index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_1);
     index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_2);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(28, 79, __pyx_L1_error)
     __pyx_t_4 = NULL;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L4_unpacking_done;
@@ -73153,7 +75348,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_4 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[28]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(28, 79, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_low = __pyx_t_1;
@@ -73161,36 +75356,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
   __pyx_v_high = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/Random.pyx":79
+  /* "PETSc/Random.pyx":80
  *         cdef PetscScalar sval2 = 1
  *         low, high = interval
  *         sval1 = asScalar(low)             # <<<<<<<<<<<<<<
  *         sval2 = asScalar(high)
  *         CHKERR( PetscRandomSetInterval(self.rnd, sval1, sval2) )
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_low); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_low); if (unlikely(PyErr_Occurred())) __PYX_ERR(28, 80, __pyx_L1_error)
   __pyx_v_sval1 = __pyx_t_5;
 
-  /* "PETSc/Random.pyx":80
+  /* "PETSc/Random.pyx":81
  *         low, high = interval
  *         sval1 = asScalar(low)
  *         sval2 = asScalar(high)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscRandomSetInterval(self.rnd, sval1, sval2) )
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_high); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_high); if (unlikely(PyErr_Occurred())) __PYX_ERR(28, 81, __pyx_L1_error)
   __pyx_v_sval2 = __pyx_t_5;
 
-  /* "PETSc/Random.pyx":81
+  /* "PETSc/Random.pyx":82
  *         sval1 = asScalar(low)
  *         sval2 = asScalar(high)
  *         CHKERR( PetscRandomSetInterval(self.rnd, sval1, sval2) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetInterval(__pyx_v_self->rnd, __pyx_v_sval1, __pyx_v_sval2)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetInterval(__pyx_v_self->rnd, __pyx_v_sval1, __pyx_v_sval2)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(28, 82, __pyx_L1_error)
 
-  /* "PETSc/Random.pyx":75
+  /* "PETSc/Random.pyx":76
  *         return (toScalar(sval1), toScalar(sval2))
  * 
  *     def setInterval(self, interval):             # <<<<<<<<<<<<<<
@@ -73215,7 +75410,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":86
+/* "PETSc/Random.pyx":87
  * 
  *     property seed:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -73242,12 +75437,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4seed___get__(struct PyPetscR
   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);
 
-  /* "PETSc/Random.pyx":87
+  /* "PETSc/Random.pyx":88
  *     property seed:
  *         def __get__(self):
  *             return self.getSeed()             # <<<<<<<<<<<<<<
@@ -73255,7 +75447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4seed___get__(struct PyPetscR
  *             self.setSeed(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSeed); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSeed); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -73268,10 +75460,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4seed___get__(struct PyPetscR
     }
   }
   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[28]; __pyx_lineno = 87; __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(28, 88, __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[28]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 88, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -73279,7 +75471,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4seed___get__(struct PyPetscR
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":86
+  /* "PETSc/Random.pyx":87
  * 
  *     property seed:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -73300,7 +75492,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4seed___get__(struct PyPetscR
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":88
+/* "PETSc/Random.pyx":89
  *         def __get__(self):
  *             return self.getSeed()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -73328,19 +75520,16 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_4seed_2__set__(struct PyPetscRandom
   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);
 
-  /* "PETSc/Random.pyx":89
+  /* "PETSc/Random.pyx":90
  *             return self.getSeed()
  *         def __set__(self, value):
  *             self.setSeed(value)             # <<<<<<<<<<<<<<
  * 
  *     property interval:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setSeed); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setSeed); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -73353,23 +75542,23 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_4seed_2__set__(struct PyPetscRandom
     }
   }
   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[28]; __pyx_lineno = 89; __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(28, 90, __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[28]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 90, __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[28]; __pyx_lineno = 89; __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(28, 90, __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;
 
-  /* "PETSc/Random.pyx":88
+  /* "PETSc/Random.pyx":89
  *         def __get__(self):
  *             return self.getSeed()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -73392,7 +75581,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_4seed_2__set__(struct PyPetscRandom
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":92
+/* "PETSc/Random.pyx":93
  * 
  *     property interval:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -73419,12 +75608,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8interval___get__(struct PyPe
   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);
 
-  /* "PETSc/Random.pyx":93
+  /* "PETSc/Random.pyx":94
  *     property interval:
  *         def __get__(self):
  *             return self.getInterval()             # <<<<<<<<<<<<<<
@@ -73432,7 +75618,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8interval___get__(struct PyPe
  *             self.setInterval(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getInterval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getInterval); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 94, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -73445,10 +75631,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8interval___get__(struct PyPe
     }
   }
   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[28]; __pyx_lineno = 93; __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(28, 94, __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[28]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 94, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -73456,7 +75642,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8interval___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Random.pyx":92
+  /* "PETSc/Random.pyx":93
  * 
  *     property interval:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -73477,7 +75663,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8interval___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Random.pyx":94
+/* "PETSc/Random.pyx":95
  *         def __get__(self):
  *             return self.getInterval()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -73505,19 +75691,16 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_8interval_2__set__(struct PyPetscRa
   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);
 
-  /* "PETSc/Random.pyx":95
+  /* "PETSc/Random.pyx":96
  *             return self.getInterval()
  *         def __set__(self, value):
  *             self.setInterval(value)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setInterval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setInterval); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -73530,23 +75713,23 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_8interval_2__set__(struct PyPetscRa
     }
   }
   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[28]; __pyx_lineno = 95; __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(28, 96, __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[28]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 96, __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[28]; __pyx_lineno = 95; __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(28, 96, __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;
 
-  /* "PETSc/Random.pyx":94
+  /* "PETSc/Random.pyx":95
  *         def __get__(self):
  *             return self.getInterval()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -73658,9 +75841,6 @@ static int __pyx_pf_8petsc4py_5PETSc_2IS_2__getbuffer__(struct PyPetscISObject *
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getbuffer__", 0);
   if (__pyx_v_view != NULL) {
     __pyx_v_view->obj = Py_None; __Pyx_INCREF(Py_None);
@@ -73674,12 +75854,12 @@ static int __pyx_pf_8petsc4py_5PETSc_2IS_2__getbuffer__(struct PyPetscISObject *
  *         buf.acquirebuffer(view, flags)
  * 
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__IS_buffer)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__IS_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *)__pyx_t_2);
@@ -73692,7 +75872,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2IS_2__getbuffer__(struct PyPetscISObject *
  * 
  *     def __releasebuffer__(self, Py_buffer *view):
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_buf->__pyx_vtab)->acquirebuffer(__pyx_v_buf, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_buf->__pyx_vtab)->acquirebuffer(__pyx_v_buf, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(29, 24, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":22
  *     # buffer interface (PEP 3118)
@@ -73745,14 +75925,11 @@ static CYTHON_UNUSED void __pyx_pw_8petsc4py_5PETSc_2IS_5__releasebuffer__(PyObj
   __Pyx_RefNannyFinishContext();
 }
 
-static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(CYTHON_UNUSED struct PyPetscISObject *__pyx_v_self, Py_buffer *__pyx_v_view) {
+static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(struct PyPetscISObject *__pyx_v_self, Py_buffer *__pyx_v_view) {
   struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *__pyx_v_buf = 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("__releasebuffer__", 0);
 
   /* "PETSc/IS.pyx":27
@@ -73760,7 +75937,7 @@ static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(CYTHON_UNUSED struc
  *     def __releasebuffer__(self, Py_buffer *view):
  *         cdef _IS_buffer buf = <_IS_buffer>(view.obj)             # <<<<<<<<<<<<<<
  *         buf.releasebuffer(view)
- * 
+ *         <void>self # unused
  */
   __pyx_t_1 = __pyx_v_view->obj;
   __Pyx_INCREF(__pyx_t_1);
@@ -73771,10 +75948,19 @@ static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(CYTHON_UNUSED struc
  *     def __releasebuffer__(self, Py_buffer *view):
  *         cdef _IS_buffer buf = <_IS_buffer>(view.obj)
  *         buf.releasebuffer(view)             # <<<<<<<<<<<<<<
+ *         <void>self # unused
+ * 
+ */
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_buf->__pyx_vtab)->releasebuffer(__pyx_v_buf, __pyx_v_view); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 28, __pyx_L1_error)
+
+  /* "PETSc/IS.pyx":29
+ *         cdef _IS_buffer buf = <_IS_buffer>(view.obj)
+ *         buf.releasebuffer(view)
+ *         <void>self # unused             # <<<<<<<<<<<<<<
+ * 
  * 
- *     # 'with' statement (PEP 343)
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_buf->__pyx_vtab)->releasebuffer(__pyx_v_buf, __pyx_v_view); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((void)__pyx_v_self);
 
   /* "PETSc/IS.pyx":26
  *         buf.acquirebuffer(view, flags)
@@ -73794,7 +75980,7 @@ static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(CYTHON_UNUSED struc
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/IS.pyx":32
+/* "PETSc/IS.pyx":34
  *     # 'with' statement (PEP 343)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -73825,41 +76011,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6__enter__(struct PyPetscISObject
   __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("__enter__", 0);
 
-  /* "PETSc/IS.pyx":33
+  /* "PETSc/IS.pyx":35
  * 
  *     def __enter__(self):
  *         cdef _IS_buffer buf = _IS_buffer(self)             # <<<<<<<<<<<<<<
  *         self.set_attr('__buffer__', buf)
  *         return buf.enter()
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__IS_buffer)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__IS_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/IS.pyx":34
+  /* "PETSc/IS.pyx":36
  *     def __enter__(self):
  *         cdef _IS_buffer buf = _IS_buffer(self)
  *         self.set_attr('__buffer__', buf)             # <<<<<<<<<<<<<<
  *         return buf.enter()
  * 
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_buffer, ((PyObject *)__pyx_v_buf)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__buffer__"), ((PyObject *)__pyx_v_buf)); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/IS.pyx":35
+  /* "PETSc/IS.pyx":37
  *         cdef _IS_buffer buf = _IS_buffer(self)
  *         self.set_attr('__buffer__', buf)
  *         return buf.enter()             # <<<<<<<<<<<<<<
@@ -73867,13 +76050,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6__enter__(struct PyPetscISObject
  *     def __exit__(self, *exc):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_buf->__pyx_vtab)->enter(__pyx_v_buf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_buf->__pyx_vtab)->enter(__pyx_v_buf); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":32
+  /* "PETSc/IS.pyx":34
  *     # 'with' statement (PEP 343)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -73894,7 +76077,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6__enter__(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":37
+/* "PETSc/IS.pyx":39
  *         return buf.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -73926,36 +76109,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8__exit__(struct PyPetscISObject
   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("__exit__", 0);
 
-  /* "PETSc/IS.pyx":38
+  /* "PETSc/IS.pyx":40
  * 
  *     def __exit__(self, *exc):
  *         cdef _IS_buffer buf = self.get_attr('__buffer__')             # <<<<<<<<<<<<<<
  *         self.set_attr('__buffer__', None)
  *         return buf.exit()
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_buffer); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__buffer__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc__IS_buffer))))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc__IS_buffer))))) __PYX_ERR(29, 40, __pyx_L1_error)
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":39
+  /* "PETSc/IS.pyx":41
  *     def __exit__(self, *exc):
  *         cdef _IS_buffer buf = self.get_attr('__buffer__')
  *         self.set_attr('__buffer__', None)             # <<<<<<<<<<<<<<
  *         return buf.exit()
  *     #
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_buffer, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__buffer__"), Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":40
+  /* "PETSc/IS.pyx":42
  *         cdef _IS_buffer buf = self.get_attr('__buffer__')
  *         self.set_attr('__buffer__', None)
  *         return buf.exit()             # <<<<<<<<<<<<<<
@@ -73963,13 +76143,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8__exit__(struct PyPetscISObject
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_buf->__pyx_vtab)->exit(__pyx_v_buf); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_buf->__pyx_vtab)->exit(__pyx_v_buf); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":37
+  /* "PETSc/IS.pyx":39
  *         return buf.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -73989,7 +76169,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8__exit__(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":43
+/* "PETSc/IS.pyx":45
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -74002,9 +76182,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_11view(PyObject *__pyx_v_self, Py
 static char __pyx_doc_8petsc4py_5PETSc_2IS_10view[] = "IS.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_11view(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);
@@ -74029,7 +76206,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_11view(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[29]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(29, 45, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -74042,13 +76219,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_11view(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[29]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 45, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.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[29]; __pyx_lineno = 43; __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(29, 45, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_10view(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -74068,12 +76245,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10view(struct PyPetscISObject *__
   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);
 
-  /* "PETSc/IS.pyx":44
+  /* "PETSc/IS.pyx":46
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL             # <<<<<<<<<<<<<<
@@ -74082,7 +76256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10view(struct PyPetscISObject *__
  */
   __pyx_v_cviewer = NULL;
 
-  /* "PETSc/IS.pyx":45
+  /* "PETSc/IS.pyx":47
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr             # <<<<<<<<<<<<<<
@@ -74094,20 +76268,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10view(struct PyPetscISObject *__
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_cviewer = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":46
+  /* "PETSc/IS.pyx":48
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr
  *         CHKERR( ISView(self.iset, cviewer) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISView(__pyx_v_self->iset, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISView(__pyx_v_self->iset, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(29, 48, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":43
+  /* "PETSc/IS.pyx":45
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -74127,7 +76299,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10view(struct PyPetscISObject *__
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":48
+/* "PETSc/IS.pyx":50
  *         CHKERR( ISView(self.iset, cviewer) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -74156,21 +76328,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_12destroy(struct PyPetscISObject
   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);
 
-  /* "PETSc/IS.pyx":49
+  /* "PETSc/IS.pyx":51
  * 
  *     def destroy(self):
  *         CHKERR( ISDestroy(&self.iset) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&__pyx_v_self->iset))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&__pyx_v_self->iset))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 51, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":50
+  /* "PETSc/IS.pyx":52
  *     def destroy(self):
  *         CHKERR( ISDestroy(&self.iset) )
  *         return self             # <<<<<<<<<<<<<<
@@ -74182,7 +76351,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_12destroy(struct PyPetscISObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":48
+  /* "PETSc/IS.pyx":50
  *         CHKERR( ISView(self.iset, cviewer) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -74200,7 +76369,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_12destroy(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":52
+/* "PETSc/IS.pyx":54
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -74213,9 +76382,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_15create(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_2IS_14create[] = "IS.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_15create(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);
@@ -74240,7 +76406,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_15create(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[29]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(29, 54, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -74253,7 +76419,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_15create(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[29]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 54, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -74273,22 +76439,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_14create(struct PyPetscISObject *
   __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);
 
-  /* "PETSc/IS.pyx":53
+  /* "PETSc/IS.pyx":55
  * 
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscIS newiset = NULL
  *         CHKERR( ISCreate(ccomm, &newiset) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 55, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":54
+  /* "PETSc/IS.pyx":56
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscIS newiset = NULL             # <<<<<<<<<<<<<<
@@ -74297,16 +76460,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_14create(struct PyPetscISObject *
  */
   __pyx_v_newiset = NULL;
 
-  /* "PETSc/IS.pyx":55
+  /* "PETSc/IS.pyx":57
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscIS newiset = NULL
  *         CHKERR( ISCreate(ccomm, &newiset) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.iset = newiset
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreate(__pyx_v_ccomm, (&__pyx_v_newiset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreate(__pyx_v_ccomm, (&__pyx_v_newiset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 57, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":56
+  /* "PETSc/IS.pyx":58
  *         cdef PetscIS newiset = NULL
  *         CHKERR( ISCreate(ccomm, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset             # <<<<<<<<<<<<<<
@@ -74316,7 +76479,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_14create(struct PyPetscISObject *
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->iset = __pyx_v_newiset;
 
-  /* "PETSc/IS.pyx":57
+  /* "PETSc/IS.pyx":59
  *         CHKERR( ISCreate(ccomm, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset
  *         return self             # <<<<<<<<<<<<<<
@@ -74328,7 +76491,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_14create(struct PyPetscISObject *
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":52
+  /* "PETSc/IS.pyx":54
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -74346,7 +76509,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_14create(struct PyPetscISObject *
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":59
+/* "PETSc/IS.pyx":61
  *         return self
  * 
  *     def setType(self, is_type):             # <<<<<<<<<<<<<<
@@ -74359,9 +76522,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_17setType(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_2IS_16setType[] = "IS.setType(self, is_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_17setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_is_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);
@@ -74383,7 +76543,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_17setType(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[29]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(29, 61, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -74394,7 +76554,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_17setType(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[29]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 61, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -74413,13 +76573,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_16setType(struct PyPetscISObject
   __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_is_type);
 
-  /* "PETSc/IS.pyx":60
+  /* "PETSc/IS.pyx":62
  * 
  *     def setType(self, is_type):
  *         cdef PetscISType cval = NULL             # <<<<<<<<<<<<<<
@@ -74428,28 +76585,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_16setType(struct PyPetscISObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/IS.pyx":61
+  /* "PETSc/IS.pyx":63
  *     def setType(self, is_type):
  *         cdef PetscISType cval = NULL
  *         is_type = str2bytes(is_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( ISSetType(self.iset, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_is_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_is_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_is_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":62
+  /* "PETSc/IS.pyx":64
  *         cdef PetscISType cval = NULL
  *         is_type = str2bytes(is_type, &cval)
  *         CHKERR( ISSetType(self.iset, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetType(__pyx_v_self->iset, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetType(__pyx_v_self->iset, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 64, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":59
+  /* "PETSc/IS.pyx":61
  *         return self
  * 
  *     def setType(self, is_type):             # <<<<<<<<<<<<<<
@@ -74471,7 +76628,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_16setType(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":64
+/* "PETSc/IS.pyx":66
  *         CHKERR( ISSetType(self.iset, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -74502,12 +76659,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_18getType(struct PyPetscISObject
   __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);
 
-  /* "PETSc/IS.pyx":65
+  /* "PETSc/IS.pyx":67
  * 
  *     def getType(self):
  *         cdef PetscISType cval = NULL             # <<<<<<<<<<<<<<
@@ -74516,16 +76670,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_18getType(struct PyPetscISObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/IS.pyx":66
+  /* "PETSc/IS.pyx":68
  *     def getType(self):
  *         cdef PetscISType cval = NULL
  *         CHKERR( ISGetType(self.iset, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetType(__pyx_v_self->iset, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetType(__pyx_v_self->iset, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 68, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":67
+  /* "PETSc/IS.pyx":69
  *         cdef PetscISType cval = NULL
  *         CHKERR( ISGetType(self.iset, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -74533,13 +76687,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_18getType(struct PyPetscISObject
  *     def createGeneral(self, indices, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":64
+  /* "PETSc/IS.pyx":66
  *         CHKERR( ISSetType(self.iset, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -74558,7 +76712,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_18getType(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":69
+/* "PETSc/IS.pyx":71
  *         return bytes2str(cval)
  * 
  *     def createGeneral(self, indices, comm=None):             # <<<<<<<<<<<<<<
@@ -74572,9 +76726,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2IS_20createGeneral[] = "IS.createGeneral
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_21createGeneral(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   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("createGeneral (wrapper)", 0);
@@ -74603,7 +76754,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_21createGeneral(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGeneral") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGeneral") < 0)) __PYX_ERR(29, 71, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -74618,7 +76769,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_21createGeneral(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createGeneral", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createGeneral", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 71, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.createGeneral", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -74642,23 +76793,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISO
   MPI_Comm __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("createGeneral", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":70
+  /* "PETSc/IS.pyx":72
  * 
  *     def createGeneral(self, indices, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 72, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":71
+  /* "PETSc/IS.pyx":73
  *     def createGeneral(self, indices, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
@@ -74668,7 +76816,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISO
   __pyx_v_nidx = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":72
+  /* "PETSc/IS.pyx":74
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -74677,7 +76825,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISO
  */
   __pyx_v_cm = PETSC_COPY_VALUES;
 
-  /* "PETSc/IS.pyx":73
+  /* "PETSc/IS.pyx":75
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         cdef PetscIS newiset = NULL             # <<<<<<<<<<<<<<
@@ -74686,28 +76834,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISO
  */
   __pyx_v_newiset = NULL;
 
-  /* "PETSc/IS.pyx":74
+  /* "PETSc/IS.pyx":76
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         cdef PetscIS newiset = NULL
  *         indices = iarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
  *         CHKERR( ISCreateGeneral(ccomm, nidx, idx, cm, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 76, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/IS.pyx":75
+  /* "PETSc/IS.pyx":77
  *         cdef PetscIS newiset = NULL
  *         indices = iarray_i(indices, &nidx, &idx)
  *         CHKERR( ISCreateGeneral(ccomm, nidx, idx, cm, &newiset) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.iset = newiset
  *         return self
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreateGeneral(__pyx_v_ccomm, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm, (&__pyx_v_newiset))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreateGeneral(__pyx_v_ccomm, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm, (&__pyx_v_newiset))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(29, 77, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":76
+  /* "PETSc/IS.pyx":78
  *         indices = iarray_i(indices, &nidx, &idx)
  *         CHKERR( ISCreateGeneral(ccomm, nidx, idx, cm, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset             # <<<<<<<<<<<<<<
@@ -74717,7 +76865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISO
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->iset = __pyx_v_newiset;
 
-  /* "PETSc/IS.pyx":77
+  /* "PETSc/IS.pyx":79
  *         CHKERR( ISCreateGeneral(ccomm, nidx, idx, cm, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset
  *         return self             # <<<<<<<<<<<<<<
@@ -74729,7 +76877,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":69
+  /* "PETSc/IS.pyx":71
  *         return bytes2str(cval)
  * 
  *     def createGeneral(self, indices, comm=None):             # <<<<<<<<<<<<<<
@@ -74749,7 +76897,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":79
+/* "PETSc/IS.pyx":81
  *         return self
  * 
  *     def createBlock(self, bsize, indices, comm=None):             # <<<<<<<<<<<<<<
@@ -74764,9 +76912,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_23createBlock(PyObject *__pyx_v_s
   PyObject *__pyx_v_bsize = 0;
   PyObject *__pyx_v_indices = 0;
   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("createBlock (wrapper)", 0);
@@ -74792,7 +76937,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_23createBlock(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createBlock", 0, 2, 3, 1); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createBlock", 0, 2, 3, 1); __PYX_ERR(29, 81, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -74801,7 +76946,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_23createBlock(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBlock") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBlock") < 0)) __PYX_ERR(29, 81, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -74818,7 +76963,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_23createBlock(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createBlock", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createBlock", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 81, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.createBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -74844,33 +76989,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
   PetscInt __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createBlock", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":80
+  /* "PETSc/IS.pyx":82
  * 
  *     def createBlock(self, bsize, indices, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt bs = asInt(bsize)
  *         cdef PetscInt nidx = 0, *idx = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 82, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":81
+  /* "PETSc/IS.pyx":83
  *     def createBlock(self, bsize, indices, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs = asInt(bsize)             # <<<<<<<<<<<<<<
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(29, 83, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_2;
 
-  /* "PETSc/IS.pyx":82
+  /* "PETSc/IS.pyx":84
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs = asInt(bsize)
  *         cdef PetscInt nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
@@ -74880,7 +77022,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
   __pyx_v_nidx = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":83
+  /* "PETSc/IS.pyx":85
  *         cdef PetscInt bs = asInt(bsize)
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -74889,7 +77031,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
  */
   __pyx_v_cm = PETSC_COPY_VALUES;
 
-  /* "PETSc/IS.pyx":84
+  /* "PETSc/IS.pyx":86
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         cdef PetscIS newiset = NULL             # <<<<<<<<<<<<<<
@@ -74898,28 +77040,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
  */
   __pyx_v_newiset = NULL;
 
-  /* "PETSc/IS.pyx":85
+  /* "PETSc/IS.pyx":87
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         cdef PetscIS newiset = NULL
  *         indices = iarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
  *         CHKERR( ISCreateBlock(ccomm, bs, nidx, idx, cm, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 87, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/IS.pyx":86
+  /* "PETSc/IS.pyx":88
  *         cdef PetscIS newiset = NULL
  *         indices = iarray_i(indices, &nidx, &idx)
  *         CHKERR( ISCreateBlock(ccomm, bs, nidx, idx, cm, &newiset) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.iset = newiset
  *         return self
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreateBlock(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm, (&__pyx_v_newiset))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreateBlock(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm, (&__pyx_v_newiset))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(29, 88, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":87
+  /* "PETSc/IS.pyx":89
  *         indices = iarray_i(indices, &nidx, &idx)
  *         CHKERR( ISCreateBlock(ccomm, bs, nidx, idx, cm, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset             # <<<<<<<<<<<<<<
@@ -74929,7 +77071,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->iset = __pyx_v_newiset;
 
-  /* "PETSc/IS.pyx":88
+  /* "PETSc/IS.pyx":90
  *         CHKERR( ISCreateBlock(ccomm, bs, nidx, idx, cm, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset
  *         return self             # <<<<<<<<<<<<<<
@@ -74941,7 +77083,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":79
+  /* "PETSc/IS.pyx":81
  *         return self
  * 
  *     def createBlock(self, bsize, indices, comm=None):             # <<<<<<<<<<<<<<
@@ -74961,7 +77103,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":90
+/* "PETSc/IS.pyx":92
  *         return self
  * 
  *     def createStride(self, size, first=0, step=0, comm=None):             # <<<<<<<<<<<<<<
@@ -74977,9 +77119,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_25createStride(PyObject *__pyx_v_
   PyObject *__pyx_v_first = 0;
   PyObject *__pyx_v_step = 0;
   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("createStride (wrapper)", 0);
@@ -75022,7 +77161,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_25createStride(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createStride") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createStride") < 0)) __PYX_ERR(29, 92, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -75041,7 +77180,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_25createStride(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createStride", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createStride", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 92, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.createStride", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -75065,52 +77204,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
   MPI_Comm __pyx_t_1;
   PetscInt __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createStride", 0);
 
-  /* "PETSc/IS.pyx":91
+  /* "PETSc/IS.pyx":93
  * 
  *     def createStride(self, size, first=0, step=0, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt csize  = asInt(size)
  *         cdef PetscInt cfirst = asInt(first)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 93, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":92
+  /* "PETSc/IS.pyx":94
  *     def createStride(self, size, first=0, step=0, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt csize  = asInt(size)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cfirst = asInt(first)
  *         cdef PetscInt cstep  = asInt(step)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(29, 94, __pyx_L1_error)
   __pyx_v_csize = __pyx_t_2;
 
-  /* "PETSc/IS.pyx":93
+  /* "PETSc/IS.pyx":95
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt csize  = asInt(size)
  *         cdef PetscInt cfirst = asInt(first)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cstep  = asInt(step)
  *         cdef PetscIS newiset = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_first); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_first); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(29, 95, __pyx_L1_error)
   __pyx_v_cfirst = __pyx_t_2;
 
-  /* "PETSc/IS.pyx":94
+  /* "PETSc/IS.pyx":96
  *         cdef PetscInt csize  = asInt(size)
  *         cdef PetscInt cfirst = asInt(first)
  *         cdef PetscInt cstep  = asInt(step)             # <<<<<<<<<<<<<<
  *         cdef PetscIS newiset = NULL
  *         CHKERR( ISCreateStride(ccomm, csize, cfirst, cstep, &newiset) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(29, 96, __pyx_L1_error)
   __pyx_v_cstep = __pyx_t_2;
 
-  /* "PETSc/IS.pyx":95
+  /* "PETSc/IS.pyx":97
  *         cdef PetscInt cfirst = asInt(first)
  *         cdef PetscInt cstep  = asInt(step)
  *         cdef PetscIS newiset = NULL             # <<<<<<<<<<<<<<
@@ -75119,16 +77255,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
  */
   __pyx_v_newiset = NULL;
 
-  /* "PETSc/IS.pyx":96
+  /* "PETSc/IS.pyx":98
  *         cdef PetscInt cstep  = asInt(step)
  *         cdef PetscIS newiset = NULL
  *         CHKERR( ISCreateStride(ccomm, csize, cfirst, cstep, &newiset) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.iset = newiset
  *         return self
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreateStride(__pyx_v_ccomm, __pyx_v_csize, __pyx_v_cfirst, __pyx_v_cstep, (&__pyx_v_newiset))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreateStride(__pyx_v_ccomm, __pyx_v_csize, __pyx_v_cfirst, __pyx_v_cstep, (&__pyx_v_newiset))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(29, 98, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":97
+  /* "PETSc/IS.pyx":99
  *         cdef PetscIS newiset = NULL
  *         CHKERR( ISCreateStride(ccomm, csize, cfirst, cstep, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset             # <<<<<<<<<<<<<<
@@ -75138,7 +77274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->iset = __pyx_v_newiset;
 
-  /* "PETSc/IS.pyx":98
+  /* "PETSc/IS.pyx":100
  *         CHKERR( ISCreateStride(ccomm, csize, cfirst, cstep, &newiset) )
  *         PetscCLEAR(self.obj); self.iset = newiset
  *         return self             # <<<<<<<<<<<<<<
@@ -75150,7 +77286,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":90
+  /* "PETSc/IS.pyx":92
  *         return self
  * 
  *     def createStride(self, size, first=0, step=0, comm=None):             # <<<<<<<<<<<<<<
@@ -75168,7 +77304,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":100
+/* "PETSc/IS.pyx":102
  *         return self
  * 
  *     def duplicate(self):             # <<<<<<<<<<<<<<
@@ -75201,12 +77337,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_26duplicate(struct PyPetscISObjec
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("duplicate", 0);
 
-  /* "PETSc/IS.pyx":101
+  /* "PETSc/IS.pyx":103
  * 
  *     def duplicate(self):
  *         cdef IS iset = type(self)()             # <<<<<<<<<<<<<<
@@ -75225,27 +77358,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_26duplicate(struct PyPetscISObjec
     }
   }
   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[29]; __pyx_lineno = 101; __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(29, 103, __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[29]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 103, __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_8petsc4py_5PETSc_IS))))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS))))) __PYX_ERR(29, 103, __pyx_L1_error)
   __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":102
+  /* "PETSc/IS.pyx":104
  *     def duplicate(self):
  *         cdef IS iset = type(self)()
  *         CHKERR( ISDuplicate(self.iset, &iset.iset) )             # <<<<<<<<<<<<<<
  *         return iset
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDuplicate(__pyx_v_self->iset, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDuplicate(__pyx_v_self->iset, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(29, 104, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":103
+  /* "PETSc/IS.pyx":105
  *         cdef IS iset = type(self)()
  *         CHKERR( ISDuplicate(self.iset, &iset.iset) )
  *         return iset             # <<<<<<<<<<<<<<
@@ -75257,7 +77390,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_26duplicate(struct PyPetscISObjec
   __pyx_r = ((PyObject *)__pyx_v_iset);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":100
+  /* "PETSc/IS.pyx":102
  *         return self
  * 
  *     def duplicate(self):             # <<<<<<<<<<<<<<
@@ -75279,7 +77412,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_26duplicate(struct PyPetscISObjec
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":105
+/* "PETSc/IS.pyx":107
  *         return iset
  * 
  *     def copy(self, IS result=None):             # <<<<<<<<<<<<<<
@@ -75292,9 +77425,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_29copy(PyObject *__pyx_v_self, Py
 static char __pyx_doc_8petsc4py_5PETSc_2IS_28copy[] = "IS.copy(self, IS result=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_29copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_result = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("copy (wrapper)", 0);
@@ -75319,7 +77449,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_29copy(PyObject *__pyx_v_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) __PYX_ERR(29, 107, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -75332,13 +77462,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_29copy(PyObject *__pyx_v_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("copy", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("copy", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 107, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.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_8petsc4py_5PETSc_IS, 1, "result", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "result", 0))) __PYX_ERR(29, 107, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_28copy(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_result);
 
   /* function exit code */
@@ -75359,13 +77489,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("copy", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/IS.pyx":106
+  /* "PETSc/IS.pyx":108
  * 
  *     def copy(self, IS result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -75376,7 +77503,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/IS.pyx":107
+    /* "PETSc/IS.pyx":109
  *     def copy(self, IS result=None):
  *         if result is None:
  *             result = type(self)()             # <<<<<<<<<<<<<<
@@ -75395,21 +77522,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
       }
     }
     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[29]; __pyx_lineno = 107; __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(29, 109, __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[29]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 109, __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_8petsc4py_5PETSc_IS))))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_IS))))) __PYX_ERR(29, 109, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscISObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/IS.pyx":108
+ * 
+ *     def copy(self, IS result=None):
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = type(self)()
+ *         if result.iset == NULL:
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":108
+  /* "PETSc/IS.pyx":110
  *         if result is None:
  *             result = type(self)()
  *         if result.iset == NULL:             # <<<<<<<<<<<<<<
@@ -75419,28 +77552,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
   __pyx_t_2 = ((__pyx_v_result->iset == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/IS.pyx":109
+    /* "PETSc/IS.pyx":111
  *             result = type(self)()
  *         if result.iset == NULL:
  *             CHKERR( ISDuplicate(self.iset, &result.iset) )             # <<<<<<<<<<<<<<
  *         CHKERR( ISCopy(self.iset, result.iset) )
  *         return result
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDuplicate(__pyx_v_self->iset, (&__pyx_v_result->iset))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDuplicate(__pyx_v_self->iset, (&__pyx_v_result->iset))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(29, 111, __pyx_L1_error)
+
+    /* "PETSc/IS.pyx":110
+ *         if result is None:
+ *             result = type(self)()
+ *         if result.iset == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( ISDuplicate(self.iset, &result.iset) )
+ *         CHKERR( ISCopy(self.iset, result.iset) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/IS.pyx":110
+  /* "PETSc/IS.pyx":112
  *         if result.iset == NULL:
  *             CHKERR( ISDuplicate(self.iset, &result.iset) )
  *         CHKERR( ISCopy(self.iset, result.iset) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCopy(__pyx_v_self->iset, __pyx_v_result->iset)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCopy(__pyx_v_self->iset, __pyx_v_result->iset)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(29, 112, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":111
+  /* "PETSc/IS.pyx":113
  *             CHKERR( ISDuplicate(self.iset, &result.iset) )
  *         CHKERR( ISCopy(self.iset, result.iset) )
  *         return result             # <<<<<<<<<<<<<<
@@ -75452,7 +77591,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":105
+  /* "PETSc/IS.pyx":107
  *         return iset
  * 
  *     def copy(self, IS result=None):             # <<<<<<<<<<<<<<
@@ -75474,7 +77613,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":113
+/* "PETSc/IS.pyx":115
  *         return result
  * 
  *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
@@ -75487,9 +77626,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_31load(PyObject *__pyx_v_self, Py
 static char __pyx_doc_8petsc4py_5PETSc_2IS_30load[] = "IS.load(self, Viewer viewer)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_31load(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("load (wrapper)", 0);
@@ -75511,7 +77647,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_31load(PyObject *__pyx_v_self, Py
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "load") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "load") < 0)) __PYX_ERR(29, 115, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -75522,13 +77658,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_31load(PyObject *__pyx_v_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 115, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.load", __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, 0, "viewer", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 0, "viewer", 0))) __PYX_ERR(29, 115, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_30load(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -75547,12 +77683,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
   __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("load", 0);
 
-  /* "PETSc/IS.pyx":114
+  /* "PETSc/IS.pyx":116
  * 
  *     def load(self, Viewer viewer not None):
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -75561,7 +77694,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
  */
   __pyx_v_comm = MPI_COMM_NULL;
 
-  /* "PETSc/IS.pyx":115
+  /* "PETSc/IS.pyx":117
  *     def load(self, Viewer viewer not None):
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)             # <<<<<<<<<<<<<<
@@ -75570,7 +77703,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_viewer->vwr);
 
-  /* "PETSc/IS.pyx":116
+  /* "PETSc/IS.pyx":118
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.iset == NULL:             # <<<<<<<<<<<<<<
@@ -75580,37 +77713,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
   __pyx_t_1 = ((__pyx_v_self->iset == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/IS.pyx":117
+    /* "PETSc/IS.pyx":119
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.iset == NULL:
  *             CHKERR( PetscObjectGetComm(obj, &comm) )             # <<<<<<<<<<<<<<
  *             CHKERR( ISCreate(comm, &self.iset) )
  *         CHKERR( ISLoad(self.iset, viewer.vwr) )
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 119, __pyx_L1_error)
 
-    /* "PETSc/IS.pyx":118
+    /* "PETSc/IS.pyx":120
  *         if self.iset == NULL:
  *             CHKERR( PetscObjectGetComm(obj, &comm) )
  *             CHKERR( ISCreate(comm, &self.iset) )             # <<<<<<<<<<<<<<
  *         CHKERR( ISLoad(self.iset, viewer.vwr) )
  *         return self
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreate(__pyx_v_comm, (&__pyx_v_self->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreate(__pyx_v_comm, (&__pyx_v_self->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 120, __pyx_L1_error)
+
+    /* "PETSc/IS.pyx":118
+ *         cdef MPI_Comm comm = MPI_COMM_NULL
+ *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
+ *         if self.iset == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectGetComm(obj, &comm) )
+ *             CHKERR( ISCreate(comm, &self.iset) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":119
+  /* "PETSc/IS.pyx":121
  *             CHKERR( PetscObjectGetComm(obj, &comm) )
  *             CHKERR( ISCreate(comm, &self.iset) )
  *         CHKERR( ISLoad(self.iset, viewer.vwr) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLoad(__pyx_v_self->iset, __pyx_v_viewer->vwr)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLoad(__pyx_v_self->iset, __pyx_v_viewer->vwr)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 121, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":120
+  /* "PETSc/IS.pyx":122
  *             CHKERR( ISCreate(comm, &self.iset) )
  *         CHKERR( ISLoad(self.iset, viewer.vwr) )
  *         return self             # <<<<<<<<<<<<<<
@@ -75622,7 +77761,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":113
+  /* "PETSc/IS.pyx":115
  *         return result
  * 
  *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
@@ -75640,7 +77779,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":122
+/* "PETSc/IS.pyx":124
  *         return self
  * 
  *     def allGather(self):             # <<<<<<<<<<<<<<
@@ -75671,33 +77810,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_32allGather(struct PyPetscISObjec
   __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("allGather", 0);
 
-  /* "PETSc/IS.pyx":123
+  /* "PETSc/IS.pyx":125
  * 
  *     def allGather(self):
  *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISAllGather(self.iset, &iset.iset) )
  *         return iset
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":124
+  /* "PETSc/IS.pyx":126
  *     def allGather(self):
  *         cdef IS iset = IS()
  *         CHKERR( ISAllGather(self.iset, &iset.iset) )             # <<<<<<<<<<<<<<
  *         return iset
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISAllGather(__pyx_v_self->iset, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISAllGather(__pyx_v_self->iset, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 126, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":125
+  /* "PETSc/IS.pyx":127
  *         cdef IS iset = IS()
  *         CHKERR( ISAllGather(self.iset, &iset.iset) )
  *         return iset             # <<<<<<<<<<<<<<
@@ -75709,7 +77845,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_32allGather(struct PyPetscISObjec
   __pyx_r = ((PyObject *)__pyx_v_iset);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":122
+  /* "PETSc/IS.pyx":124
  *         return self
  * 
  *     def allGather(self):             # <<<<<<<<<<<<<<
@@ -75729,7 +77865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_32allGather(struct PyPetscISObjec
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":127
+/* "PETSc/IS.pyx":129
  *         return iset
  * 
  *     def toGeneral(self):             # <<<<<<<<<<<<<<
@@ -75758,21 +77894,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_34toGeneral(struct PyPetscISObjec
   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("toGeneral", 0);
 
-  /* "PETSc/IS.pyx":128
+  /* "PETSc/IS.pyx":130
  * 
  *     def toGeneral(self):
  *         CHKERR( ISToGeneral(self.iset) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISToGeneral(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISToGeneral(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 130, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":129
+  /* "PETSc/IS.pyx":131
  *     def toGeneral(self):
  *         CHKERR( ISToGeneral(self.iset) )
  *         return self             # <<<<<<<<<<<<<<
@@ -75784,7 +77917,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_34toGeneral(struct PyPetscISObjec
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":127
+  /* "PETSc/IS.pyx":129
  *         return iset
  * 
  *     def toGeneral(self):             # <<<<<<<<<<<<<<
@@ -75802,7 +77935,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_34toGeneral(struct PyPetscISObjec
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":131
+/* "PETSc/IS.pyx":133
  *         return self
  * 
  *     def invertPermutation(self, nlocal=None):             # <<<<<<<<<<<<<<
@@ -75815,9 +77948,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_37invertPermutation(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_2IS_36invertPermutation[] = "IS.invertPermutation(self, nlocal=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_37invertPermutation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_nlocal = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("invertPermutation (wrapper)", 0);
@@ -75842,7 +77972,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_37invertPermutation(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "invertPermutation") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "invertPermutation") < 0)) __PYX_ERR(29, 133, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -75855,7 +77985,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_37invertPermutation(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("invertPermutation", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("invertPermutation", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 133, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.invertPermutation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -75878,12 +78008,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_36invertPermutation(struct PyPets
   PetscInt __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("invertPermutation", 0);
 
-  /* "PETSc/IS.pyx":132
+  /* "PETSc/IS.pyx":134
  * 
  *     def invertPermutation(self, nlocal=None):
  *         cdef PetscInt cnlocal = PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -75892,7 +78019,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_36invertPermutation(struct PyPets
  */
   __pyx_v_cnlocal = PETSC_DECIDE;
 
-  /* "PETSc/IS.pyx":133
+  /* "PETSc/IS.pyx":135
  *     def invertPermutation(self, nlocal=None):
  *         cdef PetscInt cnlocal = PETSC_DECIDE
  *         if nlocal is not None: cnlocal = asInt(nlocal)             # <<<<<<<<<<<<<<
@@ -75902,34 +78029,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_36invertPermutation(struct PyPets
   __pyx_t_1 = (__pyx_v_nlocal != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlocal); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlocal); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(29, 135, __pyx_L1_error)
     __pyx_v_cnlocal = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":134
+  /* "PETSc/IS.pyx":136
  *         cdef PetscInt cnlocal = PETSC_DECIDE
  *         if nlocal is not None: cnlocal = asInt(nlocal)
  *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISInvertPermutation(self.iset, cnlocal, &iset.iset) )
  *         return iset
  */
-  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 136, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/IS.pyx":135
+  /* "PETSc/IS.pyx":137
  *         if nlocal is not None: cnlocal = asInt(nlocal)
  *         cdef IS iset = IS()
  *         CHKERR( ISInvertPermutation(self.iset, cnlocal, &iset.iset) )             # <<<<<<<<<<<<<<
  *         return iset
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISInvertPermutation(__pyx_v_self->iset, __pyx_v_cnlocal, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISInvertPermutation(__pyx_v_self->iset, __pyx_v_cnlocal, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(29, 137, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":136
+  /* "PETSc/IS.pyx":138
  *         cdef IS iset = IS()
  *         CHKERR( ISInvertPermutation(self.iset, cnlocal, &iset.iset) )
  *         return iset             # <<<<<<<<<<<<<<
@@ -75941,7 +78066,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_36invertPermutation(struct PyPets
   __pyx_r = ((PyObject *)__pyx_v_iset);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":131
+  /* "PETSc/IS.pyx":133
  *         return self
  * 
  *     def invertPermutation(self, nlocal=None):             # <<<<<<<<<<<<<<
@@ -75961,7 +78086,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_36invertPermutation(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":138
+/* "PETSc/IS.pyx":140
  *         return iset
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -75992,12 +78117,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_38getSize(struct PyPetscISObject
   __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("getSize", 0);
 
-  /* "PETSc/IS.pyx":139
+  /* "PETSc/IS.pyx":141
  * 
  *     def getSize(self):
  *         cdef PetscInt N = 0             # <<<<<<<<<<<<<<
@@ -76006,16 +78128,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_38getSize(struct PyPetscISObject
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/IS.pyx":140
+  /* "PETSc/IS.pyx":142
  *     def getSize(self):
  *         cdef PetscInt N = 0
  *         CHKERR( ISGetSize(self.iset, &N) )             # <<<<<<<<<<<<<<
  *         return toInt(N)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetSize(__pyx_v_self->iset, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetSize(__pyx_v_self->iset, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 142, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":141
+  /* "PETSc/IS.pyx":143
  *         cdef PetscInt N = 0
  *         CHKERR( ISGetSize(self.iset, &N) )
  *         return toInt(N)             # <<<<<<<<<<<<<<
@@ -76023,13 +78145,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_38getSize(struct PyPetscISObject
  *     def getLocalSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":138
+  /* "PETSc/IS.pyx":140
  *         return iset
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -76048,7 +78170,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_38getSize(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":143
+/* "PETSc/IS.pyx":145
  *         return toInt(N)
  * 
  *     def getLocalSize(self):             # <<<<<<<<<<<<<<
@@ -76079,12 +78201,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_40getLocalSize(struct PyPetscISOb
   __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("getLocalSize", 0);
 
-  /* "PETSc/IS.pyx":144
+  /* "PETSc/IS.pyx":146
  * 
  *     def getLocalSize(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -76093,16 +78212,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_40getLocalSize(struct PyPetscISOb
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/IS.pyx":145
+  /* "PETSc/IS.pyx":147
  *     def getLocalSize(self):
  *         cdef PetscInt n = 0
  *         CHKERR( ISGetLocalSize(self.iset, &n) )             # <<<<<<<<<<<<<<
  *         return toInt(n)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 147, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":146
+  /* "PETSc/IS.pyx":148
  *         cdef PetscInt n = 0
  *         CHKERR( ISGetLocalSize(self.iset, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -76110,13 +78229,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_40getLocalSize(struct PyPetscISOb
  *     def getSizes(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 148, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":143
+  /* "PETSc/IS.pyx":145
  *         return toInt(N)
  * 
  *     def getLocalSize(self):             # <<<<<<<<<<<<<<
@@ -76135,7 +78254,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_40getLocalSize(struct PyPetscISOb
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":148
+/* "PETSc/IS.pyx":150
  *         return toInt(n)
  * 
  *     def getSizes(self):             # <<<<<<<<<<<<<<
@@ -76169,12 +78288,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject
   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("getSizes", 0);
 
-  /* "PETSc/IS.pyx":149
+  /* "PETSc/IS.pyx":151
  * 
  *     def getSizes(self):
  *         cdef PetscInt n = 0, N = 0             # <<<<<<<<<<<<<<
@@ -76184,25 +78300,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/IS.pyx":150
+  /* "PETSc/IS.pyx":152
  *     def getSizes(self):
  *         cdef PetscInt n = 0, N = 0
  *         CHKERR( ISGetLocalSize(self.iset, &n) )             # <<<<<<<<<<<<<<
  *         CHKERR( ISGetSize(self.iset, &N) )
  *         return (toInt(n), toInt(N))
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 152, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":151
+  /* "PETSc/IS.pyx":153
  *         cdef PetscInt n = 0, N = 0
  *         CHKERR( ISGetLocalSize(self.iset, &n) )
  *         CHKERR( ISGetSize(self.iset, &N) )             # <<<<<<<<<<<<<<
  *         return (toInt(n), toInt(N))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetSize(__pyx_v_self->iset, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetSize(__pyx_v_self->iset, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 153, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":152
+  /* "PETSc/IS.pyx":154
  *         CHKERR( ISGetLocalSize(self.iset, &n) )
  *         CHKERR( ISGetSize(self.iset, &N) )
  *         return (toInt(n), toInt(N))             # <<<<<<<<<<<<<<
@@ -76210,11 +78326,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject
  *     def getBlockSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -76226,7 +78342,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":148
+  /* "PETSc/IS.pyx":150
  *         return toInt(n)
  * 
  *     def getSizes(self):             # <<<<<<<<<<<<<<
@@ -76247,7 +78363,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":154
+/* "PETSc/IS.pyx":156
  *         return (toInt(n), toInt(N))
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -76278,12 +78394,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_44getBlockSize(struct PyPetscISOb
   __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("getBlockSize", 0);
 
-  /* "PETSc/IS.pyx":155
+  /* "PETSc/IS.pyx":157
  * 
  *     def getBlockSize(self):
  *         cdef PetscInt bs = 1             # <<<<<<<<<<<<<<
@@ -76292,16 +78405,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_44getBlockSize(struct PyPetscISOb
  */
   __pyx_v_bs = 1;
 
-  /* "PETSc/IS.pyx":156
+  /* "PETSc/IS.pyx":158
  *     def getBlockSize(self):
  *         cdef PetscInt bs = 1
  *         CHKERR( ISGetBlockSize(self.iset, &bs) )             # <<<<<<<<<<<<<<
  *         return toInt(bs)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetBlockSize(__pyx_v_self->iset, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetBlockSize(__pyx_v_self->iset, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 158, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":157
+  /* "PETSc/IS.pyx":159
  *         cdef PetscInt bs = 1
  *         CHKERR( ISGetBlockSize(self.iset, &bs) )
  *         return toInt(bs)             # <<<<<<<<<<<<<<
@@ -76309,13 +78422,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_44getBlockSize(struct PyPetscISOb
  *     def setBlockSize(self, bs):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":154
+  /* "PETSc/IS.pyx":156
  *         return (toInt(n), toInt(N))
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -76334,7 +78447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_44getBlockSize(struct PyPetscISOb
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":159
+/* "PETSc/IS.pyx":161
  *         return toInt(bs)
  * 
  *     def setBlockSize(self, bs):             # <<<<<<<<<<<<<<
@@ -76347,9 +78460,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_47setBlockSize(PyObject *__pyx_v_
 static char __pyx_doc_8petsc4py_5PETSc_2IS_46setBlockSize[] = "IS.setBlockSize(self, bs)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_47setBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_bs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setBlockSize (wrapper)", 0);
@@ -76371,7 +78481,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_47setBlockSize(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, "setBlockSize") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockSize") < 0)) __PYX_ERR(29, 161, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -76382,7 +78492,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_47setBlockSize(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBlockSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBlockSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 161, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.setBlockSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -76401,31 +78511,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_46setBlockSize(struct PyPetscISOb
   __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("setBlockSize", 0);
 
-  /* "PETSc/IS.pyx":160
+  /* "PETSc/IS.pyx":162
  * 
  *     def setBlockSize(self, bs):
  *         cdef PetscInt cbs = asInt(bs)             # <<<<<<<<<<<<<<
  *         CHKERR( ISSetBlockSize(self.iset, cbs) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bs); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bs); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(29, 162, __pyx_L1_error)
   __pyx_v_cbs = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":161
+  /* "PETSc/IS.pyx":163
  *     def setBlockSize(self, bs):
  *         cdef PetscInt cbs = asInt(bs)
  *         CHKERR( ISSetBlockSize(self.iset, cbs) )             # <<<<<<<<<<<<<<
  * 
  *     def sort(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetBlockSize(__pyx_v_self->iset, __pyx_v_cbs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetBlockSize(__pyx_v_self->iset, __pyx_v_cbs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 163, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":159
+  /* "PETSc/IS.pyx":161
  *         return toInt(bs)
  * 
  *     def setBlockSize(self, bs):             # <<<<<<<<<<<<<<
@@ -76445,7 +78552,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_46setBlockSize(struct PyPetscISOb
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":163
+/* "PETSc/IS.pyx":165
  *         CHKERR( ISSetBlockSize(self.iset, cbs) )
  * 
  *     def sort(self):             # <<<<<<<<<<<<<<
@@ -76474,21 +78581,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_48sort(struct PyPetscISObject *__
   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("sort", 0);
 
-  /* "PETSc/IS.pyx":164
+  /* "PETSc/IS.pyx":166
  * 
  *     def sort(self):
  *         CHKERR( ISSort(self.iset) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSort(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSort(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 166, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":165
+  /* "PETSc/IS.pyx":167
  *     def sort(self):
  *         CHKERR( ISSort(self.iset) )
  *         return self             # <<<<<<<<<<<<<<
@@ -76500,7 +78604,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_48sort(struct PyPetscISObject *__
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":163
+  /* "PETSc/IS.pyx":165
  *         CHKERR( ISSetBlockSize(self.iset, cbs) )
  * 
  *     def sort(self):             # <<<<<<<<<<<<<<
@@ -76518,7 +78622,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_48sort(struct PyPetscISObject *__
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":167
+/* "PETSc/IS.pyx":169
  *         return self
  * 
  *     def isSorted(self):             # <<<<<<<<<<<<<<
@@ -76549,12 +78653,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject
   __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("isSorted", 0);
 
-  /* "PETSc/IS.pyx":168
+  /* "PETSc/IS.pyx":170
  * 
  *     def isSorted(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -76563,16 +78664,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/IS.pyx":169
+  /* "PETSc/IS.pyx":171
  *     def isSorted(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISSorted(self.iset, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint> flag
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 171, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":170
+  /* "PETSc/IS.pyx":172
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISSorted(self.iset, &flag) )
  *         return <bint> flag             # <<<<<<<<<<<<<<
@@ -76580,13 +78681,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject
  *     def setPermutation(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 172, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":167
+  /* "PETSc/IS.pyx":169
  *         return self
  * 
  *     def isSorted(self):             # <<<<<<<<<<<<<<
@@ -76605,7 +78706,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":172
+/* "PETSc/IS.pyx":174
  *         return <bint> flag
  * 
  *     def setPermutation(self):             # <<<<<<<<<<<<<<
@@ -76634,21 +78735,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_52setPermutation(struct PyPetscIS
   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("setPermutation", 0);
 
-  /* "PETSc/IS.pyx":173
+  /* "PETSc/IS.pyx":175
  * 
  *     def setPermutation(self):
  *         CHKERR( ISSetPermutation(self.iset) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetPermutation(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetPermutation(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 175, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":174
+  /* "PETSc/IS.pyx":176
  *     def setPermutation(self):
  *         CHKERR( ISSetPermutation(self.iset) )
  *         return self             # <<<<<<<<<<<<<<
@@ -76660,7 +78758,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_52setPermutation(struct PyPetscIS
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":172
+  /* "PETSc/IS.pyx":174
  *         return <bint> flag
  * 
  *     def setPermutation(self):             # <<<<<<<<<<<<<<
@@ -76678,7 +78776,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_52setPermutation(struct PyPetscIS
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":176
+/* "PETSc/IS.pyx":178
  *         return self
  * 
  *     def isPermutation(self):             # <<<<<<<<<<<<<<
@@ -76709,12 +78807,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISO
   __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("isPermutation", 0);
 
-  /* "PETSc/IS.pyx":177
+  /* "PETSc/IS.pyx":179
  * 
  *     def isPermutation(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -76723,16 +78818,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISO
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/IS.pyx":178
+  /* "PETSc/IS.pyx":180
  *     def isPermutation(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISPermutation(self.iset, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint> flag
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISPermutation(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISPermutation(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 180, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":179
+  /* "PETSc/IS.pyx":181
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISPermutation(self.iset, &flag) )
  *         return <bint> flag             # <<<<<<<<<<<<<<
@@ -76740,13 +78835,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISO
  *     def setIdentity(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":176
+  /* "PETSc/IS.pyx":178
  *         return self
  * 
  *     def isPermutation(self):             # <<<<<<<<<<<<<<
@@ -76765,7 +78860,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":181
+/* "PETSc/IS.pyx":183
  *         return <bint> flag
  * 
  *     def setIdentity(self):             # <<<<<<<<<<<<<<
@@ -76794,21 +78889,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_56setIdentity(struct PyPetscISObj
   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("setIdentity", 0);
 
-  /* "PETSc/IS.pyx":182
+  /* "PETSc/IS.pyx":184
  * 
  *     def setIdentity(self):
  *         CHKERR( ISSetIdentity(self.iset) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetIdentity(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetIdentity(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 184, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":183
+  /* "PETSc/IS.pyx":185
  *     def setIdentity(self):
  *         CHKERR( ISSetIdentity(self.iset) )
  *         return self             # <<<<<<<<<<<<<<
@@ -76820,7 +78912,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_56setIdentity(struct PyPetscISObj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":181
+  /* "PETSc/IS.pyx":183
  *         return <bint> flag
  * 
  *     def setIdentity(self):             # <<<<<<<<<<<<<<
@@ -76838,7 +78930,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_56setIdentity(struct PyPetscISObj
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":185
+/* "PETSc/IS.pyx":187
  *         return self
  * 
  *     def isIdentity(self):             # <<<<<<<<<<<<<<
@@ -76869,12 +78961,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObje
   __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("isIdentity", 0);
 
-  /* "PETSc/IS.pyx":186
+  /* "PETSc/IS.pyx":188
  * 
  *     def isIdentity(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -76883,16 +78972,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObje
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/IS.pyx":187
+  /* "PETSc/IS.pyx":189
  *     def isIdentity(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISIdentity(self.iset, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint> flag
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISIdentity(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISIdentity(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 189, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":188
+  /* "PETSc/IS.pyx":190
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISIdentity(self.iset, &flag) )
  *         return <bint> flag             # <<<<<<<<<<<<<<
@@ -76900,13 +78989,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObje
  *     def equal(self, IS iset not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":185
+  /* "PETSc/IS.pyx":187
  *         return self
  * 
  *     def isIdentity(self):             # <<<<<<<<<<<<<<
@@ -76925,7 +79014,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObje
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":190
+/* "PETSc/IS.pyx":192
  *         return <bint> flag
  * 
  *     def equal(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -76938,9 +79027,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_61equal(PyObject *__pyx_v_self, P
 static char __pyx_doc_8petsc4py_5PETSc_2IS_60equal[] = "IS.equal(self, IS iset)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_61equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("equal (wrapper)", 0);
@@ -76962,7 +79048,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_61equal(PyObject *__pyx_v_self, P
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "equal") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "equal") < 0)) __PYX_ERR(29, 192, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -76973,13 +79059,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_61equal(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("equal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("equal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 192, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.equal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 192, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_60equal(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
@@ -76997,12 +79083,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_60equal(struct PyPetscISObject *_
   __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("equal", 0);
 
-  /* "PETSc/IS.pyx":191
+  /* "PETSc/IS.pyx":193
  * 
  *     def equal(self, IS iset not None):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -77011,16 +79094,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_60equal(struct PyPetscISObject *_
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/IS.pyx":192
+  /* "PETSc/IS.pyx":194
  *     def equal(self, IS iset not None):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISEqual(self.iset, iset.iset, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint> flag
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISEqual(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISEqual(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 194, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":193
+  /* "PETSc/IS.pyx":195
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISEqual(self.iset, iset.iset, &flag) )
  *         return <bint> flag             # <<<<<<<<<<<<<<
@@ -77028,13 +79111,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_60equal(struct PyPetscISObject *_
  *     def sum(self, IS iset not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":190
+  /* "PETSc/IS.pyx":192
  *         return <bint> flag
  * 
  *     def equal(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -77053,7 +79136,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_60equal(struct PyPetscISObject *_
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":195
+/* "PETSc/IS.pyx":197
  *         return <bint> flag
  * 
  *     def sum(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -77066,9 +79149,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_63sum(PyObject *__pyx_v_self, PyO
 static char __pyx_doc_8petsc4py_5PETSc_2IS_62sum[] = "IS.sum(self, IS iset)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_63sum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("sum (wrapper)", 0);
@@ -77090,7 +79170,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_63sum(PyObject *__pyx_v_self, PyO
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sum") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sum") < 0)) __PYX_ERR(29, 197, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -77101,13 +79181,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_63sum(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("sum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("sum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 197, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 197, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_62sum(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
@@ -77125,33 +79205,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__p
   __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("sum", 0);
 
-  /* "PETSc/IS.pyx":196
+  /* "PETSc/IS.pyx":198
  * 
  *     def sum(self, IS iset not None):
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
  *         return out
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_out = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":197
+  /* "PETSc/IS.pyx":199
  *     def sum(self, IS iset not None):
  *         cdef IS out = IS()
  *         CHKERR( ISSum(self.iset, iset.iset, &out.iset) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSum(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSum(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 199, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":198
+  /* "PETSc/IS.pyx":200
  *         cdef IS out = IS()
  *         CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
@@ -77163,7 +79240,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__p
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":195
+  /* "PETSc/IS.pyx":197
  *         return <bint> flag
  * 
  *     def sum(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -77183,7 +79260,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":200
+/* "PETSc/IS.pyx":202
  *         return out
  * 
  *     def expand(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -77196,9 +79273,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_65expand(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_2IS_64expand[] = "IS.expand(self, IS iset)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_65expand(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("expand (wrapper)", 0);
@@ -77220,7 +79294,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_65expand(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, "expand") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "expand") < 0)) __PYX_ERR(29, 202, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -77231,13 +79305,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_65expand(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("expand", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("expand", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 202, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.expand", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 202, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_64expand(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
@@ -77255,33 +79329,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *
   __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("expand", 0);
 
-  /* "PETSc/IS.pyx":201
+  /* "PETSc/IS.pyx":203
  * 
  *     def expand(self, IS iset not None):
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  *         return out
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 203, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_out = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":202
+  /* "PETSc/IS.pyx":204
  *     def expand(self, IS iset not None):
  *         cdef IS out = IS()
  *         CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISExpand(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISExpand(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 204, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":203
+  /* "PETSc/IS.pyx":205
  *         cdef IS out = IS()
  *         CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
@@ -77293,7 +79364,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":200
+  /* "PETSc/IS.pyx":202
  *         return out
  * 
  *     def expand(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -77313,7 +79384,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":205
+/* "PETSc/IS.pyx":207
  *         return out
  * 
  *     def union(self, IS iset not None): # XXX review this             # <<<<<<<<<<<<<<
@@ -77326,9 +79397,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_67union(PyObject *__pyx_v_self, P
 static char __pyx_doc_8petsc4py_5PETSc_2IS_66union[] = "IS.union(self, IS iset)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_67union(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("union (wrapper)", 0);
@@ -77350,7 +79418,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_67union(PyObject *__pyx_v_self, P
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "union") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "union") < 0)) __PYX_ERR(29, 207, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -77361,13 +79429,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_67union(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("union", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("union", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 207, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.union", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 207, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_66union(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
@@ -77389,12 +79457,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("union", 0);
 
-  /* "PETSc/IS.pyx":206
+  /* "PETSc/IS.pyx":208
  * 
  *     def union(self, IS iset not None): # XXX review this
  *         cdef PetscBool flag1=PETSC_FALSE, flag2=PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -77404,37 +79469,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
   __pyx_v_flag1 = PETSC_FALSE;
   __pyx_v_flag2 = PETSC_FALSE;
 
-  /* "PETSc/IS.pyx":207
+  /* "PETSc/IS.pyx":209
  *     def union(self, IS iset not None): # XXX review this
  *         cdef PetscBool flag1=PETSC_FALSE, flag2=PETSC_FALSE
  *         CHKERR( ISSorted(self.iset, &flag1) )             # <<<<<<<<<<<<<<
  *         CHKERR( ISSorted(iset.iset, &flag2) )
  *         cdef IS out = IS()
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_self->iset, (&__pyx_v_flag1))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_self->iset, (&__pyx_v_flag1))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 209, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":208
+  /* "PETSc/IS.pyx":210
  *         cdef PetscBool flag1=PETSC_FALSE, flag2=PETSC_FALSE
  *         CHKERR( ISSorted(self.iset, &flag1) )
  *         CHKERR( ISSorted(iset.iset, &flag2) )             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         if flag1==PETSC_TRUE and flag2==PETSC_TRUE:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_iset->iset, (&__pyx_v_flag2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_iset->iset, (&__pyx_v_flag2))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 210, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":209
+  /* "PETSc/IS.pyx":211
  *         CHKERR( ISSorted(self.iset, &flag1) )
  *         CHKERR( ISSorted(iset.iset, &flag2) )
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         if flag1==PETSC_TRUE and flag2==PETSC_TRUE:
  *             CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_out = ((struct PyPetscISObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/IS.pyx":210
+  /* "PETSc/IS.pyx":212
  *         CHKERR( ISSorted(iset.iset, &flag2) )
  *         cdef IS out = IS()
  *         if flag1==PETSC_TRUE and flag2==PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -77452,30 +79517,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "PETSc/IS.pyx":211
+    /* "PETSc/IS.pyx":213
  *         cdef IS out = IS()
  *         if flag1==PETSC_TRUE and flag2==PETSC_TRUE:
  *             CHKERR( ISSum(self.iset, iset.iset, &out.iset) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSum(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSum(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 213, __pyx_L1_error)
+
+    /* "PETSc/IS.pyx":212
+ *         CHKERR( ISSorted(iset.iset, &flag2) )
+ *         cdef IS out = IS()
+ *         if flag1==PETSC_TRUE and flag2==PETSC_TRUE:             # <<<<<<<<<<<<<<
+ *             CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/IS.pyx":213
+  /* "PETSc/IS.pyx":215
  *             CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
  *         else:
  *             CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISExpand(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISExpand(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 215, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/IS.pyx":214
+  /* "PETSc/IS.pyx":216
  *         else:
  *             CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
@@ -77487,7 +79560,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":205
+  /* "PETSc/IS.pyx":207
  *         return out
  * 
  *     def union(self, IS iset not None): # XXX review this             # <<<<<<<<<<<<<<
@@ -77507,7 +79580,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":216
+/* "PETSc/IS.pyx":218
  *         return out
  * 
  *     def difference(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -77520,9 +79593,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_69difference(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_2IS_68difference[] = "IS.difference(self, IS iset)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_69difference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("difference (wrapper)", 0);
@@ -77544,7 +79614,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_69difference(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, "difference") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "difference") < 0)) __PYX_ERR(29, 218, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -77555,13 +79625,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_69difference(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("difference", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("difference", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 218, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.difference", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 218, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_68difference(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
@@ -77579,33 +79649,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_68difference(struct PyPetscISObje
   __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("difference", 0);
 
-  /* "PETSc/IS.pyx":217
+  /* "PETSc/IS.pyx":219
  * 
  *     def difference(self, IS iset not None):
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISDifference(self.iset, iset.iset, &out.iset) )
  *         return out
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_out = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":218
+  /* "PETSc/IS.pyx":220
  *     def difference(self, IS iset not None):
  *         cdef IS out = IS()
  *         CHKERR( ISDifference(self.iset, iset.iset, &out.iset) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDifference(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDifference(__pyx_v_self->iset, __pyx_v_iset->iset, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 220, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":219
+  /* "PETSc/IS.pyx":221
  *         cdef IS out = IS()
  *         CHKERR( ISDifference(self.iset, iset.iset, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
@@ -77617,7 +79684,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_68difference(struct PyPetscISObje
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":216
+  /* "PETSc/IS.pyx":218
  *         return out
  * 
  *     def difference(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -77637,7 +79704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_68difference(struct PyPetscISObje
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":221
+/* "PETSc/IS.pyx":223
  *         return out
  * 
  *     def complement(self, nmin, nmax):             # <<<<<<<<<<<<<<
@@ -77651,9 +79718,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2IS_70complement[] = "IS.complement(self,
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_71complement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_nmin = 0;
   PyObject *__pyx_v_nmax = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("complement (wrapper)", 0);
@@ -77677,11 +79741,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_71complement(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nmax)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("complement", 1, 2, 2, 1); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("complement", 1, 2, 2, 1); __PYX_ERR(29, 223, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "complement") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "complement") < 0)) __PYX_ERR(29, 223, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -77694,7 +79758,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_71complement(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("complement", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("complement", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 223, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.complement", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -77716,53 +79780,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObje
   PetscInt __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("complement", 0);
 
-  /* "PETSc/IS.pyx":222
+  /* "PETSc/IS.pyx":224
  * 
  *     def complement(self, nmin, nmax):
  *         cdef PetscInt cnmin = asInt(nmin)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cnmax = asInt(nmax)
  *         cdef IS out = IS()
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nmin); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nmin); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(29, 224, __pyx_L1_error)
   __pyx_v_cnmin = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":223
+  /* "PETSc/IS.pyx":225
  *     def complement(self, nmin, nmax):
  *         cdef PetscInt cnmin = asInt(nmin)
  *         cdef PetscInt cnmax = asInt(nmax)             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISComplement(self.iset, cnmin, cnmax, &out.iset) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nmax); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nmax); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(29, 225, __pyx_L1_error)
   __pyx_v_cnmax = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":224
+  /* "PETSc/IS.pyx":226
  *         cdef PetscInt cnmin = asInt(nmin)
  *         cdef PetscInt cnmax = asInt(nmax)
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISComplement(self.iset, cnmin, cnmax, &out.iset) )
  *         return out
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_out = ((struct PyPetscISObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/IS.pyx":225
+  /* "PETSc/IS.pyx":227
  *         cdef PetscInt cnmax = asInt(nmax)
  *         cdef IS out = IS()
  *         CHKERR( ISComplement(self.iset, cnmin, cnmax, &out.iset) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISComplement(__pyx_v_self->iset, __pyx_v_cnmin, __pyx_v_cnmax, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISComplement(__pyx_v_self->iset, __pyx_v_cnmin, __pyx_v_cnmax, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(29, 227, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":226
+  /* "PETSc/IS.pyx":228
  *         cdef IS out = IS()
  *         CHKERR( ISComplement(self.iset, cnmin, cnmax, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
@@ -77774,7 +79835,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObje
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":221
+  /* "PETSc/IS.pyx":223
  *         return out
  * 
  *     def complement(self, nmin, nmax):             # <<<<<<<<<<<<<<
@@ -77794,7 +79855,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObje
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":228
+/* "PETSc/IS.pyx":230
  *         return out
  * 
  *     def embed(self, IS iset not None, drop):             # <<<<<<<<<<<<<<
@@ -77808,9 +79869,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2IS_72embed[] = "IS.embed(self, IS iset,
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_73embed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_v_drop = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("embed (wrapper)", 0);
@@ -77834,11 +79892,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_73embed(PyObject *__pyx_v_self, P
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_drop)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("embed", 1, 2, 2, 1); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("embed", 1, 2, 2, 1); __PYX_ERR(29, 230, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "embed") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "embed") < 0)) __PYX_ERR(29, 230, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -77851,13 +79909,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_73embed(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("embed", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("embed", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 230, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.embed", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 230, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2IS_72embed(((struct PyPetscISObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_drop);
 
   /* function exit code */
@@ -77877,43 +79935,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *_
   PetscBool __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("embed", 0);
 
-  /* "PETSc/IS.pyx":229
+  /* "PETSc/IS.pyx":231
  * 
  *     def embed(self, IS iset not None, drop):
  *         cdef PetscBool bval = drop             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISEmbed(self.iset, iset.iset, bval, &out.iset) )
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_drop)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_drop)); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 231, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":230
+  /* "PETSc/IS.pyx":232
  *     def embed(self, IS iset not None, drop):
  *         cdef PetscBool bval = drop
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISEmbed(self.iset, iset.iset, bval, &out.iset) )
  *         return out
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 232, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_out = ((struct PyPetscISObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/IS.pyx":231
+  /* "PETSc/IS.pyx":233
  *         cdef PetscBool bval = drop
  *         cdef IS out = IS()
  *         CHKERR( ISEmbed(self.iset, iset.iset, bval, &out.iset) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISEmbed(__pyx_v_self->iset, __pyx_v_iset->iset, __pyx_v_bval, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISEmbed(__pyx_v_self->iset, __pyx_v_iset->iset, __pyx_v_bval, (&__pyx_v_out->iset))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(29, 233, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":232
+  /* "PETSc/IS.pyx":234
  *         cdef IS out = IS()
  *         CHKERR( ISEmbed(self.iset, iset.iset, bval, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
@@ -77925,7 +79980,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *_
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":228
+  /* "PETSc/IS.pyx":230
  *         return out
  * 
  *     def embed(self, IS iset not None, drop):             # <<<<<<<<<<<<<<
@@ -77945,7 +80000,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *_
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":236
+/* "PETSc/IS.pyx":238
  *     #
  * 
  *     def setIndices(self, indices):             # <<<<<<<<<<<<<<
@@ -77958,9 +80013,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_75setIndices(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_2IS_74setIndices[] = "IS.setIndices(self, indices)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_75setIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setIndices (wrapper)", 0);
@@ -77982,7 +80034,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_75setIndices(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, "setIndices") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIndices") < 0)) __PYX_ERR(29, 238, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -77993,7 +80045,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_75setIndices(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setIndices", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setIndices", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 238, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.setIndices", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -78014,13 +80066,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_74setIndices(struct PyPetscISObje
   __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("setIndices", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":237
+  /* "PETSc/IS.pyx":239
  * 
  *     def setIndices(self, indices):
  *         cdef PetscInt nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
@@ -78030,7 +80079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_74setIndices(struct PyPetscISObje
   __pyx_v_nidx = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":238
+  /* "PETSc/IS.pyx":240
  *     def setIndices(self, indices):
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -78039,28 +80088,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_74setIndices(struct PyPetscISObje
  */
   __pyx_v_cm = PETSC_COPY_VALUES;
 
-  /* "PETSc/IS.pyx":239
+  /* "PETSc/IS.pyx":241
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         indices = iarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
  *         CHKERR( ISGeneralSetIndices(self.iset, nidx, idx, cm) )
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":240
+  /* "PETSc/IS.pyx":242
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         indices = iarray_i(indices, &nidx, &idx)
  *         CHKERR( ISGeneralSetIndices(self.iset, nidx, idx, cm) )             # <<<<<<<<<<<<<<
  * 
  *     def getIndices(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGeneralSetIndices(__pyx_v_self->iset, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGeneralSetIndices(__pyx_v_self->iset, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 242, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":236
+  /* "PETSc/IS.pyx":238
  *     #
  * 
  *     def setIndices(self, indices):             # <<<<<<<<<<<<<<
@@ -78082,7 +80131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_74setIndices(struct PyPetscISObje
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":242
+/* "PETSc/IS.pyx":244
  *         CHKERR( ISGeneralSetIndices(self.iset, nidx, idx, cm) )
  * 
  *     def getIndices(self):             # <<<<<<<<<<<<<<
@@ -78124,12 +80173,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getIndices", 0);
 
-  /* "PETSc/IS.pyx":243
+  /* "PETSc/IS.pyx":245
  * 
  *     def getIndices(self):
  *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
@@ -78138,7 +80184,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/IS.pyx":244
+  /* "PETSc/IS.pyx":246
  *     def getIndices(self):
  *         cdef PetscInt size = 0
  *         cdef const_PetscInt *indices = NULL             # <<<<<<<<<<<<<<
@@ -78147,25 +80193,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
  */
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":245
+  /* "PETSc/IS.pyx":247
  *         cdef PetscInt size = 0
  *         cdef const_PetscInt *indices = NULL
  *         CHKERR( ISGetLocalSize(self.iset, &size) )             # <<<<<<<<<<<<<<
  *         CHKERR( ISGetIndices(self.iset, &indices) )
  *         cdef object oindices = None
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 247, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":246
+  /* "PETSc/IS.pyx":248
  *         cdef const_PetscInt *indices = NULL
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
  *         CHKERR( ISGetIndices(self.iset, &indices) )             # <<<<<<<<<<<<<<
  *         cdef object oindices = None
  *         try:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 248, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":247
+  /* "PETSc/IS.pyx":249
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
  *         CHKERR( ISGetIndices(self.iset, &indices) )
  *         cdef object oindices = None             # <<<<<<<<<<<<<<
@@ -78175,7 +80221,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
   __Pyx_INCREF(Py_None);
   __pyx_v_oindices = Py_None;
 
-  /* "PETSc/IS.pyx":248
+  /* "PETSc/IS.pyx":250
  *         CHKERR( ISGetIndices(self.iset, &indices) )
  *         cdef object oindices = None
  *         try:             # <<<<<<<<<<<<<<
@@ -78184,20 +80230,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":249
+    /* "PETSc/IS.pyx":251
  *         cdef object oindices = None
  *         try:
  *             oindices = array_i(size, indices)             # <<<<<<<<<<<<<<
  *         finally:
  *             CHKERR( ISRestoreIndices(self.iset, &indices) )
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_size, __pyx_v_indices)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_size, __pyx_v_indices)); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 251, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_oindices, __pyx_t_2);
     __pyx_t_2 = 0;
   }
 
-  /* "PETSc/IS.pyx":251
+  /* "PETSc/IS.pyx":253
  *             oindices = array_i(size, indices)
  *         finally:
  *             CHKERR( ISRestoreIndices(self.iset, &indices) )             # <<<<<<<<<<<<<<
@@ -78206,12 +80252,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 253, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -78223,8 +80271,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
       __Pyx_XGOTREF(__pyx_t_10);
       __pyx_t_1 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
       {
-        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(29, 253, __pyx_L7_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -78239,6 +80288,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
       __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
       goto __pyx_L1_error;
       __pyx_L7_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -78254,7 +80304,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":252
+  /* "PETSc/IS.pyx":254
  *         finally:
  *             CHKERR( ISRestoreIndices(self.iset, &indices) )
  *         return oindices             # <<<<<<<<<<<<<<
@@ -78266,7 +80316,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
   __pyx_r = __pyx_v_oindices;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":242
+  /* "PETSc/IS.pyx":244
  *         CHKERR( ISGeneralSetIndices(self.iset, nidx, idx, cm) )
  * 
  *     def getIndices(self):             # <<<<<<<<<<<<<<
@@ -78286,7 +80336,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":254
+/* "PETSc/IS.pyx":256
  *         return oindices
  * 
  *     def setBlockIndices(self, bsize, indices):             # <<<<<<<<<<<<<<
@@ -78300,9 +80350,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2IS_78setBlockIndices[] = "IS.setBlockInd
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_79setBlockIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_bsize = 0;
   PyObject *__pyx_v_indices = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setBlockIndices (wrapper)", 0);
@@ -78326,11 +80373,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_79setBlockIndices(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setBlockIndices", 1, 2, 2, 1); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setBlockIndices", 1, 2, 2, 1); __PYX_ERR(29, 256, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockIndices") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockIndices") < 0)) __PYX_ERR(29, 256, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -78343,7 +80390,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_79setBlockIndices(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBlockIndices", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBlockIndices", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 256, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.setBlockIndices", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -78366,23 +80413,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_78setBlockIndices(struct PyPetscI
   PetscInt __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("setBlockIndices", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":255
+  /* "PETSc/IS.pyx":257
  * 
  *     def setBlockIndices(self, bsize, indices):
  *         cdef PetscInt bs = asInt(bsize)             # <<<<<<<<<<<<<<
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(29, 257, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":256
+  /* "PETSc/IS.pyx":258
  *     def setBlockIndices(self, bsize, indices):
  *         cdef PetscInt bs = asInt(bsize)
  *         cdef PetscInt nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
@@ -78392,7 +80436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_78setBlockIndices(struct PyPetscI
   __pyx_v_nidx = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":257
+  /* "PETSc/IS.pyx":259
  *         cdef PetscInt bs = asInt(bsize)
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -78401,28 +80445,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_78setBlockIndices(struct PyPetscI
  */
   __pyx_v_cm = PETSC_COPY_VALUES;
 
-  /* "PETSc/IS.pyx":258
+  /* "PETSc/IS.pyx":260
  *         cdef PetscInt nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         indices = iarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
  *         CHKERR( ISBlockSetIndices(self.iset, bs, nidx, idx, cm) )
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/IS.pyx":259
+  /* "PETSc/IS.pyx":261
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         indices = iarray_i(indices, &nidx, &idx)
  *         CHKERR( ISBlockSetIndices(self.iset, bs, nidx, idx, cm) )             # <<<<<<<<<<<<<<
  * 
  *     def getBlockIndices(self):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockSetIndices(__pyx_v_self->iset, __pyx_v_bs, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockSetIndices(__pyx_v_self->iset, __pyx_v_bs, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(29, 261, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":254
+  /* "PETSc/IS.pyx":256
  *         return oindices
  * 
  *     def setBlockIndices(self, bsize, indices):             # <<<<<<<<<<<<<<
@@ -78444,7 +80488,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_78setBlockIndices(struct PyPetscI
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":261
+/* "PETSc/IS.pyx":263
  *         CHKERR( ISBlockSetIndices(self.iset, bs, nidx, idx, cm) )
  * 
  *     def getBlockIndices(self):             # <<<<<<<<<<<<<<
@@ -78487,12 +80531,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getBlockIndices", 0);
 
-  /* "PETSc/IS.pyx":262
+  /* "PETSc/IS.pyx":264
  * 
  *     def getBlockIndices(self):
  *         cdef PetscInt size = 0, bs = 1             # <<<<<<<<<<<<<<
@@ -78502,7 +80543,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
   __pyx_v_size = 0;
   __pyx_v_bs = 1;
 
-  /* "PETSc/IS.pyx":263
+  /* "PETSc/IS.pyx":265
  *     def getBlockIndices(self):
  *         cdef PetscInt size = 0, bs = 1
  *         cdef const_PetscInt *indices = NULL             # <<<<<<<<<<<<<<
@@ -78511,34 +80552,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
  */
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":264
+  /* "PETSc/IS.pyx":266
  *         cdef PetscInt size = 0, bs = 1
  *         cdef const_PetscInt *indices = NULL
  *         CHKERR( ISGetLocalSize(self.iset, &size) )             # <<<<<<<<<<<<<<
  *         CHKERR( ISGetBlockSize(self.iset, &bs) )
  *         CHKERR( ISBlockGetIndices(self.iset, &indices) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 266, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":265
+  /* "PETSc/IS.pyx":267
  *         cdef const_PetscInt *indices = NULL
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
  *         CHKERR( ISGetBlockSize(self.iset, &bs) )             # <<<<<<<<<<<<<<
  *         CHKERR( ISBlockGetIndices(self.iset, &indices) )
  *         cdef object oindices = None
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetBlockSize(__pyx_v_self->iset, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetBlockSize(__pyx_v_self->iset, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 267, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":266
+  /* "PETSc/IS.pyx":268
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
  *         CHKERR( ISGetBlockSize(self.iset, &bs) )
  *         CHKERR( ISBlockGetIndices(self.iset, &indices) )             # <<<<<<<<<<<<<<
  *         cdef object oindices = None
  *         try:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockGetIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockGetIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 268, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":267
+  /* "PETSc/IS.pyx":269
  *         CHKERR( ISGetBlockSize(self.iset, &bs) )
  *         CHKERR( ISBlockGetIndices(self.iset, &indices) )
  *         cdef object oindices = None             # <<<<<<<<<<<<<<
@@ -78548,7 +80589,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
   __Pyx_INCREF(Py_None);
   __pyx_v_oindices = Py_None;
 
-  /* "PETSc/IS.pyx":268
+  /* "PETSc/IS.pyx":270
  *         CHKERR( ISBlockGetIndices(self.iset, &indices) )
  *         cdef object oindices = None
  *         try:             # <<<<<<<<<<<<<<
@@ -78557,20 +80598,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":269
+    /* "PETSc/IS.pyx":271
  *         cdef object oindices = None
  *         try:
  *             oindices = array_i(size//bs, indices)             # <<<<<<<<<<<<<<
  *         finally:
  *             CHKERR( ISBlockRestoreIndices(self.iset, &indices) )
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size / __pyx_v_bs), __pyx_v_indices)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size / __pyx_v_bs), __pyx_v_indices)); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 271, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_oindices, __pyx_t_2);
     __pyx_t_2 = 0;
   }
 
-  /* "PETSc/IS.pyx":271
+  /* "PETSc/IS.pyx":273
  *             oindices = array_i(size//bs, indices)
  *         finally:
  *             CHKERR( ISBlockRestoreIndices(self.iset, &indices) )             # <<<<<<<<<<<<<<
@@ -78579,12 +80620,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 273, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -78596,8 +80639,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
       __Pyx_XGOTREF(__pyx_t_10);
       __pyx_t_1 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
       {
-        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(29, 273, __pyx_L7_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -78612,6 +80656,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
       __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
       goto __pyx_L1_error;
       __pyx_L7_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -78627,7 +80672,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":272
+  /* "PETSc/IS.pyx":274
  *         finally:
  *             CHKERR( ISBlockRestoreIndices(self.iset, &indices) )
  *         return oindices             # <<<<<<<<<<<<<<
@@ -78639,7 +80684,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
   __pyx_r = __pyx_v_oindices;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":261
+  /* "PETSc/IS.pyx":263
  *         CHKERR( ISBlockSetIndices(self.iset, bs, nidx, idx, cm) )
  * 
  *     def getBlockIndices(self):             # <<<<<<<<<<<<<<
@@ -78659,7 +80704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":274
+/* "PETSc/IS.pyx":276
  *         return oindices
  * 
  *     def setStride(self, size, first=0, step=1):             # <<<<<<<<<<<<<<
@@ -78674,9 +80719,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_83setStride(PyObject *__pyx_v_sel
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_first = 0;
   PyObject *__pyx_v_step = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setStride (wrapper)", 0);
@@ -78712,7 +80754,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_83setStride(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStride") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStride") < 0)) __PYX_ERR(29, 276, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -78729,7 +80771,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_83setStride(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setStride", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setStride", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 276, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.IS.setStride", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -78750,51 +80792,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_82setStride(struct PyPetscISObjec
   __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("setStride", 0);
 
-  /* "PETSc/IS.pyx":275
+  /* "PETSc/IS.pyx":277
  * 
  *     def setStride(self, size, first=0, step=1):
  *         cdef PetscInt csize = asInt(size)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cfirst = asInt(first)
  *         cdef PetscInt cstep = asInt(step)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(29, 277, __pyx_L1_error)
   __pyx_v_csize = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":276
+  /* "PETSc/IS.pyx":278
  *     def setStride(self, size, first=0, step=1):
  *         cdef PetscInt csize = asInt(size)
  *         cdef PetscInt cfirst = asInt(first)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cstep = asInt(step)
  *         CHKERR( ISStrideSetStride(self.iset, csize, cfirst, cstep) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_first); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_first); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(29, 278, __pyx_L1_error)
   __pyx_v_cfirst = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":277
+  /* "PETSc/IS.pyx":279
  *         cdef PetscInt csize = asInt(size)
  *         cdef PetscInt cfirst = asInt(first)
  *         cdef PetscInt cstep = asInt(step)             # <<<<<<<<<<<<<<
  *         CHKERR( ISStrideSetStride(self.iset, csize, cfirst, cstep) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(29, 279, __pyx_L1_error)
   __pyx_v_cstep = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":278
+  /* "PETSc/IS.pyx":280
  *         cdef PetscInt cfirst = asInt(first)
  *         cdef PetscInt cstep = asInt(step)
  *         CHKERR( ISStrideSetStride(self.iset, csize, cfirst, cstep) )             # <<<<<<<<<<<<<<
  * 
  *     def getStride(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISStrideSetStride(__pyx_v_self->iset, __pyx_v_csize, __pyx_v_cfirst, __pyx_v_cstep)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISStrideSetStride(__pyx_v_self->iset, __pyx_v_csize, __pyx_v_cfirst, __pyx_v_cstep)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 280, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":274
+  /* "PETSc/IS.pyx":276
  *         return oindices
  * 
  *     def setStride(self, size, first=0, step=1):             # <<<<<<<<<<<<<<
@@ -78814,7 +80853,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_82setStride(struct PyPetscISObjec
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":280
+/* "PETSc/IS.pyx":282
  *         CHKERR( ISStrideSetStride(self.iset, csize, cfirst, cstep) )
  * 
  *     def getStride(self):             # <<<<<<<<<<<<<<
@@ -78850,12 +80889,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObjec
   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("getStride", 0);
 
-  /* "PETSc/IS.pyx":281
+  /* "PETSc/IS.pyx":283
  * 
  *     def getStride(self):
  *         cdef PetscInt size=0, first=0, step=0             # <<<<<<<<<<<<<<
@@ -78866,25 +80902,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObjec
   __pyx_v_first = 0;
   __pyx_v_step = 0;
 
-  /* "PETSc/IS.pyx":282
+  /* "PETSc/IS.pyx":284
  *     def getStride(self):
  *         cdef PetscInt size=0, first=0, step=0
  *         CHKERR( ISGetLocalSize(self.iset, &size) )             # <<<<<<<<<<<<<<
  *         CHKERR( ISStrideGetInfo(self.iset, &first, &step) )
  *         return (toInt(size), toInt(first), toInt(step))
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 284, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":283
+  /* "PETSc/IS.pyx":285
  *         cdef PetscInt size=0, first=0, step=0
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
  *         CHKERR( ISStrideGetInfo(self.iset, &first, &step) )             # <<<<<<<<<<<<<<
  *         return (toInt(size), toInt(first), toInt(step))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISStrideGetInfo(__pyx_v_self->iset, (&__pyx_v_first), (&__pyx_v_step))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISStrideGetInfo(__pyx_v_self->iset, (&__pyx_v_first), (&__pyx_v_step))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 285, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":284
+  /* "PETSc/IS.pyx":286
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
  *         CHKERR( ISStrideGetInfo(self.iset, &first, &step) )
  *         return (toInt(size), toInt(first), toInt(step))             # <<<<<<<<<<<<<<
@@ -78892,13 +80928,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObjec
  *     def getInfo(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_first); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_first); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_step); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_step); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(29, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -78913,7 +80949,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObjec
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":280
+  /* "PETSc/IS.pyx":282
  *         CHKERR( ISStrideSetStride(self.iset, csize, cfirst, cstep) )
  * 
  *     def getStride(self):             # <<<<<<<<<<<<<<
@@ -78935,7 +80971,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObjec
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":286
+/* "PETSc/IS.pyx":288
  *         return (toInt(size), toInt(first), toInt(step))
  * 
  *     def getInfo(self):             # <<<<<<<<<<<<<<
@@ -78969,12 +81005,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_86getInfo(struct PyPetscISObject
   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("getInfo", 0);
 
-  /* "PETSc/IS.pyx":287
+  /* "PETSc/IS.pyx":289
  * 
  *     def getInfo(self):
  *         cdef PetscInt first = 0, step = 0             # <<<<<<<<<<<<<<
@@ -78984,16 +81017,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_86getInfo(struct PyPetscISObject
   __pyx_v_first = 0;
   __pyx_v_step = 0;
 
-  /* "PETSc/IS.pyx":288
+  /* "PETSc/IS.pyx":290
  *     def getInfo(self):
  *         cdef PetscInt first = 0, step = 0
  *         CHKERR( ISStrideGetInfo(self.iset, &first, &step) )             # <<<<<<<<<<<<<<
  *         return (toInt(first), toInt(step))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISStrideGetInfo(__pyx_v_self->iset, (&__pyx_v_first), (&__pyx_v_step))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISStrideGetInfo(__pyx_v_self->iset, (&__pyx_v_first), (&__pyx_v_step))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 290, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":289
+  /* "PETSc/IS.pyx":291
  *         cdef PetscInt first = 0, step = 0
  *         CHKERR( ISStrideGetInfo(self.iset, &first, &step) )
  *         return (toInt(first), toInt(step))             # <<<<<<<<<<<<<<
@@ -79001,11 +81034,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_86getInfo(struct PyPetscISObject
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_first); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_first); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_step); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -79017,7 +81050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_86getInfo(struct PyPetscISObject
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":286
+  /* "PETSc/IS.pyx":288
  *         return (toInt(size), toInt(first), toInt(step))
  * 
  *     def getInfo(self):             # <<<<<<<<<<<<<<
@@ -79038,7 +81071,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_86getInfo(struct PyPetscISObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":294
+/* "PETSc/IS.pyx":296
  * 
  *     property permutation:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79065,12 +81098,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_11permutation___get__(struct PyPe
   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);
 
-  /* "PETSc/IS.pyx":295
+  /* "PETSc/IS.pyx":297
  *     property permutation:
  *         def __get__(self):
  *             return self.isPermutation()             # <<<<<<<<<<<<<<
@@ -79078,7 +81108,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_11permutation___get__(struct PyPe
  *     property identity:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isPermutation); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isPermutation); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 297, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -79091,10 +81121,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_11permutation___get__(struct PyPe
     }
   }
   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[29]; __pyx_lineno = 295; __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(29, 297, __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[29]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 297, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -79102,7 +81132,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_11permutation___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":294
+  /* "PETSc/IS.pyx":296
  * 
  *     property permutation:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79123,7 +81153,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_11permutation___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":298
+/* "PETSc/IS.pyx":300
  * 
  *     property identity:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79150,12 +81180,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8identity___get__(struct PyPetscI
   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);
 
-  /* "PETSc/IS.pyx":299
+  /* "PETSc/IS.pyx":301
  *     property identity:
  *         def __get__(self):
  *             return self.isIdentity()             # <<<<<<<<<<<<<<
@@ -79163,7 +81190,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8identity___get__(struct PyPetscI
  *     property sorted:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isIdentity); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isIdentity); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 301, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -79176,10 +81203,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8identity___get__(struct PyPetscI
     }
   }
   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[29]; __pyx_lineno = 299; __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(29, 301, __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[29]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 301, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -79187,7 +81214,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8identity___get__(struct PyPetscI
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":298
+  /* "PETSc/IS.pyx":300
  * 
  *     property identity:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79208,7 +81235,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8identity___get__(struct PyPetscI
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":302
+/* "PETSc/IS.pyx":304
  * 
  *     property sorted:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79235,12 +81262,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6sorted___get__(struct PyPetscISO
   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);
 
-  /* "PETSc/IS.pyx":303
+  /* "PETSc/IS.pyx":305
  *     property sorted:
  *         def __get__(self):
  *             return self.isSorted()             # <<<<<<<<<<<<<<
@@ -79248,7 +81272,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6sorted___get__(struct PyPetscISO
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isSorted); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isSorted); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 305, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -79261,10 +81285,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6sorted___get__(struct PyPetscISO
     }
   }
   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[29]; __pyx_lineno = 303; __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(29, 305, __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[29]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 305, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -79272,7 +81296,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6sorted___get__(struct PyPetscISO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":302
+  /* "PETSc/IS.pyx":304
  * 
  *     property sorted:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79293,7 +81317,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6sorted___get__(struct PyPetscISO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":308
+/* "PETSc/IS.pyx":310
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79320,12 +81344,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5sizes___get__(struct PyPetscISOb
   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);
 
-  /* "PETSc/IS.pyx":309
+  /* "PETSc/IS.pyx":311
  *     property sizes:
  *         def __get__(self):
  *             return self.getSizes()             # <<<<<<<<<<<<<<
@@ -79333,7 +81354,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5sizes___get__(struct PyPetscISOb
  *     property size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSizes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSizes); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -79346,10 +81367,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5sizes___get__(struct PyPetscISOb
     }
   }
   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[29]; __pyx_lineno = 309; __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(29, 311, __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[29]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 311, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -79357,7 +81378,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5sizes___get__(struct PyPetscISOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":308
+  /* "PETSc/IS.pyx":310
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79378,7 +81399,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5sizes___get__(struct PyPetscISOb
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":312
+/* "PETSc/IS.pyx":314
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79405,12 +81426,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_4size___get__(struct PyPetscISObj
   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);
 
-  /* "PETSc/IS.pyx":313
+  /* "PETSc/IS.pyx":315
  *     property size:
  *         def __get__(self):
  *             return self.getSize()             # <<<<<<<<<<<<<<
@@ -79418,7 +81436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_4size___get__(struct PyPetscISObj
  *     property local_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 315, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -79431,10 +81449,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_4size___get__(struct PyPetscISObj
     }
   }
   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[29]; __pyx_lineno = 313; __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(29, 315, __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[29]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 315, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -79442,7 +81460,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_4size___get__(struct PyPetscISObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":312
+  /* "PETSc/IS.pyx":314
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79463,7 +81481,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_4size___get__(struct PyPetscISObj
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":316
+/* "PETSc/IS.pyx":318
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79490,12 +81508,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10local_size___get__(struct PyPet
   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);
 
-  /* "PETSc/IS.pyx":317
+  /* "PETSc/IS.pyx":319
  *     property local_size:
  *         def __get__(self):
  *             return self.getLocalSize()             # <<<<<<<<<<<<<<
@@ -79503,7 +81518,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10local_size___get__(struct PyPet
  *     property block_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getLocalSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getLocalSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 319, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -79516,10 +81531,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10local_size___get__(struct PyPet
     }
   }
   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[29]; __pyx_lineno = 317; __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(29, 319, __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[29]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 319, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -79527,7 +81542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10local_size___get__(struct PyPet
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":316
+  /* "PETSc/IS.pyx":318
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79548,7 +81563,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10local_size___get__(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":320
+/* "PETSc/IS.pyx":322
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79575,12 +81590,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10block_size___get__(struct PyPet
   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);
 
-  /* "PETSc/IS.pyx":321
+  /* "PETSc/IS.pyx":323
  *     property block_size:
  *         def __get__(self):
  *             return self.getBlockSize()             # <<<<<<<<<<<<<<
@@ -79588,7 +81600,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10block_size___get__(struct PyPet
  *     property indices:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -79601,10 +81613,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10block_size___get__(struct PyPet
     }
   }
   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[29]; __pyx_lineno = 321; __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(29, 323, __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[29]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 323, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -79612,7 +81624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10block_size___get__(struct PyPet
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":320
+  /* "PETSc/IS.pyx":322
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79633,7 +81645,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10block_size___get__(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":324
+/* "PETSc/IS.pyx":326
  * 
  *     property indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79660,12 +81672,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_7indices___get__(struct PyPetscIS
   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);
 
-  /* "PETSc/IS.pyx":325
+  /* "PETSc/IS.pyx":327
  *     property indices:
  *         def __get__(self):
  *             return self.getIndices()             # <<<<<<<<<<<<<<
@@ -79673,7 +81682,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_7indices___get__(struct PyPetscIS
  *     property array:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIndices); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIndices); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -79686,10 +81695,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_7indices___get__(struct PyPetscIS
     }
   }
   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[29]; __pyx_lineno = 325; __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(29, 327, __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[29]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 327, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -79697,7 +81706,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_7indices___get__(struct PyPetscIS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":324
+  /* "PETSc/IS.pyx":326
  * 
  *     property indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79718,7 +81727,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_7indices___get__(struct PyPetscIS
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":328
+/* "PETSc/IS.pyx":330
  * 
  *     property array:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79743,12 +81752,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5array___get__(struct PyPetscISOb
   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("__get__", 0);
 
-  /* "PETSc/IS.pyx":329
+  /* "PETSc/IS.pyx":331
  *     property array:
  *         def __get__(self):
  *             return asarray(self)             # <<<<<<<<<<<<<<
@@ -79756,13 +81762,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5array___get__(struct PyPetscISOb
  *     # --- NumPy array interface (legacy) ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 331, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":328
+  /* "PETSc/IS.pyx":330
  * 
  *     property array:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79781,7 +81787,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5array___get__(struct PyPetscISOb
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":334
+/* "PETSc/IS.pyx":336
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79808,30 +81814,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_19__array_interface_____get__(str
   __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("__get__", 0);
 
-  /* "PETSc/IS.pyx":335
+  /* "PETSc/IS.pyx":337
  *     property __array_interface__:
  *         def __get__(self):
  *             cdef _IS_buffer buf = _IS_buffer(self)             # <<<<<<<<<<<<<<
  *             return buf.__array_interface__
  * 
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 337, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__IS_buffer)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__IS_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 337, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/IS.pyx":336
+  /* "PETSc/IS.pyx":338
  *         def __get__(self):
  *             cdef _IS_buffer buf = _IS_buffer(self)
  *             return buf.__array_interface__             # <<<<<<<<<<<<<<
@@ -79839,13 +81842,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_19__array_interface_____get__(str
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_array_interface); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_array_interface); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":334
+  /* "PETSc/IS.pyx":336
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -79866,7 +81869,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_19__array_interface_____get__(str
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":354
+/* "PETSc/IS.pyx":356
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -79895,7 +81898,7 @@ static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/IS.pyx":355
+  /* "PETSc/IS.pyx":357
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.lgm             # <<<<<<<<<<<<<<
@@ -79904,7 +81907,7 @@ static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->lgm));
 
-  /* "PETSc/IS.pyx":356
+  /* "PETSc/IS.pyx":358
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.lgm
  *         self.lgm = NULL             # <<<<<<<<<<<<<<
@@ -79913,7 +81916,7 @@ static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject
  */
   __pyx_v_self->lgm = NULL;
 
-  /* "PETSc/IS.pyx":354
+  /* "PETSc/IS.pyx":356
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -79927,7 +81930,7 @@ static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":358
+/* "PETSc/IS.pyx":360
  *         self.lgm = NULL
  * 
  *     def __call__(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -79940,9 +81943,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_3__call__(PyObject *__pyx_v_se
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_result = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
@@ -79971,7 +81971,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_3__call__(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(29, 360, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -79986,7 +81986,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_3__call__(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 360, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -80007,19 +82007,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_2__call__(struct PyPetscLGMapO
   PyObject *__pyx_t_3 = NULL;
   Py_ssize_t __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
 
-  /* "PETSc/IS.pyx":359
+  /* "PETSc/IS.pyx":361
  * 
  *     def __call__(self, indices, result=None):
  *         self.apply(indices, result)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_apply); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_apply); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
@@ -80033,7 +82030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_2__call__(struct PyPetscLGMapO
       __pyx_t_4 = 1;
     }
   }
-  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(29, 361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   if (__pyx_t_3) {
     __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
@@ -80044,13 +82041,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_2__call__(struct PyPetscLGMapO
   __Pyx_INCREF(__pyx_v_result);
   __Pyx_GIVEREF(__pyx_v_result);
   PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_result);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":358
+  /* "PETSc/IS.pyx":360
  *         self.lgm = NULL
  * 
  *     def __call__(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -80074,7 +82071,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_2__call__(struct PyPetscLGMapO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":363
+/* "PETSc/IS.pyx":365
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -80087,9 +82084,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_5view(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_5LGMap_4view[] = "LGMap.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_5view(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);
@@ -80114,7 +82108,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_5view(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(29, 365, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -80127,13 +82121,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_5view(PyObject *__pyx_v_self,
   }
   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[29]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 365, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.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[29]; __pyx_lineno = 363; __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(29, 365, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_4view(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -80153,12 +82147,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
   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);
 
-  /* "PETSc/IS.pyx":364
+  /* "PETSc/IS.pyx":366
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL             # <<<<<<<<<<<<<<
@@ -80167,7 +82158,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
  */
   __pyx_v_cviewer = NULL;
 
-  /* "PETSc/IS.pyx":365
+  /* "PETSc/IS.pyx":367
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr             # <<<<<<<<<<<<<<
@@ -80179,20 +82170,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_cviewer = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":366
+  /* "PETSc/IS.pyx":368
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr
  *         CHKERR( ISLocalToGlobalMappingView(self.lgm, cviewer) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingView(__pyx_v_self->lgm, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingView(__pyx_v_self->lgm, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(29, 368, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":363
+  /* "PETSc/IS.pyx":365
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -80212,7 +82201,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":368
+/* "PETSc/IS.pyx":370
  *         CHKERR( ISLocalToGlobalMappingView(self.lgm, cviewer) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -80241,21 +82230,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapOb
   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);
 
-  /* "PETSc/IS.pyx":369
+  /* "PETSc/IS.pyx":371
  * 
  *     def destroy(self):
  *         CHKERR( ISLocalToGlobalMappingDestroy(&self.lgm) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingDestroy((&__pyx_v_self->lgm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingDestroy((&__pyx_v_self->lgm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 371, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":370
+  /* "PETSc/IS.pyx":372
  *     def destroy(self):
  *         CHKERR( ISLocalToGlobalMappingDestroy(&self.lgm) )
  *         return self             # <<<<<<<<<<<<<<
@@ -80267,7 +82253,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":368
+  /* "PETSc/IS.pyx":370
  *         CHKERR( ISLocalToGlobalMappingView(self.lgm, cviewer) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -80285,7 +82271,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapOb
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":372
+/* "PETSc/IS.pyx":374
  *         return self
  * 
  *     def create(self, indices, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -80300,9 +82286,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_9create(PyObject *__pyx_v_self
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_bsize = 0;
   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);
@@ -80338,7 +82321,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_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[29]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(29, 374, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -80355,7 +82338,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_9create(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 374, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -80383,23 +82366,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   PetscInt __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":373
+  /* "PETSc/IS.pyx":375
  * 
  *     def create(self, indices, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt bs = 1, nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 375, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":374
+  /* "PETSc/IS.pyx":376
  *     def create(self, indices, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs = 1, nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
@@ -80410,7 +82390,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   __pyx_v_nidx = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":375
+  /* "PETSc/IS.pyx":377
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs = 1, nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -80419,7 +82399,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
  */
   __pyx_v_cm = PETSC_COPY_VALUES;
 
-  /* "PETSc/IS.pyx":376
+  /* "PETSc/IS.pyx":378
  *         cdef PetscInt bs = 1, nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         cdef PetscLGMap newlgm = NULL             # <<<<<<<<<<<<<<
@@ -80428,7 +82408,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
  */
   __pyx_v_newlgm = NULL;
 
-  /* "PETSc/IS.pyx":377
+  /* "PETSc/IS.pyx":379
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         cdef PetscLGMap newlgm = NULL
  *         if bsize is not None: bs = asInt(bsize)             # <<<<<<<<<<<<<<
@@ -80438,13 +82418,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   __pyx_t_2 = (__pyx_v_bsize != Py_None);
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(29, 379, __pyx_L1_error)
     __pyx_v_bs = __pyx_t_4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":378
+  /* "PETSc/IS.pyx":380
  *         cdef PetscLGMap newlgm = NULL
  *         if bsize is not None: bs = asInt(bsize)
  *         if bs == PETSC_DECIDE: bs = 1             # <<<<<<<<<<<<<<
@@ -80454,32 +82432,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   __pyx_t_3 = ((__pyx_v_bs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_bs = 1;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/IS.pyx":379
+  /* "PETSc/IS.pyx":381
  *         if bsize is not None: bs = asInt(bsize)
  *         if bs == PETSC_DECIDE: bs = 1
  *         indices = iarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
  *         CHKERR( ISLocalToGlobalMappingCreate(
  *                 ccomm, bs, nidx, idx, cm, &newlgm) )
  */
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_5)) __PYX_ERR(29, 381, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/IS.pyx":380
+  /* "PETSc/IS.pyx":382
  *         if bs == PETSC_DECIDE: bs = 1
  *         indices = iarray_i(indices, &nidx, &idx)
  *         CHKERR( ISLocalToGlobalMappingCreate(             # <<<<<<<<<<<<<<
  *                 ccomm, bs, nidx, idx, cm, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingCreate(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm, (&__pyx_v_newlgm))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingCreate(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_nidx, __pyx_v_idx, __pyx_v_cm, (&__pyx_v_newlgm))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(29, 382, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":382
+  /* "PETSc/IS.pyx":384
  *         CHKERR( ISLocalToGlobalMappingCreate(
  *                 ccomm, bs, nidx, idx, cm, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm             # <<<<<<<<<<<<<<
@@ -80489,7 +82465,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->lgm = __pyx_v_newlgm;
 
-  /* "PETSc/IS.pyx":383
+  /* "PETSc/IS.pyx":385
  *                 ccomm, bs, nidx, idx, cm, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  *         return self             # <<<<<<<<<<<<<<
@@ -80501,7 +82477,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":372
+  /* "PETSc/IS.pyx":374
  *         return self
  * 
  *     def create(self, indices, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -80521,7 +82497,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":385
+/* "PETSc/IS.pyx":387
  *         return self
  * 
  *     def createIS(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -80534,9 +82510,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11createIS(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_5LGMap_10createIS[] = "LGMap.createIS(self, IS iset)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11createIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createIS (wrapper)", 0);
@@ -80558,7 +82531,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11createIS(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createIS") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createIS") < 0)) __PYX_ERR(29, 387, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -80569,13 +82542,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11createIS(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 387, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.createIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 387, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
@@ -80592,12 +82565,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMap
   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("createIS", 0);
 
-  /* "PETSc/IS.pyx":386
+  /* "PETSc/IS.pyx":388
  * 
  *     def createIS(self, IS iset not None):
  *         cdef PetscLGMap newlgm = NULL             # <<<<<<<<<<<<<<
@@ -80606,16 +82576,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMap
  */
   __pyx_v_newlgm = NULL;
 
-  /* "PETSc/IS.pyx":387
+  /* "PETSc/IS.pyx":389
  *     def createIS(self, IS iset not None):
  *         cdef PetscLGMap newlgm = NULL
  *         CHKERR( ISLocalToGlobalMappingCreateIS(             # <<<<<<<<<<<<<<
  *             iset.iset, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingCreateIS(__pyx_v_iset->iset, (&__pyx_v_newlgm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingCreateIS(__pyx_v_iset->iset, (&__pyx_v_newlgm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 389, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":389
+  /* "PETSc/IS.pyx":391
  *         CHKERR( ISLocalToGlobalMappingCreateIS(
  *             iset.iset, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm             # <<<<<<<<<<<<<<
@@ -80625,7 +82595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMap
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->lgm = __pyx_v_newlgm;
 
-  /* "PETSc/IS.pyx":390
+  /* "PETSc/IS.pyx":392
  *             iset.iset, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  *         return self             # <<<<<<<<<<<<<<
@@ -80637,7 +82607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMap
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":385
+  /* "PETSc/IS.pyx":387
  *         return self
  * 
  *     def createIS(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -80655,7 +82625,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMap
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":392
+/* "PETSc/IS.pyx":394
  *         return self
  * 
  *     def createSF(self, SF sf not None, start):             # <<<<<<<<<<<<<<
@@ -80669,9 +82639,6 @@ static char __pyx_doc_8petsc4py_5PETSc_5LGMap_12createSF[] = "LGMap.createSF(sel
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscSFObject *__pyx_v_sf = 0;
   PyObject *__pyx_v_start = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createSF (wrapper)", 0);
@@ -80695,11 +82662,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_start)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createSF", 1, 2, 2, 1); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createSF", 1, 2, 2, 1); __PYX_ERR(29, 394, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSF") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSF") < 0)) __PYX_ERR(29, 394, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -80712,13 +82679,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createSF", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createSF", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 394, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.createSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) __PYX_ERR(29, 394, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_sf, __pyx_v_start);
 
   /* function exit code */
@@ -80737,12 +82704,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
   __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("createSF", 0);
 
-  /* "PETSc/IS.pyx":393
+  /* "PETSc/IS.pyx":395
  * 
  *     def createSF(self, SF sf not None, start):
  *         cdef PetscLGMap newlgm = NULL             # <<<<<<<<<<<<<<
@@ -80751,26 +82715,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
  */
   __pyx_v_newlgm = NULL;
 
-  /* "PETSc/IS.pyx":394
+  /* "PETSc/IS.pyx":396
  *     def createSF(self, SF sf not None, start):
  *         cdef PetscLGMap newlgm = NULL
  *         cdef PetscInt cstart = asInt(start)             # <<<<<<<<<<<<<<
  *         CHKERR( ISLocalToGlobalMappingCreateSF(sf.sf, cstart, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_start); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_start); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(29, 396, __pyx_L1_error)
   __pyx_v_cstart = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":395
+  /* "PETSc/IS.pyx":397
  *         cdef PetscLGMap newlgm = NULL
  *         cdef PetscInt cstart = asInt(start)
  *         CHKERR( ISLocalToGlobalMappingCreateSF(sf.sf, cstart, &newlgm) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingCreateSF(__pyx_v_sf->sf, __pyx_v_cstart, (&__pyx_v_newlgm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingCreateSF(__pyx_v_sf->sf, __pyx_v_cstart, (&__pyx_v_newlgm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 397, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":396
+  /* "PETSc/IS.pyx":398
  *         cdef PetscInt cstart = asInt(start)
  *         CHKERR( ISLocalToGlobalMappingCreateSF(sf.sf, cstart, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm             # <<<<<<<<<<<<<<
@@ -80780,7 +82744,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->lgm = __pyx_v_newlgm;
 
-  /* "PETSc/IS.pyx":397
+  /* "PETSc/IS.pyx":399
  *         CHKERR( ISLocalToGlobalMappingCreateSF(sf.sf, cstart, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  *         return self             # <<<<<<<<<<<<<<
@@ -80792,7 +82756,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":392
+  /* "PETSc/IS.pyx":394
  *         return self
  * 
  *     def createSF(self, SF sf not None, start):             # <<<<<<<<<<<<<<
@@ -80810,7 +82774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":399
+/* "PETSc/IS.pyx":401
  *         return self
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -80841,12 +82805,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapO
   __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("getSize", 0);
 
-  /* "PETSc/IS.pyx":400
+  /* "PETSc/IS.pyx":402
  * 
  *     def getSize(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -80855,16 +82816,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapO
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/IS.pyx":401
+  /* "PETSc/IS.pyx":403
  *     def getSize(self):
  *         cdef PetscInt n = 0
  *         CHKERR( ISLocalToGlobalMappingGetSize(self.lgm, &n) )             # <<<<<<<<<<<<<<
  *         return toInt(n)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 403, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":402
+  /* "PETSc/IS.pyx":404
  *         cdef PetscInt n = 0
  *         CHKERR( ISLocalToGlobalMappingGetSize(self.lgm, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -80872,13 +82833,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapO
  *     def getBlockSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 404, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":399
+  /* "PETSc/IS.pyx":401
  *         return self
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -80897,7 +82858,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":404
+/* "PETSc/IS.pyx":406
  *         return toInt(n)
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -80928,12 +82889,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscL
   __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("getBlockSize", 0);
 
-  /* "PETSc/IS.pyx":405
+  /* "PETSc/IS.pyx":407
  * 
  *     def getBlockSize(self):
  *         cdef PetscInt bs = 1             # <<<<<<<<<<<<<<
@@ -80942,16 +82900,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscL
  */
   __pyx_v_bs = 1;
 
-  /* "PETSc/IS.pyx":406
+  /* "PETSc/IS.pyx":408
  *     def getBlockSize(self):
  *         cdef PetscInt bs = 1
  *         CHKERR( ISLocalToGlobalMappingGetBlockSize(self.lgm, &bs) )             # <<<<<<<<<<<<<<
  *         return toInt(bs)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockSize(__pyx_v_self->lgm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockSize(__pyx_v_self->lgm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 408, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":407
+  /* "PETSc/IS.pyx":409
  *         cdef PetscInt bs = 1
  *         CHKERR( ISLocalToGlobalMappingGetBlockSize(self.lgm, &bs) )
  *         return toInt(bs)             # <<<<<<<<<<<<<<
@@ -80959,13 +82917,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscL
  *     def getIndices(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 409, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":404
+  /* "PETSc/IS.pyx":406
  *         return toInt(n)
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -80984,7 +82942,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscL
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":409
+/* "PETSc/IS.pyx":411
  *         return toInt(bs)
  * 
  *     def getIndices(self):             # <<<<<<<<<<<<<<
@@ -81026,12 +82984,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getIndices", 0);
 
-  /* "PETSc/IS.pyx":410
+  /* "PETSc/IS.pyx":412
  * 
  *     def getIndices(self):
  *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
@@ -81040,7 +82995,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/IS.pyx":411
+  /* "PETSc/IS.pyx":413
  *     def getIndices(self):
  *         cdef PetscInt size = 0
  *         cdef const_PetscInt *indices = NULL             # <<<<<<<<<<<<<<
@@ -81049,25 +83004,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
  */
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":412
+  /* "PETSc/IS.pyx":414
  *         cdef PetscInt size = 0
  *         cdef const_PetscInt *indices = NULL
  *         CHKERR( ISLocalToGlobalMappingGetSize(             # <<<<<<<<<<<<<<
  *                 self.lgm, &size) )
  *         CHKERR( ISLocalToGlobalMappingGetIndices(
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 414, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":414
+  /* "PETSc/IS.pyx":416
  *         CHKERR( ISLocalToGlobalMappingGetSize(
  *                 self.lgm, &size) )
  *         CHKERR( ISLocalToGlobalMappingGetIndices(             # <<<<<<<<<<<<<<
  *                 self.lgm, &indices) )
  *         cdef object oindices = None
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 416, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":416
+  /* "PETSc/IS.pyx":418
  *         CHKERR( ISLocalToGlobalMappingGetIndices(
  *                 self.lgm, &indices) )
  *         cdef object oindices = None             # <<<<<<<<<<<<<<
@@ -81077,7 +83032,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   __Pyx_INCREF(Py_None);
   __pyx_v_oindices = Py_None;
 
-  /* "PETSc/IS.pyx":417
+  /* "PETSc/IS.pyx":419
  *                 self.lgm, &indices) )
  *         cdef object oindices = None
  *         try:             # <<<<<<<<<<<<<<
@@ -81086,20 +83041,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":418
+    /* "PETSc/IS.pyx":420
  *         cdef object oindices = None
  *         try:
  *             oindices = array_i(size, indices)             # <<<<<<<<<<<<<<
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreIndices(
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_size, __pyx_v_indices)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_size, __pyx_v_indices)); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 420, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_oindices, __pyx_t_2);
     __pyx_t_2 = 0;
   }
 
-  /* "PETSc/IS.pyx":420
+  /* "PETSc/IS.pyx":422
  *             oindices = array_i(size, indices)
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreIndices(             # <<<<<<<<<<<<<<
@@ -81109,19 +83064,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   /*finally:*/ {
     /*normal exit:*/{
 
-      /* "PETSc/IS.pyx":421
+      /* "PETSc/IS.pyx":423
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreIndices(
  *                     self.lgm, &indices) )             # <<<<<<<<<<<<<<
  *         return oindices
  * 
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 422, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -81134,15 +83091,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
       __pyx_t_1 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
       {
 
-        /* "PETSc/IS.pyx":420
+        /* "PETSc/IS.pyx":422
  *             oindices = array_i(size, indices)
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreIndices(             # <<<<<<<<<<<<<<
  *                     self.lgm, &indices) )
  *         return oindices
  */
-        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(29, 422, __pyx_L7_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -81157,6 +83115,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
       __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
       goto __pyx_L1_error;
       __pyx_L7_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -81172,7 +83131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":422
+  /* "PETSc/IS.pyx":424
  *             CHKERR( ISLocalToGlobalMappingRestoreIndices(
  *                     self.lgm, &indices) )
  *         return oindices             # <<<<<<<<<<<<<<
@@ -81184,7 +83143,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   __pyx_r = __pyx_v_oindices;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":409
+  /* "PETSc/IS.pyx":411
  *         return toInt(bs)
  * 
  *     def getIndices(self):             # <<<<<<<<<<<<<<
@@ -81204,7 +83163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":424
+/* "PETSc/IS.pyx":426
  *         return oindices
  * 
  *     def getBlockIndices(self):             # <<<<<<<<<<<<<<
@@ -81247,12 +83206,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getBlockIndices", 0);
 
-  /* "PETSc/IS.pyx":425
+  /* "PETSc/IS.pyx":427
  * 
  *     def getBlockIndices(self):
  *         cdef PetscInt size = 0, bs = 1             # <<<<<<<<<<<<<<
@@ -81262,7 +83218,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   __pyx_v_size = 0;
   __pyx_v_bs = 1;
 
-  /* "PETSc/IS.pyx":426
+  /* "PETSc/IS.pyx":428
  *     def getBlockIndices(self):
  *         cdef PetscInt size = 0, bs = 1
  *         cdef const_PetscInt *indices = NULL             # <<<<<<<<<<<<<<
@@ -81271,34 +83227,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
  */
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":427
+  /* "PETSc/IS.pyx":429
  *         cdef PetscInt size = 0, bs = 1
  *         cdef const_PetscInt *indices = NULL
  *         CHKERR( ISLocalToGlobalMappingGetSize(             # <<<<<<<<<<<<<<
  *                 self.lgm, &size) )
  *         CHKERR( ISLocalToGlobalMappingGetBlockSize(
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 429, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":429
+  /* "PETSc/IS.pyx":431
  *         CHKERR( ISLocalToGlobalMappingGetSize(
  *                 self.lgm, &size) )
  *         CHKERR( ISLocalToGlobalMappingGetBlockSize(             # <<<<<<<<<<<<<<
  *                 self.lgm, &bs) )
  *         CHKERR( ISLocalToGlobalMappingGetBlockIndices(
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockSize(__pyx_v_self->lgm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockSize(__pyx_v_self->lgm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 431, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":431
+  /* "PETSc/IS.pyx":433
  *         CHKERR( ISLocalToGlobalMappingGetBlockSize(
  *                 self.lgm, &bs) )
  *         CHKERR( ISLocalToGlobalMappingGetBlockIndices(             # <<<<<<<<<<<<<<
  *                 self.lgm, &indices) )
  *         cdef object oindices = None
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 433, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":433
+  /* "PETSc/IS.pyx":435
  *         CHKERR( ISLocalToGlobalMappingGetBlockIndices(
  *                 self.lgm, &indices) )
  *         cdef object oindices = None             # <<<<<<<<<<<<<<
@@ -81308,7 +83264,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   __Pyx_INCREF(Py_None);
   __pyx_v_oindices = Py_None;
 
-  /* "PETSc/IS.pyx":434
+  /* "PETSc/IS.pyx":436
  *                 self.lgm, &indices) )
  *         cdef object oindices = None
  *         try:             # <<<<<<<<<<<<<<
@@ -81317,20 +83273,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":435
+    /* "PETSc/IS.pyx":437
  *         cdef object oindices = None
  *         try:
  *             oindices = array_i(size//bs, indices)             # <<<<<<<<<<<<<<
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreBlockIndices(
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size / __pyx_v_bs), __pyx_v_indices)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size / __pyx_v_bs), __pyx_v_indices)); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 437, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_oindices, __pyx_t_2);
     __pyx_t_2 = 0;
   }
 
-  /* "PETSc/IS.pyx":437
+  /* "PETSc/IS.pyx":439
  *             oindices = array_i(size//bs, indices)
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreBlockIndices(             # <<<<<<<<<<<<<<
@@ -81340,19 +83296,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   /*finally:*/ {
     /*normal exit:*/{
 
-      /* "PETSc/IS.pyx":438
+      /* "PETSc/IS.pyx":440
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreBlockIndices(
  *                     self.lgm, &indices) )             # <<<<<<<<<<<<<<
  *         return oindices
  * 
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(29, 439, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -81365,15 +83323,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
       __pyx_t_1 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
       {
 
-        /* "PETSc/IS.pyx":437
+        /* "PETSc/IS.pyx":439
  *             oindices = array_i(size//bs, indices)
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreBlockIndices(             # <<<<<<<<<<<<<<
  *                     self.lgm, &indices) )
  *         return oindices
  */
-        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(29, 439, __pyx_L7_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -81388,6 +83347,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
       __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
       goto __pyx_L1_error;
       __pyx_L7_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -81403,7 +83363,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":439
+  /* "PETSc/IS.pyx":441
  *             CHKERR( ISLocalToGlobalMappingRestoreBlockIndices(
  *                     self.lgm, &indices) )
  *         return oindices             # <<<<<<<<<<<<<<
@@ -81415,7 +83375,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   __pyx_r = __pyx_v_oindices;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":424
+  /* "PETSc/IS.pyx":426
  *         return oindices
  * 
  *     def getBlockIndices(self):             # <<<<<<<<<<<<<<
@@ -81435,7 +83395,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":441
+/* "PETSc/IS.pyx":443
  *         return oindices
  * 
  *     def getInfo(self):             # <<<<<<<<<<<<<<
@@ -81481,12 +83441,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getInfo", 0);
 
-  /* "PETSc/IS.pyx":442
+  /* "PETSc/IS.pyx":444
  * 
  *     def getInfo(self):
  *         cdef PetscInt i, nproc = 0, *procs = NULL,             # <<<<<<<<<<<<<<
@@ -81496,7 +83453,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   __pyx_v_nproc = 0;
   __pyx_v_procs = NULL;
 
-  /* "PETSc/IS.pyx":443
+  /* "PETSc/IS.pyx":445
  *     def getInfo(self):
  *         cdef PetscInt i, nproc = 0, *procs = NULL,
  *         cdef PetscInt *numprocs = NULL, **indices = NULL             # <<<<<<<<<<<<<<
@@ -81506,28 +83463,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   __pyx_v_numprocs = NULL;
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":444
+  /* "PETSc/IS.pyx":446
  *         cdef PetscInt i, nproc = 0, *procs = NULL,
  *         cdef PetscInt *numprocs = NULL, **indices = NULL
  *         cdef object neighs = { }             # <<<<<<<<<<<<<<
  *         CHKERR( ISLocalToGlobalMappingGetInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 446, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_neighs = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":445
+  /* "PETSc/IS.pyx":447
  *         cdef PetscInt *numprocs = NULL, **indices = NULL
  *         cdef object neighs = { }
  *         CHKERR( ISLocalToGlobalMappingGetInfo(             # <<<<<<<<<<<<<<
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetInfo(__pyx_v_self->lgm, (&__pyx_v_nproc), (&__pyx_v_procs), (&__pyx_v_numprocs), (&__pyx_v_indices))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetInfo(__pyx_v_self->lgm, (&__pyx_v_nproc), (&__pyx_v_procs), (&__pyx_v_numprocs), (&__pyx_v_indices))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 447, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":447
+  /* "PETSc/IS.pyx":449
  *         CHKERR( ISLocalToGlobalMappingGetInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:             # <<<<<<<<<<<<<<
@@ -81536,7 +83493,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":448
+    /* "PETSc/IS.pyx":450
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:
  *             for i from 0 <= i < nproc:             # <<<<<<<<<<<<<<
@@ -81546,24 +83503,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
     __pyx_t_3 = __pyx_v_nproc;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-      /* "PETSc/IS.pyx":449
+      /* "PETSc/IS.pyx":451
  *         try:
  *             for i from 0 <= i < nproc:
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])             # <<<<<<<<<<<<<<
  *         finally:
  *             ISLocalToGlobalMappingRestoreInfo(
  */
-      __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_numprocs[__pyx_v_i]), (__pyx_v_indices[__pyx_v_i]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_numprocs[__pyx_v_i]), (__pyx_v_indices[__pyx_v_i]))); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 451, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_procs[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_procs[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 451, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_4);
-      if (unlikely(PyObject_SetItem(__pyx_v_neighs, __pyx_t_4, __pyx_t_1) < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      if (unlikely(PyObject_SetItem(__pyx_v_neighs, __pyx_t_4, __pyx_t_1) < 0)) __PYX_ERR(29, 451, __pyx_L4_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
   }
 
-  /* "PETSc/IS.pyx":451
+  /* "PETSc/IS.pyx":453
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])
  *         finally:
  *             ISLocalToGlobalMappingRestoreInfo(             # <<<<<<<<<<<<<<
@@ -81573,7 +83530,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   /*finally:*/ {
     /*normal exit:*/{
 
-      /* "PETSc/IS.pyx":452
+      /* "PETSc/IS.pyx":454
  *         finally:
  *             ISLocalToGlobalMappingRestoreInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices)             # <<<<<<<<<<<<<<
@@ -81584,8 +83541,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
@@ -81599,7 +83558,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
       __pyx_t_2 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
       {
 
-        /* "PETSc/IS.pyx":451
+        /* "PETSc/IS.pyx":453
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])
  *         finally:
  *             ISLocalToGlobalMappingRestoreInfo(             # <<<<<<<<<<<<<<
@@ -81608,6 +83567,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
  */
         ISLocalToGlobalMappingRestoreInfo(__pyx_v_self->lgm, (&__pyx_v_nproc), (&__pyx_v_procs), (&__pyx_v_numprocs), (&__pyx_v_indices));
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
@@ -81625,7 +83585,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":453
+  /* "PETSc/IS.pyx":455
  *             ISLocalToGlobalMappingRestoreInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices)
  *         return neighs             # <<<<<<<<<<<<<<
@@ -81637,7 +83597,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   __pyx_r = __pyx_v_neighs;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":441
+  /* "PETSc/IS.pyx":443
  *         return oindices
  * 
  *     def getInfo(self):             # <<<<<<<<<<<<<<
@@ -81658,7 +83618,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":455
+/* "PETSc/IS.pyx":457
  *         return neighs
  * 
  *     def getBlockInfo(self):             # <<<<<<<<<<<<<<
@@ -81704,12 +83664,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getBlockInfo", 0);
 
-  /* "PETSc/IS.pyx":456
+  /* "PETSc/IS.pyx":458
  * 
  *     def getBlockInfo(self):
  *         cdef PetscInt i, nproc = 0, *procs = NULL,             # <<<<<<<<<<<<<<
@@ -81719,7 +83676,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   __pyx_v_nproc = 0;
   __pyx_v_procs = NULL;
 
-  /* "PETSc/IS.pyx":457
+  /* "PETSc/IS.pyx":459
  *     def getBlockInfo(self):
  *         cdef PetscInt i, nproc = 0, *procs = NULL,
  *         cdef PetscInt *numprocs = NULL, **indices = NULL             # <<<<<<<<<<<<<<
@@ -81729,28 +83686,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   __pyx_v_numprocs = NULL;
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":458
+  /* "PETSc/IS.pyx":460
  *         cdef PetscInt i, nproc = 0, *procs = NULL,
  *         cdef PetscInt *numprocs = NULL, **indices = NULL
  *         cdef object neighs = { }             # <<<<<<<<<<<<<<
  *         CHKERR( ISLocalToGlobalMappingGetBlockInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 460, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_neighs = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":459
+  /* "PETSc/IS.pyx":461
  *         cdef PetscInt *numprocs = NULL, **indices = NULL
  *         cdef object neighs = { }
  *         CHKERR( ISLocalToGlobalMappingGetBlockInfo(             # <<<<<<<<<<<<<<
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockInfo(__pyx_v_self->lgm, (&__pyx_v_nproc), (&__pyx_v_procs), (&__pyx_v_numprocs), (&__pyx_v_indices))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockInfo(__pyx_v_self->lgm, (&__pyx_v_nproc), (&__pyx_v_procs), (&__pyx_v_numprocs), (&__pyx_v_indices))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 461, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":461
+  /* "PETSc/IS.pyx":463
  *         CHKERR( ISLocalToGlobalMappingGetBlockInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:             # <<<<<<<<<<<<<<
@@ -81759,7 +83716,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":462
+    /* "PETSc/IS.pyx":464
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:
  *             for i from 0 <= i < nproc:             # <<<<<<<<<<<<<<
@@ -81769,24 +83726,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
     __pyx_t_3 = __pyx_v_nproc;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-      /* "PETSc/IS.pyx":463
+      /* "PETSc/IS.pyx":465
  *         try:
  *             for i from 0 <= i < nproc:
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])             # <<<<<<<<<<<<<<
  *         finally:
  *             ISLocalToGlobalMappingRestoreBlockInfo(
  */
-      __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_numprocs[__pyx_v_i]), (__pyx_v_indices[__pyx_v_i]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_numprocs[__pyx_v_i]), (__pyx_v_indices[__pyx_v_i]))); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 465, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_procs[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_procs[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 465, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_4);
-      if (unlikely(PyObject_SetItem(__pyx_v_neighs, __pyx_t_4, __pyx_t_1) < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      if (unlikely(PyObject_SetItem(__pyx_v_neighs, __pyx_t_4, __pyx_t_1) < 0)) __PYX_ERR(29, 465, __pyx_L4_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
   }
 
-  /* "PETSc/IS.pyx":465
+  /* "PETSc/IS.pyx":467
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])
  *         finally:
  *             ISLocalToGlobalMappingRestoreBlockInfo(             # <<<<<<<<<<<<<<
@@ -81796,7 +83753,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   /*finally:*/ {
     /*normal exit:*/{
 
-      /* "PETSc/IS.pyx":466
+      /* "PETSc/IS.pyx":468
  *         finally:
  *             ISLocalToGlobalMappingRestoreBlockInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices)             # <<<<<<<<<<<<<<
@@ -81807,8 +83764,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
@@ -81822,7 +83781,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
       __pyx_t_2 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
       {
 
-        /* "PETSc/IS.pyx":465
+        /* "PETSc/IS.pyx":467
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])
  *         finally:
  *             ISLocalToGlobalMappingRestoreBlockInfo(             # <<<<<<<<<<<<<<
@@ -81831,6 +83790,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
  */
         ISLocalToGlobalMappingRestoreBlockInfo(__pyx_v_self->lgm, (&__pyx_v_nproc), (&__pyx_v_procs), (&__pyx_v_numprocs), (&__pyx_v_indices));
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
@@ -81848,7 +83808,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":467
+  /* "PETSc/IS.pyx":469
  *             ISLocalToGlobalMappingRestoreBlockInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices)
  *         return neighs             # <<<<<<<<<<<<<<
@@ -81860,7 +83820,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   __pyx_r = __pyx_v_neighs;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":455
+  /* "PETSc/IS.pyx":457
  *         return neighs
  * 
  *     def getBlockInfo(self):             # <<<<<<<<<<<<<<
@@ -81881,7 +83841,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":471
+/* "PETSc/IS.pyx":473
  *     #
  * 
  *     def apply(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -81895,9 +83855,6 @@ static char __pyx_doc_8petsc4py_5PETSc_5LGMap_26apply[] = "LGMap.apply(self, ind
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27apply(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_result = 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);
@@ -81926,7 +83883,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27apply(PyObject *__pyx_v_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply") < 0)) __PYX_ERR(29, 473, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -81941,7 +83898,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27apply(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("apply", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("apply", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 473, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.apply", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -81965,14 +83922,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   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("apply", 0);
   __Pyx_INCREF(__pyx_v_indices);
   __Pyx_INCREF(__pyx_v_result);
 
-  /* "PETSc/IS.pyx":472
+  /* "PETSc/IS.pyx":474
  * 
  *     def apply(self, indices, result=None):
  *         cdef PetscInt niidx = 0, *iidx = NULL             # <<<<<<<<<<<<<<
@@ -81982,7 +83936,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   __pyx_v_niidx = 0;
   __pyx_v_iidx = NULL;
 
-  /* "PETSc/IS.pyx":473
+  /* "PETSc/IS.pyx":475
  *     def apply(self, indices, result=None):
  *         cdef PetscInt niidx = 0, *iidx = NULL
  *         cdef PetscInt noidx = 0, *oidx = NULL             # <<<<<<<<<<<<<<
@@ -81992,19 +83946,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   __pyx_v_noidx = 0;
   __pyx_v_oidx = NULL;
 
-  /* "PETSc/IS.pyx":474
+  /* "PETSc/IS.pyx":476
  *         cdef PetscInt niidx = 0, *iidx = NULL
  *         cdef PetscInt noidx = 0, *oidx = NULL
  *         indices = iarray_i(indices, &niidx, &iidx)             # <<<<<<<<<<<<<<
  *         if result is None: result = empty_i(niidx)
  *         result  = oarray_i(result,  &noidx, &oidx)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_niidx), (&__pyx_v_iidx))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_niidx), (&__pyx_v_iidx))); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 476, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":475
+  /* "PETSc/IS.pyx":477
  *         cdef PetscInt noidx = 0, *oidx = NULL
  *         indices = iarray_i(indices, &niidx, &iidx)
  *         if result is None: result = empty_i(niidx)             # <<<<<<<<<<<<<<
@@ -82014,27 +83968,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   __pyx_t_2 = (__pyx_v_result == Py_None);
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_niidx)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_niidx)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 477, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":476
+  /* "PETSc/IS.pyx":478
  *         indices = iarray_i(indices, &niidx, &iidx)
  *         if result is None: result = empty_i(niidx)
  *         result  = oarray_i(result,  &noidx, &oidx)             # <<<<<<<<<<<<<<
  *         assert niidx == noidx, "incompatible array sizes"
  *         CHKERR( ISLocalToGlobalMappingApply(
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_v_result, (&__pyx_v_noidx), (&__pyx_v_oidx))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_v_result, (&__pyx_v_noidx), (&__pyx_v_oidx))); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":477
+  /* "PETSc/IS.pyx":479
  *         if result is None: result = empty_i(niidx)
  *         result  = oarray_i(result,  &noidx, &oidx)
  *         assert niidx == noidx, "incompatible array sizes"             # <<<<<<<<<<<<<<
@@ -82045,21 +83997,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_niidx == __pyx_v_noidx) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_incompatible_array_sizes);
-      {__pyx_filename = __pyx_f[29]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(29, 479, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/IS.pyx":478
+  /* "PETSc/IS.pyx":480
  *         result  = oarray_i(result,  &noidx, &oidx)
  *         assert niidx == noidx, "incompatible array sizes"
  *         CHKERR( ISLocalToGlobalMappingApply(             # <<<<<<<<<<<<<<
  *             self.lgm, niidx, iidx, oidx) )
  *         return result
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingApply(__pyx_v_self->lgm, __pyx_v_niidx, __pyx_v_iidx, __pyx_v_oidx)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingApply(__pyx_v_self->lgm, __pyx_v_niidx, __pyx_v_iidx, __pyx_v_oidx)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(29, 480, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":480
+  /* "PETSc/IS.pyx":482
  *         CHKERR( ISLocalToGlobalMappingApply(
  *             self.lgm, niidx, iidx, oidx) )
  *         return result             # <<<<<<<<<<<<<<
@@ -82071,7 +84023,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":471
+  /* "PETSc/IS.pyx":473
  *     #
  * 
  *     def apply(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -82092,7 +84044,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":482
+/* "PETSc/IS.pyx":484
  *         return result
  * 
  *     def applyBlock(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -82106,9 +84058,6 @@ static char __pyx_doc_8petsc4py_5PETSc_5LGMap_28applyBlock[] = "LGMap.applyBlock
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29applyBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_result = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("applyBlock (wrapper)", 0);
@@ -82137,7 +84086,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29applyBlock(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyBlock") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyBlock") < 0)) __PYX_ERR(29, 484, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -82152,7 +84101,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29applyBlock(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applyBlock", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applyBlock", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 484, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.applyBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -82176,14 +84125,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   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("applyBlock", 0);
   __Pyx_INCREF(__pyx_v_indices);
   __Pyx_INCREF(__pyx_v_result);
 
-  /* "PETSc/IS.pyx":483
+  /* "PETSc/IS.pyx":485
  * 
  *     def applyBlock(self, indices, result=None):
  *         cdef PetscInt niidx = 0, *iidx = NULL             # <<<<<<<<<<<<<<
@@ -82193,7 +84139,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   __pyx_v_niidx = 0;
   __pyx_v_iidx = NULL;
 
-  /* "PETSc/IS.pyx":484
+  /* "PETSc/IS.pyx":486
  *     def applyBlock(self, indices, result=None):
  *         cdef PetscInt niidx = 0, *iidx = NULL
  *         cdef PetscInt noidx = 0, *oidx = NULL             # <<<<<<<<<<<<<<
@@ -82203,19 +84149,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   __pyx_v_noidx = 0;
   __pyx_v_oidx = NULL;
 
-  /* "PETSc/IS.pyx":485
+  /* "PETSc/IS.pyx":487
  *         cdef PetscInt niidx = 0, *iidx = NULL
  *         cdef PetscInt noidx = 0, *oidx = NULL
  *         indices = iarray_i(indices, &niidx, &iidx)             # <<<<<<<<<<<<<<
  *         if result is None: result = empty_i(niidx)
  *         result  = oarray_i(result,  &noidx, &oidx)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_niidx), (&__pyx_v_iidx))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_niidx), (&__pyx_v_iidx))); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 487, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":486
+  /* "PETSc/IS.pyx":488
  *         cdef PetscInt noidx = 0, *oidx = NULL
  *         indices = iarray_i(indices, &niidx, &iidx)
  *         if result is None: result = empty_i(niidx)             # <<<<<<<<<<<<<<
@@ -82225,27 +84171,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   __pyx_t_2 = (__pyx_v_result == Py_None);
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_niidx)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_niidx)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 488, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":487
+  /* "PETSc/IS.pyx":489
  *         indices = iarray_i(indices, &niidx, &iidx)
  *         if result is None: result = empty_i(niidx)
  *         result  = oarray_i(result,  &noidx, &oidx)             # <<<<<<<<<<<<<<
  *         assert niidx == noidx, "incompatible array sizes"
  *         CHKERR( ISLocalToGlobalMappingApplyBlock(
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_v_result, (&__pyx_v_noidx), (&__pyx_v_oidx))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_v_result, (&__pyx_v_noidx), (&__pyx_v_oidx))); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":488
+  /* "PETSc/IS.pyx":490
  *         if result is None: result = empty_i(niidx)
  *         result  = oarray_i(result,  &noidx, &oidx)
  *         assert niidx == noidx, "incompatible array sizes"             # <<<<<<<<<<<<<<
@@ -82256,21 +84200,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_niidx == __pyx_v_noidx) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_incompatible_array_sizes);
-      {__pyx_filename = __pyx_f[29]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(29, 490, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/IS.pyx":489
+  /* "PETSc/IS.pyx":491
  *         result  = oarray_i(result,  &noidx, &oidx)
  *         assert niidx == noidx, "incompatible array sizes"
  *         CHKERR( ISLocalToGlobalMappingApplyBlock(             # <<<<<<<<<<<<<<
  *             self.lgm, niidx, iidx, oidx) )
  *         return result
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingApplyBlock(__pyx_v_self->lgm, __pyx_v_niidx, __pyx_v_iidx, __pyx_v_oidx)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingApplyBlock(__pyx_v_self->lgm, __pyx_v_niidx, __pyx_v_iidx, __pyx_v_oidx)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(29, 491, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":491
+  /* "PETSc/IS.pyx":493
  *         CHKERR( ISLocalToGlobalMappingApplyBlock(
  *             self.lgm, niidx, iidx, oidx) )
  *         return result             # <<<<<<<<<<<<<<
@@ -82282,7 +84226,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":482
+  /* "PETSc/IS.pyx":484
  *         return result
  * 
  *     def applyBlock(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -82303,7 +84247,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":493
+/* "PETSc/IS.pyx":495
  *         return result
  * 
  *     def applyIS(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -82316,9 +84260,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31applyIS(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_5LGMap_30applyIS[] = "LGMap.applyIS(self, IS iset)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31applyIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("applyIS (wrapper)", 0);
@@ -82340,7 +84281,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31applyIS(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, "applyIS") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyIS") < 0)) __PYX_ERR(29, 495, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -82351,13 +84292,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31applyIS(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applyIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applyIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 495, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.applyIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 495, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
@@ -82375,33 +84316,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(struct PyPetscLGMapO
   __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("applyIS", 0);
 
-  /* "PETSc/IS.pyx":494
+  /* "PETSc/IS.pyx":496
  * 
  *     def applyIS(self, IS iset not None):
  *         cdef IS result = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISLocalToGlobalMappingApplyIS(
  *             self.lgm, iset.iset, &result.iset) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 496, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_result = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":495
+  /* "PETSc/IS.pyx":497
  *     def applyIS(self, IS iset not None):
  *         cdef IS result = IS()
  *         CHKERR( ISLocalToGlobalMappingApplyIS(             # <<<<<<<<<<<<<<
  *             self.lgm, iset.iset, &result.iset) )
  *         return result
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingApplyIS(__pyx_v_self->lgm, __pyx_v_iset->iset, (&__pyx_v_result->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingApplyIS(__pyx_v_self->lgm, __pyx_v_iset->iset, (&__pyx_v_result->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(29, 497, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":497
+  /* "PETSc/IS.pyx":499
  *         CHKERR( ISLocalToGlobalMappingApplyIS(
  *             self.lgm, iset.iset, &result.iset) )
  *         return result             # <<<<<<<<<<<<<<
@@ -82413,7 +84351,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(struct PyPetscLGMapO
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":493
+  /* "PETSc/IS.pyx":495
  *         return result
  * 
  *     def applyIS(self, IS iset not None):             # <<<<<<<<<<<<<<
@@ -82433,7 +84371,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(struct PyPetscLGMapO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":499
+/* "PETSc/IS.pyx":501
  *         return result
  * 
  *     def applyInverse(self, indices, map_type=None):             # <<<<<<<<<<<<<<
@@ -82447,9 +84385,6 @@ static char __pyx_doc_8petsc4py_5PETSc_5LGMap_32applyInverse[] = "LGMap.applyInv
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_map_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("applyInverse (wrapper)", 0);
@@ -82478,7 +84413,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyInverse(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyInverse") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyInverse") < 0)) __PYX_ERR(29, 501, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -82493,7 +84428,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyInverse(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applyInverse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applyInverse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 501, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.applyInverse", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -82521,13 +84456,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("applyInverse", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":500
+  /* "PETSc/IS.pyx":502
  * 
  *     def applyInverse(self, indices, map_type=None):
  *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK             # <<<<<<<<<<<<<<
@@ -82536,7 +84468,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
  */
   __pyx_v_cmtype = IS_GTOLM_MASK;
 
-  /* "PETSc/IS.pyx":501
+  /* "PETSc/IS.pyx":503
  *     def applyInverse(self, indices, map_type=None):
  *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
  *         if map_type is not None: cmtype = map_type             # <<<<<<<<<<<<<<
@@ -82546,13 +84478,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   __pyx_t_1 = (__pyx_v_map_type != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = ((ISGlobalToLocalMappingType)PyInt_AsLong(__pyx_v_map_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((ISGlobalToLocalMappingType)__Pyx_PyInt_As_ISGlobalToLocalMappingType(__pyx_v_map_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 503, __pyx_L1_error)
     __pyx_v_cmtype = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":502
+  /* "PETSc/IS.pyx":504
  *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
  *         if map_type is not None: cmtype = map_type
  *         cdef PetscInt n = 0, *idx = NULL             # <<<<<<<<<<<<<<
@@ -82562,19 +84492,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   __pyx_v_n = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":503
+  /* "PETSc/IS.pyx":505
  *         if map_type is not None: cmtype = map_type
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)             # <<<<<<<<<<<<<<
  *         cdef PetscInt nout = n, *idxout = NULL
  *         if cmtype != PETSC_IS_GTOLM_MASK:
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_n), (&__pyx_v_idx))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_n), (&__pyx_v_idx))); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 505, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/IS.pyx":504
+  /* "PETSc/IS.pyx":506
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL             # <<<<<<<<<<<<<<
@@ -82584,7 +84514,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   __pyx_v_nout = __pyx_v_n;
   __pyx_v_idxout = NULL;
 
-  /* "PETSc/IS.pyx":505
+  /* "PETSc/IS.pyx":507
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL
  *         if cmtype != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
@@ -82594,43 +84524,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   __pyx_t_2 = ((__pyx_v_cmtype != IS_GTOLM_MASK) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/IS.pyx":506
+    /* "PETSc/IS.pyx":508
  *         cdef PetscInt nout = n, *idxout = NULL
  *         if cmtype != PETSC_IS_GTOLM_MASK:
  *             CHKERR( ISGlobalToLocalMappingApply(             # <<<<<<<<<<<<<<
  *                     self.lgm, cmtype, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmtype, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmtype, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(29, 508, __pyx_L1_error)
+
+    /* "PETSc/IS.pyx":507
+ *         indices = iarray_i(indices, &n, &idx)
+ *         cdef PetscInt nout = n, *idxout = NULL
+ *         if cmtype != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
+ *             CHKERR( ISGlobalToLocalMappingApply(
+ *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/IS.pyx":508
+  /* "PETSc/IS.pyx":510
  *             CHKERR( ISGlobalToLocalMappingApply(
  *                     self.lgm, cmtype, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)             # <<<<<<<<<<<<<<
  *         CHKERR( ISGlobalToLocalMappingApply(
  *                 self.lgm, cmtype, n, idx, &nout, idxout) )
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_nout)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_nout)); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 510, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_4, (&__pyx_v_nout), (&__pyx_v_idxout))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_4, (&__pyx_v_nout), (&__pyx_v_idxout))); if (unlikely(!__pyx_t_6)) __PYX_ERR(29, 510, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_result = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/IS.pyx":509
+  /* "PETSc/IS.pyx":511
  *                     self.lgm, cmtype, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)
  *         CHKERR( ISGlobalToLocalMappingApply(             # <<<<<<<<<<<<<<
  *                 self.lgm, cmtype, n, idx, &nout, idxout) )
  *         return result
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmtype, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), __pyx_v_idxout)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmtype, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), __pyx_v_idxout)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(29, 511, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":511
+  /* "PETSc/IS.pyx":513
  *         CHKERR( ISGlobalToLocalMappingApply(
  *                 self.lgm, cmtype, n, idx, &nout, idxout) )
  *         return result             # <<<<<<<<<<<<<<
@@ -82642,7 +84578,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":499
+  /* "PETSc/IS.pyx":501
  *         return result
  * 
  *     def applyInverse(self, indices, map_type=None):             # <<<<<<<<<<<<<<
@@ -82664,7 +84600,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":513
+/* "PETSc/IS.pyx":515
  *         return result
  * 
  *     def applyBlockInverse(self, indices, map_type=None):             # <<<<<<<<<<<<<<
@@ -82678,9 +84614,6 @@ static char __pyx_doc_8petsc4py_5PETSc_5LGMap_34applyBlockInverse[] = "LGMap.app
 static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyBlockInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_map_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("applyBlockInverse (wrapper)", 0);
@@ -82709,7 +84642,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyBlockInverse(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyBlockInverse") < 0)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyBlockInverse") < 0)) __PYX_ERR(29, 515, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -82724,7 +84657,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyBlockInverse(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applyBlockInverse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[29]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applyBlockInverse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 515, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.applyBlockInverse", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -82752,13 +84685,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("applyBlockInverse", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":514
+  /* "PETSc/IS.pyx":516
  * 
  *     def applyBlockInverse(self, indices, map_type=None):
  *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK             # <<<<<<<<<<<<<<
@@ -82767,7 +84697,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
  */
   __pyx_v_cmtype = IS_GTOLM_MASK;
 
-  /* "PETSc/IS.pyx":515
+  /* "PETSc/IS.pyx":517
  *     def applyBlockInverse(self, indices, map_type=None):
  *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
  *         if map_type is not None: cmtype = map_type             # <<<<<<<<<<<<<<
@@ -82777,13 +84707,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   __pyx_t_1 = (__pyx_v_map_type != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = ((ISGlobalToLocalMappingType)PyInt_AsLong(__pyx_v_map_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((ISGlobalToLocalMappingType)__Pyx_PyInt_As_ISGlobalToLocalMappingType(__pyx_v_map_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 517, __pyx_L1_error)
     __pyx_v_cmtype = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/IS.pyx":516
+  /* "PETSc/IS.pyx":518
  *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
  *         if map_type is not None: cmtype = map_type
  *         cdef PetscInt n = 0, *idx = NULL             # <<<<<<<<<<<<<<
@@ -82793,19 +84721,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   __pyx_v_n = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":517
+  /* "PETSc/IS.pyx":519
  *         if map_type is not None: cmtype = map_type
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)             # <<<<<<<<<<<<<<
  *         cdef PetscInt nout = n, *idxout = NULL
  *         if cmtype != PETSC_IS_GTOLM_MASK:
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_n), (&__pyx_v_idx))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_n), (&__pyx_v_idx))); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 519, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/IS.pyx":518
+  /* "PETSc/IS.pyx":520
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL             # <<<<<<<<<<<<<<
@@ -82815,7 +84743,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   __pyx_v_nout = __pyx_v_n;
   __pyx_v_idxout = NULL;
 
-  /* "PETSc/IS.pyx":519
+  /* "PETSc/IS.pyx":521
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL
  *         if cmtype != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
@@ -82825,43 +84753,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   __pyx_t_2 = ((__pyx_v_cmtype != IS_GTOLM_MASK) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/IS.pyx":520
+    /* "PETSc/IS.pyx":522
  *         cdef PetscInt nout = n, *idxout = NULL
  *         if cmtype != PETSC_IS_GTOLM_MASK:
  *             CHKERR( ISGlobalToLocalMappingApply(             # <<<<<<<<<<<<<<
  *                     self.lgm, cmtype, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmtype, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmtype, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(29, 522, __pyx_L1_error)
+
+    /* "PETSc/IS.pyx":521
+ *         indices = iarray_i(indices, &n, &idx)
+ *         cdef PetscInt nout = n, *idxout = NULL
+ *         if cmtype != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
+ *             CHKERR( ISGlobalToLocalMappingApply(
+ *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/IS.pyx":522
+  /* "PETSc/IS.pyx":524
  *             CHKERR( ISGlobalToLocalMappingApply(
  *                     self.lgm, cmtype, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)             # <<<<<<<<<<<<<<
  *         CHKERR( ISGlobalToLocalMappingApplyBlock(
  *                 self.lgm, cmtype, n, idx, &nout, idxout) )
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_nout)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_nout)); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 524, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_4, (&__pyx_v_nout), (&__pyx_v_idxout))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_4, (&__pyx_v_nout), (&__pyx_v_idxout))); if (unlikely(!__pyx_t_6)) __PYX_ERR(29, 524, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_result = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/IS.pyx":523
+  /* "PETSc/IS.pyx":525
  *                     self.lgm, cmtype, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)
  *         CHKERR( ISGlobalToLocalMappingApplyBlock(             # <<<<<<<<<<<<<<
  *                 self.lgm, cmtype, n, idx, &nout, idxout) )
  *         return result
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApplyBlock(__pyx_v_self->lgm, __pyx_v_cmtype, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), __pyx_v_idxout)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApplyBlock(__pyx_v_self->lgm, __pyx_v_cmtype, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), __pyx_v_idxout)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(29, 525, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":525
+  /* "PETSc/IS.pyx":527
  *         CHKERR( ISGlobalToLocalMappingApplyBlock(
  *                 self.lgm, cmtype, n, idx, &nout, idxout) )
  *         return result             # <<<<<<<<<<<<<<
@@ -82873,7 +84807,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":513
+  /* "PETSc/IS.pyx":515
  *         return result
  * 
  *     def applyBlockInverse(self, indices, map_type=None):             # <<<<<<<<<<<<<<
@@ -82895,7 +84829,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":529
+/* "PETSc/IS.pyx":531
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -82922,12 +84856,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLG
   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);
 
-  /* "PETSc/IS.pyx":530
+  /* "PETSc/IS.pyx":532
  *     property size:
  *         def __get__(self):
  *             return self.getSize()             # <<<<<<<<<<<<<<
@@ -82935,7 +84866,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLG
  *     property block_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 532, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -82948,10 +84879,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLG
     }
   }
   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[29]; __pyx_lineno = 530; __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(29, 532, __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[29]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 532, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -82959,7 +84890,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLG
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":529
+  /* "PETSc/IS.pyx":531
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -82980,7 +84911,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLG
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":533
+/* "PETSc/IS.pyx":535
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83007,12 +84938,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct Py
   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);
 
-  /* "PETSc/IS.pyx":534
+  /* "PETSc/IS.pyx":536
  *     property block_size:
  *         def __get__(self):
  *             return self.getBlockSize()             # <<<<<<<<<<<<<<
@@ -83020,7 +84948,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct Py
  *     property indices:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 536, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -83033,10 +84961,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct Py
     }
   }
   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[29]; __pyx_lineno = 534; __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(29, 536, __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[29]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 536, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -83044,7 +84972,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":533
+  /* "PETSc/IS.pyx":535
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83065,7 +84993,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":537
+/* "PETSc/IS.pyx":539
  * 
  *     property indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83092,12 +85020,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPets
   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);
 
-  /* "PETSc/IS.pyx":538
+  /* "PETSc/IS.pyx":540
  *     property indices:
  *         def __get__(self):
  *             return self.getIndices()             # <<<<<<<<<<<<<<
@@ -83105,7 +85030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPets
  *     property block_indices:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIndices); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIndices); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -83118,10 +85043,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPets
     }
   }
   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[29]; __pyx_lineno = 538; __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(29, 540, __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[29]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 540, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -83129,7 +85054,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":537
+  /* "PETSc/IS.pyx":539
  * 
  *     property indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83150,7 +85075,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":541
+/* "PETSc/IS.pyx":543
  * 
  *     property block_indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83177,12 +85102,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct
   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);
 
-  /* "PETSc/IS.pyx":542
+  /* "PETSc/IS.pyx":544
  *     property block_indices:
  *         def __get__(self):
  *             return self.getBlockIndices()             # <<<<<<<<<<<<<<
@@ -83190,7 +85112,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct
  *     property info:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockIndices); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockIndices); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 544, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -83203,10 +85125,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct
     }
   }
   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[29]; __pyx_lineno = 542; __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(29, 544, __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[29]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 544, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -83214,7 +85136,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":541
+  /* "PETSc/IS.pyx":543
  * 
  *     property block_indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83235,7 +85157,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":545
+/* "PETSc/IS.pyx":547
  * 
  *     property info:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83262,12 +85184,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLG
   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);
 
-  /* "PETSc/IS.pyx":546
+  /* "PETSc/IS.pyx":548
  *     property info:
  *         def __get__(self):
  *             return self.getInfo()             # <<<<<<<<<<<<<<
@@ -83275,7 +85194,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLG
  *     property block_info:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getInfo); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getInfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 548, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -83288,10 +85207,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLG
     }
   }
   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[29]; __pyx_lineno = 546; __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(29, 548, __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[29]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 548, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -83299,7 +85218,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLG
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":545
+  /* "PETSc/IS.pyx":547
  * 
  *     property info:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83320,7 +85239,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLG
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":549
+/* "PETSc/IS.pyx":551
  * 
  *     property block_info:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83347,12 +85266,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_info___get__(struct Py
   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);
 
-  /* "PETSc/IS.pyx":550
+  /* "PETSc/IS.pyx":552
  *     property block_info:
  *         def __get__(self):
  *             return self.getBlockInfo()             # <<<<<<<<<<<<<<
@@ -83360,7 +85276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_info___get__(struct Py
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockInfo); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockInfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 552, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -83373,10 +85289,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_info___get__(struct Py
     }
   }
   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[29]; __pyx_lineno = 550; __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(29, 552, __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[29]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 552, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -83384,7 +85300,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_info___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":549
+  /* "PETSc/IS.pyx":551
  * 
  *     property block_info:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -83491,9 +85407,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_2__pos__(struct PyPetscVecObject
   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("__pos__", 0);
 
   /* "PETSc/Vec.pyx":39
@@ -83504,7 +85417,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_2__pos__(struct PyPetscVecObject
  *     def __neg__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -83554,9 +85467,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4__neg__(struct PyPetscVecObject
   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("__neg__", 0);
 
   /* "PETSc/Vec.pyx":42
@@ -83567,7 +85477,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4__neg__(struct PyPetscVecObject
  *     def __abs__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_neg(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_neg(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -83617,9 +85527,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6__abs__(struct PyPetscVecObject
   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("__abs__", 0);
 
   /* "PETSc/Vec.pyx":45
@@ -83630,7 +85537,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6__abs__(struct PyPetscVecObject
  *     # inplace binary operations
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_abs(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_abs(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -83680,9 +85587,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8__iadd__(struct PyPetscVecObjec
   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("__iadd__", 0);
 
   /* "PETSc/Vec.pyx":50
@@ -83693,7 +85597,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8__iadd__(struct PyPetscVecObjec
  *     def __isub__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_iadd(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_iadd(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -83743,9 +85647,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10__isub__(struct PyPetscVecObje
   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("__isub__", 0);
 
   /* "PETSc/Vec.pyx":53
@@ -83756,7 +85657,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10__isub__(struct PyPetscVecObje
  *     def __imul__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_isub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_isub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -83806,9 +85707,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12__imul__(struct PyPetscVecObje
   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("__imul__", 0);
 
   /* "PETSc/Vec.pyx":56
@@ -83819,7 +85717,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12__imul__(struct PyPetscVecObje
  *     def __idiv__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_imul(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_imul(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -83872,9 +85770,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_14__idiv__(struct PyPetscVecObje
   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("__idiv__", 0);
 
   /* "PETSc/Vec.pyx":59
@@ -83885,7 +85780,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_14__idiv__(struct PyPetscVecObje
  *     def __itruediv__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_idiv(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_idiv(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -83936,9 +85831,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_16__itruediv__(struct PyPetscVec
   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("__itruediv__", 0);
 
   /* "PETSc/Vec.pyx":62
@@ -83949,7 +85841,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_16__itruediv__(struct PyPetscVec
  *     # binary operations
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_idiv(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_idiv(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 62, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -84001,9 +85893,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_18__add__(PyObject *__pyx_v_self
   int __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("__add__", 0);
 
   /* "PETSc/Vec.pyx":67
@@ -84013,7 +85902,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_18__add__(PyObject *__pyx_v_self
  *             return vec_add(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
@@ -84025,25 +85914,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_18__add__(PyObject *__pyx_v_self
  *             return vec_radd(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_add(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 68, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_add(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 68, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Vec.pyx":67
+ * 
+ *     def __add__(self, other):
+ *         if isinstance(self, Vec):             # <<<<<<<<<<<<<<
+ *             return vec_add(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":70
+  /* "PETSc/Vec.pyx":70
  *             return vec_add(self, other)
  *         else:
  *             return vec_radd(other, self)             # <<<<<<<<<<<<<<
  * 
  *     def __sub__(self, other):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_radd(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 70, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_radd(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 70, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -84096,9 +85993,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_20__sub__(PyObject *__pyx_v_self
   int __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("__sub__", 0);
 
   /* "PETSc/Vec.pyx":73
@@ -84108,7 +86002,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_20__sub__(PyObject *__pyx_v_self
  *             return vec_sub(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
@@ -84120,25 +86014,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_20__sub__(PyObject *__pyx_v_self
  *             return vec_rsub(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_sub(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 74, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_sub(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Vec.pyx":73
+ * 
+ *     def __sub__(self, other):
+ *         if isinstance(self, Vec):             # <<<<<<<<<<<<<<
+ *             return vec_sub(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":76
+  /* "PETSc/Vec.pyx":76
  *             return vec_sub(self, other)
  *         else:
  *             return vec_rsub(other, self)             # <<<<<<<<<<<<<<
  * 
  *     def __mul__(self, other):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_rsub(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 76, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_rsub(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 76, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -84191,9 +86093,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_22__mul__(PyObject *__pyx_v_self
   int __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("__mul__", 0);
 
   /* "PETSc/Vec.pyx":79
@@ -84203,7 +86102,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_22__mul__(PyObject *__pyx_v_self
  *             return vec_mul(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
@@ -84215,25 +86114,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_22__mul__(PyObject *__pyx_v_self
  *             return vec_rmul(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_mul(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 80, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_mul(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 80, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Vec.pyx":79
+ * 
+ *     def __mul__(self, other):
+ *         if isinstance(self, Vec):             # <<<<<<<<<<<<<<
+ *             return vec_mul(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":82
+  /* "PETSc/Vec.pyx":82
  *             return vec_mul(self, other)
  *         else:
  *             return vec_rmul(other, self)             # <<<<<<<<<<<<<<
  * 
  *     def __div__(self, other):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_rmul(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 82, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_rmul(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 82, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -84289,9 +86196,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_24__div__(PyObject *__pyx_v_self
   int __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("__div__", 0);
 
   /* "PETSc/Vec.pyx":85
@@ -84301,7 +86205,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_24__div__(PyObject *__pyx_v_self
  *             return vec_div(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
@@ -84313,25 +86217,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_24__div__(PyObject *__pyx_v_self
  *             return vec_rdiv(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_div(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 86, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_div(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Vec.pyx":85
+ * 
+ *     def __div__(self, other):
+ *         if isinstance(self, Vec):             # <<<<<<<<<<<<<<
+ *             return vec_div(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":88
+  /* "PETSc/Vec.pyx":88
  *             return vec_div(self, other)
  *         else:
  *             return vec_rdiv(other, self)             # <<<<<<<<<<<<<<
  * 
  *     def __truediv__(self, other):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_rdiv(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 88, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_rdiv(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 88, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -84385,9 +86297,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_26__truediv__(PyObject *__pyx_v_
   int __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("__truediv__", 0);
 
   /* "PETSc/Vec.pyx":91
@@ -84397,7 +86306,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_26__truediv__(PyObject *__pyx_v_
  *             return vec_div(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
@@ -84409,25 +86318,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_26__truediv__(PyObject *__pyx_v_
  *             return vec_rdiv(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_div(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 92, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_div(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 92, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Vec.pyx":91
+ * 
+ *     def __truediv__(self, other):
+ *         if isinstance(self, Vec):             # <<<<<<<<<<<<<<
+ *             return vec_div(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":94
+  /* "PETSc/Vec.pyx":94
  *             return vec_div(self, other)
  *         else:
  *             return vec_rdiv(other, self)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_rdiv(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 94, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_rdiv(((struct PyPetscVecObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 94, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -84478,9 +86395,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_28__getitem__(struct PyPetscVecO
   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("__getitem__", 0);
 
   /* "PETSc/Vec.pyx":104
@@ -84491,7 +86405,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_28__getitem__(struct PyPetscVecO
  *     def __setitem__(self, i, v):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vec_getitem(__pyx_v_self, __pyx_v_i); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vec_getitem(__pyx_v_self, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -84541,9 +86455,6 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_30__setitem__(struct PyPetscVecObject
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
   /* "PETSc/Vec.pyx":107
@@ -84553,7 +86464,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_30__setitem__(struct PyPetscVecObject
  * 
  *     # buffer interface (PEP 3118)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vec_setitem(__pyx_v_self, __pyx_v_i, __pyx_v_v); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vec_setitem(__pyx_v_self, __pyx_v_i, __pyx_v_v); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 107, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":106
  *         return vec_getitem(self, i)
@@ -84602,9 +86513,6 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_32__getbuffer__(struct PyPetscVecObjec
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getbuffer__", 0);
   if (__pyx_v_view != NULL) {
     __pyx_v_view->obj = Py_None; __Pyx_INCREF(Py_None);
@@ -84618,12 +86526,12 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_32__getbuffer__(struct PyPetscVecObjec
  *         buf.acquirebuffer(view, flags)
  * 
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *)__pyx_t_2);
@@ -84636,7 +86544,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_32__getbuffer__(struct PyPetscVecObjec
  * 
  *     def __releasebuffer__(self, Py_buffer *view):
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_buf->__pyx_vtab)->acquirebuffer(__pyx_v_buf, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_buf->__pyx_vtab)->acquirebuffer(__pyx_v_buf, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 113, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":111
  *     # buffer interface (PEP 3118)
@@ -84689,14 +86597,11 @@ static CYTHON_UNUSED void __pyx_pw_8petsc4py_5PETSc_3Vec_35__releasebuffer__(PyO
   __Pyx_RefNannyFinishContext();
 }
 
-static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, Py_buffer *__pyx_v_view) {
+static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(struct PyPetscVecObject *__pyx_v_self, Py_buffer *__pyx_v_view) {
   struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_v_buf = 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("__releasebuffer__", 0);
 
   /* "PETSc/Vec.pyx":116
@@ -84704,7 +86609,7 @@ static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(CYTHON_UNUSED str
  *     def __releasebuffer__(self, Py_buffer *view):
  *         cdef _Vec_buffer buf = <_Vec_buffer>(view.obj)             # <<<<<<<<<<<<<<
  *         buf.releasebuffer(view)
- * 
+ *         <void>self # unused
  */
   __pyx_t_1 = __pyx_v_view->obj;
   __Pyx_INCREF(__pyx_t_1);
@@ -84715,10 +86620,19 @@ static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(CYTHON_UNUSED str
  *     def __releasebuffer__(self, Py_buffer *view):
  *         cdef _Vec_buffer buf = <_Vec_buffer>(view.obj)
  *         buf.releasebuffer(view)             # <<<<<<<<<<<<<<
+ *         <void>self # unused
+ * 
+ */
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_buf->__pyx_vtab)->releasebuffer(__pyx_v_buf, __pyx_v_view); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 117, __pyx_L1_error)
+
+  /* "PETSc/Vec.pyx":118
+ *         cdef _Vec_buffer buf = <_Vec_buffer>(view.obj)
+ *         buf.releasebuffer(view)
+ *         <void>self # unused             # <<<<<<<<<<<<<<
  * 
  *     # 'with' statement (PEP 343)
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_buf->__pyx_vtab)->releasebuffer(__pyx_v_buf, __pyx_v_view); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((void)__pyx_v_self);
 
   /* "PETSc/Vec.pyx":115
  *         buf.acquirebuffer(view, flags)
@@ -84738,7 +86652,7 @@ static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(CYTHON_UNUSED str
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/Vec.pyx":121
+/* "PETSc/Vec.pyx":122
  *     # 'with' statement (PEP 343)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -84769,41 +86683,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_36__enter__(struct PyPetscVecObj
   __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("__enter__", 0);
 
-  /* "PETSc/Vec.pyx":122
+  /* "PETSc/Vec.pyx":123
  * 
  *     def __enter__(self):
  *         cdef _Vec_buffer buf = _Vec_buffer(self)             # <<<<<<<<<<<<<<
  *         self.set_attr('__buffer__', buf)
  *         return buf.enter()
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 123, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 123, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":123
+  /* "PETSc/Vec.pyx":124
  *     def __enter__(self):
  *         cdef _Vec_buffer buf = _Vec_buffer(self)
  *         self.set_attr('__buffer__', buf)             # <<<<<<<<<<<<<<
  *         return buf.enter()
  * 
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_buffer, ((PyObject *)__pyx_v_buf)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__buffer__"), ((PyObject *)__pyx_v_buf)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":124
+  /* "PETSc/Vec.pyx":125
  *         cdef _Vec_buffer buf = _Vec_buffer(self)
  *         self.set_attr('__buffer__', buf)
  *         return buf.enter()             # <<<<<<<<<<<<<<
@@ -84811,13 +86722,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_36__enter__(struct PyPetscVecObj
  *     def __exit__(self, *exc):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_buf->__pyx_vtab)->enter(__pyx_v_buf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_buf->__pyx_vtab)->enter(__pyx_v_buf); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":121
+  /* "PETSc/Vec.pyx":122
  *     # 'with' statement (PEP 343)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -84838,7 +86749,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_36__enter__(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":126
+/* "PETSc/Vec.pyx":127
  *         return buf.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -84870,36 +86781,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_38__exit__(struct PyPetscVecObje
   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("__exit__", 0);
 
-  /* "PETSc/Vec.pyx":127
+  /* "PETSc/Vec.pyx":128
  * 
  *     def __exit__(self, *exc):
  *         cdef _Vec_buffer buf = self.get_attr('__buffer__')             # <<<<<<<<<<<<<<
  *         self.set_attr('__buffer__', None)
  *         return buf.exit()
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_buffer); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__buffer__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 128, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc__Vec_buffer))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc__Vec_buffer))))) __PYX_ERR(30, 128, __pyx_L1_error)
   __pyx_v_buf = ((struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":128
+  /* "PETSc/Vec.pyx":129
  *     def __exit__(self, *exc):
  *         cdef _Vec_buffer buf = self.get_attr('__buffer__')
  *         self.set_attr('__buffer__', None)             # <<<<<<<<<<<<<<
  *         return buf.exit()
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_buffer, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__buffer__"), Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 129, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":129
+  /* "PETSc/Vec.pyx":130
  *         cdef _Vec_buffer buf = self.get_attr('__buffer__')
  *         self.set_attr('__buffer__', None)
  *         return buf.exit()             # <<<<<<<<<<<<<<
@@ -84907,13 +86815,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_38__exit__(struct PyPetscVecObje
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_buf->__pyx_vtab)->exit(__pyx_v_buf); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_buf->__pyx_vtab)->exit(__pyx_v_buf); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":126
+  /* "PETSc/Vec.pyx":127
  *         return buf.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -84933,7 +86841,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_38__exit__(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":133
+/* "PETSc/Vec.pyx":134
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -84946,9 +86854,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_41view(PyObject *__pyx_v_self, P
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_40view[] = "Vec.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_41view(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);
@@ -84973,7 +86878,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_41view(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(30, 134, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -84986,13 +86891,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_41view(PyObject *__pyx_v_self, P
   }
   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[30]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 134, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.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[30]; __pyx_lineno = 133; __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(30, 134, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_40view(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -85012,12 +86917,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_40view(struct PyPetscVecObject *
   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);
 
-  /* "PETSc/Vec.pyx":134
+  /* "PETSc/Vec.pyx":135
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -85026,7 +86928,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_40view(struct PyPetscVecObject *
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/Vec.pyx":135
+  /* "PETSc/Vec.pyx":136
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -85038,20 +86940,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_40view(struct PyPetscVecObject *
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":136
+  /* "PETSc/Vec.pyx":137
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( VecView(self.vec, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecView(__pyx_v_self->vec, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecView(__pyx_v_self->vec, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 137, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":133
+  /* "PETSc/Vec.pyx":134
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -85071,7 +86971,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_40view(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":138
+/* "PETSc/Vec.pyx":139
  *         CHKERR( VecView(self.vec, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -85100,21 +87000,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_42destroy(struct PyPetscVecObjec
   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);
 
-  /* "PETSc/Vec.pyx":139
+  /* "PETSc/Vec.pyx":140
  * 
  *     def destroy(self):
  *         CHKERR( VecDestroy(&self.vec) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->vec))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->vec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 140, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":140
+  /* "PETSc/Vec.pyx":141
  *     def destroy(self):
  *         CHKERR( VecDestroy(&self.vec) )
  *         return self             # <<<<<<<<<<<<<<
@@ -85126,7 +87023,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_42destroy(struct PyPetscVecObjec
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":138
+  /* "PETSc/Vec.pyx":139
  *         CHKERR( VecView(self.vec, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -85144,7 +87041,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_42destroy(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":142
+/* "PETSc/Vec.pyx":143
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -85157,9 +87054,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_45create(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_44create[] = "Vec.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_45create(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);
@@ -85184,7 +87078,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_45create(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[30]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(30, 143, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -85197,7 +87091,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_45create(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[30]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 143, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -85217,22 +87111,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_44create(struct PyPetscVecObject
   __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);
 
-  /* "PETSc/Vec.pyx":143
+  /* "PETSc/Vec.pyx":144
  * 
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreate(ccomm, &newvec) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 144, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":144
+  /* "PETSc/Vec.pyx":145
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscVec newvec = NULL             # <<<<<<<<<<<<<<
@@ -85241,16 +87132,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_44create(struct PyPetscVecObject
  */
   __pyx_v_newvec = NULL;
 
-  /* "PETSc/Vec.pyx":145
+  /* "PETSc/Vec.pyx":146
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreate(ccomm, &newvec) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 146, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":146
+  /* "PETSc/Vec.pyx":147
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreate(ccomm, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec             # <<<<<<<<<<<<<<
@@ -85260,7 +87151,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_44create(struct PyPetscVecObject
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vec = __pyx_v_newvec;
 
-  /* "PETSc/Vec.pyx":147
+  /* "PETSc/Vec.pyx":148
  *         CHKERR( VecCreate(ccomm, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self             # <<<<<<<<<<<<<<
@@ -85272,7 +87163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_44create(struct PyPetscVecObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":142
+  /* "PETSc/Vec.pyx":143
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -85290,7 +87181,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_44create(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":149
+/* "PETSc/Vec.pyx":150
  *         return self
  * 
  *     def setType(self, vec_type):             # <<<<<<<<<<<<<<
@@ -85303,9 +87194,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_47setType(PyObject *__pyx_v_self
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_46setType[] = "Vec.setType(self, vec_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_47setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_vec_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);
@@ -85327,7 +87215,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_47setType(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[30]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(30, 150, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -85338,7 +87226,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_47setType(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[30]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 150, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -85357,13 +87245,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_46setType(struct PyPetscVecObjec
   __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_vec_type);
 
-  /* "PETSc/Vec.pyx":150
+  /* "PETSc/Vec.pyx":151
  * 
  *     def setType(self, vec_type):
  *         cdef PetscVecType cval = NULL             # <<<<<<<<<<<<<<
@@ -85372,28 +87257,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_46setType(struct PyPetscVecObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Vec.pyx":151
+  /* "PETSc/Vec.pyx":152
  *     def setType(self, vec_type):
  *         cdef PetscVecType cval = NULL
  *         vec_type = str2bytes(vec_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetType(self.vec, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_vec_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_vec_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 152, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_vec_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":152
+  /* "PETSc/Vec.pyx":153
  *         cdef PetscVecType cval = NULL
  *         vec_type = str2bytes(vec_type, &cval)
  *         CHKERR( VecSetType(self.vec, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def setSizes(self, size, bsize=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_self->vec, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_self->vec, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 153, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":149
+  /* "PETSc/Vec.pyx":150
  *         return self
  * 
  *     def setType(self, vec_type):             # <<<<<<<<<<<<<<
@@ -85415,7 +87300,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_46setType(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":154
+/* "PETSc/Vec.pyx":155
  *         CHKERR( VecSetType(self.vec, cval) )
  * 
  *     def setSizes(self, size, bsize=None):             # <<<<<<<<<<<<<<
@@ -85429,9 +87314,6 @@ static char __pyx_doc_8petsc4py_5PETSc_3Vec_48setSizes[] = "Vec.setSizes(self, s
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_49setSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setSizes (wrapper)", 0);
@@ -85460,7 +87342,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_49setSizes(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSizes") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSizes") < 0)) __PYX_ERR(30, 155, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -85475,7 +87357,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_49setSizes(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSizes", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSizes", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 155, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -85496,12 +87378,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObje
   __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("setSizes", 0);
 
-  /* "PETSc/Vec.pyx":155
+  /* "PETSc/Vec.pyx":156
  * 
  *     def setSizes(self, size, bsize=None):
  *         cdef PetscInt bs=0, n=0, N=0             # <<<<<<<<<<<<<<
@@ -85512,25 +87391,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObje
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":156
+  /* "PETSc/Vec.pyx":157
  *     def setSizes(self, size, bsize=None):
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetSizes(self.vec, n, N) )
  *         if bs != PETSC_DECIDE:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 157, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":157
+  /* "PETSc/Vec.pyx":158
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         CHKERR( VecSetSizes(self.vec, n, N) )             # <<<<<<<<<<<<<<
  *         if bs != PETSC_DECIDE:
  *             CHKERR( VecSetBlockSize(self.vec, bs) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetSizes(__pyx_v_self->vec, __pyx_v_n, __pyx_v_N)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetSizes(__pyx_v_self->vec, __pyx_v_n, __pyx_v_N)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 158, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":158
+  /* "PETSc/Vec.pyx":159
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         CHKERR( VecSetSizes(self.vec, n, N) )
  *         if bs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -85540,19 +87419,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObje
   __pyx_t_2 = ((__pyx_v_bs != PETSC_DECIDE) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Vec.pyx":159
+    /* "PETSc/Vec.pyx":160
  *         CHKERR( VecSetSizes(self.vec, n, N) )
  *         if bs != PETSC_DECIDE:
  *             CHKERR( VecSetBlockSize(self.vec, bs) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 160, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":159
+ *         Vec_Sizes(size, bsize, &bs, &n, &N)
+ *         CHKERR( VecSetSizes(self.vec, n, N) )
+ *         if bs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecSetBlockSize(self.vec, bs) )
+ * 
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":154
+  /* "PETSc/Vec.pyx":155
  *         CHKERR( VecSetType(self.vec, cval) )
  * 
  *     def setSizes(self, size, bsize=None):             # <<<<<<<<<<<<<<
@@ -85572,7 +87457,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":163
+/* "PETSc/Vec.pyx":164
  *     #
  * 
  *     def createSeq(self, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -85587,9 +87472,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_51createSeq(PyObject *__pyx_v_se
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
   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("createSeq (wrapper)", 0);
@@ -85625,7 +87507,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_51createSeq(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSeq") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSeq") < 0)) __PYX_ERR(30, 164, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -85642,7 +87524,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_51createSeq(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createSeq", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createSeq", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 164, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.createSeq", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -85666,22 +87548,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createSeq", 0);
 
-  /* "PETSc/Vec.pyx":164
+  /* "PETSc/Vec.pyx":165
  * 
  *     def createSeq(self, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_SELF)             # <<<<<<<<<<<<<<
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, PETSC_COMM_SELF); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, PETSC_COMM_SELF); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 165, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":165
+  /* "PETSc/Vec.pyx":166
  *     def createSeq(self, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_SELF)
  *         cdef PetscInt bs=0, n=0, N=0             # <<<<<<<<<<<<<<
@@ -85692,25 +87571,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":166
+  /* "PETSc/Vec.pyx":167
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_SELF)
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 167, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":167
+  /* "PETSc/Vec.pyx":168
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)             # <<<<<<<<<<<<<<
  *         if bs == PETSC_DECIDE: bs = 1
  *         cdef PetscVec newvec = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 168, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":168
+  /* "PETSc/Vec.pyx":169
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1             # <<<<<<<<<<<<<<
@@ -85720,11 +87599,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
   __pyx_t_3 = ((__pyx_v_bs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_bs = 1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":169
+  /* "PETSc/Vec.pyx":170
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1
  *         cdef PetscVec newvec = NULL             # <<<<<<<<<<<<<<
@@ -85733,43 +87610,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
  */
   __pyx_v_newvec = NULL;
 
-  /* "PETSc/Vec.pyx":170
+  /* "PETSc/Vec.pyx":171
  *         if bs == PETSC_DECIDE: bs = 1
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreate(ccomm,&newvec) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetSizes(newvec, n, N) )
  *         CHKERR( VecSetBlockSize(newvec, bs) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 171, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":171
+  /* "PETSc/Vec.pyx":172
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreate(ccomm,&newvec) )
  *         CHKERR( VecSetSizes(newvec, n, N) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetBlockSize(newvec, bs) )
  *         CHKERR( VecSetType(newvec, VECSEQ) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetSizes(__pyx_v_newvec, __pyx_v_n, __pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetSizes(__pyx_v_newvec, __pyx_v_n, __pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 172, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":172
+  /* "PETSc/Vec.pyx":173
  *         CHKERR( VecCreate(ccomm,&newvec) )
  *         CHKERR( VecSetSizes(newvec, n, N) )
  *         CHKERR( VecSetBlockSize(newvec, bs) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetType(newvec, VECSEQ) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_newvec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_newvec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 173, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":173
+  /* "PETSc/Vec.pyx":174
  *         CHKERR( VecSetSizes(newvec, n, N) )
  *         CHKERR( VecSetBlockSize(newvec, bs) )
  *         CHKERR( VecSetType(newvec, VECSEQ) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_newvec, VECSEQ)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_newvec, VECSEQ)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 174, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":174
+  /* "PETSc/Vec.pyx":175
  *         CHKERR( VecSetBlockSize(newvec, bs) )
  *         CHKERR( VecSetType(newvec, VECSEQ) )
  *         PetscCLEAR(self.obj); self.vec = newvec             # <<<<<<<<<<<<<<
@@ -85779,7 +87656,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vec = __pyx_v_newvec;
 
-  /* "PETSc/Vec.pyx":175
+  /* "PETSc/Vec.pyx":176
  *         CHKERR( VecSetType(newvec, VECSEQ) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self             # <<<<<<<<<<<<<<
@@ -85791,7 +87668,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":163
+  /* "PETSc/Vec.pyx":164
  *     #
  * 
  *     def createSeq(self, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -85809,7 +87686,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":177
+/* "PETSc/Vec.pyx":178
  *         return self
  * 
  *     def createMPI(self, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -85824,9 +87701,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_53createMPI(PyObject *__pyx_v_se
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
   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("createMPI (wrapper)", 0);
@@ -85862,7 +87736,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_53createMPI(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMPI") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMPI") < 0)) __PYX_ERR(30, 178, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -85879,7 +87753,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_53createMPI(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createMPI", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createMPI", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 178, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.createMPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -85903,22 +87777,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createMPI", 0);
 
-  /* "PETSc/Vec.pyx":178
+  /* "PETSc/Vec.pyx":179
  * 
  *     def createMPI(self, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 179, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":179
+  /* "PETSc/Vec.pyx":180
  *     def createMPI(self, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0             # <<<<<<<<<<<<<<
@@ -85929,25 +87800,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":180
+  /* "PETSc/Vec.pyx":181
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 181, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":181
+  /* "PETSc/Vec.pyx":182
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)             # <<<<<<<<<<<<<<
  *         if bs == PETSC_DECIDE: bs = 1
  *         cdef PetscVec newvec = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 182, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":182
+  /* "PETSc/Vec.pyx":183
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1             # <<<<<<<<<<<<<<
@@ -85957,11 +87828,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
   __pyx_t_3 = ((__pyx_v_bs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_bs = 1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":183
+  /* "PETSc/Vec.pyx":184
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1
  *         cdef PetscVec newvec = NULL             # <<<<<<<<<<<<<<
@@ -85970,43 +87839,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
  */
   __pyx_v_newvec = NULL;
 
-  /* "PETSc/Vec.pyx":184
+  /* "PETSc/Vec.pyx":185
  *         if bs == PETSC_DECIDE: bs = 1
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreate(ccomm, &newvec) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetSizes(newvec, n, N) )
  *         CHKERR( VecSetBlockSize(newvec, bs) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 185, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":185
+  /* "PETSc/Vec.pyx":186
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreate(ccomm, &newvec) )
  *         CHKERR( VecSetSizes(newvec, n, N) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetBlockSize(newvec, bs) )
  *         CHKERR( VecSetType(newvec, VECMPI) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetSizes(__pyx_v_newvec, __pyx_v_n, __pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetSizes(__pyx_v_newvec, __pyx_v_n, __pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 186, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":186
+  /* "PETSc/Vec.pyx":187
  *         CHKERR( VecCreate(ccomm, &newvec) )
  *         CHKERR( VecSetSizes(newvec, n, N) )
  *         CHKERR( VecSetBlockSize(newvec, bs) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetType(newvec, VECMPI) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_newvec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_newvec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 187, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":187
+  /* "PETSc/Vec.pyx":188
  *         CHKERR( VecSetSizes(newvec, n, N) )
  *         CHKERR( VecSetBlockSize(newvec, bs) )
  *         CHKERR( VecSetType(newvec, VECMPI) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_newvec, VECMPI)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_newvec, VECMPI)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 188, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":188
+  /* "PETSc/Vec.pyx":189
  *         CHKERR( VecSetBlockSize(newvec, bs) )
  *         CHKERR( VecSetType(newvec, VECMPI) )
  *         PetscCLEAR(self.obj); self.vec = newvec             # <<<<<<<<<<<<<<
@@ -86016,7 +87885,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vec = __pyx_v_newvec;
 
-  /* "PETSc/Vec.pyx":189
+  /* "PETSc/Vec.pyx":190
  *         CHKERR( VecSetType(newvec, VECMPI) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self             # <<<<<<<<<<<<<<
@@ -86028,7 +87897,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":177
+  /* "PETSc/Vec.pyx":178
  *         return self
  * 
  *     def createMPI(self, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -86046,7 +87915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":191
+/* "PETSc/Vec.pyx":192
  *         return self
  * 
  *     def createWithArray(self, array, size=None, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -86062,9 +87931,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_55createWithArray(PyObject *__py
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
   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("createWithArray (wrapper)", 0);
@@ -86107,7 +87973,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_55createWithArray(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createWithArray") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createWithArray") < 0)) __PYX_ERR(30, 192, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -86126,7 +87992,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_55createWithArray(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createWithArray", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createWithArray", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 192, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.createWithArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -86157,14 +88023,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
   MPI_Comm __pyx_t_6;
   int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createWithArray", 0);
   __Pyx_INCREF(__pyx_v_array);
   __Pyx_INCREF(__pyx_v_size);
 
-  /* "PETSc/Vec.pyx":192
+  /* "PETSc/Vec.pyx":193
  * 
  *     def createWithArray(self, array, size=None, bsize=None, comm=None):
  *         cdef PetscInt na=0             # <<<<<<<<<<<<<<
@@ -86173,7 +88036,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
  */
   __pyx_v_na = 0;
 
-  /* "PETSc/Vec.pyx":193
+  /* "PETSc/Vec.pyx":194
  *     def createWithArray(self, array, size=None, bsize=None, comm=None):
  *         cdef PetscInt na=0
  *         cdef PetscScalar *sa=NULL             # <<<<<<<<<<<<<<
@@ -86182,19 +88045,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
  */
   __pyx_v_sa = NULL;
 
-  /* "PETSc/Vec.pyx":194
+  /* "PETSc/Vec.pyx":195
  *         cdef PetscInt na=0
  *         cdef PetscScalar *sa=NULL
  *         array = iarray_s(array, &na, &sa)             # <<<<<<<<<<<<<<
  *         if size is None: size = (toInt(na), toInt(PETSC_DECIDE))
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_array, (&__pyx_v_na), (&__pyx_v_sa))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_array, (&__pyx_v_na), (&__pyx_v_sa))); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":195
+  /* "PETSc/Vec.pyx":196
  *         cdef PetscScalar *sa=NULL
  *         array = iarray_s(array, &na, &sa)
  *         if size is None: size = (toInt(na), toInt(PETSC_DECIDE))             # <<<<<<<<<<<<<<
@@ -86204,11 +88067,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
   __pyx_t_2 = (__pyx_v_size == Py_None);
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 196, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(PETSC_DECIDE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(PETSC_DECIDE); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 196, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 196, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -86218,21 +88081,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
     __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_size, __pyx_t_5);
     __pyx_t_5 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":196
+  /* "PETSc/Vec.pyx":197
  *         array = iarray_s(array, &na, &sa)
  *         if size is None: size = (toInt(na), toInt(PETSC_DECIDE))
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 197, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_6;
 
-  /* "PETSc/Vec.pyx":197
+  /* "PETSc/Vec.pyx":198
  *         if size is None: size = (toInt(na), toInt(PETSC_DECIDE))
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0             # <<<<<<<<<<<<<<
@@ -86243,25 +88104,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":198
+  /* "PETSc/Vec.pyx":199
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(30, 199, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":199
+  /* "PETSc/Vec.pyx":200
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)             # <<<<<<<<<<<<<<
  *         if bs == PETSC_DECIDE: bs = 1
  *         if na < n:  raise ValueError(
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(30, 200, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":200
+  /* "PETSc/Vec.pyx":201
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1             # <<<<<<<<<<<<<<
@@ -86271,11 +88132,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
   __pyx_t_3 = ((__pyx_v_bs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_bs = 1;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Vec.pyx":201
+  /* "PETSc/Vec.pyx":202
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1
  *         if na < n:  raise ValueError(             # <<<<<<<<<<<<<<
@@ -86285,20 +88144,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
   __pyx_t_3 = ((__pyx_v_na < __pyx_v_n) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Vec.pyx":203
+    /* "PETSc/Vec.pyx":204
  *         if na < n:  raise ValueError(
  *             "array size %d and vector local size %d block size %d" %
  *             (toInt(na), toInt(n), toInt(bs)))             # <<<<<<<<<<<<<<
  *         cdef PetscVec newvec = NULL
  *         if comm_size(ccomm) == 1:
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
@@ -86310,38 +88169,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
     __pyx_t_4 = 0;
     __pyx_t_1 = 0;
 
-    /* "PETSc/Vec.pyx":202
+    /* "PETSc/Vec.pyx":203
  *         if bs == PETSC_DECIDE: bs = 1
  *         if na < n:  raise ValueError(
  *             "array size %d and vector local size %d block size %d" %             # <<<<<<<<<<<<<<
  *             (toInt(na), toInt(n), toInt(bs)))
  *         cdef PetscVec newvec = NULL
  */
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_array_size_d_and_vector_local_si, __pyx_t_8); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_array_size_d_and_vector_local_si, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 203, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/Vec.pyx":201
+    /* "PETSc/Vec.pyx":202
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1
  *         if na < n:  raise ValueError(             # <<<<<<<<<<<<<<
  *             "array size %d and vector local size %d block size %d" %
  *             (toInt(na), toInt(n), toInt(bs)))
  */
-    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 202, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 202, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    {__pyx_filename = __pyx_f[30]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(30, 202, __pyx_L1_error)
   }
 
-  /* "PETSc/Vec.pyx":204
+  /* "PETSc/Vec.pyx":205
  *             "array size %d and vector local size %d block size %d" %
  *             (toInt(na), toInt(n), toInt(bs)))
  *         cdef PetscVec newvec = NULL             # <<<<<<<<<<<<<<
@@ -86350,41 +88209,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
  */
   __pyx_v_newvec = NULL;
 
-  /* "PETSc/Vec.pyx":205
+  /* "PETSc/Vec.pyx":206
  *             (toInt(na), toInt(n), toInt(bs)))
  *         cdef PetscVec newvec = NULL
  *         if comm_size(ccomm) == 1:             # <<<<<<<<<<<<<<
  *             CHKERR( VecCreateSeqWithArray(ccomm,bs,N,sa,&newvec) )
  *         else:
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_comm_size(__pyx_v_ccomm); if (unlikely(__pyx_t_7 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_comm_size(__pyx_v_ccomm); if (unlikely(__pyx_t_7 == -1 && PyErr_Occurred())) __PYX_ERR(30, 206, __pyx_L1_error)
   __pyx_t_3 = ((__pyx_t_7 == 1) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Vec.pyx":206
+    /* "PETSc/Vec.pyx":207
  *         cdef PetscVec newvec = NULL
  *         if comm_size(ccomm) == 1:
  *             CHKERR( VecCreateSeqWithArray(ccomm,bs,N,sa,&newvec) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( VecCreateMPIWithArray(ccomm,bs,n,N,sa,&newvec) )
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateSeqWithArray(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_N, __pyx_v_sa, (&__pyx_v_newvec))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateSeqWithArray(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_N, __pyx_v_sa, (&__pyx_v_newvec))); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(30, 207, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":206
+ *             (toInt(na), toInt(n), toInt(bs)))
+ *         cdef PetscVec newvec = NULL
+ *         if comm_size(ccomm) == 1:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCreateSeqWithArray(ccomm,bs,N,sa,&newvec) )
+ *         else:
+ */
     goto __pyx_L6;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":208
+  /* "PETSc/Vec.pyx":209
  *             CHKERR( VecCreateSeqWithArray(ccomm,bs,N,sa,&newvec) )
  *         else:
  *             CHKERR( VecCreateMPIWithArray(ccomm,bs,n,N,sa,&newvec) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         self.set_attr('__array__', array)
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateMPIWithArray(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_n, __pyx_v_N, __pyx_v_sa, (&__pyx_v_newvec))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateMPIWithArray(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_n, __pyx_v_N, __pyx_v_sa, (&__pyx_v_newvec))); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(30, 209, __pyx_L1_error)
   }
   __pyx_L6:;
 
-  /* "PETSc/Vec.pyx":209
+  /* "PETSc/Vec.pyx":210
  *         else:
  *             CHKERR( VecCreateMPIWithArray(ccomm,bs,n,N,sa,&newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec             # <<<<<<<<<<<<<<
@@ -86394,18 +88261,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vec = __pyx_v_newvec;
 
-  /* "PETSc/Vec.pyx":210
+  /* "PETSc/Vec.pyx":211
  *             CHKERR( VecCreateMPIWithArray(ccomm,bs,n,N,sa,&newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         self.set_attr('__array__', array)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_array_2, __pyx_v_array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__array__"), __pyx_v_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":211
+  /* "PETSc/Vec.pyx":212
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         self.set_attr('__array__', array)
  *         return self             # <<<<<<<<<<<<<<
@@ -86417,7 +88284,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":191
+  /* "PETSc/Vec.pyx":192
  *         return self
  * 
  *     def createWithArray(self, array, size=None, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -86441,7 +88308,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":213
+/* "PETSc/Vec.pyx":214
  *         return self
  * 
  *     def createGhost(self, ghosts, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -86457,9 +88324,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_57createGhost(PyObject *__pyx_v_
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
   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("createGhost (wrapper)", 0);
@@ -86487,7 +88351,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_57createGhost(PyObject *__pyx_v_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createGhost", 0, 2, 4, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createGhost", 0, 2, 4, 1); __PYX_ERR(30, 214, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -86501,7 +88365,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_57createGhost(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGhost") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGhost") < 0)) __PYX_ERR(30, 214, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -86520,7 +88384,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_57createGhost(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createGhost", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createGhost", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 214, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.createGhost", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -86547,23 +88411,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createGhost", 0);
   __Pyx_INCREF(__pyx_v_ghosts);
 
-  /* "PETSc/Vec.pyx":214
+  /* "PETSc/Vec.pyx":215
  * 
  *     def createGhost(self, ghosts, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt ng=0, *ig=NULL
  *         ghosts = iarray_i(ghosts, &ng, &ig)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 215, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":215
+  /* "PETSc/Vec.pyx":216
  *     def createGhost(self, ghosts, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt ng=0, *ig=NULL             # <<<<<<<<<<<<<<
@@ -86573,19 +88434,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
   __pyx_v_ng = 0;
   __pyx_v_ig = NULL;
 
-  /* "PETSc/Vec.pyx":216
+  /* "PETSc/Vec.pyx":217
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt ng=0, *ig=NULL
  *         ghosts = iarray_i(ghosts, &ng, &ig)             # <<<<<<<<<<<<<<
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_ghosts, (&__pyx_v_ng), (&__pyx_v_ig))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_ghosts, (&__pyx_v_ng), (&__pyx_v_ig))); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_ghosts, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":217
+  /* "PETSc/Vec.pyx":218
  *         cdef PetscInt ng=0, *ig=NULL
  *         ghosts = iarray_i(ghosts, &ng, &ig)
  *         cdef PetscInt bs=0, n=0, N=0             # <<<<<<<<<<<<<<
@@ -86596,25 +88457,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":218
+  /* "PETSc/Vec.pyx":219
  *         ghosts = iarray_i(ghosts, &ng, &ig)
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         cdef PetscVec newvec = NULL
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 219, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":219
+  /* "PETSc/Vec.pyx":220
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)             # <<<<<<<<<<<<<<
  *         cdef PetscVec newvec = NULL
  *         if bs == PETSC_DECIDE:
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 220, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":220
+  /* "PETSc/Vec.pyx":221
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         cdef PetscVec newvec = NULL             # <<<<<<<<<<<<<<
@@ -86623,7 +88484,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
  */
   __pyx_v_newvec = NULL;
 
-  /* "PETSc/Vec.pyx":221
+  /* "PETSc/Vec.pyx":222
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         cdef PetscVec newvec = NULL
  *         if bs == PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -86633,30 +88494,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
   __pyx_t_4 = ((__pyx_v_bs == PETSC_DECIDE) != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/Vec.pyx":222
+    /* "PETSc/Vec.pyx":223
  *         cdef PetscVec newvec = NULL
  *         if bs == PETSC_DECIDE:
  *             CHKERR( VecCreateGhost(             # <<<<<<<<<<<<<<
  *                     ccomm, n, N, ng, ig, &newvec) )
  *         else:
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateGhost(__pyx_v_ccomm, __pyx_v_n, __pyx_v_N, __pyx_v_ng, __pyx_v_ig, (&__pyx_v_newvec))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateGhost(__pyx_v_ccomm, __pyx_v_n, __pyx_v_N, __pyx_v_ng, __pyx_v_ig, (&__pyx_v_newvec))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 223, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":222
+ *         Sys_Layout(ccomm, bs, &n, &N)
+ *         cdef PetscVec newvec = NULL
+ *         if bs == PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCreateGhost(
+ *                     ccomm, n, N, ng, ig, &newvec) )
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":225
+  /* "PETSc/Vec.pyx":226
  *                     ccomm, n, N, ng, ig, &newvec) )
  *         else:
  *             CHKERR( VecCreateGhostBlock(             # <<<<<<<<<<<<<<
  *                     ccomm, bs, n, N, ng, ig, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateGhostBlock(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_n, __pyx_v_N, __pyx_v_ng, __pyx_v_ig, (&__pyx_v_newvec))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+
+    /* "PETSc/Vec.pyx":227
+ *         else:
+ *             CHKERR( VecCreateGhostBlock(
+ *                     ccomm, bs, n, N, ng, ig, &newvec) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.vec = newvec
+ *         return self
+ */
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateGhostBlock(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_n, __pyx_v_N, __pyx_v_ng, __pyx_v_ig, (&__pyx_v_newvec))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 226, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":227
+  /* "PETSc/Vec.pyx":228
  *             CHKERR( VecCreateGhostBlock(
  *                     ccomm, bs, n, N, ng, ig, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec             # <<<<<<<<<<<<<<
@@ -86666,7 +88543,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vec = __pyx_v_newvec;
 
-  /* "PETSc/Vec.pyx":228
+  /* "PETSc/Vec.pyx":229
  *                     ccomm, bs, n, N, ng, ig, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self             # <<<<<<<<<<<<<<
@@ -86678,7 +88555,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":213
+  /* "PETSc/Vec.pyx":214
  *         return self
  * 
  *     def createGhost(self, ghosts, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -86698,7 +88575,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":230
+/* "PETSc/Vec.pyx":231
  *         return self
  * 
  *     def createGhostWithArray(self, ghosts, array,             # <<<<<<<<<<<<<<
@@ -86715,9 +88592,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
   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("createGhostWithArray (wrapper)", 0);
@@ -86725,7 +88599,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ghosts,&__pyx_n_s_array,&__pyx_n_s_size,&__pyx_n_s_bsize,&__pyx_n_s_comm,0};
     PyObject* values[5] = {0,0,0,0,0};
 
-    /* "PETSc/Vec.pyx":231
+    /* "PETSc/Vec.pyx":232
  * 
  *     def createGhostWithArray(self, ghosts, array,
  *                              size=None, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -86755,7 +88629,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_array)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createGhostWithArray", 0, 2, 5, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createGhostWithArray", 0, 2, 5, 1); __PYX_ERR(30, 231, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -86774,7 +88648,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGhostWithArray") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGhostWithArray") < 0)) __PYX_ERR(30, 231, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -86795,7 +88669,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createGhostWithArray", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createGhostWithArray", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 231, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.createGhostWithArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -86803,7 +88677,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_ghosts, __pyx_v_array, __pyx_v_size, __pyx_v_bsize, __pyx_v_comm);
 
-  /* "PETSc/Vec.pyx":230
+  /* "PETSc/Vec.pyx":231
  *         return self
  * 
  *     def createGhostWithArray(self, ghosts, array,             # <<<<<<<<<<<<<<
@@ -86840,25 +88714,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createGhostWithArray", 0);
   __Pyx_INCREF(__pyx_v_ghosts);
   __Pyx_INCREF(__pyx_v_array);
   __Pyx_INCREF(__pyx_v_size);
 
-  /* "PETSc/Vec.pyx":232
+  /* "PETSc/Vec.pyx":233
  *     def createGhostWithArray(self, ghosts, array,
  *                              size=None, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt ng=0, *ig=NULL
  *         ghosts = iarray_i(ghosts, &ng, &ig)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 233, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":233
+  /* "PETSc/Vec.pyx":234
  *                              size=None, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt ng=0, *ig=NULL             # <<<<<<<<<<<<<<
@@ -86868,19 +88739,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   __pyx_v_ng = 0;
   __pyx_v_ig = NULL;
 
-  /* "PETSc/Vec.pyx":234
+  /* "PETSc/Vec.pyx":235
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt ng=0, *ig=NULL
  *         ghosts = iarray_i(ghosts, &ng, &ig)             # <<<<<<<<<<<<<<
  *         cdef PetscInt na=0
  *         cdef PetscScalar *sa=NULL
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_ghosts, (&__pyx_v_ng), (&__pyx_v_ig))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_ghosts, (&__pyx_v_ng), (&__pyx_v_ig))); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_ghosts, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":235
+  /* "PETSc/Vec.pyx":236
  *         cdef PetscInt ng=0, *ig=NULL
  *         ghosts = iarray_i(ghosts, &ng, &ig)
  *         cdef PetscInt na=0             # <<<<<<<<<<<<<<
@@ -86889,7 +88760,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
  */
   __pyx_v_na = 0;
 
-  /* "PETSc/Vec.pyx":236
+  /* "PETSc/Vec.pyx":237
  *         ghosts = iarray_i(ghosts, &ng, &ig)
  *         cdef PetscInt na=0
  *         cdef PetscScalar *sa=NULL             # <<<<<<<<<<<<<<
@@ -86898,19 +88769,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
  */
   __pyx_v_sa = NULL;
 
-  /* "PETSc/Vec.pyx":237
+  /* "PETSc/Vec.pyx":238
  *         cdef PetscInt na=0
  *         cdef PetscScalar *sa=NULL
  *         array = oarray_s(array, &na, &sa)             # <<<<<<<<<<<<<<
  *         cdef PetscInt b = 1 if bsize is None else asInt(bsize)
  *         if size is None: size = (toInt(na-ng*b), toInt(PETSC_DECIDE))
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_v_array, (&__pyx_v_na), (&__pyx_v_sa))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_v_array, (&__pyx_v_na), (&__pyx_v_sa))); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 238, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":238
+  /* "PETSc/Vec.pyx":239
  *         cdef PetscScalar *sa=NULL
  *         array = oarray_s(array, &na, &sa)
  *         cdef PetscInt b = 1 if bsize is None else asInt(bsize)             # <<<<<<<<<<<<<<
@@ -86921,12 +88792,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   if ((__pyx_t_4 != 0)) {
     __pyx_t_3 = 1;
   } else {
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_5 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_5 == -1L && PyErr_Occurred())) __PYX_ERR(30, 239, __pyx_L1_error)
     __pyx_t_3 = __pyx_t_5;
   }
   __pyx_v_b = __pyx_t_3;
 
-  /* "PETSc/Vec.pyx":239
+  /* "PETSc/Vec.pyx":240
  *         array = oarray_s(array, &na, &sa)
  *         cdef PetscInt b = 1 if bsize is None else asInt(bsize)
  *         if size is None: size = (toInt(na-ng*b), toInt(PETSC_DECIDE))             # <<<<<<<<<<<<<<
@@ -86936,11 +88807,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   __pyx_t_4 = (__pyx_v_size == Py_None);
   __pyx_t_6 = (__pyx_t_4 != 0);
   if (__pyx_t_6) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_na - (__pyx_v_ng * __pyx_v_b))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_na - (__pyx_v_ng * __pyx_v_b))); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 240, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(PETSC_DECIDE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(PETSC_DECIDE); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 240, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 240, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
@@ -86950,11 +88821,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
     __pyx_t_7 = 0;
     __Pyx_DECREF_SET(__pyx_v_size, __pyx_t_8);
     __pyx_t_8 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":240
+  /* "PETSc/Vec.pyx":241
  *         cdef PetscInt b = 1 if bsize is None else asInt(bsize)
  *         if size is None: size = (toInt(na-ng*b), toInt(PETSC_DECIDE))
  *         cdef PetscInt bs=0, n=0, N=0             # <<<<<<<<<<<<<<
@@ -86965,25 +88834,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":241
+  /* "PETSc/Vec.pyx":242
  *         if size is None: size = (toInt(na-ng*b), toInt(PETSC_DECIDE))
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if na < (n+ng*b): raise ValueError(
  */
-  __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(30, 242, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":242
+  /* "PETSc/Vec.pyx":243
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)             # <<<<<<<<<<<<<<
  *         if na < (n+ng*b): raise ValueError(
  *             "ghosts size %d, array size %d, and "
  */
-  __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(30, 243, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":243
+  /* "PETSc/Vec.pyx":244
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if na < (n+ng*b): raise ValueError(             # <<<<<<<<<<<<<<
@@ -86993,22 +88862,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   __pyx_t_6 = ((__pyx_v_na < (__pyx_v_n + (__pyx_v_ng * __pyx_v_b))) != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/Vec.pyx":246
+    /* "PETSc/Vec.pyx":247
  *             "ghosts size %d, array size %d, and "
  *             "vector local size %d block size %d" %
  *             (toInt(ng), toInt(na), toInt(n), toInt(b)))             # <<<<<<<<<<<<<<
  *         cdef PetscVec newvec = NULL
  *         if bs == PETSC_DECIDE:
  */
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ng); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ng); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 247, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 247, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 247, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_b); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_b); if (unlikely(!__pyx_t_10)) __PYX_ERR(30, 247, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
-    __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(30, 247, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
@@ -87023,38 +88892,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
     __pyx_t_2 = 0;
     __pyx_t_10 = 0;
 
-    /* "PETSc/Vec.pyx":245
+    /* "PETSc/Vec.pyx":246
  *         if na < (n+ng*b): raise ValueError(
  *             "ghosts size %d, array size %d, and "
  *             "vector local size %d block size %d" %             # <<<<<<<<<<<<<<
  *             (toInt(ng), toInt(na), toInt(n), toInt(b)))
  *         cdef PetscVec newvec = NULL
  */
-    __pyx_t_10 = __Pyx_PyString_Format(__pyx_kp_s_ghosts_size_d_array_size_d_and_v, __pyx_t_11); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = __Pyx_PyString_Format(__pyx_kp_s_ghosts_size_d_array_size_d_and_v, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(30, 246, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 
-    /* "PETSc/Vec.pyx":243
+    /* "PETSc/Vec.pyx":244
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         if na < (n+ng*b): raise ValueError(             # <<<<<<<<<<<<<<
  *             "ghosts size %d, array size %d, and "
  *             "vector local size %d block size %d" %
  */
-    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(30, 244, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __Pyx_GIVEREF(__pyx_t_10);
     PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10);
     __pyx_t_10 = 0;
-    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(30, 244, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_Raise(__pyx_t_10, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-    {__pyx_filename = __pyx_f[30]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(30, 244, __pyx_L1_error)
   }
 
-  /* "PETSc/Vec.pyx":247
+  /* "PETSc/Vec.pyx":248
  *             "vector local size %d block size %d" %
  *             (toInt(ng), toInt(na), toInt(n), toInt(b)))
  *         cdef PetscVec newvec = NULL             # <<<<<<<<<<<<<<
@@ -87063,7 +88932,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
  */
   __pyx_v_newvec = NULL;
 
-  /* "PETSc/Vec.pyx":248
+  /* "PETSc/Vec.pyx":249
  *             (toInt(ng), toInt(na), toInt(n), toInt(b)))
  *         cdef PetscVec newvec = NULL
  *         if bs == PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -87073,30 +88942,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   __pyx_t_6 = ((__pyx_v_bs == PETSC_DECIDE) != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/Vec.pyx":249
+    /* "PETSc/Vec.pyx":250
  *         cdef PetscVec newvec = NULL
  *         if bs == PETSC_DECIDE:
  *             CHKERR( VecCreateGhostWithArray(             # <<<<<<<<<<<<<<
  *                     ccomm, n, N, ng, ig, sa, &newvec) )
  *         else:
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateGhostWithArray(__pyx_v_ccomm, __pyx_v_n, __pyx_v_N, __pyx_v_ng, __pyx_v_ig, __pyx_v_sa, (&__pyx_v_newvec))); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateGhostWithArray(__pyx_v_ccomm, __pyx_v_n, __pyx_v_N, __pyx_v_ng, __pyx_v_ig, __pyx_v_sa, (&__pyx_v_newvec))); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(30, 250, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":249
+ *             (toInt(ng), toInt(na), toInt(n), toInt(b)))
+ *         cdef PetscVec newvec = NULL
+ *         if bs == PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCreateGhostWithArray(
+ *                     ccomm, n, N, ng, ig, sa, &newvec) )
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":252
+  /* "PETSc/Vec.pyx":253
  *                     ccomm, n, N, ng, ig, sa, &newvec) )
  *         else:
  *             CHKERR( VecCreateGhostBlockWithArray(             # <<<<<<<<<<<<<<
  *                     ccomm, bs, n, N, ng, ig, sa, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateGhostBlockWithArray(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_n, __pyx_v_N, __pyx_v_ng, __pyx_v_ig, __pyx_v_sa, (&__pyx_v_newvec))); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+
+    /* "PETSc/Vec.pyx":254
+ *         else:
+ *             CHKERR( VecCreateGhostBlockWithArray(
+ *                     ccomm, bs, n, N, ng, ig, sa, &newvec) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.vec = newvec
+ *         self.set_attr('__array__', array)
+ */
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateGhostBlockWithArray(__pyx_v_ccomm, __pyx_v_bs, __pyx_v_n, __pyx_v_N, __pyx_v_ng, __pyx_v_ig, __pyx_v_sa, (&__pyx_v_newvec))); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(30, 253, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/Vec.pyx":254
+  /* "PETSc/Vec.pyx":255
  *             CHKERR( VecCreateGhostBlockWithArray(
  *                     ccomm, bs, n, N, ng, ig, sa, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec             # <<<<<<<<<<<<<<
@@ -87106,18 +88991,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vec = __pyx_v_newvec;
 
-  /* "PETSc/Vec.pyx":255
+  /* "PETSc/Vec.pyx":256
  *                     ccomm, bs, n, N, ng, ig, sa, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         self.set_attr('__array__', array)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_10 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_array_2, __pyx_v_array); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__array__"), __pyx_v_array); if (unlikely(!__pyx_t_10)) __PYX_ERR(30, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-  /* "PETSc/Vec.pyx":256
+  /* "PETSc/Vec.pyx":257
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         self.set_attr('__array__', array)
  *         return self             # <<<<<<<<<<<<<<
@@ -87129,7 +89014,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":230
+  /* "PETSc/Vec.pyx":231
  *         return self
  * 
  *     def createGhostWithArray(self, ghosts, array,             # <<<<<<<<<<<<<<
@@ -87155,7 +89040,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":258
+/* "PETSc/Vec.pyx":259
  *         return self
  * 
  *     def createShared(self, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -87170,9 +89055,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_61createShared(PyObject *__pyx_v
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
   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("createShared (wrapper)", 0);
@@ -87208,7 +89090,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_61createShared(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createShared") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createShared") < 0)) __PYX_ERR(30, 259, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -87225,7 +89107,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_61createShared(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createShared", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createShared", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 259, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.createShared", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -87249,22 +89131,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createShared", 0);
 
-  /* "PETSc/Vec.pyx":259
+  /* "PETSc/Vec.pyx":260
  * 
  *     def createShared(self, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 260, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":260
+  /* "PETSc/Vec.pyx":261
  *     def createShared(self, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0             # <<<<<<<<<<<<<<
@@ -87275,25 +89154,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":261
+  /* "PETSc/Vec.pyx":262
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         cdef PetscVec newvec = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Vec_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_bs), (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 262, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":262
+  /* "PETSc/Vec.pyx":263
  *         cdef PetscInt bs=0, n=0, N=0
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)             # <<<<<<<<<<<<<<
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreateShared(ccomm, n, N, &newvec) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_bs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 263, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":263
+  /* "PETSc/Vec.pyx":264
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         cdef PetscVec newvec = NULL             # <<<<<<<<<<<<<<
@@ -87302,16 +89181,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
  */
   __pyx_v_newvec = NULL;
 
-  /* "PETSc/Vec.pyx":264
+  /* "PETSc/Vec.pyx":265
  *         Sys_Layout(ccomm, bs, &n, &N)
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreateShared(ccomm, n, N, &newvec) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         if bs != PETSC_DECIDE:
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateShared(__pyx_v_ccomm, __pyx_v_n, __pyx_v_N, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateShared(__pyx_v_ccomm, __pyx_v_n, __pyx_v_N, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 265, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":265
+  /* "PETSc/Vec.pyx":266
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreateShared(ccomm, n, N, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec             # <<<<<<<<<<<<<<
@@ -87321,7 +89200,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vec = __pyx_v_newvec;
 
-  /* "PETSc/Vec.pyx":266
+  /* "PETSc/Vec.pyx":267
  *         CHKERR( VecCreateShared(ccomm, n, N, &newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         if bs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -87331,19 +89210,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
   __pyx_t_3 = ((__pyx_v_bs != PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Vec.pyx":267
+    /* "PETSc/Vec.pyx":268
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         if bs != PETSC_DECIDE:
  *             CHKERR( VecSetBlockSize(self.vec, bs) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 268, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":267
+ *         CHKERR( VecCreateShared(ccomm, n, N, &newvec) )
+ *         PetscCLEAR(self.obj); self.vec = newvec
+ *         if bs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecSetBlockSize(self.vec, bs) )
+ *         return self
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":268
+  /* "PETSc/Vec.pyx":269
  *         if bs != PETSC_DECIDE:
  *             CHKERR( VecSetBlockSize(self.vec, bs) )
  *         return self             # <<<<<<<<<<<<<<
@@ -87355,7 +89240,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":258
+  /* "PETSc/Vec.pyx":259
  *         return self
  * 
  *     def createShared(self, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -87373,7 +89258,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":270
+/* "PETSc/Vec.pyx":271
  *         return self
  * 
  *     def createNest(self, vecs, isets=None, comm=None):             # <<<<<<<<<<<<<<
@@ -87388,9 +89273,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_63createNest(PyObject *__pyx_v_s
   PyObject *__pyx_v_vecs = 0;
   PyObject *__pyx_v_isets = 0;
   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("createNest (wrapper)", 0);
@@ -87426,7 +89308,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_63createNest(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createNest") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createNest") < 0)) __PYX_ERR(30, 271, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -87443,7 +89325,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_63createNest(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createNest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createNest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 271, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.createNest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -87478,48 +89360,45 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
   int __pyx_t_8;
   IS __pyx_t_9;
   int __pyx_t_10;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createNest", 0);
   __Pyx_INCREF(__pyx_v_vecs);
   __Pyx_INCREF(__pyx_v_isets);
 
-  /* "PETSc/Vec.pyx":271
+  /* "PETSc/Vec.pyx":272
  * 
  *     def createNest(self, vecs, isets=None, comm=None):
  *         vecs = list(vecs)             # <<<<<<<<<<<<<<
  *         if isets:
  *             isets = list(isets)
  */
-  __pyx_t_1 = PySequence_List(__pyx_v_vecs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_List(__pyx_v_vecs); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 272, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_vecs, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":272
+  /* "PETSc/Vec.pyx":273
  *     def createNest(self, vecs, isets=None, comm=None):
  *         vecs = list(vecs)
  *         if isets:             # <<<<<<<<<<<<<<
  *             isets = list(isets)
  *             assert len(isets) == len(vecs)
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_isets); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_isets); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(30, 273, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "PETSc/Vec.pyx":273
+    /* "PETSc/Vec.pyx":274
  *         vecs = list(vecs)
  *         if isets:
  *             isets = list(isets)             # <<<<<<<<<<<<<<
  *             assert len(isets) == len(vecs)
  *         else:
  */
-    __pyx_t_1 = PySequence_List(__pyx_v_isets); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_List(__pyx_v_isets); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 274, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_isets, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/Vec.pyx":274
+    /* "PETSc/Vec.pyx":275
  *         if isets:
  *             isets = list(isets)
  *             assert len(isets) == len(vecs)             # <<<<<<<<<<<<<<
@@ -87528,51 +89407,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  */
     #ifndef CYTHON_WITHOUT_ASSERTIONS
     if (unlikely(!Py_OptimizeFlag)) {
-      __pyx_t_3 = PyObject_Length(__pyx_v_isets); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_Length(__pyx_v_isets); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 275, __pyx_L1_error)
+      __pyx_t_4 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 275, __pyx_L1_error)
       if (unlikely(!((__pyx_t_3 == __pyx_t_4) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[30]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(30, 275, __pyx_L1_error)
       }
     }
     #endif
+
+    /* "PETSc/Vec.pyx":273
+ *     def createNest(self, vecs, isets=None, comm=None):
+ *         vecs = list(vecs)
+ *         if isets:             # <<<<<<<<<<<<<<
+ *             isets = list(isets)
+ *             assert len(isets) == len(vecs)
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":276
+  /* "PETSc/Vec.pyx":277
  *             assert len(isets) == len(vecs)
  *         else:
  *             isets = None             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Py_ssize_t i, m = len(vecs)
  */
+  /*else*/ {
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_isets, Py_None);
   }
   __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":277
+  /* "PETSc/Vec.pyx":278
  *         else:
  *             isets = None
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef Py_ssize_t i, m = len(vecs)
  *         cdef PetscInt n = <PetscInt>m
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 278, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_5;
 
-  /* "PETSc/Vec.pyx":278
+  /* "PETSc/Vec.pyx":279
  *             isets = None
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Py_ssize_t i, m = len(vecs)             # <<<<<<<<<<<<<<
  *         cdef PetscInt n = <PetscInt>m
  *         cdef PetscVec *cvecs  = NULL
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 279, __pyx_L1_error)
   __pyx_v_m = __pyx_t_4;
 
-  /* "PETSc/Vec.pyx":279
+  /* "PETSc/Vec.pyx":280
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Py_ssize_t i, m = len(vecs)
  *         cdef PetscInt n = <PetscInt>m             # <<<<<<<<<<<<<<
@@ -87581,7 +89468,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  */
   __pyx_v_n = ((PetscInt)__pyx_v_m);
 
-  /* "PETSc/Vec.pyx":280
+  /* "PETSc/Vec.pyx":281
  *         cdef Py_ssize_t i, m = len(vecs)
  *         cdef PetscInt n = <PetscInt>m
  *         cdef PetscVec *cvecs  = NULL             # <<<<<<<<<<<<<<
@@ -87590,7 +89477,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  */
   __pyx_v_cvecs = NULL;
 
-  /* "PETSc/Vec.pyx":281
+  /* "PETSc/Vec.pyx":282
  *         cdef PetscInt n = <PetscInt>m
  *         cdef PetscVec *cvecs  = NULL
  *         cdef PetscIS  *cisets = NULL             # <<<<<<<<<<<<<<
@@ -87599,22 +89486,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  */
   __pyx_v_cisets = NULL;
 
-  /* "PETSc/Vec.pyx":283
+  /* "PETSc/Vec.pyx":284
  *         cdef PetscIS  *cisets = NULL
  *         cdef object tmp1, tmp2
  *         tmp1 = oarray_p(empty_p(n), NULL, <void**>&cvecs)             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < m: cvecs[i] = (<Vec?>vecs[i]).vec
  *         if isets is not None:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 284, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_1, NULL, ((void **)(&__pyx_v_cvecs)))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_1, NULL, ((void **)(&__pyx_v_cvecs)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 284, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_tmp1 = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/Vec.pyx":284
+  /* "PETSc/Vec.pyx":285
  *         cdef object tmp1, tmp2
  *         tmp1 = oarray_p(empty_p(n), NULL, <void**>&cvecs)
  *         for i from 0 <= i < m: cvecs[i] = (<Vec?>vecs[i]).vec             # <<<<<<<<<<<<<<
@@ -87623,15 +89510,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  */
   __pyx_t_4 = __pyx_v_m;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
-    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_vecs, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_vecs, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 285, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(30, 285, __pyx_L1_error)
     __pyx_t_7 = ((struct PyPetscVecObject *)__pyx_t_6)->vec;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     (__pyx_v_cvecs[__pyx_v_i]) = __pyx_t_7;
   }
 
-  /* "PETSc/Vec.pyx":285
+  /* "PETSc/Vec.pyx":286
  *         tmp1 = oarray_p(empty_p(n), NULL, <void**>&cvecs)
  *         for i from 0 <= i < m: cvecs[i] = (<Vec?>vecs[i]).vec
  *         if isets is not None:             # <<<<<<<<<<<<<<
@@ -87642,22 +89529,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
   __pyx_t_8 = (__pyx_t_2 != 0);
   if (__pyx_t_8) {
 
-    /* "PETSc/Vec.pyx":286
+    /* "PETSc/Vec.pyx":287
  *         for i from 0 <= i < m: cvecs[i] = (<Vec?>vecs[i]).vec
  *         if isets is not None:
  *             tmp2 = oarray_p(empty_p(n), NULL, <void**>&cisets)             # <<<<<<<<<<<<<<
  *             for i from 0 <= i < m: cisets[i] = (<IS?>isets[i]).iset
  *         cdef PetscVec newvec = NULL
  */
-    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 287, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_6, NULL, ((void **)(&__pyx_v_cisets)))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_6, NULL, ((void **)(&__pyx_v_cisets)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 287, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_tmp2 = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "PETSc/Vec.pyx":287
+    /* "PETSc/Vec.pyx":288
  *         if isets is not None:
  *             tmp2 = oarray_p(empty_p(n), NULL, <void**>&cisets)
  *             for i from 0 <= i < m: cisets[i] = (<IS?>isets[i]).iset             # <<<<<<<<<<<<<<
@@ -87666,18 +89553,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  */
     __pyx_t_4 = __pyx_v_m;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
-      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_isets, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_isets, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 288, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(30, 288, __pyx_L1_error)
       __pyx_t_9 = ((struct PyPetscISObject *)__pyx_t_1)->iset;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       (__pyx_v_cisets[__pyx_v_i]) = __pyx_t_9;
     }
-    goto __pyx_L6;
+
+    /* "PETSc/Vec.pyx":286
+ *         tmp1 = oarray_p(empty_p(n), NULL, <void**>&cvecs)
+ *         for i from 0 <= i < m: cvecs[i] = (<Vec?>vecs[i]).vec
+ *         if isets is not None:             # <<<<<<<<<<<<<<
+ *             tmp2 = oarray_p(empty_p(n), NULL, <void**>&cisets)
+ *             for i from 0 <= i < m: cisets[i] = (<IS?>isets[i]).iset
+ */
   }
-  __pyx_L6:;
 
-  /* "PETSc/Vec.pyx":288
+  /* "PETSc/Vec.pyx":289
  *             tmp2 = oarray_p(empty_p(n), NULL, <void**>&cisets)
  *             for i from 0 <= i < m: cisets[i] = (<IS?>isets[i]).iset
  *         cdef PetscVec newvec = NULL             # <<<<<<<<<<<<<<
@@ -87686,16 +89579,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  */
   __pyx_v_newvec = NULL;
 
-  /* "PETSc/Vec.pyx":289
+  /* "PETSc/Vec.pyx":290
  *             for i from 0 <= i < m: cisets[i] = (<IS?>isets[i]).iset
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreateNest(ccomm, n, cisets, cvecs,&newvec) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self
  */
-  __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateNest(__pyx_v_ccomm, __pyx_v_n, __pyx_v_cisets, __pyx_v_cvecs, (&__pyx_v_newvec))); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreateNest(__pyx_v_ccomm, __pyx_v_n, __pyx_v_cisets, __pyx_v_cvecs, (&__pyx_v_newvec))); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(30, 290, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":290
+  /* "PETSc/Vec.pyx":291
  *         cdef PetscVec newvec = NULL
  *         CHKERR( VecCreateNest(ccomm, n, cisets, cvecs,&newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec             # <<<<<<<<<<<<<<
@@ -87705,7 +89598,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vec = __pyx_v_newvec;
 
-  /* "PETSc/Vec.pyx":291
+  /* "PETSc/Vec.pyx":292
  *         CHKERR( VecCreateNest(ccomm, n, cisets, cvecs,&newvec) )
  *         PetscCLEAR(self.obj); self.vec = newvec
  *         return self             # <<<<<<<<<<<<<<
@@ -87717,7 +89610,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":270
+  /* "PETSc/Vec.pyx":271
  *         return self
  * 
  *     def createNest(self, vecs, isets=None, comm=None):             # <<<<<<<<<<<<<<
@@ -87741,7 +89634,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":295
+/* "PETSc/Vec.pyx":296
  *     #
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -87754,9 +89647,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_65setOptionsPrefix(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_64setOptionsPrefix[] = "Vec.setOptionsPrefix(self, prefix)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_65setOptionsPrefix(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);
@@ -87778,7 +89668,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_65setOptionsPrefix(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[30]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(30, 296, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -87789,7 +89679,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_65setOptionsPrefix(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[30]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 296, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -87808,13 +89698,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_64setOptionsPrefix(struct PyPets
   __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);
 
-  /* "PETSc/Vec.pyx":296
+  /* "PETSc/Vec.pyx":297
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -87823,28 +89710,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_64setOptionsPrefix(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Vec.pyx":297
+  /* "PETSc/Vec.pyx":298
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetOptionsPrefix(self.vec, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 298, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":298
+  /* "PETSc/Vec.pyx":299
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
  *         CHKERR( VecSetOptionsPrefix(self.vec, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetOptionsPrefix(__pyx_v_self->vec, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetOptionsPrefix(__pyx_v_self->vec, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 299, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":295
+  /* "PETSc/Vec.pyx":296
  *     #
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -87866,7 +89753,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_64setOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":300
+/* "PETSc/Vec.pyx":301
  *         CHKERR( VecSetOptionsPrefix(self.vec, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -87897,12 +89784,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_66getOptionsPrefix(struct PyPets
   __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);
 
-  /* "PETSc/Vec.pyx":301
+  /* "PETSc/Vec.pyx":302
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -87911,16 +89795,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_66getOptionsPrefix(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Vec.pyx":302
+  /* "PETSc/Vec.pyx":303
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( VecGetOptionsPrefix(self.vec, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetOptionsPrefix(__pyx_v_self->vec, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetOptionsPrefix(__pyx_v_self->vec, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 303, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":303
+  /* "PETSc/Vec.pyx":304
  *         cdef const_char *cval = NULL
  *         CHKERR( VecGetOptionsPrefix(self.vec, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -87928,13 +89812,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_66getOptionsPrefix(struct PyPets
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 304, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":300
+  /* "PETSc/Vec.pyx":301
  *         CHKERR( VecSetOptionsPrefix(self.vec, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -87953,7 +89837,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_66getOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":305
+/* "PETSc/Vec.pyx":306
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -87982,21 +89866,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_68setFromOptions(struct PyPetscV
   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);
 
-  /* "PETSc/Vec.pyx":306
+  /* "PETSc/Vec.pyx":307
  * 
  *     def setFromOptions(self):
  *         CHKERR( VecSetFromOptions(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def setUp(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetFromOptions(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetFromOptions(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 307, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":305
+  /* "PETSc/Vec.pyx":306
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -88016,7 +89897,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_68setFromOptions(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":308
+/* "PETSc/Vec.pyx":309
  *         CHKERR( VecSetFromOptions(self.vec) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -88045,21 +89926,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_70setUp(struct PyPetscVecObject
   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);
 
-  /* "PETSc/Vec.pyx":309
+  /* "PETSc/Vec.pyx":310
  * 
  *     def setUp(self):
  *         CHKERR( VecSetUp(self.vec) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetUp(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetUp(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 310, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":310
+  /* "PETSc/Vec.pyx":311
  *     def setUp(self):
  *         CHKERR( VecSetUp(self.vec) )
  *         return self             # <<<<<<<<<<<<<<
@@ -88071,7 +89949,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_70setUp(struct PyPetscVecObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":308
+  /* "PETSc/Vec.pyx":309
  *         CHKERR( VecSetFromOptions(self.vec) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -88089,7 +89967,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_70setUp(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":312
+/* "PETSc/Vec.pyx":313
  *         return self
  * 
  *     def setOption(self, option, flag):             # <<<<<<<<<<<<<<
@@ -88103,9 +89981,6 @@ static char __pyx_doc_8petsc4py_5PETSc_3Vec_72setOption[] = "Vec.setOption(self,
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_73setOption(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_option = 0;
   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("setOption (wrapper)", 0);
@@ -88129,11 +90004,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_73setOption(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setOption", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setOption", 1, 2, 2, 1); __PYX_ERR(30, 313, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOption") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOption") < 0)) __PYX_ERR(30, 313, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -88146,7 +90021,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_73setOption(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOption", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOption", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 313, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setOption", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -88165,23 +90040,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_72setOption(struct PyPetscVecObj
   VecOption __pyx_t_1;
   PetscBool __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setOption", 0);
 
-  /* "PETSc/Vec.pyx":313
+  /* "PETSc/Vec.pyx":314
  * 
  *     def setOption(self, option, flag):
  *         CHKERR( VecSetOption(self.vec, option, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_1 = ((VecOption)PyInt_AsLong(__pyx_v_option)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetOption(__pyx_v_self->vec, __pyx_t_1, __pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((VecOption)__Pyx_PyInt_As_VecOption(__pyx_v_option)); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 314, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 314, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetOption(__pyx_v_self->vec, __pyx_t_1, __pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 314, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":312
+  /* "PETSc/Vec.pyx":313
  *         return self
  * 
  *     def setOption(self, option, flag):             # <<<<<<<<<<<<<<
@@ -88201,7 +90073,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_72setOption(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":315
+/* "PETSc/Vec.pyx":316
  *         CHKERR( VecSetOption(self.vec, option, flag) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -88232,12 +90104,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_74getType(struct PyPetscVecObjec
   __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);
 
-  /* "PETSc/Vec.pyx":316
+  /* "PETSc/Vec.pyx":317
  * 
  *     def getType(self):
  *         cdef PetscVecType cval = NULL             # <<<<<<<<<<<<<<
@@ -88246,16 +90115,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_74getType(struct PyPetscVecObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Vec.pyx":317
+  /* "PETSc/Vec.pyx":318
  *     def getType(self):
  *         cdef PetscVecType cval = NULL
  *         CHKERR( VecGetType(self.vec, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetType(__pyx_v_self->vec, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetType(__pyx_v_self->vec, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 318, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":318
+  /* "PETSc/Vec.pyx":319
  *         cdef PetscVecType cval = NULL
  *         CHKERR( VecGetType(self.vec, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -88263,13 +90132,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_74getType(struct PyPetscVecObjec
  *     def getSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 319, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":315
+  /* "PETSc/Vec.pyx":316
  *         CHKERR( VecSetOption(self.vec, option, flag) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -88288,7 +90157,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_74getType(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":320
+/* "PETSc/Vec.pyx":321
  *         return bytes2str(cval)
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -88319,12 +90188,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_76getSize(struct PyPetscVecObjec
   __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("getSize", 0);
 
-  /* "PETSc/Vec.pyx":321
+  /* "PETSc/Vec.pyx":322
  * 
  *     def getSize(self):
  *         cdef PetscInt N = 0             # <<<<<<<<<<<<<<
@@ -88333,16 +90199,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_76getSize(struct PyPetscVecObjec
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":322
+  /* "PETSc/Vec.pyx":323
  *     def getSize(self):
  *         cdef PetscInt N = 0
  *         CHKERR( VecGetSize(self.vec, &N) )             # <<<<<<<<<<<<<<
  *         return toInt(N)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 323, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":323
+  /* "PETSc/Vec.pyx":324
  *         cdef PetscInt N = 0
  *         CHKERR( VecGetSize(self.vec, &N) )
  *         return toInt(N)             # <<<<<<<<<<<<<<
@@ -88350,13 +90216,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_76getSize(struct PyPetscVecObjec
  *     def getLocalSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 324, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":320
+  /* "PETSc/Vec.pyx":321
  *         return bytes2str(cval)
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -88375,7 +90241,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_76getSize(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":325
+/* "PETSc/Vec.pyx":326
  *         return toInt(N)
  * 
  *     def getLocalSize(self):             # <<<<<<<<<<<<<<
@@ -88406,12 +90272,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_78getLocalSize(struct PyPetscVec
   __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("getLocalSize", 0);
 
-  /* "PETSc/Vec.pyx":326
+  /* "PETSc/Vec.pyx":327
  * 
  *     def getLocalSize(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -88420,16 +90283,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_78getLocalSize(struct PyPetscVec
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/Vec.pyx":327
+  /* "PETSc/Vec.pyx":328
  *     def getLocalSize(self):
  *         cdef PetscInt n = 0
  *         CHKERR( VecGetLocalSize(self.vec, &n) )             # <<<<<<<<<<<<<<
  *         return toInt(n)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 328, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":328
+  /* "PETSc/Vec.pyx":329
  *         cdef PetscInt n = 0
  *         CHKERR( VecGetLocalSize(self.vec, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -88437,13 +90300,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_78getLocalSize(struct PyPetscVec
  *     def getSizes(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":325
+  /* "PETSc/Vec.pyx":326
  *         return toInt(N)
  * 
  *     def getLocalSize(self):             # <<<<<<<<<<<<<<
@@ -88462,7 +90325,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_78getLocalSize(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":330
+/* "PETSc/Vec.pyx":331
  *         return toInt(n)
  * 
  *     def getSizes(self):             # <<<<<<<<<<<<<<
@@ -88496,12 +90359,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObje
   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("getSizes", 0);
 
-  /* "PETSc/Vec.pyx":331
+  /* "PETSc/Vec.pyx":332
  * 
  *     def getSizes(self):
  *         cdef PetscInt n = 0, N = 0             # <<<<<<<<<<<<<<
@@ -88511,25 +90371,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObje
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":332
+  /* "PETSc/Vec.pyx":333
  *     def getSizes(self):
  *         cdef PetscInt n = 0, N = 0
  *         CHKERR( VecGetLocalSize(self.vec, &n) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecGetSize(self.vec, &N) )
  *         return (toInt(n), toInt(N))
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 333, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":333
+  /* "PETSc/Vec.pyx":334
  *         cdef PetscInt n = 0, N = 0
  *         CHKERR( VecGetLocalSize(self.vec, &n) )
  *         CHKERR( VecGetSize(self.vec, &N) )             # <<<<<<<<<<<<<<
  *         return (toInt(n), toInt(N))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 334, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":334
+  /* "PETSc/Vec.pyx":335
  *         CHKERR( VecGetLocalSize(self.vec, &n) )
  *         CHKERR( VecGetSize(self.vec, &N) )
  *         return (toInt(n), toInt(N))             # <<<<<<<<<<<<<<
@@ -88537,11 +90397,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObje
  *     def setBlockSize(self, bsize):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -88553,7 +90413,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObje
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":330
+  /* "PETSc/Vec.pyx":331
  *         return toInt(n)
  * 
  *     def getSizes(self):             # <<<<<<<<<<<<<<
@@ -88574,7 +90434,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":336
+/* "PETSc/Vec.pyx":337
  *         return (toInt(n), toInt(N))
  * 
  *     def setBlockSize(self, bsize):             # <<<<<<<<<<<<<<
@@ -88587,9 +90447,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_83setBlockSize(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_82setBlockSize[] = "Vec.setBlockSize(self, bsize)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_83setBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_bsize = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setBlockSize (wrapper)", 0);
@@ -88611,7 +90468,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_83setBlockSize(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, "setBlockSize") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockSize") < 0)) __PYX_ERR(30, 337, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -88622,7 +90479,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_83setBlockSize(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBlockSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBlockSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 337, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setBlockSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -88641,31 +90498,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_82setBlockSize(struct PyPetscVec
   __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("setBlockSize", 0);
 
-  /* "PETSc/Vec.pyx":337
+  /* "PETSc/Vec.pyx":338
  * 
  *     def setBlockSize(self, bsize):
  *         cdef PetscInt bs = asInt(bsize)             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetBlockSize(self.vec, bs) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 338, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":338
+  /* "PETSc/Vec.pyx":339
  *     def setBlockSize(self, bsize):
  *         cdef PetscInt bs = asInt(bsize)
  *         CHKERR( VecSetBlockSize(self.vec, bs) )             # <<<<<<<<<<<<<<
  * 
  *     def getBlockSize(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 339, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":336
+  /* "PETSc/Vec.pyx":337
  *         return (toInt(n), toInt(N))
  * 
  *     def setBlockSize(self, bsize):             # <<<<<<<<<<<<<<
@@ -88685,7 +90539,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_82setBlockSize(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":340
+/* "PETSc/Vec.pyx":341
  *         CHKERR( VecSetBlockSize(self.vec, bs) )
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -88716,12 +90570,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_84getBlockSize(struct PyPetscVec
   __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("getBlockSize", 0);
 
-  /* "PETSc/Vec.pyx":341
+  /* "PETSc/Vec.pyx":342
  * 
  *     def getBlockSize(self):
  *         cdef PetscInt bs=0             # <<<<<<<<<<<<<<
@@ -88730,16 +90581,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_84getBlockSize(struct PyPetscVec
  */
   __pyx_v_bs = 0;
 
-  /* "PETSc/Vec.pyx":342
+  /* "PETSc/Vec.pyx":343
  *     def getBlockSize(self):
  *         cdef PetscInt bs=0
  *         CHKERR( VecGetBlockSize(self.vec, &bs) )             # <<<<<<<<<<<<<<
  *         return toInt(bs)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetBlockSize(__pyx_v_self->vec, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetBlockSize(__pyx_v_self->vec, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 343, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":343
+  /* "PETSc/Vec.pyx":344
  *         cdef PetscInt bs=0
  *         CHKERR( VecGetBlockSize(self.vec, &bs) )
  *         return toInt(bs)             # <<<<<<<<<<<<<<
@@ -88747,13 +90598,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_84getBlockSize(struct PyPetscVec
  *     def getOwnershipRange(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":340
+  /* "PETSc/Vec.pyx":341
  *         CHKERR( VecSetBlockSize(self.vec, bs) )
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -88772,7 +90623,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_84getBlockSize(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":345
+/* "PETSc/Vec.pyx":346
  *         return toInt(bs)
  * 
  *     def getOwnershipRange(self):             # <<<<<<<<<<<<<<
@@ -88806,12 +90657,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_86getOwnershipRange(struct PyPet
   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("getOwnershipRange", 0);
 
-  /* "PETSc/Vec.pyx":346
+  /* "PETSc/Vec.pyx":347
  * 
  *     def getOwnershipRange(self):
  *         cdef PetscInt low=0, high=0             # <<<<<<<<<<<<<<
@@ -88821,16 +90669,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_86getOwnershipRange(struct PyPet
   __pyx_v_low = 0;
   __pyx_v_high = 0;
 
-  /* "PETSc/Vec.pyx":347
+  /* "PETSc/Vec.pyx":348
  *     def getOwnershipRange(self):
  *         cdef PetscInt low=0, high=0
  *         CHKERR( VecGetOwnershipRange(self.vec, &low, &high) )             # <<<<<<<<<<<<<<
  *         return (toInt(low), toInt(high))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetOwnershipRange(__pyx_v_self->vec, (&__pyx_v_low), (&__pyx_v_high))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetOwnershipRange(__pyx_v_self->vec, (&__pyx_v_low), (&__pyx_v_high))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 348, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":348
+  /* "PETSc/Vec.pyx":349
  *         cdef PetscInt low=0, high=0
  *         CHKERR( VecGetOwnershipRange(self.vec, &low, &high) )
  *         return (toInt(low), toInt(high))             # <<<<<<<<<<<<<<
@@ -88838,11 +90686,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_86getOwnershipRange(struct PyPet
  *     def getOwnershipRanges(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_low); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_low); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_high); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_high); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -88854,7 +90702,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_86getOwnershipRange(struct PyPet
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":345
+  /* "PETSc/Vec.pyx":346
  *         return toInt(bs)
  * 
  *     def getOwnershipRange(self):             # <<<<<<<<<<<<<<
@@ -88875,7 +90723,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_86getOwnershipRange(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":350
+/* "PETSc/Vec.pyx":351
  *         return (toInt(low), toInt(high))
  * 
  *     def getOwnershipRanges(self):             # <<<<<<<<<<<<<<
@@ -88908,12 +90756,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
   __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("getOwnershipRanges", 0);
 
-  /* "PETSc/Vec.pyx":351
+  /* "PETSc/Vec.pyx":352
  * 
  *     def getOwnershipRanges(self):
  *         cdef const_PetscInt *rng = NULL             # <<<<<<<<<<<<<<
@@ -88922,16 +90767,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
  */
   __pyx_v_rng = NULL;
 
-  /* "PETSc/Vec.pyx":352
+  /* "PETSc/Vec.pyx":353
  *     def getOwnershipRanges(self):
  *         cdef const_PetscInt *rng = NULL
  *         CHKERR( VecGetOwnershipRanges(self.vec, &rng) )             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.vec, &comm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetOwnershipRanges(__pyx_v_self->vec, (&__pyx_v_rng))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetOwnershipRanges(__pyx_v_self->vec, (&__pyx_v_rng))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 353, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":353
+  /* "PETSc/Vec.pyx":354
  *         cdef const_PetscInt *rng = NULL
  *         CHKERR( VecGetOwnershipRanges(self.vec, &rng) )
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -88940,16 +90785,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
  */
   __pyx_v_comm = MPI_COMM_NULL;
 
-  /* "PETSc/Vec.pyx":354
+  /* "PETSc/Vec.pyx":355
  *         CHKERR( VecGetOwnershipRanges(self.vec, &rng) )
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.vec, &comm) )             # <<<<<<<<<<<<<<
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->vec), (&__pyx_v_comm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->vec), (&__pyx_v_comm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 355, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":355
+  /* "PETSc/Vec.pyx":356
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.vec, &comm) )
  *         cdef int size = -1             # <<<<<<<<<<<<<<
@@ -88958,16 +90803,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
  */
   __pyx_v_size = -1;
 
-  /* "PETSc/Vec.pyx":356
+  /* "PETSc/Vec.pyx":357
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.vec, &comm) )
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
  *         return array_i(size+1, rng)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 357, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":357
+  /* "PETSc/Vec.pyx":358
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )
  *         return array_i(size+1, rng)             # <<<<<<<<<<<<<<
@@ -88975,13 +90820,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
  *     def getBuffer(self, readonly=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size + 1), __pyx_v_rng)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size + 1), __pyx_v_rng)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 358, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":350
+  /* "PETSc/Vec.pyx":351
  *         return (toInt(low), toInt(high))
  * 
  *     def getOwnershipRanges(self):             # <<<<<<<<<<<<<<
@@ -89000,7 +90845,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":359
+/* "PETSc/Vec.pyx":360
  *         return array_i(size+1, rng)
  * 
  *     def getBuffer(self, readonly=False):             # <<<<<<<<<<<<<<
@@ -89013,9 +90858,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_91getBuffer(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_90getBuffer[] = "Vec.getBuffer(self, readonly=False)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_91getBuffer(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_readonly = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getBuffer (wrapper)", 0);
@@ -89040,7 +90882,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_91getBuffer(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getBuffer") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getBuffer") < 0)) __PYX_ERR(30, 360, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -89053,7 +90895,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_91getBuffer(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getBuffer", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getBuffer", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 360, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.getBuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -89071,22 +90913,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_90getBuffer(struct PyPetscVecObj
   __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("getBuffer", 0);
 
-  /* "PETSc/Vec.pyx":360
+  /* "PETSc/Vec.pyx":361
  * 
  *     def getBuffer(self, readonly=False):
  *         if readonly:             # <<<<<<<<<<<<<<
  *             return vec_getbuffer_r(self)
  *         else:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_readonly); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_readonly); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(30, 361, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Vec.pyx":361
+    /* "PETSc/Vec.pyx":362
  *     def getBuffer(self, readonly=False):
  *         if readonly:
  *             return vec_getbuffer_r(self)             # <<<<<<<<<<<<<<
@@ -89094,30 +90933,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_90getBuffer(struct PyPetscVecObj
  *             return vec_getbuffer_w(self)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getbuffer_r(__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getbuffer_r(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 362, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Vec.pyx":361
+ * 
+ *     def getBuffer(self, readonly=False):
+ *         if readonly:             # <<<<<<<<<<<<<<
+ *             return vec_getbuffer_r(self)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":363
+  /* "PETSc/Vec.pyx":364
  *             return vec_getbuffer_r(self)
  *         else:
  *             return vec_getbuffer_w(self)             # <<<<<<<<<<<<<<
  * 
  *     def getArray(self, readonly=False):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getbuffer_w(__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getbuffer_w(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 364, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Vec.pyx":359
+  /* "PETSc/Vec.pyx":360
  *         return array_i(size+1, rng)
  * 
  *     def getBuffer(self, readonly=False):             # <<<<<<<<<<<<<<
@@ -89136,7 +90983,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_90getBuffer(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":365
+/* "PETSc/Vec.pyx":366
  *             return vec_getbuffer_w(self)
  * 
  *     def getArray(self, readonly=False):             # <<<<<<<<<<<<<<
@@ -89149,9 +90996,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_93getArray(PyObject *__pyx_v_sel
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_92getArray[] = "Vec.getArray(self, readonly=False)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_93getArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_readonly = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getArray (wrapper)", 0);
@@ -89176,7 +91020,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_93getArray(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getArray") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getArray") < 0)) __PYX_ERR(30, 366, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -89189,7 +91033,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_93getArray(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getArray", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getArray", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 366, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.getArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -89207,22 +91051,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_92getArray(struct PyPetscVecObje
   __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("getArray", 0);
 
-  /* "PETSc/Vec.pyx":366
+  /* "PETSc/Vec.pyx":367
  * 
  *     def getArray(self, readonly=False):
  *         if readonly:             # <<<<<<<<<<<<<<
  *             return vec_getarray_r(self)
  *         else:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_readonly); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_readonly); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(30, 367, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Vec.pyx":367
+    /* "PETSc/Vec.pyx":368
  *     def getArray(self, readonly=False):
  *         if readonly:
  *             return vec_getarray_r(self)             # <<<<<<<<<<<<<<
@@ -89230,30 +91071,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_92getArray(struct PyPetscVecObje
  *             return vec_getarray_w(self)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getarray_r(__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getarray_r(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 368, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Vec.pyx":367
+ * 
+ *     def getArray(self, readonly=False):
+ *         if readonly:             # <<<<<<<<<<<<<<
+ *             return vec_getarray_r(self)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":369
+  /* "PETSc/Vec.pyx":370
  *             return vec_getarray_r(self)
  *         else:
  *             return vec_getarray_w(self)             # <<<<<<<<<<<<<<
  * 
  *     def setArray(self, array):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getarray_w(__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_getarray_w(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 370, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Vec.pyx":365
+  /* "PETSc/Vec.pyx":366
  *             return vec_getbuffer_w(self)
  * 
  *     def getArray(self, readonly=False):             # <<<<<<<<<<<<<<
@@ -89272,7 +91121,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_92getArray(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":371
+/* "PETSc/Vec.pyx":372
  *             return vec_getarray_w(self)
  * 
  *     def setArray(self, array):             # <<<<<<<<<<<<<<
@@ -89285,9 +91134,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_95setArray(PyObject *__pyx_v_sel
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_94setArray[] = "Vec.setArray(self, array)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_95setArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_array = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setArray (wrapper)", 0);
@@ -89309,7 +91155,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_95setArray(PyObject *__pyx_v_sel
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setArray") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setArray") < 0)) __PYX_ERR(30, 372, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -89320,7 +91166,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_95setArray(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setArray", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setArray", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 372, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -89337,21 +91183,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_94setArray(struct PyPetscVecObje
   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("setArray", 0);
 
-  /* "PETSc/Vec.pyx":372
+  /* "PETSc/Vec.pyx":373
  * 
  *     def setArray(self, array):
  *         vec_setarray(self, array)             # <<<<<<<<<<<<<<
  * 
  *     def placeArray(self, array):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_self, __pyx_v_array); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_self, __pyx_v_array); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 373, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":371
+  /* "PETSc/Vec.pyx":372
  *             return vec_getarray_w(self)
  * 
  *     def setArray(self, array):             # <<<<<<<<<<<<<<
@@ -89371,7 +91214,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_94setArray(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":374
+/* "PETSc/Vec.pyx":375
  *         vec_setarray(self, array)
  * 
  *     def placeArray(self, array):             # <<<<<<<<<<<<<<
@@ -89384,9 +91227,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_97placeArray(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_96placeArray[] = "Vec.placeArray(self, array)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_97placeArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_array = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("placeArray (wrapper)", 0);
@@ -89408,7 +91248,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_97placeArray(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "placeArray") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "placeArray") < 0)) __PYX_ERR(30, 375, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -89419,7 +91259,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_97placeArray(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("placeArray", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("placeArray", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 375, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.placeArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -89443,13 +91283,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
   int __pyx_t_3;
   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("placeArray", 0);
   __Pyx_INCREF(__pyx_v_array);
 
-  /* "PETSc/Vec.pyx":375
+  /* "PETSc/Vec.pyx":376
  * 
  *     def placeArray(self, array):
  *         cdef PetscInt nv=0             # <<<<<<<<<<<<<<
@@ -89458,7 +91295,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/Vec.pyx":376
+  /* "PETSc/Vec.pyx":377
  *     def placeArray(self, array):
  *         cdef PetscInt nv=0
  *         cdef PetscInt na=0             # <<<<<<<<<<<<<<
@@ -89467,7 +91304,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
  */
   __pyx_v_na = 0;
 
-  /* "PETSc/Vec.pyx":377
+  /* "PETSc/Vec.pyx":378
  *         cdef PetscInt nv=0
  *         cdef PetscInt na=0
  *         cdef PetscScalar *a = NULL             # <<<<<<<<<<<<<<
@@ -89476,28 +91313,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
  */
   __pyx_v_a = NULL;
 
-  /* "PETSc/Vec.pyx":378
+  /* "PETSc/Vec.pyx":379
  *         cdef PetscInt na=0
  *         cdef PetscScalar *a = NULL
  *         CHKERR( VecGetLocalSize(self.vec, &nv) )             # <<<<<<<<<<<<<<
  *         array = oarray_s(array, &na, &a)
  *         if (na != nv): raise ValueError(
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_nv))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_nv))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 379, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":379
+  /* "PETSc/Vec.pyx":380
  *         cdef PetscScalar *a = NULL
  *         CHKERR( VecGetLocalSize(self.vec, &nv) )
  *         array = oarray_s(array, &na, &a)             # <<<<<<<<<<<<<<
  *         if (na != nv): raise ValueError(
  *             "cannot place input array size %d, vector size %d" %
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_v_array, (&__pyx_v_na), (&__pyx_v_a))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_v_array, (&__pyx_v_na), (&__pyx_v_a))); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 380, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":380
+  /* "PETSc/Vec.pyx":381
  *         CHKERR( VecGetLocalSize(self.vec, &nv) )
  *         array = oarray_s(array, &na, &a)
  *         if (na != nv): raise ValueError(             # <<<<<<<<<<<<<<
@@ -89507,18 +91344,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
   __pyx_t_3 = ((__pyx_v_na != __pyx_v_nv) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Vec.pyx":382
+    /* "PETSc/Vec.pyx":383
  *         if (na != nv): raise ValueError(
  *             "cannot place input array size %d, vector size %d" %
  *             (toInt(na), toInt(nv)))             # <<<<<<<<<<<<<<
  *         CHKERR( VecPlaceArray(self.vec, a) )
  *         self.set_attr('__placed_array__', array)
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 383, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 383, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 383, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -89527,58 +91364,58 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
     __pyx_t_2 = 0;
     __pyx_t_4 = 0;
 
-    /* "PETSc/Vec.pyx":381
+    /* "PETSc/Vec.pyx":382
  *         array = oarray_s(array, &na, &a)
  *         if (na != nv): raise ValueError(
  *             "cannot place input array size %d, vector size %d" %             # <<<<<<<<<<<<<<
  *             (toInt(na), toInt(nv)))
  *         CHKERR( VecPlaceArray(self.vec, a) )
  */
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_cannot_place_input_array_size_d, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_cannot_place_input_array_size_d, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 382, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/Vec.pyx":380
+    /* "PETSc/Vec.pyx":381
  *         CHKERR( VecGetLocalSize(self.vec, &nv) )
  *         array = oarray_s(array, &na, &a)
  *         if (na != nv): raise ValueError(             # <<<<<<<<<<<<<<
  *             "cannot place input array size %d, vector size %d" %
  *             (toInt(na), toInt(nv)))
  */
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 381, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 381, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[30]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(30, 381, __pyx_L1_error)
   }
 
-  /* "PETSc/Vec.pyx":383
+  /* "PETSc/Vec.pyx":384
  *             "cannot place input array size %d, vector size %d" %
  *             (toInt(na), toInt(nv)))
  *         CHKERR( VecPlaceArray(self.vec, a) )             # <<<<<<<<<<<<<<
  *         self.set_attr('__placed_array__', array)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPlaceArray(__pyx_v_self->vec, __pyx_v_a)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPlaceArray(__pyx_v_self->vec, __pyx_v_a)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 384, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":384
+  /* "PETSc/Vec.pyx":385
  *             (toInt(na), toInt(nv)))
  *         CHKERR( VecPlaceArray(self.vec, a) )
  *         self.set_attr('__placed_array__', array)             # <<<<<<<<<<<<<<
  * 
  *     def resetArray(self, force=False):
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_placed_array, __pyx_v_array); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__placed_array__"), __pyx_v_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 385, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Vec.pyx":374
+  /* "PETSc/Vec.pyx":375
  *         vec_setarray(self, array)
  * 
  *     def placeArray(self, array):             # <<<<<<<<<<<<<<
@@ -89602,7 +91439,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":386
+/* "PETSc/Vec.pyx":387
  *         self.set_attr('__placed_array__', array)
  * 
  *     def resetArray(self, force=False):             # <<<<<<<<<<<<<<
@@ -89615,9 +91452,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_99resetArray(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_98resetArray[] = "Vec.resetArray(self, force=False)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_99resetArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_force = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("resetArray (wrapper)", 0);
@@ -89642,7 +91476,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_99resetArray(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resetArray") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resetArray") < 0)) __PYX_ERR(30, 387, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -89655,7 +91489,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_99resetArray(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("resetArray", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("resetArray", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 387, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.resetArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -89677,12 +91511,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_98resetArray(struct PyPetscVecOb
   int __pyx_t_3;
   int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("resetArray", 0);
 
-  /* "PETSc/Vec.pyx":387
+  /* "PETSc/Vec.pyx":388
  * 
  *     def resetArray(self, force=False):
  *         cdef object array = None             # <<<<<<<<<<<<<<
@@ -89692,19 +91523,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_98resetArray(struct PyPetscVecOb
   __Pyx_INCREF(Py_None);
   __pyx_v_array = Py_None;
 
-  /* "PETSc/Vec.pyx":388
+  /* "PETSc/Vec.pyx":389
  *     def resetArray(self, force=False):
  *         cdef object array = None
  *         array = self.get_attr('__placed_array__')             # <<<<<<<<<<<<<<
  *         if array is None and not force: return None
  *         CHKERR( VecResetArray(self.vec) )
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_placed_array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__placed_array__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":389
+  /* "PETSc/Vec.pyx":390
  *         cdef object array = None
  *         array = self.get_attr('__placed_array__')
  *         if array is None and not force: return None             # <<<<<<<<<<<<<<
@@ -89718,7 +91549,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_98resetArray(struct PyPetscVecOb
     __pyx_t_2 = __pyx_t_4;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_force); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_force); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(30, 390, __pyx_L1_error)
   __pyx_t_3 = ((!__pyx_t_4) != 0);
   __pyx_t_2 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
@@ -89729,39 +91560,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_98resetArray(struct PyPetscVecOb
     goto __pyx_L0;
   }
 
-  /* "PETSc/Vec.pyx":390
+  /* "PETSc/Vec.pyx":391
  *         array = self.get_attr('__placed_array__')
  *         if array is None and not force: return None
  *         CHKERR( VecResetArray(self.vec) )             # <<<<<<<<<<<<<<
  *         self.set_attr('__placed_array__', None)
  *         return array
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecResetArray(__pyx_v_self->vec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecResetArray(__pyx_v_self->vec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(30, 391, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":391
+  /* "PETSc/Vec.pyx":392
  *         if array is None and not force: return None
  *         CHKERR( VecResetArray(self.vec) )
  *         self.set_attr('__placed_array__', None)             # <<<<<<<<<<<<<<
  *         return array
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_placed_array, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__placed_array__"), Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 392, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":392
+  /* "PETSc/Vec.pyx":393
  *         CHKERR( VecResetArray(self.vec) )
  *         self.set_attr('__placed_array__', None)
  *         return array             # <<<<<<<<<<<<<<
  * 
- *     def getCUDAHandle(self):
+ *     def getCUDAHandle(self, mode=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(__pyx_v_array);
   __pyx_r = __pyx_v_array;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":386
+  /* "PETSc/Vec.pyx":387
  *         self.set_attr('__placed_array__', array)
  * 
  *     def resetArray(self, force=False):             # <<<<<<<<<<<<<<
@@ -89781,119 +91612,292 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_98resetArray(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":394
+/* "PETSc/Vec.pyx":395
  *         return array
  * 
- *     def getCUDAHandle(self):             # <<<<<<<<<<<<<<
+ *     def getCUDAHandle(self, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar *hdl = NULL
- *         CHKERR( VecCUSPGetCUDAArray(self.vec, &hdl) )
+ *         cdef const_char *m = NULL
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_101getCUDAHandle(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_100getCUDAHandle[] = "Vec.getCUDAHandle(self)";
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_100getCUDAHandle[] = "Vec.getCUDAHandle(self, mode=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_101getCUDAHandle(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_mode = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getCUDAHandle (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCUDAHandle", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCUDAHandle", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(((struct PyPetscVecObject *)__pyx_v_self));
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mode,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_mode);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCUDAHandle") < 0)) __PYX_ERR(30, 395, __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_mode = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getCUDAHandle", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 395, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Vec.getCUDAHandle", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_mode) {
   PetscScalar *__pyx_v_hdl;
+  const char *__pyx_v_m;
   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;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
   __Pyx_RefNannySetupContext("getCUDAHandle", 0);
+  __Pyx_INCREF(__pyx_v_mode);
 
-  /* "PETSc/Vec.pyx":395
+  /* "PETSc/Vec.pyx":396
  * 
- *     def getCUDAHandle(self):
+ *     def getCUDAHandle(self, mode=None):
  *         cdef PetscScalar *hdl = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( VecCUSPGetCUDAArray(self.vec, &hdl) )
- *         return <Py_uintptr_t>hdl
+ *         cdef const_char *m = NULL
+ *         if mode is not None: mode = str2bytes(mode, &m)
  */
   __pyx_v_hdl = NULL;
 
-  /* "PETSc/Vec.pyx":396
- *     def getCUDAHandle(self):
+  /* "PETSc/Vec.pyx":397
+ *     def getCUDAHandle(self, mode=None):
  *         cdef PetscScalar *hdl = NULL
- *         CHKERR( VecCUSPGetCUDAArray(self.vec, &hdl) )             # <<<<<<<<<<<<<<
+ *         cdef const_char *m = NULL             # <<<<<<<<<<<<<<
+ *         if mode is not None: mode = str2bytes(mode, &m)
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ */
+  __pyx_v_m = NULL;
+
+  /* "PETSc/Vec.pyx":398
+ *         cdef PetscScalar *hdl = NULL
+ *         cdef const_char *m = NULL
+ *         if mode is not None: mode = str2bytes(mode, &m)             # <<<<<<<<<<<<<<
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ *             CHKERR( VecCUSPGetCUDAArrayReadWrite(self.vec, &hdl) )
+ */
+  __pyx_t_1 = (__pyx_v_mode != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mode, (&__pyx_v_m)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 398, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_mode, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/Vec.pyx":399
+ *         cdef const_char *m = NULL
+ *         if mode is not None: mode = str2bytes(mode, &m)
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPGetCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':
+ */
+  __pyx_t_1 = ((__pyx_v_m == NULL) != 0);
+  if (!__pyx_t_1) {
+  } else {
+    __pyx_t_2 = __pyx_t_1;
+    goto __pyx_L5_bool_binop_done;
+  }
+  __pyx_t_1 = (((__pyx_v_m[0]) == 'r') != 0);
+  if (__pyx_t_1) {
+  } else {
+    __pyx_t_2 = __pyx_t_1;
+    goto __pyx_L5_bool_binop_done;
+  }
+  __pyx_t_1 = (((__pyx_v_m[1]) == 'w') != 0);
+  __pyx_t_2 = __pyx_t_1;
+  __pyx_L5_bool_binop_done:;
+  if (__pyx_t_2) {
+
+    /* "PETSc/Vec.pyx":400
+ *         if mode is not None: mode = str2bytes(mode, &m)
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ *             CHKERR( VecCUSPGetCUDAArrayReadWrite(self.vec, &hdl) )             # <<<<<<<<<<<<<<
+ *         elif m[0] == c'r':
+ *             CHKERR( VecCUSPGetCUDAArrayRead(self.vec, &hdl) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPGetCUDAArrayReadWrite(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 400, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":399
+ *         cdef const_char *m = NULL
+ *         if mode is not None: mode = str2bytes(mode, &m)
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPGetCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':
+ */
+    goto __pyx_L4;
+  }
+
+  /* "PETSc/Vec.pyx":401
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ *             CHKERR( VecCUSPGetCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPGetCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':
+ */
+  __pyx_t_2 = (((__pyx_v_m[0]) == 'r') != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/Vec.pyx":402
+ *             CHKERR( VecCUSPGetCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':
+ *             CHKERR( VecCUSPGetCUDAArrayRead(self.vec, &hdl) )             # <<<<<<<<<<<<<<
+ *         elif m[0] == c'w':
+ *             CHKERR( VecCUSPGetCUDAArrayWrite(self.vec, &hdl) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPGetCUDAArrayRead(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 402, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":401
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ *             CHKERR( VecCUSPGetCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPGetCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':
+ */
+    goto __pyx_L4;
+  }
+
+  /* "PETSc/Vec.pyx":403
+ *         elif m[0] == c'r':
+ *             CHKERR( VecCUSPGetCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPGetCUDAArrayWrite(self.vec, &hdl) )
+ *         else:
+ */
+  __pyx_t_2 = (((__pyx_v_m[0]) == 'w') != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/Vec.pyx":404
+ *             CHKERR( VecCUSPGetCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':
+ *             CHKERR( VecCUSPGetCUDAArrayWrite(self.vec, &hdl) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPGetCUDAArrayWrite(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 404, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":403
+ *         elif m[0] == c'r':
+ *             CHKERR( VecCUSPGetCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPGetCUDAArrayWrite(self.vec, &hdl) )
+ *         else:
+ */
+    goto __pyx_L4;
+  }
+
+  /* "PETSc/Vec.pyx":406
+ *             CHKERR( VecCUSPGetCUDAArrayWrite(self.vec, &hdl) )
+ *         else:
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")             # <<<<<<<<<<<<<<
  *         return <Py_uintptr_t>hdl
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPGetCUDAArray(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__52, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 406, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(30, 406, __pyx_L1_error)
+  }
+  __pyx_L4:;
 
-  /* "PETSc/Vec.pyx":397
- *         cdef PetscScalar *hdl = NULL
- *         CHKERR( VecCUSPGetCUDAArray(self.vec, &hdl) )
+  /* "PETSc/Vec.pyx":407
+ *         else:
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")
  *         return <Py_uintptr_t>hdl             # <<<<<<<<<<<<<<
  * 
- *     def restoreCUDAHandle(self, handle):
+ *     def restoreCUDAHandle(self, handle, mode='rw'):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)__pyx_v_hdl)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)__pyx_v_hdl)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":394
+  /* "PETSc/Vec.pyx":395
  *         return array
  * 
- *     def getCUDAHandle(self):             # <<<<<<<<<<<<<<
+ *     def getCUDAHandle(self, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar *hdl = NULL
- *         CHKERR( VecCUSPGetCUDAArray(self.vec, &hdl) )
+ *         cdef const_char *m = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.getCUDAHandle", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_mode);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":399
+/* "PETSc/Vec.pyx":409
  *         return <Py_uintptr_t>hdl
  * 
- *     def restoreCUDAHandle(self, handle):             # <<<<<<<<<<<<<<
- *         cdef PetscScalar *hdl = NULL
- *         hdl = <PetscScalar*>(<Py_uintptr_t>handle)
+ *     def restoreCUDAHandle(self, handle, mode='rw'):             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar *hdl = <PetscScalar*>(<Py_uintptr_t>handle)
+ *         cdef const_char *m = NULL
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_103restoreCUDAHandle(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle[] = "Vec.restoreCUDAHandle(self, handle)";
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle[] = "Vec.restoreCUDAHandle(self, handle, mode='rw')";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_103restoreCUDAHandle(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_handle = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  PyObject *__pyx_v_mode = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("restoreCUDAHandle (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_handle,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_handle,&__pyx_n_s_mode,0};
+    PyObject* values[2] = {0,0};
+    values[1] = ((PyObject *)__pyx_n_s_rw);
     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;
@@ -89903,93 +91907,230 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_103restoreCUDAHandle(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_handle)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
+          if (value) { values[1] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreCUDAHandle") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreCUDAHandle") < 0)) __PYX_ERR(30, 409, __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_handle = values[0];
+    __pyx_v_mode = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("restoreCUDAHandle", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("restoreCUDAHandle", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 409, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.restoreCUDAHandle", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_handle);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_handle, __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_handle) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_handle, PyObject *__pyx_v_mode) {
   PetscScalar *__pyx_v_hdl;
+  const char *__pyx_v_m;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   Py_uintptr_t __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
   __Pyx_RefNannySetupContext("restoreCUDAHandle", 0);
+  __Pyx_INCREF(__pyx_v_mode);
 
-  /* "PETSc/Vec.pyx":400
+  /* "PETSc/Vec.pyx":410
  * 
- *     def restoreCUDAHandle(self, handle):
- *         cdef PetscScalar *hdl = NULL             # <<<<<<<<<<<<<<
- *         hdl = <PetscScalar*>(<Py_uintptr_t>handle)
- *         CHKERR( VecCUSPRestoreCUDAArray(self.vec, &hdl) )
+ *     def restoreCUDAHandle(self, handle, mode='rw'):
+ *         cdef PetscScalar *hdl = <PetscScalar*>(<Py_uintptr_t>handle)             # <<<<<<<<<<<<<<
+ *         cdef const_char *m = NULL
+ *         if mode is not None: mode = str2bytes(mode, &m)
  */
-  __pyx_v_hdl = NULL;
+  __pyx_t_1 = __Pyx_PyInt_As_size_t(__pyx_v_handle); if (unlikely((__pyx_t_1 == (Py_uintptr_t)-1) && PyErr_Occurred())) __PYX_ERR(30, 410, __pyx_L1_error)
+  __pyx_v_hdl = ((PetscScalar *)((Py_uintptr_t)__pyx_t_1));
 
-  /* "PETSc/Vec.pyx":401
- *     def restoreCUDAHandle(self, handle):
- *         cdef PetscScalar *hdl = NULL
- *         hdl = <PetscScalar*>(<Py_uintptr_t>handle)             # <<<<<<<<<<<<<<
- *         CHKERR( VecCUSPRestoreCUDAArray(self.vec, &hdl) )
- * 
+  /* "PETSc/Vec.pyx":411
+ *     def restoreCUDAHandle(self, handle, mode='rw'):
+ *         cdef PetscScalar *hdl = <PetscScalar*>(<Py_uintptr_t>handle)
+ *         cdef const_char *m = NULL             # <<<<<<<<<<<<<<
+ *         if mode is not None: mode = str2bytes(mode, &m)
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
  */
-  __pyx_t_1 = __Pyx_PyInt_As_size_t(__pyx_v_handle); if (unlikely((__pyx_t_1 == (Py_uintptr_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_hdl = ((PetscScalar *)((Py_uintptr_t)__pyx_t_1));
+  __pyx_v_m = NULL;
 
-  /* "PETSc/Vec.pyx":402
- *         cdef PetscScalar *hdl = NULL
- *         hdl = <PetscScalar*>(<Py_uintptr_t>handle)
- *         CHKERR( VecCUSPRestoreCUDAArray(self.vec, &hdl) )             # <<<<<<<<<<<<<<
+  /* "PETSc/Vec.pyx":412
+ *         cdef PetscScalar *hdl = <PetscScalar*>(<Py_uintptr_t>handle)
+ *         cdef const_char *m = NULL
+ *         if mode is not None: mode = str2bytes(mode, &m)             # <<<<<<<<<<<<<<
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ *             CHKERR( VecCUSPRestoreCUDAArrayReadWrite(self.vec, &hdl) )
+ */
+  __pyx_t_2 = (__pyx_v_mode != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mode, (&__pyx_v_m)); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 412, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF_SET(__pyx_v_mode, __pyx_t_4);
+    __pyx_t_4 = 0;
+  }
+
+  /* "PETSc/Vec.pyx":413
+ *         cdef const_char *m = NULL
+ *         if mode is not None: mode = str2bytes(mode, &m)
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPRestoreCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':
+ */
+  __pyx_t_2 = ((__pyx_v_m == NULL) != 0);
+  if (!__pyx_t_2) {
+  } else {
+    __pyx_t_3 = __pyx_t_2;
+    goto __pyx_L5_bool_binop_done;
+  }
+  __pyx_t_2 = (((__pyx_v_m[0]) == 'r') != 0);
+  if (__pyx_t_2) {
+  } else {
+    __pyx_t_3 = __pyx_t_2;
+    goto __pyx_L5_bool_binop_done;
+  }
+  __pyx_t_2 = (((__pyx_v_m[1]) == 'w') != 0);
+  __pyx_t_3 = __pyx_t_2;
+  __pyx_L5_bool_binop_done:;
+  if (__pyx_t_3) {
+
+    /* "PETSc/Vec.pyx":414
+ *         if mode is not None: mode = str2bytes(mode, &m)
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ *             CHKERR( VecCUSPRestoreCUDAArrayReadWrite(self.vec, &hdl) )             # <<<<<<<<<<<<<<
+ *         elif m[0] == c'r':
+ *             CHKERR( VecCUSPRestoreCUDAArrayRead(self.vec, &hdl) )
+ */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPRestoreCUDAArrayReadWrite(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(30, 414, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":413
+ *         cdef const_char *m = NULL
+ *         if mode is not None: mode = str2bytes(mode, &m)
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPRestoreCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':
+ */
+    goto __pyx_L4;
+  }
+
+  /* "PETSc/Vec.pyx":415
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ *             CHKERR( VecCUSPRestoreCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPRestoreCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':
+ */
+  __pyx_t_3 = (((__pyx_v_m[0]) == 'r') != 0);
+  if (__pyx_t_3) {
+
+    /* "PETSc/Vec.pyx":416
+ *             CHKERR( VecCUSPRestoreCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':
+ *             CHKERR( VecCUSPRestoreCUDAArrayRead(self.vec, &hdl) )             # <<<<<<<<<<<<<<
+ *         elif m[0] == c'w':
+ *             CHKERR( VecCUSPRestoreCUDAArrayWrite(self.vec, &hdl) )
+ */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPRestoreCUDAArrayRead(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(30, 416, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":415
+ *         if m == NULL or (m[0] == c'r' and m[1] == c'w'):
+ *             CHKERR( VecCUSPRestoreCUDAArrayReadWrite(self.vec, &hdl) )
+ *         elif m[0] == c'r':             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPRestoreCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':
+ */
+    goto __pyx_L4;
+  }
+
+  /* "PETSc/Vec.pyx":417
+ *         elif m[0] == c'r':
+ *             CHKERR( VecCUSPRestoreCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPRestoreCUDAArrayWrite(self.vec, &hdl) )
+ *         else:
+ */
+  __pyx_t_3 = (((__pyx_v_m[0]) == 'w') != 0);
+  if (__pyx_t_3) {
+
+    /* "PETSc/Vec.pyx":418
+ *             CHKERR( VecCUSPRestoreCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':
+ *             CHKERR( VecCUSPRestoreCUDAArrayWrite(self.vec, &hdl) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")
+ */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPRestoreCUDAArrayWrite(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(30, 418, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":417
+ *         elif m[0] == c'r':
+ *             CHKERR( VecCUSPRestoreCUDAArrayRead(self.vec, &hdl) )
+ *         elif m[0] == c'w':             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCUSPRestoreCUDAArrayWrite(self.vec, &hdl) )
+ *         else:
+ */
+    goto __pyx_L4;
+  }
+
+  /* "PETSc/Vec.pyx":420
+ *             CHKERR( VecCUSPRestoreCUDAArrayWrite(self.vec, &hdl) )
+ *         else:
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")             # <<<<<<<<<<<<<<
  * 
  *     def duplicate(self, array=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPRestoreCUDAArray(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__53, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 420, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __PYX_ERR(30, 420, __pyx_L1_error)
+  }
+  __pyx_L4:;
 
-  /* "PETSc/Vec.pyx":399
+  /* "PETSc/Vec.pyx":409
  *         return <Py_uintptr_t>hdl
  * 
- *     def restoreCUDAHandle(self, handle):             # <<<<<<<<<<<<<<
- *         cdef PetscScalar *hdl = NULL
- *         hdl = <PetscScalar*>(<Py_uintptr_t>handle)
+ *     def restoreCUDAHandle(self, handle, mode='rw'):             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar *hdl = <PetscScalar*>(<Py_uintptr_t>handle)
+ *         cdef const_char *m = NULL
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.restoreCUDAHandle", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_mode);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":404
- *         CHKERR( VecCUSPRestoreCUDAArray(self.vec, &hdl) )
+/* "PETSc/Vec.pyx":422
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")
  * 
  *     def duplicate(self, array=None):             # <<<<<<<<<<<<<<
  *         cdef Vec vec = type(self)()
@@ -90001,9 +92142,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_105duplicate(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_104duplicate[] = "Vec.duplicate(self, array=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_105duplicate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_array = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("duplicate (wrapper)", 0);
@@ -90028,7 +92166,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_105duplicate(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "duplicate") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "duplicate") < 0)) __PYX_ERR(30, 422, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -90041,7 +92179,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_105duplicate(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("duplicate", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("duplicate", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 422, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.duplicate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -90064,12 +92202,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecOb
   int __pyx_t_4;
   int __pyx_t_5;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("duplicate", 0);
 
-  /* "PETSc/Vec.pyx":405
+  /* "PETSc/Vec.pyx":423
  * 
  *     def duplicate(self, array=None):
  *         cdef Vec vec = type(self)()             # <<<<<<<<<<<<<<
@@ -90088,27 +92223,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecOb
     }
   }
   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[30]; __pyx_lineno = 405; __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(30, 423, __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[30]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 423, __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_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 423, __pyx_L1_error)
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":406
+  /* "PETSc/Vec.pyx":424
  *     def duplicate(self, array=None):
  *         cdef Vec vec = type(self)()
  *         CHKERR( VecDuplicate(self.vec, &vec.vec) )             # <<<<<<<<<<<<<<
  *         if array is not None:
  *             vec_setarray(vec, array)
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_self->vec, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_self->vec, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 424, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":407
+  /* "PETSc/Vec.pyx":425
  *         cdef Vec vec = type(self)()
  *         CHKERR( VecDuplicate(self.vec, &vec.vec) )
  *         if array is not None:             # <<<<<<<<<<<<<<
@@ -90119,19 +92254,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecOb
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/Vec.pyx":408
+    /* "PETSc/Vec.pyx":426
  *         CHKERR( VecDuplicate(self.vec, &vec.vec) )
  *         if array is not None:
  *             vec_setarray(vec, array)             # <<<<<<<<<<<<<<
  *         return vec
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_vec, __pyx_v_array); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_vec, __pyx_v_array); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 426, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":425
+ *         cdef Vec vec = type(self)()
+ *         CHKERR( VecDuplicate(self.vec, &vec.vec) )
+ *         if array is not None:             # <<<<<<<<<<<<<<
+ *             vec_setarray(vec, array)
+ *         return vec
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":409
+  /* "PETSc/Vec.pyx":427
  *         if array is not None:
  *             vec_setarray(vec, array)
  *         return vec             # <<<<<<<<<<<<<<
@@ -90143,8 +92284,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecOb
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":404
- *         CHKERR( VecCUSPRestoreCUDAArray(self.vec, &hdl) )
+  /* "PETSc/Vec.pyx":422
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")
  * 
  *     def duplicate(self, array=None):             # <<<<<<<<<<<<<<
  *         cdef Vec vec = type(self)()
@@ -90165,7 +92306,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":411
+/* "PETSc/Vec.pyx":429
  *         return vec
  * 
  *     def copy(self, Vec result=None):             # <<<<<<<<<<<<<<
@@ -90178,9 +92319,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_107copy(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_3Vec_106copy[] = "Vec.copy(self, Vec result=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_107copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_result = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("copy (wrapper)", 0);
@@ -90205,7 +92343,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_107copy(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) __PYX_ERR(30, 429, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -90218,13 +92356,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_107copy(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("copy", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("copy", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 429, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.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_8petsc4py_5PETSc_Vec, 1, "result", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "result", 0))) __PYX_ERR(30, 429, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_106copy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_result);
 
   /* function exit code */
@@ -90245,13 +92383,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("copy", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Vec.pyx":412
+  /* "PETSc/Vec.pyx":430
  * 
  *     def copy(self, Vec result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -90262,7 +92397,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Vec.pyx":413
+    /* "PETSc/Vec.pyx":431
  *     def copy(self, Vec result=None):
  *         if result is None:
  *             result = type(self)()             # <<<<<<<<<<<<<<
@@ -90281,21 +92416,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject
       }
     }
     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[30]; __pyx_lineno = 413; __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(30, 431, __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[30]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 431, __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_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(30, 431, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscVecObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/Vec.pyx":430
+ * 
+ *     def copy(self, Vec result=None):
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = type(self)()
+ *         if result.vec == NULL:
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":414
+  /* "PETSc/Vec.pyx":432
  *         if result is None:
  *             result = type(self)()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -90305,40 +92446,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject
   __pyx_t_2 = ((__pyx_v_result->vec == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Vec.pyx":415
+    /* "PETSc/Vec.pyx":433
  *             result = type(self)()
  *         if result.vec == NULL:
  *             CHKERR( VecDuplicate(self.vec, &result.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecCopy(self.vec, result.vec) )
  *         return result
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_self->vec, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_self->vec, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(30, 433, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":432
+ *         if result is None:
+ *             result = type(self)()
+ *         if result.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( VecDuplicate(self.vec, &result.vec) )
+ *         CHKERR( VecCopy(self.vec, result.vec) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/Vec.pyx":416
+  /* "PETSc/Vec.pyx":434
  *         if result.vec == NULL:
  *             CHKERR( VecDuplicate(self.vec, &result.vec) )
  *         CHKERR( VecCopy(self.vec, result.vec) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_self->vec, __pyx_v_result->vec)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_self->vec, __pyx_v_result->vec)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(30, 434, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":417
+  /* "PETSc/Vec.pyx":435
  *             CHKERR( VecDuplicate(self.vec, &result.vec) )
  *         CHKERR( VecCopy(self.vec, result.vec) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def load(self, Viewer viewer not None):
+ *     def chop(self, tol):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":411
+  /* "PETSc/Vec.pyx":429
  *         return vec
  * 
  *     def copy(self, Vec result=None):             # <<<<<<<<<<<<<<
@@ -90360,22 +92507,124 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":419
+/* "PETSc/Vec.pyx":437
+ *         return result
+ * 
+ *     def chop(self, tol):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(tol)
+ *         CHKERR( VecChop(self.vec, rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_109chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_108chop[] = "Vec.chop(self, tol)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_109chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tol = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("chop (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,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_tol)) != 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, "chop") < 0)) __PYX_ERR(30, 437, __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_tol = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("chop", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 437, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Vec.chop", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_108chop(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_tol);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108chop(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_tol) {
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscReal __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("chop", 0);
+
+  /* "PETSc/Vec.pyx":438
+ * 
+ *     def chop(self, tol):
+ *         cdef PetscReal rval = asReal(tol)             # <<<<<<<<<<<<<<
+ *         CHKERR( VecChop(self.vec, rval) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(30, 438, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
+
+  /* "PETSc/Vec.pyx":439
+ *     def chop(self, tol):
+ *         cdef PetscReal rval = asReal(tol)
+ *         CHKERR( VecChop(self.vec, rval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def load(self, Viewer viewer not None):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecChop(__pyx_v_self->vec, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 439, __pyx_L1_error)
+
+  /* "PETSc/Vec.pyx":437
  *         return result
  * 
+ *     def chop(self, tol):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(tol)
+ *         CHKERR( VecChop(self.vec, rval) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Vec.chop", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Vec.pyx":441
+ *         CHKERR( VecChop(self.vec, rval) )
+ * 
  *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_109load(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_108load[] = "Vec.load(self, Viewer viewer)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_109load(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_111load(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_110load[] = "Vec.load(self, Viewer viewer)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_111load(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("load (wrapper)", 0);
@@ -90397,7 +92646,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_109load(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, "load") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "load") < 0)) __PYX_ERR(30, 441, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -90408,14 +92657,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_109load(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 441, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.load", __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, 0, "viewer", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_108load(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_viewer);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 0, "viewer", 0))) __PYX_ERR(30, 441, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_110load(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -90426,19 +92675,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_109load(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108load(struct PyPetscVecObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
   MPI_Comm __pyx_v_comm;
   PetscObject __pyx_v_obj;
   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("load", 0);
 
-  /* "PETSc/Vec.pyx":420
+  /* "PETSc/Vec.pyx":442
  * 
  *     def load(self, Viewer viewer not None):
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -90447,7 +92693,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108load(struct PyPetscVecObject
  */
   __pyx_v_comm = MPI_COMM_NULL;
 
-  /* "PETSc/Vec.pyx":421
+  /* "PETSc/Vec.pyx":443
  *     def load(self, Viewer viewer not None):
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)             # <<<<<<<<<<<<<<
@@ -90456,7 +92702,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108load(struct PyPetscVecObject
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_viewer->vwr);
 
-  /* "PETSc/Vec.pyx":422
+  /* "PETSc/Vec.pyx":444
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.vec == NULL:             # <<<<<<<<<<<<<<
@@ -90466,37 +92712,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108load(struct PyPetscVecObject
   __pyx_t_1 = ((__pyx_v_self->vec == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Vec.pyx":423
+    /* "PETSc/Vec.pyx":445
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.vec == NULL:
  *             CHKERR( PetscObjectGetComm(obj, &comm) )             # <<<<<<<<<<<<<<
  *             CHKERR( VecCreate(comm, &self.vec) )
  *         CHKERR( VecLoad(self.vec, viewer.vwr) )
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 445, __pyx_L1_error)
 
-    /* "PETSc/Vec.pyx":424
+    /* "PETSc/Vec.pyx":446
  *         if self.vec == NULL:
  *             CHKERR( PetscObjectGetComm(obj, &comm) )
  *             CHKERR( VecCreate(comm, &self.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecLoad(self.vec, viewer.vwr) )
  *         return self
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_comm, (&__pyx_v_self->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_comm, (&__pyx_v_self->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 446, __pyx_L1_error)
+
+    /* "PETSc/Vec.pyx":444
+ *         cdef MPI_Comm comm = MPI_COMM_NULL
+ *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
+ *         if self.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectGetComm(obj, &comm) )
+ *             CHKERR( VecCreate(comm, &self.vec) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":425
+  /* "PETSc/Vec.pyx":447
  *             CHKERR( PetscObjectGetComm(obj, &comm) )
  *             CHKERR( VecCreate(comm, &self.vec) )
  *         CHKERR( VecLoad(self.vec, viewer.vwr) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecLoad(__pyx_v_self->vec, __pyx_v_viewer->vwr)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecLoad(__pyx_v_self->vec, __pyx_v_viewer->vwr)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 447, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":426
+  /* "PETSc/Vec.pyx":448
  *             CHKERR( VecCreate(comm, &self.vec) )
  *         CHKERR( VecLoad(self.vec, viewer.vwr) )
  *         return self             # <<<<<<<<<<<<<<
@@ -90508,8 +92760,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108load(struct PyPetscVecObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":419
- *         return result
+  /* "PETSc/Vec.pyx":441
+ *         CHKERR( VecChop(self.vec, rval) )
  * 
  *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
@@ -90526,7 +92778,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108load(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":428
+/* "PETSc/Vec.pyx":450
  *         return self
  * 
  *     def equal(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -90535,13 +92787,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108load(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_111equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_110equal[] = "Vec.equal(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_111equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_113equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_112equal[] = "Vec.equal(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_113equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("equal (wrapper)", 0);
@@ -90563,7 +92812,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_111equal(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, "equal") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "equal") < 0)) __PYX_ERR(30, 450, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -90574,14 +92823,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_111equal(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("equal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("equal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 450, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.equal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_110equal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 450, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_112equal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -90592,18 +92841,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_111equal(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110equal(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112equal(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   PetscBool __pyx_v_flag;
   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("equal", 0);
 
-  /* "PETSc/Vec.pyx":429
+  /* "PETSc/Vec.pyx":451
  * 
  *     def equal(self, Vec vec not None):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -90612,16 +92858,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110equal(struct PyPetscVecObject
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Vec.pyx":430
+  /* "PETSc/Vec.pyx":452
  *     def equal(self, Vec vec not None):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( VecEqual(self.vec, vec.vec, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint> flag
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecEqual(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecEqual(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 452, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":431
+  /* "PETSc/Vec.pyx":453
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( VecEqual(self.vec, vec.vec, &flag) )
  *         return <bint> flag             # <<<<<<<<<<<<<<
@@ -90629,13 +92875,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110equal(struct PyPetscVecObject
  *     def dot(self, Vec vec not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 453, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":428
+  /* "PETSc/Vec.pyx":450
  *         return self
  * 
  *     def equal(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -90654,7 +92900,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110equal(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":433
+/* "PETSc/Vec.pyx":455
  *         return <bint> flag
  * 
  *     def dot(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -90663,13 +92909,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110equal(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_113dot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_112dot[] = "Vec.dot(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_113dot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_115dot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_114dot[] = "Vec.dot(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_115dot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("dot (wrapper)", 0);
@@ -90691,7 +92934,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_113dot(PyObject *__pyx_v_self, P
         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_filename = __pyx_f[30]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dot") < 0)) __PYX_ERR(30, 455, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -90702,14 +92945,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_113dot(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("dot", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("dot", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 455, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.dot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_112dot(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 455, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_114dot(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -90720,18 +92963,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_113dot(PyObject *__pyx_v_self, P
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112dot(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dot(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   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("dot", 0);
 
-  /* "PETSc/Vec.pyx":434
+  /* "PETSc/Vec.pyx":456
  * 
  *     def dot(self, Vec vec not None):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -90740,16 +92980,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112dot(struct PyPetscVecObject *
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":435
+  /* "PETSc/Vec.pyx":457
  *     def dot(self, Vec vec not None):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDot(self.vec, vec.vec, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDot(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDot(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 457, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":436
+  /* "PETSc/Vec.pyx":458
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDot(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -90757,13 +92997,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112dot(struct PyPetscVecObject *
  *     def dotBegin(self, Vec vec not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 458, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":433
+  /* "PETSc/Vec.pyx":455
  *         return <bint> flag
  * 
  *     def dot(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -90782,7 +93022,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112dot(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":438
+/* "PETSc/Vec.pyx":460
  *         return toScalar(sval)
  * 
  *     def dotBegin(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -90791,13 +93031,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112dot(struct PyPetscVecObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_115dotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_114dotBegin[] = "Vec.dotBegin(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_115dotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_117dotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_116dotBegin[] = "Vec.dotBegin(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_117dotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("dotBegin (wrapper)", 0);
@@ -90819,7 +93056,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_115dotBegin(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, "dotBegin") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dotBegin") < 0)) __PYX_ERR(30, 460, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -90830,14 +93067,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_115dotBegin(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("dotBegin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("dotBegin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 460, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.dotBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_114dotBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 460, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_116dotBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -90848,17 +93085,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_115dotBegin(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dotBegin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotBegin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   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("dotBegin", 0);
 
-  /* "PETSc/Vec.pyx":439
+  /* "PETSc/Vec.pyx":461
  * 
  *     def dotBegin(self, Vec vec not None):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -90867,16 +93101,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dotBegin(struct PyPetscVecObj
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":440
+  /* "PETSc/Vec.pyx":462
  *     def dotBegin(self, Vec vec not None):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )             # <<<<<<<<<<<<<<
  * 
  *     def dotEnd(self, Vec vec not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDotBegin(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDotBegin(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 462, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":438
+  /* "PETSc/Vec.pyx":460
  *         return toScalar(sval)
  * 
  *     def dotBegin(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -90896,7 +93130,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dotBegin(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":442
+/* "PETSc/Vec.pyx":464
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )
  * 
  *     def dotEnd(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -90905,13 +93139,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dotBegin(struct PyPetscVecObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_117dotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_116dotEnd[] = "Vec.dotEnd(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_117dotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_119dotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_118dotEnd[] = "Vec.dotEnd(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_119dotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("dotEnd (wrapper)", 0);
@@ -90933,7 +93164,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_117dotEnd(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, "dotEnd") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dotEnd") < 0)) __PYX_ERR(30, 464, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -90944,14 +93175,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_117dotEnd(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("dotEnd", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("dotEnd", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 464, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.dotEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_116dotEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 464, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_118dotEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -90962,18 +93193,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_117dotEnd(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotEnd(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118dotEnd(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   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("dotEnd", 0);
 
-  /* "PETSc/Vec.pyx":443
+  /* "PETSc/Vec.pyx":465
  * 
  *     def dotEnd(self, Vec vec not None):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -90982,16 +93210,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotEnd(struct PyPetscVecObjec
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":444
+  /* "PETSc/Vec.pyx":466
  *     def dotEnd(self, Vec vec not None):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotEnd(self.vec, vec.vec, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDotEnd(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDotEnd(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 466, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":445
+  /* "PETSc/Vec.pyx":467
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotEnd(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -90999,13 +93227,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotEnd(struct PyPetscVecObjec
  *     def tDot(self, Vec vec not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 467, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":442
+  /* "PETSc/Vec.pyx":464
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )
  * 
  *     def dotEnd(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -91024,7 +93252,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotEnd(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":447
+/* "PETSc/Vec.pyx":469
  *         return toScalar(sval)
  * 
  *     def tDot(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -91033,13 +93261,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotEnd(struct PyPetscVecObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_119tDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_118tDot[] = "Vec.tDot(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_119tDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_121tDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_120tDot[] = "Vec.tDot(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_121tDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("tDot (wrapper)", 0);
@@ -91061,7 +93286,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_119tDot(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, "tDot") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tDot") < 0)) __PYX_ERR(30, 469, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -91072,14 +93297,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_119tDot(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tDot", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tDot", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 469, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.tDot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_118tDot(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 469, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_120tDot(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -91090,18 +93315,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_119tDot(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118tDot(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDot(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   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("tDot", 0);
 
-  /* "PETSc/Vec.pyx":448
+  /* "PETSc/Vec.pyx":470
  * 
  *     def tDot(self, Vec vec not None):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -91110,16 +93332,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118tDot(struct PyPetscVecObject
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":449
+  /* "PETSc/Vec.pyx":471
  *     def tDot(self, Vec vec not None):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDot(self.vec, vec.vec, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecTDot(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecTDot(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 471, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":450
+  /* "PETSc/Vec.pyx":472
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDot(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -91127,13 +93349,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118tDot(struct PyPetscVecObject
  *     def tDotBegin(self, Vec vec not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":447
+  /* "PETSc/Vec.pyx":469
  *         return toScalar(sval)
  * 
  *     def tDot(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -91152,7 +93374,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118tDot(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":452
+/* "PETSc/Vec.pyx":474
  *         return toScalar(sval)
  * 
  *     def tDotBegin(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -91161,13 +93383,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118tDot(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_121tDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_120tDotBegin[] = "Vec.tDotBegin(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_121tDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_122tDotBegin[] = "Vec.tDotBegin(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("tDotBegin (wrapper)", 0);
@@ -91189,7 +93408,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_121tDotBegin(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tDotBegin") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tDotBegin") < 0)) __PYX_ERR(30, 474, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -91200,14 +93419,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_121tDotBegin(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tDotBegin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tDotBegin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 474, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.tDotBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_120tDotBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 474, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_122tDotBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -91218,17 +93437,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_121tDotBegin(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDotBegin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotBegin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   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("tDotBegin", 0);
 
-  /* "PETSc/Vec.pyx":453
+  /* "PETSc/Vec.pyx":475
  * 
  *     def tDotBegin(self, Vec vec not None):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -91237,16 +93453,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDotBegin(struct PyPetscVecOb
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":454
+  /* "PETSc/Vec.pyx":476
  *     def tDotBegin(self, Vec vec not None):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )             # <<<<<<<<<<<<<<
  * 
  *     def tDotEnd(self, Vec vec not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecTDotBegin(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecTDotBegin(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 476, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":452
+  /* "PETSc/Vec.pyx":474
  *         return toScalar(sval)
  * 
  *     def tDotBegin(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -91266,7 +93482,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDotBegin(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":456
+/* "PETSc/Vec.pyx":478
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )
  * 
  *     def tDotEnd(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -91275,13 +93491,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDotBegin(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_122tDotEnd[] = "Vec.tDotEnd(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_125tDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_124tDotEnd[] = "Vec.tDotEnd(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_125tDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("tDotEnd (wrapper)", 0);
@@ -91303,7 +93516,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotEnd(PyObject *__pyx_v_sel
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tDotEnd") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tDotEnd") < 0)) __PYX_ERR(30, 478, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -91314,14 +93527,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotEnd(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tDotEnd", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tDotEnd", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 478, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.tDotEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_122tDotEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 478, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_124tDotEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -91332,18 +93545,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotEnd(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotEnd(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_124tDotEnd(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   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("tDotEnd", 0);
 
-  /* "PETSc/Vec.pyx":457
+  /* "PETSc/Vec.pyx":479
  * 
  *     def tDotEnd(self, Vec vec not None):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -91352,16 +93562,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotEnd(struct PyPetscVecObje
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":458
+  /* "PETSc/Vec.pyx":480
  *     def tDotEnd(self, Vec vec not None):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDotEnd(self.vec, vec.vec, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecTDotEnd(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecTDotEnd(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 480, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":459
+  /* "PETSc/Vec.pyx":481
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDotEnd(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -91369,13 +93579,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotEnd(struct PyPetscVecObje
  *     def mDot(self, vecs, out=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 481, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":456
+  /* "PETSc/Vec.pyx":478
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )
  * 
  *     def tDotEnd(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -91394,23 +93604,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotEnd(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":461
+/* "PETSc/Vec.pyx":483
  *         return toScalar(sval)
  * 
  *     def mDot(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_125mDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_124mDot[] = "Vec.mDot(self, vecs, out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_125mDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED PyObject *__pyx_v_vecs = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_126mDot[] = "Vec.mDot(self, vecs, out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_vecs = 0;
+  PyObject *__pyx_v_out = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("mDot (wrapper)", 0);
@@ -91439,7 +93646,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_125mDot(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mDot") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mDot") < 0)) __PYX_ERR(30, 483, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -91454,56 +93661,50 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_125mDot(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mDot", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mDot", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 483, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mDot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_124mDot(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_126mDot(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_124mDot(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_126mDot(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mDot", 0);
-  __Pyx_INCREF(__pyx_v_vecs);
-  __Pyx_INCREF(__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":462
+  /* "PETSc/Vec.pyx":484
  * 
  *     def mDot(self, vecs, out=None):
- *         vecs = out = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>vecs; <void>out; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_vecs, Py_None);
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_out, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_vecs);
+  ((void)__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":463
+  /* "PETSc/Vec.pyx":485
  *     def mDot(self, vecs, out=None):
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def mDotBegin(self, vecs, out=None):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[30]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(30, 485, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":461
+  /* "PETSc/Vec.pyx":483
  *         return toScalar(sval)
  * 
  *     def mDot(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
@@ -91511,30 +93712,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_124mDot(CYTHON_UNUSED struct PyP
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mDot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF(__pyx_v_vecs);
-  __Pyx_XDECREF(__pyx_v_out);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":465
+/* "PETSc/Vec.pyx":487
  *         raise NotImplementedError
  * 
  *     def mDotBegin(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_126mDotBegin[] = "Vec.mDotBegin(self, vecs, out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED PyObject *__pyx_v_vecs = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_128mDotBegin[] = "Vec.mDotBegin(self, vecs, out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_vecs = 0;
+  PyObject *__pyx_v_out = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("mDotBegin (wrapper)", 0);
@@ -91563,7 +93759,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDotBegin(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mDotBegin") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mDotBegin") < 0)) __PYX_ERR(30, 487, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -91578,56 +93774,50 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDotBegin(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mDotBegin", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mDotBegin", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 487, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mDotBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_126mDotBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_128mDotBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_126mDotBegin(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_128mDotBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mDotBegin", 0);
-  __Pyx_INCREF(__pyx_v_vecs);
-  __Pyx_INCREF(__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":466
+  /* "PETSc/Vec.pyx":488
  * 
  *     def mDotBegin(self, vecs, out=None):
- *         vecs = out = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>vecs; <void>out; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_vecs, Py_None);
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_out, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_vecs);
+  ((void)__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":467
+  /* "PETSc/Vec.pyx":489
  *     def mDotBegin(self, vecs, out=None):
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def mDotEnd(self, vecs, out=None):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[30]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(30, 489, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":465
+  /* "PETSc/Vec.pyx":487
  *         raise NotImplementedError
  * 
  *     def mDotBegin(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
@@ -91635,30 +93825,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_126mDotBegin(CYTHON_UNUSED struc
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mDotBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF(__pyx_v_vecs);
-  __Pyx_XDECREF(__pyx_v_out);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":469
+/* "PETSc/Vec.pyx":491
  *         raise NotImplementedError
  * 
  *     def mDotEnd(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_128mDotEnd[] = "Vec.mDotEnd(self, vecs, out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED PyObject *__pyx_v_vecs = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_130mDotEnd[] = "Vec.mDotEnd(self, vecs, out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_vecs = 0;
+  PyObject *__pyx_v_out = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("mDotEnd (wrapper)", 0);
@@ -91687,7 +93872,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotEnd(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mDotEnd") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mDotEnd") < 0)) __PYX_ERR(30, 491, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -91702,56 +93887,50 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotEnd(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mDotEnd", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mDotEnd", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 491, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mDotEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_128mDotEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_130mDotEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_128mDotEnd(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_130mDotEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mDotEnd", 0);
-  __Pyx_INCREF(__pyx_v_vecs);
-  __Pyx_INCREF(__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":470
+  /* "PETSc/Vec.pyx":492
  * 
  *     def mDotEnd(self, vecs, out=None):
- *         vecs = out = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>vecs; <void>out; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_vecs, Py_None);
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_out, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_vecs);
+  ((void)__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":471
+  /* "PETSc/Vec.pyx":493
  *     def mDotEnd(self, vecs, out=None):
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def mtDot(self, vecs, out=None):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[30]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(30, 493, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":469
+  /* "PETSc/Vec.pyx":491
  *         raise NotImplementedError
  * 
  *     def mDotEnd(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
@@ -91759,30 +93938,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_128mDotEnd(CYTHON_UNUSED struct
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mDotEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF(__pyx_v_vecs);
-  __Pyx_XDECREF(__pyx_v_out);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":473
+/* "PETSc/Vec.pyx":495
  *         raise NotImplementedError
  * 
  *     def mtDot(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mtDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_130mtDot[] = "Vec.mtDot(self, vecs, out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mtDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED PyObject *__pyx_v_vecs = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_132mtDot[] = "Vec.mtDot(self, vecs, out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_vecs = 0;
+  PyObject *__pyx_v_out = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("mtDot (wrapper)", 0);
@@ -91811,7 +93985,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mtDot(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mtDot") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mtDot") < 0)) __PYX_ERR(30, 495, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -91826,56 +94000,50 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mtDot(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mtDot", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mtDot", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 495, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mtDot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_130mtDot(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_132mtDot(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_130mtDot(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_132mtDot(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mtDot", 0);
-  __Pyx_INCREF(__pyx_v_vecs);
-  __Pyx_INCREF(__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":474
+  /* "PETSc/Vec.pyx":496
  * 
  *     def mtDot(self, vecs, out=None):
- *         vecs = out = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>vecs; <void>out; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_vecs, Py_None);
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_out, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_vecs);
+  ((void)__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":475
+  /* "PETSc/Vec.pyx":497
  *     def mtDot(self, vecs, out=None):
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def mtDotBegin(self, vecs, out=None):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[30]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(30, 497, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":473
+  /* "PETSc/Vec.pyx":495
  *         raise NotImplementedError
  * 
  *     def mtDot(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
@@ -91883,30 +94051,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_130mtDot(CYTHON_UNUSED struct Py
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mtDot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF(__pyx_v_vecs);
-  __Pyx_XDECREF(__pyx_v_out);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":477
+/* "PETSc/Vec.pyx":499
  *         raise NotImplementedError
  * 
  *     def mtDotBegin(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_132mtDotBegin[] = "Vec.mtDotBegin(self, vecs, out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED PyObject *__pyx_v_vecs = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_134mtDotBegin[] = "Vec.mtDotBegin(self, vecs, out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_vecs = 0;
+  PyObject *__pyx_v_out = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("mtDotBegin (wrapper)", 0);
@@ -91935,7 +94098,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDotBegin(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mtDotBegin") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mtDotBegin") < 0)) __PYX_ERR(30, 499, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -91950,56 +94113,50 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDotBegin(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mtDotBegin", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mtDotBegin", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 499, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mtDotBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_132mtDotBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_134mtDotBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_132mtDotBegin(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_134mtDotBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mtDotBegin", 0);
-  __Pyx_INCREF(__pyx_v_vecs);
-  __Pyx_INCREF(__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":478
+  /* "PETSc/Vec.pyx":500
  * 
  *     def mtDotBegin(self, vecs, out=None):
- *         vecs = out = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>vecs; <void>out; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_vecs, Py_None);
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_out, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_vecs);
+  ((void)__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":479
+  /* "PETSc/Vec.pyx":501
  *     def mtDotBegin(self, vecs, out=None):
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def mtDotEnd(self, vecs, out=None):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[30]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(30, 501, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":477
+  /* "PETSc/Vec.pyx":499
  *         raise NotImplementedError
  * 
  *     def mtDotBegin(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
@@ -92007,30 +94164,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_132mtDotBegin(CYTHON_UNUSED stru
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mtDotBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF(__pyx_v_vecs);
-  __Pyx_XDECREF(__pyx_v_out);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":481
+/* "PETSc/Vec.pyx":503
  *         raise NotImplementedError
  * 
  *     def mtDotEnd(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_134mtDotEnd[] = "Vec.mtDotEnd(self, vecs, out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED PyObject *__pyx_v_vecs = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137mtDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_136mtDotEnd[] = "Vec.mtDotEnd(self, vecs, out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137mtDotEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_vecs = 0;
+  PyObject *__pyx_v_out = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("mtDotEnd (wrapper)", 0);
@@ -92059,7 +94211,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotEnd(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mtDotEnd") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mtDotEnd") < 0)) __PYX_ERR(30, 503, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -92074,56 +94226,50 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotEnd(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mtDotEnd", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mtDotEnd", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 503, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mtDotEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_134mtDotEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_136mtDotEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vecs, __pyx_v_out);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_134mtDotEnd(CYTHON_UNUSED struct PyPetscVecObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vecs, CYTHON_UNUSED PyObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136mtDotEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_vecs, PyObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mtDotEnd", 0);
-  __Pyx_INCREF(__pyx_v_vecs);
-  __Pyx_INCREF(__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":482
+  /* "PETSc/Vec.pyx":504
  * 
  *     def mtDotEnd(self, vecs, out=None):
- *         vecs = out = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>vecs; <void>out; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_vecs, Py_None);
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_out, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_vecs);
+  ((void)__pyx_v_out);
 
-  /* "PETSc/Vec.pyx":483
+  /* "PETSc/Vec.pyx":505
  *     def mtDotEnd(self, vecs, out=None):
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def norm(self, norm_type=None):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[30]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(30, 505, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":481
+  /* "PETSc/Vec.pyx":503
  *         raise NotImplementedError
  * 
  *     def mtDotEnd(self, vecs, out=None):             # <<<<<<<<<<<<<<
- *         vecs = out = None
+ *         <void>self; <void>vecs; <void>out; # unused
  *         raise NotImplementedError
  */
 
@@ -92131,14 +94277,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_134mtDotEnd(CYTHON_UNUSED struct
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.mtDotEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF(__pyx_v_vecs);
-  __Pyx_XDECREF(__pyx_v_out);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":485
+/* "PETSc/Vec.pyx":507
  *         raise NotImplementedError
  * 
  *     def norm(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -92147,13 +94291,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_134mtDotEnd(CYTHON_UNUSED struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_136norm[] = "Vec.norm(self, norm_type=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_139norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_138norm[] = "Vec.norm(self, norm_type=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_139norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_norm_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("norm (wrapper)", 0);
@@ -92178,7 +94319,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137norm(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "norm") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "norm") < 0)) __PYX_ERR(30, 507, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -92191,20 +94332,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137norm(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("norm", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("norm", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 507, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_136norm(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_norm_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_138norm(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_norm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138norm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
   NormType __pyx_v_norm_1_2;
   NormType __pyx_v_ntype;
   PetscReal __pyx_v_rval[2];
@@ -92217,12 +94358,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject
   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("norm", 0);
 
-  /* "PETSc/Vec.pyx":486
+  /* "PETSc/Vec.pyx":508
  * 
  *     def norm(self, norm_type=None):
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2             # <<<<<<<<<<<<<<
@@ -92231,7 +94369,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject
  */
   __pyx_v_norm_1_2 = NORM_1_AND_2;
 
-  /* "PETSc/Vec.pyx":487
+  /* "PETSc/Vec.pyx":509
  *     def norm(self, norm_type=None):
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_2             # <<<<<<<<<<<<<<
@@ -92240,7 +94378,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject
  */
   __pyx_v_ntype = NORM_2;
 
-  /* "PETSc/Vec.pyx":488
+  /* "PETSc/Vec.pyx":510
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_2
  *         if norm_type is not None: ntype = norm_type             # <<<<<<<<<<<<<<
@@ -92250,22 +94388,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject
   __pyx_t_1 = (__pyx_v_norm_type != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = ((NormType)PyInt_AsLong(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 510, __pyx_L1_error)
     __pyx_v_ntype = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":490
+  /* "PETSc/Vec.pyx":512
  *         if norm_type is not None: ntype = norm_type
  *         cdef PetscReal rval[2]
  *         CHKERR( VecNorm(self.vec, ntype, rval) )             # <<<<<<<<<<<<<<
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNorm(__pyx_v_self->vec, __pyx_v_ntype, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNorm(__pyx_v_self->vec, __pyx_v_ntype, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 512, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":491
+  /* "PETSc/Vec.pyx":513
  *         cdef PetscReal rval[2]
  *         CHKERR( VecNorm(self.vec, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])             # <<<<<<<<<<<<<<
@@ -92275,27 +94411,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject
   __pyx_t_2 = ((__pyx_v_ntype != __pyx_v_norm_1_2) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 513, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":492
+  /* "PETSc/Vec.pyx":514
  *         CHKERR( VecNorm(self.vec, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))             # <<<<<<<<<<<<<<
  * 
  *     def normBegin(self, norm_type=None):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 514, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 514, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 514, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
@@ -92308,7 +94444,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/Vec.pyx":485
+  /* "PETSc/Vec.pyx":507
  *         raise NotImplementedError
  * 
  *     def norm(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -92329,7 +94465,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":494
+/* "PETSc/Vec.pyx":516
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def normBegin(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -92338,13 +94474,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_136norm(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_139normBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_138normBegin[] = "Vec.normBegin(self, norm_type=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_139normBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_141normBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_140normBegin[] = "Vec.normBegin(self, norm_type=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_141normBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_norm_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("normBegin (wrapper)", 0);
@@ -92369,7 +94502,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_139normBegin(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "normBegin") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "normBegin") < 0)) __PYX_ERR(30, 516, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -92382,20 +94515,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_139normBegin(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("normBegin", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("normBegin", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 516, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.normBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_138normBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_norm_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_140normBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_norm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138normBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
   NormType __pyx_v_ntype;
   PetscReal __pyx_v_dummy[2];
   PyObject *__pyx_r = NULL;
@@ -92404,12 +94537,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138normBegin(struct PyPetscVecOb
   int __pyx_t_2;
   NormType __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("normBegin", 0);
 
-  /* "PETSc/Vec.pyx":495
+  /* "PETSc/Vec.pyx":517
  * 
  *     def normBegin(self, norm_type=None):
  *         cdef PetscNormType ntype = PETSC_NORM_2             # <<<<<<<<<<<<<<
@@ -92418,7 +94548,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138normBegin(struct PyPetscVecOb
  */
   __pyx_v_ntype = NORM_2;
 
-  /* "PETSc/Vec.pyx":496
+  /* "PETSc/Vec.pyx":518
  *     def normBegin(self, norm_type=None):
  *         cdef PetscNormType ntype = PETSC_NORM_2
  *         if norm_type is not None: ntype = norm_type             # <<<<<<<<<<<<<<
@@ -92428,22 +94558,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138normBegin(struct PyPetscVecOb
   __pyx_t_1 = (__pyx_v_norm_type != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = ((NormType)PyInt_AsLong(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 518, __pyx_L1_error)
     __pyx_v_ntype = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":498
+  /* "PETSc/Vec.pyx":520
  *         if norm_type is not None: ntype = norm_type
  *         cdef PetscReal dummy[2]
  *         CHKERR( VecNormBegin(self.vec, ntype, dummy) )             # <<<<<<<<<<<<<<
  * 
  *     def normEnd(self, norm_type=None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNormBegin(__pyx_v_self->vec, __pyx_v_ntype, __pyx_v_dummy)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNormBegin(__pyx_v_self->vec, __pyx_v_ntype, __pyx_v_dummy)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 520, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":494
+  /* "PETSc/Vec.pyx":516
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def normBegin(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -92463,7 +94591,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138normBegin(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":500
+/* "PETSc/Vec.pyx":522
  *         CHKERR( VecNormBegin(self.vec, ntype, dummy) )
  * 
  *     def normEnd(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -92472,13 +94600,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138normBegin(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_141normEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_140normEnd[] = "Vec.normEnd(self, norm_type=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_141normEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_143normEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_142normEnd[] = "Vec.normEnd(self, norm_type=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_143normEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_norm_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("normEnd (wrapper)", 0);
@@ -92503,7 +94628,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_141normEnd(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "normEnd") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "normEnd") < 0)) __PYX_ERR(30, 522, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -92516,20 +94641,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_141normEnd(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("normEnd", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("normEnd", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 522, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.normEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_norm_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_142normEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_norm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142normEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
   NormType __pyx_v_norm_1_2;
   NormType __pyx_v_ntype;
   PetscReal __pyx_v_rval[2];
@@ -92542,12 +94667,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObje
   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("normEnd", 0);
 
-  /* "PETSc/Vec.pyx":501
+  /* "PETSc/Vec.pyx":523
  * 
  *     def normEnd(self, norm_type=None):
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2             # <<<<<<<<<<<<<<
@@ -92556,7 +94678,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObje
  */
   __pyx_v_norm_1_2 = NORM_1_AND_2;
 
-  /* "PETSc/Vec.pyx":502
+  /* "PETSc/Vec.pyx":524
  *     def normEnd(self, norm_type=None):
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_2             # <<<<<<<<<<<<<<
@@ -92565,7 +94687,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObje
  */
   __pyx_v_ntype = NORM_2;
 
-  /* "PETSc/Vec.pyx":503
+  /* "PETSc/Vec.pyx":525
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_2
  *         if norm_type is not None: ntype = norm_type             # <<<<<<<<<<<<<<
@@ -92575,22 +94697,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObje
   __pyx_t_1 = (__pyx_v_norm_type != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = ((NormType)PyInt_AsLong(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 525, __pyx_L1_error)
     __pyx_v_ntype = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":505
+  /* "PETSc/Vec.pyx":527
  *         if norm_type is not None: ntype = norm_type
  *         cdef PetscReal rval[2]
  *         CHKERR( VecNormEnd(self.vec, ntype, rval) )             # <<<<<<<<<<<<<<
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNormEnd(__pyx_v_self->vec, __pyx_v_ntype, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNormEnd(__pyx_v_self->vec, __pyx_v_ntype, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 527, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":506
+  /* "PETSc/Vec.pyx":528
  *         cdef PetscReal rval[2]
  *         CHKERR( VecNormEnd(self.vec, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])             # <<<<<<<<<<<<<<
@@ -92600,27 +94720,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObje
   __pyx_t_2 = ((__pyx_v_ntype != __pyx_v_norm_1_2) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 528, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":507
+  /* "PETSc/Vec.pyx":529
  *         CHKERR( VecNormEnd(self.vec, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))             # <<<<<<<<<<<<<<
  * 
  *     def sum(self):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 529, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 529, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 529, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
@@ -92633,7 +94753,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObje
     goto __pyx_L0;
   }
 
-  /* "PETSc/Vec.pyx":500
+  /* "PETSc/Vec.pyx":522
  *         CHKERR( VecNormBegin(self.vec, ntype, dummy) )
  * 
  *     def normEnd(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -92654,7 +94774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":509
+/* "PETSc/Vec.pyx":531
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def sum(self):             # <<<<<<<<<<<<<<
@@ -92663,34 +94783,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normEnd(struct PyPetscVecObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_143sum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_142sum[] = "Vec.sum(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_143sum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_145sum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_144sum[] = "Vec.sum(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_145sum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("sum (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("sum", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "sum", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_142sum(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_144sum(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142sum(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144sum(struct PyPetscVecObject *__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("sum", 0);
 
-  /* "PETSc/Vec.pyx":510
+  /* "PETSc/Vec.pyx":532
  * 
  *     def sum(self):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -92699,16 +94816,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142sum(struct PyPetscVecObject *
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":511
+  /* "PETSc/Vec.pyx":533
  *     def sum(self):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecSum(self.vec, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSum(__pyx_v_self->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSum(__pyx_v_self->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 533, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":512
+  /* "PETSc/Vec.pyx":534
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecSum(self.vec, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -92716,13 +94833,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142sum(struct PyPetscVecObject *
  *     def min(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 534, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":509
+  /* "PETSc/Vec.pyx":531
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def sum(self):             # <<<<<<<<<<<<<<
@@ -92741,7 +94858,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142sum(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":514
+/* "PETSc/Vec.pyx":536
  *         return toScalar(sval)
  * 
  *     def min(self):             # <<<<<<<<<<<<<<
@@ -92750,23 +94867,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142sum(struct PyPetscVecObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_145min(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_144min[] = "Vec.min(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_145min(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_147min(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_146min[] = "Vec.min(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_147min(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("min (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("min", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "min", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_144min(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_146min(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146min(struct PyPetscVecObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -92775,12 +94892,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *
   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("min", 0);
 
-  /* "PETSc/Vec.pyx":515
+  /* "PETSc/Vec.pyx":537
  * 
  *     def min(self):
  *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
@@ -92789,7 +94903,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/Vec.pyx":516
+  /* "PETSc/Vec.pyx":538
  *     def min(self):
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -92798,16 +94912,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Vec.pyx":517
+  /* "PETSc/Vec.pyx":539
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = 0
  *         CHKERR( VecMin(self.vec, &ival, &rval) )             # <<<<<<<<<<<<<<
  *         return (toInt(ival), toReal(rval))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMin(__pyx_v_self->vec, (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMin(__pyx_v_self->vec, (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 539, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":518
+  /* "PETSc/Vec.pyx":540
  *         cdef PetscReal rval = 0
  *         CHKERR( VecMin(self.vec, &ival, &rval) )
  *         return (toInt(ival), toReal(rval))             # <<<<<<<<<<<<<<
@@ -92815,11 +94929,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *
  *     def max(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -92831,7 +94945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":514
+  /* "PETSc/Vec.pyx":536
  *         return toScalar(sval)
  * 
  *     def min(self):             # <<<<<<<<<<<<<<
@@ -92852,7 +94966,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":520
+/* "PETSc/Vec.pyx":542
  *         return (toInt(ival), toReal(rval))
  * 
  *     def max(self):             # <<<<<<<<<<<<<<
@@ -92861,23 +94975,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144min(struct PyPetscVecObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_147max(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_146max[] = "Vec.max(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_147max(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_149max(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_148max[] = "Vec.max(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_149max(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("max (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("max", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "max", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_146max(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_148max(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148max(struct PyPetscVecObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -92886,12 +95000,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *
   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("max", 0);
 
-  /* "PETSc/Vec.pyx":521
+  /* "PETSc/Vec.pyx":543
  * 
  *     def max(self):
  *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
@@ -92900,7 +95011,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/Vec.pyx":522
+  /* "PETSc/Vec.pyx":544
  *     def max(self):
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -92909,16 +95020,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Vec.pyx":523
+  /* "PETSc/Vec.pyx":545
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = 0
  *         CHKERR( VecMax(self.vec, &ival, &rval) )             # <<<<<<<<<<<<<<
  *         return (toInt(ival), toReal(rval))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMax(__pyx_v_self->vec, (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMax(__pyx_v_self->vec, (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 545, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":524
+  /* "PETSc/Vec.pyx":546
  *         cdef PetscReal rval = 0
  *         CHKERR( VecMax(self.vec, &ival, &rval) )
  *         return (toInt(ival), toReal(rval))             # <<<<<<<<<<<<<<
@@ -92926,11 +95037,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *
  *     def normalize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -92942,7 +95053,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":520
+  /* "PETSc/Vec.pyx":542
  *         return (toInt(ival), toReal(rval))
  * 
  *     def max(self):             # <<<<<<<<<<<<<<
@@ -92963,7 +95074,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":526
+/* "PETSc/Vec.pyx":548
  *         return (toInt(ival), toReal(rval))
  * 
  *     def normalize(self):             # <<<<<<<<<<<<<<
@@ -92972,34 +95083,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146max(struct PyPetscVecObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_149normalize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_148normalize[] = "Vec.normalize(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_149normalize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_151normalize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_150normalize[] = "Vec.normalize(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_151normalize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("normalize (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("normalize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "normalize", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_148normalize(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_150normalize(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148normalize(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_150normalize(struct PyPetscVecObject *__pyx_v_self) {
   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("normalize", 0);
 
-  /* "PETSc/Vec.pyx":527
+  /* "PETSc/Vec.pyx":549
  * 
  *     def normalize(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -93008,16 +95116,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148normalize(struct PyPetscVecOb
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Vec.pyx":528
+  /* "PETSc/Vec.pyx":550
  *     def normalize(self):
  *         cdef PetscReal rval = 0
  *         CHKERR( VecNormalize(self.vec, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNormalize(__pyx_v_self->vec, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNormalize(__pyx_v_self->vec, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 550, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":529
+  /* "PETSc/Vec.pyx":551
  *         cdef PetscReal rval = 0
  *         CHKERR( VecNormalize(self.vec, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -93025,13 +95133,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148normalize(struct PyPetscVecOb
  *     def reciprocal(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 551, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":526
+  /* "PETSc/Vec.pyx":548
  *         return (toInt(ival), toReal(rval))
  * 
  *     def normalize(self):             # <<<<<<<<<<<<<<
@@ -93050,7 +95158,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148normalize(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":531
+/* "PETSc/Vec.pyx":553
  *         return toReal(rval)
  * 
  *     def reciprocal(self):             # <<<<<<<<<<<<<<
@@ -93059,41 +95167,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148normalize(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_151reciprocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_150reciprocal[] = "Vec.reciprocal(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_151reciprocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_153reciprocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_152reciprocal[] = "Vec.reciprocal(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_153reciprocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("reciprocal (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("reciprocal", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reciprocal", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_150reciprocal(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_152reciprocal(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_150reciprocal(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_152reciprocal(struct PyPetscVecObject *__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("reciprocal", 0);
 
-  /* "PETSc/Vec.pyx":532
+  /* "PETSc/Vec.pyx":554
  * 
  *     def reciprocal(self):
  *         CHKERR( VecReciprocal(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def exp(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecReciprocal(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecReciprocal(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 554, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":531
+  /* "PETSc/Vec.pyx":553
  *         return toReal(rval)
  * 
  *     def reciprocal(self):             # <<<<<<<<<<<<<<
@@ -93113,7 +95218,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_150reciprocal(struct PyPetscVecO
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":534
+/* "PETSc/Vec.pyx":556
  *         CHKERR( VecReciprocal(self.vec) )
  * 
  *     def exp(self):             # <<<<<<<<<<<<<<
@@ -93122,41 +95227,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_150reciprocal(struct PyPetscVecO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_153exp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_152exp[] = "Vec.exp(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_153exp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_155exp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_154exp[] = "Vec.exp(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_155exp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("exp (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("exp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "exp", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_152exp(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_154exp(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_152exp(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_154exp(struct PyPetscVecObject *__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("exp", 0);
 
-  /* "PETSc/Vec.pyx":535
+  /* "PETSc/Vec.pyx":557
  * 
  *     def exp(self):
  *         CHKERR( VecExp(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def log(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecExp(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecExp(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 557, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":534
+  /* "PETSc/Vec.pyx":556
  *         CHKERR( VecReciprocal(self.vec) )
  * 
  *     def exp(self):             # <<<<<<<<<<<<<<
@@ -93176,7 +95278,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_152exp(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":537
+/* "PETSc/Vec.pyx":559
  *         CHKERR( VecExp(self.vec) )
  * 
  *     def log(self):             # <<<<<<<<<<<<<<
@@ -93185,41 +95287,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_152exp(struct PyPetscVecObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_155log(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_154log[] = "Vec.log(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_155log(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_157log(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_156log[] = "Vec.log(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_157log(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("log (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("log", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "log", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_154log(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_156log(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_154log(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_156log(struct PyPetscVecObject *__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("log", 0);
 
-  /* "PETSc/Vec.pyx":538
+  /* "PETSc/Vec.pyx":560
  * 
  *     def log(self):
  *         CHKERR( VecLog(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def sqrtabs(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecLog(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecLog(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 560, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":537
+  /* "PETSc/Vec.pyx":559
  *         CHKERR( VecExp(self.vec) )
  * 
  *     def log(self):             # <<<<<<<<<<<<<<
@@ -93239,7 +95338,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_154log(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":540
+/* "PETSc/Vec.pyx":562
  *         CHKERR( VecLog(self.vec) )
  * 
  *     def sqrtabs(self):             # <<<<<<<<<<<<<<
@@ -93248,41 +95347,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_154log(struct PyPetscVecObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_157sqrtabs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_156sqrtabs[] = "Vec.sqrtabs(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_157sqrtabs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_159sqrtabs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_158sqrtabs[] = "Vec.sqrtabs(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_159sqrtabs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("sqrtabs (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("sqrtabs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "sqrtabs", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_156sqrtabs(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_158sqrtabs(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_156sqrtabs(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_158sqrtabs(struct PyPetscVecObject *__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("sqrtabs", 0);
 
-  /* "PETSc/Vec.pyx":541
+  /* "PETSc/Vec.pyx":563
  * 
  *     def sqrtabs(self):
  *         CHKERR( VecSqrtAbs(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def abs(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSqrtAbs(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSqrtAbs(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 563, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":540
+  /* "PETSc/Vec.pyx":562
  *         CHKERR( VecLog(self.vec) )
  * 
  *     def sqrtabs(self):             # <<<<<<<<<<<<<<
@@ -93302,7 +95398,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_156sqrtabs(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":543
+/* "PETSc/Vec.pyx":565
  *         CHKERR( VecSqrtAbs(self.vec) )
  * 
  *     def abs(self):             # <<<<<<<<<<<<<<
@@ -93311,41 +95407,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_156sqrtabs(struct PyPetscVecObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_159abs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_158abs[] = "Vec.abs(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_159abs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_161abs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_160abs[] = "Vec.abs(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_161abs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("abs (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("abs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "abs", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_158abs(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_160abs(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_158abs(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_160abs(struct PyPetscVecObject *__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("abs", 0);
 
-  /* "PETSc/Vec.pyx":544
+  /* "PETSc/Vec.pyx":566
  * 
  *     def abs(self):
  *         CHKERR( VecAbs(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def conjugate(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAbs(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAbs(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 566, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":543
+  /* "PETSc/Vec.pyx":565
  *         CHKERR( VecSqrtAbs(self.vec) )
  * 
  *     def abs(self):             # <<<<<<<<<<<<<<
@@ -93365,7 +95458,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_158abs(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":546
+/* "PETSc/Vec.pyx":568
  *         CHKERR( VecAbs(self.vec) )
  * 
  *     def conjugate(self):             # <<<<<<<<<<<<<<
@@ -93374,41 +95467,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_158abs(struct PyPetscVecObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_161conjugate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_160conjugate[] = "Vec.conjugate(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_161conjugate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_163conjugate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_162conjugate[] = "Vec.conjugate(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_163conjugate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("conjugate (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("conjugate", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "conjugate", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_160conjugate(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_162conjugate(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_160conjugate(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162conjugate(struct PyPetscVecObject *__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("conjugate", 0);
 
-  /* "PETSc/Vec.pyx":547
+  /* "PETSc/Vec.pyx":569
  * 
  *     def conjugate(self):
  *         CHKERR( VecConjugate(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def setRandom(self, Random random=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecConjugate(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecConjugate(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 569, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":546
+  /* "PETSc/Vec.pyx":568
  *         CHKERR( VecAbs(self.vec) )
  * 
  *     def conjugate(self):             # <<<<<<<<<<<<<<
@@ -93428,7 +95518,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_160conjugate(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":549
+/* "PETSc/Vec.pyx":571
  *         CHKERR( VecConjugate(self.vec) )
  * 
  *     def setRandom(self, Random random=None):             # <<<<<<<<<<<<<<
@@ -93437,13 +95527,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_160conjugate(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_163setRandom(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_162setRandom[] = "Vec.setRandom(self, Random random=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_163setRandom(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165setRandom(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_164setRandom[] = "Vec.setRandom(self, Random random=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165setRandom(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscRandomObject *__pyx_v_random = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setRandom (wrapper)", 0);
@@ -93468,7 +95555,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_163setRandom(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRandom") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRandom") < 0)) __PYX_ERR(30, 571, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -93481,14 +95568,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_163setRandom(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRandom", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRandom", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 571, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setRandom", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_random), __pyx_ptype_8petsc4py_5PETSc_Random, 1, "random", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_162setRandom(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_random);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_random), __pyx_ptype_8petsc4py_5PETSc_Random, 1, "random", 0))) __PYX_ERR(30, 571, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_164setRandom(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_random);
 
   /* function exit code */
   goto __pyx_L0;
@@ -93499,7 +95586,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_163setRandom(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162setRandom(struct PyPetscVecObject *__pyx_v_self, struct PyPetscRandomObject *__pyx_v_random) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164setRandom(struct PyPetscVecObject *__pyx_v_self, struct PyPetscRandomObject *__pyx_v_random) {
   PetscRandom __pyx_v_rnd;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -93507,12 +95594,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162setRandom(struct PyPetscVecOb
   int __pyx_t_2;
   PetscRandom __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setRandom", 0);
 
-  /* "PETSc/Vec.pyx":550
+  /* "PETSc/Vec.pyx":572
  * 
  *     def setRandom(self, Random random=None):
  *         cdef PetscRandom rnd = NULL             # <<<<<<<<<<<<<<
@@ -93521,7 +95605,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162setRandom(struct PyPetscVecOb
  */
   __pyx_v_rnd = NULL;
 
-  /* "PETSc/Vec.pyx":551
+  /* "PETSc/Vec.pyx":573
  *     def setRandom(self, Random random=None):
  *         cdef PetscRandom rnd = NULL
  *         if random is not None: rnd = random.rnd             # <<<<<<<<<<<<<<
@@ -93533,20 +95617,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162setRandom(struct PyPetscVecOb
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_random->rnd;
     __pyx_v_rnd = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":552
+  /* "PETSc/Vec.pyx":574
  *         cdef PetscRandom rnd = NULL
  *         if random is not None: rnd = random.rnd
  *         CHKERR( VecSetRandom(self.vec, rnd) )             # <<<<<<<<<<<<<<
  * 
  *     def permute(self, IS order not None, invert=False):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetRandom(__pyx_v_self->vec, __pyx_v_rnd)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetRandom(__pyx_v_self->vec, __pyx_v_rnd)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 574, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":549
+  /* "PETSc/Vec.pyx":571
  *         CHKERR( VecConjugate(self.vec) )
  * 
  *     def setRandom(self, Random random=None):             # <<<<<<<<<<<<<<
@@ -93566,7 +95648,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162setRandom(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":554
+/* "PETSc/Vec.pyx":576
  *         CHKERR( VecSetRandom(self.vec, rnd) )
  * 
  *     def permute(self, IS order not None, invert=False):             # <<<<<<<<<<<<<<
@@ -93575,14 +95657,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162setRandom(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_164permute[] = "Vec.permute(self, IS order, invert=False)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_167permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_166permute[] = "Vec.permute(self, IS order, invert=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_167permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_order = 0;
   PyObject *__pyx_v_invert = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("permute (wrapper)", 0);
@@ -93611,7 +95690,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165permute(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "permute") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "permute") < 0)) __PYX_ERR(30, 576, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -93626,14 +95705,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165permute(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("permute", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("permute", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 576, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.permute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_order), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "order", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_164permute(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_order, __pyx_v_invert);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_order), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "order", 0))) __PYX_ERR(30, 576, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_166permute(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_order, __pyx_v_invert);
 
   /* function exit code */
   goto __pyx_L0;
@@ -93644,18 +95723,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165permute(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164permute(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_order, PyObject *__pyx_v_invert) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166permute(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_order, PyObject *__pyx_v_invert) {
   PetscBool __pyx_v_cinvert;
   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("permute", 0);
 
-  /* "PETSc/Vec.pyx":555
+  /* "PETSc/Vec.pyx":577
  * 
  *     def permute(self, IS order not None, invert=False):
  *         cdef PetscBool cinvert = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -93664,30 +95740,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164permute(struct PyPetscVecObje
  */
   __pyx_v_cinvert = PETSC_FALSE;
 
-  /* "PETSc/Vec.pyx":556
+  /* "PETSc/Vec.pyx":578
  *     def permute(self, IS order not None, invert=False):
  *         cdef PetscBool cinvert = PETSC_FALSE
  *         if invert: cinvert = PETSC_TRUE             # <<<<<<<<<<<<<<
  *         CHKERR( VecPermute(self.vec, order.iset, cinvert) )
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_invert); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_invert); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(30, 578, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_cinvert = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":557
+  /* "PETSc/Vec.pyx":579
  *         cdef PetscBool cinvert = PETSC_FALSE
  *         if invert: cinvert = PETSC_TRUE
  *         CHKERR( VecPermute(self.vec, order.iset, cinvert) )             # <<<<<<<<<<<<<<
  * 
  *     def zeroEntries(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPermute(__pyx_v_self->vec, __pyx_v_order->iset, __pyx_v_cinvert)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPermute(__pyx_v_self->vec, __pyx_v_order->iset, __pyx_v_cinvert)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 579, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":554
+  /* "PETSc/Vec.pyx":576
  *         CHKERR( VecSetRandom(self.vec, rnd) )
  * 
  *     def permute(self, IS order not None, invert=False):             # <<<<<<<<<<<<<<
@@ -93707,7 +95781,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164permute(struct PyPetscVecObje
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":559
+/* "PETSc/Vec.pyx":581
  *         CHKERR( VecPermute(self.vec, order.iset, cinvert) )
  * 
  *     def zeroEntries(self):             # <<<<<<<<<<<<<<
@@ -93716,41 +95790,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164permute(struct PyPetscVecObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_167zeroEntries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_166zeroEntries[] = "Vec.zeroEntries(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_167zeroEntries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_169zeroEntries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_168zeroEntries[] = "Vec.zeroEntries(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_169zeroEntries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("zeroEntries (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("zeroEntries", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "zeroEntries", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_166zeroEntries(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_168zeroEntries(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166zeroEntries(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_168zeroEntries(struct PyPetscVecObject *__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("zeroEntries", 0);
 
-  /* "PETSc/Vec.pyx":560
+  /* "PETSc/Vec.pyx":582
  * 
  *     def zeroEntries(self):
  *         CHKERR( VecZeroEntries(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def set(self, alpha):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecZeroEntries(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecZeroEntries(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 582, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":559
+  /* "PETSc/Vec.pyx":581
  *         CHKERR( VecPermute(self.vec, order.iset, cinvert) )
  * 
  *     def zeroEntries(self):             # <<<<<<<<<<<<<<
@@ -93770,7 +95841,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166zeroEntries(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":562
+/* "PETSc/Vec.pyx":584
  *         CHKERR( VecZeroEntries(self.vec) )
  * 
  *     def set(self, alpha):             # <<<<<<<<<<<<<<
@@ -93779,13 +95850,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166zeroEntries(struct PyPetscVec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_169set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_168set[] = "Vec.set(self, alpha)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_169set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_171set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_170set[] = "Vec.set(self, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_171set(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set (wrapper)", 0);
@@ -93807,7 +95875,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_169set(PyObject *__pyx_v_self, P
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) __PYX_ERR(30, 584, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -93818,50 +95886,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_169set(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 584, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_168set(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_170set(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_168set(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170set(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("set", 0);
 
-  /* "PETSc/Vec.pyx":563
+  /* "PETSc/Vec.pyx":585
  * 
  *     def set(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecSet(self.vec, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 585, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":564
+  /* "PETSc/Vec.pyx":586
  *     def set(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecSet(self.vec, sval) )             # <<<<<<<<<<<<<<
  * 
  *     def isset(self, IS idx not None, alpha):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 586, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":562
+  /* "PETSc/Vec.pyx":584
  *         CHKERR( VecZeroEntries(self.vec) )
  * 
  *     def set(self, alpha):             # <<<<<<<<<<<<<<
@@ -93881,7 +95946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_168set(struct PyPetscVecObject *
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":566
+/* "PETSc/Vec.pyx":588
  *         CHKERR( VecSet(self.vec, sval) )
  * 
  *     def isset(self, IS idx not None, alpha):             # <<<<<<<<<<<<<<
@@ -93890,14 +95955,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_168set(struct PyPetscVecObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_171isset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_170isset[] = "Vec.isset(self, IS idx, alpha)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_171isset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_173isset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_172isset[] = "Vec.isset(self, IS idx, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_173isset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_idx = 0;
   PyObject *__pyx_v_alpha = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isset (wrapper)", 0);
@@ -93921,11 +95983,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_171isset(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("isset", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("isset", 1, 2, 2, 1); __PYX_ERR(30, 588, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isset") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isset") < 0)) __PYX_ERR(30, 588, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -93938,14 +96000,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_171isset(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("isset", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("isset", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 588, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.isset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_idx), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "idx", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_170isset(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_idx, __pyx_v_alpha);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_idx), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "idx", 0))) __PYX_ERR(30, 588, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_172isset(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_idx, __pyx_v_alpha);
 
   /* function exit code */
   goto __pyx_L0;
@@ -93956,37 +96018,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_171isset(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170isset(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_idx, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_172isset(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_idx, PyObject *__pyx_v_alpha) {
   PetscScalar __pyx_v_aval;
   PyObject *__pyx_r = NULL;
   __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("isset", 0);
 
-  /* "PETSc/Vec.pyx":567
+  /* "PETSc/Vec.pyx":589
  * 
  *     def isset(self, IS idx not None, alpha):
  *         cdef PetscScalar aval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecISSet(self.vec, idx.iset, aval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 589, __pyx_L1_error)
   __pyx_v_aval = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":568
+  /* "PETSc/Vec.pyx":590
  *     def isset(self, IS idx not None, alpha):
  *         cdef PetscScalar aval = asScalar(alpha)
  *         CHKERR( VecISSet(self.vec, idx.iset, aval) )             # <<<<<<<<<<<<<<
  * 
  *     def scale(self, alpha):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecISSet(__pyx_v_self->vec, __pyx_v_idx->iset, __pyx_v_aval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecISSet(__pyx_v_self->vec, __pyx_v_idx->iset, __pyx_v_aval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 590, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":566
+  /* "PETSc/Vec.pyx":588
  *         CHKERR( VecSet(self.vec, sval) )
  * 
  *     def isset(self, IS idx not None, alpha):             # <<<<<<<<<<<<<<
@@ -94006,7 +96065,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170isset(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":570
+/* "PETSc/Vec.pyx":592
  *         CHKERR( VecISSet(self.vec, idx.iset, aval) )
  * 
  *     def scale(self, alpha):             # <<<<<<<<<<<<<<
@@ -94015,13 +96074,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170isset(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_173scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_172scale[] = "Vec.scale(self, alpha)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_173scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_175scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_174scale[] = "Vec.scale(self, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_175scale(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("scale (wrapper)", 0);
@@ -94043,7 +96099,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_173scale(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, "scale") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scale") < 0)) __PYX_ERR(30, 592, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -94054,50 +96110,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_173scale(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("scale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("scale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 592, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.scale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_172scale(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_174scale(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_172scale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_174scale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("scale", 0);
 
-  /* "PETSc/Vec.pyx":571
+  /* "PETSc/Vec.pyx":593
  * 
  *     def scale(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecScale(self.vec, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 593, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":572
+  /* "PETSc/Vec.pyx":594
  *     def scale(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecScale(self.vec, sval) )             # <<<<<<<<<<<<<<
  * 
  *     def shift(self, alpha):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 594, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":570
+  /* "PETSc/Vec.pyx":592
  *         CHKERR( VecISSet(self.vec, idx.iset, aval) )
  * 
  *     def scale(self, alpha):             # <<<<<<<<<<<<<<
@@ -94117,7 +96170,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_172scale(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":574
+/* "PETSc/Vec.pyx":596
  *         CHKERR( VecScale(self.vec, sval) )
  * 
  *     def shift(self, alpha):             # <<<<<<<<<<<<<<
@@ -94126,13 +96179,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_172scale(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_175shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_174shift[] = "Vec.shift(self, alpha)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_175shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_177shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_176shift[] = "Vec.shift(self, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_177shift(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("shift (wrapper)", 0);
@@ -94154,7 +96204,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_175shift(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, "shift") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "shift") < 0)) __PYX_ERR(30, 596, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -94165,50 +96215,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_175shift(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("shift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("shift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 596, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.shift", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_174shift(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_176shift(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_174shift(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_176shift(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("shift", 0);
 
-  /* "PETSc/Vec.pyx":575
+  /* "PETSc/Vec.pyx":597
  * 
  *     def shift(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecShift(self.vec, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 597, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":576
+  /* "PETSc/Vec.pyx":598
  *     def shift(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecShift(self.vec, sval) )             # <<<<<<<<<<<<<<
  * 
- *     def swap(self, Vec vec not None):
+ *     def chop(self, tol):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 598, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":574
+  /* "PETSc/Vec.pyx":596
  *         CHKERR( VecScale(self.vec, sval) )
  * 
  *     def shift(self, alpha):             # <<<<<<<<<<<<<<
@@ -94228,22 +96275,124 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_174shift(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":578
+/* "PETSc/Vec.pyx":600
  *         CHKERR( VecShift(self.vec, sval) )
  * 
+ *     def chop(self, tol):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(tol)
+ *         CHKERR( VecChop(self.vec, rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_179chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_178chop[] = "Vec.chop(self, tol)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_179chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tol = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("chop (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,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_tol)) != 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, "chop") < 0)) __PYX_ERR(30, 600, __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_tol = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("chop", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 600, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Vec.chop", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_178chop(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_tol);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178chop(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_tol) {
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscReal __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("chop", 0);
+
+  /* "PETSc/Vec.pyx":601
+ * 
+ *     def chop(self, tol):
+ *         cdef PetscReal rval = asReal(tol)             # <<<<<<<<<<<<<<
+ *         CHKERR( VecChop(self.vec, rval) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(30, 601, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
+
+  /* "PETSc/Vec.pyx":602
+ *     def chop(self, tol):
+ *         cdef PetscReal rval = asReal(tol)
+ *         CHKERR( VecChop(self.vec, rval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def swap(self, Vec vec not None):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecChop(__pyx_v_self->vec, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 602, __pyx_L1_error)
+
+  /* "PETSc/Vec.pyx":600
+ *         CHKERR( VecShift(self.vec, sval) )
+ * 
+ *     def chop(self, tol):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(tol)
+ *         CHKERR( VecChop(self.vec, rval) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Vec.chop", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Vec.pyx":604
+ *         CHKERR( VecChop(self.vec, rval) )
+ * 
  *     def swap(self, Vec vec not None):             # <<<<<<<<<<<<<<
  *         CHKERR( VecSwap(self.vec, vec.vec) )
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_177swap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_176swap[] = "Vec.swap(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_177swap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_181swap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_180swap[] = "Vec.swap(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_181swap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("swap (wrapper)", 0);
@@ -94265,7 +96414,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_177swap(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, "swap") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "swap") < 0)) __PYX_ERR(30, 604, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -94276,14 +96425,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_177swap(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("swap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("swap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 604, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.swap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_176swap(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 604, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_180swap(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -94294,26 +96443,23 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_177swap(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_176swap(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_180swap(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   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("swap", 0);
 
-  /* "PETSc/Vec.pyx":579
+  /* "PETSc/Vec.pyx":605
  * 
  *     def swap(self, Vec vec not None):
  *         CHKERR( VecSwap(self.vec, vec.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def axpy(self, alpha, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSwap(__pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSwap(__pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 605, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":578
- *         CHKERR( VecShift(self.vec, sval) )
+  /* "PETSc/Vec.pyx":604
+ *         CHKERR( VecChop(self.vec, rval) )
  * 
  *     def swap(self, Vec vec not None):             # <<<<<<<<<<<<<<
  *         CHKERR( VecSwap(self.vec, vec.vec) )
@@ -94332,7 +96478,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_176swap(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":581
+/* "PETSc/Vec.pyx":607
  *         CHKERR( VecSwap(self.vec, vec.vec) )
  * 
  *     def axpy(self, alpha, Vec x not None):             # <<<<<<<<<<<<<<
@@ -94341,14 +96487,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_176swap(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_179axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_178axpy[] = "Vec.axpy(self, alpha, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_179axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_182axpy[] = "Vec.axpy(self, alpha, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alpha = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("axpy (wrapper)", 0);
@@ -94372,11 +96515,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_179axpy(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("axpy", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("axpy", 1, 2, 2, 1); __PYX_ERR(30, 607, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "axpy") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "axpy") < 0)) __PYX_ERR(30, 607, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -94389,14 +96532,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_179axpy(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("axpy", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("axpy", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 607, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.axpy", __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[30]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_178axpy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(30, 607, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_182axpy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -94407,37 +96550,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_179axpy(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178axpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_182axpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("axpy", 0);
 
-  /* "PETSc/Vec.pyx":582
+  /* "PETSc/Vec.pyx":608
  * 
  *     def axpy(self, alpha, Vec x not None):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 608, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":583
+  /* "PETSc/Vec.pyx":609
  *     def axpy(self, alpha, Vec x not None):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def isaxpy(self, IS idx not None, alpha, Vec x not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, __pyx_v_sval, __pyx_v_x->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPY(__pyx_v_self->vec, __pyx_v_sval, __pyx_v_x->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 609, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":581
+  /* "PETSc/Vec.pyx":607
  *         CHKERR( VecSwap(self.vec, vec.vec) )
  * 
  *     def axpy(self, alpha, Vec x not None):             # <<<<<<<<<<<<<<
@@ -94457,7 +96597,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178axpy(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":585
+/* "PETSc/Vec.pyx":611
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )
  * 
  *     def isaxpy(self, IS idx not None, alpha, Vec x not None):             # <<<<<<<<<<<<<<
@@ -94466,15 +96606,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178axpy(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_181isaxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_180isaxpy[] = "Vec.isaxpy(self, IS idx, alpha, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_181isaxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185isaxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_184isaxpy[] = "Vec.isaxpy(self, IS idx, alpha, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185isaxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_idx = 0;
   PyObject *__pyx_v_alpha = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isaxpy (wrapper)", 0);
@@ -94499,16 +96636,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_181isaxpy(PyObject *__pyx_v_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("isaxpy", 1, 3, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("isaxpy", 1, 3, 3, 1); __PYX_ERR(30, 611, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("isaxpy", 1, 3, 3, 2); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("isaxpy", 1, 3, 3, 2); __PYX_ERR(30, 611, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isaxpy") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isaxpy") < 0)) __PYX_ERR(30, 611, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -94523,15 +96660,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_181isaxpy(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("isaxpy", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("isaxpy", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 611, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.isaxpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_idx), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "idx", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 585; __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[30]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_180isaxpy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_idx, __pyx_v_alpha, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_idx), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "idx", 0))) __PYX_ERR(30, 611, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(30, 611, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_184isaxpy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_idx, __pyx_v_alpha, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -94542,37 +96679,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_181isaxpy(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_180isaxpy(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_idx, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_184isaxpy(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_idx, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("isaxpy", 0);
 
-  /* "PETSc/Vec.pyx":586
+  /* "PETSc/Vec.pyx":612
  * 
  *     def isaxpy(self, IS idx not None, alpha, Vec x not None):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 612, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":587
+  /* "PETSc/Vec.pyx":613
  *     def isaxpy(self, IS idx not None, alpha, Vec x not None):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def aypx(self, alpha, Vec x not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecISAXPY(__pyx_v_self->vec, __pyx_v_idx->iset, __pyx_v_sval, __pyx_v_x->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecISAXPY(__pyx_v_self->vec, __pyx_v_idx->iset, __pyx_v_sval, __pyx_v_x->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 613, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":585
+  /* "PETSc/Vec.pyx":611
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )
  * 
  *     def isaxpy(self, IS idx not None, alpha, Vec x not None):             # <<<<<<<<<<<<<<
@@ -94592,7 +96726,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_180isaxpy(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":589
+/* "PETSc/Vec.pyx":615
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )
  * 
  *     def aypx(self, alpha, Vec x not None):             # <<<<<<<<<<<<<<
@@ -94601,14 +96735,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_180isaxpy(struct PyPetscVecObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_182aypx[] = "Vec.aypx(self, alpha, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_186aypx[] = "Vec.aypx(self, alpha, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alpha = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("aypx (wrapper)", 0);
@@ -94632,11 +96763,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183aypx(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("aypx", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("aypx", 1, 2, 2, 1); __PYX_ERR(30, 615, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "aypx") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "aypx") < 0)) __PYX_ERR(30, 615, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -94649,14 +96780,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183aypx(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("aypx", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("aypx", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 615, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.aypx", __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[30]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_182aypx(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(30, 615, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_186aypx(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -94667,37 +96798,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183aypx(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_182aypx(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_186aypx(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("aypx", 0);
 
-  /* "PETSc/Vec.pyx":590
+  /* "PETSc/Vec.pyx":616
  * 
  *     def aypx(self, alpha, Vec x not None):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 616, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":591
+  /* "PETSc/Vec.pyx":617
  *     def aypx(self, alpha, Vec x not None):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def axpby(self, alpha, beta, Vec y not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAYPX(__pyx_v_self->vec, __pyx_v_sval, __pyx_v_x->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAYPX(__pyx_v_self->vec, __pyx_v_sval, __pyx_v_x->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 617, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":589
+  /* "PETSc/Vec.pyx":615
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )
  * 
  *     def aypx(self, alpha, Vec x not None):             # <<<<<<<<<<<<<<
@@ -94717,7 +96845,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_182aypx(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":593
+/* "PETSc/Vec.pyx":619
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )
  * 
  *     def axpby(self, alpha, beta, Vec y not None):             # <<<<<<<<<<<<<<
@@ -94726,15 +96854,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_182aypx(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185axpby(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_184axpby[] = "Vec.axpby(self, alpha, beta, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185axpby(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_189axpby(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_188axpby[] = "Vec.axpby(self, alpha, beta, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_189axpby(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;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("axpby (wrapper)", 0);
@@ -94759,16 +96884,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185axpby(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beta)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("axpby", 1, 3, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("axpby", 1, 3, 3, 1); __PYX_ERR(30, 619, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("axpby", 1, 3, 3, 2); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("axpby", 1, 3, 3, 2); __PYX_ERR(30, 619, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "axpby") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "axpby") < 0)) __PYX_ERR(30, 619, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -94783,14 +96908,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185axpby(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("axpby", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("axpby", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 619, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.axpby", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_184axpby(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_beta, __pyx_v_y);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(30, 619, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_188axpby(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_beta, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -94801,48 +96926,45 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185axpby(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_184axpby(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188axpby(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, struct PyPetscVecObject *__pyx_v_y) {
   PetscScalar __pyx_v_sval1;
   PetscScalar __pyx_v_sval2;
   PyObject *__pyx_r = NULL;
   __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("axpby", 0);
 
-  /* "PETSc/Vec.pyx":594
+  /* "PETSc/Vec.pyx":620
  * 
  *     def axpby(self, alpha, beta, Vec y not None):
  *         cdef PetscScalar sval1 = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval2 = asScalar(beta)
  *         CHKERR( VecAXPBY(self.vec, sval1, sval2, y.vec) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 620, __pyx_L1_error)
   __pyx_v_sval1 = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":595
+  /* "PETSc/Vec.pyx":621
  *     def axpby(self, alpha, beta, Vec y not None):
  *         cdef PetscScalar sval1 = asScalar(alpha)
  *         cdef PetscScalar sval2 = asScalar(beta)             # <<<<<<<<<<<<<<
  *         CHKERR( VecAXPBY(self.vec, sval1, sval2, y.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_beta); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_beta); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 621, __pyx_L1_error)
   __pyx_v_sval2 = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":596
+  /* "PETSc/Vec.pyx":622
  *         cdef PetscScalar sval1 = asScalar(alpha)
  *         cdef PetscScalar sval2 = asScalar(beta)
  *         CHKERR( VecAXPBY(self.vec, sval1, sval2, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def waxpy(self, alpha, Vec x not None, Vec y not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPBY(__pyx_v_self->vec, __pyx_v_sval1, __pyx_v_sval2, __pyx_v_y->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAXPBY(__pyx_v_self->vec, __pyx_v_sval1, __pyx_v_sval2, __pyx_v_y->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 622, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":593
+  /* "PETSc/Vec.pyx":619
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )
  * 
  *     def axpby(self, alpha, beta, Vec y not None):             # <<<<<<<<<<<<<<
@@ -94862,7 +96984,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_184axpby(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":598
+/* "PETSc/Vec.pyx":624
  *         CHKERR( VecAXPBY(self.vec, sval1, sval2, y.vec) )
  * 
  *     def waxpy(self, alpha, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -94871,15 +96993,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_184axpby(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187waxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_186waxpy[] = "Vec.waxpy(self, alpha, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187waxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191waxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_190waxpy[] = "Vec.waxpy(self, alpha, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191waxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alpha = 0;
   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("waxpy (wrapper)", 0);
@@ -94904,16 +97023,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187waxpy(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("waxpy", 1, 3, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("waxpy", 1, 3, 3, 1); __PYX_ERR(30, 624, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("waxpy", 1, 3, 3, 2); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("waxpy", 1, 3, 3, 2); __PYX_ERR(30, 624, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "waxpy") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "waxpy") < 0)) __PYX_ERR(30, 624, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -94928,15 +97047,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187waxpy(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("waxpy", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("waxpy", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 624, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.waxpy", __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[30]; __pyx_lineno = 598; __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[30]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_186waxpy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_x, __pyx_v_y);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(30, 624, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(30, 624, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_190waxpy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -94947,37 +97066,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187waxpy(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_186waxpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_190waxpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("waxpy", 0);
 
-  /* "PETSc/Vec.pyx":599
+  /* "PETSc/Vec.pyx":625
  * 
  *     def waxpy(self, alpha, Vec x not None, Vec y not None):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecWAXPY(self.vec, sval, x.vec, y.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 625, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":600
+  /* "PETSc/Vec.pyx":626
  *     def waxpy(self, alpha, Vec x not None, Vec y not None):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecWAXPY(self.vec, sval, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def maxpy(self, alphas, vecs):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecWAXPY(__pyx_v_self->vec, __pyx_v_sval, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecWAXPY(__pyx_v_self->vec, __pyx_v_sval, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 626, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":598
+  /* "PETSc/Vec.pyx":624
  *         CHKERR( VecAXPBY(self.vec, sval1, sval2, y.vec) )
  * 
  *     def waxpy(self, alpha, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -94997,7 +97113,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_186waxpy(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":602
+/* "PETSc/Vec.pyx":628
  *         CHKERR( VecWAXPY(self.vec, sval, x.vec, y.vec) )
  * 
  *     def maxpy(self, alphas, vecs):             # <<<<<<<<<<<<<<
@@ -95006,14 +97122,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_186waxpy(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_189maxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_188maxpy[] = "Vec.maxpy(self, alphas, vecs)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_189maxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193maxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_192maxpy[] = "Vec.maxpy(self, alphas, vecs)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193maxpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alphas = 0;
   PyObject *__pyx_v_vecs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("maxpy (wrapper)", 0);
@@ -95037,11 +97150,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_189maxpy(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("maxpy", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("maxpy", 1, 2, 2, 1); __PYX_ERR(30, 628, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "maxpy") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "maxpy") < 0)) __PYX_ERR(30, 628, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -95054,20 +97167,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_189maxpy(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("maxpy", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("maxpy", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 628, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.maxpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alphas, __pyx_v_vecs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_192maxpy(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_alphas, __pyx_v_vecs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alphas, PyObject *__pyx_v_vecs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192maxpy(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_alphas, PyObject *__pyx_v_vecs) {
   PetscInt __pyx_v_n;
   PetscScalar *__pyx_v_a;
   Vec *__pyx_v_v;
@@ -95082,12 +97195,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
   PetscInt __pyx_t_4;
   Vec __pyx_t_5;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("maxpy", 0);
 
-  /* "PETSc/Vec.pyx":603
+  /* "PETSc/Vec.pyx":629
  * 
  *     def maxpy(self, alphas, vecs):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -95096,7 +97206,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/Vec.pyx":604
+  /* "PETSc/Vec.pyx":630
  *     def maxpy(self, alphas, vecs):
  *         cdef PetscInt n = 0
  *         cdef PetscScalar *a = NULL             # <<<<<<<<<<<<<<
@@ -95105,7 +97215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
  */
   __pyx_v_a = NULL;
 
-  /* "PETSc/Vec.pyx":605
+  /* "PETSc/Vec.pyx":631
  *         cdef PetscInt n = 0
  *         cdef PetscScalar *a = NULL
  *         cdef PetscVec *v = NULL             # <<<<<<<<<<<<<<
@@ -95114,34 +97224,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/Vec.pyx":606
+  /* "PETSc/Vec.pyx":632
  *         cdef PetscScalar *a = NULL
  *         cdef PetscVec *v = NULL
  *         cdef object tmp1 = iarray_s(alphas, &n, &a)             # <<<<<<<<<<<<<<
  *         cdef object tmp2 = oarray_p(empty_p(n),NULL, <void**>&v)
  *         assert n == len(vecs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_alphas, (&__pyx_v_n), (&__pyx_v_a))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_alphas, (&__pyx_v_n), (&__pyx_v_a))); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 632, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tmp1 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":607
+  /* "PETSc/Vec.pyx":633
  *         cdef PetscVec *v = NULL
  *         cdef object tmp1 = iarray_s(alphas, &n, &a)
  *         cdef object tmp2 = oarray_p(empty_p(n),NULL, <void**>&v)             # <<<<<<<<<<<<<<
  *         assert n == len(vecs)
  *         cdef Py_ssize_t i=0
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 633, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_1, NULL, ((void **)(&__pyx_v_v)))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_1, NULL, ((void **)(&__pyx_v_v)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 633, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_tmp2 = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":608
+  /* "PETSc/Vec.pyx":634
  *         cdef object tmp1 = iarray_s(alphas, &n, &a)
  *         cdef object tmp2 = oarray_p(empty_p(n),NULL, <void**>&v)
  *         assert n == len(vecs)             # <<<<<<<<<<<<<<
@@ -95150,15 +97260,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_3 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 634, __pyx_L1_error)
     if (unlikely(!((__pyx_v_n == __pyx_t_3) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[30]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(30, 634, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/Vec.pyx":609
+  /* "PETSc/Vec.pyx":635
  *         cdef object tmp2 = oarray_p(empty_p(n),NULL, <void**>&v)
  *         assert n == len(vecs)
  *         cdef Py_ssize_t i=0             # <<<<<<<<<<<<<<
@@ -95167,7 +97277,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
  */
   __pyx_v_i = 0;
 
-  /* "PETSc/Vec.pyx":610
+  /* "PETSc/Vec.pyx":636
  *         assert n == len(vecs)
  *         cdef Py_ssize_t i=0
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
@@ -95177,31 +97287,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
   __pyx_t_4 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
 
-    /* "PETSc/Vec.pyx":611
+    /* "PETSc/Vec.pyx":637
  *         cdef Py_ssize_t i=0
  *         for i from 0 <= i < n:
  *             v[i] = (<Vec?>(vecs[i])).vec             # <<<<<<<<<<<<<<
  *         CHKERR( VecMAXPY(self.vec, n, a, v) )
  * 
  */
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_vecs, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_vecs, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 637, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(30, 637, __pyx_L1_error)
     __pyx_t_5 = ((struct PyPetscVecObject *)__pyx_t_2)->vec;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     (__pyx_v_v[__pyx_v_i]) = __pyx_t_5;
   }
 
-  /* "PETSc/Vec.pyx":612
+  /* "PETSc/Vec.pyx":638
  *         for i from 0 <= i < n:
  *             v[i] = (<Vec?>(vecs[i])).vec
  *         CHKERR( VecMAXPY(self.vec, n, a, v) )             # <<<<<<<<<<<<<<
  * 
  *     def pointwiseMult(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMAXPY(__pyx_v_self->vec, __pyx_v_n, __pyx_v_a, __pyx_v_v)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMAXPY(__pyx_v_self->vec, __pyx_v_n, __pyx_v_a, __pyx_v_v)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(30, 638, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":602
+  /* "PETSc/Vec.pyx":628
  *         CHKERR( VecWAXPY(self.vec, sval, x.vec, y.vec) )
  * 
  *     def maxpy(self, alphas, vecs):             # <<<<<<<<<<<<<<
@@ -95225,7 +97335,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":614
+/* "PETSc/Vec.pyx":640
  *         CHKERR( VecMAXPY(self.vec, n, a, v) )
  * 
  *     def pointwiseMult(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95234,14 +97344,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188maxpy(struct PyPetscVecObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191pointwiseMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_190pointwiseMult[] = "Vec.pointwiseMult(self, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191pointwiseMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_194pointwiseMult[] = "Vec.pointwiseMult(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMult(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("pointwiseMult (wrapper)", 0);
@@ -95265,11 +97372,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191pointwiseMult(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("pointwiseMult", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("pointwiseMult", 1, 2, 2, 1); __PYX_ERR(30, 640, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseMult") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseMult") < 0)) __PYX_ERR(30, 640, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -95282,15 +97389,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191pointwiseMult(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pointwiseMult", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pointwiseMult", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 640, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.pointwiseMult", __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[30]; __pyx_lineno = 614; __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[30]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_190pointwiseMult(((struct PyPetscVecObject *)__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(30, 640, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(30, 640, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMult(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -95301,25 +97408,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191pointwiseMult(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_190pointwiseMult(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMult(struct PyPetscVecObject *__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("pointwiseMult", 0);
 
-  /* "PETSc/Vec.pyx":615
+  /* "PETSc/Vec.pyx":641
  * 
  *     def pointwiseMult(self, Vec x not None, Vec y not None):
  *         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def pointwiseDivide(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMult(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMult(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 641, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":614
+  /* "PETSc/Vec.pyx":640
  *         CHKERR( VecMAXPY(self.vec, n, a, v) )
  * 
  *     def pointwiseMult(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95339,7 +97443,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_190pointwiseMult(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":617
+/* "PETSc/Vec.pyx":643
  *         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )
  * 
  *     def pointwiseDivide(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95348,14 +97452,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_190pointwiseMult(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193pointwiseDivide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_192pointwiseDivide[] = "Vec.pointwiseDivide(self, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193pointwiseDivide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseDivide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_196pointwiseDivide[] = "Vec.pointwiseDivide(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseDivide(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("pointwiseDivide (wrapper)", 0);
@@ -95379,11 +97480,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193pointwiseDivide(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("pointwiseDivide", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("pointwiseDivide", 1, 2, 2, 1); __PYX_ERR(30, 643, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseDivide") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseDivide") < 0)) __PYX_ERR(30, 643, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -95396,15 +97497,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193pointwiseDivide(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pointwiseDivide", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pointwiseDivide", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 643, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.pointwiseDivide", __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[30]; __pyx_lineno = 617; __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[30]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_192pointwiseDivide(((struct PyPetscVecObject *)__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(30, 643, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(30, 643, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseDivide(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -95415,25 +97516,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193pointwiseDivide(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192pointwiseDivide(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseDivide(struct PyPetscVecObject *__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("pointwiseDivide", 0);
 
-  /* "PETSc/Vec.pyx":618
+  /* "PETSc/Vec.pyx":644
  * 
  *     def pointwiseDivide(self, Vec x not None, Vec y not None):
  *         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def pointwiseMin(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseDivide(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseDivide(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 644, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":617
+  /* "PETSc/Vec.pyx":643
  *         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )
  * 
  *     def pointwiseDivide(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95453,7 +97551,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192pointwiseDivide(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":620
+/* "PETSc/Vec.pyx":646
  *         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )
  * 
  *     def pointwiseMin(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95462,14 +97560,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192pointwiseDivide(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_194pointwiseMin[] = "Vec.pointwiseMin(self, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_198pointwiseMin[] = "Vec.pointwiseMin(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMin(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("pointwiseMin (wrapper)", 0);
@@ -95493,11 +97588,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMin(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("pointwiseMin", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("pointwiseMin", 1, 2, 2, 1); __PYX_ERR(30, 646, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseMin") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseMin") < 0)) __PYX_ERR(30, 646, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -95510,15 +97605,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMin(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pointwiseMin", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pointwiseMin", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 646, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.pointwiseMin", __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[30]; __pyx_lineno = 620; __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[30]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMin(((struct PyPetscVecObject *)__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(30, 646, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(30, 646, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -95529,25 +97624,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMin(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMin(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMin(struct PyPetscVecObject *__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("pointwiseMin", 0);
 
-  /* "PETSc/Vec.pyx":621
+  /* "PETSc/Vec.pyx":647
  * 
  *     def pointwiseMin(self, Vec x not None, Vec y not None):
  *         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def pointwiseMax(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMin(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMin(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 647, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":620
+  /* "PETSc/Vec.pyx":646
  *         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )
  * 
  *     def pointwiseMin(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95567,7 +97659,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMin(struct PyPetscVe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":623
+/* "PETSc/Vec.pyx":649
  *         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )
  * 
  *     def pointwiseMax(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95576,14 +97668,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMin(struct PyPetscVe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_196pointwiseMax[] = "Vec.pointwiseMax(self, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201pointwiseMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_200pointwiseMax[] = "Vec.pointwiseMax(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201pointwiseMax(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("pointwiseMax (wrapper)", 0);
@@ -95607,11 +97696,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseMax(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("pointwiseMax", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("pointwiseMax", 1, 2, 2, 1); __PYX_ERR(30, 649, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseMax") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseMax") < 0)) __PYX_ERR(30, 649, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -95624,15 +97713,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseMax(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pointwiseMax", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pointwiseMax", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 649, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.pointwiseMax", __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[30]; __pyx_lineno = 623; __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[30]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseMax(((struct PyPetscVecObject *)__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(30, 649, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(30, 649, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_200pointwiseMax(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -95643,25 +97732,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseMax(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseMax(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200pointwiseMax(struct PyPetscVecObject *__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("pointwiseMax", 0);
 
-  /* "PETSc/Vec.pyx":624
+  /* "PETSc/Vec.pyx":650
  * 
  *     def pointwiseMax(self, Vec x not None, Vec y not None):
  *         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def pointwiseMaxAbs(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMax(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMax(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 650, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":623
+  /* "PETSc/Vec.pyx":649
  *         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )
  * 
  *     def pointwiseMax(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95681,7 +97767,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseMax(struct PyPetscVe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":626
+/* "PETSc/Vec.pyx":652
  *         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )
  * 
  *     def pointwiseMaxAbs(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95690,14 +97776,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseMax(struct PyPetscVe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMaxAbs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_198pointwiseMaxAbs[] = "Vec.pointwiseMaxAbs(self, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMaxAbs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_203pointwiseMaxAbs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_202pointwiseMaxAbs[] = "Vec.pointwiseMaxAbs(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_203pointwiseMaxAbs(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("pointwiseMaxAbs (wrapper)", 0);
@@ -95721,11 +97804,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMaxAbs(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("pointwiseMaxAbs", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("pointwiseMaxAbs", 1, 2, 2, 1); __PYX_ERR(30, 652, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseMaxAbs") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pointwiseMaxAbs") < 0)) __PYX_ERR(30, 652, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -95738,15 +97821,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMaxAbs(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pointwiseMaxAbs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pointwiseMaxAbs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 652, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.pointwiseMaxAbs", __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[30]; __pyx_lineno = 626; __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[30]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMaxAbs(((struct PyPetscVecObject *)__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(30, 652, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(30, 652, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_202pointwiseMaxAbs(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -95757,25 +97840,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMaxAbs(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMaxAbs(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202pointwiseMaxAbs(struct PyPetscVecObject *__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("pointwiseMaxAbs", 0);
 
-  /* "PETSc/Vec.pyx":627
+  /* "PETSc/Vec.pyx":653
  * 
  *     def pointwiseMaxAbs(self, Vec x not None, Vec y not None):
  *         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def maxPointwiseDivide(self, Vec vec not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMaxAbs(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPointwiseMaxAbs(__pyx_v_self->vec, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 653, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":626
+  /* "PETSc/Vec.pyx":652
  *         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )
  * 
  *     def pointwiseMaxAbs(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -95795,7 +97875,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMaxAbs(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":629
+/* "PETSc/Vec.pyx":655
  *         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )
  * 
  *     def maxPointwiseDivide(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -95804,13 +97884,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMaxAbs(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201maxPointwiseDivide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide[] = "Vec.maxPointwiseDivide(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201maxPointwiseDivide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_205maxPointwiseDivide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_204maxPointwiseDivide[] = "Vec.maxPointwiseDivide(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_205maxPointwiseDivide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("maxPointwiseDivide (wrapper)", 0);
@@ -95832,7 +97909,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201maxPointwiseDivide(PyObject *
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "maxPointwiseDivide") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "maxPointwiseDivide") < 0)) __PYX_ERR(30, 655, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -95843,14 +97920,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201maxPointwiseDivide(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("maxPointwiseDivide", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("maxPointwiseDivide", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 655, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.maxPointwiseDivide", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 655, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_204maxPointwiseDivide(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -95861,18 +97938,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201maxPointwiseDivide(PyObject *
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204maxPointwiseDivide(struct PyPetscVecObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   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("maxPointwiseDivide", 0);
 
-  /* "PETSc/Vec.pyx":630
+  /* "PETSc/Vec.pyx":656
  * 
  *     def maxPointwiseDivide(self, Vec vec not None):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -95881,16 +97955,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide(struct PyP
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Vec.pyx":631
+  /* "PETSc/Vec.pyx":657
  *     def maxPointwiseDivide(self, Vec vec not None):
  *         cdef PetscReal rval = 0
  *         CHKERR( VecMaxPointwiseDivide(self.vec, vec.vec, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMaxPointwiseDivide(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMaxPointwiseDivide(__pyx_v_self->vec, __pyx_v_vec->vec, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 657, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":632
+  /* "PETSc/Vec.pyx":658
  *         cdef PetscReal rval = 0
  *         CHKERR( VecMaxPointwiseDivide(self.vec, vec.vec, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -95898,13 +97972,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide(struct PyP
  *     def getValue(self, index):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 658, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":629
+  /* "PETSc/Vec.pyx":655
  *         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )
  * 
  *     def maxPointwiseDivide(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -95923,7 +97997,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":634
+/* "PETSc/Vec.pyx":660
  *         return toReal(rval)
  * 
  *     def getValue(self, index):             # <<<<<<<<<<<<<<
@@ -95932,13 +98006,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_203getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_202getValue[] = "Vec.getValue(self, index)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_203getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_207getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_206getValue[] = "Vec.getValue(self, index)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_207getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_index = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getValue (wrapper)", 0);
@@ -95960,7 +98031,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_203getValue(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, "getValue") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValue") < 0)) __PYX_ERR(30, 660, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -95971,20 +98042,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_203getValue(PyObject *__pyx_v_se
   }
   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[30]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getValue", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 660, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.getValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_202getValue(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_index);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_206getValue(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_index);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202getValue(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206getValue(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index) {
   PetscInt __pyx_v_ival;
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
@@ -95992,22 +98063,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202getValue(struct PyPetscVecObj
   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("getValue", 0);
 
-  /* "PETSc/Vec.pyx":635
+  /* "PETSc/Vec.pyx":661
  * 
  *     def getValue(self, index):
  *         cdef PetscInt    ival = asInt(index)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecGetValues(self.vec, 1, &ival, &sval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 661, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":636
+  /* "PETSc/Vec.pyx":662
  *     def getValue(self, index):
  *         cdef PetscInt    ival = asInt(index)
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -96016,16 +98084,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202getValue(struct PyPetscVecObj
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":637
+  /* "PETSc/Vec.pyx":663
  *         cdef PetscInt    ival = asInt(index)
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecGetValues(self.vec, 1, &ival, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetValues(__pyx_v_self->vec, 1, (&__pyx_v_ival), (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetValues(__pyx_v_self->vec, 1, (&__pyx_v_ival), (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 663, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":638
+  /* "PETSc/Vec.pyx":664
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecGetValues(self.vec, 1, &ival, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -96033,13 +98101,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202getValue(struct PyPetscVecObj
  *     def getValues(self, indices, values=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":634
+  /* "PETSc/Vec.pyx":660
  *         return toReal(rval)
  * 
  *     def getValue(self, index):             # <<<<<<<<<<<<<<
@@ -96058,7 +98126,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202getValue(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":640
+/* "PETSc/Vec.pyx":666
  *         return toScalar(sval)
  * 
  *     def getValues(self, indices, values=None):             # <<<<<<<<<<<<<<
@@ -96067,14 +98135,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202getValue(struct PyPetscVecObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_205getValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_204getValues[] = "Vec.getValues(self, indices, values=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_205getValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209getValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_208getValues[] = "Vec.getValues(self, indices, values=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209getValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_values = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getValues (wrapper)", 0);
@@ -96103,7 +98168,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_205getValues(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValues") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValues") < 0)) __PYX_ERR(30, 666, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -96118,29 +98183,26 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_205getValues(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getValues", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getValues", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 666, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.getValues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_204getValues(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_208getValues(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204getValues(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_208getValues(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values) {
   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("getValues", 0);
 
-  /* "PETSc/Vec.pyx":641
+  /* "PETSc/Vec.pyx":667
  * 
  *     def getValues(self, indices, values=None):
  *         return vecgetvalues(self.vec, indices, values)             # <<<<<<<<<<<<<<
@@ -96148,13 +98210,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204getValues(struct PyPetscVecOb
  *     def setValue(self, index, value, addv=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecgetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecgetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 667, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":640
+  /* "PETSc/Vec.pyx":666
  *         return toScalar(sval)
  * 
  *     def getValues(self, indices, values=None):             # <<<<<<<<<<<<<<
@@ -96173,7 +98235,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204getValues(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":643
+/* "PETSc/Vec.pyx":669
  *         return vecgetvalues(self.vec, indices, values)
  * 
  *     def setValue(self, index, value, addv=None):             # <<<<<<<<<<<<<<
@@ -96182,15 +98244,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204getValues(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_207setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_206setValue[] = "Vec.setValue(self, index, value, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_207setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_210setValue[] = "Vec.setValue(self, index, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_index = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValue (wrapper)", 0);
@@ -96216,7 +98275,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_207setValue(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValue", 0, 2, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValue", 0, 2, 3, 1); __PYX_ERR(30, 669, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -96225,7 +98284,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_207setValue(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValue") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValue") < 0)) __PYX_ERR(30, 669, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -96242,20 +98301,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_207setValue(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValue", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValue", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 669, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_206setValue(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_index, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_210setValue(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_index, __pyx_v_value, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206setValue(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValue(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
   PetscInt __pyx_v_ival;
   PetscScalar __pyx_v_sval;
   InsertMode __pyx_v_caddv;
@@ -96265,51 +98324,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206setValue(struct PyPetscVecObj
   PetscScalar __pyx_t_2;
   InsertMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setValue", 0);
 
-  /* "PETSc/Vec.pyx":644
+  /* "PETSc/Vec.pyx":670
  * 
  *     def setValue(self, index, value, addv=None):
  *         cdef PetscInt    ival = asInt(index)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 670, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":645
+  /* "PETSc/Vec.pyx":671
  *     def setValue(self, index, value, addv=None):
  *         cdef PetscInt    ival = asInt(index)
  *         cdef PetscScalar sval = asScalar(value)             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( VecSetValues(self.vec, 1, &ival, &sval, caddv) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 671, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":646
+  /* "PETSc/Vec.pyx":672
  *         cdef PetscInt    ival = asInt(index)
  *         cdef PetscScalar sval = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetValues(self.vec, 1, &ival, &sval, caddv) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)-1L))) __PYX_ERR(30, 672, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_3;
 
-  /* "PETSc/Vec.pyx":647
+  /* "PETSc/Vec.pyx":673
  *         cdef PetscScalar sval = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( VecSetValues(self.vec, 1, &ival, &sval, caddv) )             # <<<<<<<<<<<<<<
  * 
  *     def setValues(self, indices, values, addv=None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetValues(__pyx_v_self->vec, 1, (&__pyx_v_ival), (&__pyx_v_sval), __pyx_v_caddv)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetValues(__pyx_v_self->vec, 1, (&__pyx_v_ival), (&__pyx_v_sval), __pyx_v_caddv)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 673, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":643
+  /* "PETSc/Vec.pyx":669
  *         return vecgetvalues(self.vec, indices, values)
  * 
  *     def setValue(self, index, value, addv=None):             # <<<<<<<<<<<<<<
@@ -96329,7 +98385,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206setValue(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":649
+/* "PETSc/Vec.pyx":675
  *         CHKERR( VecSetValues(self.vec, 1, &ival, &sval, caddv) )
  * 
  *     def setValues(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -96338,15 +98394,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206setValue(struct PyPetscVecObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209setValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_208setValues[] = "Vec.setValues(self, indices, values, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209setValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_212setValues[] = "Vec.setValues(self, indices, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_values = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValues (wrapper)", 0);
@@ -96372,7 +98425,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209setValues(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValues", 0, 2, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValues", 0, 2, 3, 1); __PYX_ERR(30, 675, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -96381,7 +98434,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209setValues(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValues") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValues") < 0)) __PYX_ERR(30, 675, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -96398,38 +98451,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209setValues(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValues", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValues", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 675, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setValues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_208setValues(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_212setValues(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_208setValues(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_212setValues(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
   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("setValues", 0);
 
-  /* "PETSc/Vec.pyx":650
+  /* "PETSc/Vec.pyx":676
  * 
  *     def setValues(self, indices, values, addv=None):
  *         vecsetvalues(self.vec, indices, values, addv, 0, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlocked(self, indices, values, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values, __pyx_v_addv, 0, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values, __pyx_v_addv, 0, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 676, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":649
+  /* "PETSc/Vec.pyx":675
  *         CHKERR( VecSetValues(self.vec, 1, &ival, &sval, caddv) )
  * 
  *     def setValues(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -96449,7 +98499,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_208setValues(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":652
+/* "PETSc/Vec.pyx":678
  *         vecsetvalues(self.vec, indices, values, addv, 0, 0)
  * 
  *     def setValuesBlocked(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -96458,15 +98508,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_208setValues(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValuesBlocked(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_210setValuesBlocked[] = "Vec.setValuesBlocked(self, indices, values, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValuesBlocked(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValuesBlocked(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_214setValuesBlocked[] = "Vec.setValuesBlocked(self, indices, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValuesBlocked(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_values = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlocked (wrapper)", 0);
@@ -96492,7 +98539,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValuesBlocked(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 2, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 2, 3, 1); __PYX_ERR(30, 678, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -96501,7 +98548,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValuesBlocked(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlocked") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlocked") < 0)) __PYX_ERR(30, 678, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -96518,38 +98565,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValuesBlocked(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 678, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setValuesBlocked", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_210setValuesBlocked(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_214setValuesBlocked(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValuesBlocked(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValuesBlocked(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
   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("setValuesBlocked", 0);
 
-  /* "PETSc/Vec.pyx":653
+  /* "PETSc/Vec.pyx":679
  * 
  *     def setValuesBlocked(self, indices, values, addv=None):
  *         vecsetvalues(self.vec, indices, values, addv, 1, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setLGMap(self, LGMap lgmap not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values, __pyx_v_addv, 1, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values, __pyx_v_addv, 1, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 679, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":652
+  /* "PETSc/Vec.pyx":678
  *         vecsetvalues(self.vec, indices, values, addv, 0, 0)
  * 
  *     def setValuesBlocked(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -96569,7 +98613,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValuesBlocked(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":655
+/* "PETSc/Vec.pyx":681
  *         vecsetvalues(self.vec, indices, values, addv, 1, 0)
  * 
  *     def setLGMap(self, LGMap lgmap not None):             # <<<<<<<<<<<<<<
@@ -96578,13 +98622,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValuesBlocked(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_212setLGMap[] = "Vec.setLGMap(self, LGMap lgmap)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_217setLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_216setLGMap[] = "Vec.setLGMap(self, LGMap lgmap)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_217setLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscLGMapObject *__pyx_v_lgmap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setLGMap (wrapper)", 0);
@@ -96606,7 +98647,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setLGMap(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, "setLGMap") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLGMap") < 0)) __PYX_ERR(30, 681, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -96617,14 +98658,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setLGMap(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLGMap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLGMap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 681, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setLGMap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lgmap), __pyx_ptype_8petsc4py_5PETSc_LGMap, 0, "lgmap", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_212setLGMap(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_lgmap);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lgmap), __pyx_ptype_8petsc4py_5PETSc_LGMap, 0, "lgmap", 0))) __PYX_ERR(30, 681, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_216setLGMap(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_lgmap);
 
   /* function exit code */
   goto __pyx_L0;
@@ -96635,25 +98676,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setLGMap(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_212setLGMap(struct PyPetscVecObject *__pyx_v_self, struct PyPetscLGMapObject *__pyx_v_lgmap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_216setLGMap(struct PyPetscVecObject *__pyx_v_self, struct PyPetscLGMapObject *__pyx_v_lgmap) {
   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("setLGMap", 0);
 
-  /* "PETSc/Vec.pyx":656
+  /* "PETSc/Vec.pyx":682
  * 
  *     def setLGMap(self, LGMap lgmap not None):
  *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )             # <<<<<<<<<<<<<<
  * 
  *     def setValueLocal(self, index, value, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetLocalToGlobalMapping(__pyx_v_self->vec, __pyx_v_lgmap->lgm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetLocalToGlobalMapping(__pyx_v_self->vec, __pyx_v_lgmap->lgm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 682, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":655
+  /* "PETSc/Vec.pyx":681
  *         vecsetvalues(self.vec, indices, values, addv, 1, 0)
  * 
  *     def setLGMap(self, LGMap lgmap not None):             # <<<<<<<<<<<<<<
@@ -96673,7 +98711,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_212setLGMap(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":658
+/* "PETSc/Vec.pyx":684
  *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )
  * 
  *     def setValueLocal(self, index, value, addv=None):             # <<<<<<<<<<<<<<
@@ -96682,15 +98720,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_212setLGMap(struct PyPetscVecObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_214setValueLocal[] = "Vec.setValueLocal(self, index, value, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_218setValueLocal[] = "Vec.setValueLocal(self, index, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_index = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValueLocal (wrapper)", 0);
@@ -96716,7 +98751,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValueLocal(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 2, 3, 1); __PYX_ERR(30, 684, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -96725,7 +98760,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValueLocal(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueLocal") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueLocal") < 0)) __PYX_ERR(30, 684, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -96742,20 +98777,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValueLocal(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 684, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setValueLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_214setValueLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_index, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_218setValueLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_index, __pyx_v_value, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValueLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValueLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
   PetscInt __pyx_v_ival;
   PetscScalar __pyx_v_sval;
   InsertMode __pyx_v_caddv;
@@ -96765,51 +98800,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValueLocal(struct PyPetscV
   PetscScalar __pyx_t_2;
   InsertMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setValueLocal", 0);
 
-  /* "PETSc/Vec.pyx":659
+  /* "PETSc/Vec.pyx":685
  * 
  *     def setValueLocal(self, index, value, addv=None):
  *         cdef PetscInt    ival = asInt(index)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 685, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":660
+  /* "PETSc/Vec.pyx":686
  *     def setValueLocal(self, index, value, addv=None):
  *         cdef PetscInt    ival = asInt(index)
  *         cdef PetscScalar sval = asScalar(value)             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( VecSetValuesLocal(self.vec, 1, &ival, &sval, caddv) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 686, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":661
+  /* "PETSc/Vec.pyx":687
  *         cdef PetscInt    ival = asInt(index)
  *         cdef PetscScalar sval = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetValuesLocal(self.vec, 1, &ival, &sval, caddv) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)-1L))) __PYX_ERR(30, 687, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_3;
 
-  /* "PETSc/Vec.pyx":662
+  /* "PETSc/Vec.pyx":688
  *         cdef PetscScalar sval = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( VecSetValuesLocal(self.vec, 1, &ival, &sval, caddv) )             # <<<<<<<<<<<<<<
  * 
  *     def setValuesLocal(self, indices, values, addv=None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetValuesLocal(__pyx_v_self->vec, 1, (&__pyx_v_ival), (&__pyx_v_sval), __pyx_v_caddv)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetValuesLocal(__pyx_v_self->vec, 1, (&__pyx_v_ival), (&__pyx_v_sval), __pyx_v_caddv)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 688, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":658
+  /* "PETSc/Vec.pyx":684
  *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )
  * 
  *     def setValueLocal(self, index, value, addv=None):             # <<<<<<<<<<<<<<
@@ -96829,7 +98861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValueLocal(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":664
+/* "PETSc/Vec.pyx":690
  *         CHKERR( VecSetValuesLocal(self.vec, 1, &ival, &sval, caddv) )
  * 
  *     def setValuesLocal(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -96838,15 +98870,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValueLocal(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_217setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_216setValuesLocal[] = "Vec.setValuesLocal(self, indices, values, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_217setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_220setValuesLocal[] = "Vec.setValuesLocal(self, indices, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_values = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesLocal (wrapper)", 0);
@@ -96872,7 +98901,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_217setValuesLocal(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 2, 3, 1); __PYX_ERR(30, 690, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -96881,7 +98910,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_217setValuesLocal(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocal") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocal") < 0)) __PYX_ERR(30, 690, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -96898,38 +98927,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_217setValuesLocal(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 690, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setValuesLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_216setValuesLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_220setValuesLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_216setValuesLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220setValuesLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
   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("setValuesLocal", 0);
 
-  /* "PETSc/Vec.pyx":665
+  /* "PETSc/Vec.pyx":691
  * 
  *     def setValuesLocal(self, indices, values, addv=None):
  *         vecsetvalues(self.vec, indices, values, addv, 0, 1)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlockedLocal(self, indices, values, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values, __pyx_v_addv, 0, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values, __pyx_v_addv, 0, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 691, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":664
+  /* "PETSc/Vec.pyx":690
  *         CHKERR( VecSetValuesLocal(self.vec, 1, &ival, &sval, caddv) )
  * 
  *     def setValuesLocal(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -96949,7 +98975,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_216setValuesLocal(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":667
+/* "PETSc/Vec.pyx":693
  *         vecsetvalues(self.vec, indices, values, addv, 0, 1)
  * 
  *     def setValuesBlockedLocal(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -96958,15 +98984,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_216setValuesLocal(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_218setValuesBlockedLocal[] = "Vec.setValuesBlockedLocal(self, indices, values, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_222setValuesBlockedLocal[] = "Vec.setValuesBlockedLocal(self, indices, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_values = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlockedLocal (wrapper)", 0);
@@ -96992,7 +99015,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValuesBlockedLocal(PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 2, 3, 1); __PYX_ERR(30, 693, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -97001,7 +99024,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValuesBlockedLocal(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocal") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocal") < 0)) __PYX_ERR(30, 693, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -97018,38 +99041,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValuesBlockedLocal(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 693, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setValuesBlockedLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_218setValuesBlockedLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_222setValuesBlockedLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValuesBlockedLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222setValuesBlockedLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
   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("setValuesBlockedLocal", 0);
 
-  /* "PETSc/Vec.pyx":668
+  /* "PETSc/Vec.pyx":694
  * 
  *     def setValuesBlockedLocal(self, indices, values, addv=None):
  *         vecsetvalues(self.vec, indices, values, addv, 1, 1)             # <<<<<<<<<<<<<<
  * 
  *     def assemblyBegin(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values, __pyx_v_addv, 1, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vecsetvalues(__pyx_v_self->vec, __pyx_v_indices, __pyx_v_values, __pyx_v_addv, 1, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 694, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":667
+  /* "PETSc/Vec.pyx":693
  *         vecsetvalues(self.vec, indices, values, addv, 0, 1)
  * 
  *     def setValuesBlockedLocal(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -97069,7 +99089,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValuesBlockedLocal(struct
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":670
+/* "PETSc/Vec.pyx":696
  *         vecsetvalues(self.vec, indices, values, addv, 1, 1)
  * 
  *     def assemblyBegin(self):             # <<<<<<<<<<<<<<
@@ -97078,41 +99098,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValuesBlockedLocal(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_220assemblyBegin[] = "Vec.assemblyBegin(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_225assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_224assemblyBegin[] = "Vec.assemblyBegin(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_225assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("assemblyBegin (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("assemblyBegin", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "assemblyBegin", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_220assemblyBegin(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_224assemblyBegin(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220assemblyBegin(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemblyBegin(struct PyPetscVecObject *__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("assemblyBegin", 0);
 
-  /* "PETSc/Vec.pyx":671
+  /* "PETSc/Vec.pyx":697
  * 
  *     def assemblyBegin(self):
  *         CHKERR( VecAssemblyBegin(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def assemblyEnd(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyBegin(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyBegin(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 697, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":670
+  /* "PETSc/Vec.pyx":696
  *         vecsetvalues(self.vec, indices, values, addv, 1, 1)
  * 
  *     def assemblyBegin(self):             # <<<<<<<<<<<<<<
@@ -97132,7 +99149,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220assemblyBegin(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":673
+/* "PETSc/Vec.pyx":699
  *         CHKERR( VecAssemblyBegin(self.vec) )
  * 
  *     def assemblyEnd(self):             # <<<<<<<<<<<<<<
@@ -97141,41 +99158,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220assemblyBegin(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_222assemblyEnd[] = "Vec.assemblyEnd(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_227assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_226assemblyEnd[] = "Vec.assemblyEnd(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_227assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("assemblyEnd (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("assemblyEnd", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "assemblyEnd", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_222assemblyEnd(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_226assemblyEnd(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222assemblyEnd(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226assemblyEnd(struct PyPetscVecObject *__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("assemblyEnd", 0);
 
-  /* "PETSc/Vec.pyx":674
+  /* "PETSc/Vec.pyx":700
  * 
  *     def assemblyEnd(self):
  *         CHKERR( VecAssemblyEnd(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def assemble(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyEnd(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyEnd(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 700, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":673
+  /* "PETSc/Vec.pyx":699
  *         CHKERR( VecAssemblyBegin(self.vec) )
  * 
  *     def assemblyEnd(self):             # <<<<<<<<<<<<<<
@@ -97195,7 +99209,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222assemblyEnd(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":676
+/* "PETSc/Vec.pyx":702
  *         CHKERR( VecAssemblyEnd(self.vec) )
  * 
  *     def assemble(self):             # <<<<<<<<<<<<<<
@@ -97204,50 +99218,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222assemblyEnd(struct PyPetscVec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_225assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_224assemble[] = "Vec.assemble(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_225assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_229assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_228assemble[] = "Vec.assemble(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_229assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("assemble (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("assemble", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "assemble", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_224assemble(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_228assemble(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemble(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228assemble(struct PyPetscVecObject *__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("assemble", 0);
 
-  /* "PETSc/Vec.pyx":677
+  /* "PETSc/Vec.pyx":703
  * 
  *     def assemble(self):
  *         CHKERR( VecAssemblyBegin(self.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecAssemblyEnd(self.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyBegin(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyBegin(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 703, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":678
+  /* "PETSc/Vec.pyx":704
  *     def assemble(self):
  *         CHKERR( VecAssemblyBegin(self.vec) )
  *         CHKERR( VecAssemblyEnd(self.vec) )             # <<<<<<<<<<<<<<
  * 
  *     # --- methods for strided vectors ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyEnd(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyEnd(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 704, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":676
+  /* "PETSc/Vec.pyx":702
  *         CHKERR( VecAssemblyEnd(self.vec) )
  * 
  *     def assemble(self):             # <<<<<<<<<<<<<<
@@ -97267,7 +99278,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemble(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":682
+/* "PETSc/Vec.pyx":708
  *     # --- methods for strided vectors ---
  * 
  *     def strideScale(self, field, alpha):             # <<<<<<<<<<<<<<
@@ -97276,14 +99287,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemble(struct PyPetscVecObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_227strideScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_226strideScale[] = "Vec.strideScale(self, field, alpha)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_227strideScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_230strideScale[] = "Vec.strideScale(self, field, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_alpha = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("strideScale (wrapper)", 0);
@@ -97307,11 +99315,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_227strideScale(PyObject *__pyx_v
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("strideScale", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("strideScale", 1, 2, 2, 1); __PYX_ERR(30, 708, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideScale") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideScale") < 0)) __PYX_ERR(30, 708, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -97324,20 +99332,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_227strideScale(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideScale", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("strideScale", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 708, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.strideScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_226strideScale(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_230strideScale(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226strideScale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideScale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_alpha) {
   PetscInt __pyx_v_ival;
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
@@ -97345,41 +99353,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226strideScale(struct PyPetscVec
   PetscInt __pyx_t_1;
   PetscScalar __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("strideScale", 0);
 
-  /* "PETSc/Vec.pyx":683
+  /* "PETSc/Vec.pyx":709
  * 
  *     def strideScale(self, field, alpha):
  *         cdef PetscInt    ival = asInt(field)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecStrideScale(self.vec, ival, sval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 709, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":684
+  /* "PETSc/Vec.pyx":710
  *     def strideScale(self, field, alpha):
  *         cdef PetscInt    ival = asInt(field)
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( VecStrideScale(self.vec, ival, sval) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 710, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":685
+  /* "PETSc/Vec.pyx":711
  *         cdef PetscInt    ival = asInt(field)
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecStrideScale(self.vec, ival, sval) )             # <<<<<<<<<<<<<<
  * 
  *     def strideSum(self, field):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideScale(__pyx_v_self->vec, __pyx_v_ival, __pyx_v_sval)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideScale(__pyx_v_self->vec, __pyx_v_ival, __pyx_v_sval)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 711, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":682
+  /* "PETSc/Vec.pyx":708
  *     # --- methods for strided vectors ---
  * 
  *     def strideScale(self, field, alpha):             # <<<<<<<<<<<<<<
@@ -97399,7 +99404,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226strideScale(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":687
+/* "PETSc/Vec.pyx":713
  *         CHKERR( VecStrideScale(self.vec, ival, sval) )
  * 
  *     def strideSum(self, field):             # <<<<<<<<<<<<<<
@@ -97408,13 +99413,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226strideScale(struct PyPetscVec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_229strideSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_228strideSum[] = "Vec.strideSum(self, field)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_229strideSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_232strideSum[] = "Vec.strideSum(self, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("strideSum (wrapper)", 0);
@@ -97436,7 +99438,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_229strideSum(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideSum") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideSum") < 0)) __PYX_ERR(30, 713, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -97447,20 +99449,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_229strideSum(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideSum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("strideSum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 713, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.strideSum", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_228strideSum(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228strideSum(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
   PetscInt __pyx_v_ival;
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
@@ -97468,22 +99470,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228strideSum(struct PyPetscVecOb
   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("strideSum", 0);
 
-  /* "PETSc/Vec.pyx":688
+  /* "PETSc/Vec.pyx":714
  * 
  *     def strideSum(self, field):
  *         cdef PetscInt    ival = asInt(field)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecStrideSum(self.vec, ival, &sval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 714, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":689
+  /* "PETSc/Vec.pyx":715
  *     def strideSum(self, field):
  *         cdef PetscInt    ival = asInt(field)
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -97492,16 +99491,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228strideSum(struct PyPetscVecOb
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":690
+  /* "PETSc/Vec.pyx":716
  *         cdef PetscInt    ival = asInt(field)
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecStrideSum(self.vec, ival, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideSum(__pyx_v_self->vec, __pyx_v_ival, (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideSum(__pyx_v_self->vec, __pyx_v_ival, (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 716, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":691
+  /* "PETSc/Vec.pyx":717
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecStrideSum(self.vec, ival, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -97509,13 +99508,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228strideSum(struct PyPetscVecOb
  *     def strideMin(self, field):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 717, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":687
+  /* "PETSc/Vec.pyx":713
  *         CHKERR( VecStrideScale(self.vec, ival, sval) )
  * 
  *     def strideSum(self, field):             # <<<<<<<<<<<<<<
@@ -97534,7 +99533,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228strideSum(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":693
+/* "PETSc/Vec.pyx":719
  *         return toScalar(sval)
  * 
  *     def strideMin(self, field):             # <<<<<<<<<<<<<<
@@ -97543,13 +99542,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228strideSum(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_230strideMin[] = "Vec.strideMin(self, field)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_234strideMin[] = "Vec.strideMin(self, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("strideMin (wrapper)", 0);
@@ -97571,7 +99567,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideMin(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideMin") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideMin") < 0)) __PYX_ERR(30, 719, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -97582,20 +99578,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideMin(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideMin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("strideMin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 719, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.strideMin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscReal __pyx_v_rval;
@@ -97606,22 +99602,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecOb
   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("strideMin", 0);
 
-  /* "PETSc/Vec.pyx":694
+  /* "PETSc/Vec.pyx":720
  * 
  *     def strideMin(self, field):
  *         cdef PetscInt  ival1 = asInt(field)             # <<<<<<<<<<<<<<
  *         cdef PetscInt  ival2 = 0
  *         cdef PetscReal rval  = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 720, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":695
+  /* "PETSc/Vec.pyx":721
  *     def strideMin(self, field):
  *         cdef PetscInt  ival1 = asInt(field)
  *         cdef PetscInt  ival2 = 0             # <<<<<<<<<<<<<<
@@ -97630,7 +99623,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecOb
  */
   __pyx_v_ival2 = 0;
 
-  /* "PETSc/Vec.pyx":696
+  /* "PETSc/Vec.pyx":722
  *         cdef PetscInt  ival1 = asInt(field)
  *         cdef PetscInt  ival2 = 0
  *         cdef PetscReal rval  = 0             # <<<<<<<<<<<<<<
@@ -97639,16 +99632,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecOb
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Vec.pyx":697
+  /* "PETSc/Vec.pyx":723
  *         cdef PetscInt  ival2 = 0
  *         cdef PetscReal rval  = 0
  *         CHKERR( VecStrideMin(self.vec, ival1, &ival2, &rval) )             # <<<<<<<<<<<<<<
  *         return (toInt(ival2), toReal(rval))
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideMin(__pyx_v_self->vec, __pyx_v_ival1, (&__pyx_v_ival2), (&__pyx_v_rval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideMin(__pyx_v_self->vec, __pyx_v_ival1, (&__pyx_v_ival2), (&__pyx_v_rval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 723, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":698
+  /* "PETSc/Vec.pyx":724
  *         cdef PetscReal rval  = 0
  *         CHKERR( VecStrideMin(self.vec, ival1, &ival2, &rval) )
  *         return (toInt(ival2), toReal(rval))             # <<<<<<<<<<<<<<
@@ -97656,11 +99649,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecOb
  *     def strideMax(self, field):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 724, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 724, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 724, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -97672,7 +99665,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecOb
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":693
+  /* "PETSc/Vec.pyx":719
  *         return toScalar(sval)
  * 
  *     def strideMin(self, field):             # <<<<<<<<<<<<<<
@@ -97693,7 +99686,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":700
+/* "PETSc/Vec.pyx":726
  *         return (toInt(ival2), toReal(rval))
  * 
  *     def strideMax(self, field):             # <<<<<<<<<<<<<<
@@ -97702,13 +99695,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideMin(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_232strideMax[] = "Vec.strideMax(self, field)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_236strideMax[] = "Vec.strideMax(self, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("strideMax (wrapper)", 0);
@@ -97730,7 +99720,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideMax(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideMax") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideMax") < 0)) __PYX_ERR(30, 726, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -97741,20 +99731,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideMax(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideMax", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("strideMax", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 726, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.strideMax", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscReal __pyx_v_rval;
@@ -97765,22 +99755,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecOb
   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("strideMax", 0);
 
-  /* "PETSc/Vec.pyx":701
+  /* "PETSc/Vec.pyx":727
  * 
  *     def strideMax(self, field):
  *         cdef PetscInt  ival1 = asInt(field)             # <<<<<<<<<<<<<<
  *         cdef PetscInt  ival2 = 0
  *         cdef PetscReal rval  = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 727, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":702
+  /* "PETSc/Vec.pyx":728
  *     def strideMax(self, field):
  *         cdef PetscInt  ival1 = asInt(field)
  *         cdef PetscInt  ival2 = 0             # <<<<<<<<<<<<<<
@@ -97789,7 +99776,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecOb
  */
   __pyx_v_ival2 = 0;
 
-  /* "PETSc/Vec.pyx":703
+  /* "PETSc/Vec.pyx":729
  *         cdef PetscInt  ival1 = asInt(field)
  *         cdef PetscInt  ival2 = 0
  *         cdef PetscReal rval  = 0             # <<<<<<<<<<<<<<
@@ -97798,16 +99785,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecOb
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Vec.pyx":704
+  /* "PETSc/Vec.pyx":730
  *         cdef PetscInt  ival2 = 0
  *         cdef PetscReal rval  = 0
  *         CHKERR( VecStrideMax(self.vec, ival1, &ival2, &rval) )             # <<<<<<<<<<<<<<
  *         return (toInt(ival2), toReal(rval))
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideMax(__pyx_v_self->vec, __pyx_v_ival1, (&__pyx_v_ival2), (&__pyx_v_rval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideMax(__pyx_v_self->vec, __pyx_v_ival1, (&__pyx_v_ival2), (&__pyx_v_rval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 730, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":705
+  /* "PETSc/Vec.pyx":731
  *         cdef PetscReal rval  = 0
  *         CHKERR( VecStrideMax(self.vec, ival1, &ival2, &rval) )
  *         return (toInt(ival2), toReal(rval))             # <<<<<<<<<<<<<<
@@ -97815,11 +99802,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecOb
  *     def strideNorm(self, field, norm_type=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -97831,7 +99818,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecOb
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":700
+  /* "PETSc/Vec.pyx":726
  *         return (toInt(ival2), toReal(rval))
  * 
  *     def strideMax(self, field):             # <<<<<<<<<<<<<<
@@ -97852,7 +99839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":707
+/* "PETSc/Vec.pyx":733
  *         return (toInt(ival2), toReal(rval))
  * 
  *     def strideNorm(self, field, norm_type=None):             # <<<<<<<<<<<<<<
@@ -97861,14 +99848,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideMax(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_234strideNorm[] = "Vec.strideNorm(self, field, norm_type=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_238strideNorm[] = "Vec.strideNorm(self, field, norm_type=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_norm_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("strideNorm (wrapper)", 0);
@@ -97897,7 +99881,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideNorm(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideNorm") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideNorm") < 0)) __PYX_ERR(30, 733, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -97912,20 +99896,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideNorm(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideNorm", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("strideNorm", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 733, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.strideNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_norm_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_norm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_norm_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_norm_type) {
   PetscInt __pyx_v_ival;
   NormType __pyx_v_norm_1_2;
   NormType __pyx_v_ntype;
@@ -97940,22 +99924,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecO
   PyObject *__pyx_t_6 = NULL;
   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("strideNorm", 0);
 
-  /* "PETSc/Vec.pyx":708
+  /* "PETSc/Vec.pyx":734
  * 
  *     def strideNorm(self, field, norm_type=None):
  *         cdef PetscInt ival = asInt(field)             # <<<<<<<<<<<<<<
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_2
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 734, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":709
+  /* "PETSc/Vec.pyx":735
  *     def strideNorm(self, field, norm_type=None):
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2             # <<<<<<<<<<<<<<
@@ -97964,7 +99945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecO
  */
   __pyx_v_norm_1_2 = NORM_1_AND_2;
 
-  /* "PETSc/Vec.pyx":710
+  /* "PETSc/Vec.pyx":736
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_2             # <<<<<<<<<<<<<<
@@ -97973,7 +99954,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecO
  */
   __pyx_v_ntype = NORM_2;
 
-  /* "PETSc/Vec.pyx":711
+  /* "PETSc/Vec.pyx":737
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_2
  *         if norm_type is not None: ntype = norm_type             # <<<<<<<<<<<<<<
@@ -97983,22 +99964,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecO
   __pyx_t_2 = (__pyx_v_norm_type != Py_None);
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
-    __pyx_t_4 = ((NormType)PyInt_AsLong(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 737, __pyx_L1_error)
     __pyx_v_ntype = __pyx_t_4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":713
+  /* "PETSc/Vec.pyx":739
  *         if norm_type is not None: ntype = norm_type
  *         cdef PetscReal rval[2]
  *         CHKERR( VecStrideNorm(self.vec, ival, ntype, rval) )             # <<<<<<<<<<<<<<
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideNorm(__pyx_v_self->vec, __pyx_v_ival, __pyx_v_ntype, __pyx_v_rval)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideNorm(__pyx_v_self->vec, __pyx_v_ival, __pyx_v_ntype, __pyx_v_rval)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(30, 739, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":714
+  /* "PETSc/Vec.pyx":740
  *         cdef PetscReal rval[2]
  *         CHKERR( VecStrideNorm(self.vec, ival, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])             # <<<<<<<<<<<<<<
@@ -98008,27 +99987,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecO
   __pyx_t_3 = ((__pyx_v_ntype != __pyx_v_norm_1_2) != 0);
   if (__pyx_t_3) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 740, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_r = __pyx_t_6;
     __pyx_t_6 = 0;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":715
+  /* "PETSc/Vec.pyx":741
  *         CHKERR( VecStrideNorm(self.vec, ival, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))             # <<<<<<<<<<<<<<
  * 
  *     def strideScatter(self, field, Vec vec not None, addv=None):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 741, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 741, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 741, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
@@ -98041,7 +100020,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecO
     goto __pyx_L0;
   }
 
-  /* "PETSc/Vec.pyx":707
+  /* "PETSc/Vec.pyx":733
  *         return (toInt(ival2), toReal(rval))
  * 
  *     def strideNorm(self, field, norm_type=None):             # <<<<<<<<<<<<<<
@@ -98062,7 +100041,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecO
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":717
+/* "PETSc/Vec.pyx":743
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def strideScatter(self, field, Vec vec not None, addv=None):             # <<<<<<<<<<<<<<
@@ -98071,15 +100050,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideNorm(struct PyPetscVecO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_236strideScatter[] = "Vec.strideScatter(self, field, Vec vec, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_240strideScatter[] = "Vec.strideScatter(self, field, Vec vec, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   struct PyPetscVecObject *__pyx_v_vec = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("strideScatter (wrapper)", 0);
@@ -98105,7 +100081,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideScatter(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("strideScatter", 0, 2, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("strideScatter", 0, 2, 3, 1); __PYX_ERR(30, 743, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -98114,7 +100090,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideScatter(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideScatter") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideScatter") < 0)) __PYX_ERR(30, 743, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -98131,14 +100107,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideScatter(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideScatter", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("strideScatter", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 743, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.strideScatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_236strideScatter(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_vec, __pyx_v_addv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 743, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_240strideScatter(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_vec, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -98149,7 +100125,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideScatter(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideScatter(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240strideScatter(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_addv) {
   PetscInt __pyx_v_ival;
   InsertMode __pyx_v_caddv;
   PyObject *__pyx_r = NULL;
@@ -98157,41 +100133,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideScatter(struct PyPetscV
   PetscInt __pyx_t_1;
   InsertMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("strideScatter", 0);
 
-  /* "PETSc/Vec.pyx":718
+  /* "PETSc/Vec.pyx":744
  * 
  *     def strideScatter(self, field, Vec vec not None, addv=None):
  *         cdef PetscInt ival = asInt(field)             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( VecStrideScatter(self.vec, ival, vec.vec, caddv) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 744, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":719
+  /* "PETSc/Vec.pyx":745
  *     def strideScatter(self, field, Vec vec not None, addv=None):
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscInsertMode caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( VecStrideScatter(self.vec, ival, vec.vec, caddv) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)-1L))) __PYX_ERR(30, 745, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":720
+  /* "PETSc/Vec.pyx":746
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( VecStrideScatter(self.vec, ival, vec.vec, caddv) )             # <<<<<<<<<<<<<<
  * 
  *     def strideGather(self, field, Vec vec not None, addv=None):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideScatter(__pyx_v_self->vec, __pyx_v_ival, __pyx_v_vec->vec, __pyx_v_caddv)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideScatter(__pyx_v_self->vec, __pyx_v_ival, __pyx_v_vec->vec, __pyx_v_caddv)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 746, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":717
+  /* "PETSc/Vec.pyx":743
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def strideScatter(self, field, Vec vec not None, addv=None):             # <<<<<<<<<<<<<<
@@ -98211,7 +100184,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideScatter(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":722
+/* "PETSc/Vec.pyx":748
  *         CHKERR( VecStrideScatter(self.vec, ival, vec.vec, caddv) )
  * 
  *     def strideGather(self, field, Vec vec not None, addv=None):             # <<<<<<<<<<<<<<
@@ -98220,15 +100193,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideScatter(struct PyPetscV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideGather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_238strideGather[] = "Vec.strideGather(self, field, Vec vec, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideGather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideGather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_242strideGather[] = "Vec.strideGather(self, field, Vec vec, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideGather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   struct PyPetscVecObject *__pyx_v_vec = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("strideGather (wrapper)", 0);
@@ -98254,7 +100224,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideGather(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("strideGather", 0, 2, 3, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("strideGather", 0, 2, 3, 1); __PYX_ERR(30, 748, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -98263,7 +100233,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideGather(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideGather") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideGather") < 0)) __PYX_ERR(30, 748, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -98280,14 +100250,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideGather(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideGather", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("strideGather", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 748, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.strideGather", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_238strideGather(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_vec, __pyx_v_addv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 748, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_242strideGather(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_vec, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -98298,7 +100268,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideGather(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideGather(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242strideGather(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_addv) {
   PetscInt __pyx_v_ival;
   InsertMode __pyx_v_caddv;
   PyObject *__pyx_r = NULL;
@@ -98306,41 +100276,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideGather(struct PyPetscVe
   PetscInt __pyx_t_1;
   InsertMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("strideGather", 0);
 
-  /* "PETSc/Vec.pyx":723
+  /* "PETSc/Vec.pyx":749
  * 
  *     def strideGather(self, field, Vec vec not None, addv=None):
  *         cdef PetscInt ival = asInt(field)             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( VecStrideGather(self.vec, ival, vec.vec, caddv) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(30, 749, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":724
+  /* "PETSc/Vec.pyx":750
  *     def strideGather(self, field, Vec vec not None, addv=None):
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscInsertMode caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( VecStrideGather(self.vec, ival, vec.vec, caddv) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)-1L))) __PYX_ERR(30, 750, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":725
+  /* "PETSc/Vec.pyx":751
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( VecStrideGather(self.vec, ival, vec.vec, caddv) )             # <<<<<<<<<<<<<<
  * 
  *     # --- methods for vectors with ghost values ---
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideGather(__pyx_v_self->vec, __pyx_v_ival, __pyx_v_vec->vec, __pyx_v_caddv)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecStrideGather(__pyx_v_self->vec, __pyx_v_ival, __pyx_v_vec->vec, __pyx_v_caddv)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 751, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":722
+  /* "PETSc/Vec.pyx":748
  *         CHKERR( VecStrideScatter(self.vec, ival, vec.vec, caddv) )
  * 
  *     def strideGather(self, field, Vec vec not None, addv=None):             # <<<<<<<<<<<<<<
@@ -98360,7 +100327,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideGather(struct PyPetscVe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":729
+/* "PETSc/Vec.pyx":755
  *     # --- methods for vectors with ghost values ---
  * 
  *     def localForm(self):             # <<<<<<<<<<<<<<
@@ -98369,33 +100336,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideGather(struct PyPetscVe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241localForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_240localForm[] = "Vec.localForm(self)\n\n        Intended for use in context manager::\n\n            with vec.localForm() as lf:\n                use(lf)\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241localForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_245localForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_244localForm[] = "Vec.localForm(self)\n\n        Intended for use in context manager::\n\n            with vec.localForm() as lf:\n                use(lf)\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_245localForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("localForm (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("localForm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "localForm", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_240localForm(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_244localForm(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240localForm(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244localForm(struct PyPetscVecObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __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("localForm", 0);
 
-  /* "PETSc/Vec.pyx":736
+  /* "PETSc/Vec.pyx":762
  *                 use(lf)
  *         """
  *         return _Vec_LocalForm(self)             # <<<<<<<<<<<<<<
@@ -98403,19 +100367,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240localForm(struct PyPetscVecOb
  *     def ghostUpdateBegin(self, addv=None, mode=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 762, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__Vec_LocalForm)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__Vec_LocalForm), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 762, __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;
 
-  /* "PETSc/Vec.pyx":729
+  /* "PETSc/Vec.pyx":755
  *     # --- methods for vectors with ghost values ---
  * 
  *     def localForm(self):             # <<<<<<<<<<<<<<
@@ -98435,7 +100399,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240localForm(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":738
+/* "PETSc/Vec.pyx":764
  *         return _Vec_LocalForm(self)
  * 
  *     def ghostUpdateBegin(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -98444,14 +100408,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240localForm(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243ghostUpdateBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_242ghostUpdateBegin[] = "Vec.ghostUpdateBegin(self, addv=None, mode=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243ghostUpdateBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdateBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_246ghostUpdateBegin[] = "Vec.ghostUpdateBegin(self, addv=None, mode=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdateBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_addv = 0;
   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("ghostUpdateBegin (wrapper)", 0);
@@ -98483,7 +100444,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243ghostUpdateBegin(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdateBegin") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdateBegin") < 0)) __PYX_ERR(30, 764, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -98498,20 +100459,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243ghostUpdateBegin(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ghostUpdateBegin", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("ghostUpdateBegin", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 764, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.ghostUpdateBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_242ghostUpdateBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdateBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242ghostUpdateBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdateBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
   InsertMode __pyx_v_caddv;
   ScatterMode __pyx_v_csctm;
   PyObject *__pyx_r = NULL;
@@ -98519,41 +100480,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242ghostUpdateBegin(struct PyPet
   InsertMode __pyx_t_1;
   ScatterMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("ghostUpdateBegin", 0);
 
-  /* "PETSc/Vec.pyx":739
+  /* "PETSc/Vec.pyx":765
  * 
  *     def ghostUpdateBegin(self, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(30, 765, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":740
+  /* "PETSc/Vec.pyx":766
  *     def ghostUpdateBegin(self, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)             # <<<<<<<<<<<<<<
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1L))) __PYX_ERR(30, 766, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":741
+  /* "PETSc/Vec.pyx":767
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )             # <<<<<<<<<<<<<<
  * 
  *     def ghostUpdateEnd(self, addv=None, mode=None):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostUpdateBegin(__pyx_v_self->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostUpdateBegin(__pyx_v_self->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 767, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":738
+  /* "PETSc/Vec.pyx":764
  *         return _Vec_LocalForm(self)
  * 
  *     def ghostUpdateBegin(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -98573,7 +100531,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242ghostUpdateBegin(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":743
+/* "PETSc/Vec.pyx":769
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  * 
  *     def ghostUpdateEnd(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -98582,14 +100540,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242ghostUpdateBegin(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_245ghostUpdateEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_244ghostUpdateEnd[] = "Vec.ghostUpdateEnd(self, addv=None, mode=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_245ghostUpdateEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_248ghostUpdateEnd[] = "Vec.ghostUpdateEnd(self, addv=None, mode=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_addv = 0;
   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("ghostUpdateEnd (wrapper)", 0);
@@ -98621,7 +100576,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_245ghostUpdateEnd(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdateEnd") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 743; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdateEnd") < 0)) __PYX_ERR(30, 769, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -98636,20 +100591,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_245ghostUpdateEnd(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ghostUpdateEnd", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 743; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("ghostUpdateEnd", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 769, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.ghostUpdateEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_244ghostUpdateEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244ghostUpdateEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
   InsertMode __pyx_v_caddv;
   ScatterMode __pyx_v_csctm;
   PyObject *__pyx_r = NULL;
@@ -98657,41 +100612,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244ghostUpdateEnd(struct PyPetsc
   InsertMode __pyx_t_1;
   ScatterMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("ghostUpdateEnd", 0);
 
-  /* "PETSc/Vec.pyx":744
+  /* "PETSc/Vec.pyx":770
  * 
  *     def ghostUpdateEnd(self, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(30, 770, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":745
+  /* "PETSc/Vec.pyx":771
  *     def ghostUpdateEnd(self, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)             # <<<<<<<<<<<<<<
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1L))) __PYX_ERR(30, 771, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":746
+  /* "PETSc/Vec.pyx":772
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )             # <<<<<<<<<<<<<<
  * 
  *     def ghostUpdate(self, addv=None, mode=None):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostUpdateEnd(__pyx_v_self->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostUpdateEnd(__pyx_v_self->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 772, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":743
+  /* "PETSc/Vec.pyx":769
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  * 
  *     def ghostUpdateEnd(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -98711,7 +100663,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244ghostUpdateEnd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":748
+/* "PETSc/Vec.pyx":774
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  *     def ghostUpdate(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -98720,14 +100672,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244ghostUpdateEnd(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_246ghostUpdate[] = "Vec.ghostUpdate(self, addv=None, mode=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_250ghostUpdate[] = "Vec.ghostUpdate(self, addv=None, mode=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_addv = 0;
   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("ghostUpdate (wrapper)", 0);
@@ -98759,7 +100708,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdate(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdate") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdate") < 0)) __PYX_ERR(30, 774, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -98774,20 +100723,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdate(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ghostUpdate", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("ghostUpdate", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 774, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.ghostUpdate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdate(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdate(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdate(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdate(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
   InsertMode __pyx_v_caddv;
   ScatterMode __pyx_v_csctm;
   PyObject *__pyx_r = NULL;
@@ -98795,50 +100744,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdate(struct PyPetscVec
   InsertMode __pyx_t_1;
   ScatterMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("ghostUpdate", 0);
 
-  /* "PETSc/Vec.pyx":749
+  /* "PETSc/Vec.pyx":775
  * 
  *     def ghostUpdate(self, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(30, 775, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":750
+  /* "PETSc/Vec.pyx":776
  *     def ghostUpdate(self, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)             # <<<<<<<<<<<<<<
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1L))) __PYX_ERR(30, 776, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":751
+  /* "PETSc/Vec.pyx":777
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostUpdateBegin(__pyx_v_self->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostUpdateBegin(__pyx_v_self->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 777, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":752
+  /* "PETSc/Vec.pyx":778
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )             # <<<<<<<<<<<<<<
  * 
  *     def setMPIGhost(self, ghosts):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostUpdateEnd(__pyx_v_self->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGhostUpdateEnd(__pyx_v_self->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 778, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":748
+  /* "PETSc/Vec.pyx":774
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  *     def ghostUpdate(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -98858,22 +100804,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdate(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":754
+/* "PETSc/Vec.pyx":780
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  *     def setMPIGhost(self, ghosts):             # <<<<<<<<<<<<<<
  *         "Alternative to createGhost()"
- *         cdef PetscInt ng, *ig=NULL
+ *         cdef PetscInt ng=0, *ig=NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249setMPIGhost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_248setMPIGhost[] = "Vec.setMPIGhost(self, ghosts)\nAlternative to createGhost()";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249setMPIGhost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253setMPIGhost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_252setMPIGhost[] = "Vec.setMPIGhost(self, ghosts)\nAlternative to createGhost()";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253setMPIGhost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ghosts = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMPIGhost (wrapper)", 0);
@@ -98895,7 +100838,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249setMPIGhost(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, "setMPIGhost") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMPIGhost") < 0)) __PYX_ERR(30, 780, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -98906,68 +100849,66 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249setMPIGhost(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMPIGhost", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMPIGhost", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 780, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setMPIGhost", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_248setMPIGhost(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_ghosts);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_252setMPIGhost(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_ghosts);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248setMPIGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252setMPIGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts) {
   PetscInt __pyx_v_ng;
   PetscInt *__pyx_v_ig;
   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("setMPIGhost", 0);
   __Pyx_INCREF(__pyx_v_ghosts);
 
-  /* "PETSc/Vec.pyx":756
+  /* "PETSc/Vec.pyx":782
  *     def setMPIGhost(self, ghosts):
  *         "Alternative to createGhost()"
- *         cdef PetscInt ng, *ig=NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ng=0, *ig=NULL             # <<<<<<<<<<<<<<
  *         ghosts = iarray_i(ghosts, &ng, &ig)
  *         CHKERR( VecMPISetGhost(self.vec, ng, ig) )
  */
+  __pyx_v_ng = 0;
   __pyx_v_ig = NULL;
 
-  /* "PETSc/Vec.pyx":757
+  /* "PETSc/Vec.pyx":783
  *         "Alternative to createGhost()"
- *         cdef PetscInt ng, *ig=NULL
+ *         cdef PetscInt ng=0, *ig=NULL
  *         ghosts = iarray_i(ghosts, &ng, &ig)             # <<<<<<<<<<<<<<
  *         CHKERR( VecMPISetGhost(self.vec, ng, ig) )
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_ghosts, (&__pyx_v_ng), (&__pyx_v_ig))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_ghosts, (&__pyx_v_ng), (&__pyx_v_ig))); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 783, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_ghosts, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":758
- *         cdef PetscInt ng, *ig=NULL
+  /* "PETSc/Vec.pyx":784
+ *         cdef PetscInt ng=0, *ig=NULL
  *         ghosts = iarray_i(ghosts, &ng, &ig)
  *         CHKERR( VecMPISetGhost(self.vec, ng, ig) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMPISetGhost(__pyx_v_self->vec, __pyx_v_ng, __pyx_v_ig)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 758; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecMPISetGhost(__pyx_v_self->vec, __pyx_v_ng, __pyx_v_ig)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(30, 784, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":754
+  /* "PETSc/Vec.pyx":780
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  *     def setMPIGhost(self, ghosts):             # <<<<<<<<<<<<<<
  *         "Alternative to createGhost()"
- *         cdef PetscInt ng, *ig=NULL
+ *         cdef PetscInt ng=0, *ig=NULL
  */
 
   /* function exit code */
@@ -98984,7 +100925,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248setMPIGhost(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":762
+/* "PETSc/Vec.pyx":788
  *     #
  * 
  *     def getSubVector(self, IS iset not None, Vec subvec=None):             # <<<<<<<<<<<<<<
@@ -98993,14 +100934,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248setMPIGhost(struct PyPetscVec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251getSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_250getSubVector[] = "Vec.getSubVector(self, IS iset, Vec subvec=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251getSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_254getSubVector[] = "Vec.getSubVector(self, IS iset, Vec subvec=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   struct PyPetscVecObject *__pyx_v_subvec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSubVector (wrapper)", 0);
@@ -99029,7 +100967,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251getSubVector(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSubVector") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSubVector") < 0)) __PYX_ERR(30, 788, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -99044,15 +100982,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251getSubVector(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getSubVector", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getSubVector", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 788, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.getSubVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_subvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "subvec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_250getSubVector(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_subvec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(30, 788, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_subvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "subvec", 0))) __PYX_ERR(30, 788, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_254getSubVector(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_subvec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -99063,20 +101001,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251getSubVector(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250getSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getSubVector", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_subvec);
 
-  /* "PETSc/Vec.pyx":763
+  /* "PETSc/Vec.pyx":789
  * 
  *     def getSubVector(self, IS iset not None, Vec subvec=None):
  *         if subvec is None: subvec = Vec()             # <<<<<<<<<<<<<<
@@ -99086,35 +101021,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250getSubVector(struct PyPetscVe
   __pyx_t_1 = (((PyObject *)__pyx_v_subvec) == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 789, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_subvec, ((struct PyPetscVecObject *)__pyx_t_3));
     __pyx_t_3 = 0;
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":764
+  /* "PETSc/Vec.pyx":790
  *     def getSubVector(self, IS iset not None, Vec subvec=None):
  *         if subvec is None: subvec = Vec()
  *         else: CHKERR( VecDestroy(&subvec.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecGetSubVector(self.vec, iset.iset, &subvec.vec) )
  *         return subvec
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_subvec->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_subvec->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 790, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":765
+  /* "PETSc/Vec.pyx":791
  *         if subvec is None: subvec = Vec()
  *         else: CHKERR( VecDestroy(&subvec.vec) )
  *         CHKERR( VecGetSubVector(self.vec, iset.iset, &subvec.vec) )             # <<<<<<<<<<<<<<
  *         return subvec
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSubVector(__pyx_v_self->vec, __pyx_v_iset->iset, (&__pyx_v_subvec->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSubVector(__pyx_v_self->vec, __pyx_v_iset->iset, (&__pyx_v_subvec->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 791, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":766
+  /* "PETSc/Vec.pyx":792
  *         else: CHKERR( VecDestroy(&subvec.vec) )
  *         CHKERR( VecGetSubVector(self.vec, iset.iset, &subvec.vec) )
  *         return subvec             # <<<<<<<<<<<<<<
@@ -99126,7 +101061,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250getSubVector(struct PyPetscVe
   __pyx_r = ((PyObject *)__pyx_v_subvec);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":762
+  /* "PETSc/Vec.pyx":788
  *     #
  * 
  *     def getSubVector(self, IS iset not None, Vec subvec=None):             # <<<<<<<<<<<<<<
@@ -99146,7 +101081,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250getSubVector(struct PyPetscVe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":768
+/* "PETSc/Vec.pyx":794
  *         return subvec
  * 
  *     def restoreSubVector(self, IS iset not None, Vec subvec not None):             # <<<<<<<<<<<<<<
@@ -99155,14 +101090,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250getSubVector(struct PyPetscVe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253restoreSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_252restoreSubVector[] = "Vec.restoreSubVector(self, IS iset, Vec subvec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253restoreSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257restoreSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_256restoreSubVector[] = "Vec.restoreSubVector(self, IS iset, Vec subvec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257restoreSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   struct PyPetscVecObject *__pyx_v_subvec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("restoreSubVector (wrapper)", 0);
@@ -99186,11 +101118,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253restoreSubVector(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_subvec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("restoreSubVector", 1, 2, 2, 1); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("restoreSubVector", 1, 2, 2, 1); __PYX_ERR(30, 794, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreSubVector") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreSubVector") < 0)) __PYX_ERR(30, 794, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -99203,15 +101135,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253restoreSubVector(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("restoreSubVector", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("restoreSubVector", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 794, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.restoreSubVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_subvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "subvec", 0))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_252restoreSubVector(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_subvec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(30, 794, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_subvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "subvec", 0))) __PYX_ERR(30, 794, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_256restoreSubVector(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_subvec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -99222,25 +101154,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253restoreSubVector(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252restoreSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256restoreSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec) {
   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("restoreSubVector", 0);
 
-  /* "PETSc/Vec.pyx":769
+  /* "PETSc/Vec.pyx":795
  * 
  *     def restoreSubVector(self, IS iset not None, Vec subvec not None):
  *         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def getNestSubVecs(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreSubVector(__pyx_v_self->vec, __pyx_v_iset->iset, (&__pyx_v_subvec->vec))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreSubVector(__pyx_v_self->vec, __pyx_v_iset->iset, (&__pyx_v_subvec->vec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 795, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":768
+  /* "PETSc/Vec.pyx":794
  *         return subvec
  * 
  *     def restoreSubVector(self, IS iset not None, Vec subvec not None):             # <<<<<<<<<<<<<<
@@ -99260,32 +101189,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252restoreSubVector(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":771
+/* "PETSc/Vec.pyx":797
  *         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )
  * 
  *     def getNestSubVecs(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt N
- *         cdef PetscVec* sx
+ *         cdef PetscInt N=0
+ *         cdef PetscVec* sx=NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_254getNestSubVecs[] = "Vec.getNestSubVecs(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_259getNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_258getNestSubVecs[] = "Vec.getNestSubVecs(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_259getNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getNestSubVecs (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getNestSubVecs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNestSubVecs", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetscVecObject *__pyx_v_self) {
   PetscInt __pyx_v_N;
   Vec *__pyx_v_sx;
   PyObject *__pyx_v_output = NULL;
@@ -99298,33 +101227,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(struct PyPetsc
   PetscInt __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("getNestSubVecs", 0);
 
-  /* "PETSc/Vec.pyx":774
- *         cdef PetscInt N
- *         cdef PetscVec* sx
+  /* "PETSc/Vec.pyx":798
+ * 
+ *     def getNestSubVecs(self):
+ *         cdef PetscInt N=0             # <<<<<<<<<<<<<<
+ *         cdef PetscVec* sx=NULL
+ *         CHKERR( VecNestGetSubVecs(self.vec, &N, &sx) )
+ */
+  __pyx_v_N = 0;
+
+  /* "PETSc/Vec.pyx":799
+ *     def getNestSubVecs(self):
+ *         cdef PetscInt N=0
+ *         cdef PetscVec* sx=NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( VecNestGetSubVecs(self.vec, &N, &sx) )
+ *         output = []
+ */
+  __pyx_v_sx = NULL;
+
+  /* "PETSc/Vec.pyx":800
+ *         cdef PetscInt N=0
+ *         cdef PetscVec* sx=NULL
  *         CHKERR( VecNestGetSubVecs(self.vec, &N, &sx) )             # <<<<<<<<<<<<<<
  *         output = []
  *         for i in range(N):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNestGetSubVecs(__pyx_v_self->vec, (&__pyx_v_N), (&__pyx_v_sx))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNestGetSubVecs(__pyx_v_self->vec, (&__pyx_v_N), (&__pyx_v_sx))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 800, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":775
- *         cdef PetscVec* sx
+  /* "PETSc/Vec.pyx":801
+ *         cdef PetscVec* sx=NULL
  *         CHKERR( VecNestGetSubVecs(self.vec, &N, &sx) )
  *         output = []             # <<<<<<<<<<<<<<
  *         for i in range(N):
  *           pyvec = Vec()
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_output = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":776
+  /* "PETSc/Vec.pyx":802
  *         CHKERR( VecNestGetSubVecs(self.vec, &N, &sx) )
  *         output = []
  *         for i in range(N):             # <<<<<<<<<<<<<<
@@ -99335,19 +101279,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(struct PyPetsc
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
 
-    /* "PETSc/Vec.pyx":777
+    /* "PETSc/Vec.pyx":803
  *         output = []
  *         for i in range(N):
  *           pyvec = Vec()             # <<<<<<<<<<<<<<
  *           pyvec.vec = sx[i]
  *           CHKERR( PetscObjectReference(<PetscObject> pyvec.vec) )
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 803, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_XDECREF_SET(__pyx_v_pyvec, ((struct PyPetscVecObject *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "PETSc/Vec.pyx":778
+    /* "PETSc/Vec.pyx":804
  *         for i in range(N):
  *           pyvec = Vec()
  *           pyvec.vec = sx[i]             # <<<<<<<<<<<<<<
@@ -99356,26 +101300,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(struct PyPetsc
  */
     __pyx_v_pyvec->vec = (__pyx_v_sx[__pyx_v_i]);
 
-    /* "PETSc/Vec.pyx":779
+    /* "PETSc/Vec.pyx":805
  *           pyvec = Vec()
  *           pyvec.vec = sx[i]
  *           CHKERR( PetscObjectReference(<PetscObject> pyvec.vec) )             # <<<<<<<<<<<<<<
  *           output.append(pyvec)
  * 
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(((PetscObject)__pyx_v_pyvec->vec))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(((PetscObject)__pyx_v_pyvec->vec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(30, 805, __pyx_L1_error)
 
-    /* "PETSc/Vec.pyx":780
+    /* "PETSc/Vec.pyx":806
  *           pyvec.vec = sx[i]
  *           CHKERR( PetscObjectReference(<PetscObject> pyvec.vec) )
  *           output.append(pyvec)             # <<<<<<<<<<<<<<
  * 
  *         return output
  */
-    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_output, ((PyObject *)__pyx_v_pyvec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_output, ((PyObject *)__pyx_v_pyvec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(30, 806, __pyx_L1_error)
   }
 
-  /* "PETSc/Vec.pyx":782
+  /* "PETSc/Vec.pyx":808
  *           output.append(pyvec)
  * 
  *         return output             # <<<<<<<<<<<<<<
@@ -99387,12 +101331,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(struct PyPetsc
   __pyx_r = __pyx_v_output;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":771
+  /* "PETSc/Vec.pyx":797
  *         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )
  * 
  *     def getNestSubVecs(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt N
- *         cdef PetscVec* sx
+ *         cdef PetscInt N=0
+ *         cdef PetscVec* sx=NULL
  */
 
   /* function exit code */
@@ -99408,7 +101352,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":784
+/* "PETSc/Vec.pyx":810
  *         return output
  * 
  *     def setNestSubVecs(self, sx, idxm=None):             # <<<<<<<<<<<<<<
@@ -99417,14 +101361,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getNestSubVecs(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257setNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Vec_256setNestSubVecs[] = "Vec.setNestSubVecs(self, sx, idxm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257setNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_261setNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_260setNestSubVecs[] = "Vec.setNestSubVecs(self, sx, idxm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_261setNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_sx = 0;
   PyObject *__pyx_v_idxm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setNestSubVecs (wrapper)", 0);
@@ -99453,7 +101394,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257setNestSubVecs(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNestSubVecs") < 0)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNestSubVecs") < 0)) __PYX_ERR(30, 810, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -99468,20 +101409,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257setNestSubVecs(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNestSubVecs", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[30]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setNestSubVecs", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 810, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Vec.setNestSubVecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_sx, __pyx_v_idxm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_sx, __pyx_v_idxm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_sx, PyObject *__pyx_v_idxm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_sx, PyObject *__pyx_v_idxm) {
   PetscInt __pyx_v_N;
   PetscInt *__pyx_v_cidxm;
   Vec *__pyx_v_csx;
@@ -99498,13 +101439,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetsc
   PetscInt __pyx_t_7;
   Vec __pyx_t_8;
   int __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setNestSubVecs", 0);
   __Pyx_INCREF(__pyx_v_idxm);
 
-  /* "PETSc/Vec.pyx":785
+  /* "PETSc/Vec.pyx":811
  * 
  *     def setNestSubVecs(self, sx, idxm=None):
  *         if idxm is None: idxm = range(len(sx))             # <<<<<<<<<<<<<<
@@ -99514,44 +101452,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetsc
   __pyx_t_1 = (__pyx_v_idxm == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = PyObject_Length(__pyx_v_sx); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Length(__pyx_v_sx); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 811, __pyx_L1_error)
+    __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 811, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 811, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 811, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_idxm, __pyx_t_4);
     __pyx_t_4 = 0;
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Vec.pyx":786
+  /* "PETSc/Vec.pyx":812
  *     def setNestSubVecs(self, sx, idxm=None):
  *         if idxm is None: idxm = range(len(sx))
  *         else: assert len(idxm) == len(sx)             # <<<<<<<<<<<<<<
  *         cdef PetscInt N = 0
  *         cdef PetscInt* cidxm = NULL
  */
+  /*else*/ {
     #ifndef CYTHON_WITHOUT_ASSERTIONS
     if (unlikely(!Py_OptimizeFlag)) {
-      __pyx_t_3 = PyObject_Length(__pyx_v_idxm); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_6 = PyObject_Length(__pyx_v_sx); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_Length(__pyx_v_idxm); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(30, 812, __pyx_L1_error)
+      __pyx_t_6 = PyObject_Length(__pyx_v_sx); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(30, 812, __pyx_L1_error)
       if (unlikely(!((__pyx_t_3 == __pyx_t_6) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[30]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(30, 812, __pyx_L1_error)
       }
     }
     #endif
   }
   __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":787
+  /* "PETSc/Vec.pyx":813
  *         if idxm is None: idxm = range(len(sx))
  *         else: assert len(idxm) == len(sx)
  *         cdef PetscInt N = 0             # <<<<<<<<<<<<<<
@@ -99560,7 +101498,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetsc
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":788
+  /* "PETSc/Vec.pyx":814
  *         else: assert len(idxm) == len(sx)
  *         cdef PetscInt N = 0
  *         cdef PetscInt* cidxm = NULL             # <<<<<<<<<<<<<<
@@ -99569,19 +101507,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetsc
  */
   __pyx_v_cidxm = NULL;
 
-  /* "PETSc/Vec.pyx":789
+  /* "PETSc/Vec.pyx":815
  *         cdef PetscInt N = 0
  *         cdef PetscInt* cidxm = NULL
  *         idxm = iarray_i(idxm, &N, &cidxm)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_idxm, (&__pyx_v_N), (&__pyx_v_cidxm))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_idxm, (&__pyx_v_N), (&__pyx_v_cidxm))); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 815, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_idxm, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/Vec.pyx":792
+  /* "PETSc/Vec.pyx":818
  * 
  * 
  *         cdef PetscVec* csx = NULL             # <<<<<<<<<<<<<<
@@ -99590,22 +101528,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetsc
  */
   __pyx_v_csx = NULL;
 
-  /* "PETSc/Vec.pyx":793
+  /* "PETSc/Vec.pyx":819
  * 
  *         cdef PetscVec* csx = NULL
  *         tmp = oarray_p(empty_p(N), NULL, <void**>&csx)             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < N: csx[i] = (<Vec?>sx[i]).vec
  * 
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_N)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_N)); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 819, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_4, NULL, ((void **)(&__pyx_v_csx)))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_4, NULL, ((void **)(&__pyx_v_csx)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 819, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_tmp = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/Vec.pyx":794
+  /* "PETSc/Vec.pyx":820
  *         cdef PetscVec* csx = NULL
  *         tmp = oarray_p(empty_p(N), NULL, <void**>&csx)
  *         for i from 0 <= i < N: csx[i] = (<Vec?>sx[i]).vec             # <<<<<<<<<<<<<<
@@ -99614,24 +101552,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetsc
  */
   __pyx_t_7 = __pyx_v_N;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_7; __pyx_v_i++) {
-    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_sx, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_sx, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 820, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(30, 820, __pyx_L1_error)
     __pyx_t_8 = ((struct PyPetscVecObject *)__pyx_t_5)->vec;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     (__pyx_v_csx[__pyx_v_i]) = __pyx_t_8;
   }
 
-  /* "PETSc/Vec.pyx":796
+  /* "PETSc/Vec.pyx":822
  *         for i from 0 <= i < N: csx[i] = (<Vec?>sx[i]).vec
  * 
  *         CHKERR( VecNestSetSubVecs(self.vec, N, cidxm, csx) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNestSetSubVecs(__pyx_v_self->vec, __pyx_v_N, __pyx_v_cidxm, __pyx_v_csx)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNestSetSubVecs(__pyx_v_self->vec, __pyx_v_N, __pyx_v_cidxm, __pyx_v_csx)); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(30, 822, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":784
+  /* "PETSc/Vec.pyx":810
  *         return output
  * 
  *     def setNestSubVecs(self, sx, idxm=None):             # <<<<<<<<<<<<<<
@@ -99655,7 +101593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256setNestSubVecs(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":801
+/* "PETSc/Vec.pyx":827
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -99682,12 +101620,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVec
   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);
 
-  /* "PETSc/Vec.pyx":802
+  /* "PETSc/Vec.pyx":828
  *     property sizes:
  *         def __get__(self):
  *             return self.getSizes()             # <<<<<<<<<<<<<<
@@ -99695,7 +101630,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVec
  *             self.setSizes(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSizes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSizes); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 828, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -99708,10 +101643,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVec
     }
   }
   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[30]; __pyx_lineno = 802; __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(30, 828, __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[30]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 828, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -99719,7 +101654,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVec
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":801
+  /* "PETSc/Vec.pyx":827
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -99740,7 +101675,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":803
+/* "PETSc/Vec.pyx":829
  *         def __get__(self):
  *             return self.getSizes()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -99768,19 +101703,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_5sizes_2__set__(struct PyPetscVecObjec
   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);
 
-  /* "PETSc/Vec.pyx":804
+  /* "PETSc/Vec.pyx":830
  *             return self.getSizes()
  *         def __set__(self, value):
  *             self.setSizes(value)             # <<<<<<<<<<<<<<
  * 
  *     property size:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setSizes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setSizes); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 830, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -99793,23 +101725,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_5sizes_2__set__(struct PyPetscVecObjec
     }
   }
   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[30]; __pyx_lineno = 804; __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(30, 830, __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[30]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 830, __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[30]; __pyx_lineno = 804; __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(30, 830, __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;
 
-  /* "PETSc/Vec.pyx":803
+  /* "PETSc/Vec.pyx":829
  *         def __get__(self):
  *             return self.getSizes()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -99832,7 +101764,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_5sizes_2__set__(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":807
+/* "PETSc/Vec.pyx":833
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -99859,12 +101791,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecO
   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);
 
-  /* "PETSc/Vec.pyx":808
+  /* "PETSc/Vec.pyx":834
  *     property size:
  *         def __get__(self):
  *             return self.getSize()             # <<<<<<<<<<<<<<
@@ -99872,7 +101801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecO
  *     property local_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 834, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -99885,10 +101814,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecO
     }
   }
   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[30]; __pyx_lineno = 808; __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(30, 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_filename = __pyx_f[30]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 834, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -99896,7 +101825,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":807
+  /* "PETSc/Vec.pyx":833
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -99917,7 +101846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecO
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":811
+/* "PETSc/Vec.pyx":837
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -99944,12 +101873,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPe
   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);
 
-  /* "PETSc/Vec.pyx":812
+  /* "PETSc/Vec.pyx":838
  *     property local_size:
  *         def __get__(self):
  *             return self.getLocalSize()             # <<<<<<<<<<<<<<
@@ -99957,7 +101883,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPe
  *     property block_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getLocalSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getLocalSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 838, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -99970,10 +101896,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPe
     }
   }
   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[30]; __pyx_lineno = 812; __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(30, 838, __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[30]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 838, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -99981,7 +101907,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":811
+  /* "PETSc/Vec.pyx":837
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100002,7 +101928,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":815
+/* "PETSc/Vec.pyx":841
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100029,12 +101955,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPe
   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);
 
-  /* "PETSc/Vec.pyx":816
+  /* "PETSc/Vec.pyx":842
  *     property block_size:
  *         def __get__(self):
  *             return self.getBlockSize()             # <<<<<<<<<<<<<<
@@ -100042,7 +101965,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPe
  *     property owner_range:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -100055,10 +101978,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPe
     }
   }
   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[30]; __pyx_lineno = 816; __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(30, 842, __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[30]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 842, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -100066,7 +101989,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":815
+  /* "PETSc/Vec.pyx":841
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100087,7 +102010,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":819
+/* "PETSc/Vec.pyx":845
  * 
  *     property owner_range:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100114,12 +102037,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyP
   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);
 
-  /* "PETSc/Vec.pyx":820
+  /* "PETSc/Vec.pyx":846
  *     property owner_range:
  *         def __get__(self):
  *             return self.getOwnershipRange()             # <<<<<<<<<<<<<<
@@ -100127,7 +102047,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyP
  *     property owner_ranges:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOwnershipRange); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOwnershipRange); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 846, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -100140,10 +102060,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyP
     }
   }
   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[30]; __pyx_lineno = 820; __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(30, 846, __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[30]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 846, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -100151,7 +102071,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":819
+  /* "PETSc/Vec.pyx":845
  * 
  *     property owner_range:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100172,7 +102092,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":823
+/* "PETSc/Vec.pyx":849
  * 
  *     property owner_ranges:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100199,12 +102119,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct Py
   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);
 
-  /* "PETSc/Vec.pyx":824
+  /* "PETSc/Vec.pyx":850
  *     property owner_ranges:
  *         def __get__(self):
  *             return self.getOwnershipRanges()             # <<<<<<<<<<<<<<
@@ -100212,7 +102129,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct Py
  *     property buffer_w:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOwnershipRanges); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOwnershipRanges); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 850, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -100225,10 +102142,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct Py
     }
   }
   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[30]; __pyx_lineno = 824; __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(30, 850, __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[30]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 850, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -100236,7 +102153,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":823
+  /* "PETSc/Vec.pyx":849
  * 
  *     property owner_ranges:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100257,7 +102174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":828
+/* "PETSc/Vec.pyx":854
  *     property buffer_w:
  *         "Vec buffer (writable)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100284,12 +102201,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetsc
   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);
 
-  /* "PETSc/Vec.pyx":829
+  /* "PETSc/Vec.pyx":855
  *         "Vec buffer (writable)"
  *         def __get__(self):
  *             return self.getBuffer()             # <<<<<<<<<<<<<<
@@ -100297,7 +102211,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetsc
  *     property buffer_r:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBuffer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 855, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -100310,10 +102224,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetsc
     }
   }
   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[30]; __pyx_lineno = 829; __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(30, 855, __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[30]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 855, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -100321,7 +102235,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":828
+  /* "PETSc/Vec.pyx":854
  *     property buffer_w:
  *         "Vec buffer (writable)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100342,7 +102256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":833
+/* "PETSc/Vec.pyx":859
  *     property buffer_r:
  *         "Vec buffer (read-only)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100368,12 +102282,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_r___get__(struct PyPetsc
   __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("__get__", 0);
 
-  /* "PETSc/Vec.pyx":834
+  /* "PETSc/Vec.pyx":860
  *         "Vec buffer (read-only)"
  *         def __get__(self):
  *             return self.getBuffer(True)             # <<<<<<<<<<<<<<
@@ -100381,16 +102292,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_r___get__(struct PyPetsc
  *     property array_w:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBuffer); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 860, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__51, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__54, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 860, __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;
 
-  /* "PETSc/Vec.pyx":833
+  /* "PETSc/Vec.pyx":859
  *     property buffer_r:
  *         "Vec buffer (read-only)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100410,7 +102321,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_r___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":838
+/* "PETSc/Vec.pyx":864
  *     property array_w:
  *         "Vec array (writable)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100437,12 +102348,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscV
   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);
 
-  /* "PETSc/Vec.pyx":839
+  /* "PETSc/Vec.pyx":865
  *         "Vec array (writable)"
  *         def __get__(self):
  *             return self.getArray()             # <<<<<<<<<<<<<<
@@ -100450,7 +102358,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscV
  *             cdef buf = self.getBuffer()
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getArray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getArray); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 865, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -100463,10 +102371,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscV
     }
   }
   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[30]; __pyx_lineno = 839; __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(30, 865, __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[30]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 865, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -100474,7 +102382,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscV
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":838
+  /* "PETSc/Vec.pyx":864
  *     property array_w:
  *         "Vec array (writable)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100495,7 +102403,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":840
+/* "PETSc/Vec.pyx":866
  *         def __get__(self):
  *             return self.getArray()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -100532,19 +102440,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
   PyObject *__pyx_t_9 = NULL;
   int __pyx_t_10;
   int __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Vec.pyx":841
+  /* "PETSc/Vec.pyx":867
  *             return self.getArray()
  *         def __set__(self, value):
  *             cdef buf = self.getBuffer()             # <<<<<<<<<<<<<<
  *             with buf as array: array[:] = value
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBuffer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 867, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -100557,17 +102462,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
     }
   }
   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[30]; __pyx_lineno = 841; __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(30, 867, __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[30]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 867, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_buf = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":842
+  /* "PETSc/Vec.pyx":868
  *         def __set__(self, value):
  *             cdef buf = self.getBuffer()
  *             with buf as array: array[:] = value             # <<<<<<<<<<<<<<
@@ -100575,9 +102480,9 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
  *     property array_r:
  */
   /*with:*/ {
-    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_buf, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_buf, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 868, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_buf, __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_buf, __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 868, __pyx_L3_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -100590,10 +102495,10 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
       }
     }
     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[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 868, __pyx_L3_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[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 868, __pyx_L3_error)
     }
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -100601,6 +102506,8 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
     __pyx_t_1 = 0;
     /*try:*/ {
       {
+        __Pyx_PyThreadState_declare
+        __Pyx_PyThreadState_assign
         __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
         __Pyx_XGOTREF(__pyx_t_5);
         __Pyx_XGOTREF(__pyx_t_6);
@@ -100608,40 +102515,41 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
         /*try:*/ {
           __pyx_v_array = __pyx_t_2;
           __pyx_t_2 = 0;
-          if (__Pyx_PyObject_SetSlice(__pyx_v_array, __pyx_v_value, 0, 0, NULL, NULL, &__pyx_slice__52, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          if (__Pyx_PyObject_SetSlice(__pyx_v_array, __pyx_v_value, 0, 0, NULL, NULL, &__pyx_slice__55, 0, 0, 1) < 0) __PYX_ERR(30, 868, __pyx_L7_error)
         }
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
         goto __pyx_L14_try_end;
         __pyx_L7_error:;
+        __Pyx_PyThreadState_assign
         __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         /*except:*/ {
           __Pyx_AddTraceback("petsc4py.PETSc.Vec.array_w.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(30, 868, __pyx_L9_except_error)
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_8 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          __pyx_t_8 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 868, __pyx_L9_except_error)
           __Pyx_GOTREF(__pyx_t_8);
           __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-          if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_9)) __PYX_ERR(30, 868, __pyx_L9_except_error)
           __Pyx_GOTREF(__pyx_t_9);
           __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-          if (__pyx_t_10 < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__pyx_t_10 < 0) __PYX_ERR(30, 868, __pyx_L9_except_error)
           __pyx_t_11 = ((!(__pyx_t_10 != 0)) != 0);
           if (__pyx_t_11) {
             __Pyx_GIVEREF(__pyx_t_2);
             __Pyx_GIVEREF(__pyx_t_1);
             __Pyx_XGIVEREF(__pyx_t_3);
-            __Pyx_ErrRestore(__pyx_t_2, __pyx_t_1, __pyx_t_3);
+            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_1, __pyx_t_3);
             __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_3 = 0; 
-            {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+            __PYX_ERR(30, 868, __pyx_L9_except_error)
           }
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -100649,12 +102557,14 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
           goto __pyx_L8_exception_handled;
         }
         __pyx_L9_except_error:;
+        __Pyx_PyThreadState_assign
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
         goto __pyx_L1_error;
         __pyx_L8_exception_handled:;
+        __Pyx_PyThreadState_assign
         __Pyx_XGIVEREF(__pyx_t_5);
         __Pyx_XGIVEREF(__pyx_t_6);
         __Pyx_XGIVEREF(__pyx_t_7);
@@ -100665,9 +102575,9 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
     /*finally:*/ {
       /*normal exit:*/{
         if (__pyx_t_4) {
-          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__53, NULL);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__56, NULL);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 868, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         }
@@ -100682,7 +102592,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
     __pyx_L18:;
   }
 
-  /* "PETSc/Vec.pyx":840
+  /* "PETSc/Vec.pyx":866
  *         def __get__(self):
  *             return self.getArray()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -100707,7 +102617,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":846
+/* "PETSc/Vec.pyx":872
  *     property array_r:
  *         "Vec array (read-only)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100733,12 +102643,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_r___get__(struct PyPetscV
   __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("__get__", 0);
 
-  /* "PETSc/Vec.pyx":847
+  /* "PETSc/Vec.pyx":873
  *         "Vec array (read-only)"
  *         def __get__(self):
  *             return self.getArray(True)             # <<<<<<<<<<<<<<
@@ -100746,16 +102653,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_r___get__(struct PyPetscV
  *     property buffer:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getArray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getArray); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 873, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__54, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__57, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 873, __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;
 
-  /* "PETSc/Vec.pyx":846
+  /* "PETSc/Vec.pyx":872
  *     property array_r:
  *         "Vec array (read-only)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100775,7 +102682,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_r___get__(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":850
+/* "PETSc/Vec.pyx":876
  * 
  *     property buffer:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100800,12 +102707,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6buffer___get__(struct PyPetscVe
   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("__get__", 0);
 
-  /* "PETSc/Vec.pyx":851
+  /* "PETSc/Vec.pyx":877
  *     property buffer:
  *         def __get__(self):
  *             return self.buffer_w             # <<<<<<<<<<<<<<
@@ -100813,13 +102717,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6buffer___get__(struct PyPetscVe
  *     property array:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_buffer_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_buffer_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":850
+  /* "PETSc/Vec.pyx":876
  * 
  *     property buffer:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100838,7 +102742,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6buffer___get__(struct PyPetscVe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":854
+/* "PETSc/Vec.pyx":880
  * 
  *     property array:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100863,12 +102767,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5array___get__(struct PyPetscVec
   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("__get__", 0);
 
-  /* "PETSc/Vec.pyx":855
+  /* "PETSc/Vec.pyx":881
  *     property array:
  *         def __get__(self):
  *             return self.array_w             # <<<<<<<<<<<<<<
@@ -100876,13 +102777,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5array___get__(struct PyPetscVec
  *             self.array_w = value
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_array_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_array_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 881, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":854
+  /* "PETSc/Vec.pyx":880
  * 
  *     property array:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100901,7 +102802,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5array___get__(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":856
+/* "PETSc/Vec.pyx":882
  *         def __get__(self):
  *             return self.array_w
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -100925,21 +102826,18 @@ static int __pyx_pw_8petsc4py_5PETSc_3Vec_5array_3__set__(PyObject *__pyx_v_self
 static int __pyx_pf_8petsc4py_5PETSc_3Vec_5array_2__set__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Vec.pyx":857
+  /* "PETSc/Vec.pyx":883
  *             return self.array_w
  *         def __set__(self, value):
  *             self.array_w = value             # <<<<<<<<<<<<<<
  * 
  *     # --- NumPy array interface (legacy) ---
  */
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_array_w, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_array_w, __pyx_v_value) < 0) __PYX_ERR(30, 883, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":856
+  /* "PETSc/Vec.pyx":882
  *         def __get__(self):
  *             return self.array_w
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -100958,7 +102856,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_5array_2__set__(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":862
+/* "PETSc/Vec.pyx":888
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -100986,19 +102884,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_19__array_interface_____get__(st
   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);
 
-  /* "PETSc/Vec.pyx":863
+  /* "PETSc/Vec.pyx":889
  *     property __array_interface__:
  *         def __get__(self):
  *             cdef buf = self.getBuffer()             # <<<<<<<<<<<<<<
  *             return buf.__array_interface__
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBuffer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 863; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 889, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -101011,17 +102906,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_19__array_interface_____get__(st
     }
   }
   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[30]; __pyx_lineno = 863; __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(30, 889, __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[30]; __pyx_lineno = 863; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 889, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_buf = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":864
+  /* "PETSc/Vec.pyx":890
  *         def __get__(self):
  *             cdef buf = self.getBuffer()
  *             return buf.__array_interface__             # <<<<<<<<<<<<<<
@@ -101029,13 +102924,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_19__array_interface_____get__(st
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_buf, __pyx_n_s_array_interface); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_buf, __pyx_n_s_array_interface); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 890, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":862
+  /* "PETSc/Vec.pyx":888
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -101133,9 +103028,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_3__call__(PyObject *__pyx_v_
   PyObject *__pyx_v_y = 0;
   PyObject *__pyx_v_addv = 0;
   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("__call__ (wrapper)", 0);
@@ -101163,7 +103055,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_3__call__(PyObject *__pyx_v_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__call__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__call__", 0, 2, 4, 1); __PYX_ERR(31, 13, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -101177,7 +103069,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_3__call__(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(31, 13, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -101196,7 +103088,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_3__call__(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 13, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -101217,9 +103109,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_2__call__(struct PyPetscScat
   PyObject *__pyx_t_3 = NULL;
   Py_ssize_t __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
 
   /* "PETSc/Scatter.pyx":14
@@ -101229,7 +103118,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_2__call__(struct PyPetscScat
  * 
  *     #
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scatter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scatter); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
@@ -101243,7 +103132,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_2__call__(struct PyPetscScat
       __pyx_t_4 = 1;
     }
   }
-  __pyx_t_5 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(31, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   if (__pyx_t_3) {
     __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
@@ -101260,7 +103149,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_2__call__(struct PyPetscScat
   __Pyx_INCREF(__pyx_v_mode);
   __Pyx_GIVEREF(__pyx_v_mode);
   PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_mode);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -101303,9 +103192,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_5view(PyObject *__pyx_v_self
 static char __pyx_doc_8petsc4py_5PETSc_7Scatter_4view[] = "Scatter.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_5view(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);
@@ -101330,7 +103216,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_5view(PyObject *__pyx_v_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(31, 18, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -101343,13 +103229,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_5view(PyObject *__pyx_v_self
   }
   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[31]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 18, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.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[31]; __pyx_lineno = 18; __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(31, 18, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_4view(((struct PyPetscScatterObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -101369,9 +103255,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_4view(struct PyPetscScatterO
   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);
 
   /* "PETSc/Scatter.pyx":19
@@ -101395,9 +103278,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_4view(struct PyPetscScatterO
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/Scatter.pyx":21
  *         cdef PetscViewer vwr = NULL
@@ -101406,7 +103287,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_4view(struct PyPetscScatterO
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterView(__pyx_v_self->sct, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterView(__pyx_v_self->sct, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(31, 21, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":18
  *     #
@@ -101457,9 +103338,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_6destroy(struct PyPetscScatt
   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);
 
   /* "PETSc/Scatter.pyx":24
@@ -101469,7 +103347,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_6destroy(struct PyPetscScatt
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterDestroy((&__pyx_v_self->sct))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterDestroy((&__pyx_v_self->sct))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(31, 24, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":25
  *     def destroy(self):
@@ -101517,9 +103395,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_9create(PyObject *__pyx_v_se
   struct PyPetscISObject *__pyx_v_is_from = 0;
   struct PyPetscVecObject *__pyx_v_vec_to = 0;
   struct PyPetscISObject *__pyx_v_is_to = 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);
@@ -101545,21 +103420,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_9create(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_is_from)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("create", 1, 4, 4, 1); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("create", 1, 4, 4, 1); __PYX_ERR(31, 27, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_to)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("create", 1, 4, 4, 2); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("create", 1, 4, 4, 2); __PYX_ERR(31, 27, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_is_to)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("create", 1, 4, 4, 3); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("create", 1, 4, 4, 3); __PYX_ERR(31, 27, __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[31]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(31, 27, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -101576,16 +103451,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_9create(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 27, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_is_from), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "is_from", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_is_to), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "is_to", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 27, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_is_from), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "is_from", 0))) __PYX_ERR(31, 27, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 28, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_is_to), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "is_to", 0))) __PYX_ERR(31, 28, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_8create(((struct PyPetscScatterObject *)__pyx_v_self), __pyx_v_vec_from, __pyx_v_is_from, __pyx_v_vec_to, __pyx_v_is_to);
 
   /* function exit code */
@@ -101607,9 +103482,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatte
   int __pyx_t_2;
   IS __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
 
   /* "PETSc/Scatter.pyx":29
@@ -101634,9 +103506,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatte
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_is_from->iset;
     __pyx_v_cisfrom = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/Scatter.pyx":31
  *         cdef PetscIS cisfrom = NULL, cisto = NULL
@@ -101650,9 +103520,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatte
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_is_to->iset;
     __pyx_v_cisto = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/Scatter.pyx":32
  *         if is_from is not None: cisfrom = is_from.iset
@@ -101670,7 +103538,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatte
  *                 vec_from.vec, cisfrom, vec_to.vec, cisto, &newsct) )
  *         PetscCLEAR(self.obj); self.sct = newsct
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterCreate(__pyx_v_vec_from->vec, __pyx_v_cisfrom, __pyx_v_vec_to->vec, __pyx_v_cisto, (&__pyx_v_newsct))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterCreate(__pyx_v_vec_from->vec, __pyx_v_cisfrom, __pyx_v_vec_to->vec, __pyx_v_cisto, (&__pyx_v_newsct))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(31, 33, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":35
  *         CHKERR( VecScatterCreate(
@@ -101743,9 +103611,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_10copy(struct PyPetscScatter
   __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("copy", 0);
 
   /* "PETSc/Scatter.pyx":39
@@ -101755,7 +103620,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_10copy(struct PyPetscScatter
  *         CHKERR( VecScatterCopy(self.sct, &scatter.sct) )
  *         return scatter
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Scatter)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_scatter = ((struct PyPetscScatterObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -101767,7 +103632,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_10copy(struct PyPetscScatter
  *         return scatter
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterCopy(__pyx_v_self->sct, (&__pyx_v_scatter->sct))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterCopy(__pyx_v_self->sct, (&__pyx_v_scatter->sct))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(31, 40, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":41
  *         cdef Scatter scatter = Scatter()
@@ -101814,9 +103679,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_13toAll(PyObject *__pyx_v_cl
 static char __pyx_doc_8petsc4py_5PETSc_7Scatter_12toAll[] = "Scatter.toAll(type cls, Vec vec)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_13toAll(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("toAll (wrapper)", 0);
@@ -101838,7 +103700,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_13toAll(PyObject *__pyx_v_cl
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "toAll") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "toAll") < 0)) __PYX_ERR(31, 44, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -101849,14 +103711,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_13toAll(PyObject *__pyx_v_cl
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("toAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("toAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 44, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.toAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(((PyObject*)__pyx_v_cls), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(31, 44, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(((PyTypeObject*)__pyx_v_cls), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -101867,16 +103729,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_13toAll(PyObject *__pyx_v_cl
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyObject *__pyx_v_cls, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyPetscVecObject *__pyx_v_vec) {
   struct PyPetscScatterObject *__pyx_v_scatter = 0;
   struct PyPetscVecObject *__pyx_v_ovec = 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("toAll", 0);
 
   /* "PETSc/Scatter.pyx":45
@@ -101886,7 +103745,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyObje
  *         cdef Vec ovec = Vec()
  *         CHKERR( VecScatterCreateToAll(
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Scatter)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_scatter = ((struct PyPetscScatterObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -101898,7 +103757,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyObje
  *         CHKERR( VecScatterCreateToAll(
  *             vec.vec, &scatter.sct, &ovec.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[31]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ovec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -101910,7 +103769,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyObje
  *             vec.vec, &scatter.sct, &ovec.vec) )
  *         return (scatter, ovec)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterCreateToAll(__pyx_v_vec->vec, (&__pyx_v_scatter->sct), (&__pyx_v_ovec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterCreateToAll(__pyx_v_vec->vec, (&__pyx_v_scatter->sct), (&__pyx_v_ovec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(31, 47, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":49
  *         CHKERR( VecScatterCreateToAll(
@@ -101920,7 +103779,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyObje
  *     @classmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_scatter));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_scatter));
@@ -101966,9 +103825,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_15toZero(PyObject *__pyx_v_c
 static char __pyx_doc_8petsc4py_5PETSc_7Scatter_14toZero[] = "Scatter.toZero(type cls, Vec vec)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_15toZero(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("toZero (wrapper)", 0);
@@ -101990,7 +103846,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_15toZero(PyObject *__pyx_v_c
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "toZero") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "toZero") < 0)) __PYX_ERR(31, 52, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -102001,14 +103857,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_15toZero(PyObject *__pyx_v_c
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("toZero", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("toZero", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 52, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.toZero", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(((PyObject*)__pyx_v_cls), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(31, 52, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(((PyTypeObject*)__pyx_v_cls), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -102019,16 +103875,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_15toZero(PyObject *__pyx_v_c
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyObject *__pyx_v_cls, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyPetscVecObject *__pyx_v_vec) {
   struct PyPetscScatterObject *__pyx_v_scatter = 0;
   struct PyPetscVecObject *__pyx_v_ovec = 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("toZero", 0);
 
   /* "PETSc/Scatter.pyx":53
@@ -102038,7 +103891,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyObj
  *         cdef Vec ovec = Vec()
  *         CHKERR( VecScatterCreateToZero(
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Scatter)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_scatter = ((struct PyPetscScatterObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -102050,7 +103903,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyObj
  *         CHKERR( VecScatterCreateToZero(
  *             vec.vec, &scatter.sct, &ovec.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[31]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ovec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -102062,7 +103915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyObj
  *             vec.vec, &scatter.sct, &ovec.vec) )
  *         return (scatter, ovec)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterCreateToZero(__pyx_v_vec->vec, (&__pyx_v_scatter->sct), (&__pyx_v_ovec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterCreateToZero(__pyx_v_vec->vec, (&__pyx_v_scatter->sct), (&__pyx_v_ovec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(31, 55, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":57
  *         CHKERR( VecScatterCreateToZero(
@@ -102072,7 +103925,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyObj
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_scatter));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_scatter));
@@ -102121,9 +103974,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
   struct PyPetscVecObject *__pyx_v_vec_to = 0;
   PyObject *__pyx_v_addv = 0;
   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("begin (wrapper)", 0);
@@ -102159,7 +104009,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_to)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("begin", 0, 2, 4, 1); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("begin", 0, 2, 4, 1); __PYX_ERR(31, 60, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -102173,7 +104023,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "begin") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "begin") < 0)) __PYX_ERR(31, 60, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -102192,14 +104042,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("begin", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("begin", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 60, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 60, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 60, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(((struct PyPetscScatterObject *)__pyx_v_self), __pyx_v_vec_from, __pyx_v_vec_to, __pyx_v_addv, __pyx_v_mode);
 
   /* "PETSc/Scatter.pyx":60
@@ -102227,9 +104077,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(struct PyPetscScatte
   InsertMode __pyx_t_1;
   ScatterMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("begin", 0);
 
   /* "PETSc/Scatter.pyx":62
@@ -102239,7 +104086,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(struct PyPetscScatte
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(31, 62, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
   /* "PETSc/Scatter.pyx":63
@@ -102249,7 +104096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(struct PyPetscScatte
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
  *                                 caddv, csctm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1L))) __PYX_ERR(31, 63, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
   /* "PETSc/Scatter.pyx":64
@@ -102259,7 +104106,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(struct PyPetscScatte
  *                                 caddv, csctm) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterBegin(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterBegin(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(31, 64, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":60
  *     #
@@ -102297,9 +104144,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_19end(PyObject *__pyx_v_self
   struct PyPetscVecObject *__pyx_v_vec_to = 0;
   PyObject *__pyx_v_addv = 0;
   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("end (wrapper)", 0);
@@ -102335,7 +104179,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_19end(PyObject *__pyx_v_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_to)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("end", 0, 2, 4, 1); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("end", 0, 2, 4, 1); __PYX_ERR(31, 67, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -102349,7 +104193,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_19end(PyObject *__pyx_v_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "end") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "end") < 0)) __PYX_ERR(31, 67, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -102368,14 +104212,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_19end(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("end", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("end", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 67, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.end", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 67, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 67, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_18end(((struct PyPetscScatterObject *)__pyx_v_self), __pyx_v_vec_from, __pyx_v_vec_to, __pyx_v_addv, __pyx_v_mode);
 
   /* "PETSc/Scatter.pyx":67
@@ -102403,9 +104247,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_18end(struct PyPetscScatterO
   InsertMode __pyx_t_1;
   ScatterMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("end", 0);
 
   /* "PETSc/Scatter.pyx":69
@@ -102415,7 +104256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_18end(struct PyPetscScatterO
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(31, 69, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
   /* "PETSc/Scatter.pyx":70
@@ -102425,7 +104266,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_18end(struct PyPetscScatterO
  *         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,
  *                               caddv, csctm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1L))) __PYX_ERR(31, 70, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
   /* "PETSc/Scatter.pyx":71
@@ -102435,7 +104276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_18end(struct PyPetscScatterO
  *                               caddv, csctm) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterEnd(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterEnd(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(31, 71, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":67
  *                                 caddv, csctm) )
@@ -102473,9 +104314,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_21scatterBegin(PyObject *__p
   struct PyPetscVecObject *__pyx_v_vec_to = 0;
   PyObject *__pyx_v_addv = 0;
   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("scatterBegin (wrapper)", 0);
@@ -102511,7 +104349,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_21scatterBegin(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_to)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("scatterBegin", 0, 2, 4, 1); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("scatterBegin", 0, 2, 4, 1); __PYX_ERR(31, 76, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -102525,7 +104363,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_21scatterBegin(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatterBegin") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatterBegin") < 0)) __PYX_ERR(31, 76, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -102544,14 +104382,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_21scatterBegin(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("scatterBegin", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("scatterBegin", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 76, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.scatterBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 76, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 76, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(((struct PyPetscScatterObject *)__pyx_v_self), __pyx_v_vec_from, __pyx_v_vec_to, __pyx_v_addv, __pyx_v_mode);
 
   /* "PETSc/Scatter.pyx":76
@@ -102579,9 +104417,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(struct PyPets
   InsertMode __pyx_t_1;
   ScatterMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("scatterBegin", 0);
 
   /* "PETSc/Scatter.pyx":78
@@ -102591,7 +104426,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(struct PyPets
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(31, 78, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
   /* "PETSc/Scatter.pyx":79
@@ -102601,7 +104436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(struct PyPets
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
  *                                 caddv, csctm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1L))) __PYX_ERR(31, 79, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
   /* "PETSc/Scatter.pyx":80
@@ -102611,7 +104446,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(struct PyPets
  *                                 caddv, csctm) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterBegin(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterBegin(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(31, 80, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":76
  *     #
@@ -102649,9 +104484,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_23scatterEnd(PyObject *__pyx
   struct PyPetscVecObject *__pyx_v_vec_to = 0;
   PyObject *__pyx_v_addv = 0;
   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("scatterEnd (wrapper)", 0);
@@ -102687,7 +104519,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_23scatterEnd(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_to)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("scatterEnd", 0, 2, 4, 1); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("scatterEnd", 0, 2, 4, 1); __PYX_ERR(31, 83, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -102701,7 +104533,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_23scatterEnd(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatterEnd") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatterEnd") < 0)) __PYX_ERR(31, 83, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -102720,14 +104552,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_23scatterEnd(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("scatterEnd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("scatterEnd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 83, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.scatterEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 83, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 83, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(((struct PyPetscScatterObject *)__pyx_v_self), __pyx_v_vec_from, __pyx_v_vec_to, __pyx_v_addv, __pyx_v_mode);
 
   /* "PETSc/Scatter.pyx":83
@@ -102755,9 +104587,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(struct PyPetscS
   InsertMode __pyx_t_1;
   ScatterMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("scatterEnd", 0);
 
   /* "PETSc/Scatter.pyx":85
@@ -102767,7 +104596,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(struct PyPetscS
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(31, 85, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
   /* "PETSc/Scatter.pyx":86
@@ -102777,7 +104606,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(struct PyPetscS
  *         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,
  *                               caddv, csctm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1L))) __PYX_ERR(31, 86, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
   /* "PETSc/Scatter.pyx":87
@@ -102787,7 +104616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(struct PyPetscS
  *                               caddv, csctm) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterEnd(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterEnd(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(31, 87, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":83
  *                                 caddv, csctm) )
@@ -102825,9 +104654,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_25scatter(PyObject *__pyx_v_
   struct PyPetscVecObject *__pyx_v_vec_to = 0;
   PyObject *__pyx_v_addv = 0;
   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("scatter (wrapper)", 0);
@@ -102863,7 +104689,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_25scatter(PyObject *__pyx_v_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_to)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("scatter", 0, 2, 4, 1); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("scatter", 0, 2, 4, 1); __PYX_ERR(31, 90, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -102877,7 +104703,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_25scatter(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter") < 0)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter") < 0)) __PYX_ERR(31, 90, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -102896,14 +104722,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_25scatter(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("scatter", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[31]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("scatter", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 90, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Scatter.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 90, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 90, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(((struct PyPetscScatterObject *)__pyx_v_self), __pyx_v_vec_from, __pyx_v_vec_to, __pyx_v_addv, __pyx_v_mode);
 
   /* "PETSc/Scatter.pyx":90
@@ -102931,9 +104757,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(struct PyPetscScat
   InsertMode __pyx_t_1;
   ScatterMode __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("scatter", 0);
 
   /* "PETSc/Scatter.pyx":92
@@ -102943,7 +104766,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(struct PyPetscScat
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(31, 92, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
   /* "PETSc/Scatter.pyx":93
@@ -102953,7 +104776,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(struct PyPetscScat
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
  *                                 caddv, csctm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1))) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)-1L))) __PYX_ERR(31, 93, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
   /* "PETSc/Scatter.pyx":94
@@ -102963,7 +104786,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(struct PyPetscScat
  *                                 caddv, csctm) )
  *         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterBegin(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterBegin(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(31, 94, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":96
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
@@ -102972,7 +104795,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(struct PyPetscScat
  *                               caddv, csctm) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterEnd(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterEnd(__pyx_v_self->sct, __pyx_v_vec_from->vec, __pyx_v_vec_to->vec, __pyx_v_caddv, __pyx_v_csctm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(31, 96, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":90
  *                               caddv, csctm) )
@@ -103077,9 +104900,6 @@ static void __pyx_pw_8petsc4py_5PETSc_7Section_3__dealloc__(PyObject *__pyx_v_se
 static void __pyx_pf_8petsc4py_5PETSc_7Section_2__dealloc__(struct PyPetscSectionObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
   /* "PETSc/Section.pyx":10
@@ -103089,7 +104909,7 @@ static void __pyx_pf_8petsc4py_5PETSc_7Section_2__dealloc__(struct PyPetscSectio
  *         self.sec = NULL
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionDestroy((&__pyx_v_self->sec))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionDestroy((&__pyx_v_self->sec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 10, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":11
  *     def __dealloc__(self):
@@ -103129,9 +104949,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_5view(PyObject *__pyx_v_self
 static char __pyx_doc_8petsc4py_5PETSc_7Section_4view[] = "Section.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_5view(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);
@@ -103156,7 +104973,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_5view(PyObject *__pyx_v_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(32, 13, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -103169,13 +104986,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_5view(PyObject *__pyx_v_self
   }
   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[32]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 13, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.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[32]; __pyx_lineno = 13; __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(32, 13, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Section_4view(((struct PyPetscSectionObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -103195,9 +105012,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_4view(struct PyPetscSectionO
   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);
 
   /* "PETSc/Section.pyx":14
@@ -103221,9 +105035,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_4view(struct PyPetscSectionO
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/Section.pyx":16
  *         cdef PetscViewer vwr = NULL
@@ -103232,7 +105044,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_4view(struct PyPetscSectionO
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionView(__pyx_v_self->sec, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionView(__pyx_v_self->sec, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(32, 16, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":13
  *         self.sec = NULL
@@ -103283,9 +105095,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_6destroy(struct PyPetscSecti
   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);
 
   /* "PETSc/Section.pyx":19
@@ -103295,7 +105104,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_6destroy(struct PyPetscSecti
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionDestroy((&__pyx_v_self->sec))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionDestroy((&__pyx_v_self->sec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 19, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":20
  *     def destroy(self):
@@ -103340,9 +105149,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_9create(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_7Section_8create[] = "Section.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_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);
@@ -103367,7 +105173,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_9create(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(32, 22, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -103380,7 +105186,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_9create(PyObject *__pyx_v_se
   }
   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[32]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 22, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -103400,9 +105206,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_8create(struct PyPetscSectio
   __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);
 
   /* "PETSc/Section.pyx":23
@@ -103412,7 +105215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_8create(struct PyPetscSectio
  *         cdef PetscSection newsec = NULL
  *         CHKERR( PetscSectionCreate(ccomm, &newsec) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(32, 23, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/Section.pyx":24
@@ -103431,7 +105234,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_8create(struct PyPetscSectio
  *         PetscCLEAR(self.obj); self.sec = newsec
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionCreate(__pyx_v_ccomm, (&__pyx_v_newsec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionCreate(__pyx_v_ccomm, (&__pyx_v_newsec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 25, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":26
  *         cdef PetscSection newsec = NULL
@@ -103506,9 +105309,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_10clone(struct PyPetscSectio
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("clone", 0);
 
   /* "PETSc/Section.pyx":30
@@ -103530,10 +105330,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_10clone(struct PyPetscSectio
     }
   }
   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[32]; __pyx_lineno = 30; __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(32, 30, __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[32]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(32, 30, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -103550,7 +105350,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_10clone(struct PyPetscSectio
  *         return sec
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionClone(__pyx_v_self->sec, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionClone(__pyx_v_self->sec, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(32, 31, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":32
  *         cdef Section sec = <Section>type(self)()
@@ -103615,9 +105415,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_12setUp(struct PyPetscSectio
   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);
 
   /* "PETSc/Section.pyx":35
@@ -103627,7 +105424,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_12setUp(struct PyPetscSectio
  * 
  *     def reset(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetUp(__pyx_v_self->sec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetUp(__pyx_v_self->sec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 35, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":34
  *         return sec
@@ -103678,9 +105475,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_14reset(struct PyPetscSectio
   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);
 
   /* "PETSc/Section.pyx":38
@@ -103690,7 +105484,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_14reset(struct PyPetscSectio
  * 
  *     def getNumFields(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionReset(__pyx_v_self->sec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionReset(__pyx_v_self->sec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 38, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":37
  *         CHKERR( PetscSectionSetUp(self.sec) )
@@ -103743,9 +105537,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_16getNumFields(struct PyPets
   __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("getNumFields", 0);
 
   /* "PETSc/Section.pyx":41
@@ -103764,7 +105555,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_16getNumFields(struct PyPets
  *         return toInt(numFields)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetNumFields(__pyx_v_self->sec, (&__pyx_v_numFields))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetNumFields(__pyx_v_self->sec, (&__pyx_v_numFields))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 42, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":43
  *         cdef PetscInt numFields = 0
@@ -103774,7 +105565,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_16getNumFields(struct PyPets
  *     def setNumFields(self,numFields):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_numFields); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_numFields); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 43, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -103812,9 +105603,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_19setNumFields(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_7Section_18setNumFields[] = "Section.setNumFields(self, numFields)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_19setNumFields(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_numFields = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setNumFields (wrapper)", 0);
@@ -103836,7 +105624,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_19setNumFields(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, "setNumFields") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNumFields") < 0)) __PYX_ERR(32, 45, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -103847,7 +105635,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_19setNumFields(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNumFields", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setNumFields", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 45, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setNumFields", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -103866,9 +105654,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_18setNumFields(struct PyPets
   __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("setNumFields", 0);
 
   /* "PETSc/Section.pyx":46
@@ -103878,7 +105663,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_18setNumFields(struct PyPets
  *         CHKERR( PetscSectionSetNumFields(self.sec, cnumFields) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numFields); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numFields); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 46, __pyx_L1_error)
   __pyx_v_cnumFields = __pyx_t_1;
 
   /* "PETSc/Section.pyx":47
@@ -103888,7 +105673,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_18setNumFields(struct PyPets
  * 
  *     def getFieldName(self,field):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetNumFields(__pyx_v_self->sec, __pyx_v_cnumFields)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetNumFields(__pyx_v_self->sec, __pyx_v_cnumFields)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 47, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":45
  *         return toInt(numFields)
@@ -103923,9 +105708,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_21getFieldName(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_7Section_20getFieldName[] = "Section.getFieldName(self, field)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_21getFieldName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFieldName (wrapper)", 0);
@@ -103947,7 +105729,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_21getFieldName(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, "getFieldName") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldName") < 0)) __PYX_ERR(32, 49, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -103958,7 +105740,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_21getFieldName(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFieldName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFieldName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 49, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getFieldName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -103979,9 +105761,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_20getFieldName(struct PyPets
   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("getFieldName", 0);
 
   /* "PETSc/Section.pyx":50
@@ -103991,7 +105770,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_20getFieldName(struct PyPets
  *         cdef const_char *fieldName = NULL
  *         CHKERR( PetscSectionGetFieldName(self.sec,cfield,&fieldName) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 50, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":51
@@ -104010,7 +105789,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_20getFieldName(struct PyPets
  *         return bytes2str(fieldName)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldName(__pyx_v_self->sec, __pyx_v_cfield, (&__pyx_v_fieldName))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldName(__pyx_v_self->sec, __pyx_v_cfield, (&__pyx_v_fieldName))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 52, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":53
  *         cdef const_char *fieldName = NULL
@@ -104020,7 +105799,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_20getFieldName(struct PyPets
  *     def setFieldName(self,field,fieldName):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_fieldName); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_fieldName); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -104059,9 +105838,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_22setFieldName[] = "Section.setF
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_23setFieldName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_fieldName = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldName (wrapper)", 0);
@@ -104085,11 +105861,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_23setFieldName(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fieldName)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFieldName", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFieldName", 1, 2, 2, 1); __PYX_ERR(32, 55, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldName") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldName") < 0)) __PYX_ERR(32, 55, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -104102,7 +105878,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_23setFieldName(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldName", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldName", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 55, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setFieldName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -104123,9 +105899,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_22setFieldName(struct PyPets
   PetscInt __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("setFieldName", 0);
   __Pyx_INCREF(__pyx_v_fieldName);
 
@@ -104136,7 +105909,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_22setFieldName(struct PyPets
  *         cdef const_char *cname = NULL
  *         fieldName = str2bytes(fieldName, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 56, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":57
@@ -104155,7 +105928,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_22setFieldName(struct PyPets
  *         CHKERR( PetscSectionSetFieldName(self.sec,cfield,cname) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_fieldName, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_fieldName, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_fieldName, __pyx_t_2);
   __pyx_t_2 = 0;
@@ -104167,7 +105940,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_22setFieldName(struct PyPets
  * 
  *     def getFieldComponents(self,field):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldName(__pyx_v_self->sec, __pyx_v_cfield, __pyx_v_cname)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldName(__pyx_v_self->sec, __pyx_v_cfield, __pyx_v_cname)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(32, 59, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":55
  *         return bytes2str(fieldName)
@@ -104195,7 +105968,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_22setFieldName(struct PyPets
  *         CHKERR( PetscSectionSetFieldName(self.sec,cfield,cname) )
  * 
  *     def getFieldComponents(self,field):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cfield = asInt(field), cnumComp
+ *         cdef PetscInt cfield = asInt(field), cnumComp = 0
  *         CHKERR( PetscSectionGetFieldComponents(self.sec,cfield,&cnumComp) )
  */
 
@@ -104204,9 +105977,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_25getFieldComponents(PyObjec
 static char __pyx_doc_8petsc4py_5PETSc_7Section_24getFieldComponents[] = "Section.getFieldComponents(self, field)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_25getFieldComponents(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFieldComponents (wrapper)", 0);
@@ -104228,7 +105998,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_25getFieldComponents(PyObjec
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldComponents") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldComponents") < 0)) __PYX_ERR(32, 61, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -104239,7 +106009,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_25getFieldComponents(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFieldComponents", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFieldComponents", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 61, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getFieldComponents", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -104260,39 +106030,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_24getFieldComponents(struct
   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("getFieldComponents", 0);
 
   /* "PETSc/Section.pyx":62
  * 
  *     def getFieldComponents(self,field):
- *         cdef PetscInt cfield = asInt(field), cnumComp             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cfield = asInt(field), cnumComp = 0             # <<<<<<<<<<<<<<
  *         CHKERR( PetscSectionGetFieldComponents(self.sec,cfield,&cnumComp) )
  *         return toInt(cnumComp)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 62, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
+  __pyx_v_cnumComp = 0;
 
   /* "PETSc/Section.pyx":63
  *     def getFieldComponents(self,field):
- *         cdef PetscInt cfield = asInt(field), cnumComp
+ *         cdef PetscInt cfield = asInt(field), cnumComp = 0
  *         CHKERR( PetscSectionGetFieldComponents(self.sec,cfield,&cnumComp) )             # <<<<<<<<<<<<<<
  *         return toInt(cnumComp)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldComponents(__pyx_v_self->sec, __pyx_v_cfield, (&__pyx_v_cnumComp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldComponents(__pyx_v_self->sec, __pyx_v_cfield, (&__pyx_v_cnumComp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 63, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":64
- *         cdef PetscInt cfield = asInt(field), cnumComp
+ *         cdef PetscInt cfield = asInt(field), cnumComp = 0
  *         CHKERR( PetscSectionGetFieldComponents(self.sec,cfield,&cnumComp) )
  *         return toInt(cnumComp)             # <<<<<<<<<<<<<<
  * 
  *     def setFieldComponents(self,field,numComp):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumComp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumComp); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -104302,7 +106070,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_24getFieldComponents(struct
  *         CHKERR( PetscSectionSetFieldName(self.sec,cfield,cname) )
  * 
  *     def getFieldComponents(self,field):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cfield = asInt(field), cnumComp
+ *         cdef PetscInt cfield = asInt(field), cnumComp = 0
  *         CHKERR( PetscSectionGetFieldComponents(self.sec,cfield,&cnumComp) )
  */
 
@@ -104331,9 +106099,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_26setFieldComponents[] = "Sectio
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_27setFieldComponents(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_numComp = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldComponents (wrapper)", 0);
@@ -104357,11 +106122,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_27setFieldComponents(PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numComp)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFieldComponents", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFieldComponents", 1, 2, 2, 1); __PYX_ERR(32, 66, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldComponents") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldComponents") < 0)) __PYX_ERR(32, 66, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -104374,7 +106139,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_27setFieldComponents(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldComponents", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldComponents", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 66, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setFieldComponents", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -104394,9 +106159,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_26setFieldComponents(struct
   __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("setFieldComponents", 0);
 
   /* "PETSc/Section.pyx":67
@@ -104406,7 +106168,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_26setFieldComponents(struct
  *         cdef PetscInt cnumComp = asInt(numComp)
  *         CHKERR( PetscSectionSetFieldComponents(self.sec,cfield,cnumComp) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 67, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":68
@@ -104416,7 +106178,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_26setFieldComponents(struct
  *         CHKERR( PetscSectionSetFieldComponents(self.sec,cfield,cnumComp) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numComp); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numComp); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 68, __pyx_L1_error)
   __pyx_v_cnumComp = __pyx_t_1;
 
   /* "PETSc/Section.pyx":69
@@ -104426,7 +106188,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_26setFieldComponents(struct
  * 
  *     def getChart(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldComponents(__pyx_v_self->sec, __pyx_v_cfield, __pyx_v_cnumComp)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldComponents(__pyx_v_self->sec, __pyx_v_cfield, __pyx_v_cnumComp)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 69, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":66
  *         return toInt(cnumComp)
@@ -104482,9 +106244,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_28getChart(struct PyPetscSec
   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("getChart", 0);
 
   /* "PETSc/Section.pyx":72
@@ -104504,7 +106263,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_28getChart(struct PyPetscSec
  *         return toInt(pStart), toInt(pEnd)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetChart(__pyx_v_self->sec, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetChart(__pyx_v_self->sec, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 73, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":74
  *         cdef PetscInt pStart = 0, pEnd = 0
@@ -104514,11 +106273,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_28getChart(struct PyPetscSec
  *     def setChart(self, pStart, pEnd):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pStart); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pStart); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pEnd); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pEnd); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(32, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -104565,9 +106324,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_30setChart[] = "Section.setChart
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_31setChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_pStart = 0;
   PyObject *__pyx_v_pEnd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setChart (wrapper)", 0);
@@ -104591,11 +106347,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_31setChart(PyObject *__pyx_v
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pEnd)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, 1); __PYX_ERR(32, 76, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setChart") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setChart") < 0)) __PYX_ERR(32, 76, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -104608,7 +106364,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_31setChart(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 76, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setChart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -104628,9 +106384,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_30setChart(struct PyPetscSec
   __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("setChart", 0);
 
   /* "PETSc/Section.pyx":77
@@ -104640,7 +106393,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_30setChart(struct PyPetscSec
  *         cdef PetscInt cEnd   = asInt(pEnd)
  *         CHKERR( PetscSectionSetChart(self.sec, cStart, cEnd) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pStart); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pStart); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 77, __pyx_L1_error)
   __pyx_v_cStart = __pyx_t_1;
 
   /* "PETSc/Section.pyx":78
@@ -104650,7 +106403,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_30setChart(struct PyPetscSec
  *         CHKERR( PetscSectionSetChart(self.sec, cStart, cEnd) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pEnd); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pEnd); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 78, __pyx_L1_error)
   __pyx_v_cEnd = __pyx_t_1;
 
   /* "PETSc/Section.pyx":79
@@ -104660,7 +106413,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_30setChart(struct PyPetscSec
  * 
  *     def getDof(self,point):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetChart(__pyx_v_self->sec, __pyx_v_cStart, __pyx_v_cEnd)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetChart(__pyx_v_self->sec, __pyx_v_cStart, __pyx_v_cEnd)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 79, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":76
  *         return toInt(pStart), toInt(pEnd)
@@ -104686,7 +106439,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_30setChart(struct PyPetscSec
  *         CHKERR( PetscSectionSetChart(self.sec, cStart, cEnd) )
  * 
  *     def getDof(self,point):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cpoint = asInt(point), cnumDof
+ *         cdef PetscInt cpoint = asInt(point), cnumDof = 0
  *         CHKERR( PetscSectionGetDof(self.sec,cpoint,&cnumDof) )
  */
 
@@ -104695,9 +106448,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_33getDof(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_7Section_32getDof[] = "Section.getDof(self, point)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_33getDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDof (wrapper)", 0);
@@ -104719,7 +106469,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_33getDof(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDof") < 0)) __PYX_ERR(32, 81, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -104730,7 +106480,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_33getDof(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getDof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getDof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 81, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -104751,39 +106501,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_32getDof(struct PyPetscSecti
   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("getDof", 0);
 
   /* "PETSc/Section.pyx":82
  * 
  *     def getDof(self,point):
- *         cdef PetscInt cpoint = asInt(point), cnumDof             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point), cnumDof = 0             # <<<<<<<<<<<<<<
  *         CHKERR( PetscSectionGetDof(self.sec,cpoint,&cnumDof) )
  *         return toInt(cnumDof)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 82, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
+  __pyx_v_cnumDof = 0;
 
   /* "PETSc/Section.pyx":83
  *     def getDof(self,point):
- *         cdef PetscInt cpoint = asInt(point), cnumDof
+ *         cdef PetscInt cpoint = asInt(point), cnumDof = 0
  *         CHKERR( PetscSectionGetDof(self.sec,cpoint,&cnumDof) )             # <<<<<<<<<<<<<<
  *         return toInt(cnumDof)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetDof(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_cnumDof))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetDof(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_cnumDof))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 83, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":84
- *         cdef PetscInt cpoint = asInt(point), cnumDof
+ *         cdef PetscInt cpoint = asInt(point), cnumDof = 0
  *         CHKERR( PetscSectionGetDof(self.sec,cpoint,&cnumDof) )
  *         return toInt(cnumDof)             # <<<<<<<<<<<<<<
  * 
  *     def setDof(self,point,numDof):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumDof); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumDof); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 84, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -104793,7 +106541,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_32getDof(struct PyPetscSecti
  *         CHKERR( PetscSectionSetChart(self.sec, cStart, cEnd) )
  * 
  *     def getDof(self,point):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cpoint = asInt(point), cnumDof
+ *         cdef PetscInt cpoint = asInt(point), cnumDof = 0
  *         CHKERR( PetscSectionGetDof(self.sec,cpoint,&cnumDof) )
  */
 
@@ -104822,9 +106570,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_34setDof[] = "Section.setDof(sel
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_35setDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_numDof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDof (wrapper)", 0);
@@ -104848,11 +106593,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_35setDof(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setDof", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setDof", 1, 2, 2, 1); __PYX_ERR(32, 86, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDof") < 0)) __PYX_ERR(32, 86, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -104865,7 +106610,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_35setDof(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 86, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -104885,9 +106630,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_34setDof(struct PyPetscSecti
   __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("setDof", 0);
 
   /* "PETSc/Section.pyx":87
@@ -104897,7 +106639,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_34setDof(struct PyPetscSecti
  *         cdef PetscInt cnumDof = asInt(numDof)
  *         CHKERR( PetscSectionSetDof(self.sec,cpoint,cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 87, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":88
@@ -104907,7 +106649,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_34setDof(struct PyPetscSecti
  *         CHKERR( PetscSectionSetDof(self.sec,cpoint,cnumDof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 88, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":89
@@ -104917,7 +106659,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_34setDof(struct PyPetscSecti
  * 
  *     def addDof(self,point,numDof):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 89, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":86
  *         return toInt(cnumDof)
@@ -104953,9 +106695,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_36addDof[] = "Section.addDof(sel
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_37addDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_numDof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addDof (wrapper)", 0);
@@ -104979,11 +106718,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_37addDof(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("addDof", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("addDof", 1, 2, 2, 1); __PYX_ERR(32, 91, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addDof") < 0)) __PYX_ERR(32, 91, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -104996,7 +106735,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_37addDof(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("addDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("addDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 91, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.addDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -105016,9 +106755,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_36addDof(struct PyPetscSecti
   __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("addDof", 0);
 
   /* "PETSc/Section.pyx":92
@@ -105028,7 +106764,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_36addDof(struct PyPetscSecti
  *         cdef PetscInt cnumDof = asInt(numDof)
  *         CHKERR( PetscSectionAddDof(self.sec,cpoint,cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 92, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":93
@@ -105038,7 +106774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_36addDof(struct PyPetscSecti
  *         CHKERR( PetscSectionAddDof(self.sec,cpoint,cnumDof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 93, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":94
@@ -105048,7 +106784,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_36addDof(struct PyPetscSecti
  * 
  *     def getFieldDof(self,point,field):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionAddDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionAddDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 94, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":91
  *         CHKERR( PetscSectionSetDof(self.sec,cpoint,cnumDof) )
@@ -105084,9 +106820,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_38getFieldDof[] = "Section.getFi
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_39getFieldDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_field = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFieldDof (wrapper)", 0);
@@ -105110,11 +106843,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_39getFieldDof(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("getFieldDof", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("getFieldDof", 1, 2, 2, 1); __PYX_ERR(32, 96, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldDof") < 0)) __PYX_ERR(32, 96, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -105127,7 +106860,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_39getFieldDof(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFieldDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFieldDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 96, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getFieldDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -105149,9 +106882,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_38getFieldDof(struct PyPetsc
   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("getFieldDof", 0);
 
   /* "PETSc/Section.pyx":97
@@ -105161,7 +106891,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_38getFieldDof(struct PyPetsc
  *         cdef PetscInt cfield = asInt(field)
  *         CHKERR( PetscSectionGetFieldDof(self.sec,cpoint,cfield,&cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 97, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_cnumDof = 0;
 
@@ -105172,7 +106902,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_38getFieldDof(struct PyPetsc
  *         CHKERR( PetscSectionGetFieldDof(self.sec,cpoint,cfield,&cnumDof) )
  *         return toInt(cnumDof)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 98, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":99
@@ -105182,7 +106912,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_38getFieldDof(struct PyPetsc
  *         return toInt(cnumDof)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_cnumDof))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_cnumDof))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 99, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":100
  *         cdef PetscInt cfield = asInt(field)
@@ -105192,7 +106922,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_38getFieldDof(struct PyPetsc
  *     def setFieldDof(self,point,field,numDof):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumDof); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumDof); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -105232,9 +106962,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_41setFieldDof(PyObject *__py
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_numDof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldDof (wrapper)", 0);
@@ -105259,16 +106986,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_41setFieldDof(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFieldDof", 1, 3, 3, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFieldDof", 1, 3, 3, 1); __PYX_ERR(32, 102, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFieldDof", 1, 3, 3, 2); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFieldDof", 1, 3, 3, 2); __PYX_ERR(32, 102, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldDof") < 0)) __PYX_ERR(32, 102, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -105283,7 +107010,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_41setFieldDof(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldDof", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldDof", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 102, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setFieldDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -105304,9 +107031,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_40setFieldDof(struct PyPetsc
   __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("setFieldDof", 0);
 
   /* "PETSc/Section.pyx":103
@@ -105316,7 +107040,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_40setFieldDof(struct PyPetsc
  *         cdef PetscInt cfield = asInt(field)
  *         cdef PetscInt cnumDof = asInt(numDof)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 103, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":104
@@ -105326,7 +107050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_40setFieldDof(struct PyPetsc
  *         cdef PetscInt cnumDof = asInt(numDof)
  *         CHKERR( PetscSectionSetFieldDof(self.sec,cpoint,cfield,cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 104, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":105
@@ -105336,7 +107060,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_40setFieldDof(struct PyPetsc
  *         CHKERR( PetscSectionSetFieldDof(self.sec,cpoint,cfield,cnumDof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 105, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":106
@@ -105346,7 +107070,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_40setFieldDof(struct PyPetsc
  * 
  *     def addFieldDof(self,point,field,numDof):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 106, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":102
  *         return toInt(cnumDof)
@@ -105383,9 +107107,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_43addFieldDof(PyObject *__py
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_numDof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addFieldDof (wrapper)", 0);
@@ -105410,16 +107131,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_43addFieldDof(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("addFieldDof", 1, 3, 3, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("addFieldDof", 1, 3, 3, 1); __PYX_ERR(32, 108, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("addFieldDof", 1, 3, 3, 2); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("addFieldDof", 1, 3, 3, 2); __PYX_ERR(32, 108, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addFieldDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addFieldDof") < 0)) __PYX_ERR(32, 108, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -105434,7 +107155,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_43addFieldDof(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("addFieldDof", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("addFieldDof", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 108, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.addFieldDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -105455,9 +107176,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_42addFieldDof(struct PyPetsc
   __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("addFieldDof", 0);
 
   /* "PETSc/Section.pyx":109
@@ -105467,7 +107185,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_42addFieldDof(struct PyPetsc
  *         cdef PetscInt cfield = asInt(field)
  *         cdef PetscInt cnumDof = asInt(numDof)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 109, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":110
@@ -105477,7 +107195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_42addFieldDof(struct PyPetsc
  *         cdef PetscInt cnumDof = asInt(numDof)
  *         CHKERR( PetscSectionAddFieldDof(self.sec,cpoint,cfield,cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 110, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":111
@@ -105487,7 +107205,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_42addFieldDof(struct PyPetsc
  *         CHKERR( PetscSectionAddFieldDof(self.sec,cpoint,cfield,cnumDof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 111, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":112
@@ -105497,7 +107215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_42addFieldDof(struct PyPetsc
  * 
  *     def getConstraintDof(self,point):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionAddFieldDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionAddFieldDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 112, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":108
  *         CHKERR( PetscSectionSetFieldDof(self.sec,cpoint,cfield,cnumDof) )
@@ -105532,9 +107250,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_45getConstraintDof(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_7Section_44getConstraintDof[] = "Section.getConstraintDof(self, point)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_45getConstraintDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getConstraintDof (wrapper)", 0);
@@ -105556,7 +107271,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_45getConstraintDof(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConstraintDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConstraintDof") < 0)) __PYX_ERR(32, 114, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -105567,7 +107282,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_45getConstraintDof(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getConstraintDof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getConstraintDof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 114, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getConstraintDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -105588,9 +107303,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_44getConstraintDof(struct Py
   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("getConstraintDof", 0);
 
   /* "PETSc/Section.pyx":115
@@ -105600,7 +107312,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_44getConstraintDof(struct Py
  *         CHKERR( PetscSectionGetConstraintDof(self.sec,cpoint,&cnumDof) )
  *         return toInt(cnumDof)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 115, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_cnumDof = 0;
 
@@ -105611,7 +107323,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_44getConstraintDof(struct Py
  *         return toInt(cnumDof)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_cnumDof))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_cnumDof))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 116, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":117
  *         cdef PetscInt cpoint = asInt(point), cnumDof = 0
@@ -105621,7 +107333,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_44getConstraintDof(struct Py
  *     def setConstraintDof(self,point,numDof):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumDof); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumDof); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -105660,9 +107372,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_46setConstraintDof[] = "Section.
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_47setConstraintDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_numDof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConstraintDof (wrapper)", 0);
@@ -105686,11 +107395,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_47setConstraintDof(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setConstraintDof", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setConstraintDof", 1, 2, 2, 1); __PYX_ERR(32, 119, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConstraintDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConstraintDof") < 0)) __PYX_ERR(32, 119, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -105703,7 +107412,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_47setConstraintDof(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConstraintDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConstraintDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 119, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setConstraintDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -105723,9 +107432,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_46setConstraintDof(struct Py
   __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("setConstraintDof", 0);
 
   /* "PETSc/Section.pyx":120
@@ -105735,7 +107441,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_46setConstraintDof(struct Py
  *         cdef PetscInt cnumDof = asInt(numDof)
  *         CHKERR( PetscSectionSetConstraintDof(self.sec,cpoint,cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 120, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":121
@@ -105745,7 +107451,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_46setConstraintDof(struct Py
  *         CHKERR( PetscSectionSetConstraintDof(self.sec,cpoint,cnumDof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 121, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":122
@@ -105755,7 +107461,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_46setConstraintDof(struct Py
  * 
  *     def addConstraintDof(self,point,numDof):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 122, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":119
  *         return toInt(cnumDof)
@@ -105791,9 +107497,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_48addConstraintDof[] = "Section.
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_49addConstraintDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_numDof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addConstraintDof (wrapper)", 0);
@@ -105817,11 +107520,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_49addConstraintDof(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("addConstraintDof", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("addConstraintDof", 1, 2, 2, 1); __PYX_ERR(32, 124, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addConstraintDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addConstraintDof") < 0)) __PYX_ERR(32, 124, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -105834,7 +107537,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_49addConstraintDof(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("addConstraintDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("addConstraintDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 124, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.addConstraintDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -105854,9 +107557,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_48addConstraintDof(struct Py
   __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("addConstraintDof", 0);
 
   /* "PETSc/Section.pyx":125
@@ -105866,7 +107566,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_48addConstraintDof(struct Py
  *         cdef PetscInt cnumDof = asInt(numDof)
  *         CHKERR( PetscSectionAddConstraintDof(self.sec,cpoint,cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 125, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":126
@@ -105876,7 +107576,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_48addConstraintDof(struct Py
  *         CHKERR( PetscSectionAddConstraintDof(self.sec,cpoint,cnumDof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 126, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":127
@@ -105886,7 +107586,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_48addConstraintDof(struct Py
  * 
  *     def getFieldConstraintDof(self,point,field):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionAddConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionAddConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 127, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":124
  *         CHKERR( PetscSectionSetConstraintDof(self.sec,cpoint,cnumDof) )
@@ -105922,9 +107622,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_50getFieldConstraintDof[] = "Sec
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_51getFieldConstraintDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_field = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFieldConstraintDof (wrapper)", 0);
@@ -105948,11 +107645,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_51getFieldConstraintDof(PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("getFieldConstraintDof", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("getFieldConstraintDof", 1, 2, 2, 1); __PYX_ERR(32, 129, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldConstraintDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldConstraintDof") < 0)) __PYX_ERR(32, 129, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -105965,7 +107662,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_51getFieldConstraintDof(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFieldConstraintDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFieldConstraintDof", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 129, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getFieldConstraintDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -105987,9 +107684,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_50getFieldConstraintDof(stru
   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("getFieldConstraintDof", 0);
 
   /* "PETSc/Section.pyx":130
@@ -105999,7 +107693,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_50getFieldConstraintDof(stru
  *         cdef PetscInt cfield = asInt(field)
  *         CHKERR( PetscSectionGetFieldConstraintDof(self.sec,cpoint,cfield,&cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 130, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_cnumDof = 0;
 
@@ -106010,7 +107704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_50getFieldConstraintDof(stru
  *         CHKERR( PetscSectionGetFieldConstraintDof(self.sec,cpoint,cfield,&cnumDof) )
  *         return toInt(cnumDof)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 131, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":132
@@ -106020,7 +107714,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_50getFieldConstraintDof(stru
  *         return toInt(cnumDof)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_cnumDof))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_cnumDof))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 132, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":133
  *         cdef PetscInt cfield = asInt(field)
@@ -106030,7 +107724,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_50getFieldConstraintDof(stru
  *     def setFieldConstraintDof(self,point,field,numDof):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumDof); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cnumDof); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -106070,9 +107764,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_53setFieldConstraintDof(PyOb
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_numDof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldConstraintDof (wrapper)", 0);
@@ -106097,16 +107788,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_53setFieldConstraintDof(PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFieldConstraintDof", 1, 3, 3, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFieldConstraintDof", 1, 3, 3, 1); __PYX_ERR(32, 135, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFieldConstraintDof", 1, 3, 3, 2); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFieldConstraintDof", 1, 3, 3, 2); __PYX_ERR(32, 135, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldConstraintDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldConstraintDof") < 0)) __PYX_ERR(32, 135, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -106121,7 +107812,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_53setFieldConstraintDof(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldConstraintDof", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldConstraintDof", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 135, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setFieldConstraintDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -106142,9 +107833,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_52setFieldConstraintDof(stru
   __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("setFieldConstraintDof", 0);
 
   /* "PETSc/Section.pyx":136
@@ -106154,7 +107842,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_52setFieldConstraintDof(stru
  *         cdef PetscInt cfield = asInt(field)
  *         cdef PetscInt cnumDof = asInt(numDof)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 136, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":137
@@ -106164,7 +107852,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_52setFieldConstraintDof(stru
  *         cdef PetscInt cnumDof = asInt(numDof)
  *         CHKERR( PetscSectionSetFieldConstraintDof(self.sec,cpoint,cfield,cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 137, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":138
@@ -106174,7 +107862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_52setFieldConstraintDof(stru
  *         CHKERR( PetscSectionSetFieldConstraintDof(self.sec,cpoint,cfield,cnumDof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 138, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":139
@@ -106184,7 +107872,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_52setFieldConstraintDof(stru
  * 
  *     def addFieldConstraintDof(self,point,field,numDof):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 139, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":135
  *         return toInt(cnumDof)
@@ -106221,9 +107909,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_55addFieldConstraintDof(PyOb
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_numDof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addFieldConstraintDof (wrapper)", 0);
@@ -106248,16 +107933,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_55addFieldConstraintDof(PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("addFieldConstraintDof", 1, 3, 3, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("addFieldConstraintDof", 1, 3, 3, 1); __PYX_ERR(32, 141, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("addFieldConstraintDof", 1, 3, 3, 2); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("addFieldConstraintDof", 1, 3, 3, 2); __PYX_ERR(32, 141, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addFieldConstraintDof") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addFieldConstraintDof") < 0)) __PYX_ERR(32, 141, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -106272,7 +107957,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_55addFieldConstraintDof(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("addFieldConstraintDof", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("addFieldConstraintDof", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 141, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.addFieldConstraintDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -106293,9 +107978,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_54addFieldConstraintDof(stru
   __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("addFieldConstraintDof", 0);
 
   /* "PETSc/Section.pyx":142
@@ -106305,7 +107987,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_54addFieldConstraintDof(stru
  *         cdef PetscInt cfield = asInt(field)
  *         cdef PetscInt cnumDof = asInt(numDof)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 142, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":143
@@ -106315,7 +107997,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_54addFieldConstraintDof(stru
  *         cdef PetscInt cnumDof = asInt(numDof)
  *         CHKERR( PetscSectionAddFieldConstraintDof(self.sec,cpoint,cfield,cnumDof) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 143, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":144
@@ -106325,7 +108007,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_54addFieldConstraintDof(stru
  *         CHKERR( PetscSectionAddFieldConstraintDof(self.sec,cpoint,cfield,cnumDof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 144, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":145
@@ -106335,7 +108017,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_54addFieldConstraintDof(stru
  * 
  *     def getConstraintIndices(self,point):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionAddFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionAddFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cnumDof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 145, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":141
  *         CHKERR( PetscSectionSetFieldConstraintDof(self.sec,cpoint,cfield,cnumDof) )
@@ -106370,9 +108052,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_57getConstraintIndices(PyObj
 static char __pyx_doc_8petsc4py_5PETSc_7Section_56getConstraintIndices[] = "Section.getConstraintIndices(self, point)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_57getConstraintIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getConstraintIndices (wrapper)", 0);
@@ -106394,7 +108073,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_57getConstraintIndices(PyObj
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConstraintIndices") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConstraintIndices") < 0)) __PYX_ERR(32, 147, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -106405,7 +108084,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_57getConstraintIndices(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getConstraintIndices", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getConstraintIndices", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 147, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getConstraintIndices", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -106427,9 +108106,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_56getConstraintIndices(struc
   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("getConstraintIndices", 0);
 
   /* "PETSc/Section.pyx":148
@@ -106439,7 +108115,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_56getConstraintIndices(struc
  *         cdef PetscInt nindex = 0
  *         cdef const_PetscInt *indices = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 148, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":149
@@ -106467,7 +108143,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_56getConstraintIndices(struc
  *         CHKERR( PetscSectionGetConstraintIndices(self.sec, cpoint, &indices) )
  *         return array_i(nindex, indices)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_nindex))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_nindex))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 151, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":152
  *         cdef const_PetscInt *indices = NULL
@@ -106476,7 +108152,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_56getConstraintIndices(struc
  *         return array_i(nindex, indices)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstraintIndices(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_indices))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstraintIndices(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_indices))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 152, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":153
  *         CHKERR( PetscSectionGetConstraintDof(self.sec, cpoint, &nindex) )
@@ -106486,7 +108162,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_56getConstraintIndices(struc
  *     def setConstraintIndices(self,point,indices):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nindex, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nindex, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 153, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -106525,9 +108201,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_58setConstraintIndices[] = "Sect
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_59setConstraintIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_indices = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConstraintIndices (wrapper)", 0);
@@ -106551,11 +108224,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_59setConstraintIndices(PyObj
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setConstraintIndices", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setConstraintIndices", 1, 2, 2, 1); __PYX_ERR(32, 155, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConstraintIndices") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConstraintIndices") < 0)) __PYX_ERR(32, 155, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -106568,7 +108241,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_59setConstraintIndices(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConstraintIndices", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConstraintIndices", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 155, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setConstraintIndices", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -106590,9 +108263,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_58setConstraintIndices(struc
   PetscInt __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("setConstraintIndices", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
@@ -106603,7 +108273,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_58setConstraintIndices(struc
  *         cdef PetscInt nindex = 0
  *         cdef PetscInt *cindices = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 156, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":157
@@ -106631,7 +108301,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_58setConstraintIndices(struc
  *         CHKERR( PetscSectionSetConstraintDof(self.sec,cpoint,nindex) )
  *         CHKERR( PetscSectionSetConstraintIndices(self.sec,cpoint,cindices) )
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nindex), (&__pyx_v_cindices))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nindex), (&__pyx_v_cindices))); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_2);
   __pyx_t_2 = 0;
@@ -106643,7 +108313,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_58setConstraintIndices(struc
  *         CHKERR( PetscSectionSetConstraintIndices(self.sec,cpoint,cindices) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_nindex)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_nindex)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(32, 160, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":161
  *         indices = iarray_i(indices, &nindex, &cindices)
@@ -106652,7 +108322,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_58setConstraintIndices(struc
  * 
  *     def getFieldConstraintIndices(self,point,field):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetConstraintIndices(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cindices)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetConstraintIndices(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cindices)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(32, 161, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":155
  *         return array_i(nindex, indices)
@@ -106690,9 +108360,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices[] =
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_61getFieldConstraintIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_field = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFieldConstraintIndices (wrapper)", 0);
@@ -106716,11 +108383,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_61getFieldConstraintIndices(
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("getFieldConstraintIndices", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("getFieldConstraintIndices", 1, 2, 2, 1); __PYX_ERR(32, 163, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldConstraintIndices") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFieldConstraintIndices") < 0)) __PYX_ERR(32, 163, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -106733,7 +108400,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_61getFieldConstraintIndices(
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFieldConstraintIndices", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFieldConstraintIndices", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 163, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getFieldConstraintIndices", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -106756,9 +108423,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices(
   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("getFieldConstraintIndices", 0);
 
   /* "PETSc/Section.pyx":164
@@ -106768,7 +108432,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices(
  *         cdef PetscInt cfield = asInt(field)
  *         cdef PetscInt nindex = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 164, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":165
@@ -106778,7 +108442,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices(
  *         cdef PetscInt nindex = 0
  *         cdef const_PetscInt *indices = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 165, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":166
@@ -106806,7 +108470,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices(
  *         CHKERR( PetscSectionGetFieldConstraintIndices(self.sec,cpoint,cfield,&indices) )
  *         return array_i(nindex, indices)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_nindex))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_nindex))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 168, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":169
  *         cdef const_PetscInt *indices = NULL
@@ -106815,7 +108479,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices(
  *         return array_i(nindex, indices)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldConstraintIndices(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_indices))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetFieldConstraintIndices(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_indices))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 169, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":170
  *         CHKERR( PetscSectionGetFieldConstraintDof(self.sec,cpoint,cfield,&nindex) )
@@ -106825,7 +108489,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_60getFieldConstraintIndices(
  *     def setFieldConstraintIndices(self,point,field,indices):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nindex, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nindex, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 170, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -106865,9 +108529,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_63setFieldConstraintIndices(
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_indices = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldConstraintIndices (wrapper)", 0);
@@ -106892,16 +108553,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_63setFieldConstraintIndices(
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFieldConstraintIndices", 1, 3, 3, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFieldConstraintIndices", 1, 3, 3, 1); __PYX_ERR(32, 172, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFieldConstraintIndices", 1, 3, 3, 2); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFieldConstraintIndices", 1, 3, 3, 2); __PYX_ERR(32, 172, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldConstraintIndices") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldConstraintIndices") < 0)) __PYX_ERR(32, 172, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -106916,7 +108577,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_63setFieldConstraintIndices(
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldConstraintIndices", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldConstraintIndices", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 172, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setFieldConstraintIndices", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -106939,9 +108600,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_62setFieldConstraintIndices(
   PetscInt __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("setFieldConstraintIndices", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
@@ -106952,7 +108610,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_62setFieldConstraintIndices(
  *         cdef PetscInt cfield = asInt(field)
  *         cdef PetscInt nindex = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 173, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":174
@@ -106962,7 +108620,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_62setFieldConstraintIndices(
  *         cdef PetscInt nindex = 0
  *         cdef PetscInt *cindices = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 174, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":175
@@ -106990,7 +108648,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_62setFieldConstraintIndices(
  *         CHKERR( PetscSectionSetFieldConstraintDof(self.sec,cpoint,cfield,nindex) )
  *         CHKERR( PetscSectionSetFieldConstraintIndices(self.sec,cpoint,cfield,cindices) )
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nindex), (&__pyx_v_cindices))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_indices, (&__pyx_v_nindex), (&__pyx_v_cindices))); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 177, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_2);
   __pyx_t_2 = 0;
@@ -107002,7 +108660,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_62setFieldConstraintIndices(
  *         CHKERR( PetscSectionSetFieldConstraintIndices(self.sec,cpoint,cfield,cindices) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_nindex)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldConstraintDof(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_nindex)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(32, 178, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":179
  *         indices = iarray_i(indices, &nindex, &cindices)
@@ -107011,7 +108669,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_62setFieldConstraintIndices(
  * 
  *     def getMaxDof(self):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldConstraintIndices(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cindices)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetFieldConstraintIndices(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_cfield, __pyx_v_cindices)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(32, 179, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":172
  *         return array_i(nindex, indices)
@@ -107066,9 +108724,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_64getMaxDof(struct PyPetscSe
   __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("getMaxDof", 0);
 
   /* "PETSc/Section.pyx":182
@@ -107087,7 +108742,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_64getMaxDof(struct PyPetscSe
  *         return toInt(maxDof)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetMaxDof(__pyx_v_self->sec, (&__pyx_v_maxDof))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetMaxDof(__pyx_v_self->sec, (&__pyx_v_maxDof))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 183, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":184
  *         cdef PetscInt maxDof = 0
@@ -107097,7 +108752,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_64getMaxDof(struct PyPetscSe
  *     def getStorageSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxDof); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxDof); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -107153,9 +108808,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_66getStorageSize(struct PyPe
   __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("getStorageSize", 0);
 
   /* "PETSc/Section.pyx":187
@@ -107174,7 +108826,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_66getStorageSize(struct PyPe
  *         return toInt(size)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetStorageSize(__pyx_v_self->sec, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetStorageSize(__pyx_v_self->sec, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 188, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":189
  *         cdef PetscInt size = 0
@@ -107184,7 +108836,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_66getStorageSize(struct PyPe
  *     def getConstrainedStorageSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -107240,9 +108892,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_68getConstrainedStorageSize(
   __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("getConstrainedStorageSize", 0);
 
   /* "PETSc/Section.pyx":192
@@ -107261,7 +108910,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_68getConstrainedStorageSize(
  *         return toInt(size)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstrainedStorageSize(__pyx_v_self->sec, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstrainedStorageSize(__pyx_v_self->sec, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 193, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":194
  *         cdef PetscInt size = 0
@@ -107271,7 +108920,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_68getConstrainedStorageSize(
  *     def getOffset(self,point):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 194, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -107309,9 +108958,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_71getOffset(PyObject *__pyx_
 static char __pyx_doc_8petsc4py_5PETSc_7Section_70getOffset[] = "Section.getOffset(self, point)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_71getOffset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getOffset (wrapper)", 0);
@@ -107333,7 +108979,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_71getOffset(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, "getOffset") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getOffset") < 0)) __PYX_ERR(32, 196, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -107344,7 +108990,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_71getOffset(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getOffset", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getOffset", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 196, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.getOffset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -107365,9 +109011,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_70getOffset(struct PyPetscSe
   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("getOffset", 0);
 
   /* "PETSc/Section.pyx":197
@@ -107377,7 +109020,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_70getOffset(struct PyPetscSe
  *         CHKERR( PetscSectionGetOffset(self.sec,cpoint,&offset) )
  *         return toInt(offset)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 197, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_offset = 0;
 
@@ -107388,7 +109031,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_70getOffset(struct PyPetscSe
  *         return toInt(offset)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetOffset(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_offset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetOffset(__pyx_v_self->sec, __pyx_v_cpoint, (&__pyx_v_offset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 198, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":199
  *         cdef PetscInt cpoint = asInt(point), offset = 0
@@ -107398,7 +109041,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_70getOffset(struct PyPetscSe
  *     def setOffset(self,point,offset):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_offset); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 199, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -107437,9 +109080,6 @@ static char __pyx_doc_8petsc4py_5PETSc_7Section_72setOffset[] = "Section.setOffs
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_73setOffset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_v_offset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOffset (wrapper)", 0);
@@ -107463,11 +109103,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_73setOffset(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setOffset", 1, 2, 2, 1); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setOffset", 1, 2, 2, 1); __PYX_ERR(32, 201, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOffset") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOffset") < 0)) __PYX_ERR(32, 201, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -107480,7 +109120,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_73setOffset(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOffset", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOffset", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 201, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.setOffset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -107500,9 +109140,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_72setOffset(struct PyPetscSe
   __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("setOffset", 0);
 
   /* "PETSc/Section.pyx":202
@@ -107512,7 +109149,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_72setOffset(struct PyPetscSe
  *         cdef PetscInt coffset = asInt(offset)
  *         CHKERR( PetscSectionSetOffset(self.sec,cpoint,coffset) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 202, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":203
@@ -107522,7 +109159,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_72setOffset(struct PyPetscSe
  *         CHKERR( PetscSectionSetOffset(self.sec,cpoint,coffset) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_offset); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_offset); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(32, 203, __pyx_L1_error)
   __pyx_v_coffset = __pyx_t_1;
 
   /* "PETSc/Section.pyx":204
@@ -107532,7 +109169,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_72setOffset(struct PyPetscSe
  * 
  *     def getOffsetRange(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetOffset(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_coffset)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetOffset(__pyx_v_self->sec, __pyx_v_cpoint, __pyx_v_coffset)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 204, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":201
  *         return toInt(offset)
@@ -107588,9 +109225,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_74getOffsetRange(struct PyPe
   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("getOffsetRange", 0);
 
   /* "PETSc/Section.pyx":207
@@ -107610,7 +109244,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_74getOffsetRange(struct PyPe
  *         return toInt(oStart),toInt(oEnd)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetOffsetRange(__pyx_v_self->sec, (&__pyx_v_oStart), (&__pyx_v_oEnd))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetOffsetRange(__pyx_v_self->sec, (&__pyx_v_oStart), (&__pyx_v_oEnd))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(32, 208, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":209
  *         cdef PetscInt oStart = 0, oEnd = 0
@@ -107620,11 +109254,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_74getOffsetRange(struct PyPe
  *     def createGlobalSection(self, SF sf not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_oStart); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_oStart); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_oEnd); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_oEnd); if (unlikely(!__pyx_t_3)) __PYX_ERR(32, 209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(32, 209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -107662,7 +109296,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_74getOffsetRange(struct PyPe
  * 
  *     def createGlobalSection(self, SF sf not None):             # <<<<<<<<<<<<<<
  *         cdef Section gsec = Section()
- *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,&gsec.sec) )
+ *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )
  */
 
 /* Python wrapper */
@@ -107670,9 +109304,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_77createGlobalSection(PyObje
 static char __pyx_doc_8petsc4py_5PETSc_7Section_76createGlobalSection[] = "Section.createGlobalSection(self, SF sf)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_77createGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscSFObject *__pyx_v_sf = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createGlobalSection (wrapper)", 0);
@@ -107694,7 +109325,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_77createGlobalSection(PyObje
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGlobalSection") < 0)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGlobalSection") < 0)) __PYX_ERR(32, 211, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -107705,13 +109336,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_77createGlobalSection(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createGlobalSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[32]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createGlobalSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(32, 211, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Section.createGlobalSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) __PYX_ERR(32, 211, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(((struct PyPetscSectionObject *)__pyx_v_self), __pyx_v_sf);
 
   /* function exit code */
@@ -107729,19 +109360,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct
   __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("createGlobalSection", 0);
 
   /* "PETSc/Section.pyx":212
  * 
  *     def createGlobalSection(self, SF sf not None):
  *         cdef Section gsec = Section()             # <<<<<<<<<<<<<<
- *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,&gsec.sec) )
+ *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )
  *         return gsec
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Section)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(32, 212, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_gsec = ((struct PyPetscSectionObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -107749,14 +109377,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct
   /* "PETSc/Section.pyx":213
  *     def createGlobalSection(self, SF sf not None):
  *         cdef Section gsec = Section()
- *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,&gsec.sec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )             # <<<<<<<<<<<<<<
  *         return gsec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionCreateGlobalSection(__pyx_v_self->sec, __pyx_v_sf->sf, PETSC_FALSE, (&__pyx_v_gsec->sec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionCreateGlobalSection(__pyx_v_self->sec, __pyx_v_sf->sf, PETSC_FALSE, PETSC_FALSE, (&__pyx_v_gsec->sec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 213, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":214
  *         cdef Section gsec = Section()
- *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,&gsec.sec) )
+ *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )
  *         return gsec             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(__pyx_r);
@@ -107769,7 +109397,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct
  * 
  *     def createGlobalSection(self, SF sf not None):             # <<<<<<<<<<<<<<
  *         cdef Section gsec = Section()
- *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,&gsec.sec) )
+ *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )
  */
 
   /* function exit code */
@@ -107784,7 +109412,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":151
+/* "PETSc/Mat.pyx":160
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -107813,7 +109441,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Mat.pyx":152
+  /* "PETSc/Mat.pyx":161
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.mat             # <<<<<<<<<<<<<<
@@ -107822,7 +109450,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__p
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->mat));
 
-  /* "PETSc/Mat.pyx":153
+  /* "PETSc/Mat.pyx":162
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.mat
  *         self.mat = NULL             # <<<<<<<<<<<<<<
@@ -107831,7 +109459,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__p
  */
   __pyx_v_self->mat = NULL;
 
-  /* "PETSc/Mat.pyx":151
+  /* "PETSc/Mat.pyx":160
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -107845,7 +109473,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":157
+/* "PETSc/Mat.pyx":166
  *     # unary operations
  * 
  *     def __pos__(self):             # <<<<<<<<<<<<<<
@@ -107870,12 +109498,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_2__pos__(struct PyPetscMatObject
   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("__pos__", 0);
 
-  /* "PETSc/Mat.pyx":158
+  /* "PETSc/Mat.pyx":167
  * 
  *     def __pos__(self):
  *         return mat_pos(self)             # <<<<<<<<<<<<<<
@@ -107883,13 +109508,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_2__pos__(struct PyPetscMatObject
  *     def __neg__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":157
+  /* "PETSc/Mat.pyx":166
  *     # unary operations
  * 
  *     def __pos__(self):             # <<<<<<<<<<<<<<
@@ -107908,7 +109533,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_2__pos__(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":160
+/* "PETSc/Mat.pyx":169
  *         return mat_pos(self)
  * 
  *     def __neg__(self):             # <<<<<<<<<<<<<<
@@ -107933,12 +109558,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4__neg__(struct PyPetscMatObject
   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("__neg__", 0);
 
-  /* "PETSc/Mat.pyx":161
+  /* "PETSc/Mat.pyx":170
  * 
  *     def __neg__(self):
  *         return mat_neg(self)             # <<<<<<<<<<<<<<
@@ -107946,13 +109568,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4__neg__(struct PyPetscMatObject
  *     # inplace binary operations
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_neg(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_neg(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 170, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":160
+  /* "PETSc/Mat.pyx":169
  *         return mat_pos(self)
  * 
  *     def __neg__(self):             # <<<<<<<<<<<<<<
@@ -107971,7 +109593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4__neg__(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":165
+/* "PETSc/Mat.pyx":174
  *     # inplace binary operations
  * 
  *     def __iadd__(self, other):             # <<<<<<<<<<<<<<
@@ -107996,12 +109618,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_6__iadd__(struct PyPetscMatObjec
   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("__iadd__", 0);
 
-  /* "PETSc/Mat.pyx":166
+  /* "PETSc/Mat.pyx":175
  * 
  *     def __iadd__(self, other):
  *         return mat_iadd(self, other)             # <<<<<<<<<<<<<<
@@ -108009,13 +109628,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_6__iadd__(struct PyPetscMatObjec
  *     def __isub__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_iadd(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_iadd(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":165
+  /* "PETSc/Mat.pyx":174
  *     # inplace binary operations
  * 
  *     def __iadd__(self, other):             # <<<<<<<<<<<<<<
@@ -108034,7 +109653,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_6__iadd__(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":168
+/* "PETSc/Mat.pyx":177
  *         return mat_iadd(self, other)
  * 
  *     def __isub__(self, other):             # <<<<<<<<<<<<<<
@@ -108059,12 +109678,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_8__isub__(struct PyPetscMatObjec
   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("__isub__", 0);
 
-  /* "PETSc/Mat.pyx":169
+  /* "PETSc/Mat.pyx":178
  * 
  *     def __isub__(self, other):
  *         return mat_isub(self, other)             # <<<<<<<<<<<<<<
@@ -108072,13 +109688,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_8__isub__(struct PyPetscMatObjec
  *     def __imul__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_isub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_isub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 178, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":168
+  /* "PETSc/Mat.pyx":177
  *         return mat_iadd(self, other)
  * 
  *     def __isub__(self, other):             # <<<<<<<<<<<<<<
@@ -108097,7 +109713,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_8__isub__(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":171
+/* "PETSc/Mat.pyx":180
  *         return mat_isub(self, other)
  * 
  *     def __imul__(self, other):             # <<<<<<<<<<<<<<
@@ -108122,12 +109738,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10__imul__(struct PyPetscMatObje
   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("__imul__", 0);
 
-  /* "PETSc/Mat.pyx":172
+  /* "PETSc/Mat.pyx":181
  * 
  *     def __imul__(self, other):
  *         return mat_imul(self, other)             # <<<<<<<<<<<<<<
@@ -108135,13 +109748,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10__imul__(struct PyPetscMatObje
  *     def __idiv__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_imul(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_imul(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":171
+  /* "PETSc/Mat.pyx":180
  *         return mat_isub(self, other)
  * 
  *     def __imul__(self, other):             # <<<<<<<<<<<<<<
@@ -108160,7 +109773,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10__imul__(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":174
+/* "PETSc/Mat.pyx":183
  *         return mat_imul(self, other)
  * 
  *     def __idiv__(self, other):             # <<<<<<<<<<<<<<
@@ -108188,12 +109801,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12__idiv__(struct PyPetscMatObje
   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("__idiv__", 0);
 
-  /* "PETSc/Mat.pyx":175
+  /* "PETSc/Mat.pyx":184
  * 
  *     def __idiv__(self, other):
  *         return mat_idiv(self, other)             # <<<<<<<<<<<<<<
@@ -108201,13 +109811,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12__idiv__(struct PyPetscMatObje
  *     def __itruediv__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_idiv(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_idiv(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":174
+  /* "PETSc/Mat.pyx":183
  *         return mat_imul(self, other)
  * 
  *     def __idiv__(self, other):             # <<<<<<<<<<<<<<
@@ -108227,7 +109837,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12__idiv__(struct PyPetscMatObje
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
 
-/* "PETSc/Mat.pyx":177
+/* "PETSc/Mat.pyx":186
  *         return mat_idiv(self, other)
  * 
  *     def __itruediv__(self, other):             # <<<<<<<<<<<<<<
@@ -108252,12 +109862,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_14__itruediv__(struct PyPetscMat
   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("__itruediv__", 0);
 
-  /* "PETSc/Mat.pyx":178
+  /* "PETSc/Mat.pyx":187
  * 
  *     def __itruediv__(self, other):
  *         return mat_idiv(self, other)             # <<<<<<<<<<<<<<
@@ -108265,13 +109872,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_14__itruediv__(struct PyPetscMat
  *     # binary operations
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_idiv(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_idiv(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":177
+  /* "PETSc/Mat.pyx":186
  *         return mat_idiv(self, other)
  * 
  *     def __itruediv__(self, other):             # <<<<<<<<<<<<<<
@@ -108290,7 +109897,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_14__itruediv__(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":182
+/* "PETSc/Mat.pyx":191
  *     # binary operations
  * 
  *     def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -108317,23 +109924,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self
   int __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("__add__", 0);
 
-  /* "PETSc/Mat.pyx":183
+  /* "PETSc/Mat.pyx":192
  * 
  *     def __add__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
  *             return mat_add(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":184
+    /* "PETSc/Mat.pyx":193
  *     def __add__(self, other):
  *         if isinstance(self, Mat):
  *             return mat_add(self, other)             # <<<<<<<<<<<<<<
@@ -108341,32 +109945,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self
  *             return mat_radd(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_add(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 193, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_add(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Mat.pyx":192
+ * 
+ *     def __add__(self, other):
+ *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
+ *             return mat_add(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":186
+  /* "PETSc/Mat.pyx":195
  *             return mat_add(self, other)
  *         else:
  *             return mat_radd(other, self)             # <<<<<<<<<<<<<<
  * 
  *     def __sub__(self, other):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_radd(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 195, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_radd(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 195, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":182
+  /* "PETSc/Mat.pyx":191
  *     # binary operations
  * 
  *     def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -108385,7 +109997,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":188
+/* "PETSc/Mat.pyx":197
  *             return mat_radd(other, self)
  * 
  *     def __sub__(self, other):             # <<<<<<<<<<<<<<
@@ -108412,23 +110024,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self
   int __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("__sub__", 0);
 
-  /* "PETSc/Mat.pyx":189
+  /* "PETSc/Mat.pyx":198
  * 
  *     def __sub__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
  *             return mat_sub(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":190
+    /* "PETSc/Mat.pyx":199
  *     def __sub__(self, other):
  *         if isinstance(self, Mat):
  *             return mat_sub(self, other)             # <<<<<<<<<<<<<<
@@ -108436,32 +110045,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self
  *             return mat_rsub(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_sub(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 199, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_sub(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 199, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Mat.pyx":198
+ * 
+ *     def __sub__(self, other):
+ *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
+ *             return mat_sub(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":192
+  /* "PETSc/Mat.pyx":201
  *             return mat_sub(self, other)
  *         else:
  *             return mat_rsub(other, self)             # <<<<<<<<<<<<<<
  * 
  *     def __mul__(self, other):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_rsub(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 201, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_rsub(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 201, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":188
+  /* "PETSc/Mat.pyx":197
  *             return mat_radd(other, self)
  * 
  *     def __sub__(self, other):             # <<<<<<<<<<<<<<
@@ -108480,7 +110097,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":194
+/* "PETSc/Mat.pyx":203
  *             return mat_rsub(other, self)
  * 
  *     def __mul__(self, other):             # <<<<<<<<<<<<<<
@@ -108507,34 +110124,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
   int __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("__mul__", 0);
 
-  /* "PETSc/Mat.pyx":195
+  /* "PETSc/Mat.pyx":204
  * 
  *     def __mul__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
  *             if isinstance(other, Vec):
  *                 return mat_mul_vec(self, other)
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":196
+    /* "PETSc/Mat.pyx":205
  *     def __mul__(self, other):
  *         if isinstance(self, Mat):
  *             if isinstance(other, Vec):             # <<<<<<<<<<<<<<
  *                 return mat_mul_vec(self, other)
  *             else:
  */
-    __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_other, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+    __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec); 
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "PETSc/Mat.pyx":197
+      /* "PETSc/Mat.pyx":206
  *         if isinstance(self, Mat):
  *             if isinstance(other, Vec):
  *                 return mat_mul_vec(self, other)             # <<<<<<<<<<<<<<
@@ -108542,51 +110156,67 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
  *                 return mat_mul(self, other)
  */
       __Pyx_XDECREF(__pyx_r);
-      if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_mul_vec(((struct PyPetscMatObject *)__pyx_v_self), ((struct PyPetscVecObject *)__pyx_v_other))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 206, __pyx_L1_error)
+      if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(33, 206, __pyx_L1_error)
+      __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_mul_vec(((struct PyPetscMatObject *)__pyx_v_self), ((struct PyPetscVecObject *)__pyx_v_other))); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 206, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L0;
+
+      /* "PETSc/Mat.pyx":205
+ *     def __mul__(self, other):
+ *         if isinstance(self, Mat):
+ *             if isinstance(other, Vec):             # <<<<<<<<<<<<<<
+ *                 return mat_mul_vec(self, other)
+ *             else:
+ */
     }
-    /*else*/ {
 
-      /* "PETSc/Mat.pyx":199
+    /* "PETSc/Mat.pyx":208
  *                 return mat_mul_vec(self, other)
  *             else:
  *                 return mat_mul(self, other)             # <<<<<<<<<<<<<<
  *         else:
  *             return mat_rmul(other, self)
  */
+    /*else*/ {
       __Pyx_XDECREF(__pyx_r);
-      if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_mul(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 208, __pyx_L1_error)
+      __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_mul(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 208, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L0;
     }
+
+    /* "PETSc/Mat.pyx":204
+ * 
+ *     def __mul__(self, other):
+ *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
+ *             if isinstance(other, Vec):
+ *                 return mat_mul_vec(self, other)
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":201
+  /* "PETSc/Mat.pyx":210
  *                 return mat_mul(self, other)
  *         else:
  *             return mat_rmul(other, self)             # <<<<<<<<<<<<<<
  * 
  *     def __div__(self, other):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_rmul(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 210, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_rmul(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 210, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":194
+  /* "PETSc/Mat.pyx":203
  *             return mat_rsub(other, self)
  * 
  *     def __mul__(self, other):             # <<<<<<<<<<<<<<
@@ -108605,7 +110235,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":203
+/* "PETSc/Mat.pyx":212
  *             return mat_rmul(other, self)
  * 
  *     def __div__(self, other):             # <<<<<<<<<<<<<<
@@ -108635,23 +110265,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self
   int __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("__div__", 0);
 
-  /* "PETSc/Mat.pyx":204
+  /* "PETSc/Mat.pyx":213
  * 
  *     def __div__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
  *             return mat_div(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":205
+    /* "PETSc/Mat.pyx":214
  *     def __div__(self, other):
  *         if isinstance(self, Mat):
  *             return mat_div(self, other)             # <<<<<<<<<<<<<<
@@ -108659,32 +110286,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self
  *             return mat_rdiv(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_div(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 214, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_div(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 214, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Mat.pyx":213
+ * 
+ *     def __div__(self, other):
+ *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
+ *             return mat_div(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":207
+  /* "PETSc/Mat.pyx":216
  *             return mat_div(self, other)
  *         else:
  *             return mat_rdiv(other, self)             # <<<<<<<<<<<<<<
  * 
  *     def __truediv__(self, other):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_rdiv(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 216, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_rdiv(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 216, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":203
+  /* "PETSc/Mat.pyx":212
  *             return mat_rmul(other, self)
  * 
  *     def __div__(self, other):             # <<<<<<<<<<<<<<
@@ -108704,7 +110339,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
 
-/* "PETSc/Mat.pyx":209
+/* "PETSc/Mat.pyx":218
  *             return mat_rdiv(other, self)
  * 
  *     def __truediv__(self, other):             # <<<<<<<<<<<<<<
@@ -108731,23 +110366,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_
   int __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("__truediv__", 0);
 
-  /* "PETSc/Mat.pyx":210
+  /* "PETSc/Mat.pyx":219
  * 
  *     def __truediv__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
  *             return mat_div(self, other)
  *         else:
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":211
+    /* "PETSc/Mat.pyx":220
  *     def __truediv__(self, other):
  *         if isinstance(self, Mat):
  *             return mat_div(self, other)             # <<<<<<<<<<<<<<
@@ -108755,32 +110387,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_
  *             return mat_rdiv(other, self)
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_div(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 220, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_div(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_other)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Mat.pyx":219
+ * 
+ *     def __truediv__(self, other):
+ *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
+ *             return mat_div(self, other)
+ *         else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":213
+  /* "PETSc/Mat.pyx":222
  *             return mat_div(self, other)
  *         else:
  *             return mat_rdiv(other, self)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_rdiv(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 222, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_rdiv(((struct PyPetscMatObject *)__pyx_v_other), __pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 222, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":209
+  /* "PETSc/Mat.pyx":218
  *             return mat_rdiv(other, self)
  * 
  *     def __truediv__(self, other):             # <<<<<<<<<<<<<<
@@ -108799,7 +110439,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":217
+/* "PETSc/Mat.pyx":226
  *     #
  * 
  *     def __getitem__(self, ij):             # <<<<<<<<<<<<<<
@@ -108824,12 +110464,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_26__getitem__(struct PyPetscMatO
   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("__getitem__", 0);
 
-  /* "PETSc/Mat.pyx":218
+  /* "PETSc/Mat.pyx":227
  * 
  *     def __getitem__(self, ij):
  *         return mat_getitem(self, ij)             # <<<<<<<<<<<<<<
@@ -108837,13 +110474,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_26__getitem__(struct PyPetscMatO
  *     def __setitem__(self, ij, v):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_mat_getitem(__pyx_v_self, __pyx_v_ij); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_mat_getitem(__pyx_v_self, __pyx_v_ij); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":217
+  /* "PETSc/Mat.pyx":226
  *     #
  * 
  *     def __getitem__(self, ij):             # <<<<<<<<<<<<<<
@@ -108862,7 +110499,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_26__getitem__(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":220
+/* "PETSc/Mat.pyx":229
  *         return mat_getitem(self, ij)
  * 
  *     def __setitem__(self, ij, v):             # <<<<<<<<<<<<<<
@@ -108887,21 +110524,18 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_28__setitem__(struct PyPetscMatObject
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "PETSc/Mat.pyx":221
+  /* "PETSc/Mat.pyx":230
  * 
  *     def __setitem__(self, ij, v):
  *         mat_setitem(self, ij, v)             # <<<<<<<<<<<<<<
  * 
  *     def __call__(self, x, y=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_mat_setitem(__pyx_v_self, __pyx_v_ij, __pyx_v_v); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_mat_setitem(__pyx_v_self, __pyx_v_ij, __pyx_v_v); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 230, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":220
+  /* "PETSc/Mat.pyx":229
  *         return mat_getitem(self, ij)
  * 
  *     def __setitem__(self, ij, v):             # <<<<<<<<<<<<<<
@@ -108920,7 +110554,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_28__setitem__(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":223
+/* "PETSc/Mat.pyx":232
  *         mat_setitem(self, ij, v)
  * 
  *     def __call__(self, x, y=None):             # <<<<<<<<<<<<<<
@@ -108933,9 +110567,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_31__call__(PyObject *__pyx_v_sel
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_31__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_x = 0;
   PyObject *__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("__call__ (wrapper)", 0);
@@ -108964,7 +110595,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_31__call__(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(33, 232, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -108979,7 +110610,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_31__call__(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 232, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -109002,13 +110633,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
   PyObject *__pyx_t_5 = NULL;
   Py_ssize_t __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
   __Pyx_INCREF(__pyx_v_y);
 
-  /* "PETSc/Mat.pyx":224
+  /* "PETSc/Mat.pyx":233
  * 
  *     def __call__(self, x, y=None):
  *         if y is None:             # <<<<<<<<<<<<<<
@@ -109019,14 +110647,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":225
+    /* "PETSc/Mat.pyx":234
  *     def __call__(self, x, y=None):
  *         if y is None:
  *             y = self.createVecLeft()             # <<<<<<<<<<<<<<
  *         self.mult(x, y)
  *         return y
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 234, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -109039,27 +110667,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
       }
     }
     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[33]; __pyx_lineno = 225; __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(33, 234, __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[33]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 234, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":233
+ * 
+ *     def __call__(self, x, y=None):
+ *         if y is None:             # <<<<<<<<<<<<<<
+ *             y = self.createVecLeft()
+ *         self.mult(x, y)
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":226
+  /* "PETSc/Mat.pyx":235
  *         if y is None:
  *             y = self.createVecLeft()
  *         self.mult(x, y)             # <<<<<<<<<<<<<<
  *         return y
  *     #
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_mult); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_mult); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_6 = 0;
@@ -109073,7 +110707,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
       __pyx_t_6 = 1;
     }
   }
-  __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   if (__pyx_t_5) {
     __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
@@ -109084,13 +110718,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
   __Pyx_INCREF(__pyx_v_y);
   __Pyx_GIVEREF(__pyx_v_y);
   PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_y);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":227
+  /* "PETSc/Mat.pyx":236
  *             y = self.createVecLeft()
  *         self.mult(x, y)
  *         return y             # <<<<<<<<<<<<<<
@@ -109102,7 +110736,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
   __pyx_r = __pyx_v_y;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":223
+  /* "PETSc/Mat.pyx":232
  *         mat_setitem(self, ij, v)
  * 
  *     def __call__(self, x, y=None):             # <<<<<<<<<<<<<<
@@ -109125,7 +110759,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":230
+/* "PETSc/Mat.pyx":239
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -109138,9 +110772,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_33view(PyObject *__pyx_v_self, P
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_32view[] = "Mat.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_33view(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);
@@ -109165,7 +110796,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_33view(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(33, 239, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -109178,13 +110809,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_33view(PyObject *__pyx_v_self, P
   }
   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[33]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 239, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.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[33]; __pyx_lineno = 230; __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(33, 239, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_32view(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -109204,12 +110835,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *
   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);
 
-  /* "PETSc/Mat.pyx":231
+  /* "PETSc/Mat.pyx":240
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -109218,7 +110846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/Mat.pyx":232
+  /* "PETSc/Mat.pyx":241
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -109230,20 +110858,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":233
+  /* "PETSc/Mat.pyx":242
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( MatView(self.mat, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatView(__pyx_v_self->mat, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatView(__pyx_v_self->mat, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 242, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":230
+  /* "PETSc/Mat.pyx":239
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -109263,7 +110889,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":235
+/* "PETSc/Mat.pyx":244
  *         CHKERR( MatView(self.mat, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -109292,21 +110918,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_34destroy(struct PyPetscMatObjec
   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);
 
-  /* "PETSc/Mat.pyx":236
+  /* "PETSc/Mat.pyx":245
  * 
  *     def destroy(self):
  *         CHKERR( MatDestroy(&self.mat) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDestroy((&__pyx_v_self->mat))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDestroy((&__pyx_v_self->mat))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 245, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":237
+  /* "PETSc/Mat.pyx":246
  *     def destroy(self):
  *         CHKERR( MatDestroy(&self.mat) )
  *         return self             # <<<<<<<<<<<<<<
@@ -109318,7 +110941,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_34destroy(struct PyPetscMatObjec
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":235
+  /* "PETSc/Mat.pyx":244
  *         CHKERR( MatView(self.mat, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -109336,7 +110959,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_34destroy(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":239
+/* "PETSc/Mat.pyx":248
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -109349,9 +110972,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_37create(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_36create[] = "Mat.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_37create(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);
@@ -109376,7 +110996,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_37create(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[33]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(33, 248, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -109389,7 +111009,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_37create(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[33]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 248, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -109409,22 +111029,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
   __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);
 
-  /* "PETSc/Mat.pyx":240
+  /* "PETSc/Mat.pyx":249
  * 
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreate(ccomm, &newmat) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 249, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":241
+  /* "PETSc/Mat.pyx":250
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -109433,16 +111050,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":242
+  /* "PETSc/Mat.pyx":251
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreate(ccomm, &newmat) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 251, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":243
+  /* "PETSc/Mat.pyx":252
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreate(ccomm, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -109452,7 +111069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":244
+  /* "PETSc/Mat.pyx":253
  *         CHKERR( MatCreate(ccomm, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
@@ -109464,7 +111081,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":239
+  /* "PETSc/Mat.pyx":248
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -109482,7 +111099,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":246
+/* "PETSc/Mat.pyx":255
  *         return self
  * 
  *     def setType(self, mat_type):             # <<<<<<<<<<<<<<
@@ -109495,9 +111112,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_39setType(PyObject *__pyx_v_self
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_38setType[] = "Mat.setType(self, mat_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_39setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_mat_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);
@@ -109519,7 +111133,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_39setType(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[33]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(33, 255, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -109530,7 +111144,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_39setType(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[33]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 255, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -109549,13 +111163,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_38setType(struct PyPetscMatObjec
   __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_mat_type);
 
-  /* "PETSc/Mat.pyx":247
+  /* "PETSc/Mat.pyx":256
  * 
  *     def setType(self, mat_type):
  *         cdef PetscMatType cval = NULL             # <<<<<<<<<<<<<<
@@ -109564,28 +111175,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_38setType(struct PyPetscMatObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Mat.pyx":248
+  /* "PETSc/Mat.pyx":257
  *     def setType(self, mat_type):
  *         cdef PetscMatType cval = NULL
  *         mat_type = str2bytes(mat_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetType(self.mat, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mat_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mat_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 257, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_mat_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":249
+  /* "PETSc/Mat.pyx":258
  *         cdef PetscMatType cval = NULL
  *         mat_type = str2bytes(mat_type, &cval)
  *         CHKERR( MatSetType(self.mat, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def setSizes(self, size, bsize=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 258, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":246
+  /* "PETSc/Mat.pyx":255
  *         return self
  * 
  *     def setType(self, mat_type):             # <<<<<<<<<<<<<<
@@ -109607,7 +111218,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_38setType(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":251
+/* "PETSc/Mat.pyx":260
  *         CHKERR( MatSetType(self.mat, cval) )
  * 
  *     def setSizes(self, size, bsize=None):             # <<<<<<<<<<<<<<
@@ -109621,9 +111232,6 @@ static char __pyx_doc_8petsc4py_5PETSc_3Mat_40setSizes[] = "Mat.setSizes(self, s
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_41setSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_bsize = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setSizes (wrapper)", 0);
@@ -109652,7 +111260,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_41setSizes(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSizes") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSizes") < 0)) __PYX_ERR(33, 260, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -109667,7 +111275,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_41setSizes(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSizes", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSizes", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 260, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -109691,12 +111299,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
   __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("setSizes", 0);
 
-  /* "PETSc/Mat.pyx":252
+  /* "PETSc/Mat.pyx":261
  * 
  *     def setSizes(self, size, bsize=None):
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0             # <<<<<<<<<<<<<<
@@ -109710,25 +111315,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Mat.pyx":253
+  /* "PETSc/Mat.pyx":262
  *     def setSizes(self, size, bsize=None):
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         if rbs != PETSC_DECIDE:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_rbs), (&__pyx_v_cbs), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_M), (&__pyx_v_N)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_rbs), (&__pyx_v_cbs), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_M), (&__pyx_v_N)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 262, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":254
+  /* "PETSc/Mat.pyx":263
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )             # <<<<<<<<<<<<<<
  *         if rbs != PETSC_DECIDE:
  *             if cbs != PETSC_DECIDE:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetSizes(__pyx_v_self->mat, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetSizes(__pyx_v_self->mat, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 263, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":255
+  /* "PETSc/Mat.pyx":264
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         if rbs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -109738,7 +111343,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
   __pyx_t_2 = ((__pyx_v_rbs != PETSC_DECIDE) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":256
+    /* "PETSc/Mat.pyx":265
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         if rbs != PETSC_DECIDE:
  *             if cbs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -109748,33 +111353,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
     __pyx_t_2 = ((__pyx_v_cbs != PETSC_DECIDE) != 0);
     if (__pyx_t_2) {
 
-      /* "PETSc/Mat.pyx":257
+      /* "PETSc/Mat.pyx":266
  *         if rbs != PETSC_DECIDE:
  *             if cbs != PETSC_DECIDE:
  *                 CHKERR( MatSetBlockSizes(self.mat, rbs, cbs) )             # <<<<<<<<<<<<<<
  *             else:
  *                 CHKERR( MatSetBlockSize(self.mat, rbs) )
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSizes(__pyx_v_self->mat, __pyx_v_rbs, __pyx_v_cbs)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSizes(__pyx_v_self->mat, __pyx_v_rbs, __pyx_v_cbs)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 266, __pyx_L1_error)
+
+      /* "PETSc/Mat.pyx":265
+ *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
+ *         if rbs != PETSC_DECIDE:
+ *             if cbs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *                 CHKERR( MatSetBlockSizes(self.mat, rbs, cbs) )
+ *             else:
+ */
       goto __pyx_L4;
     }
-    /*else*/ {
 
-      /* "PETSc/Mat.pyx":259
+    /* "PETSc/Mat.pyx":268
  *                 CHKERR( MatSetBlockSizes(self.mat, rbs, cbs) )
  *             else:
  *                 CHKERR( MatSetBlockSize(self.mat, rbs) )             # <<<<<<<<<<<<<<
  * 
  *     def setBlockSize(self, bsize):
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSize(__pyx_v_self->mat, __pyx_v_rbs)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSize(__pyx_v_self->mat, __pyx_v_rbs)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 268, __pyx_L1_error)
     }
     __pyx_L4:;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":264
+ *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
+ *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
+ *         if rbs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *             if cbs != PETSC_DECIDE:
+ *                 CHKERR( MatSetBlockSizes(self.mat, rbs, cbs) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":251
+  /* "PETSc/Mat.pyx":260
  *         CHKERR( MatSetType(self.mat, cval) )
  * 
  *     def setSizes(self, size, bsize=None):             # <<<<<<<<<<<<<<
@@ -109794,7 +111413,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":261
+/* "PETSc/Mat.pyx":270
  *                 CHKERR( MatSetBlockSize(self.mat, rbs) )
  * 
  *     def setBlockSize(self, bsize):             # <<<<<<<<<<<<<<
@@ -109807,9 +111426,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_43setBlockSize(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_42setBlockSize[] = "Mat.setBlockSize(self, bsize)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_43setBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_bsize = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setBlockSize (wrapper)", 0);
@@ -109831,7 +111447,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_43setBlockSize(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, "setBlockSize") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockSize") < 0)) __PYX_ERR(33, 270, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -109842,7 +111458,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_43setBlockSize(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBlockSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBlockSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 270, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setBlockSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -109861,31 +111477,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_42setBlockSize(struct PyPetscMat
   __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("setBlockSize", 0);
 
-  /* "PETSc/Mat.pyx":262
+  /* "PETSc/Mat.pyx":271
  * 
  *     def setBlockSize(self, bsize):
  *         cdef PetscInt bs = asInt(bsize)             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetBlockSize(self.mat, bs) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 271, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":263
+  /* "PETSc/Mat.pyx":272
  *     def setBlockSize(self, bsize):
  *         cdef PetscInt bs = asInt(bsize)
  *         CHKERR( MatSetBlockSize(self.mat, bs) )             # <<<<<<<<<<<<<<
  * 
  *     def setBlockSizes(self, row_bsize, col_bsize):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSize(__pyx_v_self->mat, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSize(__pyx_v_self->mat, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 272, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":261
+  /* "PETSc/Mat.pyx":270
  *                 CHKERR( MatSetBlockSize(self.mat, rbs) )
  * 
  *     def setBlockSize(self, bsize):             # <<<<<<<<<<<<<<
@@ -109905,7 +111518,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_42setBlockSize(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":265
+/* "PETSc/Mat.pyx":274
  *         CHKERR( MatSetBlockSize(self.mat, bs) )
  * 
  *     def setBlockSizes(self, row_bsize, col_bsize):             # <<<<<<<<<<<<<<
@@ -109919,9 +111532,6 @@ static char __pyx_doc_8petsc4py_5PETSc_3Mat_44setBlockSizes[] = "Mat.setBlockSiz
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_45setBlockSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_row_bsize = 0;
   PyObject *__pyx_v_col_bsize = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setBlockSizes (wrapper)", 0);
@@ -109945,11 +111555,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_45setBlockSizes(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_col_bsize)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setBlockSizes", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setBlockSizes", 1, 2, 2, 1); __PYX_ERR(33, 274, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockSizes") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockSizes") < 0)) __PYX_ERR(33, 274, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -109962,7 +111572,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_45setBlockSizes(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBlockSizes", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBlockSizes", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 274, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setBlockSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -109982,41 +111592,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_44setBlockSizes(struct PyPetscMa
   __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("setBlockSizes", 0);
 
-  /* "PETSc/Mat.pyx":266
+  /* "PETSc/Mat.pyx":275
  * 
  *     def setBlockSizes(self, row_bsize, col_bsize):
  *         cdef PetscInt rbs = asInt(row_bsize)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cbs = asInt(col_bsize)
  *         CHKERR( MatSetBlockSizes(self.mat, rbs, cbs) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row_bsize); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row_bsize); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 275, __pyx_L1_error)
   __pyx_v_rbs = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":267
+  /* "PETSc/Mat.pyx":276
  *     def setBlockSizes(self, row_bsize, col_bsize):
  *         cdef PetscInt rbs = asInt(row_bsize)
  *         cdef PetscInt cbs = asInt(col_bsize)             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetBlockSizes(self.mat, rbs, cbs) )
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col_bsize); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col_bsize); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 276, __pyx_L1_error)
   __pyx_v_cbs = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":268
+  /* "PETSc/Mat.pyx":277
  *         cdef PetscInt rbs = asInt(row_bsize)
  *         cdef PetscInt cbs = asInt(col_bsize)
  *         CHKERR( MatSetBlockSizes(self.mat, rbs, cbs) )             # <<<<<<<<<<<<<<
  *     #
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSizes(__pyx_v_self->mat, __pyx_v_rbs, __pyx_v_cbs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSizes(__pyx_v_self->mat, __pyx_v_rbs, __pyx_v_cbs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 277, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":265
+  /* "PETSc/Mat.pyx":274
  *         CHKERR( MatSetBlockSize(self.mat, bs) )
  * 
  *     def setBlockSizes(self, row_bsize, col_bsize):             # <<<<<<<<<<<<<<
@@ -110036,7 +111643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_44setBlockSizes(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":271
+/* "PETSc/Mat.pyx":280
  *     #
  * 
  *     def createAIJ(self, size, bsize=None, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -110053,9 +111660,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_47createAIJ(PyObject *__pyx_v_se
   PyObject *__pyx_v_nnz = 0;
   PyObject *__pyx_v_csr = 0;
   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("createAIJ (wrapper)", 0);
@@ -110105,7 +111709,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_47createAIJ(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJ") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJ") < 0)) __PYX_ERR(33, 280, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -110126,7 +111730,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_47createAIJ(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createAIJ", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createAIJ", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 280, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createAIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -110144,12 +111748,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
   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("createAIJ", 0);
 
-  /* "PETSc/Mat.pyx":273
+  /* "PETSc/Mat.pyx":282
  *     def createAIJ(self, size, bsize=None, nnz=None, csr=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -110158,16 +111759,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":274
+  /* "PETSc/Mat.pyx":283
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATAIJ, comm, size, bsize, &newmat)             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATAIJ, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATAIJ, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 283, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":275
+  /* "PETSc/Mat.pyx":284
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATAIJ, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -110177,16 +111778,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":277
+  /* "PETSc/Mat.pyx":286
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(__pyx_v_self->mat, __pyx_v_nnz, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(__pyx_v_self->mat, __pyx_v_nnz, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 286, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":278
+  /* "PETSc/Mat.pyx":287
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -110198,7 +111799,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":271
+  /* "PETSc/Mat.pyx":280
  *     #
  * 
  *     def createAIJ(self, size, bsize=None, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -110216,7 +111817,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":280
+/* "PETSc/Mat.pyx":289
  *         return self
  * 
  *     def createBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -110233,9 +111834,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_49createBAIJ(PyObject *__pyx_v_s
   PyObject *__pyx_v_nnz = 0;
   PyObject *__pyx_v_csr = 0;
   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("createBAIJ (wrapper)", 0);
@@ -110265,7 +111863,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_49createBAIJ(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createBAIJ", 0, 2, 5, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createBAIJ", 0, 2, 5, 1); __PYX_ERR(33, 289, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -110284,7 +111882,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_49createBAIJ(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBAIJ") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBAIJ") < 0)) __PYX_ERR(33, 289, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -110305,7 +111903,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_49createBAIJ(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createBAIJ", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createBAIJ", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 289, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createBAIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -110323,12 +111921,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
   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("createBAIJ", 0);
 
-  /* "PETSc/Mat.pyx":282
+  /* "PETSc/Mat.pyx":291
  *     def createBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -110337,16 +111932,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":283
+  /* "PETSc/Mat.pyx":292
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATBAIJ, comm, size, bsize, &newmat)             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATBAIJ, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATBAIJ, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 292, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":284
+  /* "PETSc/Mat.pyx":293
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATBAIJ, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -110356,16 +111951,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":286
+  /* "PETSc/Mat.pyx":295
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(__pyx_v_self->mat, __pyx_v_nnz, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(__pyx_v_self->mat, __pyx_v_nnz, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 295, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":287
+  /* "PETSc/Mat.pyx":296
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -110377,7 +111972,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":280
+  /* "PETSc/Mat.pyx":289
  *         return self
  * 
  *     def createBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -110395,7 +111990,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":289
+/* "PETSc/Mat.pyx":298
  *         return self
  * 
  *     def createSBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -110412,9 +112007,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_51createSBAIJ(PyObject *__pyx_v_
   PyObject *__pyx_v_nnz = 0;
   PyObject *__pyx_v_csr = 0;
   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("createSBAIJ (wrapper)", 0);
@@ -110444,7 +112036,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_51createSBAIJ(PyObject *__pyx_v_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createSBAIJ", 0, 2, 5, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createSBAIJ", 0, 2, 5, 1); __PYX_ERR(33, 298, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -110463,7 +112055,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_51createSBAIJ(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSBAIJ") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSBAIJ") < 0)) __PYX_ERR(33, 298, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -110484,7 +112076,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_51createSBAIJ(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createSBAIJ", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createSBAIJ", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 298, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSBAIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -110502,12 +112094,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
   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("createSBAIJ", 0);
 
-  /* "PETSc/Mat.pyx":291
+  /* "PETSc/Mat.pyx":300
  *     def createSBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -110516,16 +112105,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":292
+  /* "PETSc/Mat.pyx":301
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATSBAIJ, comm, size, bsize, &newmat)             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATSBAIJ, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATSBAIJ, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 301, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":293
+  /* "PETSc/Mat.pyx":302
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATSBAIJ, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -110535,16 +112124,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":295
+  /* "PETSc/Mat.pyx":304
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(__pyx_v_self->mat, __pyx_v_nnz, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(__pyx_v_self->mat, __pyx_v_nnz, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 304, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":296
+  /* "PETSc/Mat.pyx":305
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -110556,7 +112145,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":289
+  /* "PETSc/Mat.pyx":298
  *         return self
  * 
  *     def createSBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -110574,7 +112163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":298
+/* "PETSc/Mat.pyx":307
  *         return self
  * 
  *     def createAIJCRL(self, size, bsize=None, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -110591,9 +112180,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_53createAIJCRL(PyObject *__pyx_v
   PyObject *__pyx_v_nnz = 0;
   PyObject *__pyx_v_csr = 0;
   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("createAIJCRL (wrapper)", 0);
@@ -110643,7 +112229,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_53createAIJCRL(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJCRL") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJCRL") < 0)) __PYX_ERR(33, 307, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -110664,7 +112250,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_53createAIJCRL(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createAIJCRL", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createAIJCRL", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 307, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createAIJCRL", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -110682,12 +112268,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
   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("createAIJCRL", 0);
 
-  /* "PETSc/Mat.pyx":300
+  /* "PETSc/Mat.pyx":309
  *     def createAIJCRL(self, size, bsize=None, nnz=None, csr=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -110696,16 +112279,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":301
+  /* "PETSc/Mat.pyx":310
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATAIJCRL, comm, size, bsize, &newmat)             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATAIJCRL, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATAIJCRL, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 310, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":302
+  /* "PETSc/Mat.pyx":311
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATAIJCRL, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -110715,16 +112298,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":304
+  /* "PETSc/Mat.pyx":313
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(__pyx_v_self->mat, __pyx_v_nnz, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(__pyx_v_self->mat, __pyx_v_nnz, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 313, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":305
+  /* "PETSc/Mat.pyx":314
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -110736,7 +112319,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":298
+  /* "PETSc/Mat.pyx":307
  *         return self
  * 
  *     def createAIJCRL(self, size, bsize=None, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -110754,7 +112337,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":307
+/* "PETSc/Mat.pyx":316
  *         return self
  * 
  *     def setPreallocationNNZ(self, nnz):             # <<<<<<<<<<<<<<
@@ -110767,9 +112350,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_55setPreallocationNNZ(PyObject *
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ[] = "Mat.setPreallocationNNZ(self, nnz)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_55setPreallocationNNZ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_nnz = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPreallocationNNZ (wrapper)", 0);
@@ -110791,7 +112371,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_55setPreallocationNNZ(PyObject *
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationNNZ") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationNNZ") < 0)) __PYX_ERR(33, 316, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -110802,7 +112382,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_55setPreallocationNNZ(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPreallocationNNZ", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPreallocationNNZ", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 316, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setPreallocationNNZ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -110820,12 +112400,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyP
   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("setPreallocationNNZ", 0);
 
-  /* "PETSc/Mat.pyx":308
+  /* "PETSc/Mat.pyx":317
  * 
  *     def setPreallocationNNZ(self, nnz):
  *         cdef PetscBool done = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -110834,25 +112411,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyP
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":309
+  /* "PETSc/Mat.pyx":318
  *     def setPreallocationNNZ(self, nnz):
  *         cdef PetscBool done = PETSC_FALSE
  *         CHKERR( MatIsPreallocated(self.mat, &done) )             # <<<<<<<<<<<<<<
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         Mat_AllocAIJ_NNZ(self.mat, nnz)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 318, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":311
+  /* "PETSc/Mat.pyx":320
  *         CHKERR( MatIsPreallocated(self.mat, &done) )
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         Mat_AllocAIJ_NNZ(self.mat, nnz)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(__pyx_v_self->mat, __pyx_v_nnz); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(__pyx_v_self->mat, __pyx_v_nnz); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 320, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":312
+  /* "PETSc/Mat.pyx":321
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         Mat_AllocAIJ_NNZ(self.mat, nnz)
  *         return self             # <<<<<<<<<<<<<<
@@ -110864,7 +112441,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":307
+  /* "PETSc/Mat.pyx":316
  *         return self
  * 
  *     def setPreallocationNNZ(self, nnz):             # <<<<<<<<<<<<<<
@@ -110882,7 +112459,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":314
+/* "PETSc/Mat.pyx":323
  *         return self
  * 
  *     def setPreallocationCSR(self, csr):             # <<<<<<<<<<<<<<
@@ -110895,9 +112472,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_57setPreallocationCSR(PyObject *
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_56setPreallocationCSR[] = "Mat.setPreallocationCSR(self, csr)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_57setPreallocationCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_csr = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPreallocationCSR (wrapper)", 0);
@@ -110919,7 +112493,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_57setPreallocationCSR(PyObject *
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationCSR") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationCSR") < 0)) __PYX_ERR(33, 323, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -110930,7 +112504,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_57setPreallocationCSR(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPreallocationCSR", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPreallocationCSR", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 323, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setPreallocationCSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -110948,12 +112522,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyP
   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("setPreallocationCSR", 0);
 
-  /* "PETSc/Mat.pyx":315
+  /* "PETSc/Mat.pyx":324
  * 
  *     def setPreallocationCSR(self, csr):
  *         cdef PetscBool done = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -110962,25 +112533,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyP
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":316
+  /* "PETSc/Mat.pyx":325
  *     def setPreallocationCSR(self, csr):
  *         cdef PetscBool done = PETSC_FALSE
  *         CHKERR( MatIsPreallocated(self.mat, &done) )             # <<<<<<<<<<<<<<
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         Mat_AllocAIJ_CSR(self.mat, csr)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 325, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":318
+  /* "PETSc/Mat.pyx":327
  *         CHKERR( MatIsPreallocated(self.mat, &done) )
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         Mat_AllocAIJ_CSR(self.mat, csr)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(__pyx_v_self->mat, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(__pyx_v_self->mat, __pyx_v_csr); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 327, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":319
+  /* "PETSc/Mat.pyx":328
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         Mat_AllocAIJ_CSR(self.mat, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -110992,7 +112563,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":314
+  /* "PETSc/Mat.pyx":323
  *         return self
  * 
  *     def setPreallocationCSR(self, csr):             # <<<<<<<<<<<<<<
@@ -111010,7 +112581,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":321
+/* "PETSc/Mat.pyx":330
  *         return self
  * 
  *     def createAIJWithArrays(self, size, csr, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -111026,9 +112597,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_59createAIJWithArrays(PyObject *
   PyObject *__pyx_v_csr = 0;
   PyObject *__pyx_v_bsize = 0;
   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("createAIJWithArrays (wrapper)", 0);
@@ -111056,7 +112624,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_59createAIJWithArrays(PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_csr)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createAIJWithArrays", 0, 2, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createAIJWithArrays", 0, 2, 4, 1); __PYX_ERR(33, 330, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -111070,7 +112638,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_59createAIJWithArrays(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJWithArrays") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJWithArrays") < 0)) __PYX_ERR(33, 330, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -111089,7 +112657,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_59createAIJWithArrays(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createAIJWithArrays", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createAIJWithArrays", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 330, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createAIJWithArrays", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -111147,23 +112715,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   PyObject *__pyx_t_14 = NULL;
   int __pyx_t_15;
   int __pyx_t_16;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createAIJWithArrays", 0);
   __Pyx_INCREF(__pyx_v_csr);
 
-  /* "PETSc/Mat.pyx":323
+  /* "PETSc/Mat.pyx":332
  *     def createAIJWithArrays(self, size, csr, bsize=None, comm=None):
  *         # communicator
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         # sizes and block sizes
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 332, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":325
+  /* "PETSc/Mat.pyx":334
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         # sizes and block sizes
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0             # <<<<<<<<<<<<<<
@@ -111177,16 +112742,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Mat.pyx":326
+  /* "PETSc/Mat.pyx":335
  *         # sizes and block sizes
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)             # <<<<<<<<<<<<<<
  *         if rbs == PETSC_DECIDE: rbs = 1
  *         if cbs == PETSC_DECIDE: cbs = rbs
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Mat_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_rbs), (&__pyx_v_cbs), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_M), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Mat_Sizes(__pyx_v_size, __pyx_v_bsize, (&__pyx_v_rbs), (&__pyx_v_cbs), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_M), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 335, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":327
+  /* "PETSc/Mat.pyx":336
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *         if rbs == PETSC_DECIDE: rbs = 1             # <<<<<<<<<<<<<<
@@ -111196,11 +112761,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_t_3 = ((__pyx_v_rbs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_rbs = 1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":328
+  /* "PETSc/Mat.pyx":337
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *         if rbs == PETSC_DECIDE: rbs = 1
  *         if cbs == PETSC_DECIDE: cbs = rbs             # <<<<<<<<<<<<<<
@@ -111210,29 +112773,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_t_3 = ((__pyx_v_cbs == PETSC_DECIDE) != 0);
   if (__pyx_t_3) {
     __pyx_v_cbs = __pyx_v_rbs;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":329
+  /* "PETSc/Mat.pyx":338
  *         if rbs == PETSC_DECIDE: rbs = 1
  *         if cbs == PETSC_DECIDE: cbs = rbs
  *         Sys_Layout(ccomm, rbs, &m, &M)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, cbs, &n, &N)
  *         # unpack CSR argument
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_rbs, (&__pyx_v_m), (&__pyx_v_M)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_rbs, (&__pyx_v_m), (&__pyx_v_M)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 338, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":330
+  /* "PETSc/Mat.pyx":339
  *         if cbs == PETSC_DECIDE: cbs = rbs
  *         Sys_Layout(ccomm, rbs, &m, &M)
  *         Sys_Layout(ccomm, cbs, &n, &N)             # <<<<<<<<<<<<<<
  *         # unpack CSR argument
  *         cdef object pi, pj, pv, poi, poj, pov
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_cbs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_cbs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 339, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":333
+  /* "PETSc/Mat.pyx":342
  *         # unpack CSR argument
  *         cdef object pi, pj, pv, poi, poj, pov
  *         try:             # <<<<<<<<<<<<<<
@@ -111240,13 +112801,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
  *         except (TypeError, ValueError):
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
     __Pyx_XGOTREF(__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_5);
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/Mat.pyx":334
+      /* "PETSc/Mat.pyx":343
  *         cdef object pi, pj, pv, poi, poj, pov
  *         try:
  *             (pi, pj, pv), (poi, poj, pov) = csr             # <<<<<<<<<<<<<<
@@ -111263,7 +112826,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __PYX_ERR(33, 343, __pyx_L5_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -111276,21 +112839,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_INCREF(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         #else
-        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_8);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_v_csr); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_9 = PyObject_GetIter(__pyx_v_csr); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_9);
         __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
         index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L13_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
         index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L13_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(33, 343, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L14_unpacking_done;
@@ -111298,7 +112861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __PYX_ERR(33, 343, __pyx_L5_error)
         __pyx_L14_unpacking_done:;
       }
       if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) {
@@ -111311,7 +112874,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __PYX_ERR(33, 343, __pyx_L5_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -111327,17 +112890,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_INCREF(__pyx_t_11);
         __Pyx_INCREF(__pyx_t_12);
         #else
-        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_9);
-        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_12 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_12)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_12);
         #endif
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_13 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_13 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_13);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_t_10 = Py_TYPE(__pyx_t_13)->tp_iternext;
@@ -111347,7 +112910,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_GOTREF(__pyx_t_11);
         index = 2; __pyx_t_12 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L15_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_12);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) __PYX_ERR(33, 343, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         goto __pyx_L16_unpacking_done;
@@ -111355,7 +112918,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __PYX_ERR(33, 343, __pyx_L5_error)
         __pyx_L16_unpacking_done:;
       }
       __pyx_v_pi = __pyx_t_9;
@@ -111374,7 +112937,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __PYX_ERR(33, 343, __pyx_L5_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -111390,17 +112953,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_INCREF(__pyx_t_11);
         __Pyx_INCREF(__pyx_t_9);
         #else
-        __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_9);
         #endif
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_13 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_13 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 343, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_13);
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __pyx_t_10 = Py_TYPE(__pyx_t_13)->tp_iternext;
@@ -111410,7 +112973,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_GOTREF(__pyx_t_11);
         index = 2; __pyx_t_9 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_9)) goto __pyx_L17_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) __PYX_ERR(33, 343, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         goto __pyx_L18_unpacking_done;
@@ -111418,7 +112981,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[33]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __PYX_ERR(33, 343, __pyx_L5_error)
         __pyx_L18_unpacking_done:;
       }
       __pyx_v_poi = __pyx_t_12;
@@ -111427,12 +112990,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __pyx_t_11 = 0;
       __pyx_v_pov = __pyx_t_9;
       __pyx_t_9 = 0;
+
+      /* "PETSc/Mat.pyx":342
+ *         # unpack CSR argument
+ *         cdef object pi, pj, pv, poi, poj, pov
+ *         try:             # <<<<<<<<<<<<<<
+ *             (pi, pj, pv), (poi, poj, pov) = csr
+ *         except (TypeError, ValueError):
+ */
     }
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L12_try_end;
     __pyx_L5_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
     __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
     __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
@@ -111440,22 +113012,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/Mat.pyx":335
+    /* "PETSc/Mat.pyx":344
  *         try:
  *             (pi, pj, pv), (poi, poj, pov) = csr
  *         except (TypeError, ValueError):             # <<<<<<<<<<<<<<
  *             pi, pj, pv = csr
  *             poi = poj = pov = None
  */
-    __pyx_t_2 = PyErr_ExceptionMatches(__pyx_builtin_TypeError) || PyErr_ExceptionMatches(__pyx_builtin_ValueError);
+    __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
     if (__pyx_t_2) {
       __Pyx_AddTraceback("petsc4py.PETSc.Mat.createAIJWithArrays", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(33, 344, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "PETSc/Mat.pyx":336
+      /* "PETSc/Mat.pyx":345
  *             (pi, pj, pv), (poi, poj, pov) = csr
  *         except (TypeError, ValueError):
  *             pi, pj, pv = csr             # <<<<<<<<<<<<<<
@@ -111472,7 +113044,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[33]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+          __PYX_ERR(33, 345, __pyx_L7_except_error)
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -111488,16 +113060,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_INCREF(__pyx_t_12);
         __Pyx_INCREF(__pyx_t_13);
         #else
-        __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(33, 345, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(33, 345, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_13 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_13 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 345, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_13);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_14 = PyObject_GetIter(__pyx_v_csr); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_14 = PyObject_GetIter(__pyx_v_csr); if (unlikely(!__pyx_t_14)) __PYX_ERR(33, 345, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_14);
         __pyx_t_10 = Py_TYPE(__pyx_t_14)->tp_iternext;
         index = 0; __pyx_t_11 = __pyx_t_10(__pyx_t_14); if (unlikely(!__pyx_t_11)) goto __pyx_L21_unpacking_failed;
@@ -111506,7 +113078,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_GOTREF(__pyx_t_12);
         index = 2; __pyx_t_13 = __pyx_t_10(__pyx_t_14); if (unlikely(!__pyx_t_13)) goto __pyx_L21_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_13);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_14), 3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_14), 3) < 0) __PYX_ERR(33, 345, __pyx_L7_except_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
         goto __pyx_L22_unpacking_done;
@@ -111514,7 +113086,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
         __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[33]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __PYX_ERR(33, 345, __pyx_L7_except_error)
         __pyx_L22_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_pi, __pyx_t_11);
@@ -111524,7 +113096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __Pyx_XDECREF_SET(__pyx_v_pv, __pyx_t_13);
       __pyx_t_13 = 0;
 
-      /* "PETSc/Mat.pyx":337
+      /* "PETSc/Mat.pyx":346
  *         except (TypeError, ValueError):
  *             pi, pj, pv = csr
  *             poi = poj = pov = None             # <<<<<<<<<<<<<<
@@ -111544,12 +113116,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     }
     goto __pyx_L7_except_error;
     __pyx_L7_except_error:;
+
+    /* "PETSc/Mat.pyx":342
+ *         # unpack CSR argument
+ *         cdef object pi, pj, pv, poi, poj, pov
+ *         try:             # <<<<<<<<<<<<<<
+ *             (pi, pj, pv), (poi, poj, pov) = csr
+ *         except (TypeError, ValueError):
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
     goto __pyx_L1_error;
     __pyx_L6_exception_handled:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_XGIVEREF(__pyx_t_5);
     __Pyx_XGIVEREF(__pyx_t_6);
@@ -111557,7 +113139,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __pyx_L12_try_end:;
   }
 
-  /* "PETSc/Mat.pyx":339
+  /* "PETSc/Mat.pyx":348
  *             poi = poj = pov = None
  *         # rows, cols, and values
  *         cdef PetscInt ni=0, noi=0, *i=NULL, *oi=NULL             # <<<<<<<<<<<<<<
@@ -111569,7 +113151,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_i = NULL;
   __pyx_v_oi = NULL;
 
-  /* "PETSc/Mat.pyx":340
+  /* "PETSc/Mat.pyx":349
  *         # rows, cols, and values
  *         cdef PetscInt ni=0, noi=0, *i=NULL, *oi=NULL
  *         cdef PetscInt nj=0, noj=0, *j=NULL, *oj=NULL             # <<<<<<<<<<<<<<
@@ -111581,31 +113163,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_j = NULL;
   __pyx_v_oj = NULL;
 
-  /* "PETSc/Mat.pyx":341
+  /* "PETSc/Mat.pyx":350
  *         cdef PetscInt ni=0, noi=0, *i=NULL, *oi=NULL
  *         cdef PetscInt nj=0, noj=0, *j=NULL, *oj=NULL
  *         pi = iarray_i(pi, &ni, &i) # Row pointers (diagonal)             # <<<<<<<<<<<<<<
  *         pj = iarray_i(pj, &nj, &j) # Column indices (diagonal)
  *         if ni != m+1:  raise ValueError(
  */
-  __pyx_t_9 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_pi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_pi, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 350, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF_SET(__pyx_v_pi, __pyx_t_9);
   __pyx_t_9 = 0;
 
-  /* "PETSc/Mat.pyx":342
+  /* "PETSc/Mat.pyx":351
  *         cdef PetscInt nj=0, noj=0, *j=NULL, *oj=NULL
  *         pi = iarray_i(pi, &ni, &i) # Row pointers (diagonal)
  *         pj = iarray_i(pj, &nj, &j) # Column indices (diagonal)             # <<<<<<<<<<<<<<
  *         if ni != m+1:  raise ValueError(
  *             "A matrix with %d rows requires a row pointer of length %d (given: %d)" %
  */
-  __pyx_t_9 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_pj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_pj, (&__pyx_v_nj), (&__pyx_v_j))); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 351, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF_SET(__pyx_v_pj, __pyx_t_9);
   __pyx_t_9 = 0;
 
-  /* "PETSc/Mat.pyx":343
+  /* "PETSc/Mat.pyx":352
  *         pi = iarray_i(pi, &ni, &i) # Row pointers (diagonal)
  *         pj = iarray_i(pj, &nj, &j) # Column indices (diagonal)
  *         if ni != m+1:  raise ValueError(             # <<<<<<<<<<<<<<
@@ -111615,20 +113197,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_t_3 = ((__pyx_v_ni != (__pyx_v_m + 1)) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":345
+    /* "PETSc/Mat.pyx":354
  *         if ni != m+1:  raise ValueError(
  *             "A matrix with %d rows requires a row pointer of length %d (given: %d)" %
  *             (toInt(m), toInt(m+1), toInt(ni)))             # <<<<<<<<<<<<<<
  *         if poi is not None and poj is not None:
  *             poi = iarray_i(poi, &noi, &oi) # Row pointers (off-diagonal)
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 354, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m + 1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 354, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 354, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 354, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9);
@@ -111640,38 +113222,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __pyx_t_7 = 0;
     __pyx_t_8 = 0;
 
-    /* "PETSc/Mat.pyx":344
+    /* "PETSc/Mat.pyx":353
  *         pj = iarray_i(pj, &nj, &j) # Column indices (diagonal)
  *         if ni != m+1:  raise ValueError(
  *             "A matrix with %d rows requires a row pointer of length %d (given: %d)" %             # <<<<<<<<<<<<<<
  *             (toInt(m), toInt(m+1), toInt(ni)))
  *         if poi is not None and poj is not None:
  */
-    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_A_matrix_with_d_rows_requires_a, __pyx_t_13); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_A_matrix_with_d_rows_requires_a, __pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 353, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-    /* "PETSc/Mat.pyx":343
+    /* "PETSc/Mat.pyx":352
  *         pi = iarray_i(pi, &ni, &i) # Row pointers (diagonal)
  *         pj = iarray_i(pj, &nj, &j) # Column indices (diagonal)
  *         if ni != m+1:  raise ValueError(             # <<<<<<<<<<<<<<
  *             "A matrix with %d rows requires a row pointer of length %d (given: %d)" %
  *             (toInt(m), toInt(m+1), toInt(ni)))
  */
-    __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 352, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_8);
     __pyx_t_8 = 0;
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 352, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
     __Pyx_Raise(__pyx_t_8, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    {__pyx_filename = __pyx_f[33]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(33, 352, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":346
+  /* "PETSc/Mat.pyx":355
  *             "A matrix with %d rows requires a row pointer of length %d (given: %d)" %
  *             (toInt(m), toInt(m+1), toInt(ni)))
  *         if poi is not None and poj is not None:             # <<<<<<<<<<<<<<
@@ -111691,34 +113273,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_L25_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":347
+    /* "PETSc/Mat.pyx":356
  *             (toInt(m), toInt(m+1), toInt(ni)))
  *         if poi is not None and poj is not None:
  *             poi = iarray_i(poi, &noi, &oi) # Row pointers (off-diagonal)             # <<<<<<<<<<<<<<
  *             poj = iarray_i(poj, &noj, &oj) # Column indices (off-diagonal)
  *         cdef PetscInt nv=0, nov=0
  */
-    __pyx_t_8 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_poi, (&__pyx_v_noi), (&__pyx_v_oi))); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_poi, (&__pyx_v_noi), (&__pyx_v_oi))); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 356, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF_SET(__pyx_v_poi, __pyx_t_8);
     __pyx_t_8 = 0;
 
-    /* "PETSc/Mat.pyx":348
+    /* "PETSc/Mat.pyx":357
  *         if poi is not None and poj is not None:
  *             poi = iarray_i(poi, &noi, &oi) # Row pointers (off-diagonal)
  *             poj = iarray_i(poj, &noj, &oj) # Column indices (off-diagonal)             # <<<<<<<<<<<<<<
  *         cdef PetscInt nv=0, nov=0
  *         cdef PetscScalar *v=NULL, *ov=NULL
  */
-    __pyx_t_8 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_poj, (&__pyx_v_noj), (&__pyx_v_oj))); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_poj, (&__pyx_v_noj), (&__pyx_v_oj))); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 357, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF_SET(__pyx_v_poj, __pyx_t_8);
     __pyx_t_8 = 0;
-    goto __pyx_L24;
+
+    /* "PETSc/Mat.pyx":355
+ *             "A matrix with %d rows requires a row pointer of length %d (given: %d)" %
+ *             (toInt(m), toInt(m+1), toInt(ni)))
+ *         if poi is not None and poj is not None:             # <<<<<<<<<<<<<<
+ *             poi = iarray_i(poi, &noi, &oi) # Row pointers (off-diagonal)
+ *             poj = iarray_i(poj, &noj, &oj) # Column indices (off-diagonal)
+ */
   }
-  __pyx_L24:;
 
-  /* "PETSc/Mat.pyx":349
+  /* "PETSc/Mat.pyx":358
  *             poi = iarray_i(poi, &noi, &oi) # Row pointers (off-diagonal)
  *             poj = iarray_i(poj, &noj, &oj) # Column indices (off-diagonal)
  *         cdef PetscInt nv=0, nov=0             # <<<<<<<<<<<<<<
@@ -111728,7 +113316,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_nv = 0;
   __pyx_v_nov = 0;
 
-  /* "PETSc/Mat.pyx":350
+  /* "PETSc/Mat.pyx":359
  *             poj = iarray_i(poj, &noj, &oj) # Column indices (off-diagonal)
  *         cdef PetscInt nv=0, nov=0
  *         cdef PetscScalar *v=NULL, *ov=NULL             # <<<<<<<<<<<<<<
@@ -111738,19 +113326,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_v = NULL;
   __pyx_v_ov = NULL;
 
-  /* "PETSc/Mat.pyx":351
+  /* "PETSc/Mat.pyx":360
  *         cdef PetscInt nv=0, nov=0
  *         cdef PetscScalar *v=NULL, *ov=NULL
  *         pv = iarray_s(pv, &nv, &v) # Non-zero values (diagonal)             # <<<<<<<<<<<<<<
  *         if nj != nv:  raise ValueError(
  *             "Given %d column indices but %d non-zero values" %
  */
-  __pyx_t_8 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_pv, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_pv, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 360, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF_SET(__pyx_v_pv, __pyx_t_8);
   __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":352
+  /* "PETSc/Mat.pyx":361
  *         cdef PetscScalar *v=NULL, *ov=NULL
  *         pv = iarray_s(pv, &nv, &v) # Non-zero values (diagonal)
  *         if nj != nv:  raise ValueError(             # <<<<<<<<<<<<<<
@@ -111760,18 +113348,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_t_3 = ((__pyx_v_nj != __pyx_v_nv) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":354
+    /* "PETSc/Mat.pyx":363
  *         if nj != nv:  raise ValueError(
  *             "Given %d column indices but %d non-zero values" %
  *             (toInt(nj), toInt(nv)))             # <<<<<<<<<<<<<<
  *         if pov is not None:
  *             pov = iarray_s(pov, &nov, &ov) # Non-zero values (off-diagonal)
  */
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 363, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 363, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 363, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);
@@ -111780,38 +113368,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __pyx_t_8 = 0;
     __pyx_t_13 = 0;
 
-    /* "PETSc/Mat.pyx":353
+    /* "PETSc/Mat.pyx":362
  *         pv = iarray_s(pv, &nv, &v) # Non-zero values (diagonal)
  *         if nj != nv:  raise ValueError(
  *             "Given %d column indices but %d non-zero values" %             # <<<<<<<<<<<<<<
  *             (toInt(nj), toInt(nv)))
  *         if pov is not None:
  */
-    __pyx_t_13 = __Pyx_PyString_Format(__pyx_kp_s_Given_d_column_indices_but_d_non, __pyx_t_7); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = __Pyx_PyString_Format(__pyx_kp_s_Given_d_column_indices_but_d_non, __pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 362, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "PETSc/Mat.pyx":352
+    /* "PETSc/Mat.pyx":361
  *         cdef PetscScalar *v=NULL, *ov=NULL
  *         pv = iarray_s(pv, &nv, &v) # Non-zero values (diagonal)
  *         if nj != nv:  raise ValueError(             # <<<<<<<<<<<<<<
  *             "Given %d column indices but %d non-zero values" %
  *             (toInt(nj), toInt(nv)))
  */
-    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 361, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_13);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_13);
     __pyx_t_13 = 0;
-    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 361, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_Raise(__pyx_t_13, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-    {__pyx_filename = __pyx_f[33]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(33, 361, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":355
+  /* "PETSc/Mat.pyx":364
  *             "Given %d column indices but %d non-zero values" %
  *             (toInt(nj), toInt(nv)))
  *         if pov is not None:             # <<<<<<<<<<<<<<
@@ -111822,22 +113410,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_t_15 = (__pyx_t_3 != 0);
   if (__pyx_t_15) {
 
-    /* "PETSc/Mat.pyx":356
+    /* "PETSc/Mat.pyx":365
  *             (toInt(nj), toInt(nv)))
  *         if pov is not None:
  *             pov = iarray_s(pov, &nov, &ov) # Non-zero values (off-diagonal)             # <<<<<<<<<<<<<<
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  */
-    __pyx_t_13 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_pov, (&__pyx_v_nov), (&__pyx_v_ov))); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_pov, (&__pyx_v_nov), (&__pyx_v_ov))); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 365, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_DECREF_SET(__pyx_v_pov, __pyx_t_13);
     __pyx_t_13 = 0;
-    goto __pyx_L28;
+
+    /* "PETSc/Mat.pyx":364
+ *             "Given %d column indices but %d non-zero values" %
+ *             (toInt(nj), toInt(nv)))
+ *         if pov is not None:             # <<<<<<<<<<<<<<
+ *             pov = iarray_s(pov, &nov, &ov) # Non-zero values (off-diagonal)
+ *         # create matrix
+ */
   }
-  __pyx_L28:;
 
-  /* "PETSc/Mat.pyx":358
+  /* "PETSc/Mat.pyx":367
  *             pov = iarray_s(pov, &nov, &ov) # Non-zero values (off-diagonal)
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -111846,34 +113440,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":359
+  /* "PETSc/Mat.pyx":368
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  *         if comm_size(ccomm) == 1:             # <<<<<<<<<<<<<<
  *             CHKERR( MatCreateSeqAIJWithArrays(
  *                 ccomm, m, n, i, j, v, &newmat) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_comm_size(__pyx_v_ccomm); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_comm_size(__pyx_v_ccomm); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) __PYX_ERR(33, 368, __pyx_L1_error)
   __pyx_t_15 = ((__pyx_t_2 == 1) != 0);
   if (__pyx_t_15) {
 
-    /* "PETSc/Mat.pyx":360
+    /* "PETSc/Mat.pyx":369
  *         cdef PetscMat newmat = NULL
  *         if comm_size(ccomm) == 1:
  *             CHKERR( MatCreateSeqAIJWithArrays(             # <<<<<<<<<<<<<<
  *                 ccomm, m, n, i, j, v, &newmat) )
  *             csr = (pi, pj, pv)
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateSeqAIJWithArrays(__pyx_v_ccomm, __pyx_v_m, __pyx_v_n, __pyx_v_i, __pyx_v_j, __pyx_v_v, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateSeqAIJWithArrays(__pyx_v_ccomm, __pyx_v_m, __pyx_v_n, __pyx_v_i, __pyx_v_j, __pyx_v_v, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 369, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":362
+    /* "PETSc/Mat.pyx":371
  *             CHKERR( MatCreateSeqAIJWithArrays(
  *                 ccomm, m, n, i, j, v, &newmat) )
  *             csr = (pi, pj, pv)             # <<<<<<<<<<<<<<
  *         else:
  *             if oi != NULL and oj != NULL and ov != NULL:
  */
-    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 371, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_INCREF(__pyx_v_pi);
     __Pyx_GIVEREF(__pyx_v_pi);
@@ -111886,17 +113480,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_v_pv);
     __Pyx_DECREF_SET(__pyx_v_csr, __pyx_t_13);
     __pyx_t_13 = 0;
+
+    /* "PETSc/Mat.pyx":368
+ *         # create matrix
+ *         cdef PetscMat newmat = NULL
+ *         if comm_size(ccomm) == 1:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatCreateSeqAIJWithArrays(
+ *                 ccomm, m, n, i, j, v, &newmat) )
+ */
     goto __pyx_L29;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":364
+  /* "PETSc/Mat.pyx":373
  *             csr = (pi, pj, pv)
  *         else:
  *             if oi != NULL and oj != NULL and ov != NULL:             # <<<<<<<<<<<<<<
  *                 CHKERR( MatCreateMPIAIJWithSplitArrays(
  *                     ccomm, m, n, M, N, i, j, v, oi, oj, ov, &newmat) )
  */
+  /*else*/ {
     __pyx_t_3 = ((__pyx_v_oi != NULL) != 0);
     if (__pyx_t_3) {
     } else {
@@ -111914,23 +113516,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __pyx_L31_bool_binop_done:;
     if (__pyx_t_15) {
 
-      /* "PETSc/Mat.pyx":365
+      /* "PETSc/Mat.pyx":374
  *         else:
  *             if oi != NULL and oj != NULL and ov != NULL:
  *                 CHKERR( MatCreateMPIAIJWithSplitArrays(             # <<<<<<<<<<<<<<
  *                     ccomm, m, n, M, N, i, j, v, oi, oj, ov, &newmat) )
  *                 csr = ((pi, pj, pv), (poi, poj, pov))
  */
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateMPIAIJWithSplitArrays(__pyx_v_ccomm, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N, __pyx_v_i, __pyx_v_j, __pyx_v_v, __pyx_v_oi, __pyx_v_oj, __pyx_v_ov, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateMPIAIJWithSplitArrays(__pyx_v_ccomm, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N, __pyx_v_i, __pyx_v_j, __pyx_v_v, __pyx_v_oi, __pyx_v_oj, __pyx_v_ov, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 374, __pyx_L1_error)
 
-      /* "PETSc/Mat.pyx":367
+      /* "PETSc/Mat.pyx":376
  *                 CHKERR( MatCreateMPIAIJWithSplitArrays(
  *                     ccomm, m, n, M, N, i, j, v, oi, oj, ov, &newmat) )
  *                 csr = ((pi, pj, pv), (poi, poj, pov))             # <<<<<<<<<<<<<<
  *             else:
  *                 CHKERR( MatCreateMPIAIJWithArrays(
  */
-      __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 376, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __Pyx_INCREF(__pyx_v_pi);
       __Pyx_GIVEREF(__pyx_v_pi);
@@ -111941,7 +113543,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __Pyx_INCREF(__pyx_v_pv);
       __Pyx_GIVEREF(__pyx_v_pv);
       PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_v_pv);
-      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 376, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_v_poi);
       __Pyx_GIVEREF(__pyx_v_poi);
@@ -111952,7 +113554,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __Pyx_INCREF(__pyx_v_pov);
       __Pyx_GIVEREF(__pyx_v_pov);
       PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_pov);
-      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 376, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_13);
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13);
@@ -111962,20 +113564,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __pyx_t_7 = 0;
       __Pyx_DECREF_SET(__pyx_v_csr, __pyx_t_8);
       __pyx_t_8 = 0;
+
+      /* "PETSc/Mat.pyx":373
+ *             csr = (pi, pj, pv)
+ *         else:
+ *             if oi != NULL and oj != NULL and ov != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( MatCreateMPIAIJWithSplitArrays(
+ *                     ccomm, m, n, M, N, i, j, v, oi, oj, ov, &newmat) )
+ */
       goto __pyx_L30;
     }
-    /*else*/ {
 
-      /* "PETSc/Mat.pyx":369
+    /* "PETSc/Mat.pyx":378
  *                 csr = ((pi, pj, pv), (poi, poj, pov))
  *             else:
  *                 CHKERR( MatCreateMPIAIJWithArrays(             # <<<<<<<<<<<<<<
  *                     ccomm, m, n, M, N, i, j, v, &newmat) )
  *                 csr = None
  */
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateMPIAIJWithArrays(__pyx_v_ccomm, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N, __pyx_v_i, __pyx_v_j, __pyx_v_v, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+
+      /* "PETSc/Mat.pyx":379
+ *             else:
+ *                 CHKERR( MatCreateMPIAIJWithArrays(
+ *                     ccomm, m, n, M, N, i, j, v, &newmat) )             # <<<<<<<<<<<<<<
+ *                 csr = None
+ *         PetscCLEAR(self.obj); self.mat = newmat
+ */
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateMPIAIJWithArrays(__pyx_v_ccomm, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N, __pyx_v_i, __pyx_v_j, __pyx_v_v, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 378, __pyx_L1_error)
 
-      /* "PETSc/Mat.pyx":371
+      /* "PETSc/Mat.pyx":380
  *                 CHKERR( MatCreateMPIAIJWithArrays(
  *                     ccomm, m, n, M, N, i, j, v, &newmat) )
  *                 csr = None             # <<<<<<<<<<<<<<
@@ -111989,7 +113607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   }
   __pyx_L29:;
 
-  /* "PETSc/Mat.pyx":372
+  /* "PETSc/Mat.pyx":381
  *                     ccomm, m, n, M, N, i, j, v, &newmat) )
  *                 csr = None
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -111999,18 +113617,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":373
+  /* "PETSc/Mat.pyx":382
  *                 csr = None
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         self.set_attr('__csr__', csr)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_8 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_csr_2, __pyx_v_csr); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__csr__"), __pyx_v_csr); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 382, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":374
+  /* "PETSc/Mat.pyx":383
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         self.set_attr('__csr__', csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -112022,7 +113640,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":321
+  /* "PETSc/Mat.pyx":330
  *         return self
  * 
  *     def createAIJWithArrays(self, size, csr, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -112054,7 +113672,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":378
+/* "PETSc/Mat.pyx":387
  *     #
  * 
  *     def createDense(self, size, bsize=None, array=None, comm=None):             # <<<<<<<<<<<<<<
@@ -112070,9 +113688,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_61createDense(PyObject *__pyx_v_
   PyObject *__pyx_v_bsize = 0;
   PyObject *__pyx_v_array = 0;
   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("createDense (wrapper)", 0);
@@ -112115,7 +113730,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_61createDense(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDense") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDense") < 0)) __PYX_ERR(33, 387, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -112134,7 +113749,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_61createDense(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createDense", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createDense", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 387, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createDense", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -112155,13 +113770,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createDense", 0);
   __Pyx_INCREF(__pyx_v_array);
 
-  /* "PETSc/Mat.pyx":380
+  /* "PETSc/Mat.pyx":389
  *     def createDense(self, size, bsize=None, array=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -112170,16 +113782,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":381
+  /* "PETSc/Mat.pyx":390
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATDENSE, comm, size, bsize, &newmat)             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATDENSE, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_Mat_Create(MATDENSE, __pyx_v_comm, __pyx_v_size, __pyx_v_bsize, (&__pyx_v_newmat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 390, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":382
+  /* "PETSc/Mat.pyx":391
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATDENSE, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -112189,7 +113801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":384
+  /* "PETSc/Mat.pyx":393
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  *         if array is not None:             # <<<<<<<<<<<<<<
@@ -112200,33 +113812,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":385
+    /* "PETSc/Mat.pyx":394
  *         # preallocate matrix
  *         if array is not None:
  *             array = Mat_AllocDense(self.mat, array)             # <<<<<<<<<<<<<<
  *             self.set_attr('__array__', array)
  *         return self
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_Mat_AllocDense(__pyx_v_self->mat, __pyx_v_array); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_Mat_AllocDense(__pyx_v_self->mat, __pyx_v_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 394, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/Mat.pyx":386
+    /* "PETSc/Mat.pyx":395
  *         if array is not None:
  *             array = Mat_AllocDense(self.mat, array)
  *             self.set_attr('__array__', array)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_array_2, __pyx_v_array); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__array__"), __pyx_v_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 395, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":393
+ *         PetscCLEAR(self.obj); self.mat = newmat
+ *         # preallocate matrix
+ *         if array is not None:             # <<<<<<<<<<<<<<
+ *             array = Mat_AllocDense(self.mat, array)
+ *             self.set_attr('__array__', array)
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":387
+  /* "PETSc/Mat.pyx":396
  *             array = Mat_AllocDense(self.mat, array)
  *             self.set_attr('__array__', array)
  *         return self             # <<<<<<<<<<<<<<
@@ -112238,7 +113856,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":378
+  /* "PETSc/Mat.pyx":387
  *     #
  * 
  *     def createDense(self, size, bsize=None, array=None, comm=None):             # <<<<<<<<<<<<<<
@@ -112258,7 +113876,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":389
+/* "PETSc/Mat.pyx":398
  *         return self
  * 
  *     def setPreallocationDense(self, array):             # <<<<<<<<<<<<<<
@@ -112271,9 +113889,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_63setPreallocationDense(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_62setPreallocationDense[] = "Mat.setPreallocationDense(self, array)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_63setPreallocationDense(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_array = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPreallocationDense (wrapper)", 0);
@@ -112295,7 +113910,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_63setPreallocationDense(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationDense") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationDense") < 0)) __PYX_ERR(33, 398, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -112306,7 +113921,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_63setPreallocationDense(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPreallocationDense", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPreallocationDense", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 398, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setPreallocationDense", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -112325,13 +113940,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
   __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("setPreallocationDense", 0);
   __Pyx_INCREF(__pyx_v_array);
 
-  /* "PETSc/Mat.pyx":390
+  /* "PETSc/Mat.pyx":399
  * 
  *     def setPreallocationDense(self, array):
  *         cdef PetscBool done = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -112340,39 +113952,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":391
+  /* "PETSc/Mat.pyx":400
  *     def setPreallocationDense(self, array):
  *         cdef PetscBool done = PETSC_FALSE
  *         CHKERR( MatIsPreallocated(self.mat, &done) )             # <<<<<<<<<<<<<<
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         array = Mat_AllocDense(self.mat, array)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 400, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":393
+  /* "PETSc/Mat.pyx":402
  *         CHKERR( MatIsPreallocated(self.mat, &done) )
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         array = Mat_AllocDense(self.mat, array)             # <<<<<<<<<<<<<<
  *         self.set_attr('__array__', array)
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Mat_AllocDense(__pyx_v_self->mat, __pyx_v_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Mat_AllocDense(__pyx_v_self->mat, __pyx_v_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 402, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":394
+  /* "PETSc/Mat.pyx":403
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         array = Mat_AllocDense(self.mat, array)
  *         self.set_attr('__array__', array)             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_array_2, __pyx_v_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__array__"), __pyx_v_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 403, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":395
+  /* "PETSc/Mat.pyx":404
  *         array = Mat_AllocDense(self.mat, array)
  *         self.set_attr('__array__', array)
  *         return self             # <<<<<<<<<<<<<<
@@ -112384,7 +113996,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":389
+  /* "PETSc/Mat.pyx":398
  *         return self
  * 
  *     def setPreallocationDense(self, array):             # <<<<<<<<<<<<<<
@@ -112404,7 +114016,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":399
+/* "PETSc/Mat.pyx":408
  *     #
  * 
  *     def createScatter(self, Scatter scatter not None, comm=None):             # <<<<<<<<<<<<<<
@@ -112418,9 +114030,6 @@ static char __pyx_doc_8petsc4py_5PETSc_3Mat_64createScatter[] = "Mat.createScatt
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_65createScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscScatterObject *__pyx_v_scatter = 0;
   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("createScatter (wrapper)", 0);
@@ -112449,7 +114058,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_65createScatter(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createScatter") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createScatter") < 0)) __PYX_ERR(33, 408, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -112464,13 +114073,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_65createScatter(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createScatter", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createScatter", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 408, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createScatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scatter), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "scatter", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scatter), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "scatter", 0))) __PYX_ERR(33, 408, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_scatter, __pyx_v_comm);
 
   /* function exit code */
@@ -112494,13 +114103,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
   PyObject *__pyx_t_5 = NULL;
   MPI_Comm __pyx_t_6;
   int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createScatter", 0);
   __Pyx_INCREF(__pyx_v_comm);
 
-  /* "PETSc/Mat.pyx":400
+  /* "PETSc/Mat.pyx":409
  * 
  *     def createScatter(self, Scatter scatter not None, comm=None):
  *         if comm is None: comm = scatter.getComm()             # <<<<<<<<<<<<<<
@@ -112510,7 +114116,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
   __pyx_t_1 = (__pyx_v_comm == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_scatter), __pyx_n_s_getComm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_scatter), __pyx_n_s_getComm); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 409, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -112523,30 +114129,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
       }
     }
     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[33]; __pyx_lineno = 400; __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(33, 409, __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[33]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 409, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_comm, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":401
+  /* "PETSc/Mat.pyx":410
  *     def createScatter(self, Scatter scatter not None, comm=None):
  *         if comm is None: comm = scatter.getComm()
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateScatter(ccomm, scatter.sct, &newmat) )
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 410, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_6;
 
-  /* "PETSc/Mat.pyx":402
+  /* "PETSc/Mat.pyx":411
  *         if comm is None: comm = scatter.getComm()
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -112555,16 +114159,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":403
+  /* "PETSc/Mat.pyx":412
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateScatter(ccomm, scatter.sct, &newmat) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateScatter(__pyx_v_ccomm, __pyx_v_scatter->sct, (&__pyx_v_newmat))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateScatter(__pyx_v_ccomm, __pyx_v_scatter->sct, (&__pyx_v_newmat))); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(33, 412, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":404
+  /* "PETSc/Mat.pyx":413
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateScatter(ccomm, scatter.sct, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -112574,7 +114178,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":405
+  /* "PETSc/Mat.pyx":414
  *         CHKERR( MatCreateScatter(ccomm, scatter.sct, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
@@ -112586,7 +114190,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":399
+  /* "PETSc/Mat.pyx":408
  *     #
  * 
  *     def createScatter(self, Scatter scatter not None, comm=None):             # <<<<<<<<<<<<<<
@@ -112608,7 +114212,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":407
+/* "PETSc/Mat.pyx":416
  *         return self
  * 
  *     def createNormal(self, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -112621,9 +114225,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_67createNormal(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_66createNormal[] = "Mat.createNormal(self, Mat mat)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_67createNormal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createNormal (wrapper)", 0);
@@ -112645,7 +114246,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_67createNormal(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, "createNormal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createNormal") < 0)) __PYX_ERR(33, 416, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -112656,13 +114257,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_67createNormal(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createNormal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createNormal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 416, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createNormal", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 416, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -112679,12 +114280,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMat
   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("createNormal", 0);
 
-  /* "PETSc/Mat.pyx":408
+  /* "PETSc/Mat.pyx":417
  * 
  *     def createNormal(self, Mat mat not None):
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -112693,16 +114291,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMat
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":409
+  /* "PETSc/Mat.pyx":418
  *     def createNormal(self, Mat mat not None):
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateNormal(mat.mat, &newmat) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateNormal(__pyx_v_mat->mat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateNormal(__pyx_v_mat->mat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 418, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":410
+  /* "PETSc/Mat.pyx":419
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateNormal(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -112712,7 +114310,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMat
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":411
+  /* "PETSc/Mat.pyx":420
  *         CHKERR( MatCreateNormal(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
@@ -112724,7 +114322,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMat
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":407
+  /* "PETSc/Mat.pyx":416
  *         return self
  * 
  *     def createNormal(self, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -112742,7 +114340,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":413
+/* "PETSc/Mat.pyx":422
  *         return self
  * 
  *     def createTranspose(self, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -112755,9 +114353,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_69createTranspose(PyObject *__py
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_68createTranspose[] = "Mat.createTranspose(self, Mat mat)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_69createTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createTranspose (wrapper)", 0);
@@ -112779,7 +114374,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_69createTranspose(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, "createTranspose") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createTranspose") < 0)) __PYX_ERR(33, 422, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -112790,13 +114385,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_69createTranspose(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createTranspose", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createTranspose", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 422, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createTranspose", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 422, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -112813,12 +114408,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetsc
   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("createTranspose", 0);
 
-  /* "PETSc/Mat.pyx":414
+  /* "PETSc/Mat.pyx":423
  * 
  *     def createTranspose(self, Mat mat not None):
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -112827,16 +114419,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetsc
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":415
+  /* "PETSc/Mat.pyx":424
  *     def createTranspose(self, Mat mat not None):
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateTranspose(mat.mat, &newmat) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateTranspose(__pyx_v_mat->mat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateTranspose(__pyx_v_mat->mat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 424, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":416
+  /* "PETSc/Mat.pyx":425
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateTranspose(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -112846,7 +114438,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetsc
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":417
+  /* "PETSc/Mat.pyx":426
  *         CHKERR( MatCreateTranspose(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
@@ -112858,7 +114450,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":413
+  /* "PETSc/Mat.pyx":422
  *         return self
  * 
  *     def createTranspose(self, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -112876,7 +114468,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":419
+/* "PETSc/Mat.pyx":428
  *         return self
  * 
  *     def createLRC(self, Mat A not None, Mat U not None, Mat V not None):             # <<<<<<<<<<<<<<
@@ -112891,9 +114483,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_71createLRC(PyObject *__pyx_v_se
   struct PyPetscMatObject *__pyx_v_A = 0;
   struct PyPetscMatObject *__pyx_v_U = 0;
   struct PyPetscMatObject *__pyx_v_V = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createLRC (wrapper)", 0);
@@ -112918,16 +114507,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_71createLRC(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createLRC", 1, 3, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createLRC", 1, 3, 3, 1); __PYX_ERR(33, 428, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createLRC", 1, 3, 3, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createLRC", 1, 3, 3, 2); __PYX_ERR(33, 428, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createLRC") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createLRC") < 0)) __PYX_ERR(33, 428, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -112942,15 +114531,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_71createLRC(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createLRC", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createLRC", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 428, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createLRC", __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[33]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "U", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "V", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(33, 428, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "U", 0))) __PYX_ERR(33, 428, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "V", 0))) __PYX_ERR(33, 428, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_A, __pyx_v_U, __pyx_v_V);
 
   /* function exit code */
@@ -112967,12 +114556,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObj
   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("createLRC", 0);
 
-  /* "PETSc/Mat.pyx":420
+  /* "PETSc/Mat.pyx":429
  * 
  *     def createLRC(self, Mat A not None, Mat U not None, Mat V not None):
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -112981,16 +114567,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObj
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":421
+  /* "PETSc/Mat.pyx":430
  *     def createLRC(self, Mat A not None, Mat U not None, Mat V not None):
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateLRC(A.mat, U.mat, V.mat, &newmat) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateLRC(__pyx_v_A->mat, __pyx_v_U->mat, __pyx_v_V->mat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateLRC(__pyx_v_A->mat, __pyx_v_U->mat, __pyx_v_V->mat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 430, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":422
+  /* "PETSc/Mat.pyx":431
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateLRC(A.mat, U.mat, V.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -113000,7 +114586,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObj
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":423
+  /* "PETSc/Mat.pyx":432
  *         CHKERR( MatCreateLRC(A.mat, U.mat, V.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
@@ -113012,7 +114598,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":419
+  /* "PETSc/Mat.pyx":428
  *         return self
  * 
  *     def createLRC(self, Mat A not None, Mat U not None, Mat V not None):             # <<<<<<<<<<<<<<
@@ -113030,7 +114616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":425
+/* "PETSc/Mat.pyx":434
  *         return self
  * 
  *     def createSubMatrix(self, Mat A not None,             # <<<<<<<<<<<<<<
@@ -113045,9 +114631,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__py
   struct PyPetscMatObject *__pyx_v_A = 0;
   struct PyPetscISObject *__pyx_v_isrow = 0;
   struct PyPetscISObject *__pyx_v_iscol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createSubMatrix (wrapper)", 0);
@@ -113055,7 +114638,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__py
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_isrow,&__pyx_n_s_iscol,0};
     PyObject* values[3] = {0,0,0};
 
-    /* "PETSc/Mat.pyx":426
+    /* "PETSc/Mat.pyx":435
  * 
  *     def createSubMatrix(self, Mat A not None,
  *                         IS isrow not None, IS iscol=None):             # <<<<<<<<<<<<<<
@@ -113081,7 +114664,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createSubMatrix", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createSubMatrix", 0, 2, 3, 1); __PYX_ERR(33, 434, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -113090,7 +114673,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSubMatrix") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSubMatrix") < 0)) __PYX_ERR(33, 434, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -113107,18 +114690,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createSubMatrix", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createSubMatrix", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 434, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSubMatrix", __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[33]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(33, 434, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 435, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "iscol", 0))) __PYX_ERR(33, 435, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_A, __pyx_v_isrow, __pyx_v_iscol);
 
-  /* "PETSc/Mat.pyx":425
+  /* "PETSc/Mat.pyx":434
  *         return self
  * 
  *     def createSubMatrix(self, Mat A not None,             # <<<<<<<<<<<<<<
@@ -113142,13 +114725,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createSubMatrix", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_iscol);
 
-  /* "PETSc/Mat.pyx":427
+  /* "PETSc/Mat.pyx":436
  *     def createSubMatrix(self, Mat A not None,
  *                         IS isrow not None, IS iscol=None):
  *         if iscol is None: iscol = isrow             # <<<<<<<<<<<<<<
@@ -113160,11 +114740,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   if (__pyx_t_2) {
     __Pyx_INCREF(((PyObject *)__pyx_v_isrow));
     __Pyx_DECREF_SET(__pyx_v_iscol, __pyx_v_isrow);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":428
+  /* "PETSc/Mat.pyx":437
  *                         IS isrow not None, IS iscol=None):
  *         if iscol is None: iscol = isrow
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -113173,16 +114751,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":429
+  /* "PETSc/Mat.pyx":438
  *         if iscol is None: iscol = isrow
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateSubMatrix(__pyx_v_A->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_newmat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateSubMatrix(__pyx_v_A->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_newmat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 438, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":430
+  /* "PETSc/Mat.pyx":439
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -113192,7 +114770,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":431
+  /* "PETSc/Mat.pyx":440
  *         CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
@@ -113204,7 +114782,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":425
+  /* "PETSc/Mat.pyx":434
  *         return self
  * 
  *     def createSubMatrix(self, Mat A not None,             # <<<<<<<<<<<<<<
@@ -113223,12 +114801,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":433
+/* "PETSc/Mat.pyx":442
  *         return self
  * 
  *     def createNest(self, mats, isrows=None, iscols=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef object mat
  *         mats = [list(mat) for mat in mats]
- *         if isrows:
  */
 
 /* Python wrapper */
@@ -113239,9 +114817,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_75createNest(PyObject *__pyx_v_s
   PyObject *__pyx_v_isrows = 0;
   PyObject *__pyx_v_iscols = 0;
   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("createNest (wrapper)", 0);
@@ -113284,7 +114859,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_75createNest(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createNest") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createNest") < 0)) __PYX_ERR(33, 442, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -113303,7 +114878,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_75createNest(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createNest", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createNest", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 442, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createNest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -113317,6 +114892,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_75createNest(PyObject *__pyx_v_s
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mats, PyObject *__pyx_v_isrows, PyObject *__pyx_v_iscols, PyObject *__pyx_v_comm) {
+  PyObject *__pyx_v_mat = 0;
   MPI_Comm __pyx_v_ccomm;
   Py_ssize_t __pyx_v_i;
   Py_ssize_t __pyx_v_mr;
@@ -113331,7 +114907,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
   CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
   CYTHON_UNUSED PyObject *__pyx_v_tmp3 = 0;
   Mat __pyx_v_newmat;
-  PyObject *__pyx_v_mat = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -113346,47 +114921,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
   int __pyx_t_10;
   IS __pyx_t_11;
   int __pyx_t_12;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createNest", 0);
   __Pyx_INCREF(__pyx_v_mats);
   __Pyx_INCREF(__pyx_v_isrows);
   __Pyx_INCREF(__pyx_v_iscols);
 
-  /* "PETSc/Mat.pyx":434
- * 
+  /* "PETSc/Mat.pyx":444
  *     def createNest(self, mats, isrows=None, iscols=None, comm=None):
+ *         cdef object mat
  *         mats = [list(mat) for mat in mats]             # <<<<<<<<<<<<<<
  *         if isrows:
  *             isrows = list(isrows)
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 444, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(PyList_CheckExact(__pyx_v_mats)) || PyTuple_CheckExact(__pyx_v_mats)) {
     __pyx_t_2 = __pyx_v_mats; __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_mats); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_mats); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 444, __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[33]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 444, __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[33]; __pyx_lineno = 434; __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(33, 444, __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[33]; __pyx_lineno = 434; __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(33, 444, __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[33]; __pyx_lineno = 434; __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(33, 444, __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[33]; __pyx_lineno = 434; __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(33, 444, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       }
@@ -113396,7 +114968,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
         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[33]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(33, 444, __pyx_L1_error)
         }
         break;
       }
@@ -113404,38 +114976,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
     }
     __Pyx_XDECREF_SET(__pyx_v_mat, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = PySequence_List(__pyx_v_mat); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_List(__pyx_v_mat); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 444, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(33, 444, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_mats, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":435
- *     def createNest(self, mats, isrows=None, iscols=None, comm=None):
+  /* "PETSc/Mat.pyx":445
+ *         cdef object mat
  *         mats = [list(mat) for mat in mats]
  *         if isrows:             # <<<<<<<<<<<<<<
  *             isrows = list(isrows)
  *             assert len(isrows) == len(mats)
  */
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_isrows); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_isrows); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(33, 445, __pyx_L1_error)
   if (__pyx_t_6) {
 
-    /* "PETSc/Mat.pyx":436
+    /* "PETSc/Mat.pyx":446
  *         mats = [list(mat) for mat in mats]
  *         if isrows:
  *             isrows = list(isrows)             # <<<<<<<<<<<<<<
  *             assert len(isrows) == len(mats)
  *         else:
  */
-    __pyx_t_1 = PySequence_List(__pyx_v_isrows); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_List(__pyx_v_isrows); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 446, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_isrows, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/Mat.pyx":437
+    /* "PETSc/Mat.pyx":447
  *         if isrows:
  *             isrows = list(isrows)
  *             assert len(isrows) == len(mats)             # <<<<<<<<<<<<<<
@@ -113444,53 +115016,61 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
     #ifndef CYTHON_WITHOUT_ASSERTIONS
     if (unlikely(!Py_OptimizeFlag)) {
-      __pyx_t_3 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_7 = PyObject_Length(__pyx_v_mats); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 447, __pyx_L1_error)
+      __pyx_t_7 = PyObject_Length(__pyx_v_mats); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(33, 447, __pyx_L1_error)
       if (unlikely(!((__pyx_t_3 == __pyx_t_7) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[33]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(33, 447, __pyx_L1_error)
       }
     }
     #endif
+
+    /* "PETSc/Mat.pyx":445
+ *         cdef object mat
+ *         mats = [list(mat) for mat in mats]
+ *         if isrows:             # <<<<<<<<<<<<<<
+ *             isrows = list(isrows)
+ *             assert len(isrows) == len(mats)
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":439
+  /* "PETSc/Mat.pyx":449
  *             assert len(isrows) == len(mats)
  *         else:
  *             isrows = None             # <<<<<<<<<<<<<<
  *         if iscols:
  *             iscols = list(iscols)
  */
+  /*else*/ {
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_isrows, Py_None);
   }
   __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":440
+  /* "PETSc/Mat.pyx":450
  *         else:
  *             isrows = None
  *         if iscols:             # <<<<<<<<<<<<<<
  *             iscols = list(iscols)
  *             assert len(iscols) == len(mats[0])
  */
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_iscols); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_iscols); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(33, 450, __pyx_L1_error)
   if (__pyx_t_6) {
 
-    /* "PETSc/Mat.pyx":441
+    /* "PETSc/Mat.pyx":451
  *             isrows = None
  *         if iscols:
  *             iscols = list(iscols)             # <<<<<<<<<<<<<<
  *             assert len(iscols) == len(mats[0])
  *         else:
  */
-    __pyx_t_1 = PySequence_List(__pyx_v_iscols); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_List(__pyx_v_iscols); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 451, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_iscols, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/Mat.pyx":442
+    /* "PETSc/Mat.pyx":452
  *         if iscols:
  *             iscols = list(iscols)
  *             assert len(iscols) == len(mats[0])             # <<<<<<<<<<<<<<
@@ -113499,67 +115079,75 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
     #ifndef CYTHON_WITHOUT_ASSERTIONS
     if (unlikely(!Py_OptimizeFlag)) {
-      __pyx_t_7 = PyObject_Length(__pyx_v_iscols); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_mats, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_7 = PyObject_Length(__pyx_v_iscols); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(33, 452, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_mats, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 452, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 452, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (unlikely(!((__pyx_t_7 == __pyx_t_3) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[33]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(33, 452, __pyx_L1_error)
       }
     }
     #endif
+
+    /* "PETSc/Mat.pyx":450
+ *         else:
+ *             isrows = None
+ *         if iscols:             # <<<<<<<<<<<<<<
+ *             iscols = list(iscols)
+ *             assert len(iscols) == len(mats[0])
+ */
     goto __pyx_L6;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":444
+  /* "PETSc/Mat.pyx":454
  *             assert len(iscols) == len(mats[0])
  *         else:
  *             iscols = None             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Py_ssize_t i, mr = len(mats)
  */
+  /*else*/ {
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_iscols, Py_None);
   }
   __pyx_L6:;
 
-  /* "PETSc/Mat.pyx":445
+  /* "PETSc/Mat.pyx":455
  *         else:
  *             iscols = None
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef Py_ssize_t i, mr = len(mats)
  *         cdef Py_ssize_t j, mc = len(mats[0])
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 455, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_8;
 
-  /* "PETSc/Mat.pyx":446
+  /* "PETSc/Mat.pyx":456
  *             iscols = None
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Py_ssize_t i, mr = len(mats)             # <<<<<<<<<<<<<<
  *         cdef Py_ssize_t j, mc = len(mats[0])
  *         cdef PetscInt nr = <PetscInt>mr
  */
-  __pyx_t_3 = PyObject_Length(__pyx_v_mats); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Length(__pyx_v_mats); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 456, __pyx_L1_error)
   __pyx_v_mr = __pyx_t_3;
 
-  /* "PETSc/Mat.pyx":447
+  /* "PETSc/Mat.pyx":457
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Py_ssize_t i, mr = len(mats)
  *         cdef Py_ssize_t j, mc = len(mats[0])             # <<<<<<<<<<<<<<
  *         cdef PetscInt nr = <PetscInt>mr
  *         cdef PetscInt nc = <PetscInt>mc
  */
-  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_mats, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_mats, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 457, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 457, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_mc = __pyx_t_3;
 
-  /* "PETSc/Mat.pyx":448
+  /* "PETSc/Mat.pyx":458
  *         cdef Py_ssize_t i, mr = len(mats)
  *         cdef Py_ssize_t j, mc = len(mats[0])
  *         cdef PetscInt nr = <PetscInt>mr             # <<<<<<<<<<<<<<
@@ -113568,7 +115156,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
   __pyx_v_nr = ((PetscInt)__pyx_v_mr);
 
-  /* "PETSc/Mat.pyx":449
+  /* "PETSc/Mat.pyx":459
  *         cdef Py_ssize_t j, mc = len(mats[0])
  *         cdef PetscInt nr = <PetscInt>mr
  *         cdef PetscInt nc = <PetscInt>mc             # <<<<<<<<<<<<<<
@@ -113577,7 +115165,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
   __pyx_v_nc = ((PetscInt)__pyx_v_mc);
 
-  /* "PETSc/Mat.pyx":450
+  /* "PETSc/Mat.pyx":460
  *         cdef PetscInt nr = <PetscInt>mr
  *         cdef PetscInt nc = <PetscInt>mc
  *         cdef PetscMat *cmats   = NULL             # <<<<<<<<<<<<<<
@@ -113586,7 +115174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
   __pyx_v_cmats = NULL;
 
-  /* "PETSc/Mat.pyx":451
+  /* "PETSc/Mat.pyx":461
  *         cdef PetscInt nc = <PetscInt>mc
  *         cdef PetscMat *cmats   = NULL
  *         cdef PetscIS  *cisrows = NULL             # <<<<<<<<<<<<<<
@@ -113595,7 +115183,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
   __pyx_v_cisrows = NULL;
 
-  /* "PETSc/Mat.pyx":452
+  /* "PETSc/Mat.pyx":462
  *         cdef PetscMat *cmats   = NULL
  *         cdef PetscIS  *cisrows = NULL
  *         cdef PetscIS  *ciscols = NULL             # <<<<<<<<<<<<<<
@@ -113604,63 +115192,77 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
   __pyx_v_ciscols = NULL;
 
-  /* "PETSc/Mat.pyx":454
+  /* "PETSc/Mat.pyx":464
  *         cdef PetscIS  *ciscols = NULL
  *         cdef object tmp1, tmp2, tmp3
  *         tmp1 = oarray_p(empty_p(nr*nc), NULL, <void**>&cmats)             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < mr:
  *             for j from 0 <= j < mc:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p((__pyx_v_nr * __pyx_v_nc))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p((__pyx_v_nr * __pyx_v_nc))); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 464, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_1, NULL, ((void **)(&__pyx_v_cmats)))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_1, NULL, ((void **)(&__pyx_v_cmats)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 464, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_tmp1 = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":455
+  /* "PETSc/Mat.pyx":465
  *         cdef object tmp1, tmp2, tmp3
  *         tmp1 = oarray_p(empty_p(nr*nc), NULL, <void**>&cmats)
  *         for i from 0 <= i < mr:             # <<<<<<<<<<<<<<
  *             for j from 0 <= j < mc:
- *                 cmats[i*mc+j] = (<Mat?>mats[i][j]).mat
+ *                 mat = mats[i][j]
  */
   __pyx_t_3 = __pyx_v_mr;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "PETSc/Mat.pyx":456
+    /* "PETSc/Mat.pyx":466
  *         tmp1 = oarray_p(empty_p(nr*nc), NULL, <void**>&cmats)
  *         for i from 0 <= i < mr:
  *             for j from 0 <= j < mc:             # <<<<<<<<<<<<<<
- *                 cmats[i*mc+j] = (<Mat?>mats[i][j]).mat
- *         if isrows is not None:
+ *                 mat = mats[i][j]
+ *                 cmats[i*mc+j] = (<Mat?>mat).mat if mat is not None else NULL
  */
     __pyx_t_7 = __pyx_v_mc;
     for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_7; __pyx_v_j++) {
 
-      /* "PETSc/Mat.pyx":457
+      /* "PETSc/Mat.pyx":467
  *         for i from 0 <= i < mr:
  *             for j from 0 <= j < mc:
- *                 cmats[i*mc+j] = (<Mat?>mats[i][j]).mat             # <<<<<<<<<<<<<<
+ *                 mat = mats[i][j]             # <<<<<<<<<<<<<<
+ *                 cmats[i*mc+j] = (<Mat?>mat).mat if mat is not None else NULL
  *         if isrows is not None:
- *             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)
  */
-      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_mats, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_mats, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 467, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_j, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_j, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 467, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat)))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_9 = ((struct PyPetscMatObject *)__pyx_t_1)->mat;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_XDECREF_SET(__pyx_v_mat, __pyx_t_1);
+      __pyx_t_1 = 0;
+
+      /* "PETSc/Mat.pyx":468
+ *             for j from 0 <= j < mc:
+ *                 mat = mats[i][j]
+ *                 cmats[i*mc+j] = (<Mat?>mat).mat if mat is not None else NULL             # <<<<<<<<<<<<<<
+ *         if isrows is not None:
+ *             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)
+ */
+      __pyx_t_6 = (__pyx_v_mat != Py_None);
+      if ((__pyx_t_6 != 0)) {
+        if (!(likely(__Pyx_TypeTest(__pyx_v_mat, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(33, 468, __pyx_L1_error)
+        __pyx_t_9 = ((struct PyPetscMatObject *)__pyx_v_mat)->mat;
+      } else {
+        __pyx_t_9 = NULL;
+      }
       (__pyx_v_cmats[((__pyx_v_i * __pyx_v_mc) + __pyx_v_j)]) = __pyx_t_9;
     }
   }
 
-  /* "PETSc/Mat.pyx":458
- *             for j from 0 <= j < mc:
- *                 cmats[i*mc+j] = (<Mat?>mats[i][j]).mat
+  /* "PETSc/Mat.pyx":469
+ *                 mat = mats[i][j]
+ *                 cmats[i*mc+j] = (<Mat?>mat).mat if mat is not None else NULL
  *         if isrows is not None:             # <<<<<<<<<<<<<<
  *             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)
  *             for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset
@@ -113669,22 +115271,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
   __pyx_t_10 = (__pyx_t_6 != 0);
   if (__pyx_t_10) {
 
-    /* "PETSc/Mat.pyx":459
- *                 cmats[i*mc+j] = (<Mat?>mats[i][j]).mat
+    /* "PETSc/Mat.pyx":470
+ *                 cmats[i*mc+j] = (<Mat?>mat).mat if mat is not None else NULL
  *         if isrows is not None:
  *             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)             # <<<<<<<<<<<<<<
  *             for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset
  *         if iscols is not None:
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nr)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 470, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_1, NULL, ((void **)(&__pyx_v_cisrows)))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_1, NULL, ((void **)(&__pyx_v_cisrows)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 470, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_v_tmp2 = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "PETSc/Mat.pyx":460
+    /* "PETSc/Mat.pyx":471
  *         if isrows is not None:
  *             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)
  *             for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset             # <<<<<<<<<<<<<<
@@ -113693,18 +115295,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
     __pyx_t_3 = __pyx_v_mr;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
-      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_isrows, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_isrows, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 471, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(33, 471, __pyx_L1_error)
       __pyx_t_11 = ((struct PyPetscISObject *)__pyx_t_2)->iset;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       (__pyx_v_cisrows[__pyx_v_i]) = __pyx_t_11;
     }
-    goto __pyx_L11;
+
+    /* "PETSc/Mat.pyx":469
+ *                 mat = mats[i][j]
+ *                 cmats[i*mc+j] = (<Mat?>mat).mat if mat is not None else NULL
+ *         if isrows is not None:             # <<<<<<<<<<<<<<
+ *             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)
+ *             for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset
+ */
   }
-  __pyx_L11:;
 
-  /* "PETSc/Mat.pyx":461
+  /* "PETSc/Mat.pyx":472
  *             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)
  *             for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset
  *         if iscols is not None:             # <<<<<<<<<<<<<<
@@ -113715,22 +115323,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
   __pyx_t_6 = (__pyx_t_10 != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/Mat.pyx":462
+    /* "PETSc/Mat.pyx":473
  *             for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset
  *         if iscols is not None:
  *             tmp3 = oarray_p(empty_p(nc), NULL, <void**>&ciscols)             # <<<<<<<<<<<<<<
  *             for j from 0 <= j < mc: ciscols[j] = (<IS?>iscols[j]).iset
  *         cdef PetscMat newmat = NULL
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nc)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 473, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_ciscols)))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_ciscols)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 473, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_tmp3 = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "PETSc/Mat.pyx":463
+    /* "PETSc/Mat.pyx":474
  *         if iscols is not None:
  *             tmp3 = oarray_p(empty_p(nc), NULL, <void**>&ciscols)
  *             for j from 0 <= j < mc: ciscols[j] = (<IS?>iscols[j]).iset             # <<<<<<<<<<<<<<
@@ -113739,18 +115347,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
     __pyx_t_3 = __pyx_v_mc;
     for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_3; __pyx_v_j++) {
-      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_iscols, __pyx_v_j, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_iscols, __pyx_v_j, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 474, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(33, 474, __pyx_L1_error)
       __pyx_t_11 = ((struct PyPetscISObject *)__pyx_t_1)->iset;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       (__pyx_v_ciscols[__pyx_v_j]) = __pyx_t_11;
     }
-    goto __pyx_L14;
+
+    /* "PETSc/Mat.pyx":472
+ *             tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows)
+ *             for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset
+ *         if iscols is not None:             # <<<<<<<<<<<<<<
+ *             tmp3 = oarray_p(empty_p(nc), NULL, <void**>&ciscols)
+ *             for j from 0 <= j < mc: ciscols[j] = (<IS?>iscols[j]).iset
+ */
   }
-  __pyx_L14:;
 
-  /* "PETSc/Mat.pyx":464
+  /* "PETSc/Mat.pyx":475
  *             tmp3 = oarray_p(empty_p(nc), NULL, <void**>&ciscols)
  *             for j from 0 <= j < mc: ciscols[j] = (<IS?>iscols[j]).iset
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -113759,16 +115373,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":465
+  /* "PETSc/Mat.pyx":476
  *             for j from 0 <= j < mc: ciscols[j] = (<IS?>iscols[j]).iset
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateNest(ccomm, nr, cisrows, nc, ciscols, cmats, &newmat) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self
  */
-  __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateNest(__pyx_v_ccomm, __pyx_v_nr, __pyx_v_cisrows, __pyx_v_nc, __pyx_v_ciscols, __pyx_v_cmats, (&__pyx_v_newmat))); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateNest(__pyx_v_ccomm, __pyx_v_nr, __pyx_v_cisrows, __pyx_v_nc, __pyx_v_ciscols, __pyx_v_cmats, (&__pyx_v_newmat))); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(33, 476, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":466
+  /* "PETSc/Mat.pyx":477
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateNest(ccomm, nr, cisrows, nc, ciscols, cmats, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -113778,7 +115392,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":467
+  /* "PETSc/Mat.pyx":478
  *         CHKERR( MatCreateNest(ccomm, nr, cisrows, nc, ciscols, cmats, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
@@ -113790,12 +115404,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":433
+  /* "PETSc/Mat.pyx":442
  *         return self
  * 
  *     def createNest(self, mats, isrows=None, iscols=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef object mat
  *         mats = [list(mat) for mat in mats]
- *         if isrows:
  */
 
   /* function exit code */
@@ -113806,10 +115420,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createNest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_mat);
   __Pyx_XDECREF(__pyx_v_tmp1);
   __Pyx_XDECREF(__pyx_v_tmp2);
   __Pyx_XDECREF(__pyx_v_tmp3);
-  __Pyx_XDECREF(__pyx_v_mat);
   __Pyx_XDECREF(__pyx_v_mats);
   __Pyx_XDECREF(__pyx_v_isrows);
   __Pyx_XDECREF(__pyx_v_iscols);
@@ -113818,7 +115432,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":483
+/* "PETSc/Mat.pyx":494
  *     ##    return self
  * 
  *     def createPython(self, size, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -113833,9 +115447,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_77createPython(PyObject *__pyx_v
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_v_context = 0;
   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("createPython (wrapper)", 0);
@@ -113871,7 +115482,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_77createPython(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(33, 494, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -113888,7 +115499,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_77createPython(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createPython", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 494, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createPython", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -113914,22 +115525,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
   __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("createPython", 0);
 
-  /* "PETSc/Mat.pyx":485
+  /* "PETSc/Mat.pyx":496
  *     def createPython(self, size, context=None, comm=None):
  *         # communicator and sizes
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *         Mat_Sizes(size, None, &rbs, &cbs, &m, &n, &M, &N)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 496, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":486
+  /* "PETSc/Mat.pyx":497
  *         # communicator and sizes
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0             # <<<<<<<<<<<<<<
@@ -113943,34 +115551,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Mat.pyx":487
+  /* "PETSc/Mat.pyx":498
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *         Mat_Sizes(size, None, &rbs, &cbs, &m, &n, &M, &N)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, rbs, &m, &M)
  *         Sys_Layout(ccomm, cbs, &n, &N)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Mat_Sizes(__pyx_v_size, Py_None, (&__pyx_v_rbs), (&__pyx_v_cbs), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_M), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Mat_Sizes(__pyx_v_size, Py_None, (&__pyx_v_rbs), (&__pyx_v_cbs), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_M), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 498, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":488
+  /* "PETSc/Mat.pyx":499
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
  *         Mat_Sizes(size, None, &rbs, &cbs, &m, &n, &M, &N)
  *         Sys_Layout(ccomm, rbs, &m, &M)             # <<<<<<<<<<<<<<
  *         Sys_Layout(ccomm, cbs, &n, &N)
  *         # create matrix
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_rbs, (&__pyx_v_m), (&__pyx_v_M)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_rbs, (&__pyx_v_m), (&__pyx_v_M)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 499, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":489
+  /* "PETSc/Mat.pyx":500
  *         Mat_Sizes(size, None, &rbs, &cbs, &m, &n, &M, &N)
  *         Sys_Layout(ccomm, rbs, &m, &M)
  *         Sys_Layout(ccomm, cbs, &n, &N)             # <<<<<<<<<<<<<<
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_cbs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_Sys_Layout(__pyx_v_ccomm, __pyx_v_cbs, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 500, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":491
+  /* "PETSc/Mat.pyx":502
  *         Sys_Layout(ccomm, cbs, &n, &N)
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -113979,16 +115587,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":492
+  /* "PETSc/Mat.pyx":503
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreate(ccomm, &newmat) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 503, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":493
+  /* "PETSc/Mat.pyx":504
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreate(ccomm, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -113998,34 +115606,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->mat = __pyx_v_newmat;
 
-  /* "PETSc/Mat.pyx":494
+  /* "PETSc/Mat.pyx":505
  *         CHKERR( MatCreate(ccomm, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetType(self.mat, MATPYTHON) )
  *         CHKERR( MatPythonSetContext(self.mat, <void*>context) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetSizes(__pyx_v_self->mat, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetSizes(__pyx_v_self->mat, __pyx_v_m, __pyx_v_n, __pyx_v_M, __pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 505, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":495
+  /* "PETSc/Mat.pyx":506
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         CHKERR( MatSetType(self.mat, MATPYTHON) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatPythonSetContext(self.mat, <void*>context) )
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_self->mat, MATPYTHON)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_self->mat, MATPYTHON)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 506, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":496
+  /* "PETSc/Mat.pyx":507
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         CHKERR( MatSetType(self.mat, MATPYTHON) )
  *         CHKERR( MatPythonSetContext(self.mat, <void*>context) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonSetContext(__pyx_v_self->mat, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonSetContext(__pyx_v_self->mat, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 507, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":497
+  /* "PETSc/Mat.pyx":508
  *         CHKERR( MatSetType(self.mat, MATPYTHON) )
  *         CHKERR( MatPythonSetContext(self.mat, <void*>context) )
  *         return self             # <<<<<<<<<<<<<<
@@ -114037,7 +115645,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":483
+  /* "PETSc/Mat.pyx":494
  *     ##    return self
  * 
  *     def createPython(self, size, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -114055,7 +115663,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":499
+/* "PETSc/Mat.pyx":510
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -114068,9 +115676,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_79setPythonContext(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_78setPythonContext[] = "Mat.setPythonContext(self, context)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_79setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonContext (wrapper)", 0);
@@ -114092,7 +115697,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_79setPythonContext(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, "setPythonContext") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(33, 510, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -114103,7 +115708,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_79setPythonContext(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 510, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setPythonContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -114120,21 +115725,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_78setPythonContext(struct PyPets
   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("setPythonContext", 0);
 
-  /* "PETSc/Mat.pyx":500
+  /* "PETSc/Mat.pyx":511
  * 
  *     def setPythonContext(self, context):
  *         CHKERR( MatPythonSetContext(self.mat, <void*>context) )             # <<<<<<<<<<<<<<
  * 
  *     def getPythonContext(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonSetContext(__pyx_v_self->mat, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonSetContext(__pyx_v_self->mat, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 511, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":499
+  /* "PETSc/Mat.pyx":510
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -114154,7 +115756,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_78setPythonContext(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":502
+/* "PETSc/Mat.pyx":513
  *         CHKERR( MatPythonSetContext(self.mat, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -114185,12 +115787,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_80getPythonContext(struct PyPets
   __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("getPythonContext", 0);
 
-  /* "PETSc/Mat.pyx":503
+  /* "PETSc/Mat.pyx":514
  * 
  *     def getPythonContext(self):
  *         cdef void *context = NULL             # <<<<<<<<<<<<<<
@@ -114199,16 +115798,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_80getPythonContext(struct PyPets
  */
   __pyx_v_context = NULL;
 
-  /* "PETSc/Mat.pyx":504
+  /* "PETSc/Mat.pyx":515
  *     def getPythonContext(self):
  *         cdef void *context = NULL
  *         CHKERR( MatPythonGetContext(self.mat, &context) )             # <<<<<<<<<<<<<<
  *         if context == NULL: return None
  *         else: return <object> context
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonGetContext(__pyx_v_self->mat, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonGetContext(__pyx_v_self->mat, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 515, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":505
+  /* "PETSc/Mat.pyx":516
  *         cdef void *context = NULL
  *         CHKERR( MatPythonGetContext(self.mat, &context) )
  *         if context == NULL: return None             # <<<<<<<<<<<<<<
@@ -114222,22 +115821,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_80getPythonContext(struct PyPets
     __pyx_r = Py_None;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":506
+  /* "PETSc/Mat.pyx":517
  *         CHKERR( MatPythonGetContext(self.mat, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
  * 
  *     def setPythonType(self, py_type):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(((PyObject *)__pyx_v_context));
     __pyx_r = ((PyObject *)__pyx_v_context);
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":502
+  /* "PETSc/Mat.pyx":513
  *         CHKERR( MatPythonSetContext(self.mat, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -114255,7 +115854,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_80getPythonContext(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":508
+/* "PETSc/Mat.pyx":519
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -114268,9 +115867,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_83setPythonType(PyObject *__pyx_
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_82setPythonType[] = "Mat.setPythonType(self, py_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_83setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_py_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonType (wrapper)", 0);
@@ -114292,7 +115888,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_83setPythonType(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, "setPythonType") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(33, 519, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -114303,7 +115899,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_83setPythonType(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 519, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setPythonType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -114322,13 +115918,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_82setPythonType(struct PyPetscMa
   __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("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
-  /* "PETSc/Mat.pyx":509
+  /* "PETSc/Mat.pyx":520
  * 
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -114337,28 +115930,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_82setPythonType(struct PyPetscMa
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Mat.pyx":510
+  /* "PETSc/Mat.pyx":521
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( MatPythonSetType(self.mat, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 521, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_py_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":511
+  /* "PETSc/Mat.pyx":522
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)
  *         CHKERR( MatPythonSetType(self.mat, cval) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonSetType(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonSetType(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 522, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":508
+  /* "PETSc/Mat.pyx":519
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -114380,7 +115973,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_82setPythonType(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":515
+/* "PETSc/Mat.pyx":526
  *     #
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -114393,9 +115986,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_85setOptionsPrefix(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_3Mat_84setOptionsPrefix[] = "Mat.setOptionsPrefix(self, prefix)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_85setOptionsPrefix(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);
@@ -114417,7 +116007,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_85setOptionsPrefix(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[33]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(33, 526, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -114428,7 +116018,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_85setOptionsPrefix(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[33]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 526, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -114447,13 +116037,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_84setOptionsPrefix(struct PyPets
   __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);
 
-  /* "PETSc/Mat.pyx":516
+  /* "PETSc/Mat.pyx":527
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -114462,28 +116049,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_84setOptionsPrefix(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Mat.pyx":517
+  /* "PETSc/Mat.pyx":528
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetOptionsPrefix(self.mat, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":518
+  /* "PETSc/Mat.pyx":529
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
  *         CHKERR( MatSetOptionsPrefix(self.mat, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetOptionsPrefix(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetOptionsPrefix(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 529, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":515
+  /* "PETSc/Mat.pyx":526
  *     #
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -114505,7 +116092,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_84setOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":520
+/* "PETSc/Mat.pyx":531
  *         CHKERR( MatSetOptionsPrefix(self.mat, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -114536,12 +116123,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_86getOptionsPrefix(struct PyPets
   __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);
 
-  /* "PETSc/Mat.pyx":521
+  /* "PETSc/Mat.pyx":532
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -114550,16 +116134,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_86getOptionsPrefix(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Mat.pyx":522
+  /* "PETSc/Mat.pyx":533
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( MatGetOptionsPrefix(self.mat, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOptionsPrefix(__pyx_v_self->mat, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOptionsPrefix(__pyx_v_self->mat, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 533, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":523
+  /* "PETSc/Mat.pyx":534
  *         cdef const_char *cval = NULL
  *         CHKERR( MatGetOptionsPrefix(self.mat, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -114567,13 +116151,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_86getOptionsPrefix(struct PyPets
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 534, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":520
+  /* "PETSc/Mat.pyx":531
  *         CHKERR( MatSetOptionsPrefix(self.mat, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -114592,7 +116176,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_86getOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":525
+/* "PETSc/Mat.pyx":536
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -114621,21 +116205,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_88setFromOptions(struct PyPetscM
   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);
 
-  /* "PETSc/Mat.pyx":526
+  /* "PETSc/Mat.pyx":537
  * 
  *     def setFromOptions(self):
  *         CHKERR( MatSetFromOptions(self.mat) )             # <<<<<<<<<<<<<<
  * 
  *     def setUp(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetFromOptions(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetFromOptions(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 537, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":525
+  /* "PETSc/Mat.pyx":536
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -114655,7 +116236,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_88setFromOptions(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":528
+/* "PETSc/Mat.pyx":539
  *         CHKERR( MatSetFromOptions(self.mat) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -114684,21 +116265,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_90setUp(struct PyPetscMatObject
   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);
 
-  /* "PETSc/Mat.pyx":529
+  /* "PETSc/Mat.pyx":540
  * 
  *     def setUp(self):
  *         CHKERR( MatSetUp(self.mat) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetUp(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetUp(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 540, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":530
+  /* "PETSc/Mat.pyx":541
  *     def setUp(self):
  *         CHKERR( MatSetUp(self.mat) )
  *         return self             # <<<<<<<<<<<<<<
@@ -114710,7 +116288,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_90setUp(struct PyPetscMatObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":528
+  /* "PETSc/Mat.pyx":539
  *         CHKERR( MatSetFromOptions(self.mat) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -114728,7 +116306,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_90setUp(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":532
+/* "PETSc/Mat.pyx":543
  *         return self
  * 
  *     def setOption(self, option, flag):             # <<<<<<<<<<<<<<
@@ -114742,9 +116320,6 @@ static char __pyx_doc_8petsc4py_5PETSc_3Mat_92setOption[] = "Mat.setOption(self,
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_93setOption(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_option = 0;
   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("setOption (wrapper)", 0);
@@ -114768,11 +116343,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_93setOption(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setOption", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setOption", 1, 2, 2, 1); __PYX_ERR(33, 543, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOption") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOption") < 0)) __PYX_ERR(33, 543, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -114785,7 +116360,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_93setOption(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOption", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOption", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 543, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setOption", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -114804,23 +116379,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_92setOption(struct PyPetscMatObj
   MatOption __pyx_t_1;
   PetscBool __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setOption", 0);
 
-  /* "PETSc/Mat.pyx":533
+  /* "PETSc/Mat.pyx":544
  * 
  *     def setOption(self, option, flag):
  *         CHKERR( MatSetOption(self.mat, option, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_1 = ((MatOption)PyInt_AsLong(__pyx_v_option)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetOption(__pyx_v_self->mat, __pyx_t_1, __pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((MatOption)__Pyx_PyInt_As_MatOption(__pyx_v_option)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 544, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 544, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetOption(__pyx_v_self->mat, __pyx_t_1, __pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 544, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":532
+  /* "PETSc/Mat.pyx":543
  *         return self
  * 
  *     def setOption(self, option, flag):             # <<<<<<<<<<<<<<
@@ -114840,7 +116412,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_92setOption(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":535
+/* "PETSc/Mat.pyx":546
  *         CHKERR( MatSetOption(self.mat, option, flag) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -114871,12 +116443,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_94getType(struct PyPetscMatObjec
   __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);
 
-  /* "PETSc/Mat.pyx":536
+  /* "PETSc/Mat.pyx":547
  * 
  *     def getType(self):
  *         cdef PetscMatType cval = NULL             # <<<<<<<<<<<<<<
@@ -114885,16 +116454,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_94getType(struct PyPetscMatObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Mat.pyx":537
+  /* "PETSc/Mat.pyx":548
  *     def getType(self):
  *         cdef PetscMatType cval = NULL
  *         CHKERR( MatGetType(self.mat, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetType(__pyx_v_self->mat, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetType(__pyx_v_self->mat, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 548, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":538
+  /* "PETSc/Mat.pyx":549
  *         cdef PetscMatType cval = NULL
  *         CHKERR( MatGetType(self.mat, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -114902,13 +116471,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_94getType(struct PyPetscMatObjec
  *     def getSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 549, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":535
+  /* "PETSc/Mat.pyx":546
  *         CHKERR( MatSetOption(self.mat, option, flag) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -114927,7 +116496,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_94getType(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":540
+/* "PETSc/Mat.pyx":551
  *         return bytes2str(cval)
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -114961,12 +116530,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_96getSize(struct PyPetscMatObjec
   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("getSize", 0);
 
-  /* "PETSc/Mat.pyx":541
+  /* "PETSc/Mat.pyx":552
  * 
  *     def getSize(self):
  *         cdef PetscInt M = 0, N = 0             # <<<<<<<<<<<<<<
@@ -114976,16 +116542,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_96getSize(struct PyPetscMatObjec
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Mat.pyx":542
+  /* "PETSc/Mat.pyx":553
  *     def getSize(self):
  *         cdef PetscInt M = 0, N = 0
  *         CHKERR( MatGetSize(self.mat, &M, &N) )             # <<<<<<<<<<<<<<
  *         return (toInt(M), toInt(N))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, (&__pyx_v_M), (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, (&__pyx_v_M), (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 553, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":543
+  /* "PETSc/Mat.pyx":554
  *         cdef PetscInt M = 0, N = 0
  *         CHKERR( MatGetSize(self.mat, &M, &N) )
  *         return (toInt(M), toInt(N))             # <<<<<<<<<<<<<<
@@ -114993,11 +116559,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_96getSize(struct PyPetscMatObjec
  *     def getLocalSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -115009,7 +116575,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_96getSize(struct PyPetscMatObjec
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":540
+  /* "PETSc/Mat.pyx":551
  *         return bytes2str(cval)
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -115030,7 +116596,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_96getSize(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":545
+/* "PETSc/Mat.pyx":556
  *         return (toInt(M), toInt(N))
  * 
  *     def getLocalSize(self):             # <<<<<<<<<<<<<<
@@ -115064,12 +116630,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_98getLocalSize(struct PyPetscMat
   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("getLocalSize", 0);
 
-  /* "PETSc/Mat.pyx":546
+  /* "PETSc/Mat.pyx":557
  * 
  *     def getLocalSize(self):
  *         cdef PetscInt m = 0, n = 0             # <<<<<<<<<<<<<<
@@ -115079,16 +116642,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_98getLocalSize(struct PyPetscMat
   __pyx_v_m = 0;
   __pyx_v_n = 0;
 
-  /* "PETSc/Mat.pyx":547
+  /* "PETSc/Mat.pyx":558
  *     def getLocalSize(self):
  *         cdef PetscInt m = 0, n = 0
  *         CHKERR( MatGetLocalSize(self.mat, &m, &n) )             # <<<<<<<<<<<<<<
  *         return (toInt(m), toInt(n))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_self->mat, (&__pyx_v_m), (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_self->mat, (&__pyx_v_m), (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 558, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":548
+  /* "PETSc/Mat.pyx":559
  *         cdef PetscInt m = 0, n = 0
  *         CHKERR( MatGetLocalSize(self.mat, &m, &n) )
  *         return (toInt(m), toInt(n))             # <<<<<<<<<<<<<<
@@ -115096,11 +116659,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_98getLocalSize(struct PyPetscMat
  *     def getSizes(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -115112,7 +116675,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_98getLocalSize(struct PyPetscMat
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":545
+  /* "PETSc/Mat.pyx":556
  *         return (toInt(M), toInt(N))
  * 
  *     def getLocalSize(self):             # <<<<<<<<<<<<<<
@@ -115133,7 +116696,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_98getLocalSize(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":550
+/* "PETSc/Mat.pyx":561
  *         return (toInt(m), toInt(n))
  * 
  *     def getSizes(self):             # <<<<<<<<<<<<<<
@@ -115170,12 +116733,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
   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("getSizes", 0);
 
-  /* "PETSc/Mat.pyx":551
+  /* "PETSc/Mat.pyx":562
  * 
  *     def getSizes(self):
  *         cdef PetscInt m = 0, n = 0             # <<<<<<<<<<<<<<
@@ -115185,7 +116745,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
   __pyx_v_m = 0;
   __pyx_v_n = 0;
 
-  /* "PETSc/Mat.pyx":552
+  /* "PETSc/Mat.pyx":563
  *     def getSizes(self):
  *         cdef PetscInt m = 0, n = 0
  *         cdef PetscInt M = 0, N = 0             # <<<<<<<<<<<<<<
@@ -115195,25 +116755,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Mat.pyx":553
+  /* "PETSc/Mat.pyx":564
  *         cdef PetscInt m = 0, n = 0
  *         cdef PetscInt M = 0, N = 0
  *         CHKERR( MatGetLocalSize(self.mat, &m, &n) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetSize(self.mat, &M, &N) )
  *         return ((toInt(m), toInt(M)), (toInt(n), toInt(N)))
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_self->mat, (&__pyx_v_m), (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_self->mat, (&__pyx_v_m), (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 564, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":554
+  /* "PETSc/Mat.pyx":565
  *         cdef PetscInt M = 0, N = 0
  *         CHKERR( MatGetLocalSize(self.mat, &m, &n) )
  *         CHKERR( MatGetSize(self.mat, &M, &N) )             # <<<<<<<<<<<<<<
  *         return ((toInt(m), toInt(M)), (toInt(n), toInt(N)))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, (&__pyx_v_M), (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, (&__pyx_v_M), (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 565, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":555
+  /* "PETSc/Mat.pyx":566
  *         CHKERR( MatGetLocalSize(self.mat, &m, &n) )
  *         CHKERR( MatGetSize(self.mat, &M, &N) )
  *         return ((toInt(m), toInt(M)), (toInt(n), toInt(N)))             # <<<<<<<<<<<<<<
@@ -115221,11 +116781,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
  *     def getBlockSize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 566, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 566, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 566, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -115233,11 +116793,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 566, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 566, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 566, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -115245,7 +116805,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
   __pyx_t_3 = 0;
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 566, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
@@ -115257,7 +116817,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":550
+  /* "PETSc/Mat.pyx":561
  *         return (toInt(m), toInt(n))
  * 
  *     def getSizes(self):             # <<<<<<<<<<<<<<
@@ -115279,7 +116839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":557
+/* "PETSc/Mat.pyx":568
  *         return ((toInt(m), toInt(M)), (toInt(n), toInt(N)))
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -115310,12 +116870,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_102getBlockSize(struct PyPetscMa
   __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("getBlockSize", 0);
 
-  /* "PETSc/Mat.pyx":558
+  /* "PETSc/Mat.pyx":569
  * 
  *     def getBlockSize(self):
  *         cdef PetscInt bs = 0             # <<<<<<<<<<<<<<
@@ -115324,16 +116881,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_102getBlockSize(struct PyPetscMa
  */
   __pyx_v_bs = 0;
 
-  /* "PETSc/Mat.pyx":559
+  /* "PETSc/Mat.pyx":570
  *     def getBlockSize(self):
  *         cdef PetscInt bs = 0
  *         CHKERR( MatGetBlockSize(self.mat, &bs) )             # <<<<<<<<<<<<<<
  *         return toInt(bs)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_self->mat, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_self->mat, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 570, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":560
+  /* "PETSc/Mat.pyx":571
  *         cdef PetscInt bs = 0
  *         CHKERR( MatGetBlockSize(self.mat, &bs) )
  *         return toInt(bs)             # <<<<<<<<<<<<<<
@@ -115341,13 +116898,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_102getBlockSize(struct PyPetscMa
  *     def getBlockSizes(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 571, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":557
+  /* "PETSc/Mat.pyx":568
  *         return ((toInt(m), toInt(M)), (toInt(n), toInt(N)))
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -115366,7 +116923,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_102getBlockSize(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":562
+/* "PETSc/Mat.pyx":573
  *         return toInt(bs)
  * 
  *     def getBlockSizes(self):             # <<<<<<<<<<<<<<
@@ -115400,12 +116957,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_104getBlockSizes(struct PyPetscM
   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("getBlockSizes", 0);
 
-  /* "PETSc/Mat.pyx":563
+  /* "PETSc/Mat.pyx":574
  * 
  *     def getBlockSizes(self):
  *         cdef PetscInt rbs = 0, cbs = 0             # <<<<<<<<<<<<<<
@@ -115415,16 +116969,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_104getBlockSizes(struct PyPetscM
   __pyx_v_rbs = 0;
   __pyx_v_cbs = 0;
 
-  /* "PETSc/Mat.pyx":564
+  /* "PETSc/Mat.pyx":575
  *     def getBlockSizes(self):
  *         cdef PetscInt rbs = 0, cbs = 0
  *         CHKERR( MatGetBlockSizes(self.mat, &rbs, &cbs) )             # <<<<<<<<<<<<<<
  *         return (toInt(rbs), toInt(cbs))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_self->mat, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_self->mat, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 575, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":565
+  /* "PETSc/Mat.pyx":576
  *         cdef PetscInt rbs = 0, cbs = 0
  *         CHKERR( MatGetBlockSizes(self.mat, &rbs, &cbs) )
  *         return (toInt(rbs), toInt(cbs))             # <<<<<<<<<<<<<<
@@ -115432,11 +116986,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_104getBlockSizes(struct PyPetscM
  *     def getOwnershipRange(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_rbs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_rbs); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 576, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cbs); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cbs); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 576, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 576, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -115448,7 +117002,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_104getBlockSizes(struct PyPetscM
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":562
+  /* "PETSc/Mat.pyx":573
  *         return toInt(bs)
  * 
  *     def getBlockSizes(self):             # <<<<<<<<<<<<<<
@@ -115469,7 +117023,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_104getBlockSizes(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":567
+/* "PETSc/Mat.pyx":578
  *         return (toInt(rbs), toInt(cbs))
  * 
  *     def getOwnershipRange(self):             # <<<<<<<<<<<<<<
@@ -115503,12 +117057,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_106getOwnershipRange(struct PyPe
   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("getOwnershipRange", 0);
 
-  /* "PETSc/Mat.pyx":568
+  /* "PETSc/Mat.pyx":579
  * 
  *     def getOwnershipRange(self):
  *         cdef PetscInt ival1 = 0, ival2 = 0             # <<<<<<<<<<<<<<
@@ -115518,16 +117069,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_106getOwnershipRange(struct PyPe
   __pyx_v_ival1 = 0;
   __pyx_v_ival2 = 0;
 
-  /* "PETSc/Mat.pyx":569
+  /* "PETSc/Mat.pyx":580
  *     def getOwnershipRange(self):
  *         cdef PetscInt ival1 = 0, ival2 = 0
  *         CHKERR( MatGetOwnershipRange(self.mat, &ival1, &ival2) )             # <<<<<<<<<<<<<<
  *         return (toInt(ival1), toInt(ival2))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRange(__pyx_v_self->mat, (&__pyx_v_ival1), (&__pyx_v_ival2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRange(__pyx_v_self->mat, (&__pyx_v_ival1), (&__pyx_v_ival2))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 580, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":570
+  /* "PETSc/Mat.pyx":581
  *         cdef PetscInt ival1 = 0, ival2 = 0
  *         CHKERR( MatGetOwnershipRange(self.mat, &ival1, &ival2) )
  *         return (toInt(ival1), toInt(ival2))             # <<<<<<<<<<<<<<
@@ -115535,11 +117086,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_106getOwnershipRange(struct PyPe
  *     def getOwnershipRanges(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 581, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 581, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 581, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -115551,7 +117102,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_106getOwnershipRange(struct PyPe
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":567
+  /* "PETSc/Mat.pyx":578
  *         return (toInt(rbs), toInt(cbs))
  * 
  *     def getOwnershipRange(self):             # <<<<<<<<<<<<<<
@@ -115572,7 +117123,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_106getOwnershipRange(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":572
+/* "PETSc/Mat.pyx":583
  *         return (toInt(ival1), toInt(ival2))
  * 
  *     def getOwnershipRanges(self):             # <<<<<<<<<<<<<<
@@ -115605,12 +117156,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
   __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("getOwnershipRanges", 0);
 
-  /* "PETSc/Mat.pyx":573
+  /* "PETSc/Mat.pyx":584
  * 
  *     def getOwnershipRanges(self):
  *         cdef const_PetscInt *rowrng = NULL             # <<<<<<<<<<<<<<
@@ -115619,16 +117167,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
  */
   __pyx_v_rowrng = NULL;
 
-  /* "PETSc/Mat.pyx":574
+  /* "PETSc/Mat.pyx":585
  *     def getOwnershipRanges(self):
  *         cdef const_PetscInt *rowrng = NULL
  *         CHKERR( MatGetOwnershipRanges(self.mat, &rowrng) )             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.mat, &comm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRanges(__pyx_v_self->mat, (&__pyx_v_rowrng))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRanges(__pyx_v_self->mat, (&__pyx_v_rowrng))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 585, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":575
+  /* "PETSc/Mat.pyx":586
  *         cdef const_PetscInt *rowrng = NULL
  *         CHKERR( MatGetOwnershipRanges(self.mat, &rowrng) )
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -115637,16 +117185,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
  */
   __pyx_v_comm = MPI_COMM_NULL;
 
-  /* "PETSc/Mat.pyx":576
+  /* "PETSc/Mat.pyx":587
  *         CHKERR( MatGetOwnershipRanges(self.mat, &rowrng) )
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.mat, &comm) )             # <<<<<<<<<<<<<<
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->mat), (&__pyx_v_comm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->mat), (&__pyx_v_comm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 587, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":577
+  /* "PETSc/Mat.pyx":588
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.mat, &comm) )
  *         cdef int size = -1             # <<<<<<<<<<<<<<
@@ -115655,16 +117203,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
  */
   __pyx_v_size = -1;
 
-  /* "PETSc/Mat.pyx":578
+  /* "PETSc/Mat.pyx":589
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.mat, &comm) )
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
  *         return array_i(size+1, rowrng)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 589, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":579
+  /* "PETSc/Mat.pyx":590
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )
  *         return array_i(size+1, rowrng)             # <<<<<<<<<<<<<<
@@ -115672,13 +117220,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
  *     def getOwnershipRangeColumn(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size + 1), __pyx_v_rowrng)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size + 1), __pyx_v_rowrng)); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":572
+  /* "PETSc/Mat.pyx":583
  *         return (toInt(ival1), toInt(ival2))
  * 
  *     def getOwnershipRanges(self):             # <<<<<<<<<<<<<<
@@ -115697,7 +117245,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":581
+/* "PETSc/Mat.pyx":592
  *         return array_i(size+1, rowrng)
  * 
  *     def getOwnershipRangeColumn(self):             # <<<<<<<<<<<<<<
@@ -115731,12 +117279,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn(struc
   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("getOwnershipRangeColumn", 0);
 
-  /* "PETSc/Mat.pyx":582
+  /* "PETSc/Mat.pyx":593
  * 
  *     def getOwnershipRangeColumn(self):
  *         cdef PetscInt ival1 = 0, ival2 = 0             # <<<<<<<<<<<<<<
@@ -115746,16 +117291,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn(struc
   __pyx_v_ival1 = 0;
   __pyx_v_ival2 = 0;
 
-  /* "PETSc/Mat.pyx":583
+  /* "PETSc/Mat.pyx":594
  *     def getOwnershipRangeColumn(self):
  *         cdef PetscInt ival1 = 0, ival2 = 0
  *         CHKERR( MatGetOwnershipRangeColumn(self.mat, &ival1, &ival2) )             # <<<<<<<<<<<<<<
  *         return (toInt(ival1), toInt(ival2))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRangeColumn(__pyx_v_self->mat, (&__pyx_v_ival1), (&__pyx_v_ival2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRangeColumn(__pyx_v_self->mat, (&__pyx_v_ival1), (&__pyx_v_ival2))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 594, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":584
+  /* "PETSc/Mat.pyx":595
  *         cdef PetscInt ival1 = 0, ival2 = 0
  *         CHKERR( MatGetOwnershipRangeColumn(self.mat, &ival1, &ival2) )
  *         return (toInt(ival1), toInt(ival2))             # <<<<<<<<<<<<<<
@@ -115763,11 +117308,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn(struc
  *     def getOwnershipRangesColumn(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -115779,7 +117324,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn(struc
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":581
+  /* "PETSc/Mat.pyx":592
  *         return array_i(size+1, rowrng)
  * 
  *     def getOwnershipRangeColumn(self):             # <<<<<<<<<<<<<<
@@ -115800,7 +117345,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn(struc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":586
+/* "PETSc/Mat.pyx":597
  *         return (toInt(ival1), toInt(ival2))
  * 
  *     def getOwnershipRangesColumn(self):             # <<<<<<<<<<<<<<
@@ -115833,12 +117378,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
   __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("getOwnershipRangesColumn", 0);
 
-  /* "PETSc/Mat.pyx":587
+  /* "PETSc/Mat.pyx":598
  * 
  *     def getOwnershipRangesColumn(self):
  *         cdef const_PetscInt *colrng = NULL             # <<<<<<<<<<<<<<
@@ -115847,16 +117389,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
  */
   __pyx_v_colrng = NULL;
 
-  /* "PETSc/Mat.pyx":588
+  /* "PETSc/Mat.pyx":599
  *     def getOwnershipRangesColumn(self):
  *         cdef const_PetscInt *colrng = NULL
  *         CHKERR( MatGetOwnershipRangesColumn(self.mat, &colrng) )             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.mat, &comm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRangesColumn(__pyx_v_self->mat, (&__pyx_v_colrng))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRangesColumn(__pyx_v_self->mat, (&__pyx_v_colrng))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 599, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":589
+  /* "PETSc/Mat.pyx":600
  *         cdef const_PetscInt *colrng = NULL
  *         CHKERR( MatGetOwnershipRangesColumn(self.mat, &colrng) )
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -115865,16 +117407,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
  */
   __pyx_v_comm = MPI_COMM_NULL;
 
-  /* "PETSc/Mat.pyx":590
+  /* "PETSc/Mat.pyx":601
  *         CHKERR( MatGetOwnershipRangesColumn(self.mat, &colrng) )
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.mat, &comm) )             # <<<<<<<<<<<<<<
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->mat), (&__pyx_v_comm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->mat), (&__pyx_v_comm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 601, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":591
+  /* "PETSc/Mat.pyx":602
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.mat, &comm) )
  *         cdef int size = -1             # <<<<<<<<<<<<<<
@@ -115883,16 +117425,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
  */
   __pyx_v_size = -1;
 
-  /* "PETSc/Mat.pyx":592
+  /* "PETSc/Mat.pyx":603
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.mat, &comm) )
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
  *         return array_i(size+1, colrng)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 603, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":593
+  /* "PETSc/Mat.pyx":604
  *         cdef int size = -1
  *         CHKERR( MPI_Comm_size(comm, &size) )
  *         return array_i(size+1, colrng)             # <<<<<<<<<<<<<<
@@ -115900,13 +117442,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
  *     def getOwnershipIS(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size + 1), __pyx_v_colrng)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_size + 1), __pyx_v_colrng)); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 604, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":586
+  /* "PETSc/Mat.pyx":597
  *         return (toInt(ival1), toInt(ival2))
  * 
  *     def getOwnershipRangesColumn(self):             # <<<<<<<<<<<<<<
@@ -115925,7 +117467,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":595
+/* "PETSc/Mat.pyx":606
  *         return array_i(size+1, colrng)
  * 
  *     def getOwnershipIS(self):             # <<<<<<<<<<<<<<
@@ -115957,53 +117499,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_114getOwnershipIS(struct PyPetsc
   __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("getOwnershipIS", 0);
 
-  /* "PETSc/Mat.pyx":596
+  /* "PETSc/Mat.pyx":607
  * 
  *     def getOwnershipIS(self):
  *         cdef IS rows = IS()             # <<<<<<<<<<<<<<
  *         cdef IS cols = IS()
  *         CHKERR( MatGetOwnershipIS(self.mat, &rows.iset, &cols.iset) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 607, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rows = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":597
+  /* "PETSc/Mat.pyx":608
  *     def getOwnershipIS(self):
  *         cdef IS rows = IS()
  *         cdef IS cols = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetOwnershipIS(self.mat, &rows.iset, &cols.iset) )
  *         return (rows, cols)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 608, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_cols = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":598
+  /* "PETSc/Mat.pyx":609
  *         cdef IS rows = IS()
  *         cdef IS cols = IS()
  *         CHKERR( MatGetOwnershipIS(self.mat, &rows.iset, &cols.iset) )             # <<<<<<<<<<<<<<
  *         return (rows, cols)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipIS(__pyx_v_self->mat, (&__pyx_v_rows->iset), (&__pyx_v_cols->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipIS(__pyx_v_self->mat, (&__pyx_v_rows->iset), (&__pyx_v_cols->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 609, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":599
+  /* "PETSc/Mat.pyx":610
  *         cdef IS cols = IS()
  *         CHKERR( MatGetOwnershipIS(self.mat, &rows.iset, &cols.iset) )
  *         return (rows, cols)             # <<<<<<<<<<<<<<
  * 
- *     def duplicate(self, copy=False):
+ *     def getInfo(self, info=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 610, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_rows));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_rows));
@@ -116015,7 +117554,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_114getOwnershipIS(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":595
+  /* "PETSc/Mat.pyx":606
  *         return array_i(size+1, colrng)
  * 
  *     def getOwnershipIS(self):             # <<<<<<<<<<<<<<
@@ -116036,22 +117575,144 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_114getOwnershipIS(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":601
+/* "PETSc/Mat.pyx":612
+ *         return (rows, cols)
+ * 
+ *     def getInfo(self, info=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMatInfoType itype = infotype(info)
+ *         cdef PetscMatInfo cinfo
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_117getInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_116getInfo[] = "Mat.getInfo(self, info=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_117getInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_info = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getInfo (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,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_info);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getInfo") < 0)) __PYX_ERR(33, 612, __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_info = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getInfo", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 612, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_116getInfo(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_info);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116getInfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_info) {
+  MatInfoType __pyx_v_itype;
+  MatInfo __pyx_v_cinfo;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  MatInfoType __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getInfo", 0);
+
+  /* "PETSc/Mat.pyx":613
+ * 
+ *     def getInfo(self, info=None):
+ *         cdef PetscMatInfoType itype = infotype(info)             # <<<<<<<<<<<<<<
+ *         cdef PetscMatInfo cinfo
+ *         CHKERR( MatGetInfo(self.mat, itype, &cinfo) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_infotype(__pyx_v_info); if (unlikely(__pyx_t_1 == ((MatInfoType)-1L))) __PYX_ERR(33, 613, __pyx_L1_error)
+  __pyx_v_itype = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":615
+ *         cdef PetscMatInfoType itype = infotype(info)
+ *         cdef PetscMatInfo cinfo
+ *         CHKERR( MatGetInfo(self.mat, itype, &cinfo) )             # <<<<<<<<<<<<<<
+ *         return cinfo
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetInfo(__pyx_v_self->mat, __pyx_v_itype, (&__pyx_v_cinfo))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 615, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":616
+ *         cdef PetscMatInfo cinfo
+ *         CHKERR( MatGetInfo(self.mat, itype, &cinfo) )
+ *         return cinfo             # <<<<<<<<<<<<<<
+ * 
+ *     def duplicate(self, copy=False):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_convert__to_py_MatInfo(__pyx_v_cinfo); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 616, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":612
  *         return (rows, cols)
  * 
+ *     def getInfo(self, info=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMatInfoType itype = infotype(info)
+ *         cdef PetscMatInfo cinfo
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":618
+ *         return cinfo
+ * 
  *     def duplicate(self, copy=False):             # <<<<<<<<<<<<<<
  *         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES
  *         if copy: flag = MAT_COPY_VALUES
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_117duplicate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_116duplicate[] = "Mat.duplicate(self, copy=False)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_117duplicate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119duplicate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_118duplicate[] = "Mat.duplicate(self, copy=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119duplicate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_copy = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("duplicate (wrapper)", 0);
@@ -116076,7 +117737,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_117duplicate(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "duplicate") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "duplicate") < 0)) __PYX_ERR(33, 618, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -116089,20 +117750,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_117duplicate(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("duplicate", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("duplicate", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 618, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.duplicate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_copy);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_118duplicate(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_copy);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_copy) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118duplicate(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_copy) {
   MatDuplicateOption __pyx_v_flag;
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PyObject *__pyx_r = NULL;
@@ -116112,12 +117773,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(struct PyPetscMatOb
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("duplicate", 0);
 
-  /* "PETSc/Mat.pyx":602
+  /* "PETSc/Mat.pyx":619
  * 
  *     def duplicate(self, copy=False):
  *         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -116126,21 +117784,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(struct PyPetscMatOb
  */
   __pyx_v_flag = MAT_DO_NOT_COPY_VALUES;
 
-  /* "PETSc/Mat.pyx":603
+  /* "PETSc/Mat.pyx":620
  *     def duplicate(self, copy=False):
  *         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES
  *         if copy: flag = MAT_COPY_VALUES             # <<<<<<<<<<<<<<
  *         cdef Mat mat = type(self)()
  *         CHKERR( MatDuplicate(self.mat, flag, &mat.mat) )
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_copy); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_copy); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(33, 620, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_flag = MAT_COPY_VALUES;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":604
+  /* "PETSc/Mat.pyx":621
  *         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES
  *         if copy: flag = MAT_COPY_VALUES
  *         cdef Mat mat = type(self)()             # <<<<<<<<<<<<<<
@@ -116159,27 +117815,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(struct PyPetscMatOb
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 621, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 621, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 621, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":605
+  /* "PETSc/Mat.pyx":622
  *         if copy: flag = MAT_COPY_VALUES
  *         cdef Mat mat = type(self)()
  *         CHKERR( MatDuplicate(self.mat, flag, &mat.mat) )             # <<<<<<<<<<<<<<
  *         return mat
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, __pyx_v_flag, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, __pyx_v_flag, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 622, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":606
+  /* "PETSc/Mat.pyx":623
  *         cdef Mat mat = type(self)()
  *         CHKERR( MatDuplicate(self.mat, flag, &mat.mat) )
  *         return mat             # <<<<<<<<<<<<<<
@@ -116191,8 +117847,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(struct PyPetscMatOb
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":601
- *         return (rows, cols)
+  /* "PETSc/Mat.pyx":618
+ *         return cinfo
  * 
  *     def duplicate(self, copy=False):             # <<<<<<<<<<<<<<
  *         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES
@@ -116213,7 +117869,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":608
+/* "PETSc/Mat.pyx":625
  *         return mat
  * 
  *     def copy(self, Mat result=None, structure=None):             # <<<<<<<<<<<<<<
@@ -116222,14 +117878,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116duplicate(struct PyPetscMatOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_118copy[] = "Mat.copy(self, Mat result=None, structure=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_120copy[] = "Mat.copy(self, Mat result=None, structure=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_result = 0;
   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("copy (wrapper)", 0);
@@ -116261,7 +117914,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119copy(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) __PYX_ERR(33, 625, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -116276,14 +117929,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119copy(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("copy", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("copy", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 625, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.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_8petsc4py_5PETSc_Mat, 1, "result", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_118copy(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_result, __pyx_v_structure);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 625, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_120copy(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_result, __pyx_v_structure);
 
   /* function exit code */
   goto __pyx_L0;
@@ -116294,7 +117947,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119copy(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_structure) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_structure) {
   MatDuplicateOption __pyx_v_copy;
   MatStructure __pyx_v_mstr;
   PyObject *__pyx_r = NULL;
@@ -116306,13 +117959,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("copy", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":609
+  /* "PETSc/Mat.pyx":626
  * 
  *     def copy(self, Mat result=None, structure=None):
  *         cdef PetscMatDuplicateOption copy = MAT_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -116321,17 +117971,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject
  */
   __pyx_v_copy = MAT_COPY_VALUES;
 
-  /* "PETSc/Mat.pyx":610
+  /* "PETSc/Mat.pyx":627
  *     def copy(self, Mat result=None, structure=None):
  *         cdef PetscMatDuplicateOption copy = MAT_COPY_VALUES
  *         cdef PetscMatStructure mstr = matstructure(structure)             # <<<<<<<<<<<<<<
  *         if result is None:
  *             result = type(self)()
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_1 == ((MatStructure)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_1 == ((MatStructure)-1L))) __PYX_ERR(33, 627, __pyx_L1_error)
   __pyx_v_mstr = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":611
+  /* "PETSc/Mat.pyx":628
  *         cdef PetscMatDuplicateOption copy = MAT_COPY_VALUES
  *         cdef PetscMatStructure mstr = matstructure(structure)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -116342,7 +117992,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":612
+    /* "PETSc/Mat.pyx":629
  *         cdef PetscMatStructure mstr = matstructure(structure)
  *         if result is None:
  *             result = type(self)()             # <<<<<<<<<<<<<<
@@ -116361,21 +118011,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject
       }
     }
     if (__pyx_t_6) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 629, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
-      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 629, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 629, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscMatObject *)__pyx_t_4));
     __pyx_t_4 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":628
+ *         cdef PetscMatDuplicateOption copy = MAT_COPY_VALUES
+ *         cdef PetscMatStructure mstr = matstructure(structure)
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = type(self)()
+ *         if result.mat == NULL:
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":613
+  /* "PETSc/Mat.pyx":630
  *         if result is None:
  *             result = type(self)()
  *         if result.mat == NULL:             # <<<<<<<<<<<<<<
@@ -116385,30 +118041,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject
   __pyx_t_3 = ((__pyx_v_result->mat == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":614
+    /* "PETSc/Mat.pyx":631
  *             result = type(self)()
  *         if result.mat == NULL:
  *             CHKERR( MatDuplicate(self.mat, copy, &result.mat) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( MatCopy(self.mat, result.mat, mstr) )
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, __pyx_v_copy, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, __pyx_v_copy, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(33, 631, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":630
+ *         if result is None:
+ *             result = type(self)()
+ *         if result.mat == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatDuplicate(self.mat, copy, &result.mat) )
+ *         else:
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":616
+  /* "PETSc/Mat.pyx":633
  *             CHKERR( MatDuplicate(self.mat, copy, &result.mat) )
  *         else:
  *             CHKERR( MatCopy(self.mat, result.mat, mstr) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCopy(__pyx_v_self->mat, __pyx_v_result->mat, __pyx_v_mstr)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCopy(__pyx_v_self->mat, __pyx_v_result->mat, __pyx_v_mstr)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(33, 633, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":617
+  /* "PETSc/Mat.pyx":634
  *         else:
  *             CHKERR( MatCopy(self.mat, result.mat, mstr) )
  *         return result             # <<<<<<<<<<<<<<
@@ -116420,7 +118084,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":608
+  /* "PETSc/Mat.pyx":625
  *         return mat
  * 
  *     def copy(self, Mat result=None, structure=None):             # <<<<<<<<<<<<<<
@@ -116442,7 +118106,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":619
+/* "PETSc/Mat.pyx":636
  *         return result
  * 
  *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
@@ -116451,13 +118115,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118copy(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121load(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_120load[] = "Mat.load(self, Viewer viewer)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121load(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123load(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_122load[] = "Mat.load(self, Viewer viewer)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123load(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("load (wrapper)", 0);
@@ -116479,7 +118140,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121load(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, "load") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "load") < 0)) __PYX_ERR(33, 636, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -116490,14 +118151,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121load(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 636, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.load", __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, 0, "viewer", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_120load(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_viewer);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 0, "viewer", 0))) __PYX_ERR(33, 636, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_122load(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -116508,19 +118169,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121load(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120load(struct PyPetscMatObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122load(struct PyPetscMatObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
   MPI_Comm __pyx_v_comm;
   PetscObject __pyx_v_obj;
   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("load", 0);
 
-  /* "PETSc/Mat.pyx":620
+  /* "PETSc/Mat.pyx":637
  * 
  *     def load(self, Viewer viewer not None):
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -116529,7 +118187,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120load(struct PyPetscMatObject
  */
   __pyx_v_comm = MPI_COMM_NULL;
 
-  /* "PETSc/Mat.pyx":621
+  /* "PETSc/Mat.pyx":638
  *     def load(self, Viewer viewer not None):
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)             # <<<<<<<<<<<<<<
@@ -116538,7 +118196,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120load(struct PyPetscMatObject
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_viewer->vwr);
 
-  /* "PETSc/Mat.pyx":622
+  /* "PETSc/Mat.pyx":639
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.mat == NULL:             # <<<<<<<<<<<<<<
@@ -116548,37 +118206,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120load(struct PyPetscMatObject
   __pyx_t_1 = ((__pyx_v_self->mat == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Mat.pyx":623
+    /* "PETSc/Mat.pyx":640
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.mat == NULL:
  *             CHKERR( PetscObjectGetComm(obj, &comm) )             # <<<<<<<<<<<<<<
  *             CHKERR( MatCreate(comm, &self.mat) )
  *         CHKERR( MatLoad(self.mat, viewer.vwr) )
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 640, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":624
+    /* "PETSc/Mat.pyx":641
  *         if self.mat == NULL:
  *             CHKERR( PetscObjectGetComm(obj, &comm) )
  *             CHKERR( MatCreate(comm, &self.mat) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatLoad(self.mat, viewer.vwr) )
  *         return self
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_comm, (&__pyx_v_self->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_comm, (&__pyx_v_self->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 641, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":639
+ *         cdef MPI_Comm comm = MPI_COMM_NULL
+ *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
+ *         if self.mat == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectGetComm(obj, &comm) )
+ *             CHKERR( MatCreate(comm, &self.mat) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":625
+  /* "PETSc/Mat.pyx":642
  *             CHKERR( PetscObjectGetComm(obj, &comm) )
  *             CHKERR( MatCreate(comm, &self.mat) )
  *         CHKERR( MatLoad(self.mat, viewer.vwr) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatLoad(__pyx_v_self->mat, __pyx_v_viewer->vwr)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatLoad(__pyx_v_self->mat, __pyx_v_viewer->vwr)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 642, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":626
+  /* "PETSc/Mat.pyx":643
  *             CHKERR( MatCreate(comm, &self.mat) )
  *         CHKERR( MatLoad(self.mat, viewer.vwr) )
  *         return self             # <<<<<<<<<<<<<<
@@ -116590,7 +118254,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120load(struct PyPetscMatObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":619
+  /* "PETSc/Mat.pyx":636
  *         return result
  * 
  *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
@@ -116608,7 +118272,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120load(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":628
+/* "PETSc/Mat.pyx":645
  *         return self
  * 
  *     def convert(self, mat_type=None, Mat out=None):             # <<<<<<<<<<<<<<
@@ -116617,14 +118281,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120load(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_122convert[] = "Mat.convert(self, mat_type=None, Mat out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_124convert[] = "Mat.convert(self, mat_type=None, Mat out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_mat_type = 0;
   struct PyPetscMatObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("convert (wrapper)", 0);
@@ -116656,7 +118317,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123convert(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convert") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convert") < 0)) __PYX_ERR(33, 645, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -116671,14 +118332,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123convert(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convert", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convert", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 645, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_122convert(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat_type, __pyx_v_out);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 645, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_124convert(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat_type, __pyx_v_out);
 
   /* function exit code */
   goto __pyx_L0;
@@ -116689,7 +118350,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123convert(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mat_type, struct PyPetscMatObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_mat_type, struct PyPetscMatObject *__pyx_v_out) {
   const char* __pyx_v_mtype;
   MatReuse __pyx_v_reuse;
   PyObject *__pyx_r = NULL;
@@ -116698,14 +118359,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
   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("convert", 0);
   __Pyx_INCREF(__pyx_v_mat_type);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":629
+  /* "PETSc/Mat.pyx":646
  * 
  *     def convert(self, mat_type=None, Mat out=None):
  *         cdef PetscMatType mtype = MATSAME             # <<<<<<<<<<<<<<
@@ -116714,7 +118372,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
  */
   __pyx_v_mtype = MATSAME;
 
-  /* "PETSc/Mat.pyx":630
+  /* "PETSc/Mat.pyx":647
  *     def convert(self, mat_type=None, Mat out=None):
  *         cdef PetscMatType mtype = MATSAME
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -116723,19 +118381,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":631
+  /* "PETSc/Mat.pyx":648
  *         cdef PetscMatType mtype = MATSAME
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         mat_type = str2bytes(mat_type, &mtype)             # <<<<<<<<<<<<<<
  *         if mtype == NULL: mtype = MATSAME
  *         if out is None: out = self
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mat_type, (&__pyx_v_mtype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mat_type, (&__pyx_v_mtype)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 648, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_mat_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":632
+  /* "PETSc/Mat.pyx":649
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         mat_type = str2bytes(mat_type, &mtype)
  *         if mtype == NULL: mtype = MATSAME             # <<<<<<<<<<<<<<
@@ -116745,11 +118403,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
   __pyx_t_2 = ((__pyx_v_mtype == NULL) != 0);
   if (__pyx_t_2) {
     __pyx_v_mtype = MATSAME;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":633
+  /* "PETSc/Mat.pyx":650
  *         mat_type = str2bytes(mat_type, &mtype)
  *         if mtype == NULL: mtype = MATSAME
  *         if out is None: out = self             # <<<<<<<<<<<<<<
@@ -116761,11 +118417,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
   if (__pyx_t_3) {
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":634
+  /* "PETSc/Mat.pyx":651
  *         if mtype == NULL: mtype = MATSAME
  *         if out is None: out = self
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -116775,20 +118429,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
   __pyx_t_3 = ((__pyx_v_out->mat != NULL) != 0);
   if (__pyx_t_3) {
     __pyx_v_reuse = MAT_REUSE_MATRIX;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":635
+  /* "PETSc/Mat.pyx":652
  *         if out is None: out = self
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
  *         CHKERR( MatConvert(self.mat, mtype, reuse, &out.mat) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatConvert(__pyx_v_self->mat, __pyx_v_mtype, __pyx_v_reuse, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatConvert(__pyx_v_self->mat, __pyx_v_mtype, __pyx_v_reuse, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 652, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":636
+  /* "PETSc/Mat.pyx":653
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
  *         CHKERR( MatConvert(self.mat, mtype, reuse, &out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -116800,7 +118452,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":628
+  /* "PETSc/Mat.pyx":645
  *         return self
  * 
  *     def convert(self, mat_type=None, Mat out=None):             # <<<<<<<<<<<<<<
@@ -116821,7 +118473,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":638
+/* "PETSc/Mat.pyx":655
  *         return out
  * 
  *     def transpose(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -116830,13 +118482,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122convert(struct PyPetscMatObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125transpose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_124transpose[] = "Mat.transpose(self, Mat out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125transpose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127transpose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_126transpose[] = "Mat.transpose(self, Mat out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127transpose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("transpose (wrapper)", 0);
@@ -116861,7 +118510,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125transpose(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transpose") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transpose") < 0)) __PYX_ERR(33, 655, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -116874,14 +118523,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125transpose(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("transpose", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("transpose", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 655, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.transpose", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 655, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
 
   /* function exit code */
   goto __pyx_L0;
@@ -116892,20 +118541,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125transpose(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out) {
   MatReuse __pyx_v_reuse;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("transpose", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":639
+  /* "PETSc/Mat.pyx":656
  * 
  *     def transpose(self, Mat out=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -116914,7 +118560,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(struct PyPetscMatOb
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":640
+  /* "PETSc/Mat.pyx":657
  *     def transpose(self, Mat out=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         if out is None: out = self             # <<<<<<<<<<<<<<
@@ -116926,11 +118572,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(struct PyPetscMatOb
   if (__pyx_t_2) {
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":641
+  /* "PETSc/Mat.pyx":658
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         if out is None: out = self
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -116940,20 +118584,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(struct PyPetscMatOb
   __pyx_t_2 = ((__pyx_v_out->mat != NULL) != 0);
   if (__pyx_t_2) {
     __pyx_v_reuse = MAT_REUSE_MATRIX;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":642
+  /* "PETSc/Mat.pyx":659
  *         if out is None: out = self
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
  *         CHKERR( MatTranspose(self.mat, reuse, &out.mat) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatTranspose(__pyx_v_self->mat, __pyx_v_reuse, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatTranspose(__pyx_v_self->mat, __pyx_v_reuse, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 659, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":643
+  /* "PETSc/Mat.pyx":660
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
  *         CHKERR( MatTranspose(self.mat, reuse, &out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -116965,7 +118607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(struct PyPetscMatOb
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":638
+  /* "PETSc/Mat.pyx":655
  *         return out
  * 
  *     def transpose(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -116984,7 +118626,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":645
+/* "PETSc/Mat.pyx":662
  *         return out
  * 
  *     def realPart(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -116993,13 +118635,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124transpose(struct PyPetscMatOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127realPart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_126realPart[] = "Mat.realPart(self, Mat out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127realPart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129realPart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_128realPart[] = "Mat.realPart(self, Mat out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129realPart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("realPart (wrapper)", 0);
@@ -117024,7 +118663,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127realPart(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "realPart") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "realPart") < 0)) __PYX_ERR(33, 662, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -117037,14 +118676,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127realPart(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("realPart", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("realPart", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 662, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.realPart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 662, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
 
   /* function exit code */
   goto __pyx_L0;
@@ -117055,19 +118694,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127realPart(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("realPart", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":646
+  /* "PETSc/Mat.pyx":663
  * 
  *     def realPart(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -117078,7 +118714,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(struct PyPetscMatObj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":647
+    /* "PETSc/Mat.pyx":664
  *     def realPart(self, Mat out=None):
  *         if out is None:
  *             out = self             # <<<<<<<<<<<<<<
@@ -117087,10 +118723,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(struct PyPetscMatObj
  */
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
+
+    /* "PETSc/Mat.pyx":663
+ * 
+ *     def realPart(self, Mat out=None):
+ *         if out is None:             # <<<<<<<<<<<<<<
+ *             out = self
+ *         elif out.mat == NULL:
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":648
+  /* "PETSc/Mat.pyx":665
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -117100,28 +118744,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(struct PyPetscMatObj
   __pyx_t_2 = ((__pyx_v_out->mat == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":649
+    /* "PETSc/Mat.pyx":666
  *             out = self
  *         elif out.mat == NULL:
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatRealPart(out.mat) )
  *         return out
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, MAT_COPY_VALUES, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, MAT_COPY_VALUES, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 666, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":665
+ *         if out is None:
+ *             out = self
+ *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
+ *         CHKERR( MatRealPart(out.mat) )
+ */
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":650
+  /* "PETSc/Mat.pyx":667
  *         elif out.mat == NULL:
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatRealPart(out.mat) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRealPart(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRealPart(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 667, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":651
+  /* "PETSc/Mat.pyx":668
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatRealPart(out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -117133,7 +118784,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(struct PyPetscMatObj
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":645
+  /* "PETSc/Mat.pyx":662
  *         return out
  * 
  *     def realPart(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -117152,7 +118803,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":653
+/* "PETSc/Mat.pyx":670
  *         return out
  * 
  *     def imagPart(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -117161,13 +118812,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126realPart(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129imagPart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_128imagPart[] = "Mat.imagPart(self, Mat out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129imagPart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131imagPart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_130imagPart[] = "Mat.imagPart(self, Mat out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131imagPart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("imagPart (wrapper)", 0);
@@ -117192,7 +118840,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129imagPart(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "imagPart") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "imagPart") < 0)) __PYX_ERR(33, 670, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -117205,14 +118853,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129imagPart(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("imagPart", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("imagPart", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 670, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.imagPart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 670, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
 
   /* function exit code */
   goto __pyx_L0;
@@ -117223,19 +118871,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129imagPart(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("imagPart", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":654
+  /* "PETSc/Mat.pyx":671
  * 
  *     def imagPart(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -117246,7 +118891,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(struct PyPetscMatObj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":655
+    /* "PETSc/Mat.pyx":672
  *     def imagPart(self, Mat out=None):
  *         if out is None:
  *             out = self             # <<<<<<<<<<<<<<
@@ -117255,10 +118900,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(struct PyPetscMatObj
  */
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
+
+    /* "PETSc/Mat.pyx":671
+ * 
+ *     def imagPart(self, Mat out=None):
+ *         if out is None:             # <<<<<<<<<<<<<<
+ *             out = self
+ *         elif out.mat == NULL:
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":656
+  /* "PETSc/Mat.pyx":673
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -117268,28 +118921,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(struct PyPetscMatObj
   __pyx_t_2 = ((__pyx_v_out->mat == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":657
+    /* "PETSc/Mat.pyx":674
  *             out = self
  *         elif out.mat == NULL:
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatImaginaryPart(out.mat) )
  *         return out
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, MAT_COPY_VALUES, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, MAT_COPY_VALUES, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 674, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":673
+ *         if out is None:
+ *             out = self
+ *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
+ *         CHKERR( MatImaginaryPart(out.mat) )
+ */
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":658
+  /* "PETSc/Mat.pyx":675
  *         elif out.mat == NULL:
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatImaginaryPart(out.mat) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatImaginaryPart(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatImaginaryPart(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 675, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":659
+  /* "PETSc/Mat.pyx":676
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatImaginaryPart(out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -117301,7 +118961,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(struct PyPetscMatObj
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":653
+  /* "PETSc/Mat.pyx":670
  *         return out
  * 
  *     def imagPart(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -117320,7 +118980,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":661
+/* "PETSc/Mat.pyx":678
  *         return out
  * 
  *     def conjugate(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -117329,13 +118989,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128imagPart(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131conjugate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_130conjugate[] = "Mat.conjugate(self, Mat out=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131conjugate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133conjugate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_132conjugate[] = "Mat.conjugate(self, Mat out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133conjugate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_out = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("conjugate (wrapper)", 0);
@@ -117360,7 +119017,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131conjugate(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "conjugate") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "conjugate") < 0)) __PYX_ERR(33, 678, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -117373,14 +119030,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131conjugate(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("conjugate", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("conjugate", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 678, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.conjugate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 678, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
 
   /* function exit code */
   goto __pyx_L0;
@@ -117391,19 +119048,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131conjugate(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_out) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("conjugate", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":662
+  /* "PETSc/Mat.pyx":679
  * 
  *     def conjugate(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -117414,7 +119068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(struct PyPetscMatOb
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":663
+    /* "PETSc/Mat.pyx":680
  *     def conjugate(self, Mat out=None):
  *         if out is None:
  *             out = self             # <<<<<<<<<<<<<<
@@ -117423,10 +119077,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(struct PyPetscMatOb
  */
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
+
+    /* "PETSc/Mat.pyx":679
+ * 
+ *     def conjugate(self, Mat out=None):
+ *         if out is None:             # <<<<<<<<<<<<<<
+ *             out = self
+ *         elif out.mat == NULL:
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":664
+  /* "PETSc/Mat.pyx":681
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -117436,28 +119098,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(struct PyPetscMatOb
   __pyx_t_2 = ((__pyx_v_out->mat == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":665
+    /* "PETSc/Mat.pyx":682
  *             out = self
  *         elif out.mat == NULL:
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatConjugate(out.mat) )
  *         return out
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, MAT_COPY_VALUES, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDuplicate(__pyx_v_self->mat, MAT_COPY_VALUES, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 682, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":681
+ *         if out is None:
+ *             out = self
+ *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
+ *         CHKERR( MatConjugate(out.mat) )
+ */
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":666
+  /* "PETSc/Mat.pyx":683
  *         elif out.mat == NULL:
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatConjugate(out.mat) )             # <<<<<<<<<<<<<<
  *         return out
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatConjugate(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatConjugate(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 683, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":667
+  /* "PETSc/Mat.pyx":684
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatConjugate(out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -117469,7 +119138,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(struct PyPetscMatOb
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":661
+  /* "PETSc/Mat.pyx":678
  *         return out
  * 
  *     def conjugate(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -117488,7 +119157,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":669
+/* "PETSc/Mat.pyx":686
  *         return out
  * 
  *     def permute(self, IS row not None, IS col not None):             # <<<<<<<<<<<<<<
@@ -117497,14 +119166,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130conjugate(struct PyPetscMatOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_132permute[] = "Mat.permute(self, IS row, IS col)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_134permute[] = "Mat.permute(self, IS row, IS col)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_row = 0;
   struct PyPetscISObject *__pyx_v_col = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("permute (wrapper)", 0);
@@ -117528,11 +119194,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133permute(PyObject *__pyx_v_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_col)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("permute", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("permute", 1, 2, 2, 1); __PYX_ERR(33, 686, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "permute") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "permute") < 0)) __PYX_ERR(33, 686, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -117545,15 +119211,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133permute(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("permute", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("permute", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 686, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.permute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_row), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "row", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_col), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "col", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_132permute(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_row), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "row", 0))) __PYX_ERR(33, 686, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_col), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "col", 0))) __PYX_ERR(33, 686, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_134permute(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col);
 
   /* function exit code */
   goto __pyx_L0;
@@ -117564,39 +119230,36 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133permute(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132permute(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_row, struct PyPetscISObject *__pyx_v_col) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134permute(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_row, struct PyPetscISObject *__pyx_v_col) {
   struct PyPetscMatObject *__pyx_v_mat = 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("permute", 0);
 
-  /* "PETSc/Mat.pyx":670
+  /* "PETSc/Mat.pyx":687
  * 
  *     def permute(self, IS row not None, IS col not None):
  *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( MatPermute(self.mat, row.iset, col.iset, &mat.mat) )
  *         return mat
  */
-  __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[33]; __pyx_lineno = 670; __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(33, 687, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":671
+  /* "PETSc/Mat.pyx":688
  *     def permute(self, IS row not None, IS col not None):
  *         cdef Mat mat = Mat()
  *         CHKERR( MatPermute(self.mat, row.iset, col.iset, &mat.mat) )             # <<<<<<<<<<<<<<
  *         return mat
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPermute(__pyx_v_self->mat, __pyx_v_row->iset, __pyx_v_col->iset, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPermute(__pyx_v_self->mat, __pyx_v_row->iset, __pyx_v_col->iset, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 688, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":672
+  /* "PETSc/Mat.pyx":689
  *         cdef Mat mat = Mat()
  *         CHKERR( MatPermute(self.mat, row.iset, col.iset, &mat.mat) )
  *         return mat             # <<<<<<<<<<<<<<
@@ -117608,7 +119271,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132permute(struct PyPetscMatObje
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":669
+  /* "PETSc/Mat.pyx":686
  *         return out
  * 
  *     def permute(self, IS row not None, IS col not None):             # <<<<<<<<<<<<<<
@@ -117628,7 +119291,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132permute(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":674
+/* "PETSc/Mat.pyx":691
  *         return mat
  * 
  *     def equal(self, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -117637,13 +119300,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132permute(struct PyPetscMatObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_134equal[] = "Mat.equal(self, Mat mat)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_136equal[] = "Mat.equal(self, Mat mat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137equal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("equal (wrapper)", 0);
@@ -117665,7 +119325,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135equal(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, "equal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "equal") < 0)) __PYX_ERR(33, 691, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -117676,14 +119336,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135equal(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("equal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("equal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 691, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.equal", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_134equal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 691, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_136equal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -117694,19 +119354,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135equal(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134equal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136equal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __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("equal", 0);
 
-  /* "PETSc/Mat.pyx":675
+  /* "PETSc/Mat.pyx":692
  * 
  *     def equal(self, Mat mat not None):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -117715,16 +119372,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134equal(struct PyPetscMatObject
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":676
+  /* "PETSc/Mat.pyx":693
  *     def equal(self, Mat mat not None):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatEqual(self.mat, mat.mat, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint> mat
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatEqual(__pyx_v_self->mat, __pyx_v_mat->mat, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatEqual(__pyx_v_self->mat, __pyx_v_mat->mat, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 693, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":677
+  /* "PETSc/Mat.pyx":694
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatEqual(self.mat, mat.mat, &flag) )
  *         return <bint> mat             # <<<<<<<<<<<<<<
@@ -117732,14 +119389,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134equal(struct PyPetscMatObject
  *     def isTranspose(self, Mat mat=None, tol=0):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_mat)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_mat)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 694, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 694, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":674
+  /* "PETSc/Mat.pyx":691
  *         return mat
  * 
  *     def equal(self, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -117758,7 +119415,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134equal(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":679
+/* "PETSc/Mat.pyx":696
  *         return <bint> mat
  * 
  *     def isTranspose(self, Mat mat=None, tol=0):             # <<<<<<<<<<<<<<
@@ -117767,14 +119424,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134equal(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137isTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_136isTranspose[] = "Mat.isTranspose(self, Mat mat=None, tol=0)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137isTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_138isTranspose[] = "Mat.isTranspose(self, Mat mat=None, tol=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PyObject *__pyx_v_tol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isTranspose (wrapper)", 0);
@@ -117806,7 +119460,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137isTranspose(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isTranspose") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isTranspose") < 0)) __PYX_ERR(33, 696, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -117821,14 +119475,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137isTranspose(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("isTranspose", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("isTranspose", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 696, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.isTranspose", __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[33]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_tol);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "mat", 0))) __PYX_ERR(33, 696, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_138isTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_tol);
 
   /* function exit code */
   goto __pyx_L0;
@@ -117839,7 +119493,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137isTranspose(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_tol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_tol) {
   PetscReal __pyx_v_rval;
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
@@ -117849,13 +119503,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(struct PyPetscMat
   PetscReal __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("isTranspose", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_mat);
 
-  /* "PETSc/Mat.pyx":680
+  /* "PETSc/Mat.pyx":697
  * 
  *     def isTranspose(self, Mat mat=None, tol=0):
  *         if mat is None: mat = self             # <<<<<<<<<<<<<<
@@ -117867,21 +119518,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(struct PyPetscMat
   if (__pyx_t_2) {
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_mat, __pyx_v_self);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":681
+  /* "PETSc/Mat.pyx":698
  *     def isTranspose(self, Mat mat=None, tol=0):
  *         if mat is None: mat = self
  *         cdef PetscReal rval = asReal(tol)             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsTranspose(self.mat, mat.mat, rval, &flag) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 698, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_3;
 
-  /* "PETSc/Mat.pyx":682
+  /* "PETSc/Mat.pyx":699
  *         if mat is None: mat = self
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -117890,16 +119539,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(struct PyPetscMat
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":683
+  /* "PETSc/Mat.pyx":700
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsTranspose(self.mat, mat.mat, rval, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint>flag
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsTranspose(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_rval, (&__pyx_v_flag))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsTranspose(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_rval, (&__pyx_v_flag))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 700, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":684
+  /* "PETSc/Mat.pyx":701
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsTranspose(self.mat, mat.mat, rval, &flag) )
  *         return <bint>flag             # <<<<<<<<<<<<<<
@@ -117907,13 +119556,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(struct PyPetscMat
  *     def isSymmetric(self, tol=0):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 701, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":679
+  /* "PETSc/Mat.pyx":696
  *         return <bint> mat
  * 
  *     def isTranspose(self, Mat mat=None, tol=0):             # <<<<<<<<<<<<<<
@@ -117933,7 +119582,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":686
+/* "PETSc/Mat.pyx":703
  *         return <bint>flag
  * 
  *     def isSymmetric(self, tol=0):             # <<<<<<<<<<<<<<
@@ -117942,13 +119591,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136isTranspose(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isSymmetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_138isSymmetric[] = "Mat.isSymmetric(self, tol=0)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isSymmetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_140isSymmetric[] = "Mat.isSymmetric(self, tol=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isSymmetric (wrapper)", 0);
@@ -117973,7 +119619,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isSymmetric(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isSymmetric") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isSymmetric") < 0)) __PYX_ERR(33, 703, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -117986,20 +119632,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isSymmetric(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("isSymmetric", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("isSymmetric", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 703, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.isSymmetric", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_138isSymmetric(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_tol);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetric(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_tol);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isSymmetric(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetric(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol) {
   PetscReal __pyx_v_rval;
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
@@ -118007,22 +119653,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isSymmetric(struct PyPetscMat
   PetscReal __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("isSymmetric", 0);
 
-  /* "PETSc/Mat.pyx":687
+  /* "PETSc/Mat.pyx":704
  * 
  *     def isSymmetric(self, tol=0):
  *         cdef PetscReal rval = asReal(tol)             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsSymmetric(self.mat, rval, &flag) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 704, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":688
+  /* "PETSc/Mat.pyx":705
  *     def isSymmetric(self, tol=0):
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -118031,16 +119674,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isSymmetric(struct PyPetscMat
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":689
+  /* "PETSc/Mat.pyx":706
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsSymmetric(self.mat, rval, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint>flag
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsSymmetric(__pyx_v_self->mat, __pyx_v_rval, (&__pyx_v_flag))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsSymmetric(__pyx_v_self->mat, __pyx_v_rval, (&__pyx_v_flag))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 706, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":690
+  /* "PETSc/Mat.pyx":707
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsSymmetric(self.mat, rval, &flag) )
  *         return <bint>flag             # <<<<<<<<<<<<<<
@@ -118048,13 +119691,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isSymmetric(struct PyPetscMat
  *     def isSymmetricKnown(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 707, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":686
+  /* "PETSc/Mat.pyx":703
  *         return <bint>flag
  * 
  *     def isSymmetric(self, tol=0):             # <<<<<<<<<<<<<<
@@ -118073,7 +119716,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isSymmetric(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":692
+/* "PETSc/Mat.pyx":709
  *         return <bint>flag
  * 
  *     def isSymmetricKnown(self):             # <<<<<<<<<<<<<<
@@ -118082,23 +119725,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isSymmetric(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetricKnown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_140isSymmetricKnown[] = "Mat.isSymmetricKnown(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetricKnown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_143isSymmetricKnown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_142isSymmetricKnown[] = "Mat.isSymmetricKnown(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_143isSymmetricKnown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isSymmetricKnown (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("isSymmetricKnown", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isSymmetricKnown", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_142isSymmetricKnown(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isSymmetricKnown(struct PyPetscMatObject *__pyx_v_self) {
   PetscBool __pyx_v_flag1;
   PetscBool __pyx_v_flag2;
   PyObject *__pyx_r = NULL;
@@ -118107,12 +119750,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPet
   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("isSymmetricKnown", 0);
 
-  /* "PETSc/Mat.pyx":693
+  /* "PETSc/Mat.pyx":710
  * 
  *     def isSymmetricKnown(self):
  *         cdef PetscBool flag1 = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -118121,7 +119761,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPet
  */
   __pyx_v_flag1 = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":694
+  /* "PETSc/Mat.pyx":711
  *     def isSymmetricKnown(self):
  *         cdef PetscBool flag1 = PETSC_FALSE
  *         cdef PetscBool flag2 = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -118130,16 +119770,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPet
  */
   __pyx_v_flag2 = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":695
+  /* "PETSc/Mat.pyx":712
  *         cdef PetscBool flag1 = PETSC_FALSE
  *         cdef PetscBool flag2 = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(self.mat, &flag1, &flag2) )             # <<<<<<<<<<<<<<
  *         return (<bint>flag1, <bint>flag2)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsSymmetricKnown(__pyx_v_self->mat, (&__pyx_v_flag1), (&__pyx_v_flag2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsSymmetricKnown(__pyx_v_self->mat, (&__pyx_v_flag1), (&__pyx_v_flag2))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 712, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":696
+  /* "PETSc/Mat.pyx":713
  *         cdef PetscBool flag2 = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(self.mat, &flag1, &flag2) )
  *         return (<bint>flag1, <bint>flag2)             # <<<<<<<<<<<<<<
@@ -118147,11 +119787,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPet
  *     def isHermitian(self, tol=0):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 713, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyInt_FromLong(__pyx_v_flag2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 713, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 713, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -118163,7 +119803,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPet
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":692
+  /* "PETSc/Mat.pyx":709
  *         return <bint>flag
  * 
  *     def isSymmetricKnown(self):             # <<<<<<<<<<<<<<
@@ -118184,7 +119824,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":698
+/* "PETSc/Mat.pyx":715
  *         return (<bint>flag1, <bint>flag2)
  * 
  *     def isHermitian(self, tol=0):             # <<<<<<<<<<<<<<
@@ -118193,13 +119833,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetricKnown(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_143isHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_142isHermitian[] = "Mat.isHermitian(self, tol=0)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_143isHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_144isHermitian[] = "Mat.isHermitian(self, tol=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isHermitian (wrapper)", 0);
@@ -118224,7 +119861,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_143isHermitian(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isHermitian") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isHermitian") < 0)) __PYX_ERR(33, 715, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -118237,20 +119874,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_143isHermitian(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("isHermitian", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("isHermitian", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 715, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.isHermitian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_142isHermitian(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_tol);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitian(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_tol);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isHermitian(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitian(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol) {
   PetscReal __pyx_v_rval;
   PetscBool __pyx_v_bval;
   PyObject *__pyx_r = NULL;
@@ -118258,22 +119895,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isHermitian(struct PyPetscMat
   PetscReal __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("isHermitian", 0);
 
-  /* "PETSc/Mat.pyx":699
+  /* "PETSc/Mat.pyx":716
  * 
  *     def isHermitian(self, tol=0):
  *         cdef PetscReal rval = asReal(tol)             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval = PETSC_FALSE
  *         CHKERR( MatIsHermitian(self.mat, rval, &bval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 716, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":700
+  /* "PETSc/Mat.pyx":717
  *     def isHermitian(self, tol=0):
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -118282,16 +119916,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isHermitian(struct PyPetscMat
  */
   __pyx_v_bval = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":701
+  /* "PETSc/Mat.pyx":718
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool bval = PETSC_FALSE
  *         CHKERR( MatIsHermitian(self.mat, rval, &bval) )             # <<<<<<<<<<<<<<
  *         return <bint>bval
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsHermitian(__pyx_v_self->mat, __pyx_v_rval, (&__pyx_v_bval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsHermitian(__pyx_v_self->mat, __pyx_v_rval, (&__pyx_v_bval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 718, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":702
+  /* "PETSc/Mat.pyx":719
  *         cdef PetscBool bval = PETSC_FALSE
  *         CHKERR( MatIsHermitian(self.mat, rval, &bval) )
  *         return <bint>bval             # <<<<<<<<<<<<<<
@@ -118299,13 +119933,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isHermitian(struct PyPetscMat
  *     def isHermitianKnown(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyInt_FromLong(__pyx_v_bval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 719, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":698
+  /* "PETSc/Mat.pyx":715
  *         return (<bint>flag1, <bint>flag2)
  * 
  *     def isHermitian(self, tol=0):             # <<<<<<<<<<<<<<
@@ -118324,7 +119958,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isHermitian(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":704
+/* "PETSc/Mat.pyx":721
  *         return <bint>bval
  * 
  *     def isHermitianKnown(self):             # <<<<<<<<<<<<<<
@@ -118333,23 +119967,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isHermitian(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitianKnown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_144isHermitianKnown[] = "Mat.isHermitianKnown(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitianKnown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_147isHermitianKnown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_146isHermitianKnown[] = "Mat.isHermitianKnown(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_147isHermitianKnown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isHermitianKnown (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("isHermitianKnown", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isHermitianKnown", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_146isHermitianKnown(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isHermitianKnown(struct PyPetscMatObject *__pyx_v_self) {
   PetscBool __pyx_v_bval1;
   PetscBool __pyx_v_bval2;
   PyObject *__pyx_r = NULL;
@@ -118358,12 +119992,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPet
   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("isHermitianKnown", 0);
 
-  /* "PETSc/Mat.pyx":705
+  /* "PETSc/Mat.pyx":722
  * 
  *     def isHermitianKnown(self):
  *         cdef PetscBool bval1 = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -118372,7 +120003,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPet
  */
   __pyx_v_bval1 = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":706
+  /* "PETSc/Mat.pyx":723
  *     def isHermitianKnown(self):
  *         cdef PetscBool bval1 = PETSC_FALSE
  *         cdef PetscBool bval2 = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -118381,16 +120012,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPet
  */
   __pyx_v_bval2 = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":707
+  /* "PETSc/Mat.pyx":724
  *         cdef PetscBool bval1 = PETSC_FALSE
  *         cdef PetscBool bval2 = PETSC_FALSE
  *         CHKERR( MatIsHermitianKnown(self.mat, &bval1, &bval2) )             # <<<<<<<<<<<<<<
  *         return (<bint>bval1, <bint>bval2)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsHermitianKnown(__pyx_v_self->mat, (&__pyx_v_bval1), (&__pyx_v_bval2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsHermitianKnown(__pyx_v_self->mat, (&__pyx_v_bval1), (&__pyx_v_bval2))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 724, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":708
+  /* "PETSc/Mat.pyx":725
  *         cdef PetscBool bval2 = PETSC_FALSE
  *         CHKERR( MatIsHermitianKnown(self.mat, &bval1, &bval2) )
  *         return (<bint>bval1, <bint>bval2)             # <<<<<<<<<<<<<<
@@ -118398,11 +120029,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPet
  *     def isStructurallySymmetric(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_bval1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 725, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyInt_FromLong(__pyx_v_bval2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 725, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 725, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -118414,7 +120045,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPet
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":704
+  /* "PETSc/Mat.pyx":721
  *         return <bint>bval
  * 
  *     def isHermitianKnown(self):             # <<<<<<<<<<<<<<
@@ -118435,7 +120066,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":710
+/* "PETSc/Mat.pyx":727
  *         return (<bint>bval1, <bint>bval2)
  * 
  *     def isStructurallySymmetric(self):             # <<<<<<<<<<<<<<
@@ -118444,34 +120075,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitianKnown(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_147isStructurallySymmetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric[] = "Mat.isStructurallySymmetric(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_147isStructurallySymmetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_149isStructurallySymmetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_148isStructurallySymmetric[] = "Mat.isStructurallySymmetric(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_149isStructurallySymmetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isStructurallySymmetric (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("isStructurallySymmetric", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isStructurallySymmetric", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_148isStructurallySymmetric(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_148isStructurallySymmetric(struct PyPetscMatObject *__pyx_v_self) {
   PetscBool __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("isStructurallySymmetric", 0);
 
-  /* "PETSc/Mat.pyx":711
+  /* "PETSc/Mat.pyx":728
  * 
  *     def isStructurallySymmetric(self):
  *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -118480,16 +120108,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric(struc
  */
   __pyx_v_bval = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":712
+  /* "PETSc/Mat.pyx":729
  *     def isStructurallySymmetric(self):
  *         cdef PetscBool bval = PETSC_FALSE
  *         CHKERR( MatIsStructurallySymmetric(self.mat, &bval) )             # <<<<<<<<<<<<<<
  *         return <bint>bval
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsStructurallySymmetric(__pyx_v_self->mat, (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsStructurallySymmetric(__pyx_v_self->mat, (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 729, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":713
+  /* "PETSc/Mat.pyx":730
  *         cdef PetscBool bval = PETSC_FALSE
  *         CHKERR( MatIsStructurallySymmetric(self.mat, &bval) )
  *         return <bint>bval             # <<<<<<<<<<<<<<
@@ -118497,13 +120125,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric(struc
  *     def zeroEntries(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_bval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 730, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":710
+  /* "PETSc/Mat.pyx":727
  *         return (<bint>bval1, <bint>bval2)
  * 
  *     def isStructurallySymmetric(self):             # <<<<<<<<<<<<<<
@@ -118522,7 +120150,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric(struc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":715
+/* "PETSc/Mat.pyx":732
  *         return <bint>bval
  * 
  *     def zeroEntries(self):             # <<<<<<<<<<<<<<
@@ -118531,41 +120159,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_149zeroEntries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_148zeroEntries[] = "Mat.zeroEntries(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_149zeroEntries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_151zeroEntries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_150zeroEntries[] = "Mat.zeroEntries(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_151zeroEntries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("zeroEntries (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("zeroEntries", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "zeroEntries", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_148zeroEntries(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_150zeroEntries(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_148zeroEntries(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150zeroEntries(struct PyPetscMatObject *__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("zeroEntries", 0);
 
-  /* "PETSc/Mat.pyx":716
+  /* "PETSc/Mat.pyx":733
  * 
  *     def zeroEntries(self):
  *         CHKERR( MatZeroEntries(self.mat) )             # <<<<<<<<<<<<<<
  * 
  *     def getValue(self, row, col):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroEntries(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroEntries(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 733, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":715
+  /* "PETSc/Mat.pyx":732
  *         return <bint>bval
  * 
  *     def zeroEntries(self):             # <<<<<<<<<<<<<<
@@ -118585,7 +120210,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_148zeroEntries(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":718
+/* "PETSc/Mat.pyx":735
  *         CHKERR( MatZeroEntries(self.mat) )
  * 
  *     def getValue(self, row, col):             # <<<<<<<<<<<<<<
@@ -118594,14 +120219,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_148zeroEntries(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_151getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_150getValue[] = "Mat.getValue(self, row, col)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_151getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_152getValue[] = "Mat.getValue(self, row, col)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_row = 0;
   PyObject *__pyx_v_col = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getValue (wrapper)", 0);
@@ -118625,11 +120247,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_151getValue(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_col)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("getValue", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("getValue", 1, 2, 2, 1); __PYX_ERR(33, 735, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValue") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValue") < 0)) __PYX_ERR(33, 735, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -118642,20 +120264,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_151getValue(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 735, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_150getValue(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_152getValue(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150getValue(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValue(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscScalar __pyx_v_sval;
@@ -118664,32 +120286,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150getValue(struct PyPetscMatObj
   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("getValue", 0);
 
-  /* "PETSc/Mat.pyx":719
+  /* "PETSc/Mat.pyx":736
  * 
  *     def getValue(self, row, col):
  *         cdef PetscInt    ival1 = asInt(row)             # <<<<<<<<<<<<<<
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 736, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":720
+  /* "PETSc/Mat.pyx":737
  *     def getValue(self, row, col):
  *         cdef PetscInt    ival1 = asInt(row)
  *         cdef PetscInt    ival2 = asInt(col)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval  = 0
  *         CHKERR( MatGetValues(self.mat, 1, &ival1, 1, &ival2, &sval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 737, __pyx_L1_error)
   __pyx_v_ival2 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":721
+  /* "PETSc/Mat.pyx":738
  *         cdef PetscInt    ival1 = asInt(row)
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = 0             # <<<<<<<<<<<<<<
@@ -118698,16 +120317,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150getValue(struct PyPetscMatObj
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Mat.pyx":722
+  /* "PETSc/Mat.pyx":739
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = 0
  *         CHKERR( MatGetValues(self.mat, 1, &ival1, 1, &ival2, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetValues(__pyx_v_self->mat, 1, (&__pyx_v_ival1), 1, (&__pyx_v_ival2), (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetValues(__pyx_v_self->mat, 1, (&__pyx_v_ival1), 1, (&__pyx_v_ival2), (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 739, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":723
+  /* "PETSc/Mat.pyx":740
  *         cdef PetscScalar sval  = 0
  *         CHKERR( MatGetValues(self.mat, 1, &ival1, 1, &ival2, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -118715,13 +120334,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150getValue(struct PyPetscMatObj
  *     def getValues(self, rows, cols, values=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 740, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":718
+  /* "PETSc/Mat.pyx":735
  *         CHKERR( MatZeroEntries(self.mat) )
  * 
  *     def getValue(self, row, col):             # <<<<<<<<<<<<<<
@@ -118740,7 +120359,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150getValue(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":725
+/* "PETSc/Mat.pyx":742
  *         return toScalar(sval)
  * 
  *     def getValues(self, rows, cols, values=None):             # <<<<<<<<<<<<<<
@@ -118749,15 +120368,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150getValue(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_152getValues[] = "Mat.getValues(self, rows, cols, values=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_155getValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_154getValues[] = "Mat.getValues(self, rows, cols, values=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_155getValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rows = 0;
   PyObject *__pyx_v_cols = 0;
   PyObject *__pyx_v_values = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getValues (wrapper)", 0);
@@ -118783,7 +120399,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValues(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("getValues", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("getValues", 0, 2, 3, 1); __PYX_ERR(33, 742, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -118792,7 +120408,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValues(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValues") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValues") < 0)) __PYX_ERR(33, 742, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -118809,29 +120425,26 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValues(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getValues", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getValues", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 742, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getValues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_152getValues(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_154getValues(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValues(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValues(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values) {
   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("getValues", 0);
 
-  /* "PETSc/Mat.pyx":726
+  /* "PETSc/Mat.pyx":743
  * 
  *     def getValues(self, rows, cols, values=None):
  *         return matgetvalues(self.mat, rows, cols, values)             # <<<<<<<<<<<<<<
@@ -118839,13 +120452,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValues(struct PyPetscMatOb
  *     def getValuesCSR(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matgetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matgetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 743, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":725
+  /* "PETSc/Mat.pyx":742
  *         return toScalar(sval)
  * 
  *     def getValues(self, rows, cols, values=None):             # <<<<<<<<<<<<<<
@@ -118864,7 +120477,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValues(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":728
+/* "PETSc/Mat.pyx":745
  *         return matgetvalues(self.mat, rows, cols, values)
  * 
  *     def getValuesCSR(self):             # <<<<<<<<<<<<<<
@@ -118873,23 +120486,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValues(struct PyPetscMatOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_155getValuesCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_154getValuesCSR[] = "Mat.getValuesCSR(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_155getValuesCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_157getValuesCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_156getValuesCSR[] = "Mat.getValuesCSR(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_157getValuesCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getValuesCSR (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getValuesCSR", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getValuesCSR", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMatObject *__pyx_v_self) {
   PetscInt __pyx_v_rstart;
   PetscInt __pyx_v_rend;
   PetscInt __pyx_v_nrows;
@@ -118909,12 +120522,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PetscInt __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getValuesCSR", 0);
 
-  /* "PETSc/Mat.pyx":730
+  /* "PETSc/Mat.pyx":747
  *     def getValuesCSR(self):
  *         # row ownership
  *         cdef PetscInt rstart=0, rend=0, nrows=0             # <<<<<<<<<<<<<<
@@ -118925,16 +120535,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
   __pyx_v_rend = 0;
   __pyx_v_nrows = 0;
 
-  /* "PETSc/Mat.pyx":731
+  /* "PETSc/Mat.pyx":748
  *         # row ownership
  *         cdef PetscInt rstart=0, rend=0, nrows=0
  *         CHKERR( MatGetOwnershipRange(self.mat, &rstart, &rend) )             # <<<<<<<<<<<<<<
  *         nrows = rend - rstart
  *         # first pass: row pointer array
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRange(__pyx_v_self->mat, (&__pyx_v_rstart), (&__pyx_v_rend))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRange(__pyx_v_self->mat, (&__pyx_v_rstart), (&__pyx_v_rend))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 748, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":732
+  /* "PETSc/Mat.pyx":749
  *         cdef PetscInt rstart=0, rend=0, nrows=0
  *         CHKERR( MatGetOwnershipRange(self.mat, &rstart, &rend) )
  *         nrows = rend - rstart             # <<<<<<<<<<<<<<
@@ -118943,7 +120553,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
   __pyx_v_nrows = (__pyx_v_rend - __pyx_v_rstart);
 
-  /* "PETSc/Mat.pyx":734
+  /* "PETSc/Mat.pyx":751
  *         nrows = rend - rstart
  *         # first pass: row pointer array
  *         cdef PetscInt *AI = NULL             # <<<<<<<<<<<<<<
@@ -118952,22 +120562,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
   __pyx_v_AI = NULL;
 
-  /* "PETSc/Mat.pyx":735
+  /* "PETSc/Mat.pyx":752
  *         # first pass: row pointer array
  *         cdef PetscInt *AI = NULL
  *         cdef ndarray ai = oarray_i(empty_i(nrows+1), NULL, &AI)             # <<<<<<<<<<<<<<
  *         cdef PetscInt irow=0, ncols=0
  *         AI[0] = 0
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i((__pyx_v_nrows + 1))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i((__pyx_v_nrows + 1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 752, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_2, NULL, (&__pyx_v_AI))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_2, NULL, (&__pyx_v_AI))); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 752, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_ai = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":736
+  /* "PETSc/Mat.pyx":753
  *         cdef PetscInt *AI = NULL
  *         cdef ndarray ai = oarray_i(empty_i(nrows+1), NULL, &AI)
  *         cdef PetscInt irow=0, ncols=0             # <<<<<<<<<<<<<<
@@ -118977,7 +120587,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
   __pyx_v_irow = 0;
   __pyx_v_ncols = 0;
 
-  /* "PETSc/Mat.pyx":737
+  /* "PETSc/Mat.pyx":754
  *         cdef ndarray ai = oarray_i(empty_i(nrows+1), NULL, &AI)
  *         cdef PetscInt irow=0, ncols=0
  *         AI[0] = 0             # <<<<<<<<<<<<<<
@@ -118986,7 +120596,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
   (__pyx_v_AI[0]) = 0;
 
-  /* "PETSc/Mat.pyx":738
+  /* "PETSc/Mat.pyx":755
  *         cdef PetscInt irow=0, ncols=0
  *         AI[0] = 0
  *         for irow from 0 <= irow < nrows:             # <<<<<<<<<<<<<<
@@ -118996,16 +120606,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
   __pyx_t_4 = __pyx_v_nrows;
   for (__pyx_v_irow = 0; __pyx_v_irow < __pyx_t_4; __pyx_v_irow++) {
 
-    /* "PETSc/Mat.pyx":739
+    /* "PETSc/Mat.pyx":756
  *         AI[0] = 0
  *         for irow from 0 <= irow < nrows:
  *             CHKERR( MatGetRow(self.mat, irow+rstart, &ncols, NULL, NULL) )             # <<<<<<<<<<<<<<
  *             AI[irow+1] = AI[irow] + ncols
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, NULL, NULL) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRow(__pyx_v_self->mat, (__pyx_v_irow + __pyx_v_rstart), (&__pyx_v_ncols), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRow(__pyx_v_self->mat, (__pyx_v_irow + __pyx_v_rstart), (&__pyx_v_ncols), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 756, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":740
+    /* "PETSc/Mat.pyx":757
  *         for irow from 0 <= irow < nrows:
  *             CHKERR( MatGetRow(self.mat, irow+rstart, &ncols, NULL, NULL) )
  *             AI[irow+1] = AI[irow] + ncols             # <<<<<<<<<<<<<<
@@ -119014,17 +120624,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
     (__pyx_v_AI[(__pyx_v_irow + 1)]) = ((__pyx_v_AI[__pyx_v_irow]) + __pyx_v_ncols);
 
-    /* "PETSc/Mat.pyx":741
+    /* "PETSc/Mat.pyx":758
  *             CHKERR( MatGetRow(self.mat, irow+rstart, &ncols, NULL, NULL) )
  *             AI[irow+1] = AI[irow] + ncols
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         # second pass: column indices and values
  *         cdef PetscInt *AJ = NULL
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreRow(__pyx_v_self->mat, (__pyx_v_irow + __pyx_v_rstart), (&__pyx_v_ncols), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreRow(__pyx_v_self->mat, (__pyx_v_irow + __pyx_v_rstart), (&__pyx_v_ncols), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 758, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":743
+  /* "PETSc/Mat.pyx":760
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, NULL, NULL) )
  *         # second pass: column indices and values
  *         cdef PetscInt *AJ = NULL             # <<<<<<<<<<<<<<
@@ -119033,22 +120643,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
   __pyx_v_AJ = NULL;
 
-  /* "PETSc/Mat.pyx":744
+  /* "PETSc/Mat.pyx":761
  *         # second pass: column indices and values
  *         cdef PetscInt *AJ = NULL
  *         cdef ndarray aj = oarray_i(empty_i(AI[nrows]), NULL, &AJ)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar *AV = NULL
  *         cdef ndarray av = oarray_s(empty_s(AI[nrows]), NULL, &AV)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i((__pyx_v_AI[__pyx_v_nrows]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i((__pyx_v_AI[__pyx_v_nrows]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 761, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_3, NULL, (&__pyx_v_AJ))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_3, NULL, (&__pyx_v_AJ))); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 761, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_aj = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":745
+  /* "PETSc/Mat.pyx":762
  *         cdef PetscInt *AJ = NULL
  *         cdef ndarray aj = oarray_i(empty_i(AI[nrows]), NULL, &AJ)
  *         cdef PetscScalar *AV = NULL             # <<<<<<<<<<<<<<
@@ -119057,22 +120667,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
   __pyx_v_AV = NULL;
 
-  /* "PETSc/Mat.pyx":746
+  /* "PETSc/Mat.pyx":763
  *         cdef ndarray aj = oarray_i(empty_i(AI[nrows]), NULL, &AJ)
  *         cdef PetscScalar *AV = NULL
  *         cdef ndarray av = oarray_s(empty_s(AI[nrows]), NULL, &AV)             # <<<<<<<<<<<<<<
  *         cdef const_PetscInt *cols = NULL
  *         cdef const_PetscScalar *vals = NULL
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_s((__pyx_v_AI[__pyx_v_nrows]))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_s((__pyx_v_AI[__pyx_v_nrows]))); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 763, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_t_2, NULL, (&__pyx_v_AV))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_s(__pyx_t_2, NULL, (&__pyx_v_AV))); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 763, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_av = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":747
+  /* "PETSc/Mat.pyx":764
  *         cdef PetscScalar *AV = NULL
  *         cdef ndarray av = oarray_s(empty_s(AI[nrows]), NULL, &AV)
  *         cdef const_PetscInt *cols = NULL             # <<<<<<<<<<<<<<
@@ -119081,7 +120691,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
   __pyx_v_cols = NULL;
 
-  /* "PETSc/Mat.pyx":748
+  /* "PETSc/Mat.pyx":765
  *         cdef ndarray av = oarray_s(empty_s(AI[nrows]), NULL, &AV)
  *         cdef const_PetscInt *cols = NULL
  *         cdef const_PetscScalar *vals = NULL             # <<<<<<<<<<<<<<
@@ -119090,7 +120700,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
   __pyx_v_vals = NULL;
 
-  /* "PETSc/Mat.pyx":749
+  /* "PETSc/Mat.pyx":766
  *         cdef const_PetscInt *cols = NULL
  *         cdef const_PetscScalar *vals = NULL
  *         for irow from 0 <= irow < nrows:             # <<<<<<<<<<<<<<
@@ -119100,44 +120710,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
   __pyx_t_4 = __pyx_v_nrows;
   for (__pyx_v_irow = 0; __pyx_v_irow < __pyx_t_4; __pyx_v_irow++) {
 
-    /* "PETSc/Mat.pyx":750
+    /* "PETSc/Mat.pyx":767
  *         cdef const_PetscScalar *vals = NULL
  *         for irow from 0 <= irow < nrows:
  *             CHKERR( MatGetRow(self.mat, irow+rstart, &ncols, &cols, &vals) )             # <<<<<<<<<<<<<<
  *             CHKERR( PetscMemcpy(AJ+AI[irow], cols, <size_t>ncols*sizeof(PetscInt)) )
  *             CHKERR( PetscMemcpy(AV+AI[irow], vals, <size_t>ncols*sizeof(PetscScalar)) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRow(__pyx_v_self->mat, (__pyx_v_irow + __pyx_v_rstart), (&__pyx_v_ncols), (&__pyx_v_cols), (&__pyx_v_vals))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRow(__pyx_v_self->mat, (__pyx_v_irow + __pyx_v_rstart), (&__pyx_v_ncols), (&__pyx_v_cols), (&__pyx_v_vals))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 767, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":751
+    /* "PETSc/Mat.pyx":768
  *         for irow from 0 <= irow < nrows:
  *             CHKERR( MatGetRow(self.mat, irow+rstart, &ncols, &cols, &vals) )
  *             CHKERR( PetscMemcpy(AJ+AI[irow], cols, <size_t>ncols*sizeof(PetscInt)) )             # <<<<<<<<<<<<<<
  *             CHKERR( PetscMemcpy(AV+AI[irow], vals, <size_t>ncols*sizeof(PetscScalar)) )
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, &cols, &vals) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMemcpy((__pyx_v_AJ + (__pyx_v_AI[__pyx_v_irow])), __pyx_v_cols, (((size_t)__pyx_v_ncols) * (sizeof(PetscInt))))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMemcpy((__pyx_v_AJ + (__pyx_v_AI[__pyx_v_irow])), __pyx_v_cols, (((size_t)__pyx_v_ncols) * (sizeof(PetscInt))))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 768, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":752
+    /* "PETSc/Mat.pyx":769
  *             CHKERR( MatGetRow(self.mat, irow+rstart, &ncols, &cols, &vals) )
  *             CHKERR( PetscMemcpy(AJ+AI[irow], cols, <size_t>ncols*sizeof(PetscInt)) )
  *             CHKERR( PetscMemcpy(AV+AI[irow], vals, <size_t>ncols*sizeof(PetscScalar)) )             # <<<<<<<<<<<<<<
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, &cols, &vals) )
  *         #
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMemcpy((__pyx_v_AV + (__pyx_v_AI[__pyx_v_irow])), __pyx_v_vals, (((size_t)__pyx_v_ncols) * (sizeof(PetscScalar))))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMemcpy((__pyx_v_AV + (__pyx_v_AI[__pyx_v_irow])), __pyx_v_vals, (((size_t)__pyx_v_ncols) * (sizeof(PetscScalar))))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 769, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":753
+    /* "PETSc/Mat.pyx":770
  *             CHKERR( PetscMemcpy(AJ+AI[irow], cols, <size_t>ncols*sizeof(PetscInt)) )
  *             CHKERR( PetscMemcpy(AV+AI[irow], vals, <size_t>ncols*sizeof(PetscScalar)) )
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, &cols, &vals) )             # <<<<<<<<<<<<<<
  *         #
  *         return (ai, aj, av)
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreRow(__pyx_v_self->mat, (__pyx_v_irow + __pyx_v_rstart), (&__pyx_v_ncols), (&__pyx_v_cols), (&__pyx_v_vals))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreRow(__pyx_v_self->mat, (__pyx_v_irow + __pyx_v_rstart), (&__pyx_v_ncols), (&__pyx_v_cols), (&__pyx_v_vals))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 770, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":755
+  /* "PETSc/Mat.pyx":772
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, &cols, &vals) )
  *         #
  *         return (ai, aj, av)             # <<<<<<<<<<<<<<
@@ -119145,7 +120755,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  *     def getRow(self, row):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_ai));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_ai));
@@ -119160,7 +120770,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":728
+  /* "PETSc/Mat.pyx":745
  *         return matgetvalues(self.mat, rows, cols, values)
  * 
  *     def getValuesCSR(self):             # <<<<<<<<<<<<<<
@@ -119183,7 +120793,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":757
+/* "PETSc/Mat.pyx":774
  *         return (ai, aj, av)
  * 
  *     def getRow(self, row):             # <<<<<<<<<<<<<<
@@ -119192,13 +120802,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValuesCSR(struct PyPetscMa
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_157getRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_156getRow[] = "Mat.getRow(self, row)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_157getRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_158getRow[] = "Mat.getRow(self, row)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_row = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRow (wrapper)", 0);
@@ -119220,7 +120827,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_157getRow(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, "getRow") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRow") < 0)) __PYX_ERR(33, 774, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -119231,20 +120838,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_157getRow(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getRow", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getRow", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 774, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row) {
   PetscInt __pyx_v_irow;
   PetscInt __pyx_v_ncols;
   const PetscInt *__pyx_v_icols;
@@ -119256,22 +120863,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObjec
   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("getRow", 0);
 
-  /* "PETSc/Mat.pyx":758
+  /* "PETSc/Mat.pyx":775
  * 
  *     def getRow(self, row):
  *         cdef PetscInt irow = asInt(row)             # <<<<<<<<<<<<<<
  *         cdef PetscInt ncols = 0
  *         cdef const_PetscInt *icols=NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 758; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 775, __pyx_L1_error)
   __pyx_v_irow = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":759
+  /* "PETSc/Mat.pyx":776
  *     def getRow(self, row):
  *         cdef PetscInt irow = asInt(row)
  *         cdef PetscInt ncols = 0             # <<<<<<<<<<<<<<
@@ -119280,7 +120884,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObjec
  */
   __pyx_v_ncols = 0;
 
-  /* "PETSc/Mat.pyx":760
+  /* "PETSc/Mat.pyx":777
  *         cdef PetscInt irow = asInt(row)
  *         cdef PetscInt ncols = 0
  *         cdef const_PetscInt *icols=NULL             # <<<<<<<<<<<<<<
@@ -119289,7 +120893,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObjec
  */
   __pyx_v_icols = NULL;
 
-  /* "PETSc/Mat.pyx":761
+  /* "PETSc/Mat.pyx":778
  *         cdef PetscInt ncols = 0
  *         cdef const_PetscInt *icols=NULL
  *         cdef const_PetscScalar *svals=NULL             # <<<<<<<<<<<<<<
@@ -119298,49 +120902,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObjec
  */
   __pyx_v_svals = NULL;
 
-  /* "PETSc/Mat.pyx":762
+  /* "PETSc/Mat.pyx":779
  *         cdef const_PetscInt *icols=NULL
  *         cdef const_PetscScalar *svals=NULL
  *         CHKERR( MatGetRow(self.mat, irow, &ncols, &icols, &svals) )             # <<<<<<<<<<<<<<
  *         cdef object cols = array_i(ncols, icols)
  *         cdef object vals = array_s(ncols, svals)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRow(__pyx_v_self->mat, __pyx_v_irow, (&__pyx_v_ncols), (&__pyx_v_icols), (&__pyx_v_svals))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRow(__pyx_v_self->mat, __pyx_v_irow, (&__pyx_v_ncols), (&__pyx_v_icols), (&__pyx_v_svals))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 779, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":763
+  /* "PETSc/Mat.pyx":780
  *         cdef const_PetscScalar *svals=NULL
  *         CHKERR( MatGetRow(self.mat, irow, &ncols, &icols, &svals) )
  *         cdef object cols = array_i(ncols, icols)             # <<<<<<<<<<<<<<
  *         cdef object vals = array_s(ncols, svals)
  *         CHKERR( MatRestoreRow(self.mat, irow, &ncols, &icols, &svals) )
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_ncols, __pyx_v_icols)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_ncols, __pyx_v_icols)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 780, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_cols = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":764
+  /* "PETSc/Mat.pyx":781
  *         CHKERR( MatGetRow(self.mat, irow, &ncols, &icols, &svals) )
  *         cdef object cols = array_i(ncols, icols)
  *         cdef object vals = array_s(ncols, svals)             # <<<<<<<<<<<<<<
  *         CHKERR( MatRestoreRow(self.mat, irow, &ncols, &icols, &svals) )
  *         return (cols, vals)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_s(__pyx_v_ncols, __pyx_v_svals)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_s(__pyx_v_ncols, __pyx_v_svals)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 781, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_vals = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":765
+  /* "PETSc/Mat.pyx":782
  *         cdef object cols = array_i(ncols, icols)
  *         cdef object vals = array_s(ncols, svals)
  *         CHKERR( MatRestoreRow(self.mat, irow, &ncols, &icols, &svals) )             # <<<<<<<<<<<<<<
  *         return (cols, vals)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreRow(__pyx_v_self->mat, __pyx_v_irow, (&__pyx_v_ncols), (&__pyx_v_icols), (&__pyx_v_svals))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreRow(__pyx_v_self->mat, __pyx_v_irow, (&__pyx_v_ncols), (&__pyx_v_icols), (&__pyx_v_svals))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 782, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":766
+  /* "PETSc/Mat.pyx":783
  *         cdef object vals = array_s(ncols, svals)
  *         CHKERR( MatRestoreRow(self.mat, irow, &ncols, &icols, &svals) )
  *         return (cols, vals)             # <<<<<<<<<<<<<<
@@ -119348,7 +120952,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObjec
  *     def getRowIJ(self, symmetric=False, compressed=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 783, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_cols);
   __Pyx_GIVEREF(__pyx_v_cols);
@@ -119360,7 +120964,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObjec
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":757
+  /* "PETSc/Mat.pyx":774
  *         return (ai, aj, av)
  * 
  *     def getRow(self, row):             # <<<<<<<<<<<<<<
@@ -119381,7 +120985,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":768
+/* "PETSc/Mat.pyx":785
  *         return (cols, vals)
  * 
  *     def getRowIJ(self, symmetric=False, compressed=False):             # <<<<<<<<<<<<<<
@@ -119390,14 +120994,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getRow(struct PyPetscMatObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRowIJ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_158getRowIJ[] = "Mat.getRowIJ(self, symmetric=False, compressed=False)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRowIJ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getRowIJ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_160getRowIJ[] = "Mat.getRowIJ(self, symmetric=False, compressed=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getRowIJ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_symmetric = 0;
   PyObject *__pyx_v_compressed = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRowIJ (wrapper)", 0);
@@ -119429,7 +121030,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRowIJ(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRowIJ") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRowIJ") < 0)) __PYX_ERR(33, 785, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -119444,20 +121045,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRowIJ(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getRowIJ", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getRowIJ", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 785, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getRowIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_symmetric, __pyx_v_compressed);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_symmetric, __pyx_v_compressed);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_symmetric, PyObject *__pyx_v_compressed) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_symmetric, PyObject *__pyx_v_compressed) {
   PetscInt __pyx_v_shift;
   PetscBool __pyx_v_symm;
   PetscBool __pyx_v_bcmp;
@@ -119473,12 +121074,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
   int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getRowIJ", 0);
 
-  /* "PETSc/Mat.pyx":769
+  /* "PETSc/Mat.pyx":786
  * 
  *     def getRowIJ(self, symmetric=False, compressed=False):
  *         cdef PetscInt shift=0             # <<<<<<<<<<<<<<
@@ -119487,27 +121085,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_shift = 0;
 
-  /* "PETSc/Mat.pyx":770
+  /* "PETSc/Mat.pyx":787
  *     def getRowIJ(self, symmetric=False, compressed=False):
  *         cdef PetscInt shift=0
  *         cdef PetscBool symm=symmetric             # <<<<<<<<<<<<<<
  *         cdef PetscBool bcmp=compressed
  *         cdef PetscInt n=0
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_symmetric)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_symmetric)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 787, __pyx_L1_error)
   __pyx_v_symm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":771
+  /* "PETSc/Mat.pyx":788
  *         cdef PetscInt shift=0
  *         cdef PetscBool symm=symmetric
  *         cdef PetscBool bcmp=compressed             # <<<<<<<<<<<<<<
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_compressed)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_compressed)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 788, __pyx_L1_error)
   __pyx_v_bcmp = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":772
+  /* "PETSc/Mat.pyx":789
  *         cdef PetscBool symm=symmetric
  *         cdef PetscBool bcmp=compressed
  *         cdef PetscInt n=0             # <<<<<<<<<<<<<<
@@ -119516,7 +121114,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/Mat.pyx":773
+  /* "PETSc/Mat.pyx":790
  *         cdef PetscBool bcmp=compressed
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL             # <<<<<<<<<<<<<<
@@ -119525,7 +121123,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_ia = NULL;
 
-  /* "PETSc/Mat.pyx":774
+  /* "PETSc/Mat.pyx":791
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL
  *         cdef const_PetscInt *ja=NULL             # <<<<<<<<<<<<<<
@@ -119534,7 +121132,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_ja = NULL;
 
-  /* "PETSc/Mat.pyx":775
+  /* "PETSc/Mat.pyx":792
  *         cdef const_PetscInt *ia=NULL
  *         cdef const_PetscInt *ja=NULL
  *         cdef PetscBool done=PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -119543,16 +121141,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":776
+  /* "PETSc/Mat.pyx":793
  *         cdef const_PetscInt *ja=NULL
  *         cdef PetscBool done=PETSC_FALSE
  *         CHKERR( MatGetRowIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )             # <<<<<<<<<<<<<<
  *         cdef object ai=None, aj=None
  *         if done != PETSC_FALSE: ai = array_i(  n+1, ia)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRowIJ(__pyx_v_self->mat, __pyx_v_shift, __pyx_v_symm, __pyx_v_bcmp, (&__pyx_v_n), (&__pyx_v_ia), (&__pyx_v_ja), (&__pyx_v_done))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 776; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRowIJ(__pyx_v_self->mat, __pyx_v_shift, __pyx_v_symm, __pyx_v_bcmp, (&__pyx_v_n), (&__pyx_v_ia), (&__pyx_v_ja), (&__pyx_v_done))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 793, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":777
+  /* "PETSc/Mat.pyx":794
  *         cdef PetscBool done=PETSC_FALSE
  *         CHKERR( MatGetRowIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         cdef object ai=None, aj=None             # <<<<<<<<<<<<<<
@@ -119564,7 +121162,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
   __Pyx_INCREF(Py_None);
   __pyx_v_aj = Py_None;
 
-  /* "PETSc/Mat.pyx":778
+  /* "PETSc/Mat.pyx":795
  *         CHKERR( MatGetRowIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         cdef object ai=None, aj=None
  *         if done != PETSC_FALSE: ai = array_i(  n+1, ia)             # <<<<<<<<<<<<<<
@@ -119573,15 +121171,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  */
   __pyx_t_3 = ((__pyx_v_done != PETSC_FALSE) != 0);
   if (__pyx_t_3) {
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_n + 1), __pyx_v_ia)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_n + 1), __pyx_v_ia)); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 795, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_ai, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":779
+  /* "PETSc/Mat.pyx":796
  *         cdef object ai=None, aj=None
  *         if done != PETSC_FALSE: ai = array_i(  n+1, ia)
  *         if done != PETSC_FALSE: aj = array_i(ia[n], ja)             # <<<<<<<<<<<<<<
@@ -119590,24 +121186,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  */
   __pyx_t_3 = ((__pyx_v_done != PETSC_FALSE) != 0);
   if (__pyx_t_3) {
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_ia[__pyx_v_n]), __pyx_v_ja)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_ia[__pyx_v_n]), __pyx_v_ja)); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 796, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_aj, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":780
+  /* "PETSc/Mat.pyx":797
  *         if done != PETSC_FALSE: ai = array_i(  n+1, ia)
  *         if done != PETSC_FALSE: aj = array_i(ia[n], ja)
  *         CHKERR( MatRestoreRowIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )             # <<<<<<<<<<<<<<
  *         return (ai, aj)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreRowIJ(__pyx_v_self->mat, __pyx_v_shift, __pyx_v_symm, __pyx_v_bcmp, (&__pyx_v_n), (&__pyx_v_ia), (&__pyx_v_ja), (&__pyx_v_done))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreRowIJ(__pyx_v_self->mat, __pyx_v_shift, __pyx_v_symm, __pyx_v_bcmp, (&__pyx_v_n), (&__pyx_v_ia), (&__pyx_v_ja), (&__pyx_v_done))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 797, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":781
+  /* "PETSc/Mat.pyx":798
  *         if done != PETSC_FALSE: aj = array_i(ia[n], ja)
  *         CHKERR( MatRestoreRowIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         return (ai, aj)             # <<<<<<<<<<<<<<
@@ -119615,7 +121209,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  *     def getColumnIJ(self, symmetric=False, compressed=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_ai);
   __Pyx_GIVEREF(__pyx_v_ai);
@@ -119627,7 +121221,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":768
+  /* "PETSc/Mat.pyx":785
  *         return (cols, vals)
  * 
  *     def getRowIJ(self, symmetric=False, compressed=False):             # <<<<<<<<<<<<<<
@@ -119648,7 +121242,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":783
+/* "PETSc/Mat.pyx":800
  *         return (ai, aj)
  * 
  *     def getColumnIJ(self, symmetric=False, compressed=False):             # <<<<<<<<<<<<<<
@@ -119657,14 +121251,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRowIJ(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getColumnIJ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_160getColumnIJ[] = "Mat.getColumnIJ(self, symmetric=False, compressed=False)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getColumnIJ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163getColumnIJ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_162getColumnIJ[] = "Mat.getColumnIJ(self, symmetric=False, compressed=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163getColumnIJ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_symmetric = 0;
   PyObject *__pyx_v_compressed = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getColumnIJ (wrapper)", 0);
@@ -119696,7 +121287,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getColumnIJ(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumnIJ") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumnIJ") < 0)) __PYX_ERR(33, 800, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -119711,20 +121302,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getColumnIJ(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getColumnIJ", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getColumnIJ", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 800, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getColumnIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_symmetric, __pyx_v_compressed);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_symmetric, __pyx_v_compressed);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_symmetric, PyObject *__pyx_v_compressed) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_symmetric, PyObject *__pyx_v_compressed) {
   PetscInt __pyx_v_shift;
   PetscBool __pyx_v_symm;
   PetscBool __pyx_v_bcmp;
@@ -119740,12 +121331,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
   int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getColumnIJ", 0);
 
-  /* "PETSc/Mat.pyx":784
+  /* "PETSc/Mat.pyx":801
  * 
  *     def getColumnIJ(self, symmetric=False, compressed=False):
  *         cdef PetscInt shift=0             # <<<<<<<<<<<<<<
@@ -119754,19 +121342,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  */
   __pyx_v_shift = 0;
 
-  /* "PETSc/Mat.pyx":785
+  /* "PETSc/Mat.pyx":802
  *     def getColumnIJ(self, symmetric=False, compressed=False):
  *         cdef PetscInt shift=0
  *         cdef PetscBool symm=symmetric, bcmp=compressed             # <<<<<<<<<<<<<<
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_symmetric)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_symmetric)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 802, __pyx_L1_error)
   __pyx_v_symm = __pyx_t_1;
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_compressed)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_compressed)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 802, __pyx_L1_error)
   __pyx_v_bcmp = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":786
+  /* "PETSc/Mat.pyx":803
  *         cdef PetscInt shift=0
  *         cdef PetscBool symm=symmetric, bcmp=compressed
  *         cdef PetscInt n=0             # <<<<<<<<<<<<<<
@@ -119775,7 +121363,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/Mat.pyx":787
+  /* "PETSc/Mat.pyx":804
  *         cdef PetscBool symm=symmetric, bcmp=compressed
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL             # <<<<<<<<<<<<<<
@@ -119784,7 +121372,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  */
   __pyx_v_ia = NULL;
 
-  /* "PETSc/Mat.pyx":788
+  /* "PETSc/Mat.pyx":805
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL
  *         cdef const_PetscInt *ja=NULL             # <<<<<<<<<<<<<<
@@ -119793,7 +121381,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  */
   __pyx_v_ja = NULL;
 
-  /* "PETSc/Mat.pyx":789
+  /* "PETSc/Mat.pyx":806
  *         cdef const_PetscInt *ia=NULL
  *         cdef const_PetscInt *ja=NULL
  *         cdef PetscBool done=PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -119802,16 +121390,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":790
+  /* "PETSc/Mat.pyx":807
  *         cdef const_PetscInt *ja=NULL
  *         cdef PetscBool done=PETSC_FALSE
  *         CHKERR( MatGetColumnIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )             # <<<<<<<<<<<<<<
  *         cdef object ai=None, aj=None
  *         if done != PETSC_FALSE: ai = array_i(  n+1, ia)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetColumnIJ(__pyx_v_self->mat, __pyx_v_shift, __pyx_v_symm, __pyx_v_bcmp, (&__pyx_v_n), (&__pyx_v_ia), (&__pyx_v_ja), (&__pyx_v_done))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetColumnIJ(__pyx_v_self->mat, __pyx_v_shift, __pyx_v_symm, __pyx_v_bcmp, (&__pyx_v_n), (&__pyx_v_ia), (&__pyx_v_ja), (&__pyx_v_done))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 807, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":791
+  /* "PETSc/Mat.pyx":808
  *         cdef PetscBool done=PETSC_FALSE
  *         CHKERR( MatGetColumnIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         cdef object ai=None, aj=None             # <<<<<<<<<<<<<<
@@ -119823,7 +121411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
   __Pyx_INCREF(Py_None);
   __pyx_v_aj = Py_None;
 
-  /* "PETSc/Mat.pyx":792
+  /* "PETSc/Mat.pyx":809
  *         CHKERR( MatGetColumnIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         cdef object ai=None, aj=None
  *         if done != PETSC_FALSE: ai = array_i(  n+1, ia)             # <<<<<<<<<<<<<<
@@ -119832,15 +121420,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  */
   __pyx_t_3 = ((__pyx_v_done != PETSC_FALSE) != 0);
   if (__pyx_t_3) {
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_n + 1), __pyx_v_ia)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_n + 1), __pyx_v_ia)); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 809, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_ai, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":793
+  /* "PETSc/Mat.pyx":810
  *         cdef object ai=None, aj=None
  *         if done != PETSC_FALSE: ai = array_i(  n+1, ia)
  *         if done != PETSC_FALSE: aj = array_i(ia[n], ja)             # <<<<<<<<<<<<<<
@@ -119849,24 +121435,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  */
   __pyx_t_3 = ((__pyx_v_done != PETSC_FALSE) != 0);
   if (__pyx_t_3) {
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_ia[__pyx_v_n]), __pyx_v_ja)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_ia[__pyx_v_n]), __pyx_v_ja)); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 810, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_aj, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":794
+  /* "PETSc/Mat.pyx":811
  *         if done != PETSC_FALSE: ai = array_i(  n+1, ia)
  *         if done != PETSC_FALSE: aj = array_i(ia[n], ja)
  *         CHKERR( MatRestoreColumnIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )             # <<<<<<<<<<<<<<
  *         return (ai, aj)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreColumnIJ(__pyx_v_self->mat, __pyx_v_shift, __pyx_v_symm, __pyx_v_bcmp, (&__pyx_v_n), (&__pyx_v_ia), (&__pyx_v_ja), (&__pyx_v_done))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreColumnIJ(__pyx_v_self->mat, __pyx_v_shift, __pyx_v_symm, __pyx_v_bcmp, (&__pyx_v_n), (&__pyx_v_ia), (&__pyx_v_ja), (&__pyx_v_done))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 811, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":795
+  /* "PETSc/Mat.pyx":812
  *         if done != PETSC_FALSE: aj = array_i(ia[n], ja)
  *         CHKERR( MatRestoreColumnIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         return (ai, aj)             # <<<<<<<<<<<<<<
@@ -119874,7 +121458,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  *     def setValue(self, row, col, value, addv=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 812, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_ai);
   __Pyx_GIVEREF(__pyx_v_ai);
@@ -119886,7 +121470,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":783
+  /* "PETSc/Mat.pyx":800
  *         return (ai, aj)
  * 
  *     def getColumnIJ(self, symmetric=False, compressed=False):             # <<<<<<<<<<<<<<
@@ -119907,7 +121491,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":797
+/* "PETSc/Mat.pyx":814
  *         return (ai, aj)
  * 
  *     def setValue(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -119916,16 +121500,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getColumnIJ(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_162setValue[] = "Mat.setValue(self, row, col, value, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_164setValue[] = "Mat.setValue(self, row, col, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_row = 0;
   PyObject *__pyx_v_col = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValue (wrapper)", 0);
@@ -119952,12 +121533,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163setValue(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_col)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, 1); __PYX_ERR(33, 814, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, 2); __PYX_ERR(33, 814, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -119966,7 +121547,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163setValue(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValue") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValue") < 0)) __PYX_ERR(33, 814, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -119985,20 +121566,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163setValue(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 814, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_162setValue(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_164setValue(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162setValue(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_164setValue(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscScalar __pyx_v_sval;
@@ -120009,61 +121590,58 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162setValue(struct PyPetscMatObj
   PetscScalar __pyx_t_2;
   InsertMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setValue", 0);
 
-  /* "PETSc/Mat.pyx":798
+  /* "PETSc/Mat.pyx":815
  * 
  *     def setValue(self, row, col, value, addv=None):
  *         cdef PetscInt    ival1 = asInt(row)             # <<<<<<<<<<<<<<
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = asScalar(value)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 815, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":799
+  /* "PETSc/Mat.pyx":816
  *     def setValue(self, row, col, value, addv=None):
  *         cdef PetscInt    ival1 = asInt(row)
  *         cdef PetscInt    ival2 = asInt(col)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval  = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 816, __pyx_L1_error)
   __pyx_v_ival2 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":800
+  /* "PETSc/Mat.pyx":817
  *         cdef PetscInt    ival1 = asInt(row)
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = asScalar(value)             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( MatSetValues(self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 817, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":801
+  /* "PETSc/Mat.pyx":818
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetValues(self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)-1L))) __PYX_ERR(33, 818, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_3;
 
-  /* "PETSc/Mat.pyx":802
+  /* "PETSc/Mat.pyx":819
  *         cdef PetscScalar sval  = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( MatSetValues(self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )             # <<<<<<<<<<<<<<
  * 
  *     def setValues(self, rows, cols, values, addv=None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetValues(__pyx_v_self->mat, 1, (&__pyx_v_ival1), 1, (&__pyx_v_ival2), (&__pyx_v_sval), __pyx_v_caddv)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetValues(__pyx_v_self->mat, 1, (&__pyx_v_ival1), 1, (&__pyx_v_ival2), (&__pyx_v_sval), __pyx_v_caddv)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 819, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":797
+  /* "PETSc/Mat.pyx":814
  *         return (ai, aj)
  * 
  *     def setValue(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -120083,7 +121661,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162setValue(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":804
+/* "PETSc/Mat.pyx":821
  *         CHKERR( MatSetValues(self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  *     def setValues(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -120092,16 +121670,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162setValue(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_164setValues[] = "Mat.setValues(self, rows, cols, values, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_166setValues[] = "Mat.setValues(self, rows, cols, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rows = 0;
   PyObject *__pyx_v_cols = 0;
   PyObject *__pyx_v_values = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValues (wrapper)", 0);
@@ -120128,12 +121703,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValues(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, 1); __PYX_ERR(33, 821, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, 2); __PYX_ERR(33, 821, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -120142,7 +121717,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValues(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValues") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValues") < 0)) __PYX_ERR(33, 821, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -120161,38 +121736,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValues(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 821, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_164setValues(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_166setValues(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_164setValues(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_166setValues(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
   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("setValues", 0);
 
-  /* "PETSc/Mat.pyx":805
+  /* "PETSc/Mat.pyx":822
  * 
  *     def setValues(self, rows, cols, values, addv=None):
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesRCV(self, R, C, V, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv, 0, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv, 0, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 822, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":804
+  /* "PETSc/Mat.pyx":821
  *         CHKERR( MatSetValues(self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  *     def setValues(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -120212,7 +121784,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_164setValues(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":807
+/* "PETSc/Mat.pyx":824
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 0)
  * 
  *     def setValuesRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -120221,16 +121793,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_164setValues(struct PyPetscMatOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValuesRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_166setValuesRCV[] = "Mat.setValuesRCV(self, R, C, V, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValuesRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_168setValuesRCV[] = "Mat.setValuesRCV(self, R, C, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_R = 0;
   PyObject *__pyx_v_C = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesRCV (wrapper)", 0);
@@ -120257,12 +121826,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValuesRCV(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_C)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, 1); __PYX_ERR(33, 824, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, 2); __PYX_ERR(33, 824, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -120271,7 +121840,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValuesRCV(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesRCV") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesRCV") < 0)) __PYX_ERR(33, 824, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -120290,38 +121859,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValuesRCV(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 824, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesRCV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_166setValuesRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_166setValuesRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
   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("setValuesRCV", 0);
 
-  /* "PETSc/Mat.pyx":808
+  /* "PETSc/Mat.pyx":825
  * 
  *     def setValuesRCV(self, R, C, V, addv=None):
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesIJV(self, I, J, V, addv=None, rowmap=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(__pyx_v_self->mat, __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv, 0, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(__pyx_v_self->mat, __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv, 0, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 825, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":807
+  /* "PETSc/Mat.pyx":824
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 0)
  * 
  *     def setValuesRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -120341,7 +121907,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_166setValuesRCV(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":810
+/* "PETSc/Mat.pyx":827
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 0)
  * 
  *     def setValuesIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -120350,17 +121916,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_166setValuesRCV(struct PyPetscMa
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_168setValuesIJV[] = "Mat.setValuesIJV(self, I, J, V, addv=None, rowmap=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_170setValuesIJV[] = "Mat.setValuesIJV(self, I, J, V, addv=None, rowmap=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_I = 0;
   PyObject *__pyx_v_J = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_v_rowmap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesIJV (wrapper)", 0);
@@ -120389,12 +121952,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesIJV(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, 1); __PYX_ERR(33, 827, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, 2); __PYX_ERR(33, 827, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -120408,7 +121971,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesIJV(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesIJV") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesIJV") < 0)) __PYX_ERR(33, 827, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -120429,38 +121992,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesIJV(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 827, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesIJV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesIJV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesIJV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap) {
   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("setValuesIJV", 0);
 
-  /* "PETSc/Mat.pyx":811
+  /* "PETSc/Mat.pyx":828
  * 
  *     def setValuesIJV(self, I, J, V, addv=None, rowmap=None):
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesCSR(self, I, J, V, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap, 0, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 811; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap, 0, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 828, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":810
+  /* "PETSc/Mat.pyx":827
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 0)
  * 
  *     def setValuesIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -120480,7 +122040,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesIJV(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":813
+/* "PETSc/Mat.pyx":830
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 0)
  * 
  *     def setValuesCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -120489,16 +122049,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesIJV(struct PyPetscMa
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_170setValuesCSR[] = "Mat.setValuesCSR(self, I, J, V, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_172setValuesCSR[] = "Mat.setValuesCSR(self, I, J, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_I = 0;
   PyObject *__pyx_v_J = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesCSR (wrapper)", 0);
@@ -120525,12 +122082,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesCSR(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, 1); __PYX_ERR(33, 830, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, 2); __PYX_ERR(33, 830, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -120539,7 +122096,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesCSR(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesCSR") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesCSR") < 0)) __PYX_ERR(33, 830, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -120558,38 +122115,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesCSR(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 830, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesCSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
   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("setValuesCSR", 0);
 
-  /* "PETSc/Mat.pyx":814
+  /* "PETSc/Mat.pyx":831
  * 
  *     def setValuesCSR(self, I, J, V, addv=None):
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlocked(self, rows, cols, values, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, 0, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 814; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, 0, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 831, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":813
+  /* "PETSc/Mat.pyx":830
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 0)
  * 
  *     def setValuesCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -120609,7 +122163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesCSR(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":816
+/* "PETSc/Mat.pyx":833
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 0)
  * 
  *     def setValuesBlocked(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -120618,16 +122172,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesCSR(struct PyPetscMa
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesBlocked(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_172setValuesBlocked[] = "Mat.setValuesBlocked(self, rows, cols, values, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesBlocked(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlocked(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_174setValuesBlocked[] = "Mat.setValuesBlocked(self, rows, cols, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlocked(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rows = 0;
   PyObject *__pyx_v_cols = 0;
   PyObject *__pyx_v_values = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlocked (wrapper)", 0);
@@ -120654,12 +122205,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesBlocked(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, 1); __PYX_ERR(33, 833, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, 2); __PYX_ERR(33, 833, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -120668,7 +122219,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesBlocked(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlocked") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlocked") < 0)) __PYX_ERR(33, 833, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -120687,38 +122238,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesBlocked(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 833, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlocked", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesBlocked(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlocked(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesBlocked(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlocked(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
   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("setValuesBlocked", 0);
 
-  /* "PETSc/Mat.pyx":817
+  /* "PETSc/Mat.pyx":834
  * 
  *     def setValuesBlocked(self, rows, cols, values, addv=None):
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlockedRCV(self, R, C, V, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv, 1, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv, 1, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 834, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":816
+  /* "PETSc/Mat.pyx":833
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 0)
  * 
  *     def setValuesBlocked(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -120738,7 +122286,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesBlocked(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":819
+/* "PETSc/Mat.pyx":836
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 0)
  * 
  *     def setValuesBlockedRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -120747,16 +122295,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesBlocked(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlockedRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_174setValuesBlockedRCV[] = "Mat.setValuesBlockedRCV(self, R, C, V, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlockedRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_176setValuesBlockedRCV[] = "Mat.setValuesBlockedRCV(self, R, C, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_R = 0;
   PyObject *__pyx_v_C = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlockedRCV (wrapper)", 0);
@@ -120783,12 +122328,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlockedRCV(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_C)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, 1); __PYX_ERR(33, 836, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, 2); __PYX_ERR(33, 836, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -120797,7 +122342,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlockedRCV(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedRCV") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedRCV") < 0)) __PYX_ERR(33, 836, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -120816,38 +122361,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlockedRCV(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 836, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedRCV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlockedRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlockedRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
   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("setValuesBlockedRCV", 0);
 
-  /* "PETSc/Mat.pyx":820
+  /* "PETSc/Mat.pyx":837
  * 
  *     def setValuesBlockedRCV(self, R, C, V, addv=None):
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlockedIJV(self, I, J, V, addv=None, rowmap=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(__pyx_v_self->mat, __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv, 1, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(__pyx_v_self->mat, __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv, 1, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 837, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":819
+  /* "PETSc/Mat.pyx":836
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 0)
  * 
  *     def setValuesBlockedRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -120867,7 +122409,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlockedRCV(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":822
+/* "PETSc/Mat.pyx":839
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 0)
  * 
  *     def setValuesBlockedIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -120876,17 +122418,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlockedRCV(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_176setValuesBlockedIJV[] = "Mat.setValuesBlockedIJV(self, I, J, V, addv=None, rowmap=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_178setValuesBlockedIJV[] = "Mat.setValuesBlockedIJV(self, I, J, V, addv=None, rowmap=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_I = 0;
   PyObject *__pyx_v_J = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_v_rowmap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlockedIJV (wrapper)", 0);
@@ -120915,12 +122454,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedIJV(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, 1); __PYX_ERR(33, 839, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, 2); __PYX_ERR(33, 839, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -120934,7 +122473,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedIJV(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedIJV") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedIJV") < 0)) __PYX_ERR(33, 839, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -120955,38 +122494,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedIJV(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 839, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedIJV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedIJV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedIJV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap) {
   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("setValuesBlockedIJV", 0);
 
-  /* "PETSc/Mat.pyx":823
+  /* "PETSc/Mat.pyx":840
  * 
  *     def setValuesBlockedIJV(self, I, J, V, addv=None, rowmap=None):
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlockedCSR(self, I, J, V, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap, 1, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap, 1, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 840, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":822
+  /* "PETSc/Mat.pyx":839
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 0)
  * 
  *     def setValuesBlockedIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -121006,7 +122542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedIJV(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":825
+/* "PETSc/Mat.pyx":842
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 0)
  * 
  *     def setValuesBlockedCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -121015,16 +122551,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedIJV(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_178setValuesBlockedCSR[] = "Mat.setValuesBlockedCSR(self, I, J, V, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setValuesBlockedCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_180setValuesBlockedCSR[] = "Mat.setValuesBlockedCSR(self, I, J, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setValuesBlockedCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_I = 0;
   PyObject *__pyx_v_J = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlockedCSR (wrapper)", 0);
@@ -121051,12 +122584,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedCSR(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, 1); __PYX_ERR(33, 842, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, 2); __PYX_ERR(33, 842, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -121065,7 +122598,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedCSR(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedCSR") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedCSR") < 0)) __PYX_ERR(33, 842, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -121084,38 +122617,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedCSR(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 842, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedCSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_180setValuesBlockedCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setValuesBlockedCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
   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("setValuesBlockedCSR", 0);
 
-  /* "PETSc/Mat.pyx":826
+  /* "PETSc/Mat.pyx":843
  * 
  *     def setValuesBlockedCSR(self, I, J, V, addv=None):
  *         matsetvalues_csr(self.mat, I, J, V, addv, 1, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, 1, 0); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, 1, 0); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 843, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":825
+  /* "PETSc/Mat.pyx":842
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 0)
  * 
  *     def setValuesBlockedCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -121135,7 +122665,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedCSR(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":828
+/* "PETSc/Mat.pyx":845
  *         matsetvalues_csr(self.mat, I, J, V, addv, 1, 0)
  * 
  *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):             # <<<<<<<<<<<<<<
@@ -121144,14 +122674,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedCSR(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_180setLGMap[] = "Mat.setLGMap(self, LGMap rmap, LGMap cmap=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_182setLGMap[] = "Mat.setLGMap(self, LGMap rmap, LGMap cmap=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscLGMapObject *__pyx_v_rmap = 0;
   struct PyPetscLGMapObject *__pyx_v_cmap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setLGMap (wrapper)", 0);
@@ -121180,7 +122707,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setLGMap(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLGMap") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLGMap") < 0)) __PYX_ERR(33, 845, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -121195,15 +122722,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setLGMap(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLGMap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLGMap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 845, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setLGMap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rmap), __pyx_ptype_8petsc4py_5PETSc_LGMap, 0, "rmap", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cmap), __pyx_ptype_8petsc4py_5PETSc_LGMap, 1, "cmap", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_180setLGMap(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rmap, __pyx_v_cmap);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rmap), __pyx_ptype_8petsc4py_5PETSc_LGMap, 0, "rmap", 0))) __PYX_ERR(33, 845, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cmap), __pyx_ptype_8petsc4py_5PETSc_LGMap, 1, "cmap", 0))) __PYX_ERR(33, 845, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_182setLGMap(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rmap, __pyx_v_cmap);
 
   /* function exit code */
   goto __pyx_L0;
@@ -121214,19 +122741,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setLGMap(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setLGMap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscLGMapObject *__pyx_v_rmap, struct PyPetscLGMapObject *__pyx_v_cmap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setLGMap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscLGMapObject *__pyx_v_rmap, struct PyPetscLGMapObject *__pyx_v_cmap) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setLGMap", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_cmap);
 
-  /* "PETSc/Mat.pyx":829
+  /* "PETSc/Mat.pyx":846
  * 
  *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):
  *         if cmap is None: cmap = rmap             # <<<<<<<<<<<<<<
@@ -121238,20 +122762,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setLGMap(struct PyPetscMatObj
   if (__pyx_t_2) {
     __Pyx_INCREF(((PyObject *)__pyx_v_rmap));
     __Pyx_DECREF_SET(__pyx_v_cmap, __pyx_v_rmap);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":830
+  /* "PETSc/Mat.pyx":847
  *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):
  *         if cmap is None: cmap = rmap
  *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )             # <<<<<<<<<<<<<<
  * 
  *     def setValueLocal(self, row, col, value, addv=None):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetLocalToGlobalMapping(__pyx_v_self->mat, __pyx_v_rmap->lgm, __pyx_v_cmap->lgm)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetLocalToGlobalMapping(__pyx_v_self->mat, __pyx_v_rmap->lgm, __pyx_v_cmap->lgm)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 847, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":828
+  /* "PETSc/Mat.pyx":845
  *         matsetvalues_csr(self.mat, I, J, V, addv, 1, 0)
  * 
  *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):             # <<<<<<<<<<<<<<
@@ -121272,7 +122794,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setLGMap(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":832
+/* "PETSc/Mat.pyx":849
  *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
  * 
  *     def setValueLocal(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -121281,16 +122803,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setLGMap(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_182setValueLocal[] = "Mat.setValueLocal(self, row, col, value, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_184setValueLocal[] = "Mat.setValueLocal(self, row, col, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_row = 0;
   PyObject *__pyx_v_col = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValueLocal (wrapper)", 0);
@@ -121317,12 +122836,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setValueLocal(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_col)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, 1); __PYX_ERR(33, 849, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, 2); __PYX_ERR(33, 849, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -121331,7 +122850,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setValueLocal(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueLocal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueLocal") < 0)) __PYX_ERR(33, 849, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -121350,20 +122869,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setValueLocal(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 849, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValueLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_182setValueLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_184setValueLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setValueLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValueLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscScalar __pyx_v_sval;
@@ -121374,61 +122893,58 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setValueLocal(struct PyPetscM
   PetscScalar __pyx_t_2;
   InsertMode __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setValueLocal", 0);
 
-  /* "PETSc/Mat.pyx":833
+  /* "PETSc/Mat.pyx":850
  * 
  *     def setValueLocal(self, row, col, value, addv=None):
  *         cdef PetscInt    ival1 = asInt(row)             # <<<<<<<<<<<<<<
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = asScalar(value)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 850, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":834
+  /* "PETSc/Mat.pyx":851
  *     def setValueLocal(self, row, col, value, addv=None):
  *         cdef PetscInt    ival1 = asInt(row)
  *         cdef PetscInt    ival2 = asInt(col)             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval  = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 851, __pyx_L1_error)
   __pyx_v_ival2 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":835
+  /* "PETSc/Mat.pyx":852
  *         cdef PetscInt    ival1 = asInt(row)
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = asScalar(value)             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( MatSetValuesLocal(
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 852, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":836
+  /* "PETSc/Mat.pyx":853
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetValuesLocal(
  *                 self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)-1L))) __PYX_ERR(33, 853, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_3;
 
-  /* "PETSc/Mat.pyx":837
+  /* "PETSc/Mat.pyx":854
  *         cdef PetscScalar sval  = asScalar(value)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( MatSetValuesLocal(             # <<<<<<<<<<<<<<
  *                 self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetValuesLocal(__pyx_v_self->mat, 1, (&__pyx_v_ival1), 1, (&__pyx_v_ival2), (&__pyx_v_sval), __pyx_v_caddv)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetValuesLocal(__pyx_v_self->mat, 1, (&__pyx_v_ival1), 1, (&__pyx_v_ival2), (&__pyx_v_sval), __pyx_v_caddv)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 854, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":832
+  /* "PETSc/Mat.pyx":849
  *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
  * 
  *     def setValueLocal(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -121448,7 +122964,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setValueLocal(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":840
+/* "PETSc/Mat.pyx":857
  *                 self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  *     def setValuesLocal(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -121457,16 +122973,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setValueLocal(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_184setValuesLocal[] = "Mat.setValuesLocal(self, rows, cols, values, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_186setValuesLocal[] = "Mat.setValuesLocal(self, rows, cols, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rows = 0;
   PyObject *__pyx_v_cols = 0;
   PyObject *__pyx_v_values = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesLocal (wrapper)", 0);
@@ -121493,12 +123006,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValuesLocal(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, 1); __PYX_ERR(33, 857, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, 2); __PYX_ERR(33, 857, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -121507,7 +123020,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValuesLocal(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocal") < 0)) __PYX_ERR(33, 857, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -121526,38 +123039,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValuesLocal(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 857, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_184setValuesLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValuesLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
   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("setValuesLocal", 0);
 
-  /* "PETSc/Mat.pyx":841
+  /* "PETSc/Mat.pyx":858
  * 
  *     def setValuesLocal(self, rows, cols, values, addv=None):
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 1)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesLocalRCV(self, R, C, V, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv, 0, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv, 0, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 858, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":840
+  /* "PETSc/Mat.pyx":857
  *                 self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  *     def setValuesLocal(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -121577,7 +123087,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValuesLocal(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":843
+/* "PETSc/Mat.pyx":860
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 1)
  * 
  *     def setValuesLocalRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -121586,16 +123096,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValuesLocal(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_186setValuesLocalRCV[] = "Mat.setValuesLocalRCV(self, R, C, V, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_188setValuesLocalRCV[] = "Mat.setValuesLocalRCV(self, R, C, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_R = 0;
   PyObject *__pyx_v_C = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesLocalRCV (wrapper)", 0);
@@ -121622,12 +123129,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocalRCV(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_C)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, 1); __PYX_ERR(33, 860, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, 2); __PYX_ERR(33, 860, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -121636,7 +123143,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocalRCV(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalRCV") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalRCV") < 0)) __PYX_ERR(33, 860, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -121655,38 +123162,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocalRCV(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 860, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesLocalRCV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocalRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocalRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
   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("setValuesLocalRCV", 0);
 
-  /* "PETSc/Mat.pyx":844
+  /* "PETSc/Mat.pyx":861
  * 
  *     def setValuesLocalRCV(self, R, C, V, addv=None):
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 1)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(__pyx_v_self->mat, __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv, 0, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(__pyx_v_self->mat, __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv, 0, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 861, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":843
+  /* "PETSc/Mat.pyx":860
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 1)
  * 
  *     def setValuesLocalRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -121706,7 +123210,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocalRCV(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":846
+/* "PETSc/Mat.pyx":863
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 1)
  * 
  *     def setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -121715,17 +123219,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocalRCV(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_188setValuesLocalIJV[] = "Mat.setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_190setValuesLocalIJV[] = "Mat.setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_I = 0;
   PyObject *__pyx_v_J = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_v_rowmap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesLocalIJV (wrapper)", 0);
@@ -121754,12 +123255,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalIJV(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, 1); __PYX_ERR(33, 863, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, 2); __PYX_ERR(33, 863, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -121773,7 +123274,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalIJV(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalIJV") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalIJV") < 0)) __PYX_ERR(33, 863, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -121794,38 +123295,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalIJV(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 863, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesLocalIJV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalIJV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalIJV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap) {
   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("setValuesLocalIJV", 0);
 
-  /* "PETSc/Mat.pyx":847
+  /* "PETSc/Mat.pyx":864
  * 
  *     def setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None):
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 1)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesLocalCSR(self, I, J, V, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap, 0, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap, 0, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 864, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":846
+  /* "PETSc/Mat.pyx":863
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 1)
  * 
  *     def setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -121845,7 +123343,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalIJV(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":849
+/* "PETSc/Mat.pyx":866
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 1)
  * 
  *     def setValuesLocalCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -121854,16 +123352,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalIJV(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_190setValuesLocalCSR[] = "Mat.setValuesLocalCSR(self, I, J, V, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_192setValuesLocalCSR[] = "Mat.setValuesLocalCSR(self, I, J, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_I = 0;
   PyObject *__pyx_v_J = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesLocalCSR (wrapper)", 0);
@@ -121890,12 +123385,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalCSR(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, 1); __PYX_ERR(33, 866, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, 2); __PYX_ERR(33, 866, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -121904,7 +123399,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalCSR(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalCSR") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalCSR") < 0)) __PYX_ERR(33, 866, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -121923,38 +123418,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalCSR(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 866, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesLocalCSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesLocalCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesLocalCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
   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("setValuesLocalCSR", 0);
 
-  /* "PETSc/Mat.pyx":850
+  /* "PETSc/Mat.pyx":867
  * 
  *     def setValuesLocalCSR(self, I, J, V, addv=None):
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 1)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlockedLocal(self, rows, cols, values, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, 0, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, 0, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 867, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":849
+  /* "PETSc/Mat.pyx":866
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 1)
  * 
  *     def setValuesLocalCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -121974,7 +123466,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalCSR(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":852
+/* "PETSc/Mat.pyx":869
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 1)
  * 
  *     def setValuesBlockedLocal(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -121983,16 +123475,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalCSR(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_192setValuesBlockedLocal[] = "Mat.setValuesBlockedLocal(self, rows, cols, values, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocal[] = "Mat.setValuesBlockedLocal(self, rows, cols, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rows = 0;
   PyObject *__pyx_v_cols = 0;
   PyObject *__pyx_v_values = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlockedLocal (wrapper)", 0);
@@ -122019,12 +123508,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesBlockedLocal(PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, 1); __PYX_ERR(33, 869, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, 2); __PYX_ERR(33, 869, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -122033,7 +123522,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesBlockedLocal(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocal") < 0)) __PYX_ERR(33, 869, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -122052,38 +123541,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesBlockedLocal(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 869, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesBlockedLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesBlockedLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_cols, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
   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("setValuesBlockedLocal", 0);
 
-  /* "PETSc/Mat.pyx":853
+  /* "PETSc/Mat.pyx":870
  * 
  *     def setValuesBlockedLocal(self, rows, cols, values, addv=None):
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 1)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlockedLocalRCV(self, R, C, V, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv, 1, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues(__pyx_v_self->mat, __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv, 1, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 870, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":852
+  /* "PETSc/Mat.pyx":869
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 1)
  * 
  *     def setValuesBlockedLocal(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -122103,7 +123589,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesBlockedLocal(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":855
+/* "PETSc/Mat.pyx":872
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 1)
  * 
  *     def setValuesBlockedLocalRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122112,16 +123598,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesBlockedLocal(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocalRCV[] = "Mat.setValuesBlockedLocalRCV(self, R, C, V, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalRCV[] = "Mat.setValuesBlockedLocalRCV(self, R, C, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_R = 0;
   PyObject *__pyx_v_C = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlockedLocalRCV (wrapper)", 0);
@@ -122148,12 +123631,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocalRCV(PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_C)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, 1); __PYX_ERR(33, 872, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, 2); __PYX_ERR(33, 872, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -122162,7 +123645,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocalRCV(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalRCV") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalRCV") < 0)) __PYX_ERR(33, 872, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -122181,38 +123664,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocalRCV(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 872, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedLocalRCV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocalRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocalRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalRCV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_R, PyObject *__pyx_v_C, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
   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("setValuesBlockedLocalRCV", 0);
 
-  /* "PETSc/Mat.pyx":856
+  /* "PETSc/Mat.pyx":873
  * 
  *     def setValuesBlockedLocalRCV(self, R, C, V, addv=None):
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 1)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(__pyx_v_self->mat, __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv, 1, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(__pyx_v_self->mat, __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv, 1, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 873, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":855
+  /* "PETSc/Mat.pyx":872
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 1)
  * 
  *     def setValuesBlockedLocalRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122232,7 +123712,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocalRCV(stru
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":858
+/* "PETSc/Mat.pyx":875
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 1)
  * 
  *     def setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -122241,17 +123721,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocalRCV(stru
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalIJV[] = "Mat.setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalIJV[] = "Mat.setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_I = 0;
   PyObject *__pyx_v_J = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_v_rowmap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlockedLocalIJV (wrapper)", 0);
@@ -122280,12 +123757,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalIJV(PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, 1); __PYX_ERR(33, 875, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, 2); __PYX_ERR(33, 875, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -122299,7 +123776,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalIJV(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalIJV") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalIJV") < 0)) __PYX_ERR(33, 875, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -122320,38 +123797,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalIJV(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 875, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedLocalIJV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalIJV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalIJV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalIJV(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv, PyObject *__pyx_v_rowmap) {
   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("setValuesBlockedLocalIJV", 0);
 
-  /* "PETSc/Mat.pyx":859
+  /* "PETSc/Mat.pyx":876
  * 
  *     def setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None):
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 1)             # <<<<<<<<<<<<<<
  * 
  *     def setValuesBlockedLocalCSR(self, I, J, V, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap, 1, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, __pyx_v_rowmap, 1, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 876, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":858
+  /* "PETSc/Mat.pyx":875
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 1)
  * 
  *     def setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -122371,7 +123845,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalIJV(stru
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":861
+/* "PETSc/Mat.pyx":878
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 1)
  * 
  *     def setValuesBlockedLocalCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122380,16 +123854,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalIJV(stru
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalCSR[] = "Mat.setValuesBlockedLocalCSR(self, I, J, V, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalCSR[] = "Mat.setValuesBlockedLocalCSR(self, I, J, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_I = 0;
   PyObject *__pyx_v_J = 0;
   PyObject *__pyx_v_V = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValuesBlockedLocalCSR (wrapper)", 0);
@@ -122416,12 +123887,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalCSR(PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, 1); __PYX_ERR(33, 878, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, 2); __PYX_ERR(33, 878, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -122430,7 +123901,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalCSR(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalCSR") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalCSR") < 0)) __PYX_ERR(33, 878, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -122449,38 +123920,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalCSR(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 878, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedLocalCSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalCSR(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_I, PyObject *__pyx_v_J, PyObject *__pyx_v_V, PyObject *__pyx_v_addv) {
   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("setValuesBlockedLocalCSR", 0);
 
-  /* "PETSc/Mat.pyx":862
+  /* "PETSc/Mat.pyx":879
  * 
  *     def setValuesBlockedLocalCSR(self, I, J, V, addv=None):
  *         matsetvalues_csr(self.mat, I, J, V, addv, 1, 1)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, 1, 1); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 862; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(__pyx_v_self->mat, __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv, 1, 1); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 879, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":861
+  /* "PETSc/Mat.pyx":878
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 1)
  * 
  *     def setValuesBlockedLocalCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122500,7 +123968,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalCSR(stru
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":868
+/* "PETSc/Mat.pyx":885
  *     Stencil = _Mat_Stencil
  * 
  *     def setStencil(self, dims, starts=None, dof=1):             # <<<<<<<<<<<<<<
@@ -122509,15 +123977,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalCSR(stru
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_200setStencil[] = "Mat.setStencil(self, dims, starts=None, dof=1)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_202setStencil[] = "Mat.setStencil(self, dims, starts=None, dof=1)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_dims = 0;
   PyObject *__pyx_v_starts = 0;
   PyObject *__pyx_v_dof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setStencil (wrapper)", 0);
@@ -122553,7 +124018,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setStencil(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStencil") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStencil") < 0)) __PYX_ERR(33, 885, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -122570,20 +124035,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setStencil(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setStencil", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setStencil", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 885, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setStencil", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_dims, __pyx_v_starts, __pyx_v_dof);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_dims, __pyx_v_starts, __pyx_v_dof);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_starts, PyObject *__pyx_v_dof) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_starts, PyObject *__pyx_v_dof) {
   PetscInt __pyx_v_ndim;
   PetscInt __pyx_v_ndof;
   PetscInt __pyx_v_cdims[3];
@@ -122594,12 +124059,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(struct PyPetscMatO
   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("setStencil", 0);
 
-  /* "PETSc/Mat.pyx":871
+  /* "PETSc/Mat.pyx":888
  *         cdef PetscInt ndim, ndof
  *         cdef PetscInt cdims[3], cstarts[3]
  *         cdims[0] = cdims[1] = cdims[2] = 1             # <<<<<<<<<<<<<<
@@ -122610,7 +124072,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(struct PyPetscMatO
   (__pyx_v_cdims[1]) = 1;
   (__pyx_v_cdims[2]) = 1;
 
-  /* "PETSc/Mat.pyx":872
+  /* "PETSc/Mat.pyx":889
  *         cdef PetscInt cdims[3], cstarts[3]
  *         cdims[0] = cdims[1] = cdims[2] = 1
  *         cstarts[0] = cstarts[1] = cstarts[2] = 0             # <<<<<<<<<<<<<<
@@ -122621,27 +124083,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(struct PyPetscMatO
   (__pyx_v_cstarts[1]) = 0;
   (__pyx_v_cstarts[2]) = 0;
 
-  /* "PETSc/Mat.pyx":873
+  /* "PETSc/Mat.pyx":890
  *         cdims[0] = cdims[1] = cdims[2] = 1
  *         cstarts[0] = cstarts[1] = cstarts[2] = 0
  *         ndim = asDims(dims, &cdims[0], &cdims[1], &cdims[2])             # <<<<<<<<<<<<<<
  *         ndof = asInt(dof)
  *         if starts is not None:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_dims, (&(__pyx_v_cdims[0])), (&(__pyx_v_cdims[1])), (&(__pyx_v_cdims[2]))); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_dims, (&(__pyx_v_cdims[0])), (&(__pyx_v_cdims[1])), (&(__pyx_v_cdims[2]))); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 890, __pyx_L1_error)
   __pyx_v_ndim = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":874
+  /* "PETSc/Mat.pyx":891
  *         cstarts[0] = cstarts[1] = cstarts[2] = 0
  *         ndim = asDims(dims, &cdims[0], &cdims[1], &cdims[2])
  *         ndof = asInt(dof)             # <<<<<<<<<<<<<<
  *         if starts is not None:
  *             asDims(dims, &cstarts[0], &cstarts[1], &cstarts[2])
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 891, __pyx_L1_error)
   __pyx_v_ndof = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":875
+  /* "PETSc/Mat.pyx":892
  *         ndim = asDims(dims, &cdims[0], &cdims[1], &cdims[2])
  *         ndof = asInt(dof)
  *         if starts is not None:             # <<<<<<<<<<<<<<
@@ -122652,28 +124114,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(struct PyPetscMatO
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":876
+    /* "PETSc/Mat.pyx":893
  *         ndof = asInt(dof)
  *         if starts is not None:
  *             asDims(dims, &cstarts[0], &cstarts[1], &cstarts[2])             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetStencil(self.mat, ndim, cdims, cstarts, ndof) )
  * 
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_dims, (&(__pyx_v_cstarts[0])), (&(__pyx_v_cstarts[1])), (&(__pyx_v_cstarts[2]))); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_dims, (&(__pyx_v_cstarts[0])), (&(__pyx_v_cstarts[1])), (&(__pyx_v_cstarts[2]))); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 893, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":892
+ *         ndim = asDims(dims, &cdims[0], &cdims[1], &cdims[2])
+ *         ndof = asInt(dof)
+ *         if starts is not None:             # <<<<<<<<<<<<<<
+ *             asDims(dims, &cstarts[0], &cstarts[1], &cstarts[2])
+ *         CHKERR( MatSetStencil(self.mat, ndim, cdims, cstarts, ndof) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":877
+  /* "PETSc/Mat.pyx":894
  *         if starts is not None:
  *             asDims(dims, &cstarts[0], &cstarts[1], &cstarts[2])
  *         CHKERR( MatSetStencil(self.mat, ndim, cdims, cstarts, ndof) )             # <<<<<<<<<<<<<<
  * 
  *     def setValueStencil(self, row, col, value, addv=None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetStencil(__pyx_v_self->mat, __pyx_v_ndim, __pyx_v_cdims, __pyx_v_cstarts, __pyx_v_ndof)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetStencil(__pyx_v_self->mat, __pyx_v_ndim, __pyx_v_cdims, __pyx_v_cstarts, __pyx_v_ndof)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 894, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":868
+  /* "PETSc/Mat.pyx":885
  *     Stencil = _Mat_Stencil
  * 
  *     def setStencil(self, dims, starts=None, dof=1):             # <<<<<<<<<<<<<<
@@ -122693,7 +124161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":879
+/* "PETSc/Mat.pyx":896
  *         CHKERR( MatSetStencil(self.mat, ndim, cdims, cstarts, ndof) )
  * 
  *     def setValueStencil(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -122702,16 +124170,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setStencil(struct PyPetscMatO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setValueStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_202setValueStencil[] = "Mat.setValueStencil(self, row, col, value, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setValueStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_204setValueStencil[] = "Mat.setValueStencil(self, row, col, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_row = 0;
   PyObject *__pyx_v_col = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValueStencil (wrapper)", 0);
@@ -122738,12 +124203,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setValueStencil(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_col)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, 1); __PYX_ERR(33, 896, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, 2); __PYX_ERR(33, 896, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -122752,7 +124217,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setValueStencil(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueStencil") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueStencil") < 0)) __PYX_ERR(33, 896, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -122771,20 +124236,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setValueStencil(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 896, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValueStencil", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_202setValueStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_204setValueStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setValueStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
   struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_r = 0;
   struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_c = 0;
   InsertMode __pyx_v_im;
@@ -122792,51 +124257,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setValueStencil(struct PyPets
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   InsertMode __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setValueStencil", 0);
 
-  /* "PETSc/Mat.pyx":880
+  /* "PETSc/Mat.pyx":897
  * 
  *     def setValueStencil(self, row, col, value, addv=None):
  *         cdef _Mat_Stencil r = row, c = col             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         matsetvaluestencil(self.mat, r, c, value, im, 0)
  */
-  if (!(likely(((__pyx_v_row) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_row, __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_v_row) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_row, __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))))) __PYX_ERR(33, 897, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_row;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_r = ((struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *)__pyx_t_1);
   __pyx_t_1 = 0;
-  if (!(likely(((__pyx_v_col) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_col, __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_v_col) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_col, __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))))) __PYX_ERR(33, 897, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_col;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_c = ((struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":881
+  /* "PETSc/Mat.pyx":898
  *     def setValueStencil(self, row, col, value, addv=None):
  *         cdef _Mat_Stencil r = row, c = col
  *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
  *         matsetvaluestencil(self.mat, r, c, value, im, 0)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)-1L))) __PYX_ERR(33, 898, __pyx_L1_error)
   __pyx_v_im = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":882
+  /* "PETSc/Mat.pyx":899
  *         cdef _Mat_Stencil r = row, c = col
  *         cdef PetscInsertMode im = insertmode(addv)
  *         matsetvaluestencil(self.mat, r, c, value, im, 0)             # <<<<<<<<<<<<<<
  * 
  *     def setValueBlockedStencil(self, row, col, value, addv=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvaluestencil(__pyx_v_self->mat, __pyx_v_r, __pyx_v_c, __pyx_v_value, __pyx_v_im, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvaluestencil(__pyx_v_self->mat, __pyx_v_r, __pyx_v_c, __pyx_v_value, __pyx_v_im, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 899, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":879
+  /* "PETSc/Mat.pyx":896
  *         CHKERR( MatSetStencil(self.mat, ndim, cdims, cstarts, ndof) )
  * 
  *     def setValueStencil(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -122859,7 +124321,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setValueStencil(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":884
+/* "PETSc/Mat.pyx":901
  *         matsetvaluestencil(self.mat, r, c, value, im, 0)
  * 
  *     def setValueBlockedStencil(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -122868,16 +124330,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setValueStencil(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueBlockedStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_204setValueBlockedStencil[] = "Mat.setValueBlockedStencil(self, row, col, value, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueBlockedStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueBlockedStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_206setValueBlockedStencil[] = "Mat.setValueBlockedStencil(self, row, col, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueBlockedStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_row = 0;
   PyObject *__pyx_v_col = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setValueBlockedStencil (wrapper)", 0);
@@ -122904,12 +124363,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueBlockedStencil(PyObje
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_col)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, 1); __PYX_ERR(33, 901, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, 2); __PYX_ERR(33, 901, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -122918,7 +124377,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueBlockedStencil(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueBlockedStencil") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueBlockedStencil") < 0)) __PYX_ERR(33, 901, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -122937,20 +124396,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueBlockedStencil(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 901, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValueBlockedStencil", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_204setValueBlockedStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_206setValueBlockedStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueBlockedStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206setValueBlockedStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
   struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_r = 0;
   struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *__pyx_v_c = 0;
   InsertMode __pyx_v_im;
@@ -122958,51 +124417,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueBlockedStencil(struct
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   InsertMode __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setValueBlockedStencil", 0);
 
-  /* "PETSc/Mat.pyx":885
+  /* "PETSc/Mat.pyx":902
  * 
  *     def setValueBlockedStencil(self, row, col, value, addv=None):
  *         cdef _Mat_Stencil r = row, c = col             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         matsetvaluestencil(self.mat, r, c, value, im, 1)
  */
-  if (!(likely(((__pyx_v_row) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_row, __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_v_row) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_row, __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))))) __PYX_ERR(33, 902, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_row;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_r = ((struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *)__pyx_t_1);
   __pyx_t_1 = 0;
-  if (!(likely(((__pyx_v_col) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_col, __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_v_col) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_col, __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))))) __PYX_ERR(33, 902, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_col;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_c = ((struct __pyx_obj_8petsc4py_5PETSc__Mat_Stencil *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":886
+  /* "PETSc/Mat.pyx":903
  *     def setValueBlockedStencil(self, row, col, value, addv=None):
  *         cdef _Mat_Stencil r = row, c = col
  *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
  *         matsetvaluestencil(self.mat, r, c, value, im, 1)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)-1L))) __PYX_ERR(33, 903, __pyx_L1_error)
   __pyx_v_im = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":887
+  /* "PETSc/Mat.pyx":904
  *         cdef _Mat_Stencil r = row, c = col
  *         cdef PetscInsertMode im = insertmode(addv)
  *         matsetvaluestencil(self.mat, r, c, value, im, 1)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvaluestencil(__pyx_v_self->mat, __pyx_v_r, __pyx_v_c, __pyx_v_value, __pyx_v_im, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matsetvaluestencil(__pyx_v_self->mat, __pyx_v_r, __pyx_v_c, __pyx_v_value, __pyx_v_im, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 904, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":884
+  /* "PETSc/Mat.pyx":901
  *         matsetvaluestencil(self.mat, r, c, value, im, 0)
  * 
  *     def setValueBlockedStencil(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -123025,7 +124481,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueBlockedStencil(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":891
+/* "PETSc/Mat.pyx":908
  *     #
  * 
  *     def zeroRows(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -123034,16 +124490,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueBlockedStencil(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207zeroRows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_206zeroRows[] = "Mat.zeroRows(self, rows, diag=1, Vec x=None, Vec b=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207zeroRows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_208zeroRows[] = "Mat.zeroRows(self, rows, diag=1, Vec x=None, Vec b=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rows = 0;
   PyObject *__pyx_v_diag = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_b = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("zeroRows (wrapper)", 0);
@@ -123086,7 +124539,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207zeroRows(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRows") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRows") < 0)) __PYX_ERR(33, 908, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -123105,15 +124558,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207zeroRows(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("zeroRows", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("zeroRows", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 908, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.zeroRows", __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, 1, "x", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(33, 908, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(33, 908, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
 
   /* function exit code */
   goto __pyx_L0;
@@ -123124,7 +124577,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207zeroRows(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b) {
   PetscInt __pyx_v_ni;
   PetscInt *__pyx_v_i;
   PetscScalar __pyx_v_sval;
@@ -123138,13 +124591,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObj
   Vec __pyx_t_4;
   int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("zeroRows", 0);
   __Pyx_INCREF(__pyx_v_rows);
 
-  /* "PETSc/Mat.pyx":892
+  /* "PETSc/Mat.pyx":909
  * 
  *     def zeroRows(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -123154,17 +124604,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObj
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/Mat.pyx":893
+  /* "PETSc/Mat.pyx":910
  *     def zeroRows(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)             # <<<<<<<<<<<<<<
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 910, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":894
+  /* "PETSc/Mat.pyx":911
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL             # <<<<<<<<<<<<<<
@@ -123174,7 +124624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObj
   __pyx_v_xvec = NULL;
   __pyx_v_bvec = NULL;
 
-  /* "PETSc/Mat.pyx":895
+  /* "PETSc/Mat.pyx":912
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec             # <<<<<<<<<<<<<<
@@ -123186,11 +124636,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObj
   if (__pyx_t_3) {
     __pyx_t_4 = __pyx_v_x->vec;
     __pyx_v_xvec = __pyx_t_4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":896
+  /* "PETSc/Mat.pyx":913
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec             # <<<<<<<<<<<<<<
@@ -123202,57 +124650,63 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObj
   if (__pyx_t_2) {
     __pyx_t_4 = __pyx_v_b->vec;
     __pyx_v_bvec = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":897
+  /* "PETSc/Mat.pyx":914
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
  *             CHKERR( MatZeroRowsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_rows, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_rows, __pyx_ptype_8petsc4py_5PETSc_IS); 
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":898
+    /* "PETSc/Mat.pyx":915
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):
  *             CHKERR( MatZeroRowsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )             # <<<<<<<<<<<<<<
  *         else:
  *             rows = iarray_i(rows, &ni, &i)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsIS(__pyx_v_self->mat, ((struct PyPetscISObject *)__pyx_v_rows)->iset, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsIS(__pyx_v_self->mat, ((struct PyPetscISObject *)__pyx_v_rows)->iset, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 915, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":914
+ *         if x is not None: xvec = x.vec
+ *         if b is not None: bvec = b.vec
+ *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
+ *             CHKERR( MatZeroRowsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
+ *         else:
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":900
+  /* "PETSc/Mat.pyx":917
  *             CHKERR( MatZeroRowsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  *             rows = iarray_i(rows, &ni, &i)             # <<<<<<<<<<<<<<
  *             CHKERR( MatZeroRows(self.mat, ni, i, sval, xvec, bvec) )
  * 
  */
-    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_rows, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_rows, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_6)) __PYX_ERR(33, 917, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "PETSc/Mat.pyx":901
+    /* "PETSc/Mat.pyx":918
  *         else:
  *             rows = iarray_i(rows, &ni, &i)
  *             CHKERR( MatZeroRows(self.mat, ni, i, sval, xvec, bvec) )             # <<<<<<<<<<<<<<
  * 
  *     def zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None):
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRows(__pyx_v_self->mat, __pyx_v_ni, __pyx_v_i, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 901; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRows(__pyx_v_self->mat, __pyx_v_ni, __pyx_v_i, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 918, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":891
+  /* "PETSc/Mat.pyx":908
  *     #
  * 
  *     def zeroRows(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -123274,7 +124728,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":903
+/* "PETSc/Mat.pyx":920
  *             CHKERR( MatZeroRows(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -123283,16 +124737,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206zeroRows(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRowsLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_208zeroRowsLocal[] = "Mat.zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRowsLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_210zeroRowsLocal[] = "Mat.zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rows = 0;
   PyObject *__pyx_v_diag = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_b = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("zeroRowsLocal (wrapper)", 0);
@@ -123335,7 +124786,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRowsLocal(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRowsLocal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRowsLocal") < 0)) __PYX_ERR(33, 920, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -123354,15 +124805,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRowsLocal(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("zeroRowsLocal", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("zeroRowsLocal", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 920, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.zeroRowsLocal", __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, 1, "x", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(33, 920, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(33, 920, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
 
   /* function exit code */
   goto __pyx_L0;
@@ -123373,7 +124824,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRowsLocal(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b) {
   PetscInt __pyx_v_ni;
   PetscInt *__pyx_v_i;
   PetscScalar __pyx_v_sval;
@@ -123387,13 +124838,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscM
   Vec __pyx_t_4;
   int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("zeroRowsLocal", 0);
   __Pyx_INCREF(__pyx_v_rows);
 
-  /* "PETSc/Mat.pyx":904
+  /* "PETSc/Mat.pyx":921
  * 
  *     def zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -123403,17 +124851,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscM
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/Mat.pyx":905
+  /* "PETSc/Mat.pyx":922
  *     def zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)             # <<<<<<<<<<<<<<
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 922, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":906
+  /* "PETSc/Mat.pyx":923
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL             # <<<<<<<<<<<<<<
@@ -123423,7 +124871,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscM
   __pyx_v_xvec = NULL;
   __pyx_v_bvec = NULL;
 
-  /* "PETSc/Mat.pyx":907
+  /* "PETSc/Mat.pyx":924
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec             # <<<<<<<<<<<<<<
@@ -123435,11 +124883,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscM
   if (__pyx_t_3) {
     __pyx_t_4 = __pyx_v_x->vec;
     __pyx_v_xvec = __pyx_t_4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":908
+  /* "PETSc/Mat.pyx":925
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec             # <<<<<<<<<<<<<<
@@ -123451,57 +124897,63 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscM
   if (__pyx_t_2) {
     __pyx_t_4 = __pyx_v_b->vec;
     __pyx_v_bvec = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":909
+  /* "PETSc/Mat.pyx":926
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
  *             CHKERR( MatZeroRowsLocalIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_rows, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_rows, __pyx_ptype_8petsc4py_5PETSc_IS); 
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":910
+    /* "PETSc/Mat.pyx":927
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):
  *             CHKERR( MatZeroRowsLocalIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )             # <<<<<<<<<<<<<<
  *         else:
  *             rows = iarray_i(rows, &ni, &i)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsLocalIS(__pyx_v_self->mat, ((struct PyPetscISObject *)__pyx_v_rows)->iset, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsLocalIS(__pyx_v_self->mat, ((struct PyPetscISObject *)__pyx_v_rows)->iset, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 927, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":926
+ *         if x is not None: xvec = x.vec
+ *         if b is not None: bvec = b.vec
+ *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
+ *             CHKERR( MatZeroRowsLocalIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
+ *         else:
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":912
+  /* "PETSc/Mat.pyx":929
  *             CHKERR( MatZeroRowsLocalIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  *             rows = iarray_i(rows, &ni, &i)             # <<<<<<<<<<<<<<
  *             CHKERR( MatZeroRowsLocal(self.mat, ni, i, sval, xvec, bvec) )
  * 
  */
-    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_rows, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 912; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_rows, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_6)) __PYX_ERR(33, 929, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "PETSc/Mat.pyx":913
+    /* "PETSc/Mat.pyx":930
  *         else:
  *             rows = iarray_i(rows, &ni, &i)
  *             CHKERR( MatZeroRowsLocal(self.mat, ni, i, sval, xvec, bvec) )             # <<<<<<<<<<<<<<
  * 
  *     def zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None):
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsLocal(__pyx_v_self->mat, __pyx_v_ni, __pyx_v_i, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 913; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsLocal(__pyx_v_self->mat, __pyx_v_ni, __pyx_v_i, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 930, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":903
+  /* "PETSc/Mat.pyx":920
  *             CHKERR( MatZeroRows(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -123523,7 +124975,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":915
+/* "PETSc/Mat.pyx":932
  *             CHKERR( MatZeroRowsLocal(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -123532,16 +124984,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRowsLocal(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_210zeroRowsColumns[] = "Mat.zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_212zeroRowsColumns[] = "Mat.zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rows = 0;
   PyObject *__pyx_v_diag = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_b = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("zeroRowsColumns (wrapper)", 0);
@@ -123584,7 +125033,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsColumns(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRowsColumns") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRowsColumns") < 0)) __PYX_ERR(33, 932, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -123603,15 +125052,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsColumns(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("zeroRowsColumns", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("zeroRowsColumns", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 932, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.zeroRowsColumns", __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, 1, "x", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(33, 932, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(33, 932, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
 
   /* function exit code */
   goto __pyx_L0;
@@ -123622,7 +125071,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsColumns(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_rows, PyObject *__pyx_v_diag, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b) {
   PetscInt __pyx_v_ni;
   PetscInt *__pyx_v_i;
   PetscScalar __pyx_v_sval;
@@ -123636,13 +125085,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPets
   Vec __pyx_t_4;
   int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("zeroRowsColumns", 0);
   __Pyx_INCREF(__pyx_v_rows);
 
-  /* "PETSc/Mat.pyx":916
+  /* "PETSc/Mat.pyx":933
  * 
  *     def zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -123652,17 +125098,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPets
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/Mat.pyx":917
+  /* "PETSc/Mat.pyx":934
  *     def zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)             # <<<<<<<<<<<<<<
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 917; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 934, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":918
+  /* "PETSc/Mat.pyx":935
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL             # <<<<<<<<<<<<<<
@@ -123672,7 +125118,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPets
   __pyx_v_xvec = NULL;
   __pyx_v_bvec = NULL;
 
-  /* "PETSc/Mat.pyx":919
+  /* "PETSc/Mat.pyx":936
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec             # <<<<<<<<<<<<<<
@@ -123684,11 +125130,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPets
   if (__pyx_t_3) {
     __pyx_t_4 = __pyx_v_x->vec;
     __pyx_v_xvec = __pyx_t_4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":920
+  /* "PETSc/Mat.pyx":937
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec             # <<<<<<<<<<<<<<
@@ -123700,57 +125144,63 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPets
   if (__pyx_t_2) {
     __pyx_t_4 = __pyx_v_b->vec;
     __pyx_v_bvec = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":921
+  /* "PETSc/Mat.pyx":938
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
  *             CHKERR( MatZeroRowsColumnsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_rows, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_rows, __pyx_ptype_8petsc4py_5PETSc_IS); 
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":922
+    /* "PETSc/Mat.pyx":939
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):
  *             CHKERR( MatZeroRowsColumnsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )             # <<<<<<<<<<<<<<
  *         else:
  *             rows = iarray_i(rows, &ni, &i)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsColumnsIS(__pyx_v_self->mat, ((struct PyPetscISObject *)__pyx_v_rows)->iset, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsColumnsIS(__pyx_v_self->mat, ((struct PyPetscISObject *)__pyx_v_rows)->iset, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 939, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":938
+ *         if x is not None: xvec = x.vec
+ *         if b is not None: bvec = b.vec
+ *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
+ *             CHKERR( MatZeroRowsColumnsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
+ *         else:
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":924
+  /* "PETSc/Mat.pyx":941
  *             CHKERR( MatZeroRowsColumnsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  *             rows = iarray_i(rows, &ni, &i)             # <<<<<<<<<<<<<<
  *             CHKERR( MatZeroRowsColumns(self.mat, ni, i, sval, xvec, bvec) )
  * 
  */
-    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_rows, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_rows, (&__pyx_v_ni), (&__pyx_v_i))); if (unlikely(!__pyx_t_6)) __PYX_ERR(33, 941, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "PETSc/Mat.pyx":925
+    /* "PETSc/Mat.pyx":942
  *         else:
  *             rows = iarray_i(rows, &ni, &i)
  *             CHKERR( MatZeroRowsColumns(self.mat, ni, i, sval, xvec, bvec) )             # <<<<<<<<<<<<<<
  * 
  *     def storeValues(self):
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsColumns(__pyx_v_self->mat, __pyx_v_ni, __pyx_v_i, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 925; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroRowsColumns(__pyx_v_self->mat, __pyx_v_ni, __pyx_v_i, __pyx_v_sval, __pyx_v_xvec, __pyx_v_bvec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 942, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":915
+  /* "PETSc/Mat.pyx":932
  *             CHKERR( MatZeroRowsLocal(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -123772,7 +125222,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":927
+/* "PETSc/Mat.pyx":944
  *             CHKERR( MatZeroRowsColumns(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def storeValues(self):             # <<<<<<<<<<<<<<
@@ -123781,41 +125231,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsColumns(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213storeValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_212storeValues[] = "Mat.storeValues(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213storeValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_215storeValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_214storeValues[] = "Mat.storeValues(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_215storeValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("storeValues (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("storeValues", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "storeValues", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_212storeValues(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_214storeValues(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212storeValues(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214storeValues(struct PyPetscMatObject *__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("storeValues", 0);
 
-  /* "PETSc/Mat.pyx":928
+  /* "PETSc/Mat.pyx":945
  * 
  *     def storeValues(self):
  *         CHKERR( MatStoreValues(self.mat) )             # <<<<<<<<<<<<<<
  * 
  *     def retrieveValues(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatStoreValues(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatStoreValues(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 945, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":927
+  /* "PETSc/Mat.pyx":944
  *             CHKERR( MatZeroRowsColumns(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def storeValues(self):             # <<<<<<<<<<<<<<
@@ -123835,7 +125282,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212storeValues(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":930
+/* "PETSc/Mat.pyx":947
  *         CHKERR( MatStoreValues(self.mat) )
  * 
  *     def retrieveValues(self):             # <<<<<<<<<<<<<<
@@ -123844,41 +125291,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212storeValues(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_215retrieveValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_214retrieveValues[] = "Mat.retrieveValues(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_215retrieveValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_217retrieveValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_216retrieveValues[] = "Mat.retrieveValues(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_217retrieveValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("retrieveValues (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("retrieveValues", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "retrieveValues", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_214retrieveValues(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_216retrieveValues(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214retrieveValues(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216retrieveValues(struct PyPetscMatObject *__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("retrieveValues", 0);
 
-  /* "PETSc/Mat.pyx":931
+  /* "PETSc/Mat.pyx":948
  * 
  *     def retrieveValues(self):
  *         CHKERR( MatRetrieveValues(self.mat) )             # <<<<<<<<<<<<<<
  * 
  *     def assemblyBegin(self, assembly=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRetrieveValues(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRetrieveValues(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 948, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":930
+  /* "PETSc/Mat.pyx":947
  *         CHKERR( MatStoreValues(self.mat) )
  * 
  *     def retrieveValues(self):             # <<<<<<<<<<<<<<
@@ -123898,7 +125342,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214retrieveValues(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":933
+/* "PETSc/Mat.pyx":950
  *         CHKERR( MatRetrieveValues(self.mat) )
  * 
  *     def assemblyBegin(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -123907,13 +125351,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214retrieveValues(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_217assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_216assemblyBegin[] = "Mat.assemblyBegin(self, assembly=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_217assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_218assemblyBegin[] = "Mat.assemblyBegin(self, assembly=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_assembly = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("assemblyBegin (wrapper)", 0);
@@ -123938,7 +125379,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_217assemblyBegin(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemblyBegin") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemblyBegin") < 0)) __PYX_ERR(33, 950, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -123951,50 +125392,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_217assemblyBegin(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("assemblyBegin", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("assemblyBegin", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 950, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.assemblyBegin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_216assemblyBegin(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyBegin(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216assemblyBegin(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyBegin(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
   MatAssemblyType __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   MatAssemblyType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("assemblyBegin", 0);
 
-  /* "PETSc/Mat.pyx":934
+  /* "PETSc/Mat.pyx":951
  * 
  *     def assemblyBegin(self, assembly=None):
  *         cdef PetscMatAssemblyType flag = assemblytype(assembly)             # <<<<<<<<<<<<<<
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)-1L))) __PYX_ERR(33, 951, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":935
+  /* "PETSc/Mat.pyx":952
  *     def assemblyBegin(self, assembly=None):
  *         cdef PetscMatAssemblyType flag = assemblytype(assembly)
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def assemblyEnd(self, assembly=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyBegin(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyBegin(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 952, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":933
+  /* "PETSc/Mat.pyx":950
  *         CHKERR( MatRetrieveValues(self.mat) )
  * 
  *     def assemblyBegin(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -124014,7 +125452,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216assemblyBegin(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":937
+/* "PETSc/Mat.pyx":954
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )
  * 
  *     def assemblyEnd(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -124023,13 +125461,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216assemblyBegin(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_218assemblyEnd[] = "Mat.assemblyEnd(self, assembly=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_220assemblyEnd[] = "Mat.assemblyEnd(self, assembly=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_assembly = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("assemblyEnd (wrapper)", 0);
@@ -124054,7 +125489,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyEnd(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemblyEnd") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 937; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemblyEnd") < 0)) __PYX_ERR(33, 954, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -124067,50 +125502,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyEnd(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("assemblyEnd", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 937; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("assemblyEnd", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 954, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.assemblyEnd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyEnd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyEnd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyEnd(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyEnd(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
   MatAssemblyType __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   MatAssemblyType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("assemblyEnd", 0);
 
-  /* "PETSc/Mat.pyx":938
+  /* "PETSc/Mat.pyx":955
  * 
  *     def assemblyEnd(self, assembly=None):
  *         cdef PetscMatAssemblyType flag = assemblytype(assembly)             # <<<<<<<<<<<<<<
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)-1L))) __PYX_ERR(33, 955, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":939
+  /* "PETSc/Mat.pyx":956
  *     def assemblyEnd(self, assembly=None):
  *         cdef PetscMatAssemblyType flag = assemblytype(assembly)
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def assemble(self, assembly=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyEnd(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 939; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyEnd(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 956, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":937
+  /* "PETSc/Mat.pyx":954
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )
  * 
  *     def assemblyEnd(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -124130,7 +125562,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyEnd(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":941
+/* "PETSc/Mat.pyx":958
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  *     def assemble(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -124139,13 +125571,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyEnd(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_220assemble[] = "Mat.assemble(self, assembly=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_222assemble[] = "Mat.assemble(self, assembly=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_assembly = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("assemble (wrapper)", 0);
@@ -124170,7 +125599,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemble(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemble") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 941; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemble") < 0)) __PYX_ERR(33, 958, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -124183,59 +125612,56 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemble(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("assemble", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 941; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("assemble", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 958, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.assemble", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_220assemble(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_222assemble(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemble(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222assemble(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
   MatAssemblyType __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   MatAssemblyType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("assemble", 0);
 
-  /* "PETSc/Mat.pyx":942
+  /* "PETSc/Mat.pyx":959
  * 
  *     def assemble(self, assembly=None):
  *         cdef PetscMatAssemblyType flag = assemblytype(assembly)             # <<<<<<<<<<<<<<
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)-1L))) __PYX_ERR(33, 959, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":943
+  /* "PETSc/Mat.pyx":960
  *     def assemble(self, assembly=None):
  *         cdef PetscMatAssemblyType flag = assemblytype(assembly)
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyBegin(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 943; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyBegin(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 960, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":944
+  /* "PETSc/Mat.pyx":961
  *         cdef PetscMatAssemblyType flag = assemblytype(assembly)
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def isAssembled(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyEnd(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyEnd(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 961, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":941
+  /* "PETSc/Mat.pyx":958
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  *     def assemble(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -124255,7 +125681,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemble(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":946
+/* "PETSc/Mat.pyx":963
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  *     def isAssembled(self):             # <<<<<<<<<<<<<<
@@ -124264,34 +125690,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemble(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223isAssembled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_222isAssembled[] = "Mat.isAssembled(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223isAssembled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_225isAssembled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_224isAssembled[] = "Mat.isAssembled(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_225isAssembled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("isAssembled (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("isAssembled", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isAssembled", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_222isAssembled(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_224isAssembled(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222isAssembled(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224isAssembled(struct PyPetscMatObject *__pyx_v_self) {
   PetscBool __pyx_v_assembled;
   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("isAssembled", 0);
 
-  /* "PETSc/Mat.pyx":947
+  /* "PETSc/Mat.pyx":964
  * 
  *     def isAssembled(self):
  *         cdef PetscBool assembled = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -124300,16 +125723,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222isAssembled(struct PyPetscMat
  */
   __pyx_v_assembled = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":948
+  /* "PETSc/Mat.pyx":965
  *     def isAssembled(self):
  *         cdef PetscBool assembled = PETSC_FALSE
  *         CHKERR( MatAssembled(self.mat, &assembled) )             # <<<<<<<<<<<<<<
  *         return <bint> assembled
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssembled(__pyx_v_self->mat, (&__pyx_v_assembled))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 948; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssembled(__pyx_v_self->mat, (&__pyx_v_assembled))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 965, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":949
+  /* "PETSc/Mat.pyx":966
  *         cdef PetscBool assembled = PETSC_FALSE
  *         CHKERR( MatAssembled(self.mat, &assembled) )
  *         return <bint> assembled             # <<<<<<<<<<<<<<
@@ -124317,13 +125740,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222isAssembled(struct PyPetscMat
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_assembled); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 949; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_assembled); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 966, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":946
+  /* "PETSc/Mat.pyx":963
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  *     def isAssembled(self):             # <<<<<<<<<<<<<<
@@ -124342,7 +125765,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222isAssembled(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":952
+/* "PETSc/Mat.pyx":969
  *     #
  * 
  *     def createVecs(self, side=None):             # <<<<<<<<<<<<<<
@@ -124351,13 +125774,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222isAssembled(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_225createVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_224createVecs[] = "Mat.createVecs(self, side=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_225createVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_226createVecs[] = "Mat.createVecs(self, side=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_side = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createVecs (wrapper)", 0);
@@ -124382,7 +125802,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_225createVecs(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createVecs") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createVecs") < 0)) __PYX_ERR(33, 969, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -124395,20 +125815,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_225createVecs(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createVecs", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createVecs", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 969, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createVecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_side);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_side);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_side) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_side) {
   struct PyPetscVecObject *__pyx_v_vecr = 0;
   struct PyPetscVecObject *__pyx_v_vecl = 0;
   PyObject *__pyx_r = NULL;
@@ -124418,12 +125838,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createVecs", 0);
 
-  /* "PETSc/Mat.pyx":954
+  /* "PETSc/Mat.pyx":971
  *     def createVecs(self, side=None):
  *         cdef Vec vecr, vecl
  *         if side is None:             # <<<<<<<<<<<<<<
@@ -124434,32 +125851,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":955
+    /* "PETSc/Mat.pyx":972
  *         cdef Vec vecr, vecl
  *         if side is None:
  *             vecr = Vec(); vecl = Vec();             # <<<<<<<<<<<<<<
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )
  *             return (vecr, vecl)
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 972, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_vecr = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 972, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_vecl = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/Mat.pyx":956
+    /* "PETSc/Mat.pyx":973
  *         if side is None:
  *             vecr = Vec(); vecl = Vec();
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )             # <<<<<<<<<<<<<<
  *             return (vecr, vecl)
  *         elif side in ('r', 'R', 'right', 'Right', 'RIGHT'):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, (&__pyx_v_vecr->vec), (&__pyx_v_vecl->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, (&__pyx_v_vecr->vec), (&__pyx_v_vecl->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 973, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":957
+    /* "PETSc/Mat.pyx":974
  *             vecr = Vec(); vecl = Vec();
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )
  *             return (vecr, vecl)             # <<<<<<<<<<<<<<
@@ -124467,7 +125884,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
  *             vecr = Vec()
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 974, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(((PyObject *)__pyx_v_vecr));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_vecr));
@@ -124478,9 +125895,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
+
+    /* "PETSc/Mat.pyx":971
+ *     def createVecs(self, side=None):
+ *         cdef Vec vecr, vecl
+ *         if side is None:             # <<<<<<<<<<<<<<
+ *             vecr = Vec(); vecl = Vec();
+ *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )
+ */
   }
 
-  /* "PETSc/Mat.pyx":958
+  /* "PETSc/Mat.pyx":975
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )
  *             return (vecr, vecl)
  *         elif side in ('r', 'R', 'right', 'Right', 'RIGHT'):             # <<<<<<<<<<<<<<
@@ -124489,59 +125914,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
  */
   __Pyx_INCREF(__pyx_v_side);
   __pyx_t_3 = __pyx_v_side;
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(33, 975, __pyx_L1_error)
   if (!__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_R, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_R, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(33, 975, __pyx_L1_error)
   if (!__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_right, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_right, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(33, 975, __pyx_L1_error)
   if (!__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Right, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Right, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(33, 975, __pyx_L1_error)
   if (!__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_RIGHT, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_RIGHT, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(33, 975, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_1;
   __pyx_L4_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Mat.pyx":959
+    /* "PETSc/Mat.pyx":976
  *             return (vecr, vecl)
  *         elif side in ('r', 'R', 'right', 'Right', 'RIGHT'):
  *             vecr = Vec()             # <<<<<<<<<<<<<<
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *             return vecr
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 976, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_vecr = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/Mat.pyx":960
+    /* "PETSc/Mat.pyx":977
  *         elif side in ('r', 'R', 'right', 'Right', 'RIGHT'):
  *             vecr = Vec()
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )             # <<<<<<<<<<<<<<
  *             return vecr
  *         elif side in ('l', 'L', 'left',  'Left', 'LEFT'):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, (&__pyx_v_vecr->vec), NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 960; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, (&__pyx_v_vecr->vec), NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 977, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":961
+    /* "PETSc/Mat.pyx":978
  *             vecr = Vec()
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *             return vecr             # <<<<<<<<<<<<<<
@@ -124552,9 +125977,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
     __Pyx_INCREF(((PyObject *)__pyx_v_vecr));
     __pyx_r = ((PyObject *)__pyx_v_vecr);
     goto __pyx_L0;
+
+    /* "PETSc/Mat.pyx":975
+ *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )
+ *             return (vecr, vecl)
+ *         elif side in ('r', 'R', 'right', 'Right', 'RIGHT'):             # <<<<<<<<<<<<<<
+ *             vecr = Vec()
+ *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
+ */
   }
 
-  /* "PETSc/Mat.pyx":962
+  /* "PETSc/Mat.pyx":979
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *             return vecr
  *         elif side in ('l', 'L', 'left',  'Left', 'LEFT'):             # <<<<<<<<<<<<<<
@@ -124563,59 +125996,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
  */
   __Pyx_INCREF(__pyx_v_side);
   __pyx_t_3 = __pyx_v_side;
-  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_l, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_l, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 979, __pyx_L1_error)
   if (!__pyx_t_2) {
   } else {
     __pyx_t_1 = __pyx_t_2;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_L, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_L, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 979, __pyx_L1_error)
   if (!__pyx_t_2) {
   } else {
     __pyx_t_1 = __pyx_t_2;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_left, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_left, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 979, __pyx_L1_error)
   if (!__pyx_t_2) {
   } else {
     __pyx_t_1 = __pyx_t_2;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Left, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_Left, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 979, __pyx_L1_error)
   if (!__pyx_t_2) {
   } else {
     __pyx_t_1 = __pyx_t_2;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_LEFT, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_LEFT, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 979, __pyx_L1_error)
   __pyx_t_1 = __pyx_t_2;
   __pyx_L9_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":963
+    /* "PETSc/Mat.pyx":980
  *             return vecr
  *         elif side in ('l', 'L', 'left',  'Left', 'LEFT'):
  *             vecl = Vec()             # <<<<<<<<<<<<<<
  *             CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )
  *             return vecl
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 963; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 980, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_vecl = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/Mat.pyx":964
+    /* "PETSc/Mat.pyx":981
  *         elif side in ('l', 'L', 'left',  'Left', 'LEFT'):
  *             vecl = Vec()
  *             CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )             # <<<<<<<<<<<<<<
  *             return vecl
  *         else:
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_vecl->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_vecl->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 981, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":965
+    /* "PETSc/Mat.pyx":982
  *             vecl = Vec()
  *             CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )
  *             return vecl             # <<<<<<<<<<<<<<
@@ -124626,32 +126059,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
     __Pyx_INCREF(((PyObject *)__pyx_v_vecl));
     __pyx_r = ((PyObject *)__pyx_v_vecl);
     goto __pyx_L0;
+
+    /* "PETSc/Mat.pyx":979
+ *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
+ *             return vecr
+ *         elif side in ('l', 'L', 'left',  'Left', 'LEFT'):             # <<<<<<<<<<<<<<
+ *             vecl = Vec()
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":967
+  /* "PETSc/Mat.pyx":984
  *             return vecl
  *         else:
  *             raise ValueError("side '%r' not understood" % side)             # <<<<<<<<<<<<<<
  * 
  *     def createVecRight(self):
  */
-    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_side_r_not_understood, __pyx_v_side); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_side_r_not_understood, __pyx_v_side); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 984, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 984, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 984, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[33]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(33, 984, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":952
+  /* "PETSc/Mat.pyx":969
  *     #
  * 
  *     def createVecs(self, side=None):             # <<<<<<<<<<<<<<
@@ -124673,7 +126114,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":969
+/* "PETSc/Mat.pyx":986
  *             raise ValueError("side '%r' not understood" % side)
  * 
  *     def createVecRight(self):             # <<<<<<<<<<<<<<
@@ -124682,55 +126123,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224createVecs(struct PyPetscMatO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecRight(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_226createVecRight[] = "Mat.createVecRight(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecRight(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecRight(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_228createVecRight[] = "Mat.createVecRight(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecRight(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createVecRight (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("createVecRight", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createVecRight", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_226createVecRight(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_228createVecRight(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecRight(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecRight(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vecr = 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("createVecRight", 0);
 
-  /* "PETSc/Mat.pyx":970
+  /* "PETSc/Mat.pyx":987
  * 
  *     def createVecRight(self):
  *         cdef Vec vecr = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *         return vecr
  */
-  __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[33]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 987, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vecr = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":971
+  /* "PETSc/Mat.pyx":988
  *     def createVecRight(self):
  *         cdef Vec vecr = Vec()
  *         CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )             # <<<<<<<<<<<<<<
  *         return vecr
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, (&__pyx_v_vecr->vec), NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, (&__pyx_v_vecr->vec), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 988, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":972
+  /* "PETSc/Mat.pyx":989
  *         cdef Vec vecr = Vec()
  *         CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *         return vecr             # <<<<<<<<<<<<<<
@@ -124742,7 +126180,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecRight(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_vecr);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":969
+  /* "PETSc/Mat.pyx":986
  *             raise ValueError("side '%r' not understood" % side)
  * 
  *     def createVecRight(self):             # <<<<<<<<<<<<<<
@@ -124762,7 +126200,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecRight(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":974
+/* "PETSc/Mat.pyx":991
  *         return vecr
  * 
  *     def createVecLeft(self):             # <<<<<<<<<<<<<<
@@ -124771,55 +126209,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecRight(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecLeft(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_228createVecLeft[] = "Mat.createVecLeft(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecLeft(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231createVecLeft(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_230createVecLeft[] = "Mat.createVecLeft(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231createVecLeft(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createVecLeft (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("createVecLeft", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createVecLeft", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_228createVecLeft(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_230createVecLeft(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecLeft(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecLeft(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vecl = 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("createVecLeft", 0);
 
-  /* "PETSc/Mat.pyx":975
+  /* "PETSc/Mat.pyx":992
  * 
  *     def createVecLeft(self):
  *         cdef Vec vecl = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )
  *         return vecl
  */
-  __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[33]; __pyx_lineno = 975; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 992, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vecl = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":976
+  /* "PETSc/Mat.pyx":993
  *     def createVecLeft(self):
  *         cdef Vec vecl = Vec()
  *         CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )             # <<<<<<<<<<<<<<
  *         return vecl
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_vecl->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_vecl->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 993, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":977
+  /* "PETSc/Mat.pyx":994
  *         cdef Vec vecl = Vec()
  *         CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )
  *         return vecl             # <<<<<<<<<<<<<<
@@ -124831,7 +126266,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecLeft(struct PyPetscM
   __pyx_r = ((PyObject *)__pyx_v_vecl);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":974
+  /* "PETSc/Mat.pyx":991
  *         return vecr
  * 
  *     def createVecLeft(self):             # <<<<<<<<<<<<<<
@@ -124851,7 +126286,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecLeft(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":985
+/* "PETSc/Mat.pyx":1002
  *     #
  * 
  *     def getColumnVector(self, column, Vec result=None):             # <<<<<<<<<<<<<<
@@ -124860,14 +126295,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecLeft(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231getColumnVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_230getColumnVector[] = "Mat.getColumnVector(self, column, Vec result=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231getColumnVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getColumnVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_232getColumnVector[] = "Mat.getColumnVector(self, column, Vec result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getColumnVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_column = 0;
   struct PyPetscVecObject *__pyx_v_result = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getColumnVector (wrapper)", 0);
@@ -124896,7 +126328,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231getColumnVector(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumnVector") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumnVector") < 0)) __PYX_ERR(33, 1002, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -124911,14 +126343,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231getColumnVector(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getColumnVector", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getColumnVector", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1002, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getColumnVector", __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_8petsc4py_5PETSc_Vec, 1, "result", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_230getColumnVector(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_column, __pyx_v_result);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "result", 0))) __PYX_ERR(33, 1002, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_column, __pyx_v_result);
 
   /* function exit code */
   goto __pyx_L0;
@@ -124929,7 +126361,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231getColumnVector(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230getColumnVector(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_column, struct PyPetscVecObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_column, struct PyPetscVecObject *__pyx_v_result) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -124938,23 +126370,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230getColumnVector(struct PyPets
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getColumnVector", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":986
+  /* "PETSc/Mat.pyx":1003
  * 
  *     def getColumnVector(self, column, Vec result=None):
  *         cdef PetscInt ival = asInt(column)             # <<<<<<<<<<<<<<
  *         if result is None:
  *             result = Vec()
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_column); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 986; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_column); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1003, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":987
+  /* "PETSc/Mat.pyx":1004
  *     def getColumnVector(self, column, Vec result=None):
  *         cdef PetscInt ival = asInt(column)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -124965,22 +126394,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230getColumnVector(struct PyPets
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":988
+    /* "PETSc/Mat.pyx":1005
  *         cdef PetscInt ival = asInt(column)
  *         if result is None:
  *             result = Vec()             # <<<<<<<<<<<<<<
  *         if result.vec == NULL:
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  */
-    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1005, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscVecObject *)__pyx_t_4));
     __pyx_t_4 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":1004
+ *     def getColumnVector(self, column, Vec result=None):
+ *         cdef PetscInt ival = asInt(column)
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Vec()
+ *         if result.vec == NULL:
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":989
+  /* "PETSc/Mat.pyx":1006
  *         if result is None:
  *             result = Vec()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -124990,40 +126425,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230getColumnVector(struct PyPets
   __pyx_t_3 = ((__pyx_v_result->vec == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":990
+    /* "PETSc/Mat.pyx":1007
  *             result = Vec()
  *         if result.vec == NULL:
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetColumnVector(self.mat, result.vec, ival) )
  *         return result
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1007, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":1006
+ *         if result is None:
+ *             result = Vec()
+ *         if result.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
+ *         CHKERR( MatGetColumnVector(self.mat, result.vec, ival) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":991
+  /* "PETSc/Mat.pyx":1008
  *         if result.vec == NULL:
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  *         CHKERR( MatGetColumnVector(self.mat, result.vec, ival) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetColumnVector(__pyx_v_self->mat, __pyx_v_result->vec, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetColumnVector(__pyx_v_self->mat, __pyx_v_result->vec, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1008, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":992
+  /* "PETSc/Mat.pyx":1009
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  *         CHKERR( MatGetColumnVector(self.mat, result.vec, ival) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def getDiagonal(self, Vec result=None):
+ *     def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":985
+  /* "PETSc/Mat.pyx":1002
  *     #
  * 
  *     def getColumnVector(self, column, Vec result=None):             # <<<<<<<<<<<<<<
@@ -125043,22 +126484,229 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230getColumnVector(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":994
+/* "PETSc/Mat.pyx":1011
+ *         return result
+ * 
+ *     def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _nsubcomm   = asInt(nsubcomm)
+ *         cdef MPI_Comm _subcomm    = MPI_COMM_NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRedundantMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_234getRedundantMatrix[] = "Mat.getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRedundantMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nsubcomm = 0;
+  PyObject *__pyx_v_subcomm = 0;
+  struct PyPetscMatObject *__pyx_v_out = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getRedundantMatrix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nsubcomm,&__pyx_n_s_subcomm,&__pyx_n_s_out,0};
+    PyObject* values[3] = {0,0,0};
+    values[1] = ((PyObject *)Py_None);
+    values[2] = (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  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_nsubcomm)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_subcomm);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRedundantMatrix") < 0)) __PYX_ERR(33, 1011, __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_nsubcomm = values[0];
+    __pyx_v_subcomm = values[1];
+    __pyx_v_out = ((struct PyPetscMatObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getRedundantMatrix", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1011, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getRedundantMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 1011, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsubcomm, __pyx_v_subcomm, __pyx_v_out);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_nsubcomm, PyObject *__pyx_v_subcomm, struct PyPetscMatObject *__pyx_v_out) {
+  PetscInt __pyx_v__nsubcomm;
+  MPI_Comm __pyx_v__subcomm;
+  MatReuse __pyx_v_reuse;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  MPI_Comm __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("getRedundantMatrix", 0);
+  __Pyx_INCREF((PyObject *)__pyx_v_out);
+
+  /* "PETSc/Mat.pyx":1012
+ * 
+ *     def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):
+ *         cdef PetscInt _nsubcomm   = asInt(nsubcomm)             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm _subcomm    = MPI_COMM_NULL
+ *         if subcomm:   _subcomm    = def_Comm(subcomm, PETSC_COMM_DEFAULT)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nsubcomm); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1012, __pyx_L1_error)
+  __pyx_v__nsubcomm = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1013
+ *     def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):
+ *         cdef PetscInt _nsubcomm   = asInt(nsubcomm)
+ *         cdef MPI_Comm _subcomm    = MPI_COMM_NULL             # <<<<<<<<<<<<<<
+ *         if subcomm:   _subcomm    = def_Comm(subcomm, PETSC_COMM_DEFAULT)
+ *         cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX
+ */
+  __pyx_v__subcomm = MPI_COMM_NULL;
+
+  /* "PETSc/Mat.pyx":1014
+ *         cdef PetscInt _nsubcomm   = asInt(nsubcomm)
+ *         cdef MPI_Comm _subcomm    = MPI_COMM_NULL
+ *         if subcomm:   _subcomm    = def_Comm(subcomm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX
+ *         if out is None: out       = Mat()
+ */
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_subcomm); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 1014, __pyx_L1_error)
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_subcomm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1014, __pyx_L1_error)
+    __pyx_v__subcomm = __pyx_t_3;
+  }
+
+  /* "PETSc/Mat.pyx":1015
+ *         cdef MPI_Comm _subcomm    = MPI_COMM_NULL
+ *         if subcomm:   _subcomm    = def_Comm(subcomm, PETSC_COMM_DEFAULT)
+ *         cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
+ *         if out is None: out       = Mat()
+ *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
+ */
+  __pyx_v_reuse = MAT_INITIAL_MATRIX;
+
+  /* "PETSc/Mat.pyx":1016
+ *         if subcomm:   _subcomm    = def_Comm(subcomm, PETSC_COMM_DEFAULT)
+ *         cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX
+ *         if out is None: out       = Mat()             # <<<<<<<<<<<<<<
+ *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
+ *         CHKERR( MatCreateRedundantMatrix(self.mat, _nsubcomm, _subcomm, reuse, &out.mat))
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_out) == Py_None);
+  __pyx_t_4 = (__pyx_t_2 != 0);
+  if (__pyx_t_4) {
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1016, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF_SET(__pyx_v_out, ((struct PyPetscMatObject *)__pyx_t_5));
+    __pyx_t_5 = 0;
+  }
+
+  /* "PETSc/Mat.pyx":1017
+ *         cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX
+ *         if out is None: out       = Mat()
+ *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
+ *         CHKERR( MatCreateRedundantMatrix(self.mat, _nsubcomm, _subcomm, reuse, &out.mat))
+ *         return out
+ */
+  __pyx_t_4 = ((__pyx_v_out->mat != NULL) != 0);
+  if (__pyx_t_4) {
+    __pyx_v_reuse = MAT_REUSE_MATRIX;
+  }
+
+  /* "PETSc/Mat.pyx":1018
+ *         if out is None: out       = Mat()
+ *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
+ *         CHKERR( MatCreateRedundantMatrix(self.mat, _nsubcomm, _subcomm, reuse, &out.mat))             # <<<<<<<<<<<<<<
+ *         return out
+ * 
+ */
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateRedundantMatrix(__pyx_v_self->mat, __pyx_v__nsubcomm, __pyx_v__subcomm, __pyx_v_reuse, (&__pyx_v_out->mat))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(33, 1018, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1019
+ *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
+ *         CHKERR( MatCreateRedundantMatrix(self.mat, _nsubcomm, _subcomm, reuse, &out.mat))
+ *         return out             # <<<<<<<<<<<<<<
+ * 
+ *     def getDiagonal(self, Vec result=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_out));
+  __pyx_r = ((PyObject *)__pyx_v_out);
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1011
  *         return result
  * 
+ *     def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _nsubcomm   = asInt(nsubcomm)
+ *         cdef MPI_Comm _subcomm    = MPI_COMM_NULL
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getRedundantMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_out);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1021
+ *         return out
+ * 
  *     def getDiagonal(self, Vec result=None):             # <<<<<<<<<<<<<<
  *         if result is None:
  *             result = Vec()
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_232getDiagonal[] = "Mat.getDiagonal(self, Vec result=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237getDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_236getDiagonal[] = "Mat.getDiagonal(self, Vec result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237getDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_result = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDiagonal (wrapper)", 0);
@@ -125083,7 +126731,186 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getDiagonal(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDiagonal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDiagonal") < 0)) __PYX_ERR(33, 1021, __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 PyPetscVecObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getDiagonal", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1021, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getDiagonal", __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_8petsc4py_5PETSc_Vec, 1, "result", 0))) __PYX_ERR(33, 1021, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(((struct PyPetscMatObject *)__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_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("getDiagonal", 0);
+  __Pyx_INCREF((PyObject *)__pyx_v_result);
+
+  /* "PETSc/Mat.pyx":1022
+ * 
+ *     def getDiagonal(self, Vec result=None):
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Vec()
+ *         if result.vec == NULL:
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_result) == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/Mat.pyx":1023
+ *     def getDiagonal(self, Vec result=None):
+ *         if result is None:
+ *             result = Vec()             # <<<<<<<<<<<<<<
+ *         if result.vec == NULL:
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
+ */
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1023, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscVecObject *)__pyx_t_3));
+    __pyx_t_3 = 0;
+
+    /* "PETSc/Mat.pyx":1022
+ * 
+ *     def getDiagonal(self, Vec result=None):
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Vec()
+ *         if result.vec == NULL:
+ */
+  }
+
+  /* "PETSc/Mat.pyx":1024
+ *         if result is None:
+ *             result = Vec()
+ *         if result.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
+ *         CHKERR( MatGetDiagonal(self.mat, result.vec) )
+ */
+  __pyx_t_2 = ((__pyx_v_result->vec == NULL) != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/Mat.pyx":1025
+ *             result = Vec()
+ *         if result.vec == NULL:
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetDiagonal(self.mat, result.vec) )
+ *         return result
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1025, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":1024
+ *         if result is None:
+ *             result = Vec()
+ *         if result.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
+ *         CHKERR( MatGetDiagonal(self.mat, result.vec) )
+ */
+  }
+
+  /* "PETSc/Mat.pyx":1026
+ *         if result.vec == NULL:
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
+ *         CHKERR( MatGetDiagonal(self.mat, result.vec) )             # <<<<<<<<<<<<<<
+ *         return result
+ * 
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetDiagonal(__pyx_v_self->mat, __pyx_v_result->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1026, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1027
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
+ *         CHKERR( MatGetDiagonal(self.mat, result.vec) )
+ *         return result             # <<<<<<<<<<<<<<
+ * 
+ *     def getRowSum(self, Vec result=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_result));
+  __pyx_r = ((PyObject *)__pyx_v_result);
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1021
+ *         return out
+ * 
+ *     def getDiagonal(self, Vec result=None):             # <<<<<<<<<<<<<<
+ *         if result is None:
+ *             result = Vec()
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getDiagonal", __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;
+}
+
+/* "PETSc/Mat.pyx":1029
+ *         return result
+ * 
+ *     def getRowSum(self, Vec result=None):             # <<<<<<<<<<<<<<
+ *         if result is None:
+ *             result = Vec()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239getRowSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_238getRowSum[] = "Mat.getRowSum(self, Vec result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239getRowSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_result = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getRowSum (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_result,0};
+    PyObject* values[1] = {0};
+    values[0] = (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  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, "getRowSum") < 0)) __PYX_ERR(33, 1029, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -125096,14 +126923,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getDiagonal(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getDiagonal", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getRowSum", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1029, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getDiagonal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getRowSum", __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_8petsc4py_5PETSc_Vec, 1, "result", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_232getDiagonal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_result);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "result", 0))) __PYX_ERR(33, 1029, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_result);
 
   /* function exit code */
   goto __pyx_L0;
@@ -125114,22 +126941,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getDiagonal(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getDiagonal", 0);
+  __Pyx_RefNannySetupContext("getRowSum", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":995
+  /* "PETSc/Mat.pyx":1030
  * 
- *     def getDiagonal(self, Vec result=None):
+ *     def getRowSum(self, Vec result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
  *             result = Vec()
  *         if result.vec == NULL:
@@ -125138,195 +126962,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getDiagonal(struct PyPetscMat
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":996
- *     def getDiagonal(self, Vec result=None):
+    /* "PETSc/Mat.pyx":1031
+ *     def getRowSum(self, Vec result=None):
  *         if result is None:
  *             result = Vec()             # <<<<<<<<<<<<<<
  *         if result.vec == NULL:
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 996; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1031, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscVecObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "PETSc/Mat.pyx":997
- *         if result is None:
- *             result = Vec()
- *         if result.vec == NULL:             # <<<<<<<<<<<<<<
- *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
- *         CHKERR( MatGetDiagonal(self.mat, result.vec) )
- */
-  __pyx_t_2 = ((__pyx_v_result->vec == NULL) != 0);
-  if (__pyx_t_2) {
-
-    /* "PETSc/Mat.pyx":998
- *             result = Vec()
- *         if result.vec == NULL:
- *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )             # <<<<<<<<<<<<<<
- *         CHKERR( MatGetDiagonal(self.mat, result.vec) )
- *         return result
- */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 998; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "PETSc/Mat.pyx":999
- *         if result.vec == NULL:
- *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
- *         CHKERR( MatGetDiagonal(self.mat, result.vec) )             # <<<<<<<<<<<<<<
- *         return result
- * 
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetDiagonal(__pyx_v_self->mat, __pyx_v_result->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 999; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/Mat.pyx":1000
- *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
- *         CHKERR( MatGetDiagonal(self.mat, result.vec) )
- *         return result             # <<<<<<<<<<<<<<
- * 
- *     def getRowSum(self, Vec result=None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_result));
-  __pyx_r = ((PyObject *)__pyx_v_result);
-  goto __pyx_L0;
-
-  /* "PETSc/Mat.pyx":994
- *         return result
- * 
- *     def getDiagonal(self, Vec result=None):             # <<<<<<<<<<<<<<
- *         if result is None:
- *             result = Vec()
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getDiagonal", __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;
-}
-
-/* "PETSc/Mat.pyx":1002
- *         return result
- * 
- *     def getRowSum(self, Vec result=None):             # <<<<<<<<<<<<<<
- *         if result is None:
- *             result = Vec()
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRowSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_234getRowSum[] = "Mat.getRowSum(self, Vec result=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRowSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_result = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getRowSum (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_result,0};
-    PyObject* values[1] = {0};
-    values[0] = (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  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, "getRowSum") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1002; __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_result = ((struct PyPetscVecObject *)values[0]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getRowSum", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getRowSum", __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_8petsc4py_5PETSc_Vec, 1, "result", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1002; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_234getRowSum(((struct PyPetscMatObject *)__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_8petsc4py_5PETSc_3Mat_234getRowSum(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getRowSum", 0);
-  __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1003
+    /* "PETSc/Mat.pyx":1030
  * 
  *     def getRowSum(self, Vec result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
  *             result = Vec()
  *         if result.vec == NULL:
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_result) == Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-
-    /* "PETSc/Mat.pyx":1004
- *     def getRowSum(self, Vec result=None):
- *         if result is None:
- *             result = Vec()             # <<<<<<<<<<<<<<
- *         if result.vec == NULL:
- *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
- */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscVecObject *)__pyx_t_3));
-    __pyx_t_3 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1005
+  /* "PETSc/Mat.pyx":1032
  *         if result is None:
  *             result = Vec()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -125336,28 +126993,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRowSum(struct PyPetscMatOb
   __pyx_t_2 = ((__pyx_v_result->vec == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1006
+    /* "PETSc/Mat.pyx":1033
  *             result = Vec()
  *         if result.vec == NULL:
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetRowSum(self.mat, result.vec) )
  *         return result
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1033, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":1032
+ *         if result is None:
+ *             result = Vec()
+ *         if result.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
+ *         CHKERR( MatGetRowSum(self.mat, result.vec) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":1007
+  /* "PETSc/Mat.pyx":1034
  *         if result.vec == NULL:
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  *         CHKERR( MatGetRowSum(self.mat, result.vec) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRowSum(__pyx_v_self->mat, __pyx_v_result->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetRowSum(__pyx_v_self->mat, __pyx_v_result->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1034, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1008
+  /* "PETSc/Mat.pyx":1035
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  *         CHKERR( MatGetRowSum(self.mat, result.vec) )
  *         return result             # <<<<<<<<<<<<<<
@@ -125369,7 +127032,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRowSum(struct PyPetscMatOb
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1002
+  /* "PETSc/Mat.pyx":1029
  *         return result
  * 
  *     def getRowSum(self, Vec result=None):             # <<<<<<<<<<<<<<
@@ -125389,7 +127052,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRowSum(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1010
+/* "PETSc/Mat.pyx":1037
  *         return result
  * 
  *     def setDiagonal(self, Vec diag not None, addv=None):             # <<<<<<<<<<<<<<
@@ -125398,14 +127061,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRowSum(struct PyPetscMatOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237setDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_236setDiagonal[] = "Mat.setDiagonal(self, Vec diag, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237setDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241setDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_240setDiagonal[] = "Mat.setDiagonal(self, Vec diag, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241setDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_diag = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDiagonal (wrapper)", 0);
@@ -125434,7 +127094,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237setDiagonal(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDiagonal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDiagonal") < 0)) __PYX_ERR(33, 1037, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -125449,14 +127109,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237setDiagonal(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDiagonal", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDiagonal", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1037, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setDiagonal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_diag), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "diag", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_236setDiagonal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_diag, __pyx_v_addv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_diag), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "diag", 0))) __PYX_ERR(33, 1037, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_240setDiagonal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_diag, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -125467,37 +127127,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237setDiagonal(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236setDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_diag, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240setDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_diag, PyObject *__pyx_v_addv) {
   InsertMode __pyx_v_caddv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   InsertMode __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setDiagonal", 0);
 
-  /* "PETSc/Mat.pyx":1011
+  /* "PETSc/Mat.pyx":1038
  * 
  *     def setDiagonal(self, Vec diag not None, addv=None):
  *         cdef PetscInsertMode caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1011; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(33, 1038, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1012
+  /* "PETSc/Mat.pyx":1039
  *     def setDiagonal(self, Vec diag not None, addv=None):
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )             # <<<<<<<<<<<<<<
  * 
  *     def diagonalScale(self, Vec L=None, Vec R=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDiagonalSet(__pyx_v_self->mat, __pyx_v_diag->vec, __pyx_v_caddv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDiagonalSet(__pyx_v_self->mat, __pyx_v_diag->vec, __pyx_v_caddv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1039, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1010
+  /* "PETSc/Mat.pyx":1037
  *         return result
  * 
  *     def setDiagonal(self, Vec diag not None, addv=None):             # <<<<<<<<<<<<<<
@@ -125517,7 +127174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236setDiagonal(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1014
+/* "PETSc/Mat.pyx":1041
  *         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )
  * 
  *     def diagonalScale(self, Vec L=None, Vec R=None):             # <<<<<<<<<<<<<<
@@ -125526,14 +127183,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236setDiagonal(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239diagonalScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_238diagonalScale[] = "Mat.diagonalScale(self, Vec L=None, Vec R=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239diagonalScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243diagonalScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_242diagonalScale[] = "Mat.diagonalScale(self, Vec L=None, Vec R=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243diagonalScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_L = 0;
   struct PyPetscVecObject *__pyx_v_R = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("diagonalScale (wrapper)", 0);
@@ -125565,7 +127219,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239diagonalScale(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diagonalScale") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1014; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diagonalScale") < 0)) __PYX_ERR(33, 1041, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -125580,15 +127234,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239diagonalScale(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("diagonalScale", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1014; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("diagonalScale", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1041, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.diagonalScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_L), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "L", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1014; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_R), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "R", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1014; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_L, __pyx_v_R);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_L), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "L", 0))) __PYX_ERR(33, 1041, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_R), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "R", 0))) __PYX_ERR(33, 1041, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_L, __pyx_v_R);
 
   /* function exit code */
   goto __pyx_L0;
@@ -125599,7 +127253,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239diagonalScale(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_L, struct PyPetscVecObject *__pyx_v_R) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_L, struct PyPetscVecObject *__pyx_v_R) {
   Vec __pyx_v_vecl;
   Vec __pyx_v_vecr;
   PyObject *__pyx_r = NULL;
@@ -125608,12 +127262,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(struct PyPetscM
   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("diagonalScale", 0);
 
-  /* "PETSc/Mat.pyx":1015
+  /* "PETSc/Mat.pyx":1042
  * 
  *     def diagonalScale(self, Vec L=None, Vec R=None):
  *         cdef PetscVec vecl=NULL, vecr=NULL             # <<<<<<<<<<<<<<
@@ -125623,7 +127274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(struct PyPetscM
   __pyx_v_vecl = NULL;
   __pyx_v_vecr = NULL;
 
-  /* "PETSc/Mat.pyx":1016
+  /* "PETSc/Mat.pyx":1043
  *     def diagonalScale(self, Vec L=None, Vec R=None):
  *         cdef PetscVec vecl=NULL, vecr=NULL
  *         if L is not None: vecl = L.vec             # <<<<<<<<<<<<<<
@@ -125635,11 +127286,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(struct PyPetscM
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_L->vec;
     __pyx_v_vecl = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1017
+  /* "PETSc/Mat.pyx":1044
  *         cdef PetscVec vecl=NULL, vecr=NULL
  *         if L is not None: vecl = L.vec
  *         if R is not None: vecr = R.vec             # <<<<<<<<<<<<<<
@@ -125651,20 +127300,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(struct PyPetscM
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_R->vec;
     __pyx_v_vecr = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":1018
+  /* "PETSc/Mat.pyx":1045
  *         if L is not None: vecl = L.vec
  *         if R is not None: vecr = R.vec
  *         CHKERR( MatDiagonalScale(self.mat, vecl, vecr) )             # <<<<<<<<<<<<<<
  * 
  *     def invertBlockDiagonal(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDiagonalScale(__pyx_v_self->mat, __pyx_v_vecl, __pyx_v_vecr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1018; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDiagonalScale(__pyx_v_self->mat, __pyx_v_vecl, __pyx_v_vecr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1045, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1014
+  /* "PETSc/Mat.pyx":1041
  *         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )
  * 
  *     def diagonalScale(self, Vec L=None, Vec R=None):             # <<<<<<<<<<<<<<
@@ -125684,7 +127331,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1020
+/* "PETSc/Mat.pyx":1047
  *         CHKERR( MatDiagonalScale(self.mat, vecl, vecr) )
  * 
  *     def invertBlockDiagonal(self):             # <<<<<<<<<<<<<<
@@ -125693,23 +127340,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238diagonalScale(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241invertBlockDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal[] = "Mat.invertBlockDiagonal(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241invertBlockDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_245invertBlockDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal[] = "Mat.invertBlockDiagonal(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_245invertBlockDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("invertBlockDiagonal (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("invertBlockDiagonal", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "invertBlockDiagonal", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(struct PyPetscMatObject *__pyx_v_self) {
   PetscInt __pyx_v_bs;
   PetscInt __pyx_v_m;
   const PetscScalar *__pyx_v_cibdiag;
@@ -125721,12 +127368,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct Py
   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("invertBlockDiagonal", 0);
 
-  /* "PETSc/Mat.pyx":1021
+  /* "PETSc/Mat.pyx":1048
  * 
  *     def invertBlockDiagonal(self):
  *         cdef PetscInt bs = 0, m = 0             # <<<<<<<<<<<<<<
@@ -125736,7 +127380,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct Py
   __pyx_v_bs = 0;
   __pyx_v_m = 0;
 
-  /* "PETSc/Mat.pyx":1022
+  /* "PETSc/Mat.pyx":1049
  *     def invertBlockDiagonal(self):
  *         cdef PetscInt bs = 0, m = 0
  *         cdef const_PetscScalar *cibdiag = NULL             # <<<<<<<<<<<<<<
@@ -125745,59 +127389,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct Py
  */
   __pyx_v_cibdiag = NULL;
 
-  /* "PETSc/Mat.pyx":1023
+  /* "PETSc/Mat.pyx":1050
  *         cdef PetscInt bs = 0, m = 0
  *         cdef const_PetscScalar *cibdiag = NULL
  *         CHKERR( MatGetBlockSize(self.mat, &bs) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetLocalSize(self.mat, &m, NULL) )
  *         CHKERR( MatInvertBlockDiagonal(self.mat, &cibdiag) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_self->mat, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_self->mat, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1050, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1024
+  /* "PETSc/Mat.pyx":1051
  *         cdef const_PetscScalar *cibdiag = NULL
  *         CHKERR( MatGetBlockSize(self.mat, &bs) )
  *         CHKERR( MatGetLocalSize(self.mat, &m, NULL) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatInvertBlockDiagonal(self.mat, &cibdiag) )
  *         cdef ndarray ibdiag = array_s(m*bs, cibdiag)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_self->mat, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_self->mat, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1051, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1025
+  /* "PETSc/Mat.pyx":1052
  *         CHKERR( MatGetBlockSize(self.mat, &bs) )
  *         CHKERR( MatGetLocalSize(self.mat, &m, NULL) )
  *         CHKERR( MatInvertBlockDiagonal(self.mat, &cibdiag) )             # <<<<<<<<<<<<<<
  *         cdef ndarray ibdiag = array_s(m*bs, cibdiag)
  *         ibdiag.shape = (toInt(m//bs), toInt(bs), toInt(bs))
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatInvertBlockDiagonal(__pyx_v_self->mat, (&__pyx_v_cibdiag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1025; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatInvertBlockDiagonal(__pyx_v_self->mat, (&__pyx_v_cibdiag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1052, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1026
+  /* "PETSc/Mat.pyx":1053
  *         CHKERR( MatGetLocalSize(self.mat, &m, NULL) )
  *         CHKERR( MatInvertBlockDiagonal(self.mat, &cibdiag) )
  *         cdef ndarray ibdiag = array_s(m*bs, cibdiag)             # <<<<<<<<<<<<<<
  *         ibdiag.shape = (toInt(m//bs), toInt(bs), toInt(bs))
  *         return ibdiag.transpose(0, 2, 1)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_s((__pyx_v_m * __pyx_v_bs), __pyx_v_cibdiag)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_s((__pyx_v_m * __pyx_v_bs), __pyx_v_cibdiag)); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1053, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ibdiag = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":1027
+  /* "PETSc/Mat.pyx":1054
  *         CHKERR( MatInvertBlockDiagonal(self.mat, &cibdiag) )
  *         cdef ndarray ibdiag = array_s(m*bs, cibdiag)
  *         ibdiag.shape = (toInt(m//bs), toInt(bs), toInt(bs))             # <<<<<<<<<<<<<<
  *         return ibdiag.transpose(0, 2, 1)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m / __pyx_v_bs)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m / __pyx_v_bs)); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1054, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1054, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1054, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1054, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -125808,10 +127452,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct Py
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ibdiag), __pyx_n_s_shape, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ibdiag), __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(33, 1054, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Mat.pyx":1028
+  /* "PETSc/Mat.pyx":1055
  *         cdef ndarray ibdiag = array_s(m*bs, cibdiag)
  *         ibdiag.shape = (toInt(m//bs), toInt(bs), toInt(bs))
  *         return ibdiag.transpose(0, 2, 1)             # <<<<<<<<<<<<<<
@@ -125819,16 +127463,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct Py
  *     # null space
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ibdiag), __pyx_n_s_transpose); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1028; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ibdiag), __pyx_n_s_transpose); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1055, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__55, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1028; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1055, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1020
+  /* "PETSc/Mat.pyx":1047
  *         CHKERR( MatDiagonalScale(self.mat, vecl, vecr) )
  * 
  *     def invertBlockDiagonal(self):             # <<<<<<<<<<<<<<
@@ -125851,7 +127495,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1032
+/* "PETSc/Mat.pyx":1059
  *     # null space
  * 
  *     def setNullSpace(self, NullSpace nsp not None):             # <<<<<<<<<<<<<<
@@ -125860,13 +127504,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243setNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_242setNullSpace[] = "Mat.setNullSpace(self, NullSpace nsp)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243setNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_246setNullSpace[] = "Mat.setNullSpace(self, NullSpace nsp)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscNullSpaceObject *__pyx_v_nsp = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setNullSpace (wrapper)", 0);
@@ -125888,7 +127529,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243setNullSpace(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, "setNullSpace") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNullSpace") < 0)) __PYX_ERR(33, 1059, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -125899,14 +127540,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243setNullSpace(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1059, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setNullSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nsp), __pyx_ptype_8petsc4py_5PETSc_NullSpace, 0, "nsp", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_242setNullSpace(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsp);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nsp), __pyx_ptype_8petsc4py_5PETSc_NullSpace, 0, "nsp", 0))) __PYX_ERR(33, 1059, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_246setNullSpace(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsp);
 
   /* function exit code */
   goto __pyx_L0;
@@ -125917,25 +127558,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243setNullSpace(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242setNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
   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("setNullSpace", 0);
 
-  /* "PETSc/Mat.pyx":1033
+  /* "PETSc/Mat.pyx":1060
  * 
  *     def setNullSpace(self, NullSpace nsp not None):
  *         CHKERR( MatSetNullSpace(self.mat, nsp.nsp) )             # <<<<<<<<<<<<<<
  * 
  *     def getNullSpace(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetNullSpace(__pyx_v_self->mat, __pyx_v_nsp->nsp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetNullSpace(__pyx_v_self->mat, __pyx_v_nsp->nsp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1060, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1032
+  /* "PETSc/Mat.pyx":1059
  *     # null space
  * 
  *     def setNullSpace(self, NullSpace nsp not None):             # <<<<<<<<<<<<<<
@@ -125955,7 +127593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242setNullSpace(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1035
+/* "PETSc/Mat.pyx":1062
  *         CHKERR( MatSetNullSpace(self.mat, nsp.nsp) )
  * 
  *     def getNullSpace(self):             # <<<<<<<<<<<<<<
@@ -125964,55 +127602,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242setNullSpace(struct PyPetscMa
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_245getNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_244getNullSpace[] = "Mat.getNullSpace(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_245getNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_249getNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_248getNullSpace[] = "Mat.getNullSpace(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_249getNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getNullSpace (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getNullSpace", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNullSpace", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_244getNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_248getNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244getNullSpace(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNullSpace(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscNullSpaceObject *__pyx_v_nsp = 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("getNullSpace", 0);
 
-  /* "PETSc/Mat.pyx":1036
+  /* "PETSc/Mat.pyx":1063
  * 
  *     def getNullSpace(self):
  *         cdef NullSpace nsp = NullSpace()             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_NullSpace)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_NullSpace), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_nsp = ((struct PyPetscNullSpaceObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1037
+  /* "PETSc/Mat.pyx":1064
  *     def getNullSpace(self):
  *         cdef NullSpace nsp = NullSpace()
  *         CHKERR( MatGetNullSpace(self.mat, &nsp.nsp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(nsp.obj)
  *         return nsp
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetNullSpace(__pyx_v_self->mat, (&__pyx_v_nsp->nsp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetNullSpace(__pyx_v_self->mat, (&__pyx_v_nsp->nsp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1064, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1038
+  /* "PETSc/Mat.pyx":1065
  *         cdef NullSpace nsp = NullSpace()
  *         CHKERR( MatGetNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)             # <<<<<<<<<<<<<<
@@ -126021,7 +127656,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244getNullSpace(struct PyPetscMa
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_nsp->__pyx_base.obj);
 
-  /* "PETSc/Mat.pyx":1039
+  /* "PETSc/Mat.pyx":1066
  *         CHKERR( MatGetNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)
  *         return nsp             # <<<<<<<<<<<<<<
@@ -126033,7 +127668,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244getNullSpace(struct PyPetscMa
   __pyx_r = ((PyObject *)__pyx_v_nsp);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1035
+  /* "PETSc/Mat.pyx":1062
  *         CHKERR( MatSetNullSpace(self.mat, nsp.nsp) )
  * 
  *     def getNullSpace(self):             # <<<<<<<<<<<<<<
@@ -126053,7 +127688,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244getNullSpace(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1041
+/* "PETSc/Mat.pyx":1068
  *         return nsp
  * 
  *     def setNearNullSpace(self, NullSpace nsp not None):             # <<<<<<<<<<<<<<
@@ -126062,13 +127697,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244getNullSpace(struct PyPetscMa
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_246setNearNullSpace[] = "Mat.setNearNullSpace(self, NullSpace nsp)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251setNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_250setNearNullSpace[] = "Mat.setNearNullSpace(self, NullSpace nsp)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251setNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscNullSpaceObject *__pyx_v_nsp = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setNearNullSpace (wrapper)", 0);
@@ -126090,7 +127722,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNearNullSpace(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNearNullSpace") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNearNullSpace") < 0)) __PYX_ERR(33, 1068, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -126101,14 +127733,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNearNullSpace(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNearNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setNearNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1068, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setNearNullSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nsp), __pyx_ptype_8petsc4py_5PETSc_NullSpace, 0, "nsp", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_246setNearNullSpace(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsp);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nsp), __pyx_ptype_8petsc4py_5PETSc_NullSpace, 0, "nsp", 0))) __PYX_ERR(33, 1068, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_250setNearNullSpace(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsp);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126119,25 +127751,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNearNullSpace(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNearNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250setNearNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
   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("setNearNullSpace", 0);
 
-  /* "PETSc/Mat.pyx":1042
+  /* "PETSc/Mat.pyx":1069
  * 
  *     def setNearNullSpace(self, NullSpace nsp not None):
  *         CHKERR( MatSetNearNullSpace(self.mat, nsp.nsp) )             # <<<<<<<<<<<<<<
  * 
  *     def getNearNullSpace(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetNearNullSpace(__pyx_v_self->mat, __pyx_v_nsp->nsp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetNearNullSpace(__pyx_v_self->mat, __pyx_v_nsp->nsp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1069, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1041
+  /* "PETSc/Mat.pyx":1068
  *         return nsp
  * 
  *     def setNearNullSpace(self, NullSpace nsp not None):             # <<<<<<<<<<<<<<
@@ -126157,7 +127786,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNearNullSpace(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1044
+/* "PETSc/Mat.pyx":1071
  *         CHKERR( MatSetNearNullSpace(self.mat, nsp.nsp) )
  * 
  *     def getNearNullSpace(self):             # <<<<<<<<<<<<<<
@@ -126166,55 +127795,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNearNullSpace(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_249getNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_248getNearNullSpace[] = "Mat.getNearNullSpace(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_249getNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253getNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_252getNearNullSpace[] = "Mat.getNearNullSpace(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253getNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getNearNullSpace (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getNearNullSpace", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNearNullSpace", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_248getNearNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_252getNearNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNearNullSpace(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252getNearNullSpace(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscNullSpaceObject *__pyx_v_nsp = 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("getNearNullSpace", 0);
 
-  /* "PETSc/Mat.pyx":1045
+  /* "PETSc/Mat.pyx":1072
  * 
  *     def getNearNullSpace(self):
  *         cdef NullSpace nsp = NullSpace()             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetNearNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_NullSpace)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_NullSpace), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1072, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_nsp = ((struct PyPetscNullSpaceObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1046
+  /* "PETSc/Mat.pyx":1073
  *     def getNearNullSpace(self):
  *         cdef NullSpace nsp = NullSpace()
  *         CHKERR( MatGetNearNullSpace(self.mat, &nsp.nsp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(nsp.obj)
  *         return nsp
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetNearNullSpace(__pyx_v_self->mat, (&__pyx_v_nsp->nsp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1046; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetNearNullSpace(__pyx_v_self->mat, (&__pyx_v_nsp->nsp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1073, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1047
+  /* "PETSc/Mat.pyx":1074
  *         cdef NullSpace nsp = NullSpace()
  *         CHKERR( MatGetNearNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)             # <<<<<<<<<<<<<<
@@ -126223,7 +127849,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNearNullSpace(struct PyPet
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_nsp->__pyx_base.obj);
 
-  /* "PETSc/Mat.pyx":1048
+  /* "PETSc/Mat.pyx":1075
  *         CHKERR( MatGetNearNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)
  *         return nsp             # <<<<<<<<<<<<<<
@@ -126235,7 +127861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNearNullSpace(struct PyPet
   __pyx_r = ((PyObject *)__pyx_v_nsp);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1044
+  /* "PETSc/Mat.pyx":1071
  *         CHKERR( MatSetNearNullSpace(self.mat, nsp.nsp) )
  * 
  *     def getNearNullSpace(self):             # <<<<<<<<<<<<<<
@@ -126255,7 +127881,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNearNullSpace(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1052
+/* "PETSc/Mat.pyx":1079
  *     # matrix-vector product
  * 
  *     def mult(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126264,14 +127890,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNearNullSpace(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251mult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_250mult[] = "Mat.mult(self, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251mult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255mult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_254mult[] = "Mat.mult(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255mult(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("mult (wrapper)", 0);
@@ -126295,11 +127918,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251mult(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("mult", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1052; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("mult", 1, 2, 2, 1); __PYX_ERR(33, 1079, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mult") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1052; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mult") < 0)) __PYX_ERR(33, 1079, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -126312,15 +127935,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251mult(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mult", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1052; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mult", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1079, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.mult", __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[33]; __pyx_lineno = 1052; __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[33]; __pyx_lineno = 1052; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_250mult(((struct PyPetscMatObject *)__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(33, 1079, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1079, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_254mult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126331,25 +127954,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251mult(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250mult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254mult(struct PyPetscMatObject *__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("mult", 0);
 
-  /* "PETSc/Mat.pyx":1053
+  /* "PETSc/Mat.pyx":1080
  * 
  *     def mult(self, Vec x not None, Vec y not None):
  *         CHKERR( MatMult(self.mat, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def multAdd(self, Vec x not None, Vec v not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMult(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1053; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMult(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1080, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1052
+  /* "PETSc/Mat.pyx":1079
  *     # matrix-vector product
  * 
  *     def mult(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126369,7 +127989,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250mult(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1055
+/* "PETSc/Mat.pyx":1082
  *         CHKERR( MatMult(self.mat, x.vec, y.vec) )
  * 
  *     def multAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126378,15 +127998,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250mult(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253multAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_252multAdd[] = "Mat.multAdd(self, Vec x, Vec v, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253multAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_256multAdd[] = "Mat.multAdd(self, Vec x, Vec v, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_v = 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("multAdd (wrapper)", 0);
@@ -126411,16 +128028,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253multAdd(PyObject *__pyx_v_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1055; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, 1); __PYX_ERR(33, 1082, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1055; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, 2); __PYX_ERR(33, 1082, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multAdd") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1055; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multAdd") < 0)) __PYX_ERR(33, 1082, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -126435,16 +128052,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253multAdd(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1055; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1082, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.multAdd", __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[33]; __pyx_lineno = 1055; __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[33]; __pyx_lineno = 1055; __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[33]; __pyx_lineno = 1055; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_252multAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1082, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(33, 1082, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1082, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_256multAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126455,25 +128072,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253multAdd(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252multAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256multAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, 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("multAdd", 0);
 
-  /* "PETSc/Mat.pyx":1056
+  /* "PETSc/Mat.pyx":1083
  * 
  *     def multAdd(self, Vec x not None, Vec v not None, Vec y not None):
  *         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def multTranspose(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultAdd(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_v->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultAdd(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_v->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1083, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1055
+  /* "PETSc/Mat.pyx":1082
  *         CHKERR( MatMult(self.mat, x.vec, y.vec) )
  * 
  *     def multAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126493,7 +128107,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252multAdd(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1058
+/* "PETSc/Mat.pyx":1085
  *         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  *     def multTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126502,14 +128116,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252multAdd(struct PyPetscMatObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255multTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_254multTranspose[] = "Mat.multTranspose(self, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255multTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_258multTranspose[] = "Mat.multTranspose(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multTranspose(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("multTranspose (wrapper)", 0);
@@ -126533,11 +128144,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255multTranspose(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("multTranspose", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1058; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("multTranspose", 1, 2, 2, 1); __PYX_ERR(33, 1085, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multTranspose") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1058; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multTranspose") < 0)) __PYX_ERR(33, 1085, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -126550,15 +128161,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255multTranspose(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1058; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("multTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1085, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.multTranspose", __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[33]; __pyx_lineno = 1058; __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[33]; __pyx_lineno = 1058; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_254multTranspose(((struct PyPetscMatObject *)__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(33, 1085, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1085, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_258multTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126569,25 +128180,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255multTranspose(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254multTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258multTranspose(struct PyPetscMatObject *__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("multTranspose", 0);
 
-  /* "PETSc/Mat.pyx":1059
+  /* "PETSc/Mat.pyx":1086
  * 
  *     def multTranspose(self, Vec x not None, Vec y not None):
  *         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultTranspose(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1059; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultTranspose(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1086, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1058
+  /* "PETSc/Mat.pyx":1085
  *         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  *     def multTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126607,7 +128215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254multTranspose(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1061
+/* "PETSc/Mat.pyx":1088
  *         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )
  * 
  *     def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126616,15 +128224,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254multTranspose(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_256multTransposeAdd[] = "Mat.multTransposeAdd(self, Vec x, Vec v, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_260multTransposeAdd[] = "Mat.multTransposeAdd(self, Vec x, Vec v, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_v = 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("multTransposeAdd (wrapper)", 0);
@@ -126649,16 +128254,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multTransposeAdd(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1061; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, 1); __PYX_ERR(33, 1088, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1061; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, 2); __PYX_ERR(33, 1088, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multTransposeAdd") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1061; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multTransposeAdd") < 0)) __PYX_ERR(33, 1088, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -126673,16 +128278,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multTransposeAdd(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1061; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1088, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.multTransposeAdd", __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[33]; __pyx_lineno = 1061; __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[33]; __pyx_lineno = 1061; __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[33]; __pyx_lineno = 1061; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_256multTransposeAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1088, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(33, 1088, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1088, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_260multTransposeAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126693,25 +128298,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multTransposeAdd(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256multTransposeAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260multTransposeAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, 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("multTransposeAdd", 0);
 
-  /* "PETSc/Mat.pyx":1062
+  /* "PETSc/Mat.pyx":1089
  * 
  *     def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):
  *         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def multHermitian(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultTransposeAdd(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_v->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1062; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultTransposeAdd(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_v->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1089, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1061
+  /* "PETSc/Mat.pyx":1088
  *         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )
  * 
  *     def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126731,7 +128333,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256multTransposeAdd(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1064
+/* "PETSc/Mat.pyx":1091
  *         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  *     def multHermitian(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126740,14 +128342,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256multTransposeAdd(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_258multHermitian[] = "Mat.multHermitian(self, Vec x, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263multHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_262multHermitian[] = "Mat.multHermitian(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263multHermitian(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("multHermitian (wrapper)", 0);
@@ -126771,11 +128370,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multHermitian(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("multHermitian", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1064; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("multHermitian", 1, 2, 2, 1); __PYX_ERR(33, 1091, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multHermitian") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1064; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multHermitian") < 0)) __PYX_ERR(33, 1091, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -126788,15 +128387,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multHermitian(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multHermitian", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1064; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("multHermitian", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1091, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.multHermitian", __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[33]; __pyx_lineno = 1064; __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[33]; __pyx_lineno = 1064; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_258multHermitian(((struct PyPetscMatObject *)__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(33, 1091, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1091, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_262multHermitian(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126807,25 +128406,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multHermitian(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258multHermitian(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262multHermitian(struct PyPetscMatObject *__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("multHermitian", 0);
 
-  /* "PETSc/Mat.pyx":1065
+  /* "PETSc/Mat.pyx":1092
  * 
  *     def multHermitian(self, Vec x not None, Vec y not None):
  *         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultHermitianTranspose(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1065; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultHermitianTranspose(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1092, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1064
+  /* "PETSc/Mat.pyx":1091
  *         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  *     def multHermitian(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126845,7 +128441,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258multHermitian(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1067
+/* "PETSc/Mat.pyx":1094
  *         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )
  * 
  *     def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126854,15 +128450,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258multHermitian(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multHermitianAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_260multHermitianAdd[] = "Mat.multHermitianAdd(self, Vec x, Vec v, Vec y)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multHermitianAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265multHermitianAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_264multHermitianAdd[] = "Mat.multHermitianAdd(self, Vec x, Vec v, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265multHermitianAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_v = 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("multHermitianAdd (wrapper)", 0);
@@ -126887,16 +128480,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multHermitianAdd(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, 1); __PYX_ERR(33, 1094, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, 2); __PYX_ERR(33, 1094, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multHermitianAdd") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multHermitianAdd") < 0)) __PYX_ERR(33, 1094, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -126911,16 +128504,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multHermitianAdd(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1094, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.multHermitianAdd", __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[33]; __pyx_lineno = 1067; __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[33]; __pyx_lineno = 1067; __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[33]; __pyx_lineno = 1067; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_260multHermitianAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1094, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(33, 1094, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1094, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_264multHermitianAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126931,25 +128524,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multHermitianAdd(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260multHermitianAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264multHermitianAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_v, 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("multHermitianAdd", 0);
 
-  /* "PETSc/Mat.pyx":1068
+  /* "PETSc/Mat.pyx":1095
  * 
  *     def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):
  *         CHKERR( MatMultHermitianAdd(self.mat, x.vec, v.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     # SOR
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultHermitianTransposeAdd(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_v->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1068; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMultHermitianTransposeAdd(__pyx_v_self->mat, __pyx_v_x->vec, __pyx_v_v->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1095, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1067
+  /* "PETSc/Mat.pyx":1094
  *         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )
  * 
  *     def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -126969,7 +128559,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260multHermitianAdd(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1072
+/* "PETSc/Mat.pyx":1099
  *     # SOR
  * 
  *     def SOR(self, Vec b not None, Vec x not None, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):             # <<<<<<<<<<<<<<
@@ -126978,9 +128568,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260multHermitianAdd(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263SOR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_262SOR[] = "Mat.SOR(self, Vec b, Vec x, omega=1.0, sortype=None, shift=0.0, its=1, lits=1)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263SOR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267SOR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_266SOR[] = "Mat.SOR(self, Vec b, Vec x, omega=1.0, sortype=None, shift=0.0, its=1, lits=1)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267SOR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_b = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   PyObject *__pyx_v_omega = 0;
@@ -126988,9 +128578,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263SOR(PyObject *__pyx_v_self, P
   PyObject *__pyx_v_shift = 0;
   PyObject *__pyx_v_its = 0;
   PyObject *__pyx_v_lits = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("SOR (wrapper)", 0);
@@ -127024,7 +128611,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263SOR(PyObject *__pyx_v_self, P
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("SOR", 0, 2, 7, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1072; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("SOR", 0, 2, 7, 1); __PYX_ERR(33, 1099, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -127053,7 +128640,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263SOR(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SOR") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1072; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SOR") < 0)) __PYX_ERR(33, 1099, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -127078,15 +128665,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263SOR(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("SOR", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1072; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("SOR", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1099, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.SOR", __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[33]; __pyx_lineno = 1072; __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[33]; __pyx_lineno = 1072; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_262SOR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x, __pyx_v_omega, __pyx_v_sortype, __pyx_v_shift, __pyx_v_its, __pyx_v_lits);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1099, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1099, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x, __pyx_v_omega, __pyx_v_sortype, __pyx_v_shift, __pyx_v_its, __pyx_v_lits);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127097,7 +128684,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263SOR(PyObject *__pyx_v_self, P
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262SOR(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x, PyObject *__pyx_v_omega, PyObject *__pyx_v_sortype, PyObject *__pyx_v_shift, PyObject *__pyx_v_its, PyObject *__pyx_v_lits) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x, PyObject *__pyx_v_omega, PyObject *__pyx_v_sortype, PyObject *__pyx_v_shift, PyObject *__pyx_v_its, PyObject *__pyx_v_lits) {
   PetscReal __pyx_v_comega;
   MatSORType __pyx_v_csortype;
   PetscInt __pyx_v_cshift;
@@ -127110,22 +128697,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262SOR(struct PyPetscMatObject *
   int __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("SOR", 0);
 
-  /* "PETSc/Mat.pyx":1073
+  /* "PETSc/Mat.pyx":1100
  * 
  *     def SOR(self, Vec b not None, Vec x not None, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):
  *         cdef PetscReal comega = asReal(omega)             # <<<<<<<<<<<<<<
  *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP
  *         if sortype is not None:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_omega); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1073; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_omega); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 1100, __pyx_L1_error)
   __pyx_v_comega = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1074
+  /* "PETSc/Mat.pyx":1101
  *     def SOR(self, Vec b not None, Vec x not None, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):
  *         cdef PetscReal comega = asReal(omega)
  *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP             # <<<<<<<<<<<<<<
@@ -127134,7 +128718,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262SOR(struct PyPetscMatObject *
  */
   __pyx_v_csortype = SOR_LOCAL_SYMMETRIC_SWEEP;
 
-  /* "PETSc/Mat.pyx":1075
+  /* "PETSc/Mat.pyx":1102
  *         cdef PetscReal comega = asReal(omega)
  *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP
  *         if sortype is not None:             # <<<<<<<<<<<<<<
@@ -127145,59 +128729,65 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262SOR(struct PyPetscMatObject *
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":1076
+    /* "PETSc/Mat.pyx":1103
  *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP
  *         if sortype is not None:
  *             csortype = <PetscMatSORType> asInt(sortype)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cshift = asInt(shift)
  *         cdef PetscInt cits = asInt(its)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_sortype); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1076; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_sortype); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1103, __pyx_L1_error)
     __pyx_v_csortype = ((MatSORType)__pyx_t_4);
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":1102
+ *         cdef PetscReal comega = asReal(omega)
+ *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP
+ *         if sortype is not None:             # <<<<<<<<<<<<<<
+ *             csortype = <PetscMatSORType> asInt(sortype)
+ *         cdef PetscInt cshift = asInt(shift)
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1077
+  /* "PETSc/Mat.pyx":1104
  *         if sortype is not None:
  *             csortype = <PetscMatSORType> asInt(sortype)
  *         cdef PetscInt cshift = asInt(shift)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cits = asInt(its)
  *         cdef PetscInt clits = asInt(lits)
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_shift); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1077; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_shift); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1104, __pyx_L1_error)
   __pyx_v_cshift = __pyx_t_4;
 
-  /* "PETSc/Mat.pyx":1078
+  /* "PETSc/Mat.pyx":1105
  *             csortype = <PetscMatSORType> asInt(sortype)
  *         cdef PetscInt cshift = asInt(shift)
  *         cdef PetscInt cits = asInt(its)             # <<<<<<<<<<<<<<
  *         cdef PetscInt clits = asInt(lits)
  *         CHKERR( MatSOR(self.mat, b.vec, comega, csortype, cshift, cits, clits, x.vec) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1078; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1105, __pyx_L1_error)
   __pyx_v_cits = __pyx_t_4;
 
-  /* "PETSc/Mat.pyx":1079
+  /* "PETSc/Mat.pyx":1106
  *         cdef PetscInt cshift = asInt(shift)
  *         cdef PetscInt cits = asInt(its)
  *         cdef PetscInt clits = asInt(lits)             # <<<<<<<<<<<<<<
  *         CHKERR( MatSOR(self.mat, b.vec, comega, csortype, cshift, cits, clits, x.vec) )
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_lits); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_lits); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1106, __pyx_L1_error)
   __pyx_v_clits = __pyx_t_4;
 
-  /* "PETSc/Mat.pyx":1080
+  /* "PETSc/Mat.pyx":1107
  *         cdef PetscInt cits = asInt(its)
  *         cdef PetscInt clits = asInt(lits)
  *         CHKERR( MatSOR(self.mat, b.vec, comega, csortype, cshift, cits, clits, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSOR(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_comega, __pyx_v_csortype, __pyx_v_cshift, __pyx_v_cits, __pyx_v_clits, __pyx_v_x->vec)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1080; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSOR(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_comega, __pyx_v_csortype, __pyx_v_cshift, __pyx_v_cits, __pyx_v_clits, __pyx_v_x->vec)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1107, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1072
+  /* "PETSc/Mat.pyx":1099
  *     # SOR
  * 
  *     def SOR(self, Vec b not None, Vec x not None, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):             # <<<<<<<<<<<<<<
@@ -127217,7 +128807,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262SOR(struct PyPetscMatObject *
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1084
+/* "PETSc/Mat.pyx":1111
  *     #
  * 
  *     def getDiagonalBlock(self):             # <<<<<<<<<<<<<<
@@ -127226,55 +128816,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262SOR(struct PyPetscMatObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265getDiagonalBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_264getDiagonalBlock[] = "Mat.getDiagonalBlock(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265getDiagonalBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269getDiagonalBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_268getDiagonalBlock[] = "Mat.getDiagonalBlock(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269getDiagonalBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDiagonalBlock (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getDiagonalBlock", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDiagonalBlock", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_264getDiagonalBlock(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_268getDiagonalBlock(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264getDiagonalBlock(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getDiagonalBlock(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_submat = 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("getDiagonalBlock", 0);
 
-  /* "PETSc/Mat.pyx":1085
+  /* "PETSc/Mat.pyx":1112
  * 
  *     def getDiagonalBlock(self):
  *         cdef Mat submat = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetDiagonalBlock(self.mat, &submat.mat) )
  *         PetscINCREF(submat.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[33]; __pyx_lineno = 1085; __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(33, 1112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_submat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1086
+  /* "PETSc/Mat.pyx":1113
  *     def getDiagonalBlock(self):
  *         cdef Mat submat = Mat()
  *         CHKERR( MatGetDiagonalBlock(self.mat, &submat.mat) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(submat.obj)
  *         return submat
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetDiagonalBlock(__pyx_v_self->mat, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetDiagonalBlock(__pyx_v_self->mat, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1113, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1087
+  /* "PETSc/Mat.pyx":1114
  *         cdef Mat submat = Mat()
  *         CHKERR( MatGetDiagonalBlock(self.mat, &submat.mat) )
  *         PetscINCREF(submat.obj)             # <<<<<<<<<<<<<<
@@ -127283,7 +128870,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264getDiagonalBlock(struct PyPet
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_submat->__pyx_base.obj);
 
-  /* "PETSc/Mat.pyx":1088
+  /* "PETSc/Mat.pyx":1115
  *         CHKERR( MatGetDiagonalBlock(self.mat, &submat.mat) )
  *         PetscINCREF(submat.obj)
  *         return submat             # <<<<<<<<<<<<<<
@@ -127295,7 +128882,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264getDiagonalBlock(struct PyPet
   __pyx_r = ((PyObject *)__pyx_v_submat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1084
+  /* "PETSc/Mat.pyx":1111
  *     #
  * 
  *     def getDiagonalBlock(self):             # <<<<<<<<<<<<<<
@@ -127315,7 +128902,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264getDiagonalBlock(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1090
+/* "PETSc/Mat.pyx":1117
  *         return submat
  * 
  *     def increaseOverlap(self, IS iset not None, overlap=1):             # <<<<<<<<<<<<<<
@@ -127324,14 +128911,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264getDiagonalBlock(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267increaseOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_266increaseOverlap[] = "Mat.increaseOverlap(self, IS iset, overlap=1)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267increaseOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271increaseOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_270increaseOverlap[] = "Mat.increaseOverlap(self, IS iset, overlap=1)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271increaseOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_v_overlap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("increaseOverlap (wrapper)", 0);
@@ -127360,7 +128944,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267increaseOverlap(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "increaseOverlap") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "increaseOverlap") < 0)) __PYX_ERR(33, 1117, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -127375,14 +128959,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267increaseOverlap(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("increaseOverlap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("increaseOverlap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1117, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.increaseOverlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_266increaseOverlap(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_overlap);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(33, 1117, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_270increaseOverlap(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_overlap);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127393,37 +128977,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267increaseOverlap(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266increaseOverlap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_overlap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270increaseOverlap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_overlap) {
   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("increaseOverlap", 0);
 
-  /* "PETSc/Mat.pyx":1091
+  /* "PETSc/Mat.pyx":1118
  * 
  *     def increaseOverlap(self, IS iset not None, overlap=1):
  *         cdef PetscInt ival = asInt(overlap)             # <<<<<<<<<<<<<<
  *         CHKERR( MatIncreaseOverlap(self.mat, 1, &iset.iset, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1118, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1092
+  /* "PETSc/Mat.pyx":1119
  *     def increaseOverlap(self, IS iset not None, overlap=1):
  *         cdef PetscInt ival = asInt(overlap)
  *         CHKERR( MatIncreaseOverlap(self.mat, 1, &iset.iset, ival) )             # <<<<<<<<<<<<<<
  * 
  *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIncreaseOverlap(__pyx_v_self->mat, 1, (&__pyx_v_iset->iset), __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIncreaseOverlap(__pyx_v_self->mat, 1, (&__pyx_v_iset->iset), __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1119, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1090
+  /* "PETSc/Mat.pyx":1117
  *         return submat
  * 
  *     def increaseOverlap(self, IS iset not None, overlap=1):             # <<<<<<<<<<<<<<
@@ -127443,7 +129024,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266increaseOverlap(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1094
+/* "PETSc/Mat.pyx":1121
  *         CHKERR( MatIncreaseOverlap(self.mat, 1, &iset.iset, ival) )
  * 
  *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):             # <<<<<<<<<<<<<<
@@ -127452,15 +129033,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266increaseOverlap(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269getSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_268getSubMatrix[] = "Mat.getSubMatrix(self, IS isrow, IS iscol=None, Mat submat=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269getSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273getSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_272getSubMatrix[] = "Mat.getSubMatrix(self, IS isrow, IS iscol=None, Mat submat=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273getSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_isrow = 0;
   struct PyPetscISObject *__pyx_v_iscol = 0;
   struct PyPetscMatObject *__pyx_v_submat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSubMatrix (wrapper)", 0);
@@ -127496,7 +129074,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269getSubMatrix(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSubMatrix") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1094; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSubMatrix") < 0)) __PYX_ERR(33, 1121, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -127513,16 +129091,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269getSubMatrix(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getSubMatrix", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1094; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getSubMatrix", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1121, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getSubMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1094; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1094; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "submat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1094; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1121, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "iscol", 0))) __PYX_ERR(33, 1121, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "submat", 0))) __PYX_ERR(33, 1121, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127533,7 +129111,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269getSubMatrix(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat) {
   MatReuse __pyx_v_reuse;
   IS __pyx_v_ciscol;
   PyObject *__pyx_r = NULL;
@@ -127543,13 +129121,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMa
   IS __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getSubMatrix", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_submat);
 
-  /* "PETSc/Mat.pyx":1095
+  /* "PETSc/Mat.pyx":1122
  * 
  *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -127558,7 +129133,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMa
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1096
+  /* "PETSc/Mat.pyx":1123
  *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscIS ciscol = NULL             # <<<<<<<<<<<<<<
@@ -127567,7 +129142,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMa
  */
   __pyx_v_ciscol = NULL;
 
-  /* "PETSc/Mat.pyx":1097
+  /* "PETSc/Mat.pyx":1124
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscIS ciscol = NULL
  *         if iscol is not None: ciscol = iscol.iset             # <<<<<<<<<<<<<<
@@ -127579,11 +129154,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMa
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_iscol->iset;
     __pyx_v_ciscol = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1098
+  /* "PETSc/Mat.pyx":1125
  *         cdef PetscIS ciscol = NULL
  *         if iscol is not None: ciscol = iscol.iset
  *         if submat is None: submat = Mat()             # <<<<<<<<<<<<<<
@@ -127593,15 +129166,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMa
   __pyx_t_2 = (((PyObject *)__pyx_v_submat) == Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1125, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_submat, ((struct PyPetscMatObject *)__pyx_t_4));
     __pyx_t_4 = 0;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":1099
+  /* "PETSc/Mat.pyx":1126
  *         if iscol is not None: ciscol = iscol.iset
  *         if submat is None: submat = Mat()
  *         if submat.mat != NULL: reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -127611,32 +129182,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMa
   __pyx_t_1 = ((__pyx_v_submat->mat != NULL) != 0);
   if (__pyx_t_1) {
     __pyx_v_reuse = MAT_REUSE_MATRIX;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":1100
+  /* "PETSc/Mat.pyx":1127
  *         if submat is None: submat = Mat()
  *         if submat.mat != NULL: reuse = MAT_REUSE_MATRIX
  *         CHKERR( MatGetSubMatrix(self.mat, isrow.iset, ciscol,             # <<<<<<<<<<<<<<
  *                                 reuse, &submat.mat) )
  *         return submat
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSubMatrix(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_ciscol, __pyx_v_reuse, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSubMatrix(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_ciscol, __pyx_v_reuse, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1127, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1102
+  /* "PETSc/Mat.pyx":1129
  *         CHKERR( MatGetSubMatrix(self.mat, isrow.iset, ciscol,
  *                                 reuse, &submat.mat) )
  *         return submat             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_submat));
   __pyx_r = ((PyObject *)__pyx_v_submat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1094
+  /* "PETSc/Mat.pyx":1121
  *         CHKERR( MatIncreaseOverlap(self.mat, 1, &iset.iset, ival) )
  * 
  *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):             # <<<<<<<<<<<<<<
@@ -127656,7 +129225,537 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1106
+/* "PETSc/Mat.pyx":1131
+ *         return submat
+ * 
+ *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):             # <<<<<<<<<<<<<<
+ *         if iscols is None: iscols = isrows
+ *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275getSubMatrices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_274getSubMatrices[] = "Mat.getSubMatrices(self, isrows, iscols=None, submats=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275getSubMatrices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_isrows = 0;
+  PyObject *__pyx_v_iscols = 0;
+  PyObject *__pyx_v_submats = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getSubMatrices (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_isrows,&__pyx_n_s_iscols,&__pyx_n_s_submats,0};
+    PyObject* values[3] = {0,0,0};
+    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 (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrows)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscols);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_submats);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSubMatrices") < 0)) __PYX_ERR(33, 1131, __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_isrows = values[0];
+    __pyx_v_iscols = values[1];
+    __pyx_v_submats = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getSubMatrices", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1131, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getSubMatrices", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(((PyObject *)__pyx_v_isrows) == Py_None)) {
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "isrows"); __PYX_ERR(33, 1131, __pyx_L1_error)
+  }
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrows, __pyx_v_iscols, __pyx_v_submats);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_isrows, PyObject *__pyx_v_iscols, PyObject *__pyx_v_submats) {
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_n;
+  MatReuse __pyx_v_reuse;
+  IS *__pyx_v_cisrows;
+  IS *__pyx_v_ciscols;
+  Mat *__pyx_v_cmats;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  Py_ssize_t __pyx_t_6;
+  IS __pyx_t_7;
+  int __pyx_t_8;
+  Mat __pyx_t_9;
+  __Pyx_RefNannySetupContext("getSubMatrices", 0);
+  __Pyx_INCREF(__pyx_v_isrows);
+  __Pyx_INCREF(__pyx_v_iscols);
+  __Pyx_INCREF(__pyx_v_submats);
+
+  /* "PETSc/Mat.pyx":1132
+ * 
+ *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):
+ *         if iscols is None: iscols = isrows             # <<<<<<<<<<<<<<
+ *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
+ *         iscols = [iscols] if isinstance(iscols, IS) else list(iscols)
+ */
+  __pyx_t_1 = (__pyx_v_iscols == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __Pyx_INCREF(__pyx_v_isrows);
+    __Pyx_DECREF_SET(__pyx_v_iscols, __pyx_v_isrows);
+  }
+
+  /* "PETSc/Mat.pyx":1133
+ *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):
+ *         if iscols is None: iscols = isrows
+ *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)             # <<<<<<<<<<<<<<
+ *         iscols = [iscols] if isinstance(iscols, IS) else list(iscols)
+ *         assert len(isrows) == len(iscols)
+ */
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_isrows, __pyx_ptype_8petsc4py_5PETSc_IS); 
+  if ((__pyx_t_2 != 0)) {
+    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1133, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_v_isrows);
+    __Pyx_GIVEREF(__pyx_v_isrows);
+    PyList_SET_ITEM(__pyx_t_4, 0, __pyx_v_isrows);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_t_4 = 0;
+  } else {
+    __pyx_t_4 = PySequence_List(__pyx_v_isrows); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1133, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF_SET(__pyx_v_isrows, __pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/Mat.pyx":1134
+ *         if iscols is None: iscols = isrows
+ *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
+ *         iscols = [iscols] if isinstance(iscols, IS) else list(iscols)             # <<<<<<<<<<<<<<
+ *         assert len(isrows) == len(iscols)
+ *         cdef Py_ssize_t i, n = len(isrows)
+ */
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_iscols, __pyx_ptype_8petsc4py_5PETSc_IS); 
+  if ((__pyx_t_2 != 0)) {
+    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1134, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_v_iscols);
+    __Pyx_GIVEREF(__pyx_v_iscols);
+    PyList_SET_ITEM(__pyx_t_4, 0, __pyx_v_iscols);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_t_4 = 0;
+  } else {
+    __pyx_t_4 = PySequence_List(__pyx_v_iscols); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1134, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF_SET(__pyx_v_iscols, __pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/Mat.pyx":1135
+ *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
+ *         iscols = [iscols] if isinstance(iscols, IS) else list(iscols)
+ *         assert len(isrows) == len(iscols)             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i, n = len(isrows)
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_5 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1135, __pyx_L1_error)
+    __pyx_t_6 = PyObject_Length(__pyx_v_iscols); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(33, 1135, __pyx_L1_error)
+    if (unlikely(!((__pyx_t_5 == __pyx_t_6) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(33, 1135, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/Mat.pyx":1136
+ *         iscols = [iscols] if isinstance(iscols, IS) else list(iscols)
+ *         assert len(isrows) == len(iscols)
+ *         cdef Py_ssize_t i, n = len(isrows)             # <<<<<<<<<<<<<<
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscIS  *cisrows = NULL
+ */
+  __pyx_t_6 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(33, 1136, __pyx_L1_error)
+  __pyx_v_n = __pyx_t_6;
+
+  /* "PETSc/Mat.pyx":1137
+ *         assert len(isrows) == len(iscols)
+ *         cdef Py_ssize_t i, n = len(isrows)
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
+ *         cdef PetscIS  *cisrows = NULL
+ *         cdef PetscIS  *ciscols = NULL
+ */
+  __pyx_v_reuse = MAT_INITIAL_MATRIX;
+
+  /* "PETSc/Mat.pyx":1138
+ *         cdef Py_ssize_t i, n = len(isrows)
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscIS  *cisrows = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscIS  *ciscols = NULL
+ *         cdef PetscMat *cmats   = NULL
+ */
+  __pyx_v_cisrows = NULL;
+
+  /* "PETSc/Mat.pyx":1139
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscIS  *cisrows = NULL
+ *         cdef PetscIS  *ciscols = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscMat *cmats   = NULL
+ *         cdef object tmp1, tmp2
+ */
+  __pyx_v_ciscols = NULL;
+
+  /* "PETSc/Mat.pyx":1140
+ *         cdef PetscIS  *cisrows = NULL
+ *         cdef PetscIS  *ciscols = NULL
+ *         cdef PetscMat *cmats   = NULL             # <<<<<<<<<<<<<<
+ *         cdef object tmp1, tmp2
+ *         cdef Mat mat
+ */
+  __pyx_v_cmats = NULL;
+
+  /* "PETSc/Mat.pyx":1143
+ *         cdef object tmp1, tmp2
+ *         cdef Mat mat
+ *         tmp1 = oarray_p(empty_p(n), NULL, <void**>&cisrows)             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < n: cisrows[i] = (<IS?>isrows[i]).iset
+ *         tmp2 = oarray_p(empty_p(n), NULL, <void**>&ciscols)
+ */
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1143, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_3, NULL, ((void **)(&__pyx_v_cisrows)))); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1143, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_tmp1 = __pyx_t_4;
+  __pyx_t_4 = 0;
+
+  /* "PETSc/Mat.pyx":1144
+ *         cdef Mat mat
+ *         tmp1 = oarray_p(empty_p(n), NULL, <void**>&cisrows)
+ *         for i from 0 <= i < n: cisrows[i] = (<IS?>isrows[i]).iset             # <<<<<<<<<<<<<<
+ *         tmp2 = oarray_p(empty_p(n), NULL, <void**>&ciscols)
+ *         for i from 0 <= i < n: ciscols[i] = (<IS?>iscols[i]).iset
+ */
+  __pyx_t_6 = __pyx_v_n;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_isrows, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1144, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(33, 1144, __pyx_L1_error)
+    __pyx_t_7 = ((struct PyPetscISObject *)__pyx_t_4)->iset;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    (__pyx_v_cisrows[__pyx_v_i]) = __pyx_t_7;
+  }
+
+  /* "PETSc/Mat.pyx":1145
+ *         tmp1 = oarray_p(empty_p(n), NULL, <void**>&cisrows)
+ *         for i from 0 <= i < n: cisrows[i] = (<IS?>isrows[i]).iset
+ *         tmp2 = oarray_p(empty_p(n), NULL, <void**>&ciscols)             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < n: ciscols[i] = (<IS?>iscols[i]).iset
+ *         if submats is not None:
+ */
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1145, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_4, NULL, ((void **)(&__pyx_v_ciscols)))); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1145, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_tmp2 = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "PETSc/Mat.pyx":1146
+ *         for i from 0 <= i < n: cisrows[i] = (<IS?>isrows[i]).iset
+ *         tmp2 = oarray_p(empty_p(n), NULL, <void**>&ciscols)
+ *         for i from 0 <= i < n: ciscols[i] = (<IS?>iscols[i]).iset             # <<<<<<<<<<<<<<
+ *         if submats is not None:
+ *             reuse = MAT_REUSE_MATRIX
+ */
+  __pyx_t_6 = __pyx_v_n;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_iscols, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1146, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(33, 1146, __pyx_L1_error)
+    __pyx_t_7 = ((struct PyPetscISObject *)__pyx_t_3)->iset;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_ciscols[__pyx_v_i]) = __pyx_t_7;
+  }
+
+  /* "PETSc/Mat.pyx":1147
+ *         tmp2 = oarray_p(empty_p(n), NULL, <void**>&ciscols)
+ *         for i from 0 <= i < n: ciscols[i] = (<IS?>iscols[i]).iset
+ *         if submats is not None:             # <<<<<<<<<<<<<<
+ *             reuse = MAT_REUSE_MATRIX
+ *             submats = list(submats)
+ */
+  __pyx_t_2 = (__pyx_v_submats != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/Mat.pyx":1148
+ *         for i from 0 <= i < n: ciscols[i] = (<IS?>iscols[i]).iset
+ *         if submats is not None:
+ *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
+ *             submats = list(submats)
+ *             assert len(submats) == len(isrows)
+ */
+    __pyx_v_reuse = MAT_REUSE_MATRIX;
+
+    /* "PETSc/Mat.pyx":1149
+ *         if submats is not None:
+ *             reuse = MAT_REUSE_MATRIX
+ *             submats = list(submats)             # <<<<<<<<<<<<<<
+ *             assert len(submats) == len(isrows)
+ *             CHKERR( PetscMalloc(<size_t>(n+1)*sizeof(PetscMat), &cmats) )
+ */
+    __pyx_t_3 = PySequence_List(__pyx_v_submats); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1149, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_submats, __pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "PETSc/Mat.pyx":1150
+ *             reuse = MAT_REUSE_MATRIX
+ *             submats = list(submats)
+ *             assert len(submats) == len(isrows)             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscMalloc(<size_t>(n+1)*sizeof(PetscMat), &cmats) )
+ *             for i from 0 <= i < n: cmats[i] = (<Mat?>submats[i]).mat
+ */
+    #ifndef CYTHON_WITHOUT_ASSERTIONS
+    if (unlikely(!Py_OptimizeFlag)) {
+      __pyx_t_6 = PyObject_Length(__pyx_v_submats); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(33, 1150, __pyx_L1_error)
+      __pyx_t_5 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1150, __pyx_L1_error)
+      if (unlikely(!((__pyx_t_6 == __pyx_t_5) != 0))) {
+        PyErr_SetNone(PyExc_AssertionError);
+        __PYX_ERR(33, 1150, __pyx_L1_error)
+      }
+    }
+    #endif
+
+    /* "PETSc/Mat.pyx":1151
+ *             submats = list(submats)
+ *             assert len(submats) == len(isrows)
+ *             CHKERR( PetscMalloc(<size_t>(n+1)*sizeof(PetscMat), &cmats) )             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < n: cmats[i] = (<Mat?>submats[i]).mat
+ *         CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )
+ */
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((((size_t)(__pyx_v_n + 1)) * (sizeof(Mat))), (&__pyx_v_cmats))); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(33, 1151, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":1152
+ *             assert len(submats) == len(isrows)
+ *             CHKERR( PetscMalloc(<size_t>(n+1)*sizeof(PetscMat), &cmats) )
+ *             for i from 0 <= i < n: cmats[i] = (<Mat?>submats[i]).mat             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )
+ *         for i from 0 <= i < n: PetscINCREF(<PetscObject*>&cmats[i])
+ */
+    __pyx_t_5 = __pyx_v_n;
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
+      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_submats, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1152, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(33, 1152, __pyx_L1_error)
+      __pyx_t_9 = ((struct PyPetscMatObject *)__pyx_t_3)->mat;
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      (__pyx_v_cmats[__pyx_v_i]) = __pyx_t_9;
+    }
+
+    /* "PETSc/Mat.pyx":1147
+ *         tmp2 = oarray_p(empty_p(n), NULL, <void**>&ciscols)
+ *         for i from 0 <= i < n: ciscols[i] = (<IS?>iscols[i]).iset
+ *         if submats is not None:             # <<<<<<<<<<<<<<
+ *             reuse = MAT_REUSE_MATRIX
+ *             submats = list(submats)
+ */
+  }
+
+  /* "PETSc/Mat.pyx":1153
+ *             CHKERR( PetscMalloc(<size_t>(n+1)*sizeof(PetscMat), &cmats) )
+ *             for i from 0 <= i < n: cmats[i] = (<Mat?>submats[i]).mat
+ *         CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < n: PetscINCREF(<PetscObject*>&cmats[i])
+ *         if reuse == MAT_INITIAL_MATRIX:
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSubMatrices(__pyx_v_self->mat, ((PetscInt)__pyx_v_n), __pyx_v_cisrows, __pyx_v_ciscols, __pyx_v_reuse, (&__pyx_v_cmats))); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(33, 1153, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1154
+ *             for i from 0 <= i < n: cmats[i] = (<Mat?>submats[i]).mat
+ *         CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )
+ *         for i from 0 <= i < n: PetscINCREF(<PetscObject*>&cmats[i])             # <<<<<<<<<<<<<<
+ *         if reuse == MAT_INITIAL_MATRIX:
+ *             submats = [None] * n
+ */
+  __pyx_t_5 = __pyx_v_n;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
+    __pyx_f_8petsc4py_5PETSc_PetscINCREF(((PetscObject *)(&(__pyx_v_cmats[__pyx_v_i]))));
+  }
+
+  /* "PETSc/Mat.pyx":1155
+ *         CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )
+ *         for i from 0 <= i < n: PetscINCREF(<PetscObject*>&cmats[i])
+ *         if reuse == MAT_INITIAL_MATRIX:             # <<<<<<<<<<<<<<
+ *             submats = [None] * n
+ *             for i from 0 <= i < n:
+ */
+  __pyx_t_1 = ((__pyx_v_reuse == MAT_INITIAL_MATRIX) != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/Mat.pyx":1156
+ *         for i from 0 <= i < n: PetscINCREF(<PetscObject*>&cmats[i])
+ *         if reuse == MAT_INITIAL_MATRIX:
+ *             submats = [None] * n             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < n:
+ *                 submats[i] = mat = Mat()
+ */
+    __pyx_t_3 = PyList_New(1 * ((__pyx_v_n<0) ? 0:__pyx_v_n)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1156, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    { Py_ssize_t __pyx_temp;
+      for (__pyx_temp=0; __pyx_temp < __pyx_v_n; __pyx_temp++) {
+        __Pyx_INCREF(Py_None);
+        __Pyx_GIVEREF(Py_None);
+        PyList_SET_ITEM(__pyx_t_3, __pyx_temp, Py_None);
+      }
+    }
+    __Pyx_DECREF_SET(__pyx_v_submats, __pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "PETSc/Mat.pyx":1157
+ *         if reuse == MAT_INITIAL_MATRIX:
+ *             submats = [None] * n
+ *             for i from 0 <= i < n:             # <<<<<<<<<<<<<<
+ *                 submats[i] = mat = Mat()
+ *                 mat.mat = cmats[i]
+ */
+    __pyx_t_5 = __pyx_v_n;
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
+
+      /* "PETSc/Mat.pyx":1158
+ *             submats = [None] * n
+ *             for i from 0 <= i < n:
+ *                 submats[i] = mat = Mat()             # <<<<<<<<<<<<<<
+ *                 mat.mat = cmats[i]
+ *         CHKERR( MatDestroyMatrices(<PetscInt>n, &cmats) )
+ */
+      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1158, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      if (unlikely(__Pyx_SetItemInt(__pyx_v_submats, __pyx_v_i, __pyx_t_3, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1) < 0)) __PYX_ERR(33, 1158, __pyx_L1_error)
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_XDECREF_SET(__pyx_v_mat, ((struct PyPetscMatObject *)__pyx_t_3));
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+      /* "PETSc/Mat.pyx":1159
+ *             for i from 0 <= i < n:
+ *                 submats[i] = mat = Mat()
+ *                 mat.mat = cmats[i]             # <<<<<<<<<<<<<<
+ *         CHKERR( MatDestroyMatrices(<PetscInt>n, &cmats) )
+ *         return submats
+ */
+      __pyx_v_mat->mat = (__pyx_v_cmats[__pyx_v_i]);
+    }
+
+    /* "PETSc/Mat.pyx":1155
+ *         CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )
+ *         for i from 0 <= i < n: PetscINCREF(<PetscObject*>&cmats[i])
+ *         if reuse == MAT_INITIAL_MATRIX:             # <<<<<<<<<<<<<<
+ *             submats = [None] * n
+ *             for i from 0 <= i < n:
+ */
+  }
+
+  /* "PETSc/Mat.pyx":1160
+ *                 submats[i] = mat = Mat()
+ *                 mat.mat = cmats[i]
+ *         CHKERR( MatDestroyMatrices(<PetscInt>n, &cmats) )             # <<<<<<<<<<<<<<
+ *         return submats
+ * 
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDestroyMatrices(((PetscInt)__pyx_v_n), (&__pyx_v_cmats))); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(33, 1160, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1161
+ *                 mat.mat = cmats[i]
+ *         CHKERR( MatDestroyMatrices(<PetscInt>n, &cmats) )
+ *         return submats             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_submats);
+  __pyx_r = __pyx_v_submats;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1131
+ *         return submat
+ * 
+ *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):             # <<<<<<<<<<<<<<
+ *         if iscols is None: iscols = isrows
+ *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getSubMatrices", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp1);
+  __Pyx_XDECREF(__pyx_v_tmp2);
+  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
+  __Pyx_XDECREF(__pyx_v_isrows);
+  __Pyx_XDECREF(__pyx_v_iscols);
+  __Pyx_XDECREF(__pyx_v_submats);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1165
  *     #
  * 
  *     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):             # <<<<<<<<<<<<<<
@@ -127665,15 +129764,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getSubMatrix(struct PyPetscMa
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271getLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix[] = "Mat.getLocalSubMatrix(self, IS isrow, IS iscol, Mat submat=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271getLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277getLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_276getLocalSubMatrix[] = "Mat.getLocalSubMatrix(self, IS isrow, IS iscol, Mat submat=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277getLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_isrow = 0;
   struct PyPetscISObject *__pyx_v_iscol = 0;
   struct PyPetscMatObject *__pyx_v_submat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getLocalSubMatrix (wrapper)", 0);
@@ -127699,7 +129795,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271getLocalSubMatrix(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("getLocalSubMatrix", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("getLocalSubMatrix", 0, 2, 3, 1); __PYX_ERR(33, 1165, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -127708,7 +129804,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271getLocalSubMatrix(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLocalSubMatrix") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLocalSubMatrix") < 0)) __PYX_ERR(33, 1165, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -127725,16 +129821,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271getLocalSubMatrix(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLocalSubMatrix", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getLocalSubMatrix", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1165, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getLocalSubMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "submat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1165, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1165, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "submat", 0))) __PYX_ERR(33, 1165, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_276getLocalSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127745,20 +129841,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271getLocalSubMatrix(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276getLocalSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getLocalSubMatrix", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_submat);
 
-  /* "PETSc/Mat.pyx":1107
+  /* "PETSc/Mat.pyx":1166
  * 
  *     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):
  *         if submat is None: submat = Mat()             # <<<<<<<<<<<<<<
@@ -127768,35 +129861,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix(struct PyPe
   __pyx_t_1 = (((PyObject *)__pyx_v_submat) == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1166, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_submat, ((struct PyPetscMatObject *)__pyx_t_3));
     __pyx_t_3 = 0;
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":1108
+  /* "PETSc/Mat.pyx":1167
  *     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):
  *         if submat is None: submat = Mat()
  *         else: CHKERR( MatDestroy(&submat.mat) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )
  *         return submat
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDestroy((&__pyx_v_submat->mat))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDestroy((&__pyx_v_submat->mat))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1167, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1109
+  /* "PETSc/Mat.pyx":1168
  *         if submat is None: submat = Mat()
  *         else: CHKERR( MatDestroy(&submat.mat) )
  *         CHKERR( MatGetLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )             # <<<<<<<<<<<<<<
  *         return submat
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSubMatrix(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSubMatrix(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1168, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1110
+  /* "PETSc/Mat.pyx":1169
  *         else: CHKERR( MatDestroy(&submat.mat) )
  *         CHKERR( MatGetLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )
  *         return submat             # <<<<<<<<<<<<<<
@@ -127808,7 +129901,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix(struct PyPe
   __pyx_r = ((PyObject *)__pyx_v_submat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1106
+  /* "PETSc/Mat.pyx":1165
  *     #
  * 
  *     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):             # <<<<<<<<<<<<<<
@@ -127828,7 +129921,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1112
+/* "PETSc/Mat.pyx":1171
  *         return submat
  * 
  *     def restoreLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat not None):             # <<<<<<<<<<<<<<
@@ -127837,15 +129930,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273restoreLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_272restoreLocalSubMatrix[] = "Mat.restoreLocalSubMatrix(self, IS isrow, IS iscol, Mat submat)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273restoreLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279restoreLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_278restoreLocalSubMatrix[] = "Mat.restoreLocalSubMatrix(self, IS isrow, IS iscol, Mat submat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279restoreLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_isrow = 0;
   struct PyPetscISObject *__pyx_v_iscol = 0;
   struct PyPetscMatObject *__pyx_v_submat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("restoreLocalSubMatrix (wrapper)", 0);
@@ -127870,16 +129960,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273restoreLocalSubMatrix(PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, 1); __PYX_ERR(33, 1171, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_submat)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, 2); __PYX_ERR(33, 1171, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreLocalSubMatrix") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreLocalSubMatrix") < 0)) __PYX_ERR(33, 1171, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -127894,16 +129984,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273restoreLocalSubMatrix(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1171, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.restoreLocalSubMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "submat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_272restoreLocalSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1171, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1171, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "submat", 0))) __PYX_ERR(33, 1171, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_278restoreLocalSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127914,25 +130004,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273restoreLocalSubMatrix(PyObjec
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272restoreLocalSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278restoreLocalSubMatrix(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, struct PyPetscMatObject *__pyx_v_submat) {
   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("restoreLocalSubMatrix", 0);
 
-  /* "PETSc/Mat.pyx":1113
+  /* "PETSc/Mat.pyx":1172
  * 
  *     def restoreLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat not None):
  *         CHKERR( MatRestoreLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreLocalSubMatrix(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRestoreLocalSubMatrix(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1172, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1112
+  /* "PETSc/Mat.pyx":1171
  *         return submat
  * 
  *     def restoreLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat not None):             # <<<<<<<<<<<<<<
@@ -127952,7 +130039,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272restoreLocalSubMatrix(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1117
+/* "PETSc/Mat.pyx":1176
  *     #
  * 
  *     def norm(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -127961,13 +130048,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272restoreLocalSubMatrix(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_274norm[] = "Mat.norm(self, norm_type=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_280norm[] = "Mat.norm(self, norm_type=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_norm_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("norm (wrapper)", 0);
@@ -127992,7 +130076,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275norm(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "norm") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "norm") < 0)) __PYX_ERR(33, 1176, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -128005,20 +130089,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275norm(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("norm", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("norm", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1176, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_274norm(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_norm_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_280norm(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_norm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
   NormType __pyx_v_norm_1_2;
   NormType __pyx_v_ntype;
   PetscReal __pyx_v_rval[2];
@@ -128031,12 +130115,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject
   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("norm", 0);
 
-  /* "PETSc/Mat.pyx":1118
+  /* "PETSc/Mat.pyx":1177
  * 
  *     def norm(self, norm_type=None):
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2             # <<<<<<<<<<<<<<
@@ -128045,7 +130126,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject
  */
   __pyx_v_norm_1_2 = NORM_1_AND_2;
 
-  /* "PETSc/Mat.pyx":1119
+  /* "PETSc/Mat.pyx":1178
  *     def norm(self, norm_type=None):
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_FROBENIUS             # <<<<<<<<<<<<<<
@@ -128054,7 +130135,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject
  */
   __pyx_v_ntype = NORM_FROBENIUS;
 
-  /* "PETSc/Mat.pyx":1120
+  /* "PETSc/Mat.pyx":1179
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_FROBENIUS
  *         if norm_type is not None: ntype = norm_type             # <<<<<<<<<<<<<<
@@ -128064,22 +130145,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject
   __pyx_t_1 = (__pyx_v_norm_type != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = ((NormType)PyInt_AsLong(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1179, __pyx_L1_error)
     __pyx_v_ntype = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1122
+  /* "PETSc/Mat.pyx":1181
  *         if norm_type is not None: ntype = norm_type
  *         cdef PetscReal rval[2]
  *         CHKERR( MatNorm(self.mat, ntype, rval) )             # <<<<<<<<<<<<<<
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNorm(__pyx_v_self->mat, __pyx_v_ntype, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNorm(__pyx_v_self->mat, __pyx_v_ntype, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1181, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1123
+  /* "PETSc/Mat.pyx":1182
  *         cdef PetscReal rval[2]
  *         CHKERR( MatNorm(self.mat, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])             # <<<<<<<<<<<<<<
@@ -128089,27 +130168,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject
   __pyx_t_2 = ((__pyx_v_ntype != __pyx_v_norm_1_2) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1182, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":1124
+  /* "PETSc/Mat.pyx":1183
  *         CHKERR( MatNorm(self.mat, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))             # <<<<<<<<<<<<<<
  * 
  *     def scale(self, alpha):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1183, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_6)) __PYX_ERR(33, 1183, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 1183, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
@@ -128122,7 +130201,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":1117
+  /* "PETSc/Mat.pyx":1176
  *     #
  * 
  *     def norm(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -128143,7 +130222,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1126
+/* "PETSc/Mat.pyx":1185
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def scale(self, alpha):             # <<<<<<<<<<<<<<
@@ -128152,13 +130231,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274norm(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_276scale[] = "Mat.scale(self, alpha)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_282scale[] = "Mat.scale(self, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283scale(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("scale (wrapper)", 0);
@@ -128180,7 +130256,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277scale(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, "scale") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1126; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scale") < 0)) __PYX_ERR(33, 1185, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -128191,50 +130267,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277scale(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("scale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1126; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("scale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1185, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.scale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_276scale(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_282scale(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276scale(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282scale(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("scale", 0);
 
-  /* "PETSc/Mat.pyx":1127
+  /* "PETSc/Mat.pyx":1186
  * 
  *     def scale(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( MatScale(self.mat, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1186, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1128
+  /* "PETSc/Mat.pyx":1187
  *     def scale(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( MatScale(self.mat, sval) )             # <<<<<<<<<<<<<<
  * 
  *     def shift(self, alpha):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatScale(__pyx_v_self->mat, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatScale(__pyx_v_self->mat, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1187, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1126
+  /* "PETSc/Mat.pyx":1185
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def scale(self, alpha):             # <<<<<<<<<<<<<<
@@ -128254,7 +130327,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276scale(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1130
+/* "PETSc/Mat.pyx":1189
  *         CHKERR( MatScale(self.mat, sval) )
  * 
  *     def shift(self, alpha):             # <<<<<<<<<<<<<<
@@ -128263,13 +130336,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276scale(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_278shift[] = "Mat.shift(self, alpha)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_284shift[] = "Mat.shift(self, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285shift(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("shift (wrapper)", 0);
@@ -128291,7 +130361,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279shift(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, "shift") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1130; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "shift") < 0)) __PYX_ERR(33, 1189, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -128302,50 +130372,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279shift(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("shift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1130; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("shift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1189, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.shift", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_278shift(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_284shift(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278shift(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284shift(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __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("shift", 0);
 
-  /* "PETSc/Mat.pyx":1131
+  /* "PETSc/Mat.pyx":1190
  * 
  *     def shift(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         CHKERR( MatShift(self.mat, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1190, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1132
+  /* "PETSc/Mat.pyx":1191
  *     def shift(self, alpha):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( MatShift(self.mat, sval) )             # <<<<<<<<<<<<<<
  * 
  *     def chop(self, tol):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatShift(__pyx_v_self->mat, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatShift(__pyx_v_self->mat, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1191, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1130
+  /* "PETSc/Mat.pyx":1189
  *         CHKERR( MatScale(self.mat, sval) )
  * 
  *     def shift(self, alpha):             # <<<<<<<<<<<<<<
@@ -128365,7 +130432,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278shift(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1134
+/* "PETSc/Mat.pyx":1193
  *         CHKERR( MatShift(self.mat, sval) )
  * 
  *     def chop(self, tol):             # <<<<<<<<<<<<<<
@@ -128374,13 +130441,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278shift(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_280chop[] = "Mat.chop(self, tol)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_286chop[] = "Mat.chop(self, tol)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("chop (wrapper)", 0);
@@ -128402,7 +130466,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281chop(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, "chop") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "chop") < 0)) __PYX_ERR(33, 1193, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -128413,50 +130477,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281chop(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("chop", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("chop", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1193, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.chop", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_280chop(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_tol);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_286chop(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_tol);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280chop(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286chop(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol) {
   PetscReal __pyx_v_rval;
   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("chop", 0);
 
-  /* "PETSc/Mat.pyx":1135
+  /* "PETSc/Mat.pyx":1194
  * 
  *     def chop(self, tol):
  *         cdef PetscReal rval = asReal(tol)             # <<<<<<<<<<<<<<
  *         CHKERR( MatChop(self.mat, rval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 1194, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1136
+  /* "PETSc/Mat.pyx":1195
  *     def chop(self, tol):
  *         cdef PetscReal rval = asReal(tol)
  *         CHKERR( MatChop(self.mat, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def axpy(self, alpha, Mat X not None, structure=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatChop(__pyx_v_self->mat, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatChop(__pyx_v_self->mat, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1195, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1134
+  /* "PETSc/Mat.pyx":1193
  *         CHKERR( MatShift(self.mat, sval) )
  * 
  *     def chop(self, tol):             # <<<<<<<<<<<<<<
@@ -128476,7 +130537,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280chop(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1138
+/* "PETSc/Mat.pyx":1197
  *         CHKERR( MatChop(self.mat, rval) )
  * 
  *     def axpy(self, alpha, Mat X not None, structure=None):             # <<<<<<<<<<<<<<
@@ -128485,15 +130546,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280chop(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_282axpy[] = "Mat.axpy(self, alpha, Mat X, structure=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_288axpy[] = "Mat.axpy(self, alpha, Mat X, structure=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alpha = 0;
   struct PyPetscMatObject *__pyx_v_X = 0;
   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("axpy (wrapper)", 0);
@@ -128519,7 +130577,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283axpy(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("axpy", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("axpy", 0, 2, 3, 1); __PYX_ERR(33, 1197, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -128528,7 +130586,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283axpy(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "axpy") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "axpy") < 0)) __PYX_ERR(33, 1197, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -128545,14 +130603,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283axpy(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("axpy", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("axpy", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1197, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.axpy", __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_Mat, 0, "X", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_282axpy(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_X, __pyx_v_structure);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_X), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "X", 0))) __PYX_ERR(33, 1197, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_288axpy(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_X, __pyx_v_structure);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128563,7 +130621,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283axpy(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282axpy(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscMatObject *__pyx_v_X, PyObject *__pyx_v_structure) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288axpy(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscMatObject *__pyx_v_X, PyObject *__pyx_v_structure) {
   PetscScalar __pyx_v_sval;
   MatStructure __pyx_v_flag;
   PyObject *__pyx_r = NULL;
@@ -128571,41 +130629,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282axpy(struct PyPetscMatObject
   PetscScalar __pyx_t_1;
   MatStructure __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("axpy", 0);
 
-  /* "PETSc/Mat.pyx":1139
+  /* "PETSc/Mat.pyx":1198
  * 
  *     def axpy(self, alpha, Mat X not None, structure=None):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         cdef PetscMatStructure flag = matstructure(structure)
  *         CHKERR( MatAXPY(self.mat, sval, X.mat, flag) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1198, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1140
+  /* "PETSc/Mat.pyx":1199
  *     def axpy(self, alpha, Mat X not None, structure=None):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         cdef PetscMatStructure flag = matstructure(structure)             # <<<<<<<<<<<<<<
  *         CHKERR( MatAXPY(self.mat, sval, X.mat, flag) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_2 == ((MatStructure)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_2 == ((MatStructure)-1L))) __PYX_ERR(33, 1199, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":1141
+  /* "PETSc/Mat.pyx":1200
  *         cdef PetscScalar sval = asScalar(alpha)
  *         cdef PetscMatStructure flag = matstructure(structure)
  *         CHKERR( MatAXPY(self.mat, sval, X.mat, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def aypx(self, alpha, Mat X not None, structure=None):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAXPY(__pyx_v_self->mat, __pyx_v_sval, __pyx_v_X->mat, __pyx_v_flag)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAXPY(__pyx_v_self->mat, __pyx_v_sval, __pyx_v_X->mat, __pyx_v_flag)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 1200, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1138
+  /* "PETSc/Mat.pyx":1197
  *         CHKERR( MatChop(self.mat, rval) )
  * 
  *     def axpy(self, alpha, Mat X not None, structure=None):             # <<<<<<<<<<<<<<
@@ -128625,7 +130680,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282axpy(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1143
+/* "PETSc/Mat.pyx":1202
  *         CHKERR( MatAXPY(self.mat, sval, X.mat, flag) )
  * 
  *     def aypx(self, alpha, Mat X not None, structure=None):             # <<<<<<<<<<<<<<
@@ -128634,15 +130689,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282axpy(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_284aypx[] = "Mat.aypx(self, alpha, Mat X, structure=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_290aypx[] = "Mat.aypx(self, alpha, Mat X, structure=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alpha = 0;
   struct PyPetscMatObject *__pyx_v_X = 0;
   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("aypx (wrapper)", 0);
@@ -128668,7 +130720,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285aypx(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("aypx", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("aypx", 0, 2, 3, 1); __PYX_ERR(33, 1202, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -128677,7 +130729,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285aypx(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "aypx") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "aypx") < 0)) __PYX_ERR(33, 1202, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -128694,14 +130746,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285aypx(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("aypx", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("aypx", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1202, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.aypx", __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_Mat, 0, "X", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_284aypx(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_X, __pyx_v_structure);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_X), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "X", 0))) __PYX_ERR(33, 1202, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_290aypx(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_X, __pyx_v_structure);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128712,7 +130764,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285aypx(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284aypx(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscMatObject *__pyx_v_X, PyObject *__pyx_v_structure) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290aypx(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha, struct PyPetscMatObject *__pyx_v_X, PyObject *__pyx_v_structure) {
   PetscScalar __pyx_v_sval;
   MatStructure __pyx_v_flag;
   PyObject *__pyx_r = NULL;
@@ -128720,41 +130772,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284aypx(struct PyPetscMatObject
   PetscScalar __pyx_t_1;
   MatStructure __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("aypx", 0);
 
-  /* "PETSc/Mat.pyx":1144
+  /* "PETSc/Mat.pyx":1203
  * 
  *     def aypx(self, alpha, Mat X not None, structure=None):
  *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
  *         cdef PetscMatStructure flag = matstructure(structure)
  *         CHKERR( MatAYPX(self.mat, sval, X.mat, flag) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1203, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1145
+  /* "PETSc/Mat.pyx":1204
  *     def aypx(self, alpha, Mat X not None, structure=None):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         cdef PetscMatStructure flag = matstructure(structure)             # <<<<<<<<<<<<<<
  *         CHKERR( MatAYPX(self.mat, sval, X.mat, flag) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_2 == ((MatStructure)-1))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_2 == ((MatStructure)-1L))) __PYX_ERR(33, 1204, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":1146
+  /* "PETSc/Mat.pyx":1205
  *         cdef PetscScalar sval = asScalar(alpha)
  *         cdef PetscMatStructure flag = matstructure(structure)
  *         CHKERR( MatAYPX(self.mat, sval, X.mat, flag) )             # <<<<<<<<<<<<<<
  * 
  *     # matrix-matrix product
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAYPX(__pyx_v_self->mat, __pyx_v_sval, __pyx_v_X->mat, __pyx_v_flag)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAYPX(__pyx_v_self->mat, __pyx_v_sval, __pyx_v_X->mat, __pyx_v_flag)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 1205, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1143
+  /* "PETSc/Mat.pyx":1202
  *         CHKERR( MatAXPY(self.mat, sval, X.mat, flag) )
  * 
  *     def aypx(self, alpha, Mat X not None, structure=None):             # <<<<<<<<<<<<<<
@@ -128774,7 +130823,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284aypx(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1150
+/* "PETSc/Mat.pyx":1209
  *     # matrix-matrix product
  * 
  *     def matMultSymbolic(self, Mat mat not None, fill=None):             # <<<<<<<<<<<<<<
@@ -128783,14 +130832,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284aypx(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287matMultSymbolic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_286matMultSymbolic[] = "Mat.matMultSymbolic(self, Mat mat, fill=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287matMultSymbolic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matMultSymbolic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_292matMultSymbolic[] = "Mat.matMultSymbolic(self, Mat mat, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matMultSymbolic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PyObject *__pyx_v_fill = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("matMultSymbolic (wrapper)", 0);
@@ -128819,7 +130865,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287matMultSymbolic(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultSymbolic") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1150; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultSymbolic") < 0)) __PYX_ERR(33, 1209, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -128834,14 +130880,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287matMultSymbolic(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("matMultSymbolic", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1150; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("matMultSymbolic", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1209, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.matMultSymbolic", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_fill);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1209, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_292matMultSymbolic(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_fill);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128852,7 +130898,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287matMultSymbolic(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_fill) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matMultSymbolic(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_fill) {
   struct PyPetscMatObject *__pyx_v_result = 0;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -128862,24 +130908,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(struct PyPets
   int __pyx_t_3;
   PetscReal __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matMultSymbolic", 0);
 
-  /* "PETSc/Mat.pyx":1151
+  /* "PETSc/Mat.pyx":1210
  * 
  *     def matMultSymbolic(self, Mat mat not None, fill=None):
  *         cdef Mat result = Mat()             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 2
  *         if fill is not None: rval = asReal(fill)
  */
-  __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[33]; __pyx_lineno = 1151; __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(33, 1210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_result = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1152
+  /* "PETSc/Mat.pyx":1211
  *     def matMultSymbolic(self, Mat mat not None, fill=None):
  *         cdef Mat result = Mat()
  *         cdef PetscReal rval = 2             # <<<<<<<<<<<<<<
@@ -128888,7 +130931,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(struct PyPets
  */
   __pyx_v_rval = 2.0;
 
-  /* "PETSc/Mat.pyx":1153
+  /* "PETSc/Mat.pyx":1212
  *         cdef Mat result = Mat()
  *         cdef PetscReal rval = 2
  *         if fill is not None: rval = asReal(fill)             # <<<<<<<<<<<<<<
@@ -128898,22 +130941,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(struct PyPets
   __pyx_t_2 = (__pyx_v_fill != Py_None);
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 1212, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1154
+  /* "PETSc/Mat.pyx":1213
  *         cdef PetscReal rval = 2
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatMultSymbolic(self.mat, mat.mat, rval, &result.mat) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatMultSymbolic(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_rval, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatMultSymbolic(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_rval, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1213, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1155
+  /* "PETSc/Mat.pyx":1214
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatMultSymbolic(self.mat, mat.mat, rval, &result.mat) )
  *         return result             # <<<<<<<<<<<<<<
@@ -128925,7 +130966,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(struct PyPets
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1150
+  /* "PETSc/Mat.pyx":1209
  *     # matrix-matrix product
  * 
  *     def matMultSymbolic(self, Mat mat not None, fill=None):             # <<<<<<<<<<<<<<
@@ -128945,7 +130986,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1157
+/* "PETSc/Mat.pyx":1216
  *         return result
  * 
  *     def matMultNumeric(self, Mat mat not None, Mat result=None):             # <<<<<<<<<<<<<<
@@ -128954,14 +130995,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286matMultSymbolic(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289matMultNumeric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_288matMultNumeric[] = "Mat.matMultNumeric(self, Mat mat, Mat result=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289matMultNumeric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295matMultNumeric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_294matMultNumeric[] = "Mat.matMultNumeric(self, Mat mat, Mat result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295matMultNumeric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   struct PyPetscMatObject *__pyx_v_result = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("matMultNumeric (wrapper)", 0);
@@ -128990,7 +131028,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289matMultNumeric(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultNumeric") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultNumeric") < 0)) __PYX_ERR(33, 1216, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -129005,15 +131043,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289matMultNumeric(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("matMultNumeric", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("matMultNumeric", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1216, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.matMultNumeric", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_288matMultNumeric(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1216, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1216, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result);
 
   /* function exit code */
   goto __pyx_L0;
@@ -129024,20 +131062,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289matMultNumeric(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288matMultNumeric(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matMultNumeric", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1158
+  /* "PETSc/Mat.pyx":1217
  * 
  *     def matMultNumeric(self, Mat mat not None, Mat result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -129048,22 +131083,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288matMultNumeric(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1159
+    /* "PETSc/Mat.pyx":1218
  *     def matMultNumeric(self, Mat mat not None, Mat result=None):
  *         if result is None:
  *             result = Mat()             # <<<<<<<<<<<<<<
  *         if result.mat == NULL:
  *             CHKERR( MatMatMultSymbolic(self.mat, mat.mat, 2.0, &result.mat) )
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscMatObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":1217
+ * 
+ *     def matMultNumeric(self, Mat mat not None, Mat result=None):
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Mat()
+ *         if result.mat == NULL:
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1160
+  /* "PETSc/Mat.pyx":1219
  *         if result is None:
  *             result = Mat()
  *         if result.mat == NULL:             # <<<<<<<<<<<<<<
@@ -129073,28 +131114,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288matMultNumeric(struct PyPetsc
   __pyx_t_2 = ((__pyx_v_result->mat == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1161
+    /* "PETSc/Mat.pyx":1220
  *             result = Mat()
  *         if result.mat == NULL:
  *             CHKERR( MatMatMultSymbolic(self.mat, mat.mat, 2.0, &result.mat) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatMatMultNumeric(self.mat, mat.mat, result.mat) )
  *         return result
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatMultSymbolic(__pyx_v_self->mat, __pyx_v_mat->mat, 2.0, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatMultSymbolic(__pyx_v_self->mat, __pyx_v_mat->mat, 2.0, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1220, __pyx_L1_error)
+
+    /* "PETSc/Mat.pyx":1219
+ *         if result is None:
+ *             result = Mat()
+ *         if result.mat == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatMatMultSymbolic(self.mat, mat.mat, 2.0, &result.mat) )
+ *         CHKERR( MatMatMultNumeric(self.mat, mat.mat, result.mat) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":1162
+  /* "PETSc/Mat.pyx":1221
  *         if result.mat == NULL:
  *             CHKERR( MatMatMultSymbolic(self.mat, mat.mat, 2.0, &result.mat) )
  *         CHKERR( MatMatMultNumeric(self.mat, mat.mat, result.mat) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatMultNumeric(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_result->mat)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatMultNumeric(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_result->mat)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1221, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1163
+  /* "PETSc/Mat.pyx":1222
  *             CHKERR( MatMatMultSymbolic(self.mat, mat.mat, 2.0, &result.mat) )
  *         CHKERR( MatMatMultNumeric(self.mat, mat.mat, result.mat) )
  *         return result             # <<<<<<<<<<<<<<
@@ -129106,7 +131153,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288matMultNumeric(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1157
+  /* "PETSc/Mat.pyx":1216
  *         return result
  * 
  *     def matMultNumeric(self, Mat mat not None, Mat result=None):             # <<<<<<<<<<<<<<
@@ -129126,7 +131173,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288matMultNumeric(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1165
+/* "PETSc/Mat.pyx":1224
  *         return result
  * 
  *     def matMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
@@ -129135,15 +131182,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288matMultNumeric(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291matMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_290matMult[] = "Mat.matMult(self, Mat mat, Mat result=None, fill=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291matMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297matMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_296matMult[] = "Mat.matMult(self, Mat mat, Mat result=None, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297matMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   struct PyPetscMatObject *__pyx_v_result = 0;
   PyObject *__pyx_v_fill = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("matMult (wrapper)", 0);
@@ -129179,7 +131223,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291matMult(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMult") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMult") < 0)) __PYX_ERR(33, 1224, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -129196,15 +131240,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291matMult(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("matMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("matMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1224, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.matMult", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1224, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1224, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
 
   /* function exit code */
   goto __pyx_L0;
@@ -129215,7 +131259,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291matMult(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill) {
   MatReuse __pyx_v_reuse;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -129225,13 +131269,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
   PyObject *__pyx_t_3 = NULL;
   PetscReal __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matMult", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1166
+  /* "PETSc/Mat.pyx":1225
  * 
  *     def matMult(self, Mat mat not None, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -129240,7 +131281,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1167
+  /* "PETSc/Mat.pyx":1226
  *     def matMult(self, Mat mat not None, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2             # <<<<<<<<<<<<<<
@@ -129249,7 +131290,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
  */
   __pyx_v_rval = 2.0;
 
-  /* "PETSc/Mat.pyx":1168
+  /* "PETSc/Mat.pyx":1227
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -129260,21 +131301,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1169
+    /* "PETSc/Mat.pyx":1228
  *         cdef PetscReal rval = 2
  *         if result is None:
  *             result = Mat()             # <<<<<<<<<<<<<<
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1228, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscMatObject *)__pyx_t_3));
     __pyx_t_3 = 0;
+
+    /* "PETSc/Mat.pyx":1227
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscReal rval = 2
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Mat()
+ *         elif result.mat != NULL:
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":1170
+  /* "PETSc/Mat.pyx":1229
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -129284,7 +131333,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
   __pyx_t_2 = ((__pyx_v_result->mat != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1171
+    /* "PETSc/Mat.pyx":1230
  *             result = Mat()
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -129292,11 +131341,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
  *         CHKERR( MatMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  */
     __pyx_v_reuse = MAT_REUSE_MATRIX;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":1229
+ *         if result is None:
+ *             result = Mat()
+ *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
+ *             reuse = MAT_REUSE_MATRIX
+ *         if fill is not None: rval = asReal(fill)
+ */
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1172
+  /* "PETSc/Mat.pyx":1231
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)             # <<<<<<<<<<<<<<
@@ -129306,22 +131362,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
   __pyx_t_2 = (__pyx_v_fill != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 1231, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":1173
+  /* "PETSc/Mat.pyx":1232
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatMult(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_reuse, __pyx_v_rval, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatMult(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_reuse, __pyx_v_rval, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1232, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1174
+  /* "PETSc/Mat.pyx":1233
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  *         return result             # <<<<<<<<<<<<<<
@@ -129333,7 +131387,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1165
+  /* "PETSc/Mat.pyx":1224
  *         return result
  * 
  *     def matMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
@@ -129353,7 +131407,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1176
+/* "PETSc/Mat.pyx":1235
  *         return result
  * 
  *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
@@ -129362,15 +131416,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290matMult(struct PyPetscMatObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matTransposeMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_292matTransposeMult[] = "Mat.matTransposeMult(self, Mat mat, Mat result=None, fill=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matTransposeMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matTransposeMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_298matTransposeMult[] = "Mat.matTransposeMult(self, Mat mat, Mat result=None, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matTransposeMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   struct PyPetscMatObject *__pyx_v_result = 0;
   PyObject *__pyx_v_fill = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("matTransposeMult (wrapper)", 0);
@@ -129406,7 +131457,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matTransposeMult(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matTransposeMult") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matTransposeMult") < 0)) __PYX_ERR(33, 1235, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -129423,15 +131474,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matTransposeMult(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("matTransposeMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("matTransposeMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1235, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.matTransposeMult", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1235, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1235, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
 
   /* function exit code */
   goto __pyx_L0;
@@ -129442,7 +131493,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matTransposeMult(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill) {
   MatReuse __pyx_v_reuse;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -129452,13 +131503,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
   PyObject *__pyx_t_3 = NULL;
   PetscReal __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("matTransposeMult", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1177
+  /* "PETSc/Mat.pyx":1236
  * 
  *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -129467,7 +131515,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1178
+  /* "PETSc/Mat.pyx":1237
  *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2             # <<<<<<<<<<<<<<
@@ -129476,7 +131524,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
  */
   __pyx_v_rval = 2.0;
 
-  /* "PETSc/Mat.pyx":1179
+  /* "PETSc/Mat.pyx":1238
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -129487,21 +131535,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1180
+    /* "PETSc/Mat.pyx":1239
  *         cdef PetscReal rval = 2
  *         if result is None:
  *             result = Mat()             # <<<<<<<<<<<<<<
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1239, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscMatObject *)__pyx_t_3));
     __pyx_t_3 = 0;
+
+    /* "PETSc/Mat.pyx":1238
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscReal rval = 2
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Mat()
+ *         elif result.mat != NULL:
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":1181
+  /* "PETSc/Mat.pyx":1240
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -129511,7 +131567,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
   __pyx_t_2 = ((__pyx_v_result->mat != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1182
+    /* "PETSc/Mat.pyx":1241
  *             result = Mat()
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -129519,11 +131575,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
  *         CHKERR( MatMatTransposeMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  */
     __pyx_v_reuse = MAT_REUSE_MATRIX;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":1240
+ *         if result is None:
+ *             result = Mat()
+ *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
+ *             reuse = MAT_REUSE_MATRIX
+ *         if fill is not None: rval = asReal(fill)
+ */
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1183
+  /* "PETSc/Mat.pyx":1242
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)             # <<<<<<<<<<<<<<
@@ -129533,22 +131596,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
   __pyx_t_2 = (__pyx_v_fill != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 1242, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":1184
+  /* "PETSc/Mat.pyx":1243
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatTransposeMult(self.mat, mat.mat, reuse, rval, &result.mat) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatTransposeMult(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_reuse, __pyx_v_rval, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatTransposeMult(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_reuse, __pyx_v_rval, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1243, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1185
+  /* "PETSc/Mat.pyx":1244
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatTransposeMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  *         return result             # <<<<<<<<<<<<<<
@@ -129560,7 +131621,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1176
+  /* "PETSc/Mat.pyx":1235
  *         return result
  * 
  *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
@@ -129580,7 +131641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1187
+/* "PETSc/Mat.pyx":1246
  *         return result
  * 
  *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
@@ -129589,15 +131650,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matTransposeMult(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295transposeMatMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_294transposeMatMult[] = "Mat.transposeMatMult(self, Mat mat, Mat result=None, fill=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295transposeMatMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301transposeMatMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_300transposeMatMult[] = "Mat.transposeMatMult(self, Mat mat, Mat result=None, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301transposeMatMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   struct PyPetscMatObject *__pyx_v_result = 0;
   PyObject *__pyx_v_fill = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("transposeMatMult (wrapper)", 0);
@@ -129633,7 +131691,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295transposeMatMult(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transposeMatMult") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transposeMatMult") < 0)) __PYX_ERR(33, 1246, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -129650,15 +131708,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295transposeMatMult(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("transposeMatMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("transposeMatMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1246, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.transposeMatMult", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1246, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1246, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
 
   /* function exit code */
   goto __pyx_L0;
@@ -129669,7 +131727,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295transposeMatMult(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill) {
   MatReuse __pyx_v_reuse;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -129679,13 +131737,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
   PyObject *__pyx_t_3 = NULL;
   PetscReal __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("transposeMatMult", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1188
+  /* "PETSc/Mat.pyx":1247
  * 
  *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -129694,7 +131749,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1189
+  /* "PETSc/Mat.pyx":1248
  *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2             # <<<<<<<<<<<<<<
@@ -129703,7 +131758,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
  */
   __pyx_v_rval = 2.0;
 
-  /* "PETSc/Mat.pyx":1190
+  /* "PETSc/Mat.pyx":1249
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -129714,21 +131769,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1191
+    /* "PETSc/Mat.pyx":1250
  *         cdef PetscReal rval = 2
  *         if result is None:
  *             result = Mat()             # <<<<<<<<<<<<<<
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1250, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscMatObject *)__pyx_t_3));
     __pyx_t_3 = 0;
+
+    /* "PETSc/Mat.pyx":1249
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscReal rval = 2
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Mat()
+ *         elif result.mat != NULL:
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":1192
+  /* "PETSc/Mat.pyx":1251
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -129738,7 +131801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
   __pyx_t_2 = ((__pyx_v_result->mat != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1193
+    /* "PETSc/Mat.pyx":1252
  *             result = Mat()
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -129746,11 +131809,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
  *         CHKERR( MatTransposeMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  */
     __pyx_v_reuse = MAT_REUSE_MATRIX;
-    goto __pyx_L3;
+
+    /* "PETSc/Mat.pyx":1251
+ *         if result is None:
+ *             result = Mat()
+ *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
+ *             reuse = MAT_REUSE_MATRIX
+ *         if fill is not None: rval = asReal(fill)
+ */
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1194
+  /* "PETSc/Mat.pyx":1253
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)             # <<<<<<<<<<<<<<
@@ -129760,22 +131830,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
   __pyx_t_2 = (__pyx_v_fill != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 1253, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":1195
+  /* "PETSc/Mat.pyx":1254
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatTransposeMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatTransposeMatMult(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_reuse, __pyx_v_rval, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatTransposeMatMult(__pyx_v_self->mat, __pyx_v_mat->mat, __pyx_v_reuse, __pyx_v_rval, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(33, 1254, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1196
+  /* "PETSc/Mat.pyx":1255
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatTransposeMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  *         return result             # <<<<<<<<<<<<<<
@@ -129787,7 +131855,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1187
+  /* "PETSc/Mat.pyx":1246
  *         return result
  * 
  *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
@@ -129807,7 +131875,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1200
+/* "PETSc/Mat.pyx":1259
  *     # XXX factorization
  * 
  *     def getOrdering(self, ord_type):             # <<<<<<<<<<<<<<
@@ -129816,13 +131884,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294transposeMatMult(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_296getOrdering[] = "Mat.getOrdering(self, ord_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_302getOrdering[] = "Mat.getOrdering(self, ord_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ord_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getOrdering (wrapper)", 0);
@@ -129844,7 +131909,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297getOrdering(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, "getOrdering") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1200; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getOrdering") < 0)) __PYX_ERR(33, 1259, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -129855,20 +131920,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297getOrdering(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getOrdering", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1200; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getOrdering", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1259, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getOrdering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_ord_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_302getOrdering(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_ord_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ord_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302getOrdering(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ord_type) {
   const char* __pyx_v_cval;
   struct PyPetscISObject *__pyx_v_rp = 0;
   struct PyPetscISObject *__pyx_v_cp = 0;
@@ -129876,13 +131941,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(struct PyPetscMat
   __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("getOrdering", 0);
   __Pyx_INCREF(__pyx_v_ord_type);
 
-  /* "PETSc/Mat.pyx":1201
+  /* "PETSc/Mat.pyx":1260
  * 
  *     def getOrdering(self, ord_type):
  *         cdef PetscMatOrderingType cval = NULL             # <<<<<<<<<<<<<<
@@ -129891,44 +131953,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(struct PyPetscMat
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Mat.pyx":1202
+  /* "PETSc/Mat.pyx":1261
  *     def getOrdering(self, ord_type):
  *         cdef PetscMatOrderingType cval = NULL
  *         ord_type = str2bytes(ord_type, &cval)             # <<<<<<<<<<<<<<
  *         cdef IS rp = IS(), cp = IS()
  *         CHKERR( MatGetOrdering(self.mat, cval, &rp.iset, &cp.iset) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ord_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ord_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_ord_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1203
+  /* "PETSc/Mat.pyx":1262
  *         cdef PetscMatOrderingType cval = NULL
  *         ord_type = str2bytes(ord_type, &cval)
  *         cdef IS rp = IS(), cp = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetOrdering(self.mat, cval, &rp.iset, &cp.iset) )
  *         return (rp, cp)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1262, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rp = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1262, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_cp = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1204
+  /* "PETSc/Mat.pyx":1263
  *         ord_type = str2bytes(ord_type, &cval)
  *         cdef IS rp = IS(), cp = IS()
  *         CHKERR( MatGetOrdering(self.mat, cval, &rp.iset, &cp.iset) )             # <<<<<<<<<<<<<<
  *         return (rp, cp)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOrdering(__pyx_v_self->mat, __pyx_v_cval, (&__pyx_v_rp->iset), (&__pyx_v_cp->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOrdering(__pyx_v_self->mat, __pyx_v_cval, (&__pyx_v_rp->iset), (&__pyx_v_cp->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1263, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1205
+  /* "PETSc/Mat.pyx":1264
  *         cdef IS rp = IS(), cp = IS()
  *         CHKERR( MatGetOrdering(self.mat, cval, &rp.iset, &cp.iset) )
  *         return (rp, cp)             # <<<<<<<<<<<<<<
@@ -129936,7 +131998,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(struct PyPetscMat
  *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1264, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_rp));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_rp));
@@ -129948,7 +132010,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(struct PyPetscMat
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1200
+  /* "PETSc/Mat.pyx":1259
  *     # XXX factorization
  * 
  *     def getOrdering(self, ord_type):             # <<<<<<<<<<<<<<
@@ -129970,7 +132032,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1207
+/* "PETSc/Mat.pyx":1266
  *         return (rp, cp)
  * 
  *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):             # <<<<<<<<<<<<<<
@@ -129979,15 +132041,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296getOrdering(struct PyPetscMat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299reorderForNonzeroDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal[] = "Mat.reorderForNonzeroDiagonal(self, IS isrow, IS iscol, atol=0)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299reorderForNonzeroDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305reorderForNonzeroDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_304reorderForNonzeroDiagonal[] = "Mat.reorderForNonzeroDiagonal(self, IS isrow, IS iscol, atol=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305reorderForNonzeroDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_isrow = 0;
   struct PyPetscISObject *__pyx_v_iscol = 0;
   PyObject *__pyx_v_atol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("reorderForNonzeroDiagonal (wrapper)", 0);
@@ -130013,7 +132072,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299reorderForNonzeroDiagonal(PyO
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("reorderForNonzeroDiagonal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("reorderForNonzeroDiagonal", 0, 2, 3, 1); __PYX_ERR(33, 1266, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -130022,7 +132081,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299reorderForNonzeroDiagonal(PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reorderForNonzeroDiagonal") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reorderForNonzeroDiagonal") < 0)) __PYX_ERR(33, 1266, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -130039,15 +132098,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299reorderForNonzeroDiagonal(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("reorderForNonzeroDiagonal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("reorderForNonzeroDiagonal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1266, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.reorderForNonzeroDiagonal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_atol);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1266, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1266, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_304reorderForNonzeroDiagonal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_atol);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130058,7 +132117,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299reorderForNonzeroDiagonal(PyO
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_atol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304reorderForNonzeroDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_atol) {
   PetscReal __pyx_v_rval;
   IS __pyx_v_rp;
   IS __pyx_v_cp;
@@ -130067,22 +132126,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal(str
   PetscReal __pyx_t_1;
   IS __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("reorderForNonzeroDiagonal", 0);
 
-  /* "PETSc/Mat.pyx":1208
+  /* "PETSc/Mat.pyx":1267
  * 
  *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):
  *         cdef PetscReal rval = asReal(atol)             # <<<<<<<<<<<<<<
  *         cdef PetscIS rp = isrow.iset, cp = iscol.iset
  *         CHKERR( MatReorderForNonzeroDiagonal(self.mat, rval, rp, cp) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 1267, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1209
+  /* "PETSc/Mat.pyx":1268
  *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):
  *         cdef PetscReal rval = asReal(atol)
  *         cdef PetscIS rp = isrow.iset, cp = iscol.iset             # <<<<<<<<<<<<<<
@@ -130094,16 +132150,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal(str
   __pyx_t_2 = __pyx_v_iscol->iset;
   __pyx_v_cp = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":1210
+  /* "PETSc/Mat.pyx":1269
  *         cdef PetscReal rval = asReal(atol)
  *         cdef PetscIS rp = isrow.iset, cp = iscol.iset
  *         CHKERR( MatReorderForNonzeroDiagonal(self.mat, rval, rp, cp) )             # <<<<<<<<<<<<<<
  * 
  *     def factorLU(self, IS isrow not None, IS iscol not None, options=None):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatReorderForNonzeroDiagonal(__pyx_v_self->mat, __pyx_v_rval, __pyx_v_rp, __pyx_v_cp)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatReorderForNonzeroDiagonal(__pyx_v_self->mat, __pyx_v_rval, __pyx_v_rp, __pyx_v_cp)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 1269, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1207
+  /* "PETSc/Mat.pyx":1266
  *         return (rp, cp)
  * 
  *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):             # <<<<<<<<<<<<<<
@@ -130123,7 +132179,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal(str
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1212
+/* "PETSc/Mat.pyx":1271
  *         CHKERR( MatReorderForNonzeroDiagonal(self.mat, rval, rp, cp) )
  * 
  *     def factorLU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
@@ -130132,15 +132188,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal(str
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301factorLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_300factorLU[] = "Mat.factorLU(self, IS isrow, IS iscol, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301factorLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_306factorLU[] = "Mat.factorLU(self, IS isrow, IS iscol, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_isrow = 0;
   struct PyPetscISObject *__pyx_v_iscol = 0;
   PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorLU (wrapper)", 0);
@@ -130166,7 +132219,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301factorLU(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("factorLU", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("factorLU", 0, 2, 3, 1); __PYX_ERR(33, 1271, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -130175,7 +132228,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301factorLU(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorLU") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorLU") < 0)) __PYX_ERR(33, 1271, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -130192,15 +132245,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301factorLU(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorLU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorLU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1271, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorLU", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_300factorLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1271, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1271, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_306factorLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130211,35 +132264,32 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301factorLU(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300factorLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_306factorLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options) {
   MatFactorInfo __pyx_v_info;
   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("factorLU", 0);
 
-  /* "PETSc/Mat.pyx":1214
+  /* "PETSc/Mat.pyx":1273
  *     def factorLU(self, IS isrow not None, IS iscol not None, options=None):
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_FALSE, PETSC_FALSE, options, &info)             # <<<<<<<<<<<<<<
  *         CHKERR( MatLUFactor(self.mat, isrow.iset, iscol.iset, &info) )
  *     def factorSymbolicLU(self, Mat mat not None, IS isrow not None, IS iscol not None, options=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matfactorinfo(PETSC_FALSE, PETSC_FALSE, __pyx_v_options, (&__pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matfactorinfo(PETSC_FALSE, PETSC_FALSE, __pyx_v_options, (&__pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1273, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1215
+  /* "PETSc/Mat.pyx":1274
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_FALSE, PETSC_FALSE, options, &info)
  *         CHKERR( MatLUFactor(self.mat, isrow.iset, iscol.iset, &info) )             # <<<<<<<<<<<<<<
  *     def factorSymbolicLU(self, Mat mat not None, IS isrow not None, IS iscol not None, options=None):
- *         mat = isrow = iscol = options = None
+ *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatLUFactor(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_info))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatLUFactor(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_info))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1274, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1212
+  /* "PETSc/Mat.pyx":1271
  *         CHKERR( MatReorderForNonzeroDiagonal(self.mat, rval, rp, cp) )
  * 
  *     def factorLU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
@@ -130259,25 +132309,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300factorLU(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1216
+/* "PETSc/Mat.pyx":1275
  *         matfactorinfo(PETSC_FALSE, PETSC_FALSE, options, &info)
  *         CHKERR( MatLUFactor(self.mat, isrow.iset, iscol.iset, &info) )
  *     def factorSymbolicLU(self, Mat mat not None, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
- *         mat = isrow = iscol = options = None
+ *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303factorSymbolicLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_302factorSymbolicLU[] = "Mat.factorSymbolicLU(self, Mat mat, IS isrow, IS iscol, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303factorSymbolicLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat = 0;
-  CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isrow = 0;
-  CYTHON_UNUSED struct PyPetscISObject *__pyx_v_iscol = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_308factorSymbolicLU[] = "Mat.factorSymbolicLU(self, Mat mat, IS isrow, IS iscol, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  struct PyPetscISObject *__pyx_v_isrow = 0;
+  struct PyPetscISObject *__pyx_v_iscol = 0;
+  PyObject *__pyx_v_options = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorSymbolicLU (wrapper)", 0);
@@ -130304,12 +132351,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303factorSymbolicLU(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, 1); __PYX_ERR(33, 1275, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, 2); __PYX_ERR(33, 1275, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -130318,7 +132365,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303factorSymbolicLU(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicLU") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicLU") < 0)) __PYX_ERR(33, 1275, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -130337,16 +132384,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303factorSymbolicLU(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1275, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorSymbolicLU", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_302factorSymbolicLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1275, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1275, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1275, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130357,49 +132404,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303factorSymbolicLU(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302factorSymbolicLU(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isrow, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_iscol, CYTHON_UNUSED PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("factorSymbolicLU", 0);
-  __Pyx_INCREF((PyObject *)__pyx_v_mat);
-  __Pyx_INCREF((PyObject *)__pyx_v_isrow);
-  __Pyx_INCREF((PyObject *)__pyx_v_iscol);
-  __Pyx_INCREF(__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1217
+  /* "PETSc/Mat.pyx":1276
  *         CHKERR( MatLUFactor(self.mat, isrow.iset, iscol.iset, &info) )
  *     def factorSymbolicLU(self, Mat mat not None, IS isrow not None, IS iscol not None, options=None):
- *         mat = isrow = iscol = options = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  *     def factorNumericLU(self, Mat mat not None, options=None):
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_mat, ((struct PyPetscMatObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_isrow, ((struct PyPetscISObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_iscol, ((struct PyPetscISObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_options, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_mat);
+  ((void)__pyx_v_isrow);
+  ((void)__pyx_v_iscol);
+  ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1218
+  /* "PETSc/Mat.pyx":1277
  *     def factorSymbolicLU(self, Mat mat not None, IS isrow not None, IS iscol not None, options=None):
- *         mat = isrow = iscol = options = None
+ *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  *     def factorNumericLU(self, Mat mat not None, options=None):
- *         mat = options = None
+ *         <void>self; <void>mat; <void>options; # unused
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(33, 1277, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1216
+  /* "PETSc/Mat.pyx":1275
  *         matfactorinfo(PETSC_FALSE, PETSC_FALSE, options, &info)
  *         CHKERR( MatLUFactor(self.mat, isrow.iset, iscol.iset, &info) )
  *     def factorSymbolicLU(self, Mat mat not None, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
- *         mat = isrow = iscol = options = None
+ *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  */
 
@@ -130407,32 +132444,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302factorSymbolicLU(CYTHON_UNUSE
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorSymbolicLU", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
-  __Pyx_XDECREF((PyObject *)__pyx_v_isrow);
-  __Pyx_XDECREF((PyObject *)__pyx_v_iscol);
-  __Pyx_XDECREF(__pyx_v_options);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1219
- *         mat = isrow = iscol = options = None
+/* "PETSc/Mat.pyx":1278
+ *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  *     def factorNumericLU(self, Mat mat not None, options=None):             # <<<<<<<<<<<<<<
- *         mat = options = None
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305factorNumericLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_304factorNumericLU[] = "Mat.factorNumericLU(self, Mat mat, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305factorNumericLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorNumericLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_310factorNumericLU[] = "Mat.factorNumericLU(self, Mat mat, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorNumericLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_v_options = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorNumericLU (wrapper)", 0);
@@ -130461,7 +132491,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305factorNumericLU(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorNumericLU") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1219; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorNumericLU") < 0)) __PYX_ERR(33, 1278, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -130476,14 +132506,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305factorNumericLU(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorNumericLU", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1219; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorNumericLU", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1278, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorNumericLU", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_304factorNumericLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1278, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_310factorNumericLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130494,43 +132524,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305factorNumericLU(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304factorNumericLU(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat, CYTHON_UNUSED PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310factorNumericLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("factorNumericLU", 0);
-  __Pyx_INCREF((PyObject *)__pyx_v_mat);
-  __Pyx_INCREF(__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1220
+  /* "PETSc/Mat.pyx":1279
  *         raise NotImplementedError
  *     def factorNumericLU(self, Mat mat not None, options=None):
- *         mat = options = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>mat; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  *     def factorILU(self, IS isrow not None, IS iscol not None, options=None):
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_mat, ((struct PyPetscMatObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_options, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_mat);
+  ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1221
+  /* "PETSc/Mat.pyx":1280
  *     def factorNumericLU(self, Mat mat not None, options=None):
- *         mat = options = None
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  *     def factorILU(self, IS isrow not None, IS iscol not None, options=None):
  *         cdef PetscMatFactorInfo info
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(33, 1280, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1219
- *         mat = isrow = iscol = options = None
+  /* "PETSc/Mat.pyx":1278
+ *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  *     def factorNumericLU(self, Mat mat not None, options=None):             # <<<<<<<<<<<<<<
- *         mat = options = None
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  */
 
@@ -130538,15 +132562,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304factorNumericLU(CYTHON_UNUSED
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorNumericLU", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
-  __Pyx_XDECREF(__pyx_v_options);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1222
- *         mat = options = None
+/* "PETSc/Mat.pyx":1281
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  *     def factorILU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
@@ -130554,15 +132576,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304factorNumericLU(CYTHON_UNUSED
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_306factorILU[] = "Mat.factorILU(self, IS isrow, IS iscol, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_312factorILU[] = "Mat.factorILU(self, IS isrow, IS iscol, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_isrow = 0;
   struct PyPetscISObject *__pyx_v_iscol = 0;
   PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorILU (wrapper)", 0);
@@ -130588,7 +132607,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorILU(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("factorILU", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("factorILU", 0, 2, 3, 1); __PYX_ERR(33, 1281, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -130597,7 +132616,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorILU(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorILU") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorILU") < 0)) __PYX_ERR(33, 1281, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -130614,15 +132633,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorILU(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorILU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorILU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1281, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorILU", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_306factorILU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1281, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1281, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_312factorILU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130633,36 +132652,33 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorILU(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_306factorILU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_312factorILU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options) {
   MatFactorInfo __pyx_v_info;
   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("factorILU", 0);
 
-  /* "PETSc/Mat.pyx":1224
+  /* "PETSc/Mat.pyx":1283
  *     def factorILU(self, IS isrow not None, IS iscol not None, options=None):
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_TRUE, PETSC_FALSE, options, &info)             # <<<<<<<<<<<<<<
  *         CHKERR( MatILUFactor(self.mat, isrow.iset, iscol.iset, &info) )
  *     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matfactorinfo(PETSC_TRUE, PETSC_FALSE, __pyx_v_options, (&__pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matfactorinfo(PETSC_TRUE, PETSC_FALSE, __pyx_v_options, (&__pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1283, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1225
+  /* "PETSc/Mat.pyx":1284
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_TRUE, PETSC_FALSE, options, &info)
  *         CHKERR( MatILUFactor(self.mat, isrow.iset, iscol.iset, &info) )             # <<<<<<<<<<<<<<
  *     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):
- *         isrow = iscol = options = None
+ *         <void>self; <void>isrow; <void>iscol; <void>options; # unused
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatILUFactor(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_info))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatILUFactor(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_info))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1284, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1222
- *         mat = options = None
+  /* "PETSc/Mat.pyx":1281
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  *     def factorILU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
@@ -130681,24 +132697,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_306factorILU(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1226
+/* "PETSc/Mat.pyx":1285
  *         matfactorinfo(PETSC_TRUE, PETSC_FALSE, options, &info)
  *         CHKERR( MatILUFactor(self.mat, isrow.iset, iscol.iset, &info) )
  *     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
- *         isrow = iscol = options = None
+ *         <void>self; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_308factorSymbolicILU[] = "Mat.factorSymbolicILU(self, IS isrow, IS iscol, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isrow = 0;
-  CYTHON_UNUSED struct PyPetscISObject *__pyx_v_iscol = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorSymbolicILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_314factorSymbolicILU[] = "Mat.factorSymbolicILU(self, IS isrow, IS iscol, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorSymbolicILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscISObject *__pyx_v_isrow = 0;
+  struct PyPetscISObject *__pyx_v_iscol = 0;
+  PyObject *__pyx_v_options = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorSymbolicILU (wrapper)", 0);
@@ -130724,7 +132737,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicILU(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("factorSymbolicILU", 0, 2, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1226; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("factorSymbolicILU", 0, 2, 3, 1); __PYX_ERR(33, 1285, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -130733,7 +132746,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicILU(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicILU") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1226; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicILU") < 0)) __PYX_ERR(33, 1285, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -130750,15 +132763,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicILU(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorSymbolicILU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1226; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorSymbolicILU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1285, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorSymbolicILU", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicILU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1285, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1285, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_314factorSymbolicILU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130769,46 +132782,38 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicILU(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicILU(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isrow, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_iscol, CYTHON_UNUSED PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorSymbolicILU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("factorSymbolicILU", 0);
-  __Pyx_INCREF((PyObject *)__pyx_v_isrow);
-  __Pyx_INCREF((PyObject *)__pyx_v_iscol);
-  __Pyx_INCREF(__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1227
+  /* "PETSc/Mat.pyx":1286
  *         CHKERR( MatILUFactor(self.mat, isrow.iset, iscol.iset, &info) )
  *     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):
- *         isrow = iscol = options = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>isrow; <void>iscol; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_isrow, ((struct PyPetscISObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_iscol, ((struct PyPetscISObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_options, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_isrow);
+  ((void)__pyx_v_iscol);
+  ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1228
+  /* "PETSc/Mat.pyx":1287
  *     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):
- *         isrow = iscol = options = None
+ *         <void>self; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def factorCholesky(self, IS isperm not None, options=None):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(33, 1287, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1226
+  /* "PETSc/Mat.pyx":1285
  *         matfactorinfo(PETSC_TRUE, PETSC_FALSE, options, &info)
  *         CHKERR( MatILUFactor(self.mat, isrow.iset, iscol.iset, &info) )
  *     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
- *         isrow = iscol = options = None
+ *         <void>self; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  */
 
@@ -130816,15 +132821,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicILU(CYTHON_UNUS
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorSymbolicILU", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF((PyObject *)__pyx_v_isrow);
-  __Pyx_XDECREF((PyObject *)__pyx_v_iscol);
-  __Pyx_XDECREF(__pyx_v_options);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1230
+/* "PETSc/Mat.pyx":1289
  *         raise NotImplementedError
  * 
  *     def factorCholesky(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
@@ -130833,14 +132835,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicILU(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_310factorCholesky[] = "Mat.factorCholesky(self, IS isperm, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_316factorCholesky[] = "Mat.factorCholesky(self, IS isperm, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_isperm = 0;
   PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorCholesky (wrapper)", 0);
@@ -130869,7 +132868,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorCholesky(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorCholesky") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorCholesky") < 0)) __PYX_ERR(33, 1289, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -130884,14 +132883,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorCholesky(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1289, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorCholesky", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_310factorCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) __PYX_ERR(33, 1289, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_316factorCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130902,35 +132901,32 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorCholesky(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310factorCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_316factorCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
   MatFactorInfo __pyx_v_info;
   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("factorCholesky", 0);
 
-  /* "PETSc/Mat.pyx":1232
+  /* "PETSc/Mat.pyx":1291
  *     def factorCholesky(self, IS isperm not None, options=None):
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)             # <<<<<<<<<<<<<<
  *         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )
  *     def factorSymbolicCholesky(self, IS isperm not None, options=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matfactorinfo(PETSC_FALSE, PETSC_TRUE, __pyx_v_options, (&__pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matfactorinfo(PETSC_FALSE, PETSC_TRUE, __pyx_v_options, (&__pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1291, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1233
+  /* "PETSc/Mat.pyx":1292
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)
  *         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )             # <<<<<<<<<<<<<<
  *     def factorSymbolicCholesky(self, IS isperm not None, options=None):
- *         isperm = options = None
+ *         <void>self; <void>isperm; <void>options; # unused
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCholeskyFactor(__pyx_v_self->mat, __pyx_v_isperm->iset, (&__pyx_v_info))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCholeskyFactor(__pyx_v_self->mat, __pyx_v_isperm->iset, (&__pyx_v_info))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1292, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1230
+  /* "PETSc/Mat.pyx":1289
  *         raise NotImplementedError
  * 
  *     def factorCholesky(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
@@ -130950,23 +132946,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310factorCholesky(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1234
+/* "PETSc/Mat.pyx":1293
  *         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)
  *         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )
  *     def factorSymbolicCholesky(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
- *         isperm = options = None
+ *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorSymbolicCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_312factorSymbolicCholesky[] = "Mat.factorSymbolicCholesky(self, IS isperm, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorSymbolicCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isperm = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_318factorSymbolicCholesky[] = "Mat.factorSymbolicCholesky(self, IS isperm, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscISObject *__pyx_v_isperm = 0;
+  PyObject *__pyx_v_options = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorSymbolicCholesky (wrapper)", 0);
@@ -130995,7 +132988,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorSymbolicCholesky(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicCholesky") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicCholesky") < 0)) __PYX_ERR(33, 1293, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -131010,14 +133003,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorSymbolicCholesky(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorSymbolicCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorSymbolicCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1293, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorSymbolicCholesky", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_312factorSymbolicCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) __PYX_ERR(33, 1293, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131028,43 +133021,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorSymbolicCholesky(PyObje
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_312factorSymbolicCholesky(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isperm, CYTHON_UNUSED PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("factorSymbolicCholesky", 0);
-  __Pyx_INCREF((PyObject *)__pyx_v_isperm);
-  __Pyx_INCREF(__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1235
+  /* "PETSc/Mat.pyx":1294
  *         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )
  *     def factorSymbolicCholesky(self, IS isperm not None, options=None):
- *         isperm = options = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>isperm; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  *     def factorNumericCholesky(self, Mat mat not None, options=None):
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_isperm, ((struct PyPetscISObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_options, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_isperm);
+  ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1236
+  /* "PETSc/Mat.pyx":1295
  *     def factorSymbolicCholesky(self, IS isperm not None, options=None):
- *         isperm = options = None
+ *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  *     def factorNumericCholesky(self, Mat mat not None, options=None):
- *         mat = options = None
+ *         <void>self; <void>mat; <void>options; # unused
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(33, 1295, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1234
+  /* "PETSc/Mat.pyx":1293
  *         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)
  *         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )
  *     def factorSymbolicCholesky(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
- *         isperm = options = None
+ *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  */
 
@@ -131072,30 +133059,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_312factorSymbolicCholesky(CYTHON
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorSymbolicCholesky", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF((PyObject *)__pyx_v_isperm);
-  __Pyx_XDECREF(__pyx_v_options);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1237
- *         isperm = options = None
+/* "PETSc/Mat.pyx":1296
+ *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  *     def factorNumericCholesky(self, Mat mat not None, options=None):             # <<<<<<<<<<<<<<
- *         mat = options = None
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorNumericCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_314factorNumericCholesky[] = "Mat.factorNumericCholesky(self, Mat mat, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorNumericCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorNumericCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_320factorNumericCholesky[] = "Mat.factorNumericCholesky(self, Mat mat, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorNumericCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_v_options = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorNumericCholesky (wrapper)", 0);
@@ -131124,7 +133106,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorNumericCholesky(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorNumericCholesky") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorNumericCholesky") < 0)) __PYX_ERR(33, 1296, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -131139,14 +133121,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorNumericCholesky(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorNumericCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorNumericCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1296, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorNumericCholesky", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_314factorNumericCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1296, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_320factorNumericCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131157,43 +133139,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorNumericCholesky(PyObjec
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorNumericCholesky(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_mat, CYTHON_UNUSED PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320factorNumericCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("factorNumericCholesky", 0);
-  __Pyx_INCREF((PyObject *)__pyx_v_mat);
-  __Pyx_INCREF(__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1238
+  /* "PETSc/Mat.pyx":1297
  *         raise NotImplementedError
  *     def factorNumericCholesky(self, Mat mat not None, options=None):
- *         mat = options = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>mat; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  *     def factorICC(self, IS isperm not None, options=None):
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_mat, ((struct PyPetscMatObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_options, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_mat);
+  ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1239
+  /* "PETSc/Mat.pyx":1298
  *     def factorNumericCholesky(self, Mat mat not None, options=None):
- *         mat = options = None
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  *     def factorICC(self, IS isperm not None, options=None):
  *         cdef PetscMatFactorInfo info
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(33, 1298, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1237
- *         isperm = options = None
+  /* "PETSc/Mat.pyx":1296
+ *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  *     def factorNumericCholesky(self, Mat mat not None, options=None):             # <<<<<<<<<<<<<<
- *         mat = options = None
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  */
 
@@ -131201,15 +133177,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorNumericCholesky(CYTHON_
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorNumericCholesky", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
-  __Pyx_XDECREF(__pyx_v_options);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1240
- *         mat = options = None
+/* "PETSc/Mat.pyx":1299
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  *     def factorICC(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
@@ -131217,14 +133191,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorNumericCholesky(CYTHON_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_316factorICC[] = "Mat.factorICC(self, IS isperm, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_322factorICC[] = "Mat.factorICC(self, IS isperm, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_isperm = 0;
   PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorICC (wrapper)", 0);
@@ -131253,7 +133224,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorICC(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorICC") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1240; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorICC") < 0)) __PYX_ERR(33, 1299, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -131268,14 +133239,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorICC(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorICC", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1240; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorICC", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1299, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorICC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_316factorICC(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) __PYX_ERR(33, 1299, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_322factorICC(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131286,36 +133257,33 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorICC(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_316factorICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322factorICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
   MatFactorInfo __pyx_v_info;
   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("factorICC", 0);
 
-  /* "PETSc/Mat.pyx":1242
+  /* "PETSc/Mat.pyx":1301
  *     def factorICC(self, IS isperm not None, options=None):
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)             # <<<<<<<<<<<<<<
  *         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )
  *     def factorSymbolicICC(self, IS isperm not None, options=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matfactorinfo(PETSC_TRUE, PETSC_TRUE, __pyx_v_options, (&__pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matfactorinfo(PETSC_TRUE, PETSC_TRUE, __pyx_v_options, (&__pyx_v_info)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1301, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1243
+  /* "PETSc/Mat.pyx":1302
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)
  *         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )             # <<<<<<<<<<<<<<
  *     def factorSymbolicICC(self, IS isperm not None, options=None):
- *         isperm = options = None
+ *         <void>self; <void>isperm; <void>options; # unused
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatICCFactor(__pyx_v_self->mat, __pyx_v_isperm->iset, (&__pyx_v_info))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatICCFactor(__pyx_v_self->mat, __pyx_v_isperm->iset, (&__pyx_v_info))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1302, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1240
- *         mat = options = None
+  /* "PETSc/Mat.pyx":1299
+ *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  *     def factorICC(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
@@ -131334,23 +133302,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_316factorICC(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1244
+/* "PETSc/Mat.pyx":1303
  *         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)
  *         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )
  *     def factorSymbolicICC(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
- *         isperm = options = None
+ *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_318factorSymbolicICC[] = "Mat.factorSymbolicICC(self, IS isperm, options=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isperm = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_options = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorSymbolicICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_324factorSymbolicICC[] = "Mat.factorSymbolicICC(self, IS isperm, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorSymbolicICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscISObject *__pyx_v_isperm = 0;
+  PyObject *__pyx_v_options = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorSymbolicICC (wrapper)", 0);
@@ -131379,7 +133344,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicICC(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicICC") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicICC") < 0)) __PYX_ERR(33, 1303, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -131394,14 +133359,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicICC(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorSymbolicICC", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("factorSymbolicICC", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1303, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorSymbolicICC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicICC(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) __PYX_ERR(33, 1303, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_324factorSymbolicICC(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131412,43 +133377,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicICC(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicICC(CYTHON_UNUSED struct PyPetscMatObject *__pyx_v_self, CYTHON_UNUSED struct PyPetscISObject *__pyx_v_isperm, CYTHON_UNUSED PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324factorSymbolicICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("factorSymbolicICC", 0);
-  __Pyx_INCREF((PyObject *)__pyx_v_isperm);
-  __Pyx_INCREF(__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1245
+  /* "PETSc/Mat.pyx":1304
  *         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )
  *     def factorSymbolicICC(self, IS isperm not None, options=None):
- *         isperm = options = None             # <<<<<<<<<<<<<<
+ *         <void>self; <void>isperm; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
  */
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_isperm, ((struct PyPetscISObject *)Py_None));
-  __Pyx_INCREF(Py_None);
-  __Pyx_DECREF_SET(__pyx_v_options, Py_None);
+  ((void)__pyx_v_self);
+  ((void)__pyx_v_isperm);
+  ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1246
+  /* "PETSc/Mat.pyx":1305
  *     def factorSymbolicICC(self, IS isperm not None, options=None):
- *         isperm = options = None
+ *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def getInertia(self):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __PYX_ERR(33, 1305, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1244
+  /* "PETSc/Mat.pyx":1303
  *         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)
  *         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )
  *     def factorSymbolicICC(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
- *         isperm = options = None
+ *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  */
 
@@ -131456,14 +133415,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicICC(CYTHON_UNUS
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.factorSymbolicICC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
-  __Pyx_XDECREF((PyObject *)__pyx_v_isperm);
-  __Pyx_XDECREF(__pyx_v_options);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1248
+/* "PETSc/Mat.pyx":1307
  *         raise NotImplementedError
  * 
  *     def getInertia(self):             # <<<<<<<<<<<<<<
@@ -131472,23 +133429,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicICC(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321getInertia(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_320getInertia[] = "Mat.getInertia(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321getInertia(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327getInertia(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_326getInertia[] = "Mat.getInertia(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327getInertia(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getInertia (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getInertia", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInertia", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(struct PyPetscMatObject *__pyx_v_self) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscInt __pyx_v_ival3;
@@ -131499,12 +133456,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(struct PyPetscMatO
   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("getInertia", 0);
 
-  /* "PETSc/Mat.pyx":1249
+  /* "PETSc/Mat.pyx":1308
  * 
  *     def getInertia(self):
  *         cdef PetscInt ival1 = 0, ival2 = 0, ival3 = 0             # <<<<<<<<<<<<<<
@@ -131515,16 +133469,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(struct PyPetscMatO
   __pyx_v_ival2 = 0;
   __pyx_v_ival3 = 0;
 
-  /* "PETSc/Mat.pyx":1250
+  /* "PETSc/Mat.pyx":1309
  *     def getInertia(self):
  *         cdef PetscInt ival1 = 0, ival2 = 0, ival3 = 0
  *         CHKERR( MatGetInertia(self.mat, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
  *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetInertia(__pyx_v_self->mat, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetInertia(__pyx_v_self->mat, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1309, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1251
+  /* "PETSc/Mat.pyx":1310
  *         cdef PetscInt ival1 = 0, ival2 = 0, ival3 = 0
  *         CHKERR( MatGetInertia(self.mat, &ival1, &ival2, &ival3) )
  *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
@@ -131532,13 +133486,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(struct PyPetscMatO
  *     def setUnfactored(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -131553,7 +133507,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(struct PyPetscMatO
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1248
+  /* "PETSc/Mat.pyx":1307
  *         raise NotImplementedError
  * 
  *     def getInertia(self):             # <<<<<<<<<<<<<<
@@ -131575,7 +133529,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1253
+/* "PETSc/Mat.pyx":1312
  *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
  *     def setUnfactored(self):             # <<<<<<<<<<<<<<
@@ -131584,41 +133538,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320getInertia(struct PyPetscMatO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323setUnfactored(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_322setUnfactored[] = "Mat.setUnfactored(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323setUnfactored(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329setUnfactored(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_328setUnfactored[] = "Mat.setUnfactored(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329setUnfactored(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setUnfactored (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("setUnfactored", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUnfactored", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_322setUnfactored(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_328setUnfactored(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322setUnfactored(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328setUnfactored(struct PyPetscMatObject *__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("setUnfactored", 0);
 
-  /* "PETSc/Mat.pyx":1254
+  /* "PETSc/Mat.pyx":1313
  * 
  *     def setUnfactored(self):
  *         CHKERR( MatSetUnfactored(self.mat) )             # <<<<<<<<<<<<<<
  * 
- *     # solve
+ *     # MUMPS
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetUnfactored(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetUnfactored(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1313, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1253
+  /* "PETSc/Mat.pyx":1312
  *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
  *     def setUnfactored(self):             # <<<<<<<<<<<<<<
@@ -131638,7 +133589,1032 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322setUnfactored(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1258
+/* "PETSc/Mat.pyx":1317
+ *     # MUMPS
+ * 
+ *     def setMumpsIcntl(self, icntl, ival):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt _ival = asInt(ival)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331setMumpsIcntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_330setMumpsIcntl[] = "Mat.setMumpsIcntl(self, icntl, ival)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331setMumpsIcntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_icntl = 0;
+  PyObject *__pyx_v_ival = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setMumpsIcntl (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_icntl,&__pyx_n_s_ival,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_icntl)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ival)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setMumpsIcntl", 1, 2, 2, 1); __PYX_ERR(33, 1317, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMumpsIcntl") < 0)) __PYX_ERR(33, 1317, __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_icntl = values[0];
+    __pyx_v_ival = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setMumpsIcntl", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1317, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.setMumpsIcntl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_330setMumpsIcntl(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_icntl, __pyx_v_ival);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330setMumpsIcntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl, PyObject *__pyx_v_ival) {
+  PetscInt __pyx_v__icntl;
+  PetscInt __pyx_v__ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setMumpsIcntl", 0);
+
+  /* "PETSc/Mat.pyx":1318
+ * 
+ *     def setMumpsIcntl(self, icntl, ival):
+ *         cdef PetscInt _icntl = asInt(icntl)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _ival = asInt(ival)
+ *         CHKERR( MatMumpsSetIcntl(self.mat, _icntl, _ival) );
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1318, __pyx_L1_error)
+  __pyx_v__icntl = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1319
+ *     def setMumpsIcntl(self, icntl, ival):
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt _ival = asInt(ival)             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMumpsSetIcntl(self.mat, _icntl, _ival) );
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_ival); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1319, __pyx_L1_error)
+  __pyx_v__ival = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1320
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt _ival = asInt(ival)
+ *         CHKERR( MatMumpsSetIcntl(self.mat, _icntl, _ival) );             # <<<<<<<<<<<<<<
+ * 
+ *     def getMumpsIcntl(self, icntl):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsSetIcntl(__pyx_v_self->mat, __pyx_v__icntl, __pyx_v__ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1320, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1317
+ *     # MUMPS
+ * 
+ *     def setMumpsIcntl(self, icntl, ival):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt _ival = asInt(ival)
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.setMumpsIcntl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1322
+ *         CHKERR( MatMumpsSetIcntl(self.mat, _icntl, _ival) );
+ * 
+ *     def getMumpsIcntl(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333getMumpsIcntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_332getMumpsIcntl[] = "Mat.getMumpsIcntl(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333getMumpsIcntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_icntl = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getMumpsIcntl (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_icntl,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_icntl)) != 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, "getMumpsIcntl") < 0)) __PYX_ERR(33, 1322, __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_icntl = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getMumpsIcntl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1322, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsIcntl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_332getMumpsIcntl(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_icntl);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332getMumpsIcntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
+  PetscInt __pyx_v__icntl;
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getMumpsIcntl", 0);
+
+  /* "PETSc/Mat.pyx":1323
+ * 
+ *     def getMumpsIcntl(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetIcntl(self.mat, _icntl, &ival) );
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1323, __pyx_L1_error)
+  __pyx_v__icntl = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1324
+ *     def getMumpsIcntl(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMumpsGetIcntl(self.mat, _icntl, &ival) );
+ *         return toInt(ival)
+ */
+  __pyx_v_ival = 0;
+
+  /* "PETSc/Mat.pyx":1325
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetIcntl(self.mat, _icntl, &ival) );             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetIcntl(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_ival))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1325, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1326
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetIcntl(self.mat, _icntl, &ival) );
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
+ * 
+ *     def setMumpsCntl(self, icntl, val):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1326, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1322
+ *         CHKERR( MatMumpsSetIcntl(self.mat, _icntl, _ival) );
+ * 
+ *     def getMumpsIcntl(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsIcntl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1328
+ *         return toInt(ival)
+ * 
+ *     def setMumpsCntl(self, icntl, val):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal _val = asReal(val)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335setMumpsCntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_334setMumpsCntl[] = "Mat.setMumpsCntl(self, icntl, val)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335setMumpsCntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_icntl = 0;
+  PyObject *__pyx_v_val = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setMumpsCntl (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_icntl,&__pyx_n_s_val,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_icntl)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setMumpsCntl", 1, 2, 2, 1); __PYX_ERR(33, 1328, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMumpsCntl") < 0)) __PYX_ERR(33, 1328, __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_icntl = values[0];
+    __pyx_v_val = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setMumpsCntl", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1328, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.setMumpsCntl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_334setMumpsCntl(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_icntl, __pyx_v_val);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334setMumpsCntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl, PyObject *__pyx_v_val) {
+  PetscInt __pyx_v__icntl;
+  PetscReal __pyx_v__val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  PetscReal __pyx_t_2;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("setMumpsCntl", 0);
+
+  /* "PETSc/Mat.pyx":1329
+ * 
+ *     def setMumpsCntl(self, icntl, val):
+ *         cdef PetscInt _icntl = asInt(icntl)             # <<<<<<<<<<<<<<
+ *         cdef PetscReal _val = asReal(val)
+ *         CHKERR( MatMumpsSetCntl(self.mat, _icntl, _val) );
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1329, __pyx_L1_error)
+  __pyx_v__icntl = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1330
+ *     def setMumpsCntl(self, icntl, val):
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal _val = asReal(val)             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMumpsSetCntl(self.mat, _icntl, _val) );
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_val); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) __PYX_ERR(33, 1330, __pyx_L1_error)
+  __pyx_v__val = __pyx_t_2;
+
+  /* "PETSc/Mat.pyx":1331
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal _val = asReal(val)
+ *         CHKERR( MatMumpsSetCntl(self.mat, _icntl, _val) );             # <<<<<<<<<<<<<<
+ * 
+ *     def getMumpsCntl(self, icntl):
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsSetCntl(__pyx_v_self->mat, __pyx_v__icntl, __pyx_v__val)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 1331, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1328
+ *         return toInt(ival)
+ * 
+ *     def setMumpsCntl(self, icntl, val):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal _val = asReal(val)
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.setMumpsCntl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1333
+ *         CHKERR( MatMumpsSetCntl(self.mat, _icntl, _val) );
+ * 
+ *     def getMumpsCntl(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337getMumpsCntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_336getMumpsCntl[] = "Mat.getMumpsCntl(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337getMumpsCntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_icntl = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getMumpsCntl (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_icntl,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_icntl)) != 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, "getMumpsCntl") < 0)) __PYX_ERR(33, 1333, __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_icntl = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getMumpsCntl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1333, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsCntl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_336getMumpsCntl(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_icntl);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336getMumpsCntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
+  PetscInt __pyx_v__icntl;
+  PetscReal __pyx_v_val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getMumpsCntl", 0);
+
+  /* "PETSc/Mat.pyx":1334
+ * 
+ *     def getMumpsCntl(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)             # <<<<<<<<<<<<<<
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetCntl(self.mat, _icntl, &val) );
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1334, __pyx_L1_error)
+  __pyx_v__icntl = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1335
+ *     def getMumpsCntl(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMumpsGetCntl(self.mat, _icntl, &val) );
+ *         return toReal(val)
+ */
+  __pyx_v_val = 0.0;
+
+  /* "PETSc/Mat.pyx":1336
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetCntl(self.mat, _icntl, &val) );             # <<<<<<<<<<<<<<
+ *         return toReal(val)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetCntl(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_val))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1336, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1337
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetCntl(self.mat, _icntl, &val) );
+ *         return toReal(val)             # <<<<<<<<<<<<<<
+ * 
+ *     def getMumpsInfo(self, icntl):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1337, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1333
+ *         CHKERR( MatMumpsSetCntl(self.mat, _icntl, _val) );
+ * 
+ *     def getMumpsCntl(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsCntl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1339
+ *         return toReal(val)
+ * 
+ *     def getMumpsInfo(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getMumpsInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_338getMumpsInfo[] = "Mat.getMumpsInfo(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getMumpsInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_icntl = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getMumpsInfo (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_icntl,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_icntl)) != 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, "getMumpsInfo") < 0)) __PYX_ERR(33, 1339, __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_icntl = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getMumpsInfo", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1339, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_338getMumpsInfo(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_icntl);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getMumpsInfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
+  PetscInt __pyx_v__icntl;
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getMumpsInfo", 0);
+
+  /* "PETSc/Mat.pyx":1340
+ * 
+ *     def getMumpsInfo(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetInfo(self.mat, _icntl, &ival) );
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1340, __pyx_L1_error)
+  __pyx_v__icntl = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1341
+ *     def getMumpsInfo(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMumpsGetInfo(self.mat, _icntl, &ival) );
+ *         return toInt(ival)
+ */
+  __pyx_v_ival = 0;
+
+  /* "PETSc/Mat.pyx":1342
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetInfo(self.mat, _icntl, &ival) );             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetInfo(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_ival))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1342, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1343
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetInfo(self.mat, _icntl, &ival) );
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
+ * 
+ *     def getMumpsInfog(self, icntl):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1339
+ *         return toReal(val)
+ * 
+ *     def getMumpsInfo(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1345
+ *         return toInt(ival)
+ * 
+ *     def getMumpsInfog(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341getMumpsInfog(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_340getMumpsInfog[] = "Mat.getMumpsInfog(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341getMumpsInfog(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_icntl = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getMumpsInfog (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_icntl,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_icntl)) != 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, "getMumpsInfog") < 0)) __PYX_ERR(33, 1345, __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_icntl = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getMumpsInfog", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1345, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsInfog", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_340getMumpsInfog(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_icntl);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getMumpsInfog(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
+  PetscInt __pyx_v__icntl;
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getMumpsInfog", 0);
+
+  /* "PETSc/Mat.pyx":1346
+ * 
+ *     def getMumpsInfog(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetInfog(self.mat, _icntl, &ival) );
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1346, __pyx_L1_error)
+  __pyx_v__icntl = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1347
+ *     def getMumpsInfog(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMumpsGetInfog(self.mat, _icntl, &ival) );
+ *         return toInt(ival)
+ */
+  __pyx_v_ival = 0;
+
+  /* "PETSc/Mat.pyx":1348
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetInfog(self.mat, _icntl, &ival) );             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetInfog(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_ival))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1348, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1349
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MatMumpsGetInfog(self.mat, _icntl, &ival) );
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
+ * 
+ *     def getMumpsRinfo(self, icntl):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1349, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1345
+ *         return toInt(ival)
+ * 
+ *     def getMumpsInfog(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscInt ival = 0
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsInfog", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1351
+ *         return toInt(ival)
+ * 
+ *     def getMumpsRinfo(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsRinfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_342getMumpsRinfo[] = "Mat.getMumpsRinfo(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsRinfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_icntl = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getMumpsRinfo (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_icntl,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_icntl)) != 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, "getMumpsRinfo") < 0)) __PYX_ERR(33, 1351, __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_icntl = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getMumpsRinfo", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1351, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsRinfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsRinfo(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_icntl);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsRinfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
+  PetscInt __pyx_v__icntl;
+  PetscReal __pyx_v_val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getMumpsRinfo", 0);
+
+  /* "PETSc/Mat.pyx":1352
+ * 
+ *     def getMumpsRinfo(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)             # <<<<<<<<<<<<<<
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetRinfo(self.mat, _icntl, &val) );
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1352, __pyx_L1_error)
+  __pyx_v__icntl = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1353
+ *     def getMumpsRinfo(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMumpsGetRinfo(self.mat, _icntl, &val) );
+ *         return toReal(val)
+ */
+  __pyx_v_val = 0.0;
+
+  /* "PETSc/Mat.pyx":1354
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetRinfo(self.mat, _icntl, &val) );             # <<<<<<<<<<<<<<
+ *         return toReal(val)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetRinfo(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_val))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1354, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1355
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetRinfo(self.mat, _icntl, &val) );
+ *         return toReal(val)             # <<<<<<<<<<<<<<
+ * 
+ *     def getMumpsRinfog(self, icntl):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1355, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1351
+ *         return toInt(ival)
+ * 
+ *     def getMumpsRinfo(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsRinfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1357
+ *         return toReal(val)
+ * 
+ *     def getMumpsRinfog(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_345getMumpsRinfog(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_344getMumpsRinfog[] = "Mat.getMumpsRinfog(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_345getMumpsRinfog(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_icntl = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getMumpsRinfog (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_icntl,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_icntl)) != 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, "getMumpsRinfog") < 0)) __PYX_ERR(33, 1357, __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_icntl = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getMumpsRinfog", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1357, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsRinfog", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_344getMumpsRinfog(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_icntl);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_344getMumpsRinfog(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
+  PetscInt __pyx_v__icntl;
+  PetscReal __pyx_v_val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getMumpsRinfog", 0);
+
+  /* "PETSc/Mat.pyx":1358
+ * 
+ *     def getMumpsRinfog(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)             # <<<<<<<<<<<<<<
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetRinfog(self.mat, _icntl, &val) );
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1358, __pyx_L1_error)
+  __pyx_v__icntl = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":1359
+ *     def getMumpsRinfog(self, icntl):
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MatMumpsGetRinfog(self.mat, _icntl, &val) );
+ *         return toReal(val)
+ */
+  __pyx_v_val = 0.0;
+
+  /* "PETSc/Mat.pyx":1360
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetRinfog(self.mat, _icntl, &val) );             # <<<<<<<<<<<<<<
+ *         return toReal(val)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetRinfog(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_val))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(33, 1360, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1361
+ *         cdef PetscReal val = 0
+ *         CHKERR( MatMumpsGetRinfog(self.mat, _icntl, &val) );
+ *         return toReal(val)             # <<<<<<<<<<<<<<
+ * 
+ *     # solve
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1361, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1357
+ *         return toReal(val)
+ * 
+ *     def getMumpsRinfog(self, icntl):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt _icntl = asInt(icntl)
+ *         cdef PetscReal val = 0
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getMumpsRinfog", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1365
  *     # solve
  * 
  *     def solveForward(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -131647,14 +134623,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322setUnfactored(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325solveForward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_324solveForward[] = "Mat.solveForward(self, Vec b, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325solveForward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_347solveForward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_346solveForward[] = "Mat.solveForward(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_347solveForward(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solveForward (wrapper)", 0);
@@ -131678,11 +134651,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325solveForward(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solveForward", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solveForward", 1, 2, 2, 1); __PYX_ERR(33, 1365, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveForward") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveForward") < 0)) __PYX_ERR(33, 1365, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -131695,15 +134668,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325solveForward(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveForward", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solveForward", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1365, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.solveForward", __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[33]; __pyx_lineno = 1258; __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[33]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_324solveForward(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1365, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1365, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_346solveForward(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131714,25 +134687,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325solveForward(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324solveForward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_346solveForward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
   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("solveForward", 0);
 
-  /* "PETSc/Mat.pyx":1259
+  /* "PETSc/Mat.pyx":1366
  * 
  *     def solveForward(self, Vec b not None, Vec x not None):
  *         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def solveBackward(self, Vec b not None, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatForwardSolve(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatForwardSolve(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1366, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1258
+  /* "PETSc/Mat.pyx":1365
  *     # solve
  * 
  *     def solveForward(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -131752,7 +134722,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324solveForward(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1261
+/* "PETSc/Mat.pyx":1368
  *         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )
  * 
  *     def solveBackward(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -131761,14 +134731,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324solveForward(struct PyPetscMa
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327solveBackward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_326solveBackward[] = "Mat.solveBackward(self, Vec b, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327solveBackward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_349solveBackward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_348solveBackward[] = "Mat.solveBackward(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_349solveBackward(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solveBackward (wrapper)", 0);
@@ -131792,11 +134759,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327solveBackward(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solveBackward", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solveBackward", 1, 2, 2, 1); __PYX_ERR(33, 1368, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveBackward") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveBackward") < 0)) __PYX_ERR(33, 1368, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -131809,15 +134776,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327solveBackward(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveBackward", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solveBackward", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1368, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.solveBackward", __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[33]; __pyx_lineno = 1261; __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[33]; __pyx_lineno = 1261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_326solveBackward(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1368, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1368, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_348solveBackward(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131828,25 +134795,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327solveBackward(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326solveBackward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_348solveBackward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
   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("solveBackward", 0);
 
-  /* "PETSc/Mat.pyx":1262
+  /* "PETSc/Mat.pyx":1369
  * 
  *     def solveBackward(self, Vec b not None, Vec x not None):
  *         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def solve(self, Vec b not None, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatBackwardSolve(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatBackwardSolve(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1369, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1261
+  /* "PETSc/Mat.pyx":1368
  *         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )
  * 
  *     def solveBackward(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -131866,7 +134830,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326solveBackward(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1264
+/* "PETSc/Mat.pyx":1371
  *         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )
  * 
  *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -131875,14 +134839,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326solveBackward(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_328solve[] = "Mat.solve(self, Vec b, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_351solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_350solve[] = "Mat.solve(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_351solve(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solve (wrapper)", 0);
@@ -131906,11 +134867,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329solve(PyObject *__pyx_v_self,
         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[33]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(33, 1371, __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[33]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(33, 1371, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -131923,15 +134884,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329solve(PyObject *__pyx_v_self,
   }
   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[33]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1371, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.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[33]; __pyx_lineno = 1264; __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[33]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_328solve(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1371, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1371, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_350solve(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131942,25 +134903,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329solve(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328solve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_350solve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
   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);
 
-  /* "PETSc/Mat.pyx":1265
+  /* "PETSc/Mat.pyx":1372
  * 
  *     def solve(self, Vec b not None, Vec x not None):
  *         CHKERR( MatSolve(self.mat, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def solveTranspose(self, Vec b not None, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSolve(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSolve(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1372, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1264
+  /* "PETSc/Mat.pyx":1371
  *         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )
  * 
  *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -131980,7 +134938,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328solve(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1267
+/* "PETSc/Mat.pyx":1374
  *         CHKERR( MatSolve(self.mat, b.vec, x.vec) )
  * 
  *     def solveTranspose(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -131989,14 +134947,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328solve(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331solveTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_330solveTranspose[] = "Mat.solveTranspose(self, Vec b, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331solveTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_353solveTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_352solveTranspose[] = "Mat.solveTranspose(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_353solveTranspose(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solveTranspose (wrapper)", 0);
@@ -132020,11 +134975,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331solveTranspose(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, 1); __PYX_ERR(33, 1374, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTranspose") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTranspose") < 0)) __PYX_ERR(33, 1374, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -132037,15 +134992,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331solveTranspose(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1374, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.solveTranspose", __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[33]; __pyx_lineno = 1267; __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[33]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_330solveTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1374, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1374, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_352solveTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132056,25 +135011,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331solveTranspose(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330solveTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_352solveTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
   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("solveTranspose", 0);
 
-  /* "PETSc/Mat.pyx":1268
+  /* "PETSc/Mat.pyx":1375
  * 
  *     def solveTranspose(self, Vec b not None, Vec x not None):
  *         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def solveAdd(self, Vec b not None, Vec y, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSolveTranspose(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSolveTranspose(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1375, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1267
+  /* "PETSc/Mat.pyx":1374
  *         CHKERR( MatSolve(self.mat, b.vec, x.vec) )
  * 
  *     def solveTranspose(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -132094,7 +135046,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330solveTranspose(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1270
+/* "PETSc/Mat.pyx":1377
  *         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )
  * 
  *     def solveAdd(self, Vec b not None, Vec y, Vec x not None):             # <<<<<<<<<<<<<<
@@ -132103,15 +135055,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330solveTranspose(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333solveAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_332solveAdd[] = "Mat.solveAdd(self, Vec b, Vec y, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333solveAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_355solveAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_354solveAdd[] = "Mat.solveAdd(self, Vec b, Vec y, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_355solveAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_b = 0;
   struct PyPetscVecObject *__pyx_v_y = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solveAdd (wrapper)", 0);
@@ -132136,16 +135085,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333solveAdd(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, 1); __PYX_ERR(33, 1377, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, 2); __PYX_ERR(33, 1377, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveAdd") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveAdd") < 0)) __PYX_ERR(33, 1377, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -132160,16 +135109,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333solveAdd(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1377, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.solveAdd", __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[33]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "y", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1270; __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[33]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_332solveAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_y, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1377, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "y", 0))) __PYX_ERR(33, 1377, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1377, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_354solveAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_y, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132180,25 +135129,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333solveAdd(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332solveAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_y, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_354solveAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_y, struct PyPetscVecObject *__pyx_v_x) {
   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("solveAdd", 0);
 
-  /* "PETSc/Mat.pyx":1271
+  /* "PETSc/Mat.pyx":1378
  * 
  *     def solveAdd(self, Vec b not None, Vec y, Vec x not None):
  *         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSolveAdd(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_y->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSolveAdd(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_y->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1378, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1270
+  /* "PETSc/Mat.pyx":1377
  *         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )
  * 
  *     def solveAdd(self, Vec b not None, Vec y, Vec x not None):             # <<<<<<<<<<<<<<
@@ -132218,7 +135164,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332solveAdd(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1273
+/* "PETSc/Mat.pyx":1380
  *         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
  *     def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):             # <<<<<<<<<<<<<<
@@ -132227,15 +135173,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332solveAdd(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335solveTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_334solveTransposeAdd[] = "Mat.solveTransposeAdd(self, Vec b, Vec y, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335solveTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_357solveTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_356solveTransposeAdd[] = "Mat.solveTransposeAdd(self, Vec b, Vec y, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_357solveTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_b = 0;
   struct PyPetscVecObject *__pyx_v_y = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solveTransposeAdd (wrapper)", 0);
@@ -132260,16 +135203,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335solveTransposeAdd(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, 1); __PYX_ERR(33, 1380, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, 2); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, 2); __PYX_ERR(33, 1380, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTransposeAdd") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTransposeAdd") < 0)) __PYX_ERR(33, 1380, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -132284,16 +135227,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335solveTransposeAdd(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1380, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.solveTransposeAdd", __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[33]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "y", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1273; __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[33]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_334solveTransposeAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_y, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1380, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "y", 0))) __PYX_ERR(33, 1380, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1380, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_356solveTransposeAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_y, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132304,25 +135247,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335solveTransposeAdd(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334solveTransposeAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_y, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_356solveTransposeAdd(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_y, struct PyPetscVecObject *__pyx_v_x) {
   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("solveTransposeAdd", 0);
 
-  /* "PETSc/Mat.pyx":1274
+  /* "PETSc/Mat.pyx":1381
  * 
  *     def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):
  *         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def matSolve(self, Mat B not None, Mat X not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSolveTransposeAdd(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_y->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSolveTransposeAdd(__pyx_v_self->mat, __pyx_v_b->vec, __pyx_v_y->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1381, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1273
+  /* "PETSc/Mat.pyx":1380
  *         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
  *     def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):             # <<<<<<<<<<<<<<
@@ -132342,7 +135282,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334solveTransposeAdd(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1276
+/* "PETSc/Mat.pyx":1383
  *         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
  *     def matSolve(self, Mat B not None, Mat X not None):             # <<<<<<<<<<<<<<
@@ -132351,14 +135291,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334solveTransposeAdd(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337matSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_336matSolve[] = "Mat.matSolve(self, Mat B, Mat X)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337matSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_359matSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_358matSolve[] = "Mat.matSolve(self, Mat B, Mat X)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_359matSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_B = 0;
   struct PyPetscMatObject *__pyx_v_X = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("matSolve (wrapper)", 0);
@@ -132382,11 +135319,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337matSolve(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("matSolve", 1, 2, 2, 1); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("matSolve", 1, 2, 2, 1); __PYX_ERR(33, 1383, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matSolve") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matSolve") < 0)) __PYX_ERR(33, 1383, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -132399,15 +135336,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337matSolve(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("matSolve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("matSolve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1383, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.matSolve", __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_Mat, 0, "B", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_X), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "X", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_336matSolve(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_B, __pyx_v_X);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_B), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "B", 0))) __PYX_ERR(33, 1383, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_X), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "X", 0))) __PYX_ERR(33, 1383, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_358matSolve(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_B, __pyx_v_X);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132418,25 +135355,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337matSolve(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336matSolve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_B, struct PyPetscMatObject *__pyx_v_X) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_358matSolve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_B, struct PyPetscMatObject *__pyx_v_X) {
   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("matSolve", 0);
 
-  /* "PETSc/Mat.pyx":1277
+  /* "PETSc/Mat.pyx":1384
  * 
  *     def matSolve(self, Mat B not None, Mat X not None):
  *         CHKERR( MatMatSolve(self.mat, B.mat, X.mat) )             # <<<<<<<<<<<<<<
  * 
  *     # dense matrices
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatSolve(__pyx_v_self->mat, __pyx_v_B->mat, __pyx_v_X->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMatSolve(__pyx_v_self->mat, __pyx_v_B->mat, __pyx_v_X->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1384, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1276
+  /* "PETSc/Mat.pyx":1383
  *         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
  *     def matSolve(self, Mat B not None, Mat X not None):             # <<<<<<<<<<<<<<
@@ -132456,7 +135390,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336matSolve(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1281
+/* "PETSc/Mat.pyx":1388
  *     # dense matrices
  * 
  *     def getDenseArray(self):             # <<<<<<<<<<<<<<
@@ -132465,23 +135399,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336matSolve(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getDenseArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_338getDenseArray[] = "Mat.getDenseArray(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getDenseArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_361getDenseArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_360getDenseArray[] = "Mat.getDenseArray(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_361getDenseArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDenseArray (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getDenseArray", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDenseArray", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscMatObject *__pyx_v_self) {
   PetscInt __pyx_v_m;
   PetscInt __pyx_v_N;
   PetscInt __pyx_v_lda;
@@ -132497,12 +135431,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
   int __pyx_t_1;
   PyObject *__pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getDenseArray", 0);
 
-  /* "PETSc/Mat.pyx":1282
+  /* "PETSc/Mat.pyx":1389
  * 
  *     def getDenseArray(self):
  *         cdef PetscInt m=0, N=0, lda=0             # <<<<<<<<<<<<<<
@@ -132513,7 +135444,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
   __pyx_v_N = 0;
   __pyx_v_lda = 0;
 
-  /* "PETSc/Mat.pyx":1283
+  /* "PETSc/Mat.pyx":1390
  *     def getDenseArray(self):
  *         cdef PetscInt m=0, N=0, lda=0
  *         cdef PetscScalar *data = NULL             # <<<<<<<<<<<<<<
@@ -132522,25 +135453,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
  */
   __pyx_v_data = NULL;
 
-  /* "PETSc/Mat.pyx":1284
+  /* "PETSc/Mat.pyx":1391
  *         cdef PetscInt m=0, N=0, lda=0
  *         cdef PetscScalar *data = NULL
  *         CHKERR( MatGetLocalSize(self.mat, &m, NULL) )             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  *         lda = m # CHKERR( MatDenseGetLDA(self.mat, &ld) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_self->mat, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_self->mat, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1391, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1285
+  /* "PETSc/Mat.pyx":1392
  *         cdef PetscScalar *data = NULL
  *         CHKERR( MatGetLocalSize(self.mat, &m, NULL) )
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )             # <<<<<<<<<<<<<<
  *         lda = m # CHKERR( MatDenseGetLDA(self.mat, &ld) )
  *         CHKERR( MatDenseGetArray(self.mat, &data) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_self->mat, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1392, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1286
+  /* "PETSc/Mat.pyx":1393
  *         CHKERR( MatGetLocalSize(self.mat, &m, NULL) )
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  *         lda = m # CHKERR( MatDenseGetLDA(self.mat, &ld) )             # <<<<<<<<<<<<<<
@@ -132549,16 +135480,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
  */
   __pyx_v_lda = __pyx_v_m;
 
-  /* "PETSc/Mat.pyx":1287
+  /* "PETSc/Mat.pyx":1394
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  *         lda = m # CHKERR( MatDenseGetLDA(self.mat, &ld) )
  *         CHKERR( MatDenseGetArray(self.mat, &data) )             # <<<<<<<<<<<<<<
  *         cdef int typenum = NPY_PETSC_SCALAR
  *         cdef int itemsize = <int>sizeof(PetscScalar)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDenseGetArray(__pyx_v_self->mat, (&__pyx_v_data))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDenseGetArray(__pyx_v_self->mat, (&__pyx_v_data))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1394, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1288
+  /* "PETSc/Mat.pyx":1395
  *         lda = m # CHKERR( MatDenseGetLDA(self.mat, &ld) )
  *         CHKERR( MatDenseGetArray(self.mat, &data) )
  *         cdef int typenum = NPY_PETSC_SCALAR             # <<<<<<<<<<<<<<
@@ -132567,7 +135498,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
  */
   __pyx_v_typenum = NPY_PETSC_SCALAR;
 
-  /* "PETSc/Mat.pyx":1289
+  /* "PETSc/Mat.pyx":1396
  *         CHKERR( MatDenseGetArray(self.mat, &data) )
  *         cdef int typenum = NPY_PETSC_SCALAR
  *         cdef int itemsize = <int>sizeof(PetscScalar)             # <<<<<<<<<<<<<<
@@ -132576,7 +135507,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
  */
   __pyx_v_itemsize = ((int)(sizeof(PetscScalar)));
 
-  /* "PETSc/Mat.pyx":1290
+  /* "PETSc/Mat.pyx":1397
  *         cdef int typenum = NPY_PETSC_SCALAR
  *         cdef int itemsize = <int>sizeof(PetscScalar)
  *         cdef int flags = NPY_ARRAY_FARRAY             # <<<<<<<<<<<<<<
@@ -132585,7 +135516,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
  */
   __pyx_v_flags = NPY_ARRAY_FARRAY;
 
-  /* "PETSc/Mat.pyx":1292
+  /* "PETSc/Mat.pyx":1399
  *         cdef int flags = NPY_ARRAY_FARRAY
  *         cdef npy_intp dims[2], strides[2]
  *         dims[0] = <npy_intp>m; strides[0] = <npy_intp>sizeof(PetscScalar);             # <<<<<<<<<<<<<<
@@ -132595,7 +135526,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
   (__pyx_v_dims[0]) = ((npy_intp)__pyx_v_m);
   (__pyx_v_strides[0]) = ((npy_intp)(sizeof(PetscScalar)));
 
-  /* "PETSc/Mat.pyx":1293
+  /* "PETSc/Mat.pyx":1400
  *         cdef npy_intp dims[2], strides[2]
  *         dims[0] = <npy_intp>m; strides[0] = <npy_intp>sizeof(PetscScalar);
  *         dims[1] = <npy_intp>N; strides[1] = <npy_intp>(lda*sizeof(PetscScalar));             # <<<<<<<<<<<<<<
@@ -132605,29 +135536,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
   (__pyx_v_dims[1]) = ((npy_intp)__pyx_v_N);
   (__pyx_v_strides[1]) = ((npy_intp)(__pyx_v_lda * (sizeof(PetscScalar))));
 
-  /* "PETSc/Mat.pyx":1294
+  /* "PETSc/Mat.pyx":1401
  *         dims[0] = <npy_intp>m; strides[0] = <npy_intp>sizeof(PetscScalar);
  *         dims[1] = <npy_intp>N; strides[1] = <npy_intp>(lda*sizeof(PetscScalar));
  *         array = <object>PyArray_New(<PyTypeObject*>ndarray, 2, dims, typenum,             # <<<<<<<<<<<<<<
  *                                     strides, data, itemsize, flags, NULL)
  *         CHKERR( MatDenseRestoreArray(self.mat, &data) )
  */
-  __pyx_t_2 = PyArray_New(((PyTypeObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_ndarray)), 2, __pyx_v_dims, __pyx_v_typenum, __pyx_v_strides, __pyx_v_data, __pyx_v_itemsize, __pyx_v_flags, NULL);
+  __pyx_t_2 = PyArray_New(((PyTypeObject *)__pyx_ptype_8petsc4py_5PETSc_ndarray), 2, __pyx_v_dims, __pyx_v_typenum, __pyx_v_strides, __pyx_v_data, __pyx_v_itemsize, __pyx_v_flags, NULL);
   __pyx_t_3 = ((PyObject *)__pyx_t_2);
   __Pyx_INCREF(__pyx_t_3);
   __pyx_v_array = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":1296
+  /* "PETSc/Mat.pyx":1403
  *         array = <object>PyArray_New(<PyTypeObject*>ndarray, 2, dims, typenum,
  *                                     strides, data, itemsize, flags, NULL)
  *         CHKERR( MatDenseRestoreArray(self.mat, &data) )             # <<<<<<<<<<<<<<
  *         return array
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDenseRestoreArray(__pyx_v_self->mat, (&__pyx_v_data))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDenseRestoreArray(__pyx_v_self->mat, (&__pyx_v_data))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1403, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1297
+  /* "PETSc/Mat.pyx":1404
  *                                     strides, data, itemsize, flags, NULL)
  *         CHKERR( MatDenseRestoreArray(self.mat, &data) )
  *         return array             # <<<<<<<<<<<<<<
@@ -132639,7 +135570,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
   __pyx_r = __pyx_v_array;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1281
+  /* "PETSc/Mat.pyx":1388
  *     # dense matrices
  * 
  *     def getDenseArray(self):             # <<<<<<<<<<<<<<
@@ -132659,7 +135590,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1299
+/* "PETSc/Mat.pyx":1406
  *         return array
  * 
  *     def getDenseLocalMatrix(self):             # <<<<<<<<<<<<<<
@@ -132668,23 +135599,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getDenseArray(struct PyPetscM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341getDenseLocalMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix[] = "Mat.getDenseLocalMatrix(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341getDenseLocalMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_363getDenseLocalMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix[] = "Mat.getDenseLocalMatrix(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_363getDenseLocalMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDenseLocalMatrix (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getDenseLocalMatrix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDenseLocalMatrix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -132692,12 +135623,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix(struct Py
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getDenseLocalMatrix", 0);
 
-  /* "PETSc/Mat.pyx":1300
+  /* "PETSc/Mat.pyx":1407
  * 
  *     def getDenseLocalMatrix(self):
  *         cdef Mat mat = type(self)()             # <<<<<<<<<<<<<<
@@ -132716,27 +135644,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix(struct Py
     }
   }
   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[33]; __pyx_lineno = 1300; __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(33, 1407, __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[33]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1407, __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_8petsc4py_5PETSc_Mat))))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 1407, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1301
+  /* "PETSc/Mat.pyx":1408
  *     def getDenseLocalMatrix(self):
  *         cdef Mat mat = type(self)()
  *         CHKERR( MatDenseGetLocalMatrix(self.mat, &mat.mat) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(mat.obj)
  *         return mat
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDenseGetLocalMatrix(__pyx_v_self->mat, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDenseGetLocalMatrix(__pyx_v_self->mat, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1408, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1302
+  /* "PETSc/Mat.pyx":1409
  *         cdef Mat mat = type(self)()
  *         CHKERR( MatDenseGetLocalMatrix(self.mat, &mat.mat) )
  *         PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -132745,7 +135673,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix(struct Py
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
 
-  /* "PETSc/Mat.pyx":1303
+  /* "PETSc/Mat.pyx":1410
  *         CHKERR( MatDenseGetLocalMatrix(self.mat, &mat.mat) )
  *         PetscINCREF(mat.obj)
  *         return mat             # <<<<<<<<<<<<<<
@@ -132757,7 +135685,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix(struct Py
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1299
+  /* "PETSc/Mat.pyx":1406
  *         return array
  * 
  *     def getDenseLocalMatrix(self):             # <<<<<<<<<<<<<<
@@ -132779,7 +135707,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1308
+/* "PETSc/Mat.pyx":1415
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -132806,12 +135734,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMat
   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);
 
-  /* "PETSc/Mat.pyx":1309
+  /* "PETSc/Mat.pyx":1416
  *     property sizes:
  *         def __get__(self):
  *             return self.getSizes()             # <<<<<<<<<<<<<<
@@ -132819,7 +135744,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMat
  *             self.setSizes(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSizes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSizes); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1416, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -132832,10 +135757,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMat
     }
   }
   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[33]; __pyx_lineno = 1309; __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(33, 1416, __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[33]; __pyx_lineno = 1309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1416, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -132843,7 +135768,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMat
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1308
+  /* "PETSc/Mat.pyx":1415
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -132864,7 +135789,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1310
+/* "PETSc/Mat.pyx":1417
  *         def __get__(self):
  *             return self.getSizes()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -132892,19 +135817,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_5sizes_2__set__(struct PyPetscMatObjec
   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);
 
-  /* "PETSc/Mat.pyx":1311
+  /* "PETSc/Mat.pyx":1418
  *             return self.getSizes()
  *         def __set__(self, value):
  *             self.setSizes(value)             # <<<<<<<<<<<<<<
  * 
  *     property size:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setSizes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setSizes); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1418, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -132917,23 +135839,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_5sizes_2__set__(struct PyPetscMatObjec
     }
   }
   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[33]; __pyx_lineno = 1311; __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(33, 1418, __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[33]; __pyx_lineno = 1311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1418, __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[33]; __pyx_lineno = 1311; __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(33, 1418, __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;
 
-  /* "PETSc/Mat.pyx":1310
+  /* "PETSc/Mat.pyx":1417
  *         def __get__(self):
  *             return self.getSizes()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -132956,7 +135878,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_5sizes_2__set__(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1314
+/* "PETSc/Mat.pyx":1421
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -132983,12 +135905,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatO
   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);
 
-  /* "PETSc/Mat.pyx":1315
+  /* "PETSc/Mat.pyx":1422
  *     property size:
  *         def __get__(self):
  *             return self.getSize()             # <<<<<<<<<<<<<<
@@ -132996,7 +135915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatO
  *     property local_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1422, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133009,10 +135928,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatO
     }
   }
   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[33]; __pyx_lineno = 1315; __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(33, 1422, __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[33]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1422, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133020,7 +135939,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1314
+  /* "PETSc/Mat.pyx":1421
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133041,7 +135960,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1318
+/* "PETSc/Mat.pyx":1425
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133068,12 +135987,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPe
   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);
 
-  /* "PETSc/Mat.pyx":1319
+  /* "PETSc/Mat.pyx":1426
  *     property local_size:
  *         def __get__(self):
  *             return self.getLocalSize()             # <<<<<<<<<<<<<<
@@ -133081,7 +135997,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPe
  *     property block_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getLocalSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getLocalSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1426, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133094,10 +136010,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPe
     }
   }
   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[33]; __pyx_lineno = 1319; __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(33, 1426, __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[33]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1426, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133105,7 +136021,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1318
+  /* "PETSc/Mat.pyx":1425
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133126,7 +136042,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1322
+/* "PETSc/Mat.pyx":1429
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133153,12 +136069,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPe
   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);
 
-  /* "PETSc/Mat.pyx":1323
+  /* "PETSc/Mat.pyx":1430
  *     property block_size:
  *         def __get__(self):
  *             return self.getBlockSize()             # <<<<<<<<<<<<<<
@@ -133166,7 +136079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPe
  *     property block_sizes:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1430, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133179,10 +136092,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPe
     }
   }
   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[33]; __pyx_lineno = 1323; __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(33, 1430, __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[33]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1430, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133190,7 +136103,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1322
+  /* "PETSc/Mat.pyx":1429
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133211,7 +136124,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1326
+/* "PETSc/Mat.pyx":1433
  * 
  *     property block_sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133238,12 +136151,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyP
   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);
 
-  /* "PETSc/Mat.pyx":1327
+  /* "PETSc/Mat.pyx":1434
  *     property block_sizes:
  *         def __get__(self):
  *             return self.getBlockSizes()             # <<<<<<<<<<<<<<
@@ -133251,7 +136161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyP
  *     property owner_range:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSizes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBlockSizes); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1434, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133264,10 +136174,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyP
     }
   }
   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[33]; __pyx_lineno = 1327; __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(33, 1434, __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[33]; __pyx_lineno = 1327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1434, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133275,7 +136185,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1326
+  /* "PETSc/Mat.pyx":1433
  * 
  *     property block_sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133296,7 +136206,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1330
+/* "PETSc/Mat.pyx":1437
  * 
  *     property owner_range:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133323,12 +136233,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyP
   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);
 
-  /* "PETSc/Mat.pyx":1331
+  /* "PETSc/Mat.pyx":1438
  *     property owner_range:
  *         def __get__(self):
  *             return self.getOwnershipRange()             # <<<<<<<<<<<<<<
@@ -133336,7 +136243,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyP
  *     property owner_ranges:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOwnershipRange); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOwnershipRange); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1438, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133349,10 +136256,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyP
     }
   }
   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[33]; __pyx_lineno = 1331; __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(33, 1438, __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[33]; __pyx_lineno = 1331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1438, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133360,7 +136267,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1330
+  /* "PETSc/Mat.pyx":1437
  * 
  *     property owner_range:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133381,7 +136288,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1334
+/* "PETSc/Mat.pyx":1441
  * 
  *     property owner_ranges:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133408,12 +136315,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct Py
   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);
 
-  /* "PETSc/Mat.pyx":1335
+  /* "PETSc/Mat.pyx":1442
  *     property owner_ranges:
  *         def __get__(self):
  *             return self.getOwnershipRanges()             # <<<<<<<<<<<<<<
@@ -133421,7 +136325,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct Py
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOwnershipRanges); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOwnershipRanges); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1442, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133434,10 +136338,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct Py
     }
   }
   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[33]; __pyx_lineno = 1335; __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(33, 1442, __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[33]; __pyx_lineno = 1335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1442, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133445,7 +136349,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1334
+  /* "PETSc/Mat.pyx":1441
  * 
  *     property owner_ranges:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133466,7 +136370,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1340
+/* "PETSc/Mat.pyx":1447
  * 
  *     property assembled:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133493,12 +136397,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPets
   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);
 
-  /* "PETSc/Mat.pyx":1341
+  /* "PETSc/Mat.pyx":1448
  *     property assembled:
  *         def __get__(self):
  *             return self.isAssembled()             # <<<<<<<<<<<<<<
@@ -133506,7 +136407,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPets
  *         def __get__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isAssembled); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isAssembled); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1448, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133519,10 +136420,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPets
     }
   }
   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[33]; __pyx_lineno = 1341; __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(33, 1448, __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[33]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1448, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133530,7 +136431,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1340
+  /* "PETSc/Mat.pyx":1447
  * 
  *     property assembled:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133551,7 +136452,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1343
+/* "PETSc/Mat.pyx":1450
  *             return self.isAssembled()
  *     property symmetric:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133578,12 +136479,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPets
   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);
 
-  /* "PETSc/Mat.pyx":1344
+  /* "PETSc/Mat.pyx":1451
  *     property symmetric:
  *         def __get__(self):
  *             return self.isSymmetric()             # <<<<<<<<<<<<<<
@@ -133591,7 +136489,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPets
  *         def __get__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isSymmetric); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isSymmetric); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1451, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133604,10 +136502,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPets
     }
   }
   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[33]; __pyx_lineno = 1344; __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(33, 1451, __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[33]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1451, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133615,7 +136513,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1343
+  /* "PETSc/Mat.pyx":1450
  *             return self.isAssembled()
  *     property symmetric:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133636,7 +136534,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1346
+/* "PETSc/Mat.pyx":1453
  *             return self.isSymmetric()
  *     property hermitian:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133663,12 +136561,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPets
   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);
 
-  /* "PETSc/Mat.pyx":1347
+  /* "PETSc/Mat.pyx":1454
  *     property hermitian:
  *         def __get__(self):
  *             return self.isHermitian()             # <<<<<<<<<<<<<<
@@ -133676,7 +136571,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPets
  *         def __get__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isHermitian); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isHermitian); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1454, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133689,10 +136584,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPets
     }
   }
   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[33]; __pyx_lineno = 1347; __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(33, 1454, __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[33]; __pyx_lineno = 1347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1454, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133700,7 +136595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1346
+  /* "PETSc/Mat.pyx":1453
  *             return self.isSymmetric()
  *     property hermitian:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133721,7 +136616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1349
+/* "PETSc/Mat.pyx":1456
  *             return self.isHermitian()
  *     property structsymm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133748,12 +136643,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPe
   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);
 
-  /* "PETSc/Mat.pyx":1350
+  /* "PETSc/Mat.pyx":1457
  *     property structsymm:
  *         def __get__(self):
  *             return self.isStructurallySymmetric()             # <<<<<<<<<<<<<<
@@ -133761,7 +136653,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPe
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isStructurallySymmetric); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_isStructurallySymmetric); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1457, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133774,10 +136666,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPe
     }
   }
   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[33]; __pyx_lineno = 1350; __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(33, 1457, __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[33]; __pyx_lineno = 1350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1457, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -133785,7 +136677,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1349
+  /* "PETSc/Mat.pyx":1456
  *             return self.isHermitian()
  *     property structsymm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -133806,7 +136698,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1358
+/* "PETSc/Mat.pyx":1465
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -133835,7 +136727,7 @@ static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpac
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Mat.pyx":1359
+  /* "PETSc/Mat.pyx":1466
  * 
  *     def __cinit__(self):
  *         self.obj  = <PetscObject*> &self.nsp             # <<<<<<<<<<<<<<
@@ -133844,7 +136736,7 @@ static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpac
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->nsp));
 
-  /* "PETSc/Mat.pyx":1360
+  /* "PETSc/Mat.pyx":1467
  *     def __cinit__(self):
  *         self.obj  = <PetscObject*> &self.nsp
  *         self.nsp = NULL             # <<<<<<<<<<<<<<
@@ -133853,7 +136745,7 @@ static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpac
  */
   __pyx_v_self->nsp = NULL;
 
-  /* "PETSc/Mat.pyx":1358
+  /* "PETSc/Mat.pyx":1465
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -133867,7 +136759,7 @@ static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpac
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1362
+/* "PETSc/Mat.pyx":1469
  *         self.nsp = NULL
  * 
  *     def __call__(self, vec):             # <<<<<<<<<<<<<<
@@ -133879,9 +136771,6 @@ static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpac
 static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
@@ -133903,7 +136792,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_3__call__(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, "__call__") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1362; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(33, 1469, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -133914,7 +136803,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_3__call__(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1362; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1469, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -133934,19 +136823,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_2__call__(struct PyPetscNu
   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("__call__", 0);
 
-  /* "PETSc/Mat.pyx":1363
+  /* "PETSc/Mat.pyx":1470
  * 
  *     def __call__(self, vec):
  *         self.remove(vec)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_remove); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_remove); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1470, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -133959,23 +136845,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_2__call__(struct PyPetscNu
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_vec); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_vec); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1470, __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[33]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1470, __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_vec);
     __Pyx_GIVEREF(__pyx_v_vec);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_vec);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1363; __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(33, 1470, __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;
 
-  /* "PETSc/Mat.pyx":1362
+  /* "PETSc/Mat.pyx":1469
  *         self.nsp = NULL
  * 
  *     def __call__(self, vec):             # <<<<<<<<<<<<<<
@@ -133999,7 +136885,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_2__call__(struct PyPetscNu
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1367
+/* "PETSc/Mat.pyx":1474
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -134012,9 +136898,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_5view(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_9NullSpace_4view[] = "NullSpace.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_5view(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);
@@ -134039,7 +136922,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_5view(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(33, 1474, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -134052,13 +136935,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_5view(PyObject *__pyx_v_se
   }
   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[33]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1474, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.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[33]; __pyx_lineno = 1367; __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(33, 1474, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(((struct PyPetscNullSpaceObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -134078,12 +136961,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSp
   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);
 
-  /* "PETSc/Mat.pyx":1368
+  /* "PETSc/Mat.pyx":1475
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -134092,7 +136972,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSp
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/Mat.pyx":1369
+  /* "PETSc/Mat.pyx":1476
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -134104,20 +136984,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSp
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1370
+  /* "PETSc/Mat.pyx":1477
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( MatNullSpaceView(self.nsp, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceView(__pyx_v_self->nsp, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceView(__pyx_v_self->nsp, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1477, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1367
+  /* "PETSc/Mat.pyx":1474
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -134137,7 +137015,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSp
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1372
+/* "PETSc/Mat.pyx":1479
  *         CHKERR( MatNullSpaceView(self.nsp, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -134166,21 +137044,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_6destroy(struct PyPetscNul
   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);
 
-  /* "PETSc/Mat.pyx":1373
+  /* "PETSc/Mat.pyx":1480
  * 
  *     def destroy(self):
  *         CHKERR( MatNullSpaceDestroy(&self.nsp) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceDestroy((&__pyx_v_self->nsp))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceDestroy((&__pyx_v_self->nsp))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1480, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1374
+  /* "PETSc/Mat.pyx":1481
  *     def destroy(self):
  *         CHKERR( MatNullSpaceDestroy(&self.nsp) )
  *         return self             # <<<<<<<<<<<<<<
@@ -134192,7 +137067,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_6destroy(struct PyPetscNul
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1372
+  /* "PETSc/Mat.pyx":1479
  *         CHKERR( MatNullSpaceView(self.nsp, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -134210,7 +137085,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_6destroy(struct PyPetscNul
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1376
+/* "PETSc/Mat.pyx":1483
  *         return self
  * 
  *     def create(self, constant=False, vectors=(),  comm=None):             # <<<<<<<<<<<<<<
@@ -134225,9 +137100,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_9create(PyObject *__pyx_v_
   PyObject *__pyx_v_constant = 0;
   PyObject *__pyx_v_vectors = 0;
   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);
@@ -134266,7 +137138,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_9create(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(33, 1483, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -134283,7 +137155,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_9create(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1483, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -134314,22 +137186,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
   PetscInt __pyx_t_6;
   Vec __pyx_t_7;
   int __pyx_t_8;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/Mat.pyx":1377
+  /* "PETSc/Mat.pyx":1484
  * 
  *     def create(self, constant=False, vectors=(),  comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscBool has_const = PETSC_FALSE
  *         if constant: has_const = PETSC_TRUE
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1484, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1378
+  /* "PETSc/Mat.pyx":1485
  *     def create(self, constant=False, vectors=(),  comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool has_const = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -134338,21 +137207,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
  */
   __pyx_v_has_const = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":1379
+  /* "PETSc/Mat.pyx":1486
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool has_const = PETSC_FALSE
  *         if constant: has_const = PETSC_TRUE             # <<<<<<<<<<<<<<
  *         cdef PetscInt i = 0, nv = <PetscInt>len(vectors)
  *         cdef PetscVec *v = NULL
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_constant); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_constant); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 1486, __pyx_L1_error)
   if (__pyx_t_2) {
     __pyx_v_has_const = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1380
+  /* "PETSc/Mat.pyx":1487
  *         cdef PetscBool has_const = PETSC_FALSE
  *         if constant: has_const = PETSC_TRUE
  *         cdef PetscInt i = 0, nv = <PetscInt>len(vectors)             # <<<<<<<<<<<<<<
@@ -134360,10 +137227,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
  *         cdef object tmp2 = oarray_p(empty_p(nv), NULL, <void**>&v)
  */
   __pyx_v_i = 0;
-  __pyx_t_3 = PyObject_Length(__pyx_v_vectors); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Length(__pyx_v_vectors); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 1487, __pyx_L1_error)
   __pyx_v_nv = ((PetscInt)__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":1381
+  /* "PETSc/Mat.pyx":1488
  *         if constant: has_const = PETSC_TRUE
  *         cdef PetscInt i = 0, nv = <PetscInt>len(vectors)
  *         cdef PetscVec *v = NULL             # <<<<<<<<<<<<<<
@@ -134372,22 +137239,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/Mat.pyx":1382
+  /* "PETSc/Mat.pyx":1489
  *         cdef PetscInt i = 0, nv = <PetscInt>len(vectors)
  *         cdef PetscVec *v = NULL
  *         cdef object tmp2 = oarray_p(empty_p(nv), NULL, <void**>&v)             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < nv:
  *             v[i] = (<Vec?>(vectors[<Py_ssize_t>i])).vec
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nv)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nv)); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_4, NULL, ((void **)(&__pyx_v_v)))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_4, NULL, ((void **)(&__pyx_v_v)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_tmp2 = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "PETSc/Mat.pyx":1383
+  /* "PETSc/Mat.pyx":1490
  *         cdef PetscVec *v = NULL
  *         cdef object tmp2 = oarray_p(empty_p(nv), NULL, <void**>&v)
  *         for i from 0 <= i < nv:             # <<<<<<<<<<<<<<
@@ -134397,22 +137264,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
   __pyx_t_6 = __pyx_v_nv;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
 
-    /* "PETSc/Mat.pyx":1384
+    /* "PETSc/Mat.pyx":1491
  *         cdef object tmp2 = oarray_p(empty_p(nv), NULL, <void**>&v)
  *         for i from 0 <= i < nv:
  *             v[i] = (<Vec?>(vectors[<Py_ssize_t>i])).vec             # <<<<<<<<<<<<<<
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreate(ccomm, has_const, nv, v, &newnsp) )
  */
-    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_vectors, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1384; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_vectors, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1491, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(33, 1491, __pyx_L1_error)
     __pyx_t_7 = ((struct PyPetscVecObject *)__pyx_t_5)->vec;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     (__pyx_v_v[__pyx_v_i]) = __pyx_t_7;
   }
 
-  /* "PETSc/Mat.pyx":1385
+  /* "PETSc/Mat.pyx":1492
  *         for i from 0 <= i < nv:
  *             v[i] = (<Vec?>(vectors[<Py_ssize_t>i])).vec
  *         cdef PetscNullSpace newnsp = NULL             # <<<<<<<<<<<<<<
@@ -134421,16 +137288,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
  */
   __pyx_v_newnsp = NULL;
 
-  /* "PETSc/Mat.pyx":1386
+  /* "PETSc/Mat.pyx":1493
  *             v[i] = (<Vec?>(vectors[<Py_ssize_t>i])).vec
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreate(ccomm, has_const, nv, v, &newnsp) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.nsp = newnsp
  *         return self
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceCreate(__pyx_v_ccomm, __pyx_v_has_const, __pyx_v_nv, __pyx_v_v, (&__pyx_v_newnsp))); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceCreate(__pyx_v_ccomm, __pyx_v_has_const, __pyx_v_nv, __pyx_v_v, (&__pyx_v_newnsp))); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(33, 1493, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1387
+  /* "PETSc/Mat.pyx":1494
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreate(ccomm, has_const, nv, v, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp             # <<<<<<<<<<<<<<
@@ -134440,7 +137307,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->nsp = __pyx_v_newnsp;
 
-  /* "PETSc/Mat.pyx":1388
+  /* "PETSc/Mat.pyx":1495
  *         CHKERR( MatNullSpaceCreate(ccomm, has_const, nv, v, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp
  *         return self             # <<<<<<<<<<<<<<
@@ -134452,7 +137319,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1376
+  /* "PETSc/Mat.pyx":1483
  *         return self
  * 
  *     def create(self, constant=False, vectors=(),  comm=None):             # <<<<<<<<<<<<<<
@@ -134473,7 +137340,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1390
+/* "PETSc/Mat.pyx":1497
  *         return self
  * 
  *     def createRigidBody(self, Vec coords not None):             # <<<<<<<<<<<<<<
@@ -134486,9 +137353,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_11createRigidBody(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_9NullSpace_10createRigidBody[] = "NullSpace.createRigidBody(self, Vec coords)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_11createRigidBody(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_coords = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createRigidBody (wrapper)", 0);
@@ -134510,7 +137374,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_11createRigidBody(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createRigidBody") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1390; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createRigidBody") < 0)) __PYX_ERR(33, 1497, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -134521,13 +137385,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_11createRigidBody(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createRigidBody", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1390; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createRigidBody", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1497, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.createRigidBody", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coords), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "coords", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coords), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "coords", 0))) __PYX_ERR(33, 1497, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(((struct PyPetscNullSpaceObject *)__pyx_v_self), __pyx_v_coords);
 
   /* function exit code */
@@ -134544,12 +137408,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct P
   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("createRigidBody", 0);
 
-  /* "PETSc/Mat.pyx":1391
+  /* "PETSc/Mat.pyx":1498
  * 
  *     def createRigidBody(self, Vec coords not None):
  *         cdef PetscNullSpace newnsp = NULL             # <<<<<<<<<<<<<<
@@ -134558,16 +137419,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct P
  */
   __pyx_v_newnsp = NULL;
 
-  /* "PETSc/Mat.pyx":1392
+  /* "PETSc/Mat.pyx":1499
  *     def createRigidBody(self, Vec coords not None):
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.nsp = newnsp
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceCreateRigidBody(__pyx_v_coords->vec, (&__pyx_v_newnsp))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceCreateRigidBody(__pyx_v_coords->vec, (&__pyx_v_newnsp))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1499, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1393
+  /* "PETSc/Mat.pyx":1500
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp             # <<<<<<<<<<<<<<
@@ -134577,7 +137438,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct P
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->nsp = __pyx_v_newnsp;
 
-  /* "PETSc/Mat.pyx":1394
+  /* "PETSc/Mat.pyx":1501
  *         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp
  *         return self             # <<<<<<<<<<<<<<
@@ -134589,7 +137450,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct P
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1390
+  /* "PETSc/Mat.pyx":1497
  *         return self
  * 
  *     def createRigidBody(self, Vec coords not None):             # <<<<<<<<<<<<<<
@@ -134607,7 +137468,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct P
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1396
+/* "PETSc/Mat.pyx":1503
  *         return self
  * 
  *     def setFunction(self, function, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -134622,14 +137483,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_13setFunction(PyObject *__
   PyObject *__pyx_v_function = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFunction (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -134646,7 +137504,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_13setFunction(PyObject *__
       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--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -134660,7 +137518,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_13setFunction(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFunction") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFunction") < 0)) __PYX_ERR(33, 1503, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -134677,7 +137535,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_13setFunction(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFunction", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFunction", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1503, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.setFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -134698,14 +137556,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
   int __pyx_t_3;
   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("setFunction", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/Mat.pyx":1397
+  /* "PETSc/Mat.pyx":1504
  * 
  *     def setFunction(self, function, args=None, kargs=None):
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -134716,16 +137571,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1398
+    /* "PETSc/Mat.pyx":1505
  *     def setFunction(self, function, args=None, kargs=None):
  *         if function is not None:
  *             CHKERR( MatNullSpaceSetFunction(             # <<<<<<<<<<<<<<
  *                     self.nsp, NullSpace_Function, NULL) )
  *             if args is None: args = ()
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceSetFunction(__pyx_v_self->nsp, __pyx_f_8petsc4py_5PETSc_NullSpace_Function, NULL)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceSetFunction(__pyx_v_self->nsp, __pyx_f_8petsc4py_5PETSc_NullSpace_Function, NULL)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 1505, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1400
+    /* "PETSc/Mat.pyx":1507
  *             CHKERR( MatNullSpaceSetFunction(
  *                     self.nsp, NullSpace_Function, NULL) )
  *             if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -134737,11 +137592,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
-    /* "PETSc/Mat.pyx":1401
+    /* "PETSc/Mat.pyx":1508
  *                     self.nsp, NullSpace_Function, NULL) )
  *             if args is None: args = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -134751,22 +137604,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1508, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
-    /* "PETSc/Mat.pyx":1402
+    /* "PETSc/Mat.pyx":1509
  *             if args is None: args = ()
  *             if kargs is None: kargs = {}
  *             self.set_attr('__function__', (function, args, kargs))             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( MatNullSpaceSetFunction(self.nsp, NULL, NULL) )
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1509, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_function);
     __Pyx_GIVEREF(__pyx_v_function);
@@ -134777,37 +137628,45 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
     __Pyx_INCREF(__pyx_v_kargs);
     __Pyx_GIVEREF(__pyx_v_kargs);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
-    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_function, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__function__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1509, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+    /* "PETSc/Mat.pyx":1504
+ * 
+ *     def setFunction(self, function, args=None, kargs=None):
+ *         if function is not None:             # <<<<<<<<<<<<<<
+ *             CHKERR( MatNullSpaceSetFunction(
+ *                     self.nsp, NullSpace_Function, NULL) )
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/Mat.pyx":1404
+  /* "PETSc/Mat.pyx":1511
  *             self.set_attr('__function__', (function, args, kargs))
  *         else:
  *             CHKERR( MatNullSpaceSetFunction(self.nsp, NULL, NULL) )             # <<<<<<<<<<<<<<
  *             self.set_attr('__function__', None)
  *     #
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceSetFunction(__pyx_v_self->nsp, NULL, NULL)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceSetFunction(__pyx_v_self->nsp, NULL, NULL)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(33, 1511, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1405
+    /* "PETSc/Mat.pyx":1512
  *         else:
  *             CHKERR( MatNullSpaceSetFunction(self.nsp, NULL, NULL) )
  *             self.set_attr('__function__', None)             # <<<<<<<<<<<<<<
  *     #
  * 
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_function, Py_None); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__function__"), Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1396
+  /* "PETSc/Mat.pyx":1503
  *         return self
  * 
  *     def setFunction(self, function, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -134831,7 +137690,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1408
+/* "PETSc/Mat.pyx":1515
  *     #
  * 
  *     def hasConstant(self):             # <<<<<<<<<<<<<<
@@ -134862,12 +137721,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPet
   __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("hasConstant", 0);
 
-  /* "PETSc/Mat.pyx":1409
+  /* "PETSc/Mat.pyx":1516
  * 
  *     def hasConstant(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -134876,16 +137732,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPet
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":1410
+  /* "PETSc/Mat.pyx":1517
  *     def hasConstant(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, &flag, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         return <bint> flag
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceGetVecs(__pyx_v_self->nsp, (&__pyx_v_flag), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceGetVecs(__pyx_v_self->nsp, (&__pyx_v_flag), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1517, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1411
+  /* "PETSc/Mat.pyx":1518
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, &flag, NULL, NULL) )
  *         return <bint> flag             # <<<<<<<<<<<<<<
@@ -134893,13 +137749,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPet
  *     def getVecs(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1408
+  /* "PETSc/Mat.pyx":1515
  *     #
  * 
  *     def hasConstant(self):             # <<<<<<<<<<<<<<
@@ -134918,7 +137774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1413
+/* "PETSc/Mat.pyx":1520
  *         return <bint> flag
  * 
  *     def getVecs(self):             # <<<<<<<<<<<<<<
@@ -134955,12 +137811,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   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("getVecs", 0);
 
-  /* "PETSc/Mat.pyx":1414
+  /* "PETSc/Mat.pyx":1521
  * 
  *     def getVecs(self):
  *         cdef PetscInt i = 0, nv = 0             # <<<<<<<<<<<<<<
@@ -134970,7 +137823,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   __pyx_v_i = 0;
   __pyx_v_nv = 0;
 
-  /* "PETSc/Mat.pyx":1415
+  /* "PETSc/Mat.pyx":1522
  *     def getVecs(self):
  *         cdef PetscInt i = 0, nv = 0
  *         cdef const_PetscVec *v = NULL             # <<<<<<<<<<<<<<
@@ -134979,16 +137832,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/Mat.pyx":1416
+  /* "PETSc/Mat.pyx":1523
  *         cdef PetscInt i = 0, nv = 0
  *         cdef const_PetscVec *v = NULL
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, NULL, &nv, &v) )             # <<<<<<<<<<<<<<
  *         cdef Vec vec = None
  *         cdef list vectors = []
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceGetVecs(__pyx_v_self->nsp, NULL, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceGetVecs(__pyx_v_self->nsp, NULL, (&__pyx_v_nv), (&__pyx_v_v))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1523, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1417
+  /* "PETSc/Mat.pyx":1524
  *         cdef const_PetscVec *v = NULL
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, NULL, &nv, &v) )
  *         cdef Vec vec = None             # <<<<<<<<<<<<<<
@@ -134998,19 +137851,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   __Pyx_INCREF(Py_None);
   __pyx_v_vec = ((struct PyPetscVecObject *)Py_None);
 
-  /* "PETSc/Mat.pyx":1418
+  /* "PETSc/Mat.pyx":1525
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, NULL, &nv, &v) )
  *         cdef Vec vec = None
  *         cdef list vectors = []             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < nv:
  *             vec = Vec()
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_vectors = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":1419
+  /* "PETSc/Mat.pyx":1526
  *         cdef Vec vec = None
  *         cdef list vectors = []
  *         for i from 0 <= i < nv:             # <<<<<<<<<<<<<<
@@ -135020,19 +137873,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   __pyx_t_3 = __pyx_v_nv;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "PETSc/Mat.pyx":1420
+    /* "PETSc/Mat.pyx":1527
  *         cdef list vectors = []
  *         for i from 0 <= i < nv:
  *             vec = Vec()             # <<<<<<<<<<<<<<
  *             vec.vec = v[i]
  *             PetscINCREF(vec.obj)
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1527, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_vec, ((struct PyPetscVecObject *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "PETSc/Mat.pyx":1421
+    /* "PETSc/Mat.pyx":1528
  *         for i from 0 <= i < nv:
  *             vec = Vec()
  *             vec.vec = v[i]             # <<<<<<<<<<<<<<
@@ -135041,7 +137894,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
  */
     __pyx_v_vec->vec = (__pyx_v_v[__pyx_v_i]);
 
-    /* "PETSc/Mat.pyx":1422
+    /* "PETSc/Mat.pyx":1529
  *             vec = Vec()
  *             vec.vec = v[i]
  *             PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -135050,17 +137903,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
  */
     __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-    /* "PETSc/Mat.pyx":1423
+    /* "PETSc/Mat.pyx":1530
  *             vec.vec = v[i]
  *             PetscINCREF(vec.obj)
  *             vectors.append(vec)             # <<<<<<<<<<<<<<
  *         return vectors
  * 
  */
-    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_vectors, ((PyObject *)__pyx_v_vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_vectors, ((PyObject *)__pyx_v_vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(33, 1530, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":1424
+  /* "PETSc/Mat.pyx":1531
  *             PetscINCREF(vec.obj)
  *             vectors.append(vec)
  *         return vectors             # <<<<<<<<<<<<<<
@@ -135072,7 +137925,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   __pyx_r = __pyx_v_vectors;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1413
+  /* "PETSc/Mat.pyx":1520
  *         return <bint> flag
  * 
  *     def getVecs(self):             # <<<<<<<<<<<<<<
@@ -135093,7 +137946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1426
+/* "PETSc/Mat.pyx":1533
  *         return vectors
  * 
  *     def getFunction(self):             # <<<<<<<<<<<<<<
@@ -135122,12 +137975,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_18getFunction(struct PyPet
   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("getFunction", 0);
 
-  /* "PETSc/Mat.pyx":1427
+  /* "PETSc/Mat.pyx":1534
  * 
  *     def getFunction(self):
  *         return self.get_attr('__function__')             # <<<<<<<<<<<<<<
@@ -135135,13 +137985,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_18getFunction(struct PyPet
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_function); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1534, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1426
+  /* "PETSc/Mat.pyx":1533
  *         return vectors
  * 
  *     def getFunction(self):             # <<<<<<<<<<<<<<
@@ -135160,7 +138010,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_18getFunction(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1431
+/* "PETSc/Mat.pyx":1538
  *     #
  * 
  *     def remove(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -135173,9 +138023,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_21remove(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_9NullSpace_20remove[] = "NullSpace.remove(self, Vec vec)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_21remove(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("remove (wrapper)", 0);
@@ -135197,7 +138044,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_21remove(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, "remove") < 0)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1431; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "remove") < 0)) __PYX_ERR(33, 1538, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -135208,13 +138055,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_21remove(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("remove", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1431; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("remove", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1538, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.remove", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(33, 1538, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_9NullSpace_20remove(((struct PyPetscNullSpaceObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
@@ -135230,21 +138077,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_20remove(struct PyPetscNul
   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("remove", 0);
 
-  /* "PETSc/Mat.pyx":1432
+  /* "PETSc/Mat.pyx":1539
  * 
  *     def remove(self, Vec vec not None):
  *         CHKERR( MatNullSpaceRemove(self.nsp, vec.vec) )             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceRemove(__pyx_v_self->nsp, __pyx_v_vec->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceRemove(__pyx_v_self->nsp, __pyx_v_vec->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(33, 1539, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1431
+  /* "PETSc/Mat.pyx":1538
  *     #
  * 
  *     def remove(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -135264,7 +138108,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_20remove(struct PyPetscNul
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":111
+/* "PETSc/PC.pyx":119
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -135293,7 +138137,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/PC.pyx":112
+  /* "PETSc/PC.pyx":120
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.pc             # <<<<<<<<<<<<<<
@@ -135302,7 +138146,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->pc));
 
-  /* "PETSc/PC.pyx":113
+  /* "PETSc/PC.pyx":121
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.pc
  *         self.pc = NULL             # <<<<<<<<<<<<<<
@@ -135311,7 +138155,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx
  */
   __pyx_v_self->pc = NULL;
 
-  /* "PETSc/PC.pyx":111
+  /* "PETSc/PC.pyx":119
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -135325,7 +138169,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":115
+/* "PETSc/PC.pyx":123
  *         self.pc = NULL
  * 
  *     def __call__(self, x, y=None):             # <<<<<<<<<<<<<<
@@ -135338,9 +138182,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_3__call__(PyObject *__pyx_v_self,
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_x = 0;
   PyObject *__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("__call__ (wrapper)", 0);
@@ -135369,7 +138210,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_3__call__(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(34, 123, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -135384,7 +138225,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_3__call__(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 123, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -135407,13 +138248,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   Py_ssize_t __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
   __Pyx_INCREF(__pyx_v_y);
 
-  /* "PETSc/PC.pyx":116
+  /* "PETSc/PC.pyx":124
  * 
  *     def __call__(self, x, y=None):
  *         if y is None: # XXX do this better             # <<<<<<<<<<<<<<
@@ -135424,14 +138262,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":117
+    /* "PETSc/PC.pyx":125
  *     def __call__(self, x, y=None):
  *         if y is None: # XXX do this better
  *             y = self.getOperators()[0].createVecLeft()             # <<<<<<<<<<<<<<
  *         self.apply(x, y)
  *         return y
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOperators); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOperators); if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 125, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -135444,17 +138282,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
       }
     }
     if (__pyx_t_6) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 125, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
-      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 125, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 125, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 125, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_5 = NULL;
@@ -135468,27 +138306,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
       }
     }
     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[34]; __pyx_lineno = 117; __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(34, 125, __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[34]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 125, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/PC.pyx":124
+ * 
+ *     def __call__(self, x, y=None):
+ *         if y is None: # XXX do this better             # <<<<<<<<<<<<<<
+ *             y = self.getOperators()[0].createVecLeft()
+ *         self.apply(x, y)
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":118
+  /* "PETSc/PC.pyx":126
  *         if y is None: # XXX do this better
  *             y = self.getOperators()[0].createVecLeft()
  *         self.apply(x, y)             # <<<<<<<<<<<<<<
  *         return y
  * 
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_apply); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_apply); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_7 = 0;
@@ -135502,7 +138346,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
       __pyx_t_7 = 1;
     }
   }
-  __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(34, 126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   if (__pyx_t_5) {
     __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
@@ -135513,13 +138357,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
   __Pyx_INCREF(__pyx_v_y);
   __Pyx_GIVEREF(__pyx_v_y);
   PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_7, __pyx_v_y);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":119
+  /* "PETSc/PC.pyx":127
  *             y = self.getOperators()[0].createVecLeft()
  *         self.apply(x, y)
  *         return y             # <<<<<<<<<<<<<<
@@ -135531,7 +138375,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
   __pyx_r = __pyx_v_y;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":115
+  /* "PETSc/PC.pyx":123
  *         self.pc = NULL
  * 
  *     def __call__(self, x, y=None):             # <<<<<<<<<<<<<<
@@ -135554,7 +138398,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":123
+/* "PETSc/PC.pyx":131
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -135567,9 +138411,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_5view(PyObject *__pyx_v_self, PyO
 static char __pyx_doc_8petsc4py_5PETSc_2PC_4view[] = "PC.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_5view(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);
@@ -135594,7 +138435,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_5view(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[34]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(34, 131, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -135607,13 +138448,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_5view(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[34]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 131, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.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[34]; __pyx_lineno = 123; __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(34, 131, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_4view(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -135633,12 +138474,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__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);
 
-  /* "PETSc/PC.pyx":124
+  /* "PETSc/PC.pyx":132
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -135647,7 +138485,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__p
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/PC.pyx":125
+  /* "PETSc/PC.pyx":133
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -135659,20 +138497,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__p
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":126
+  /* "PETSc/PC.pyx":134
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( PCView(self.pc, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCView(__pyx_v_self->pc, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCView(__pyx_v_self->pc, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 134, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":123
+  /* "PETSc/PC.pyx":131
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -135692,7 +138528,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":128
+/* "PETSc/PC.pyx":136
  *         CHKERR( PCView(self.pc, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -135721,21 +138557,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *
   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);
 
-  /* "PETSc/PC.pyx":129
+  /* "PETSc/PC.pyx":137
  * 
  *     def destroy(self):
  *         CHKERR( PCDestroy(&self.pc) )             # <<<<<<<<<<<<<<
  *         self.pc = NULL
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCDestroy((&__pyx_v_self->pc))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCDestroy((&__pyx_v_self->pc))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 137, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":130
+  /* "PETSc/PC.pyx":138
  *     def destroy(self):
  *         CHKERR( PCDestroy(&self.pc) )
  *         self.pc = NULL             # <<<<<<<<<<<<<<
@@ -135744,7 +138577,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *
  */
   __pyx_v_self->pc = NULL;
 
-  /* "PETSc/PC.pyx":131
+  /* "PETSc/PC.pyx":139
  *         CHKERR( PCDestroy(&self.pc) )
  *         self.pc = NULL
  *         return self             # <<<<<<<<<<<<<<
@@ -135756,7 +138589,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":128
+  /* "PETSc/PC.pyx":136
  *         CHKERR( PCView(self.pc, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -135774,7 +138607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":133
+/* "PETSc/PC.pyx":141
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -135787,9 +138620,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_9create(PyObject *__pyx_v_self, P
 static char __pyx_doc_8petsc4py_5PETSc_2PC_8create[] = "PC.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_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);
@@ -135814,7 +138644,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_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[34]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(34, 141, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -135827,7 +138657,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_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[34]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 141, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -135847,22 +138677,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
   __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);
 
-  /* "PETSc/PC.pyx":134
+  /* "PETSc/PC.pyx":142
  * 
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscPC newpc = NULL
  *         CHKERR( PCCreate(ccomm, &newpc) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 142, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":135
+  /* "PETSc/PC.pyx":143
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscPC newpc = NULL             # <<<<<<<<<<<<<<
@@ -135871,16 +138698,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
  */
   __pyx_v_newpc = NULL;
 
-  /* "PETSc/PC.pyx":136
+  /* "PETSc/PC.pyx":144
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscPC newpc = NULL
  *         CHKERR( PCCreate(ccomm, &newpc) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.pc = newpc
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCreate(__pyx_v_ccomm, (&__pyx_v_newpc))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCreate(__pyx_v_ccomm, (&__pyx_v_newpc))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 144, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":137
+  /* "PETSc/PC.pyx":145
  *         cdef PetscPC newpc = NULL
  *         CHKERR( PCCreate(ccomm, &newpc) )
  *         PetscCLEAR(self.obj); self.pc = newpc             # <<<<<<<<<<<<<<
@@ -135890,7 +138717,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->pc = __pyx_v_newpc;
 
-  /* "PETSc/PC.pyx":138
+  /* "PETSc/PC.pyx":146
  *         CHKERR( PCCreate(ccomm, &newpc) )
  *         PetscCLEAR(self.obj); self.pc = newpc
  *         return self             # <<<<<<<<<<<<<<
@@ -135902,7 +138729,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":133
+  /* "PETSc/PC.pyx":141
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -135920,7 +138747,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":140
+/* "PETSc/PC.pyx":148
  *         return self
  * 
  *     def setType(self, pc_type):             # <<<<<<<<<<<<<<
@@ -135933,9 +138760,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_11setType(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_2PC_10setType[] = "PC.setType(self, pc_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_pc_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);
@@ -135957,7 +138781,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_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[34]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(34, 148, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -135968,7 +138792,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_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[34]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 148, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -135987,13 +138811,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_10setType(struct PyPetscPCObject
   __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_pc_type);
 
-  /* "PETSc/PC.pyx":141
+  /* "PETSc/PC.pyx":149
  * 
  *     def setType(self, pc_type):
  *         cdef PetscPCType cval = NULL             # <<<<<<<<<<<<<<
@@ -136002,28 +138823,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_10setType(struct PyPetscPCObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":142
+  /* "PETSc/PC.pyx":150
  *     def setType(self, pc_type):
  *         cdef PetscPCType cval = NULL
  *         pc_type = str2bytes(pc_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PCSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_pc_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_pc_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 150, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_pc_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":143
+  /* "PETSc/PC.pyx":151
  *         cdef PetscPCType cval = NULL
  *         pc_type = str2bytes(pc_type, &cval)
  *         CHKERR( PCSetType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 151, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":140
+  /* "PETSc/PC.pyx":148
  *         return self
  * 
  *     def setType(self, pc_type):             # <<<<<<<<<<<<<<
@@ -136045,7 +138866,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_10setType(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":145
+/* "PETSc/PC.pyx":153
  *         CHKERR( PCSetType(self.pc, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -136076,12 +138897,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject
   __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);
 
-  /* "PETSc/PC.pyx":146
+  /* "PETSc/PC.pyx":154
  * 
  *     def getType(self):
  *         cdef PetscPCType cval = NULL             # <<<<<<<<<<<<<<
@@ -136090,16 +138908,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":147
+  /* "PETSc/PC.pyx":155
  *     def getType(self):
  *         cdef PetscPCType cval = NULL
  *         CHKERR( PCGetType(self.pc, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetType(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetType(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 155, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":148
+  /* "PETSc/PC.pyx":156
  *         cdef PetscPCType cval = NULL
  *         CHKERR( PCGetType(self.pc, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -136107,13 +138925,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":145
+  /* "PETSc/PC.pyx":153
  *         CHKERR( PCSetType(self.pc, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -136132,7 +138950,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":150
+/* "PETSc/PC.pyx":158
  *         return bytes2str(cval)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -136145,9 +138963,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_15setOptionsPrefix(PyObject *__py
 static char __pyx_doc_8petsc4py_5PETSc_2PC_14setOptionsPrefix[] = "PC.setOptionsPrefix(self, prefix)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_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);
@@ -136169,7 +138984,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_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[34]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(34, 158, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -136180,7 +138995,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_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[34]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 158, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -136199,13 +139014,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_14setOptionsPrefix(struct PyPetsc
   __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);
 
-  /* "PETSc/PC.pyx":151
+  /* "PETSc/PC.pyx":159
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -136214,28 +139026,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_14setOptionsPrefix(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":152
+  /* "PETSc/PC.pyx":160
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PCSetOptionsPrefix(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":153
+  /* "PETSc/PC.pyx":161
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
  *         CHKERR( PCSetOptionsPrefix(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetOptionsPrefix(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetOptionsPrefix(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 161, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":150
+  /* "PETSc/PC.pyx":158
  *         return bytes2str(cval)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -136257,7 +139069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_14setOptionsPrefix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":155
+/* "PETSc/PC.pyx":163
  *         CHKERR( PCSetOptionsPrefix(self.pc, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -136288,12 +139100,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetsc
   __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);
 
-  /* "PETSc/PC.pyx":156
+  /* "PETSc/PC.pyx":164
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -136302,16 +139111,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":157
+  /* "PETSc/PC.pyx":165
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( PCGetOptionsPrefix(self.pc, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetOptionsPrefix(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetOptionsPrefix(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 165, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":158
+  /* "PETSc/PC.pyx":166
  *         cdef const_char *cval = NULL
  *         CHKERR( PCGetOptionsPrefix(self.pc, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -136319,13 +139128,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetsc
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 166, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":155
+  /* "PETSc/PC.pyx":163
  *         CHKERR( PCSetOptionsPrefix(self.pc, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -136344,7 +139153,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":160
+/* "PETSc/PC.pyx":168
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -136373,21 +139182,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_18setFromOptions(struct PyPetscPC
   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);
 
-  /* "PETSc/PC.pyx":161
+  /* "PETSc/PC.pyx":169
  * 
  *     def setFromOptions(self):
  *         CHKERR( PCSetFromOptions(self.pc) )             # <<<<<<<<<<<<<<
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetFromOptions(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetFromOptions(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 169, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":160
+  /* "PETSc/PC.pyx":168
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -136407,7 +139213,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_18setFromOptions(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":163
+/* "PETSc/PC.pyx":171
  *         CHKERR( PCSetFromOptions(self.pc) )
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -136421,9 +139227,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2PC_20setOperators[] = "PC.setOperators(s
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_21setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_A = 0;
   struct PyPetscMatObject *__pyx_v_P = 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);
@@ -136455,7 +139258,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_21setOperators(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) __PYX_ERR(34, 171, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -136470,14 +139273,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_21setOperators(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOperators", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOperators", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 171, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setOperators", __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, 1, "A", 0))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 163; __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[34]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "A", 0))) __PYX_ERR(34, 171, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(34, 171, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_A, __pyx_v_P);
 
   /* function exit code */
@@ -136498,12 +139301,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
   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);
 
-  /* "PETSc/PC.pyx":164
+  /* "PETSc/PC.pyx":172
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):
  *         cdef PetscMat amat=NULL             # <<<<<<<<<<<<<<
@@ -136512,7 +139312,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
  */
   __pyx_v_amat = NULL;
 
-  /* "PETSc/PC.pyx":165
+  /* "PETSc/PC.pyx":173
  *     def setOperators(self, Mat A=None, Mat P=None):
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat             # <<<<<<<<<<<<<<
@@ -136524,11 +139324,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_A->mat;
     __pyx_v_amat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":166
+  /* "PETSc/PC.pyx":174
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat
  *         cdef PetscMat pmat=amat             # <<<<<<<<<<<<<<
@@ -136537,7 +139335,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
  */
   __pyx_v_pmat = __pyx_v_amat;
 
-  /* "PETSc/PC.pyx":167
+  /* "PETSc/PC.pyx":175
  *         if A is not None: amat = A.mat
  *         cdef PetscMat pmat=amat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -136549,20 +139347,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_pmat = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/PC.pyx":168
+  /* "PETSc/PC.pyx":176
  *         cdef PetscMat pmat=amat
  *         if P is not None: pmat = P.mat
  *         CHKERR( PCSetOperators(self.pc, amat, pmat) )             # <<<<<<<<<<<<<<
  * 
  *     def getOperators(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetOperators(__pyx_v_self->pc, __pyx_v_amat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetOperators(__pyx_v_self->pc, __pyx_v_amat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 176, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":163
+  /* "PETSc/PC.pyx":171
  *         CHKERR( PCSetFromOptions(self.pc) )
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -136582,7 +139378,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":170
+/* "PETSc/PC.pyx":178
  *         CHKERR( PCSetOperators(self.pc, amat, pmat) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -136614,37 +139410,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
   __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);
 
-  /* "PETSc/PC.pyx":171
+  /* "PETSc/PC.pyx":179
  * 
  *     def getOperators(self):
  *         cdef Mat A = Mat(), P = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( PCGetOperators(self.pc, &A.mat, &P.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[34]; __pyx_lineno = 171; __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(34, 179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
-  __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[34]; __pyx_lineno = 171; __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(34, 179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":172
+  /* "PETSc/PC.pyx":180
  *     def getOperators(self):
  *         cdef Mat A = Mat(), P = Mat()
  *         CHKERR( PCGetOperators(self.pc, &A.mat, &P.mat) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetOperators(__pyx_v_self->pc, (&__pyx_v_A->mat), (&__pyx_v_P->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetOperators(__pyx_v_self->pc, (&__pyx_v_A->mat), (&__pyx_v_P->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 180, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":173
+  /* "PETSc/PC.pyx":181
  *         cdef Mat A = Mat(), P = Mat()
  *         CHKERR( PCGetOperators(self.pc, &A.mat, &P.mat) )
  *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
@@ -136653,7 +139446,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":174
+  /* "PETSc/PC.pyx":182
  *         CHKERR( PCGetOperators(self.pc, &A.mat, &P.mat) )
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
@@ -136662,7 +139455,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_P->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":175
+  /* "PETSc/PC.pyx":183
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)
  *         return (A, P)             # <<<<<<<<<<<<<<
@@ -136670,7 +139463,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
  *     def setUseAmat(self, flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_A));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_A));
@@ -136682,7 +139475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":170
+  /* "PETSc/PC.pyx":178
  *         CHKERR( PCSetOperators(self.pc, amat, pmat) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -136703,7 +139496,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":177
+/* "PETSc/PC.pyx":185
  *         return (A, P)
  * 
  *     def setUseAmat(self, flag):             # <<<<<<<<<<<<<<
@@ -136716,9 +139509,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_25setUseAmat(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_2PC_24setUseAmat[] = "PC.setUseAmat(self, flag)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_25setUseAmat(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("setUseAmat (wrapper)", 0);
@@ -136740,7 +139530,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_25setUseAmat(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, "setUseAmat") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseAmat") < 0)) __PYX_ERR(34, 185, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -136751,7 +139541,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_25setUseAmat(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setUseAmat", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setUseAmat", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 185, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setUseAmat", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -136770,12 +139560,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
   __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("setUseAmat", 0);
 
-  /* "PETSc/PC.pyx":178
+  /* "PETSc/PC.pyx":186
  * 
  *     def setUseAmat(self, flag):
  *         cdef PetscBool cflag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -136784,17 +139571,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
  */
   __pyx_v_cflag = PETSC_FALSE;
 
-  /* "PETSc/PC.pyx":179
+  /* "PETSc/PC.pyx":187
  *     def setUseAmat(self, flag):
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag:             # <<<<<<<<<<<<<<
  *             cflag = PETSC_TRUE
  *         CHKERR( PCSetUseAmat(self.pc, cflag) )
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(34, 187, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":180
+    /* "PETSc/PC.pyx":188
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag:
  *             cflag = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -136802,20 +139589,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
  * 
  */
     __pyx_v_cflag = PETSC_TRUE;
-    goto __pyx_L3;
+
+    /* "PETSc/PC.pyx":187
+ *     def setUseAmat(self, flag):
+ *         cdef PetscBool cflag = PETSC_FALSE
+ *         if flag:             # <<<<<<<<<<<<<<
+ *             cflag = PETSC_TRUE
+ *         CHKERR( PCSetUseAmat(self.pc, cflag) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":181
+  /* "PETSc/PC.pyx":189
  *         if flag:
  *             cflag = PETSC_TRUE
  *         CHKERR( PCSetUseAmat(self.pc, cflag) )             # <<<<<<<<<<<<<<
  * 
  *     def setUp(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUseAmat(__pyx_v_self->pc, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUseAmat(__pyx_v_self->pc, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 189, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":177
+  /* "PETSc/PC.pyx":185
  *         return (A, P)
  * 
  *     def setUseAmat(self, flag):             # <<<<<<<<<<<<<<
@@ -136835,7 +139628,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":183
+/* "PETSc/PC.pyx":191
  *         CHKERR( PCSetUseAmat(self.pc, cflag) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -136864,21 +139657,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_26setUp(struct PyPetscPCObject *_
   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);
 
-  /* "PETSc/PC.pyx":184
+  /* "PETSc/PC.pyx":192
  * 
  *     def setUp(self):
  *         CHKERR( PCSetUp(self.pc) )             # <<<<<<<<<<<<<<
  * 
  *     def reset(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUp(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUp(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 192, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":183
+  /* "PETSc/PC.pyx":191
  *         CHKERR( PCSetUseAmat(self.pc, cflag) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -136898,7 +139688,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_26setUp(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":186
+/* "PETSc/PC.pyx":194
  *         CHKERR( PCSetUp(self.pc) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -136927,21 +139717,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_28reset(struct PyPetscPCObject *_
   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);
 
-  /* "PETSc/PC.pyx":187
+  /* "PETSc/PC.pyx":195
  * 
  *     def reset(self):
  *         CHKERR( PCReset(self.pc) )             # <<<<<<<<<<<<<<
  * 
  *     def setUpOnBlocks(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCReset(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCReset(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 195, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":186
+  /* "PETSc/PC.pyx":194
  *         CHKERR( PCSetUp(self.pc) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -136961,7 +139748,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_28reset(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":189
+/* "PETSc/PC.pyx":197
  *         CHKERR( PCReset(self.pc) )
  * 
  *     def setUpOnBlocks(self):             # <<<<<<<<<<<<<<
@@ -136990,21 +139777,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_30setUpOnBlocks(struct PyPetscPCO
   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("setUpOnBlocks", 0);
 
-  /* "PETSc/PC.pyx":190
+  /* "PETSc/PC.pyx":198
  * 
  *     def setUpOnBlocks(self):
  *         CHKERR( PCSetUpOnBlocks(self.pc) )             # <<<<<<<<<<<<<<
  * 
  *     def apply(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUpOnBlocks(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUpOnBlocks(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 198, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":189
+  /* "PETSc/PC.pyx":197
  *         CHKERR( PCReset(self.pc) )
  * 
  *     def setUpOnBlocks(self):             # <<<<<<<<<<<<<<
@@ -137024,7 +139808,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_30setUpOnBlocks(struct PyPetscPCO
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":192
+/* "PETSc/PC.pyx":200
  *         CHKERR( PCSetUpOnBlocks(self.pc) )
  * 
  *     def apply(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -137038,9 +139822,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2PC_32apply[] = "PC.apply(self, Vec x, Ve
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_33apply(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);
@@ -137064,11 +139845,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_33apply(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[34]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("apply", 1, 2, 2, 1); __PYX_ERR(34, 200, __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[34]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply") < 0)) __PYX_ERR(34, 200, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -137081,14 +139862,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_33apply(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[34]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("apply", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 200, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.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[34]; __pyx_lineno = 192; __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[34]; __pyx_lineno = 192; __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(34, 200, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(34, 200, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_32apply(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
@@ -137104,21 +139885,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_32apply(struct PyPetscPCObject *_
   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);
 
-  /* "PETSc/PC.pyx":193
+  /* "PETSc/PC.pyx":201
  * 
  *     def apply(self, Vec x not None, Vec y not None):
  *         CHKERR( PCApply(self.pc, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def applyTranspose(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCApply(__pyx_v_self->pc, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCApply(__pyx_v_self->pc, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 201, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":192
+  /* "PETSc/PC.pyx":200
  *         CHKERR( PCSetUpOnBlocks(self.pc) )
  * 
  *     def apply(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -137138,7 +139916,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_32apply(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":195
+/* "PETSc/PC.pyx":203
  *         CHKERR( PCApply(self.pc, x.vec, y.vec) )
  * 
  *     def applyTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -137152,9 +139930,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2PC_34applyTranspose[] = "PC.applyTranspo
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_35applyTranspose(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);
@@ -137178,11 +139953,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_35applyTranspose(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[34]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("applyTranspose", 1, 2, 2, 1); __PYX_ERR(34, 203, __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[34]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyTranspose") < 0)) __PYX_ERR(34, 203, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -137195,14 +139970,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_35applyTranspose(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[34]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applyTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 203, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.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[34]; __pyx_lineno = 195; __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[34]; __pyx_lineno = 195; __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(34, 203, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(34, 203, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_34applyTranspose(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
@@ -137218,21 +139993,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_34applyTranspose(struct PyPetscPC
   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);
 
-  /* "PETSc/PC.pyx":196
+  /* "PETSc/PC.pyx":204
  * 
  *     def applyTranspose(self, Vec x not None, Vec y not None):
  *         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def applySymmetricLeft(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCApplyTranspose(__pyx_v_self->pc, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCApplyTranspose(__pyx_v_self->pc, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 204, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":195
+  /* "PETSc/PC.pyx":203
  *         CHKERR( PCApply(self.pc, x.vec, y.vec) )
  * 
  *     def applyTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -137252,7 +140024,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_34applyTranspose(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":198
+/* "PETSc/PC.pyx":206
  *         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )
  * 
  *     def applySymmetricLeft(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -137266,9 +140038,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2PC_36applySymmetricLeft[] = "PC.applySym
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_37applySymmetricLeft(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("applySymmetricLeft (wrapper)", 0);
@@ -137292,11 +140061,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_37applySymmetricLeft(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("applySymmetricLeft", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("applySymmetricLeft", 1, 2, 2, 1); __PYX_ERR(34, 206, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applySymmetricLeft") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applySymmetricLeft") < 0)) __PYX_ERR(34, 206, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -137309,14 +140078,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_37applySymmetricLeft(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applySymmetricLeft", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applySymmetricLeft", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 206, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.applySymmetricLeft", __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[34]; __pyx_lineno = 198; __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[34]; __pyx_lineno = 198; __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(34, 206, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(34, 206, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_36applySymmetricLeft(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
@@ -137332,21 +140101,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_36applySymmetricLeft(struct PyPet
   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("applySymmetricLeft", 0);
 
-  /* "PETSc/PC.pyx":199
+  /* "PETSc/PC.pyx":207
  * 
  *     def applySymmetricLeft(self, Vec x not None, Vec y not None):
  *         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def applySymmetricRight(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCApplySymmetricLeft(__pyx_v_self->pc, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCApplySymmetricLeft(__pyx_v_self->pc, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 207, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":198
+  /* "PETSc/PC.pyx":206
  *         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )
  * 
  *     def applySymmetricLeft(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -137366,7 +140132,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_36applySymmetricLeft(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":201
+/* "PETSc/PC.pyx":209
  *         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )
  * 
  *     def applySymmetricRight(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -137380,9 +140146,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2PC_38applySymmetricRight[] = "PC.applySy
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_39applySymmetricRight(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("applySymmetricRight (wrapper)", 0);
@@ -137406,11 +140169,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_39applySymmetricRight(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("applySymmetricRight", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("applySymmetricRight", 1, 2, 2, 1); __PYX_ERR(34, 209, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applySymmetricRight") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applySymmetricRight") < 0)) __PYX_ERR(34, 209, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -137423,14 +140186,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_39applySymmetricRight(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applySymmetricRight", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applySymmetricRight", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 209, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.applySymmetricRight", __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[34]; __pyx_lineno = 201; __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[34]; __pyx_lineno = 201; __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(34, 209, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(34, 209, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_38applySymmetricRight(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
@@ -137446,21 +140209,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_38applySymmetricRight(struct PyPe
   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("applySymmetricRight", 0);
 
-  /* "PETSc/PC.pyx":202
+  /* "PETSc/PC.pyx":210
  * 
  *     def applySymmetricRight(self, Vec x not None, Vec y not None):
  *         CHKERR( PCApplySymmetricRight(self.pc, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     # --- discretization space ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCApplySymmetricRight(__pyx_v_self->pc, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCApplySymmetricRight(__pyx_v_self->pc, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 210, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":201
+  /* "PETSc/PC.pyx":209
  *         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )
  * 
  *     def applySymmetricRight(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -137480,7 +140240,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_38applySymmetricRight(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":206
+/* "PETSc/PC.pyx":214
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -137513,12 +140273,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
   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("getDM", 0);
 
-  /* "PETSc/PC.pyx":207
+  /* "PETSc/PC.pyx":215
  * 
  *     def getDM(self):
  *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
@@ -137527,32 +140284,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/PC.pyx":208
+  /* "PETSc/PC.pyx":216
  *     def getDM(self):
  *         cdef PetscDM newdm = NULL
  *         CHKERR( PCGetDM(self.pc, &newdm) )             # <<<<<<<<<<<<<<
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetDM(__pyx_v_self->pc, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetDM(__pyx_v_self->pc, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 216, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":209
+  /* "PETSc/PC.pyx":217
  *         cdef PetscDM newdm = NULL
  *         CHKERR( PCGetDM(self.pc, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()             # <<<<<<<<<<<<<<
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(34, 217, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":210
+  /* "PETSc/PC.pyx":218
  *         CHKERR( PCGetDM(self.pc, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm             # <<<<<<<<<<<<<<
@@ -137561,7 +140318,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
  */
   __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/PC.pyx":211
+  /* "PETSc/PC.pyx":219
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
@@ -137570,7 +140327,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":212
+  /* "PETSc/PC.pyx":220
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  *         return dm             # <<<<<<<<<<<<<<
@@ -137582,7 +140339,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":206
+  /* "PETSc/PC.pyx":214
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -137603,7 +140360,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":214
+/* "PETSc/PC.pyx":222
  *         return dm
  * 
  *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
@@ -137616,9 +140373,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_43setDM(PyObject *__pyx_v_self, P
 static char __pyx_doc_8petsc4py_5PETSc_2PC_42setDM[] = "PC.setDM(self, DM dm)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_43setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscDMObject *__pyx_v_dm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDM (wrapper)", 0);
@@ -137640,7 +140394,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_43setDM(PyObject *__pyx_v_self, P
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) __PYX_ERR(34, 222, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -137651,13 +140405,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_43setDM(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 222, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(34, 222, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_42setDM(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
@@ -137673,21 +140427,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_42setDM(struct PyPetscPCObject *_
   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("setDM", 0);
 
-  /* "PETSc/PC.pyx":215
+  /* "PETSc/PC.pyx":223
  * 
  *     def setDM(self, DM dm not None):
  *         CHKERR( PCSetDM(self.pc, dm.dm) )             # <<<<<<<<<<<<<<
  * 
  *     def setCoordinates(self, coordinates):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetDM(__pyx_v_self->pc, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetDM(__pyx_v_self->pc, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 223, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":214
+  /* "PETSc/PC.pyx":222
  *         return dm
  * 
  *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
@@ -137707,7 +140458,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_42setDM(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":217
+/* "PETSc/PC.pyx":225
  *         CHKERR( PCSetDM(self.pc, dm.dm) )
  * 
  *     def setCoordinates(self, coordinates):             # <<<<<<<<<<<<<<
@@ -137720,9 +140471,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_45setCoordinates(PyObject *__pyx_
 static char __pyx_doc_8petsc4py_5PETSc_2PC_44setCoordinates[] = "PC.setCoordinates(self, coordinates)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_45setCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_coordinates = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCoordinates (wrapper)", 0);
@@ -137744,7 +140492,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_45setCoordinates(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, "setCoordinates") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCoordinates") < 0)) __PYX_ERR(34, 225, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -137755,7 +140503,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_45setCoordinates(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCoordinates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCoordinates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 225, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -137779,24 +140527,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCoordinates", 0);
 
-  /* "PETSc/PC.pyx":218
+  /* "PETSc/PC.pyx":226
  * 
  *     def setCoordinates(self, coordinates):
  *         cdef ndarray xyz = iarray(coordinates, NPY_PETSC_REAL)             # <<<<<<<<<<<<<<
  *         if PyArray_ISFORTRAN(xyz): xyz = PyArray_Copy(xyz)
  *         if PyArray_NDIM(xyz) != 2: raise ValueError(
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray(__pyx_v_coordinates, NPY_PETSC_REAL)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray(__pyx_v_coordinates, NPY_PETSC_REAL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_xyz = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":219
+  /* "PETSc/PC.pyx":227
  *     def setCoordinates(self, coordinates):
  *         cdef ndarray xyz = iarray(coordinates, NPY_PETSC_REAL)
  *         if PyArray_ISFORTRAN(xyz): xyz = PyArray_Copy(xyz)             # <<<<<<<<<<<<<<
@@ -137805,15 +140550,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
  */
   __pyx_t_2 = (PyArray_ISFORTRAN(__pyx_v_xyz) != 0);
   if (__pyx_t_2) {
-    __pyx_t_1 = ((PyObject *)PyArray_Copy(__pyx_v_xyz)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)PyArray_Copy(__pyx_v_xyz)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 227, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_xyz, ((PyArrayObject *)__pyx_t_1));
     __pyx_t_1 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":220
+  /* "PETSc/PC.pyx":228
  *         cdef ndarray xyz = iarray(coordinates, NPY_PETSC_REAL)
  *         if PyArray_ISFORTRAN(xyz): xyz = PyArray_Copy(xyz)
  *         if PyArray_NDIM(xyz) != 2: raise ValueError(             # <<<<<<<<<<<<<<
@@ -137823,40 +140566,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
   __pyx_t_2 = ((PyArray_NDIM(__pyx_v_xyz) != 2) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":222
+    /* "PETSc/PC.pyx":230
  *         if PyArray_NDIM(xyz) != 2: raise ValueError(
  *             ("coordinates must have two dimensions: "
  *              "coordinates.ndim=%d") % (PyArray_NDIM(xyz)) )             # <<<<<<<<<<<<<<
  *         cdef PetscInt nvtx = <PetscInt> PyArray_DIM(xyz, 0)
  *         cdef PetscInt ndim = <PetscInt> PyArray_DIM(xyz, 1)
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_xyz)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_xyz)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 230, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_coordinates_must_have_two_dimens, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_coordinates_must_have_two_dimens, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 230, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/PC.pyx":220
+    /* "PETSc/PC.pyx":228
  *         cdef ndarray xyz = iarray(coordinates, NPY_PETSC_REAL)
  *         if PyArray_ISFORTRAN(xyz): xyz = PyArray_Copy(xyz)
  *         if PyArray_NDIM(xyz) != 2: raise ValueError(             # <<<<<<<<<<<<<<
  *             ("coordinates must have two dimensions: "
  *              "coordinates.ndim=%d") % (PyArray_NDIM(xyz)) )
  */
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 228, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 228, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[34]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(34, 228, __pyx_L1_error)
   }
 
-  /* "PETSc/PC.pyx":223
+  /* "PETSc/PC.pyx":231
  *             ("coordinates must have two dimensions: "
  *              "coordinates.ndim=%d") % (PyArray_NDIM(xyz)) )
  *         cdef PetscInt nvtx = <PetscInt> PyArray_DIM(xyz, 0)             # <<<<<<<<<<<<<<
@@ -137865,7 +140608,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
  */
   __pyx_v_nvtx = ((PetscInt)PyArray_DIM(__pyx_v_xyz, 0));
 
-  /* "PETSc/PC.pyx":224
+  /* "PETSc/PC.pyx":232
  *              "coordinates.ndim=%d") % (PyArray_NDIM(xyz)) )
  *         cdef PetscInt nvtx = <PetscInt> PyArray_DIM(xyz, 0)
  *         cdef PetscInt ndim = <PetscInt> PyArray_DIM(xyz, 1)             # <<<<<<<<<<<<<<
@@ -137874,7 +140617,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
  */
   __pyx_v_ndim = ((PetscInt)PyArray_DIM(__pyx_v_xyz, 1));
 
-  /* "PETSc/PC.pyx":225
+  /* "PETSc/PC.pyx":233
  *         cdef PetscInt nvtx = <PetscInt> PyArray_DIM(xyz, 0)
  *         cdef PetscInt ndim = <PetscInt> PyArray_DIM(xyz, 1)
  *         cdef PetscReal *coords = <PetscReal*> PyArray_DATA(xyz)             # <<<<<<<<<<<<<<
@@ -137883,16 +140626,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
  */
   __pyx_v_coords = ((PetscReal *)PyArray_DATA(__pyx_v_xyz));
 
-  /* "PETSc/PC.pyx":226
+  /* "PETSc/PC.pyx":234
  *         cdef PetscInt ndim = <PetscInt> PyArray_DIM(xyz, 1)
  *         cdef PetscReal *coords = <PetscReal*> PyArray_DATA(xyz)
  *         CHKERR( PCSetCoordinates(self.pc, ndim, nvtx, coords) )             # <<<<<<<<<<<<<<
  * 
  *     # --- Python ---
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetCoordinates(__pyx_v_self->pc, __pyx_v_ndim, __pyx_v_nvtx, __pyx_v_coords)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetCoordinates(__pyx_v_self->pc, __pyx_v_ndim, __pyx_v_nvtx, __pyx_v_coords)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 234, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":217
+  /* "PETSc/PC.pyx":225
  *         CHKERR( PCSetDM(self.pc, dm.dm) )
  * 
  *     def setCoordinates(self, coordinates):             # <<<<<<<<<<<<<<
@@ -137915,7 +140658,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":230
+/* "PETSc/PC.pyx":238
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -137929,9 +140672,6 @@ static char __pyx_doc_8petsc4py_5PETSc_2PC_46createPython[] = "PC.createPython(s
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_47createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
   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("createPython (wrapper)", 0);
@@ -137963,7 +140703,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_47createPython(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(34, 238, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -137978,7 +140718,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_47createPython(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 238, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.createPython", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -137998,22 +140738,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
   __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("createPython", 0);
 
-  /* "PETSc/PC.pyx":231
+  /* "PETSc/PC.pyx":239
  * 
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscPC newpc = NULL
  *         CHKERR( PCCreate(ccomm, &newpc) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 239, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":232
+  /* "PETSc/PC.pyx":240
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscPC newpc = NULL             # <<<<<<<<<<<<<<
@@ -138022,16 +140759,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
  */
   __pyx_v_newpc = NULL;
 
-  /* "PETSc/PC.pyx":233
+  /* "PETSc/PC.pyx":241
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscPC newpc = NULL
  *         CHKERR( PCCreate(ccomm, &newpc) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.pc = newpc
  *         CHKERR( PCSetType(self.pc, PCPYTHON) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCreate(__pyx_v_ccomm, (&__pyx_v_newpc))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCreate(__pyx_v_ccomm, (&__pyx_v_newpc))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 241, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":234
+  /* "PETSc/PC.pyx":242
  *         cdef PetscPC newpc = NULL
  *         CHKERR( PCCreate(ccomm, &newpc) )
  *         PetscCLEAR(self.obj); self.pc = newpc             # <<<<<<<<<<<<<<
@@ -138041,25 +140778,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->pc = __pyx_v_newpc;
 
-  /* "PETSc/PC.pyx":235
+  /* "PETSc/PC.pyx":243
  *         CHKERR( PCCreate(ccomm, &newpc) )
  *         PetscCLEAR(self.obj); self.pc = newpc
  *         CHKERR( PCSetType(self.pc, PCPYTHON) )             # <<<<<<<<<<<<<<
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetType(__pyx_v_self->pc, PCPYTHON)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetType(__pyx_v_self->pc, PCPYTHON)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 243, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":236
+  /* "PETSc/PC.pyx":244
  *         PetscCLEAR(self.obj); self.pc = newpc
  *         CHKERR( PCSetType(self.pc, PCPYTHON) )
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonSetContext(__pyx_v_self->pc, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonSetContext(__pyx_v_self->pc, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 244, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":237
+  /* "PETSc/PC.pyx":245
  *         CHKERR( PCSetType(self.pc, PCPYTHON) )
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )
  *         return self             # <<<<<<<<<<<<<<
@@ -138071,7 +140808,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":230
+  /* "PETSc/PC.pyx":238
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -138089,7 +140826,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":239
+/* "PETSc/PC.pyx":247
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -138102,9 +140839,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_49setPythonContext(PyObject *__py
 static char __pyx_doc_8petsc4py_5PETSc_2PC_48setPythonContext[] = "PC.setPythonContext(self, context)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_49setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonContext (wrapper)", 0);
@@ -138126,7 +140860,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_49setPythonContext(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, "setPythonContext") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(34, 247, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138137,7 +140871,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_49setPythonContext(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 247, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setPythonContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138154,21 +140888,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_48setPythonContext(struct PyPetsc
   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("setPythonContext", 0);
 
-  /* "PETSc/PC.pyx":240
+  /* "PETSc/PC.pyx":248
  * 
  *     def setPythonContext(self, context):
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )             # <<<<<<<<<<<<<<
  * 
  *     def getPythonContext(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonSetContext(__pyx_v_self->pc, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonSetContext(__pyx_v_self->pc, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 248, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":239
+  /* "PETSc/PC.pyx":247
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -138188,7 +140919,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_48setPythonContext(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":242
+/* "PETSc/PC.pyx":250
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -138219,12 +140950,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
   __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("getPythonContext", 0);
 
-  /* "PETSc/PC.pyx":243
+  /* "PETSc/PC.pyx":251
  * 
  *     def getPythonContext(self):
  *         cdef void *context = NULL             # <<<<<<<<<<<<<<
@@ -138233,16 +140961,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
  */
   __pyx_v_context = NULL;
 
-  /* "PETSc/PC.pyx":244
+  /* "PETSc/PC.pyx":252
  *     def getPythonContext(self):
  *         cdef void *context = NULL
  *         CHKERR( PCPythonGetContext(self.pc, &context) )             # <<<<<<<<<<<<<<
  *         if context == NULL: return None
  *         else: return <object> context
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonGetContext(__pyx_v_self->pc, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonGetContext(__pyx_v_self->pc, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 252, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":245
+  /* "PETSc/PC.pyx":253
  *         cdef void *context = NULL
  *         CHKERR( PCPythonGetContext(self.pc, &context) )
  *         if context == NULL: return None             # <<<<<<<<<<<<<<
@@ -138256,22 +140984,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
     __pyx_r = Py_None;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/PC.pyx":246
+  /* "PETSc/PC.pyx":254
  *         CHKERR( PCPythonGetContext(self.pc, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
  * 
  *     def setPythonType(self, py_type):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(((PyObject *)__pyx_v_context));
     __pyx_r = ((PyObject *)__pyx_v_context);
     goto __pyx_L0;
   }
 
-  /* "PETSc/PC.pyx":242
+  /* "PETSc/PC.pyx":250
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -138289,7 +141017,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":248
+/* "PETSc/PC.pyx":256
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -138302,9 +141030,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_53setPythonType(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_2PC_52setPythonType[] = "PC.setPythonType(self, py_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_53setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_py_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonType (wrapper)", 0);
@@ -138326,7 +141051,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_53setPythonType(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, "setPythonType") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(34, 256, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138337,7 +141062,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_53setPythonType(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 256, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setPythonType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138356,13 +141081,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_52setPythonType(struct PyPetscPCO
   __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("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
-  /* "PETSc/PC.pyx":249
+  /* "PETSc/PC.pyx":257
  * 
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -138371,28 +141093,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_52setPythonType(struct PyPetscPCO
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":250
+  /* "PETSc/PC.pyx":258
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PCPythonSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_py_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":251
+  /* "PETSc/PC.pyx":259
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)
  *         CHKERR( PCPythonSetType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     # --- ASM ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 259, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":248
+  /* "PETSc/PC.pyx":256
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -138414,7 +141136,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_52setPythonType(struct PyPetscPCO
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":255
+/* "PETSc/PC.pyx":263
  *     # --- ASM ---
  * 
  *     def setASMType(self, asmtype):             # <<<<<<<<<<<<<<
@@ -138427,9 +141149,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_55setASMType(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_2PC_54setASMType[] = "PC.setASMType(self, asmtype)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_55setASMType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_asmtype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setASMType (wrapper)", 0);
@@ -138451,7 +141170,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_55setASMType(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, "setASMType") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMType") < 0)) __PYX_ERR(34, 263, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138462,7 +141181,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_55setASMType(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setASMType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setASMType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 263, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setASMType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138481,31 +141200,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_54setASMType(struct PyPetscPCObje
   __Pyx_RefNannyDeclarations
   PCASMType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setASMType", 0);
 
-  /* "PETSc/PC.pyx":256
+  /* "PETSc/PC.pyx":264
  * 
  *     def setASMType(self, asmtype):
  *         cdef PetscPCASMType cval = asmtype             # <<<<<<<<<<<<<<
  *         CHKERR( PCASMSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCASMType)PyInt_AsLong(__pyx_v_asmtype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PCASMType)__Pyx_PyInt_As_PCASMType(__pyx_v_asmtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 264, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":257
+  /* "PETSc/PC.pyx":265
  *     def setASMType(self, asmtype):
  *         cdef PetscPCASMType cval = asmtype
  *         CHKERR( PCASMSetType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def setASMOverlap(self, overlap):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 265, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":255
+  /* "PETSc/PC.pyx":263
  *     # --- ASM ---
  * 
  *     def setASMType(self, asmtype):             # <<<<<<<<<<<<<<
@@ -138525,7 +141241,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_54setASMType(struct PyPetscPCObje
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":259
+/* "PETSc/PC.pyx":267
  *         CHKERR( PCASMSetType(self.pc, cval) )
  * 
  *     def setASMOverlap(self, overlap):             # <<<<<<<<<<<<<<
@@ -138538,9 +141254,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_57setASMOverlap(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_2PC_56setASMOverlap[] = "PC.setASMOverlap(self, overlap)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_57setASMOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_overlap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setASMOverlap (wrapper)", 0);
@@ -138562,7 +141275,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_57setASMOverlap(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, "setASMOverlap") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMOverlap") < 0)) __PYX_ERR(34, 267, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138573,7 +141286,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_57setASMOverlap(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setASMOverlap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setASMOverlap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 267, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setASMOverlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138592,31 +141305,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_56setASMOverlap(struct PyPetscPCO
   __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("setASMOverlap", 0);
 
-  /* "PETSc/PC.pyx":260
+  /* "PETSc/PC.pyx":268
  * 
  *     def setASMOverlap(self, overlap):
  *         cdef PetscInt ival = asInt(overlap)             # <<<<<<<<<<<<<<
  *         CHKERR( PCASMSetOverlap(self.pc, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 268, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":261
+  /* "PETSc/PC.pyx":269
  *     def setASMOverlap(self, overlap):
  *         cdef PetscInt ival = asInt(overlap)
  *         CHKERR( PCASMSetOverlap(self.pc, ival) )             # <<<<<<<<<<<<<<
  * 
  *     def setASMLocalSubdomains(self, nsd):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetOverlap(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetOverlap(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 269, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":259
+  /* "PETSc/PC.pyx":267
  *         CHKERR( PCASMSetType(self.pc, cval) )
  * 
  *     def setASMOverlap(self, overlap):             # <<<<<<<<<<<<<<
@@ -138636,7 +141346,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_56setASMOverlap(struct PyPetscPCO
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":263
+/* "PETSc/PC.pyx":271
  *         CHKERR( PCASMSetOverlap(self.pc, ival) )
  * 
  *     def setASMLocalSubdomains(self, nsd):             # <<<<<<<<<<<<<<
@@ -138649,9 +141359,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_59setASMLocalSubdomains(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_2PC_58setASMLocalSubdomains[] = "PC.setASMLocalSubdomains(self, nsd)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_59setASMLocalSubdomains(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_nsd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setASMLocalSubdomains (wrapper)", 0);
@@ -138673,7 +141380,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_59setASMLocalSubdomains(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMLocalSubdomains") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMLocalSubdomains") < 0)) __PYX_ERR(34, 271, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138684,7 +141391,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_59setASMLocalSubdomains(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setASMLocalSubdomains", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setASMLocalSubdomains", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 271, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setASMLocalSubdomains", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138703,31 +141410,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_58setASMLocalSubdomains(struct Py
   __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("setASMLocalSubdomains", 0);
 
-  /* "PETSc/PC.pyx":264
+  /* "PETSc/PC.pyx":272
  * 
  *     def setASMLocalSubdomains(self, nsd):
  *         cdef PetscInt n = asInt(nsd)             # <<<<<<<<<<<<<<
  *         CHKERR( PCASMSetLocalSubdomains(self.pc, n, NULL, NULL) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nsd); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nsd); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 272, __pyx_L1_error)
   __pyx_v_n = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":265
+  /* "PETSc/PC.pyx":273
  *     def setASMLocalSubdomains(self, nsd):
  *         cdef PetscInt n = asInt(nsd)
  *         CHKERR( PCASMSetLocalSubdomains(self.pc, n, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setASMTotalSubdomains(self, nsd):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetLocalSubdomains(__pyx_v_self->pc, __pyx_v_n, NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetLocalSubdomains(__pyx_v_self->pc, __pyx_v_n, NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 273, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":263
+  /* "PETSc/PC.pyx":271
  *         CHKERR( PCASMSetOverlap(self.pc, ival) )
  * 
  *     def setASMLocalSubdomains(self, nsd):             # <<<<<<<<<<<<<<
@@ -138747,7 +141451,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_58setASMLocalSubdomains(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":267
+/* "PETSc/PC.pyx":275
  *         CHKERR( PCASMSetLocalSubdomains(self.pc, n, NULL, NULL) )
  * 
  *     def setASMTotalSubdomains(self, nsd):             # <<<<<<<<<<<<<<
@@ -138760,9 +141464,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_61setASMTotalSubdomains(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_2PC_60setASMTotalSubdomains[] = "PC.setASMTotalSubdomains(self, nsd)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_61setASMTotalSubdomains(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_nsd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setASMTotalSubdomains (wrapper)", 0);
@@ -138784,7 +141485,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_61setASMTotalSubdomains(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMTotalSubdomains") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMTotalSubdomains") < 0)) __PYX_ERR(34, 275, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138795,7 +141496,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_61setASMTotalSubdomains(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setASMTotalSubdomains", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setASMTotalSubdomains", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 275, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setASMTotalSubdomains", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138814,31 +141515,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_60setASMTotalSubdomains(struct Py
   __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("setASMTotalSubdomains", 0);
 
-  /* "PETSc/PC.pyx":268
+  /* "PETSc/PC.pyx":276
  * 
  *     def setASMTotalSubdomains(self, nsd):
  *         cdef PetscInt N = asInt(nsd)             # <<<<<<<<<<<<<<
  *         CHKERR( PCASMSetTotalSubdomains(self.pc, N, NULL, NULL) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nsd); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nsd); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 276, __pyx_L1_error)
   __pyx_v_N = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":269
+  /* "PETSc/PC.pyx":277
  *     def setASMTotalSubdomains(self, nsd):
  *         cdef PetscInt N = asInt(nsd)
  *         CHKERR( PCASMSetTotalSubdomains(self.pc, N, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def getASMSubKSP(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetTotalSubdomains(__pyx_v_self->pc, __pyx_v_N, NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetTotalSubdomains(__pyx_v_self->pc, __pyx_v_N, NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 277, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":267
+  /* "PETSc/PC.pyx":275
  *         CHKERR( PCASMSetLocalSubdomains(self.pc, n, NULL, NULL) )
  * 
  *     def setASMTotalSubdomains(self, nsd):             # <<<<<<<<<<<<<<
@@ -138858,7 +141556,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_60setASMTotalSubdomains(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":271
+/* "PETSc/PC.pyx":279
  *         CHKERR( PCASMSetTotalSubdomains(self.pc, N, NULL, NULL) )
  * 
  *     def getASMSubKSP(self):             # <<<<<<<<<<<<<<
@@ -138893,12 +141591,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
   PyObject *__pyx_t_2 = NULL;
   PetscInt __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getASMSubKSP", 0);
 
-  /* "PETSc/PC.pyx":272
+  /* "PETSc/PC.pyx":280
  * 
  *     def getASMSubKSP(self):
  *         cdef PetscInt i = 0, n = 0             # <<<<<<<<<<<<<<
@@ -138908,7 +141603,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
   __pyx_v_i = 0;
   __pyx_v_n = 0;
 
-  /* "PETSc/PC.pyx":273
+  /* "PETSc/PC.pyx":281
  *     def getASMSubKSP(self):
  *         cdef PetscInt i = 0, n = 0
  *         cdef PetscKSP *p = NULL             # <<<<<<<<<<<<<<
@@ -138917,16 +141612,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
  */
   __pyx_v_p = NULL;
 
-  /* "PETSc/PC.pyx":274
+  /* "PETSc/PC.pyx":282
  *         cdef PetscInt i = 0, n = 0
  *         cdef PetscKSP *p = NULL
  *         CHKERR( PCASMGetSubKSP(self.pc, &n, NULL, &p) )             # <<<<<<<<<<<<<<
  *         return [ref_KSP(p[i]) for i from 0 <= i <n]
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMGetSubKSP(__pyx_v_self->pc, (&__pyx_v_n), NULL, (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMGetSubKSP(__pyx_v_self->pc, (&__pyx_v_n), NULL, (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 282, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":275
+  /* "PETSc/PC.pyx":283
  *         cdef PetscKSP *p = NULL
  *         CHKERR( PCASMGetSubKSP(self.pc, &n, NULL, &p) )
  *         return [ref_KSP(p[i]) for i from 0 <= i <n]             # <<<<<<<<<<<<<<
@@ -138934,20 +141629,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
  *     # --- GASM ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 283, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP((__pyx_v_p[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP((__pyx_v_p[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 283, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(34, 283, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":271
+  /* "PETSc/PC.pyx":279
  *         CHKERR( PCASMSetTotalSubdomains(self.pc, N, NULL, NULL) )
  * 
  *     def getASMSubKSP(self):             # <<<<<<<<<<<<<<
@@ -138967,7 +141662,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":279
+/* "PETSc/PC.pyx":287
  *     # --- GASM ---
  * 
  *     def setGASMType(self, gasmtype):             # <<<<<<<<<<<<<<
@@ -138980,9 +141675,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_65setGASMType(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_2PC_64setGASMType[] = "PC.setGASMType(self, gasmtype)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_65setGASMType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_gasmtype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGASMType (wrapper)", 0);
@@ -139004,7 +141696,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_65setGASMType(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGASMType") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGASMType") < 0)) __PYX_ERR(34, 287, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -139015,7 +141707,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_65setGASMType(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGASMType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGASMType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 287, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGASMType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -139034,31 +141726,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_64setGASMType(struct PyPetscPCObj
   __Pyx_RefNannyDeclarations
   PCGASMType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setGASMType", 0);
 
-  /* "PETSc/PC.pyx":280
+  /* "PETSc/PC.pyx":288
  * 
  *     def setGASMType(self, gasmtype):
  *         cdef PetscPCGASMType cval = gasmtype             # <<<<<<<<<<<<<<
  *         CHKERR( PCGASMSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCGASMType)PyInt_AsLong(__pyx_v_gasmtype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PCGASMType)__Pyx_PyInt_As_PCGASMType(__pyx_v_gasmtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 288, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":281
+  /* "PETSc/PC.pyx":289
  *     def setGASMType(self, gasmtype):
  *         cdef PetscPCGASMType cval = gasmtype
  *         CHKERR( PCGASMSetType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def setGASMOverlap(self, overlap):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGASMSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGASMSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 289, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":279
+  /* "PETSc/PC.pyx":287
  *     # --- GASM ---
  * 
  *     def setGASMType(self, gasmtype):             # <<<<<<<<<<<<<<
@@ -139078,7 +141767,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_64setGASMType(struct PyPetscPCObj
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":283
+/* "PETSc/PC.pyx":291
  *         CHKERR( PCGASMSetType(self.pc, cval) )
  * 
  *     def setGASMOverlap(self, overlap):             # <<<<<<<<<<<<<<
@@ -139091,9 +141780,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_67setGASMOverlap(PyObject *__pyx_
 static char __pyx_doc_8petsc4py_5PETSc_2PC_66setGASMOverlap[] = "PC.setGASMOverlap(self, overlap)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_67setGASMOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_overlap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGASMOverlap (wrapper)", 0);
@@ -139115,7 +141801,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_67setGASMOverlap(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, "setGASMOverlap") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGASMOverlap") < 0)) __PYX_ERR(34, 291, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -139126,7 +141812,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_67setGASMOverlap(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGASMOverlap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGASMOverlap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 291, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGASMOverlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -139145,31 +141831,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_66setGASMOverlap(struct PyPetscPC
   __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("setGASMOverlap", 0);
 
-  /* "PETSc/PC.pyx":284
+  /* "PETSc/PC.pyx":292
  * 
  *     def setGASMOverlap(self, overlap):
  *         cdef PetscInt ival = asInt(overlap)             # <<<<<<<<<<<<<<
  *         CHKERR( PCGASMSetOverlap(self.pc, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 292, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":285
+  /* "PETSc/PC.pyx":293
  *     def setGASMOverlap(self, overlap):
  *         cdef PetscInt ival = asInt(overlap)
  *         CHKERR( PCGASMSetOverlap(self.pc, ival) )             # <<<<<<<<<<<<<<
  * 
  *     # --- GAMG ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGASMSetOverlap(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGASMSetOverlap(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 293, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":283
+  /* "PETSc/PC.pyx":291
  *         CHKERR( PCGASMSetType(self.pc, cval) )
  * 
  *     def setGASMOverlap(self, overlap):             # <<<<<<<<<<<<<<
@@ -139189,7 +141872,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_66setGASMOverlap(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":289
+/* "PETSc/PC.pyx":297
  *     # --- GAMG ---
  * 
  *     def setGAMGType(self, gamgtype):             # <<<<<<<<<<<<<<
@@ -139202,9 +141885,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_69setGAMGType(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_2PC_68setGAMGType[] = "PC.setGAMGType(self, gamgtype)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_69setGAMGType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_gamgtype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGAMGType (wrapper)", 0);
@@ -139226,7 +141906,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_69setGAMGType(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGAMGType") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGAMGType") < 0)) __PYX_ERR(34, 297, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -139237,7 +141917,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_69setGAMGType(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGAMGType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGAMGType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 297, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGAMGType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -139256,13 +141936,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_68setGAMGType(struct PyPetscPCObj
   __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("setGAMGType", 0);
   __Pyx_INCREF(__pyx_v_gamgtype);
 
-  /* "PETSc/PC.pyx":290
+  /* "PETSc/PC.pyx":298
  * 
  *     def setGAMGType(self, gamgtype):
  *         cdef PetscPCGAMGType cval = NULL             # <<<<<<<<<<<<<<
@@ -139271,28 +141948,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_68setGAMGType(struct PyPetscPCObj
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":291
+  /* "PETSc/PC.pyx":299
  *     def setGAMGType(self, gamgtype):
  *         cdef PetscPCGAMGType cval = NULL
  *         gamgtype = str2bytes(gamgtype, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PCGAMGSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_gamgtype, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_gamgtype, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 299, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_gamgtype, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":292
+  /* "PETSc/PC.pyx":300
  *         cdef PetscPCGAMGType cval = NULL
  *         gamgtype = str2bytes(gamgtype, &cval)
  *         CHKERR( PCGAMGSetType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def setGAMGLevels(self, levels):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 300, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":289
+  /* "PETSc/PC.pyx":297
  *     # --- GAMG ---
  * 
  *     def setGAMGType(self, gamgtype):             # <<<<<<<<<<<<<<
@@ -139314,7 +141991,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_68setGAMGType(struct PyPetscPCObj
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":294
+/* "PETSc/PC.pyx":302
  *         CHKERR( PCGAMGSetType(self.pc, cval) )
  * 
  *     def setGAMGLevels(self, levels):             # <<<<<<<<<<<<<<
@@ -139327,9 +142004,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_71setGAMGLevels(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_2PC_70setGAMGLevels[] = "PC.setGAMGLevels(self, levels)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_71setGAMGLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_levels = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGAMGLevels (wrapper)", 0);
@@ -139351,7 +142025,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_71setGAMGLevels(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, "setGAMGLevels") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGAMGLevels") < 0)) __PYX_ERR(34, 302, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -139362,7 +142036,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_71setGAMGLevels(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGAMGLevels", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGAMGLevels", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 302, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGAMGLevels", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -139381,31 +142055,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_70setGAMGLevels(struct PyPetscPCO
   __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("setGAMGLevels", 0);
 
-  /* "PETSc/PC.pyx":295
+  /* "PETSc/PC.pyx":303
  * 
  *     def setGAMGLevels(self, levels):
  *         cdef PetscInt ival = asInt(levels)             # <<<<<<<<<<<<<<
  *         CHKERR( PCGAMGSetNlevels(self.pc, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 303, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":296
+  /* "PETSc/PC.pyx":304
  *     def setGAMGLevels(self, levels):
  *         cdef PetscInt ival = asInt(levels)
  *         CHKERR( PCGAMGSetNlevels(self.pc, ival) )             # <<<<<<<<<<<<<<
  * 
  *     def setGAMGSmooths(self, smooths):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetNlevels(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetNlevels(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 304, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":294
+  /* "PETSc/PC.pyx":302
  *         CHKERR( PCGAMGSetType(self.pc, cval) )
  * 
  *     def setGAMGLevels(self, levels):             # <<<<<<<<<<<<<<
@@ -139425,7 +142096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_70setGAMGLevels(struct PyPetscPCO
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":298
+/* "PETSc/PC.pyx":306
  *         CHKERR( PCGAMGSetNlevels(self.pc, ival) )
  * 
  *     def setGAMGSmooths(self, smooths):             # <<<<<<<<<<<<<<
@@ -139438,9 +142109,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_73setGAMGSmooths(PyObject *__pyx_
 static char __pyx_doc_8petsc4py_5PETSc_2PC_72setGAMGSmooths[] = "PC.setGAMGSmooths(self, smooths)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_73setGAMGSmooths(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_smooths = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGAMGSmooths (wrapper)", 0);
@@ -139462,7 +142130,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_73setGAMGSmooths(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, "setGAMGSmooths") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGAMGSmooths") < 0)) __PYX_ERR(34, 306, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -139473,7 +142141,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_73setGAMGSmooths(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGAMGSmooths", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGAMGSmooths", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 306, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGAMGSmooths", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -139492,31 +142160,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_72setGAMGSmooths(struct PyPetscPC
   __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("setGAMGSmooths", 0);
 
-  /* "PETSc/PC.pyx":299
+  /* "PETSc/PC.pyx":307
  * 
  *     def setGAMGSmooths(self, smooths):
  *         cdef PetscInt ival = asInt(smooths)             # <<<<<<<<<<<<<<
  *         CHKERR( PCGAMGSetNSmooths(self.pc, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_smooths); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_smooths); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 307, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":300
+  /* "PETSc/PC.pyx":308
  *     def setGAMGSmooths(self, smooths):
  *         cdef PetscInt ival = asInt(smooths)
  *         CHKERR( PCGAMGSetNSmooths(self.pc, ival) )             # <<<<<<<<<<<<<<
  * 
- *     # --- Factor ---
+ *     # --- Hypre ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetNSmooths(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetNSmooths(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 308, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":298
+  /* "PETSc/PC.pyx":306
  *         CHKERR( PCGAMGSetNlevels(self.pc, ival) )
  * 
  *     def setGAMGSmooths(self, smooths):             # <<<<<<<<<<<<<<
@@ -139536,7 +142201,798 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_72setGAMGSmooths(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":304
+/* "PETSc/PC.pyx":312
+ *     # --- Hypre ---
+ * 
+ *     def getHYPREType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCHYPREType cval = NULL
+ *         CHKERR( PCHYPREGetType(self.pc, &cval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_75getHYPREType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_74getHYPREType[] = "PC.getHYPREType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_75getHYPREType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getHYPREType (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getHYPREType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getHYPREType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_74getHYPREType(((struct PyPetscPCObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74getHYPREType(struct PyPetscPCObject *__pyx_v_self) {
+  const char* __pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getHYPREType", 0);
+
+  /* "PETSc/PC.pyx":313
+ * 
+ *     def getHYPREType(self):
+ *         cdef PetscPCHYPREType cval = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPREGetType(self.pc, &cval) )
+ *         return bytes2str(cval)
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/PC.pyx":314
+ *     def getHYPREType(self):
+ *         cdef PetscPCHYPREType cval = NULL
+ *         CHKERR( PCHYPREGetType(self.pc, &cval) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(cval)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPREGetType(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 314, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":315
+ *         cdef PetscPCHYPREType cval = NULL
+ *         CHKERR( PCHYPREGetType(self.pc, &cval) )
+ *         return bytes2str(cval)             # <<<<<<<<<<<<<<
+ * 
+ *     def setHYPREType(self, hypretype):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 315, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/PC.pyx":312
+ *     # --- Hypre ---
+ * 
+ *     def getHYPREType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCHYPREType cval = NULL
+ *         CHKERR( PCHYPREGetType(self.pc, &cval) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.getHYPREType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":317
+ *         return bytes2str(cval)
+ * 
+ *     def setHYPREType(self, hypretype):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCHYPREType cval = NULL
+ *         hypretype = str2bytes(hypretype, &cval)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_77setHYPREType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_76setHYPREType[] = "PC.setHYPREType(self, hypretype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_77setHYPREType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_hypretype = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setHYPREType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_hypretype,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_hypretype)) != 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, "setHYPREType") < 0)) __PYX_ERR(34, 317, __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_hypretype = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setHYPREType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 317, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPREType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_76setHYPREType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_hypretype);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76setHYPREType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_hypretype) {
+  const char* __pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setHYPREType", 0);
+  __Pyx_INCREF(__pyx_v_hypretype);
+
+  /* "PETSc/PC.pyx":318
+ * 
+ *     def setHYPREType(self, hypretype):
+ *         cdef PetscPCHYPREType cval = NULL             # <<<<<<<<<<<<<<
+ *         hypretype = str2bytes(hypretype, &cval)
+ *         CHKERR( PCHYPRESetType(self.pc, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/PC.pyx":319
+ *     def setHYPREType(self, hypretype):
+ *         cdef PetscPCHYPREType cval = NULL
+ *         hypretype = str2bytes(hypretype, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetType(self.pc, cval) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_hypretype, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 319, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_hypretype, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/PC.pyx":320
+ *         cdef PetscPCHYPREType cval = NULL
+ *         hypretype = str2bytes(hypretype, &cval)
+ *         CHKERR( PCHYPRESetType(self.pc, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setHYPREDiscreteCurl(self, Mat mat not None):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 320, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":317
+ *         return bytes2str(cval)
+ * 
+ *     def setHYPREType(self, hypretype):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCHYPREType cval = NULL
+ *         hypretype = str2bytes(hypretype, &cval)
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPREType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_hypretype);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":322
+ *         CHKERR( PCHYPRESetType(self.pc, cval) )
+ * 
+ *     def setHYPREDiscreteCurl(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setHYPREDiscreteCurl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_78setHYPREDiscreteCurl[] = "PC.setHYPREDiscreteCurl(self, Mat mat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setHYPREDiscreteCurl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setHYPREDiscreteCurl (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,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_mat)) != 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, "setHYPREDiscreteCurl") < 0)) __PYX_ERR(34, 322, __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_mat = ((struct PyPetscMatObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setHYPREDiscreteCurl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 322, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPREDiscreteCurl", __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, 0, "mat", 0))) __PYX_ERR(34, 322, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_78setHYPREDiscreteCurl(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mat);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setHYPREDiscreteCurl(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setHYPREDiscreteCurl", 0);
+
+  /* "PETSc/PC.pyx":323
+ * 
+ *     def setHYPREDiscreteCurl(self, Mat mat not None):
+ *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setHYPREDiscreteGradient(self, Mat mat not None):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetDiscreteCurl(__pyx_v_self->pc, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 323, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":322
+ *         CHKERR( PCHYPRESetType(self.pc, cval) )
+ * 
+ *     def setHYPREDiscreteCurl(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPREDiscreteCurl", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":325
+ *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
+ * 
+ *     def setHYPREDiscreteGradient(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setHYPREDiscreteGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_80setHYPREDiscreteGradient[] = "PC.setHYPREDiscreteGradient(self, Mat mat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setHYPREDiscreteGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setHYPREDiscreteGradient (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,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_mat)) != 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, "setHYPREDiscreteGradient") < 0)) __PYX_ERR(34, 325, __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_mat = ((struct PyPetscMatObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setHYPREDiscreteGradient", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 325, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPREDiscreteGradient", __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, 0, "mat", 0))) __PYX_ERR(34, 325, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_80setHYPREDiscreteGradient(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mat);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setHYPREDiscreteGradient(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setHYPREDiscreteGradient", 0);
+
+  /* "PETSc/PC.pyx":326
+ * 
+ *     def setHYPREDiscreteGradient(self, Mat mat not None):
+ *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetDiscreteGradient(__pyx_v_self->pc, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 326, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":325
+ *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
+ * 
+ *     def setHYPREDiscreteGradient(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPREDiscreteGradient", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":328
+ *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
+ * 
+ *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setHYPRESetAlphaPoissonMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_82setHYPRESetAlphaPoissonMatrix[] = "PC.setHYPRESetAlphaPoissonMatrix(self, Mat mat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setHYPRESetAlphaPoissonMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setHYPRESetAlphaPoissonMatrix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,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_mat)) != 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, "setHYPRESetAlphaPoissonMatrix") < 0)) __PYX_ERR(34, 328, __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_mat = ((struct PyPetscMatObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setHYPRESetAlphaPoissonMatrix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 328, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPRESetAlphaPoissonMatrix", __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, 0, "mat", 0))) __PYX_ERR(34, 328, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_82setHYPRESetAlphaPoissonMatrix(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mat);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setHYPRESetAlphaPoissonMatrix(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setHYPRESetAlphaPoissonMatrix", 0);
+
+  /* "PETSc/PC.pyx":329
+ * 
+ *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):
+ *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetAlphaPoissonMatrix(__pyx_v_self->pc, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 329, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":328
+ *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
+ * 
+ *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPRESetAlphaPoissonMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":331
+ *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
+ * 
+ *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMat pmat = NULL
+ *         if mat is not None: pmat = mat.mat
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setHYPRESetBetaPoissonMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix[] = "PC.setHYPRESetBetaPoissonMatrix(self, Mat mat=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setHYPRESetBetaPoissonMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setHYPRESetBetaPoissonMatrix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,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);
+      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_mat);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHYPRESetBetaPoissonMatrix") < 0)) __PYX_ERR(34, 331, __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_mat = ((struct PyPetscMatObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setHYPRESetBetaPoissonMatrix", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 331, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPRESetBetaPoissonMatrix", __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_ERR(34, 331, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mat);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix(struct PyPetscPCObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
+  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;
+  __Pyx_RefNannySetupContext("setHYPRESetBetaPoissonMatrix", 0);
+
+  /* "PETSc/PC.pyx":332
+ * 
+ *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):
+ *         cdef PetscMat pmat = NULL             # <<<<<<<<<<<<<<
+ *         if mat is not None: pmat = mat.mat
+ *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )
+ */
+  __pyx_v_pmat = NULL;
+
+  /* "PETSc/PC.pyx":333
+ *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):
+ *         cdef PetscMat pmat = NULL
+ *         if mat is not None: pmat = mat.mat             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )
+ * 
+ */
+  __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_pmat = __pyx_t_3;
+  }
+
+  /* "PETSc/PC.pyx":334
+ *         cdef PetscMat pmat = NULL
+ *         if mat is not None: pmat = mat.mat
+ *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetBetaPoissonMatrix(__pyx_v_self->pc, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 334, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":331
+ *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
+ * 
+ *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMat pmat = NULL
+ *         if mat is not None: pmat = mat.mat
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPRESetBetaPoissonMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":336
+ *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )
+ * 
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,             # <<<<<<<<<<<<<<
+ *                                        Vec zoz not None, Vec zzo=None):
+ *         cdef PetscVec zzo_vec = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_87setHYPRESetEdgeConstantVectors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_86setHYPRESetEdgeConstantVectors[] = "PC.setHYPRESetEdgeConstantVectors(self, Vec ozz, Vec zoz, Vec zzo=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_87setHYPRESetEdgeConstantVectors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_ozz = 0;
+  struct PyPetscVecObject *__pyx_v_zoz = 0;
+  struct PyPetscVecObject *__pyx_v_zzo = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setHYPRESetEdgeConstantVectors (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ozz,&__pyx_n_s_zoz,&__pyx_n_s_zzo,0};
+    PyObject* values[3] = {0,0,0};
+
+    /* "PETSc/PC.pyx":337
+ * 
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,
+ *                                        Vec zoz not None, Vec zzo=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscVec zzo_vec = NULL
+ *         if zzo is not None: zzo_vec = zzo.vec
+ */
+    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_ozz)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zoz)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setHYPRESetEdgeConstantVectors", 0, 2, 3, 1); __PYX_ERR(34, 336, __pyx_L3_error)
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zzo);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHYPRESetEdgeConstantVectors") < 0)) __PYX_ERR(34, 336, __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_ozz = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_zoz = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_zzo = ((struct PyPetscVecObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setHYPRESetEdgeConstantVectors", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 336, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPRESetEdgeConstantVectors", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ozz), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "ozz", 0))) __PYX_ERR(34, 336, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_zoz), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "zoz", 0))) __PYX_ERR(34, 337, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_zzo), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "zzo", 0))) __PYX_ERR(34, 337, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_86setHYPRESetEdgeConstantVectors(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ozz, __pyx_v_zoz, __pyx_v_zzo);
+
+  /* "PETSc/PC.pyx":336
+ *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )
+ * 
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,             # <<<<<<<<<<<<<<
+ *                                        Vec zoz not None, Vec zzo=None):
+ *         cdef PetscVec zzo_vec = NULL
+ */
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86setHYPRESetEdgeConstantVectors(struct PyPetscPCObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_ozz, struct PyPetscVecObject *__pyx_v_zoz, struct PyPetscVecObject *__pyx_v_zzo) {
+  Vec __pyx_v_zzo_vec;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  Vec __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setHYPRESetEdgeConstantVectors", 0);
+
+  /* "PETSc/PC.pyx":338
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,
+ *                                        Vec zoz not None, Vec zzo=None):
+ *         cdef PetscVec zzo_vec = NULL             # <<<<<<<<<<<<<<
+ *         if zzo is not None: zzo_vec = zzo.vec
+ *         CHKERR( PCHYPRESetEdgeConstantVectors(self.pc, ozz.vec, zoz.vec,
+ */
+  __pyx_v_zzo_vec = NULL;
+
+  /* "PETSc/PC.pyx":339
+ *                                        Vec zoz not None, Vec zzo=None):
+ *         cdef PetscVec zzo_vec = NULL
+ *         if zzo is not None: zzo_vec = zzo.vec             # <<<<<<<<<<<<<<
+ *         CHKERR( PCHYPRESetEdgeConstantVectors(self.pc, ozz.vec, zoz.vec,
+ *                                               zzo_vec) )
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_zzo) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_zzo->vec;
+    __pyx_v_zzo_vec = __pyx_t_3;
+  }
+
+  /* "PETSc/PC.pyx":340
+ *         cdef PetscVec zzo_vec = NULL
+ *         if zzo is not None: zzo_vec = zzo.vec
+ *         CHKERR( PCHYPRESetEdgeConstantVectors(self.pc, ozz.vec, zoz.vec,             # <<<<<<<<<<<<<<
+ *                                               zzo_vec) )
+ * 
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetEdgeConstantVectors(__pyx_v_self->pc, __pyx_v_ozz->vec, __pyx_v_zoz->vec, __pyx_v_zzo_vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 340, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":336
+ *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )
+ * 
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,             # <<<<<<<<<<<<<<
+ *                                        Vec zoz not None, Vec zzo=None):
+ *         cdef PetscVec zzo_vec = NULL
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPRESetEdgeConstantVectors", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":345
  *     # --- Factor ---
  * 
  *     def setFactorSolverPackage(self, solver):             # <<<<<<<<<<<<<<
@@ -139545,13 +143001,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_72setGAMGSmooths(struct PyPetscPC
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_75setFactorSolverPackage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_74setFactorSolverPackage[] = "PC.setFactorSolverPackage(self, solver)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_75setFactorSolverPackage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFactorSolverPackage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_88setFactorSolverPackage[] = "PC.setFactorSolverPackage(self, solver)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFactorSolverPackage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_solver = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFactorSolverPackage (wrapper)", 0);
@@ -139573,7 +143026,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_75setFactorSolverPackage(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorSolverPackage") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorSolverPackage") < 0)) __PYX_ERR(34, 345, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -139584,32 +143037,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_75setFactorSolverPackage(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorSolverPackage", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFactorSolverPackage", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 345, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorSolverPackage", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_74setFactorSolverPackage(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_solver);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_88setFactorSolverPackage(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_solver);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74setFactorSolverPackage(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_solver) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFactorSolverPackage(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_solver) {
   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("setFactorSolverPackage", 0);
   __Pyx_INCREF(__pyx_v_solver);
 
-  /* "PETSc/PC.pyx":305
+  /* "PETSc/PC.pyx":346
  * 
  *     def setFactorSolverPackage(self, solver):
  *         cdef PetscMatSolverPackage cval = NULL             # <<<<<<<<<<<<<<
@@ -139618,28 +143068,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74setFactorSolverPackage(struct P
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":306
+  /* "PETSc/PC.pyx":347
  *     def setFactorSolverPackage(self, solver):
  *         cdef PetscMatSolverPackage cval = NULL
  *         solver = str2bytes(solver, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PCFactorSetMatSolverPackage(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_solver, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_solver, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 347, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_solver, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":307
+  /* "PETSc/PC.pyx":348
  *         cdef PetscMatSolverPackage cval = NULL
  *         solver = str2bytes(solver, &cval)
  *         CHKERR( PCFactorSetMatSolverPackage(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getFactorSolverPackage(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetMatSolverPackage(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetMatSolverPackage(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 348, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":304
+  /* "PETSc/PC.pyx":345
  *     # --- Factor ---
  * 
  *     def setFactorSolverPackage(self, solver):             # <<<<<<<<<<<<<<
@@ -139661,7 +143111,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74setFactorSolverPackage(struct P
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":309
+/* "PETSc/PC.pyx":350
  *         CHKERR( PCFactorSetMatSolverPackage(self.pc, cval) )
  * 
  *     def getFactorSolverPackage(self):             # <<<<<<<<<<<<<<
@@ -139670,34 +143120,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74setFactorSolverPackage(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_77getFactorSolverPackage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_76getFactorSolverPackage[] = "PC.getFactorSolverPackage(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_77getFactorSolverPackage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_91getFactorSolverPackage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_90getFactorSolverPackage[] = "PC.getFactorSolverPackage(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_91getFactorSolverPackage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFactorSolverPackage (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getFactorSolverPackage", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFactorSolverPackage", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_76getFactorSolverPackage(((struct PyPetscPCObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_90getFactorSolverPackage(((struct PyPetscPCObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76getFactorSolverPackage(struct PyPetscPCObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90getFactorSolverPackage(struct PyPetscPCObject *__pyx_v_self) {
   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("getFactorSolverPackage", 0);
 
-  /* "PETSc/PC.pyx":310
+  /* "PETSc/PC.pyx":351
  * 
  *     def getFactorSolverPackage(self):
  *         cdef PetscMatSolverPackage cval = NULL             # <<<<<<<<<<<<<<
@@ -139706,16 +143153,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76getFactorSolverPackage(struct P
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":311
+  /* "PETSc/PC.pyx":352
  *     def getFactorSolverPackage(self):
  *         cdef PetscMatSolverPackage cval = NULL
  *         CHKERR( PCFactorGetMatSolverPackage(self.pc, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorGetMatSolverPackage(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorGetMatSolverPackage(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 352, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":312
+  /* "PETSc/PC.pyx":353
  *         cdef PetscMatSolverPackage cval = NULL
  *         CHKERR( PCFactorGetMatSolverPackage(self.pc, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -139723,13 +143170,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76getFactorSolverPackage(struct P
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 353, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":309
+  /* "PETSc/PC.pyx":350
  *         CHKERR( PCFactorSetMatSolverPackage(self.pc, cval) )
  * 
  *     def getFactorSolverPackage(self):             # <<<<<<<<<<<<<<
@@ -139748,7 +143195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76getFactorSolverPackage(struct P
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":314
+/* "PETSc/PC.pyx":355
  *         return bytes2str(cval)
  * 
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):             # <<<<<<<<<<<<<<
@@ -139757,15 +143204,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76getFactorSolverPackage(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setFactorOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_78setFactorOrdering[] = "PC.setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setFactorOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFactorOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_92setFactorOrdering[] = "PC.setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFactorOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ord_type = 0;
   PyObject *__pyx_v_nzdiag = 0;
   PyObject *__pyx_v_reuse = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFactorOrdering (wrapper)", 0);
@@ -139804,7 +143248,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setFactorOrdering(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorOrdering") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorOrdering") < 0)) __PYX_ERR(34, 355, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -139821,20 +143265,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setFactorOrdering(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorOrdering", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFactorOrdering", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 355, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorOrdering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ord_type, __pyx_v_nzdiag, __pyx_v_reuse);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ord_type, __pyx_v_nzdiag, __pyx_v_reuse);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ord_type, PyObject *__pyx_v_nzdiag, PyObject *__pyx_v_reuse) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ord_type, PyObject *__pyx_v_nzdiag, PyObject *__pyx_v_reuse) {
   const char* __pyx_v_cval;
   PetscReal __pyx_v_rval;
   PetscBool __pyx_v_bval;
@@ -139846,13 +143290,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
   int __pyx_t_4;
   PetscReal __pyx_t_5;
   PetscBool __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFactorOrdering", 0);
   __Pyx_INCREF(__pyx_v_ord_type);
 
-  /* "PETSc/PC.pyx":315
+  /* "PETSc/PC.pyx":356
  * 
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):
  *         cdef PetscMatOrderingType cval = NULL             # <<<<<<<<<<<<<<
@@ -139861,7 +143302,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":316
+  /* "PETSc/PC.pyx":357
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):
  *         cdef PetscMatOrderingType cval = NULL
  *         if ord_type is not None:             # <<<<<<<<<<<<<<
@@ -139872,31 +143313,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":317
+    /* "PETSc/PC.pyx":358
  *         cdef PetscMatOrderingType cval = NULL
  *         if ord_type is not None:
  *             ord_type = str2bytes(ord_type, &cval)             # <<<<<<<<<<<<<<
  *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )
  *         cdef PetscReal rval = 0
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ord_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ord_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 358, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_ord_type, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/PC.pyx":318
+    /* "PETSc/PC.pyx":359
  *         if ord_type is not None:
  *             ord_type = str2bytes(ord_type, &cval)
  *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 0
  *         if nzdiag is not None:
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetMatOrderingType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetMatOrderingType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 359, __pyx_L1_error)
+
+    /* "PETSc/PC.pyx":357
+ *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):
+ *         cdef PetscMatOrderingType cval = NULL
+ *         if ord_type is not None:             # <<<<<<<<<<<<<<
+ *             ord_type = str2bytes(ord_type, &cval)
+ *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":319
+  /* "PETSc/PC.pyx":360
  *             ord_type = str2bytes(ord_type, &cval)
  *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -139905,7 +143352,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/PC.pyx":320
+  /* "PETSc/PC.pyx":361
  *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )
  *         cdef PetscReal rval = 0
  *         if nzdiag is not None:             # <<<<<<<<<<<<<<
@@ -139916,29 +143363,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":321
+    /* "PETSc/PC.pyx":362
  *         cdef PetscReal rval = 0
  *         if nzdiag is not None:
  *             rval = asReal(nzdiag)             # <<<<<<<<<<<<<<
  *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_nzdiag); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_nzdiag); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) __PYX_ERR(34, 362, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_5;
 
-    /* "PETSc/PC.pyx":322
+    /* "PETSc/PC.pyx":363
  *         if nzdiag is not None:
  *             rval = asReal(nzdiag)
  *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval = PETSC_FALSE
  *         if reuse is not None:
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorReorderForNonzeroDiagonal(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorReorderForNonzeroDiagonal(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 363, __pyx_L1_error)
+
+    /* "PETSc/PC.pyx":361
+ *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )
+ *         cdef PetscReal rval = 0
+ *         if nzdiag is not None:             # <<<<<<<<<<<<<<
+ *             rval = asReal(nzdiag)
+ *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/PC.pyx":323
+  /* "PETSc/PC.pyx":364
  *             rval = asReal(nzdiag)
  *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -139947,7 +143400,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
  */
   __pyx_v_bval = PETSC_FALSE;
 
-  /* "PETSc/PC.pyx":324
+  /* "PETSc/PC.pyx":365
  *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE
  *         if reuse is not None:             # <<<<<<<<<<<<<<
@@ -139958,14 +143411,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":325
+    /* "PETSc/PC.pyx":366
  *         cdef PetscBool bval = PETSC_FALSE
  *         if reuse is not None:
  *             bval = PETSC_TRUE if reuse else PETSC_FALSE             # <<<<<<<<<<<<<<
  *             CHKERR( PCFactorSetReuseOrdering(self.pc, bval) )
  * 
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_reuse); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_reuse); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(34, 366, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_t_6 = PETSC_TRUE;
     } else {
@@ -139973,19 +143426,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
     }
     __pyx_v_bval = __pyx_t_6;
 
-    /* "PETSc/PC.pyx":326
+    /* "PETSc/PC.pyx":367
  *         if reuse is not None:
  *             bval = PETSC_TRUE if reuse else PETSC_FALSE
  *             CHKERR( PCFactorSetReuseOrdering(self.pc, bval) )             # <<<<<<<<<<<<<<
  * 
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetReuseOrdering(__pyx_v_self->pc, __pyx_v_bval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetReuseOrdering(__pyx_v_self->pc, __pyx_v_bval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 367, __pyx_L1_error)
+
+    /* "PETSc/PC.pyx":365
+ *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )
+ *         cdef PetscBool bval = PETSC_FALSE
+ *         if reuse is not None:             # <<<<<<<<<<<<<<
+ *             bval = PETSC_TRUE if reuse else PETSC_FALSE
+ *             CHKERR( PCFactorSetReuseOrdering(self.pc, bval) )
+ */
   }
-  __pyx_L5:;
 
-  /* "PETSc/PC.pyx":314
+  /* "PETSc/PC.pyx":355
  *         return bytes2str(cval)
  * 
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):             # <<<<<<<<<<<<<<
@@ -140007,7 +143466,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":328
+/* "PETSc/PC.pyx":369
  *             CHKERR( PCFactorSetReuseOrdering(self.pc, bval) )
  * 
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):             # <<<<<<<<<<<<<<
@@ -140016,14 +143475,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setFactorOrdering(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setFactorPivot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_80setFactorPivot[] = "PC.setFactorPivot(self, zeropivot=None, inblocks=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setFactorPivot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_95setFactorPivot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_94setFactorPivot[] = "PC.setFactorPivot(self, zeropivot=None, inblocks=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_95setFactorPivot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_zeropivot = 0;
   PyObject *__pyx_v_inblocks = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFactorPivot (wrapper)", 0);
@@ -140055,7 +143511,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setFactorPivot(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorPivot") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorPivot") < 0)) __PYX_ERR(34, 369, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -140070,23 +143526,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setFactorPivot(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorPivot", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFactorPivot", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 369, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorPivot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_80setFactorPivot(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_zeropivot, __pyx_v_inblocks);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_zeropivot, __pyx_v_inblocks);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setFactorPivot(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_zeropivot, PyObject *__pyx_v_inblocks) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_zeropivot, PyObject *__pyx_v_inblocks) {
   PetscReal __pyx_v_rval;
   PetscBool __pyx_v_bval;
-  CYTHON_UNUSED PetscBool __pyx_v_bval2;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -140094,12 +143549,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setFactorPivot(struct PyPetscPC
   PetscReal __pyx_t_3;
   int __pyx_t_4;
   PetscBool __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFactorPivot", 0);
 
-  /* "PETSc/PC.pyx":329
+  /* "PETSc/PC.pyx":370
  * 
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -140108,7 +143560,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setFactorPivot(struct PyPetscPC
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/PC.pyx":330
+  /* "PETSc/PC.pyx":371
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):
  *         cdef PetscReal rval = 0
  *         if zeropivot is not None:             # <<<<<<<<<<<<<<
@@ -140119,76 +143571,88 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setFactorPivot(struct PyPetscPC
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":331
+    /* "PETSc/PC.pyx":372
  *         cdef PetscReal rval = 0
  *         if zeropivot is not None:
  *             rval = asReal(zeropivot)             # <<<<<<<<<<<<<<
  *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zeropivot); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zeropivot); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(34, 372, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_3;
 
-    /* "PETSc/PC.pyx":332
+    /* "PETSc/PC.pyx":373
  *         if zeropivot is not None:
  *             rval = asReal(zeropivot)
  *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval = PETSC_FALSE
  *         if inblocks is not None:
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetZeroPivot(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetZeroPivot(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 373, __pyx_L1_error)
+
+    /* "PETSc/PC.pyx":371
+ *     def setFactorPivot(self, zeropivot=None, inblocks=None):
+ *         cdef PetscReal rval = 0
+ *         if zeropivot is not None:             # <<<<<<<<<<<<<<
+ *             rval = asReal(zeropivot)
+ *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":333
+  /* "PETSc/PC.pyx":374
  *             rval = asReal(zeropivot)
  *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         if inblocks is not None:
- *             bval2 = PETSC_TRUE if inblocks else PETSC_FALSE
+ *             bval = PETSC_TRUE if inblocks else PETSC_FALSE
  */
   __pyx_v_bval = PETSC_FALSE;
 
-  /* "PETSc/PC.pyx":334
+  /* "PETSc/PC.pyx":375
  *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE
  *         if inblocks is not None:             # <<<<<<<<<<<<<<
- *             bval2 = PETSC_TRUE if inblocks else PETSC_FALSE
+ *             bval = PETSC_TRUE if inblocks else PETSC_FALSE
  *             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )
  */
   __pyx_t_2 = (__pyx_v_inblocks != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":335
+    /* "PETSc/PC.pyx":376
  *         cdef PetscBool bval = PETSC_FALSE
  *         if inblocks is not None:
- *             bval2 = PETSC_TRUE if inblocks else PETSC_FALSE             # <<<<<<<<<<<<<<
+ *             bval = PETSC_TRUE if inblocks else PETSC_FALSE             # <<<<<<<<<<<<<<
  *             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )
  * 
  */
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_inblocks); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_inblocks); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(34, 376, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_t_5 = PETSC_TRUE;
     } else {
       __pyx_t_5 = PETSC_FALSE;
     }
-    __pyx_v_bval2 = __pyx_t_5;
+    __pyx_v_bval = __pyx_t_5;
 
-    /* "PETSc/PC.pyx":336
+    /* "PETSc/PC.pyx":377
  *         if inblocks is not None:
- *             bval2 = PETSC_TRUE if inblocks else PETSC_FALSE
+ *             bval = PETSC_TRUE if inblocks else PETSC_FALSE
  *             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )             # <<<<<<<<<<<<<<
  * 
  *     def setFactorShift(self, shift_type=None, amount=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetPivotInBlocks(__pyx_v_self->pc, __pyx_v_bval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetPivotInBlocks(__pyx_v_self->pc, __pyx_v_bval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 377, __pyx_L1_error)
+
+    /* "PETSc/PC.pyx":375
+ *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
+ *         cdef PetscBool bval = PETSC_FALSE
+ *         if inblocks is not None:             # <<<<<<<<<<<<<<
+ *             bval = PETSC_TRUE if inblocks else PETSC_FALSE
+ *             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/PC.pyx":328
+  /* "PETSc/PC.pyx":369
  *             CHKERR( PCFactorSetReuseOrdering(self.pc, bval) )
  * 
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):             # <<<<<<<<<<<<<<
@@ -140208,7 +143672,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setFactorPivot(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":338
+/* "PETSc/PC.pyx":379
  *             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )
  * 
  *     def setFactorShift(self, shift_type=None, amount=None):             # <<<<<<<<<<<<<<
@@ -140217,14 +143681,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setFactorPivot(struct PyPetscPC
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setFactorShift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_82setFactorShift[] = "PC.setFactorShift(self, shift_type=None, amount=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setFactorShift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFactorShift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_96setFactorShift[] = "PC.setFactorShift(self, shift_type=None, amount=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFactorShift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_shift_type = 0;
   PyObject *__pyx_v_amount = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFactorShift (wrapper)", 0);
@@ -140256,7 +143717,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setFactorShift(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorShift") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorShift") < 0)) __PYX_ERR(34, 379, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -140271,20 +143732,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setFactorShift(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorShift", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFactorShift", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 379, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorShift", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_shift_type, __pyx_v_amount);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_shift_type, __pyx_v_amount);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_shift_type, PyObject *__pyx_v_amount) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_shift_type, PyObject *__pyx_v_amount) {
   MatFactorShiftType __pyx_v_cval;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -140294,12 +143755,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPC
   MatFactorShiftType __pyx_t_3;
   int __pyx_t_4;
   PetscReal __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFactorShift", 0);
 
-  /* "PETSc/PC.pyx":339
+  /* "PETSc/PC.pyx":380
  * 
  *     def setFactorShift(self, shift_type=None, amount=None):
  *         cdef PetscMatFactorShiftType cval = MAT_SHIFT_NONE             # <<<<<<<<<<<<<<
@@ -140308,7 +143766,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPC
  */
   __pyx_v_cval = MAT_SHIFT_NONE;
 
-  /* "PETSc/PC.pyx":340
+  /* "PETSc/PC.pyx":381
  *     def setFactorShift(self, shift_type=None, amount=None):
  *         cdef PetscMatFactorShiftType cval = MAT_SHIFT_NONE
  *         if shift_type is not None:             # <<<<<<<<<<<<<<
@@ -140319,29 +143777,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPC
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":341
+    /* "PETSc/PC.pyx":382
  *         cdef PetscMatFactorShiftType cval = MAT_SHIFT_NONE
  *         if shift_type is not None:
  *             cval = matfactorshifttype(shift_type)             # <<<<<<<<<<<<<<
  *             CHKERR( PCFactorSetShiftType(self.pc, cval) )
  *         cdef PetscReal rval = 0
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_matfactorshifttype(__pyx_v_shift_type); if (unlikely(__pyx_t_3 == ((MatFactorShiftType)-1))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_matfactorshifttype(__pyx_v_shift_type); if (unlikely(__pyx_t_3 == ((MatFactorShiftType)-1L))) __PYX_ERR(34, 382, __pyx_L1_error)
     __pyx_v_cval = __pyx_t_3;
 
-    /* "PETSc/PC.pyx":342
+    /* "PETSc/PC.pyx":383
  *         if shift_type is not None:
  *             cval = matfactorshifttype(shift_type)
  *             CHKERR( PCFactorSetShiftType(self.pc, cval) )             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 0
  *         if amount is not None:
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetShiftType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetShiftType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 383, __pyx_L1_error)
+
+    /* "PETSc/PC.pyx":381
+ *     def setFactorShift(self, shift_type=None, amount=None):
+ *         cdef PetscMatFactorShiftType cval = MAT_SHIFT_NONE
+ *         if shift_type is not None:             # <<<<<<<<<<<<<<
+ *             cval = matfactorshifttype(shift_type)
+ *             CHKERR( PCFactorSetShiftType(self.pc, cval) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":343
+  /* "PETSc/PC.pyx":384
  *             cval = matfactorshifttype(shift_type)
  *             CHKERR( PCFactorSetShiftType(self.pc, cval) )
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -140350,7 +143814,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPC
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/PC.pyx":344
+  /* "PETSc/PC.pyx":385
  *             CHKERR( PCFactorSetShiftType(self.pc, cval) )
  *         cdef PetscReal rval = 0
  *         if amount is not None:             # <<<<<<<<<<<<<<
@@ -140361,29 +143825,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPC
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":345
+    /* "PETSc/PC.pyx":386
  *         cdef PetscReal rval = 0
  *         if amount is not None:
  *             rval = asReal(amount)             # <<<<<<<<<<<<<<
  *             CHKERR( PCFactorSetShiftAmount(self.pc, rval) )
  * 
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_amount); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_amount); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) __PYX_ERR(34, 386, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_5;
 
-    /* "PETSc/PC.pyx":346
+    /* "PETSc/PC.pyx":387
  *         if amount is not None:
  *             rval = asReal(amount)
  *             CHKERR( PCFactorSetShiftAmount(self.pc, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def setFactorLevels(self, levels):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetShiftAmount(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetShiftAmount(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(34, 387, __pyx_L1_error)
+
+    /* "PETSc/PC.pyx":385
+ *             CHKERR( PCFactorSetShiftType(self.pc, cval) )
+ *         cdef PetscReal rval = 0
+ *         if amount is not None:             # <<<<<<<<<<<<<<
+ *             rval = asReal(amount)
+ *             CHKERR( PCFactorSetShiftAmount(self.pc, rval) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/PC.pyx":338
+  /* "PETSc/PC.pyx":379
  *             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )
  * 
  *     def setFactorShift(self, shift_type=None, amount=None):             # <<<<<<<<<<<<<<
@@ -140403,7 +143873,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":348
+/* "PETSc/PC.pyx":389
  *             CHKERR( PCFactorSetShiftAmount(self.pc, rval) )
  * 
  *     def setFactorLevels(self, levels):             # <<<<<<<<<<<<<<
@@ -140412,13 +143882,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setFactorShift(struct PyPetscPC
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setFactorLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_84setFactorLevels[] = "PC.setFactorLevels(self, levels)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setFactorLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFactorLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_98setFactorLevels[] = "PC.setFactorLevels(self, levels)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFactorLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_levels = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFactorLevels (wrapper)", 0);
@@ -140440,7 +143907,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setFactorLevels(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, "setFactorLevels") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorLevels") < 0)) __PYX_ERR(34, 389, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -140451,50 +143918,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setFactorLevels(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorLevels", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFactorLevels", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 389, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorLevels", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_84setFactorLevels(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_levels);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_98setFactorLevels(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_levels);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setFactorLevels(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_levels) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFactorLevels(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_levels) {
   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("setFactorLevels", 0);
 
-  /* "PETSc/PC.pyx":349
+  /* "PETSc/PC.pyx":390
  * 
  *     def setFactorLevels(self, levels):
  *         cdef PetscInt ival = asInt(levels)             # <<<<<<<<<<<<<<
  *         CHKERR( PCFactorSetLevels(self.pc, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 390, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":350
+  /* "PETSc/PC.pyx":391
  *     def setFactorLevels(self, levels):
  *         cdef PetscInt ival = asInt(levels)
  *         CHKERR( PCFactorSetLevels(self.pc, ival) )             # <<<<<<<<<<<<<<
  * 
  *     def getFactorMatrix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetLevels(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetLevels(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 391, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":348
+  /* "PETSc/PC.pyx":389
  *             CHKERR( PCFactorSetShiftAmount(self.pc, rval) )
  * 
  *     def setFactorLevels(self, levels):             # <<<<<<<<<<<<<<
@@ -140514,7 +143978,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setFactorLevels(struct PyPetscP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":352
+/* "PETSc/PC.pyx":393
  *         CHKERR( PCFactorSetLevels(self.pc, ival) )
  * 
  *     def getFactorMatrix(self):             # <<<<<<<<<<<<<<
@@ -140523,55 +143987,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setFactorLevels(struct PyPetscP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_87getFactorMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_86getFactorMatrix[] = "PC.getFactorMatrix(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_87getFactorMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_101getFactorMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_100getFactorMatrix[] = "PC.getFactorMatrix(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_101getFactorMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFactorMatrix (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getFactorMatrix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFactorMatrix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_86getFactorMatrix(((struct PyPetscPCObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_100getFactorMatrix(((struct PyPetscPCObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86getFactorMatrix(struct PyPetscPCObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100getFactorMatrix(struct PyPetscPCObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_mat = 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("getFactorMatrix", 0);
 
-  /* "PETSc/PC.pyx":353
+  /* "PETSc/PC.pyx":394
  * 
  *     def getFactorMatrix(self):
  *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( PCFactorGetMatrix(self.pc, &mat.mat) )
  *         PetscINCREF(mat.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[34]; __pyx_lineno = 353; __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(34, 394, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":354
+  /* "PETSc/PC.pyx":395
  *     def getFactorMatrix(self):
  *         cdef Mat mat = Mat()
  *         CHKERR( PCFactorGetMatrix(self.pc, &mat.mat) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(mat.obj)
  *         return mat
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorGetMatrix(__pyx_v_self->pc, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorGetMatrix(__pyx_v_self->pc, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 395, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":355
+  /* "PETSc/PC.pyx":396
  *         cdef Mat mat = Mat()
  *         CHKERR( PCFactorGetMatrix(self.pc, &mat.mat) )
  *         PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -140580,7 +144041,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86getFactorMatrix(struct PyPetscP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":356
+  /* "PETSc/PC.pyx":397
  *         CHKERR( PCFactorGetMatrix(self.pc, &mat.mat) )
  *         PetscINCREF(mat.obj)
  *         return mat             # <<<<<<<<<<<<<<
@@ -140592,7 +144053,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86getFactorMatrix(struct PyPetscP
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":352
+  /* "PETSc/PC.pyx":393
  *         CHKERR( PCFactorSetLevels(self.pc, ival) )
  * 
  *     def getFactorMatrix(self):             # <<<<<<<<<<<<<<
@@ -140612,7 +144073,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86getFactorMatrix(struct PyPetscP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":360
+/* "PETSc/PC.pyx":401
  *    # --- FieldSplit ---
  * 
  *     def setFieldSplitType(self, ctype):             # <<<<<<<<<<<<<<
@@ -140621,13 +144082,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86getFactorMatrix(struct PyPetscP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFieldSplitType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_88setFieldSplitType[] = "PC.setFieldSplitType(self, ctype)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFieldSplitType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setFieldSplitType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_102setFieldSplitType[] = "PC.setFieldSplitType(self, ctype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setFieldSplitType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ctype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldSplitType (wrapper)", 0);
@@ -140649,7 +144107,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFieldSplitType(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, "setFieldSplitType") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitType") < 0)) __PYX_ERR(34, 401, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -140660,50 +144118,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFieldSplitType(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldSplitType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldSplitType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 401, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFieldSplitType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_88setFieldSplitType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ctype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_102setFieldSplitType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ctype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFieldSplitType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_102setFieldSplitType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype) {
   PCCompositeType __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PCCompositeType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFieldSplitType", 0);
 
-  /* "PETSc/PC.pyx":361
+  /* "PETSc/PC.pyx":402
  * 
  *     def setFieldSplitType(self, ctype):
  *         cdef PetscPCCompositeType cval = ctype             # <<<<<<<<<<<<<<
  *         CHKERR( PCFieldSplitSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCCompositeType)PyInt_AsLong(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PCCompositeType)__Pyx_PyInt_As_PCCompositeType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 402, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":362
+  /* "PETSc/PC.pyx":403
  *     def setFieldSplitType(self, ctype):
  *         cdef PetscPCCompositeType cval = ctype
  *         CHKERR( PCFieldSplitSetType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def setFieldSplitIS(self, *fields):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 403, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":360
+  /* "PETSc/PC.pyx":401
  *    # --- FieldSplit ---
  * 
  *     def setFieldSplitType(self, ctype):             # <<<<<<<<<<<<<<
@@ -140723,7 +144178,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFieldSplitType(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":364
+/* "PETSc/PC.pyx":405
  *         CHKERR( PCFieldSplitSetType(self.pc, cval) )
  * 
  *     def setFieldSplitIS(self, *fields):             # <<<<<<<<<<<<<<
@@ -140732,9 +144187,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFieldSplitType(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_91setFieldSplitIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_90setFieldSplitIS[] = "PC.setFieldSplitIS(self, *fields)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_91setFieldSplitIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_105setFieldSplitIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_104setFieldSplitIS[] = "PC.setFieldSplitIS(self, *fields)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_105setFieldSplitIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_fields = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -140742,7 +144197,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_91setFieldSplitIS(PyObject *__pyx
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFieldSplitIS", 0))) return NULL;
   __Pyx_INCREF(__pyx_args);
   __pyx_v_fields = __pyx_args;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_fields);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_fields);
 
   /* function exit code */
   __Pyx_XDECREF(__pyx_v_fields);
@@ -140750,7 +144205,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_91setFieldSplitIS(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_fields) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_fields) {
   PyObject *__pyx_v_name = 0;
   struct PyPetscISObject *__pyx_v_field = 0;
   const char *__pyx_v_cname;
@@ -140764,12 +144219,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
   PyObject *__pyx_t_6 = NULL;
   PyObject *(*__pyx_t_7)(PyObject *);
   int __pyx_t_8;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFieldSplitIS", 0);
 
-  /* "PETSc/PC.pyx":365
+  /* "PETSc/PC.pyx":406
  * 
  *     def setFieldSplitIS(self, *fields):
  *         cdef object name = None             # <<<<<<<<<<<<<<
@@ -140779,7 +144231,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
   __Pyx_INCREF(Py_None);
   __pyx_v_name = Py_None;
 
-  /* "PETSc/PC.pyx":366
+  /* "PETSc/PC.pyx":407
  *     def setFieldSplitIS(self, *fields):
  *         cdef object name = None
  *         cdef IS field = None             # <<<<<<<<<<<<<<
@@ -140789,7 +144241,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
   __Pyx_INCREF(Py_None);
   __pyx_v_field = ((struct PyPetscISObject *)Py_None);
 
-  /* "PETSc/PC.pyx":367
+  /* "PETSc/PC.pyx":408
  *         cdef object name = None
  *         cdef IS field = None
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -140798,7 +144250,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/PC.pyx":368
+  /* "PETSc/PC.pyx":409
  *         cdef IS field = None
  *         cdef const_char *cname = NULL
  *         for name, field in fields:             # <<<<<<<<<<<<<<
@@ -140809,9 +144261,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
   for (;;) {
     if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(34, 409, __pyx_L1_error)
     #else
-    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 409, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
@@ -140824,7 +144276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(34, 409, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -140837,15 +144289,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 409, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 409, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(34, 409, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
@@ -140853,7 +144305,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
       __Pyx_GOTREF(__pyx_t_4);
       index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(34, 409, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L6_unpacking_done;
@@ -140861,37 +144313,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(34, 409, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
-    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_IS))))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_IS))))) __PYX_ERR(34, 409, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_4);
     __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_field, ((struct PyPetscISObject *)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "PETSc/PC.pyx":369
+    /* "PETSc/PC.pyx":410
  *         cdef const_char *cname = NULL
  *         for name, field in fields:
  *             name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *             CHKERR( PCFieldSplitSetIS(self.pc, cname, field.iset) )
  * 
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 410, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/PC.pyx":370
+    /* "PETSc/PC.pyx":411
  *         for name, field in fields:
  *             name = str2bytes(name, &cname)
  *             CHKERR( PCFieldSplitSetIS(self.pc, cname, field.iset) )             # <<<<<<<<<<<<<<
  * 
  *     def setFieldSplitFields(self, bsize, *fields):
  */
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetIS(__pyx_v_self->pc, __pyx_v_cname, __pyx_v_field->iset)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetIS(__pyx_v_self->pc, __pyx_v_cname, __pyx_v_field->iset)); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(34, 411, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":368
+    /* "PETSc/PC.pyx":409
  *         cdef IS field = None
  *         cdef const_char *cname = NULL
  *         for name, field in fields:             # <<<<<<<<<<<<<<
@@ -140901,7 +144353,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":364
+  /* "PETSc/PC.pyx":405
  *         CHKERR( PCFieldSplitSetType(self.pc, cval) )
  * 
  *     def setFieldSplitIS(self, *fields):             # <<<<<<<<<<<<<<
@@ -140928,7 +144380,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":372
+/* "PETSc/PC.pyx":413
  *             CHKERR( PCFieldSplitSetIS(self.pc, cname, field.iset) )
  * 
  *     def setFieldSplitFields(self, bsize, *fields):             # <<<<<<<<<<<<<<
@@ -140937,14 +144389,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90setFieldSplitIS(struct PyPetscP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFieldSplitFields(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_92setFieldSplitFields[] = "PC.setFieldSplitFields(self, bsize, *fields)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFieldSplitFields(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107setFieldSplitFields(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_106setFieldSplitFields[] = "PC.setFieldSplitFields(self, bsize, *fields)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107setFieldSplitFields(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_bsize = 0;
   PyObject *__pyx_v_fields = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldSplitFields (wrapper)", 0);
@@ -140977,7 +144426,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFieldSplitFields(PyObject *_
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "setFieldSplitFields") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "setFieldSplitFields") < 0)) __PYX_ERR(34, 413, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
       goto __pyx_L5_argtuple_error;
@@ -140988,14 +144437,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFieldSplitFields(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldSplitFields", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldSplitFields", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 413, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_fields); __pyx_v_fields = 0;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFieldSplitFields", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_bsize, __pyx_v_fields);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_bsize, __pyx_v_fields);
 
   /* function exit code */
   __Pyx_XDECREF(__pyx_v_fields);
@@ -141003,7 +144452,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFieldSplitFields(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_bsize, PyObject *__pyx_v_fields) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_bsize, PyObject *__pyx_v_fields) {
   PetscInt __pyx_v_bs;
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_field = 0;
@@ -141021,31 +144470,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *(*__pyx_t_9)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFieldSplitFields", 0);
 
-  /* "PETSc/PC.pyx":373
+  /* "PETSc/PC.pyx":414
  * 
  *     def setFieldSplitFields(self, bsize, *fields):
  *         cdef PetscInt bs = asInt(bsize)             # <<<<<<<<<<<<<<
  *         CHKERR( PCFieldSplitSetBlockSize(self.pc, bs) )
  *         cdef object name = None
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 414, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":374
+  /* "PETSc/PC.pyx":415
  *     def setFieldSplitFields(self, bsize, *fields):
  *         cdef PetscInt bs = asInt(bsize)
  *         CHKERR( PCFieldSplitSetBlockSize(self.pc, bs) )             # <<<<<<<<<<<<<<
  *         cdef object name = None
  *         cdef object field = None
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetBlockSize(__pyx_v_self->pc, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetBlockSize(__pyx_v_self->pc, __pyx_v_bs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 415, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":375
+  /* "PETSc/PC.pyx":416
  *         cdef PetscInt bs = asInt(bsize)
  *         CHKERR( PCFieldSplitSetBlockSize(self.pc, bs) )
  *         cdef object name = None             # <<<<<<<<<<<<<<
@@ -141055,7 +144501,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
   __Pyx_INCREF(Py_None);
   __pyx_v_name = Py_None;
 
-  /* "PETSc/PC.pyx":376
+  /* "PETSc/PC.pyx":417
  *         CHKERR( PCFieldSplitSetBlockSize(self.pc, bs) )
  *         cdef object name = None
  *         cdef object field = None             # <<<<<<<<<<<<<<
@@ -141065,7 +144511,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
   __Pyx_INCREF(Py_None);
   __pyx_v_field = Py_None;
 
-  /* "PETSc/PC.pyx":377
+  /* "PETSc/PC.pyx":418
  *         cdef object name = None
  *         cdef object field = None
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -141074,7 +144520,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/PC.pyx":378
+  /* "PETSc/PC.pyx":419
  *         cdef object field = None
  *         cdef const_char *cname = NULL
  *         cdef PetscInt nfields = 0, *ifields = NULL             # <<<<<<<<<<<<<<
@@ -141084,7 +144530,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
   __pyx_v_nfields = 0;
   __pyx_v_ifields = NULL;
 
-  /* "PETSc/PC.pyx":379
+  /* "PETSc/PC.pyx":420
  *         cdef const_char *cname = NULL
  *         cdef PetscInt nfields = 0, *ifields = NULL
  *         for name, field in fields:             # <<<<<<<<<<<<<<
@@ -141095,9 +144541,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
   for (;;) {
     if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(34, 420, __pyx_L1_error)
     #else
-    __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 420, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -141110,7 +144556,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[34]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(34, 420, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -141123,15 +144569,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
       __Pyx_INCREF(__pyx_t_6);
       __Pyx_INCREF(__pyx_t_7);
       #else
-      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(34, 420, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 420, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       #endif
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 420, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
@@ -141139,7 +144585,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
       __Pyx_GOTREF(__pyx_t_6);
       index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_7);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(34, 420, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L6_unpacking_done;
@@ -141147,7 +144593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[34]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(34, 420, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_6);
@@ -141155,40 +144601,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
     __Pyx_DECREF_SET(__pyx_v_field, __pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "PETSc/PC.pyx":380
+    /* "PETSc/PC.pyx":421
  *         cdef PetscInt nfields = 0, *ifields = NULL
  *         for name, field in fields:
  *             name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *             field = iarray_i(field, &nfields, &ifields)
  *             CHKERR( PCFieldSplitSetFields(self.pc, cname,
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 421, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "PETSc/PC.pyx":381
+    /* "PETSc/PC.pyx":422
  *         for name, field in fields:
  *             name = str2bytes(name, &cname)
  *             field = iarray_i(field, &nfields, &ifields)             # <<<<<<<<<<<<<<
  *             CHKERR( PCFieldSplitSetFields(self.pc, cname,
  *                                           nfields, ifields, ifields) )
  */
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_field, (&__pyx_v_nfields), (&__pyx_v_ifields))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_field, (&__pyx_v_nfields), (&__pyx_v_ifields))); if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 422, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_field, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "PETSc/PC.pyx":382
+    /* "PETSc/PC.pyx":423
  *             name = str2bytes(name, &cname)
  *             field = iarray_i(field, &nfields, &ifields)
  *             CHKERR( PCFieldSplitSetFields(self.pc, cname,             # <<<<<<<<<<<<<<
  *                                           nfields, ifields, ifields) )
  * 
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetFields(__pyx_v_self->pc, __pyx_v_cname, __pyx_v_nfields, __pyx_v_ifields, __pyx_v_ifields)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetFields(__pyx_v_self->pc, __pyx_v_cname, __pyx_v_nfields, __pyx_v_ifields, __pyx_v_ifields)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 423, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":379
+    /* "PETSc/PC.pyx":420
  *         cdef const_char *cname = NULL
  *         cdef PetscInt nfields = 0, *ifields = NULL
  *         for name, field in fields:             # <<<<<<<<<<<<<<
@@ -141198,7 +144644,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":372
+  /* "PETSc/PC.pyx":413
  *             CHKERR( PCFieldSplitSetIS(self.pc, cname, field.iset) )
  * 
  *     def setFieldSplitFields(self, bsize, *fields):             # <<<<<<<<<<<<<<
@@ -141225,7 +144671,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":385
+/* "PETSc/PC.pyx":426
  *                                           nfields, ifields, ifields) )
  * 
  *     def getFieldSplitSubKSP(self):             # <<<<<<<<<<<<<<
@@ -141234,23 +144680,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFieldSplitFields(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_95getFieldSplitSubKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP[] = "PC.getFieldSplitSubKSP(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_95getFieldSplitSubKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_109getFieldSplitSubKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP[] = "PC.getFieldSplitSubKSP(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_109getFieldSplitSubKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFieldSplitSubKSP (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getFieldSplitSubKSP", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFieldSplitSubKSP", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(((struct PyPetscPCObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(((struct PyPetscPCObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPetscPCObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyPetscPCObject *__pyx_v_self) {
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_n;
   KSP *__pyx_v_p;
@@ -141270,12 +144716,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
   PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
   int __pyx_t_13;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getFieldSplitSubKSP", 0);
 
-  /* "PETSc/PC.pyx":386
+  /* "PETSc/PC.pyx":427
  * 
  *     def getFieldSplitSubKSP(self):
  *         cdef PetscInt i = 0, n = 0             # <<<<<<<<<<<<<<
@@ -141285,7 +144728,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
   __pyx_v_i = 0;
   __pyx_v_n = 0;
 
-  /* "PETSc/PC.pyx":387
+  /* "PETSc/PC.pyx":428
  *     def getFieldSplitSubKSP(self):
  *         cdef PetscInt i = 0, n = 0
  *         cdef PetscKSP *p = NULL             # <<<<<<<<<<<<<<
@@ -141294,7 +144737,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
  */
   __pyx_v_p = NULL;
 
-  /* "PETSc/PC.pyx":388
+  /* "PETSc/PC.pyx":429
  *         cdef PetscInt i = 0, n = 0
  *         cdef PetscKSP *p = NULL
  *         cdef object subksp = None             # <<<<<<<<<<<<<<
@@ -141304,7 +144747,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
   __Pyx_INCREF(Py_None);
   __pyx_v_subksp = Py_None;
 
-  /* "PETSc/PC.pyx":389
+  /* "PETSc/PC.pyx":430
  *         cdef PetscKSP *p = NULL
  *         cdef object subksp = None
  *         try:             # <<<<<<<<<<<<<<
@@ -141313,36 +144756,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
  */
   /*try:*/ {
 
-    /* "PETSc/PC.pyx":390
+    /* "PETSc/PC.pyx":431
  *         cdef object subksp = None
  *         try:
  *             CHKERR( PCFieldSplitGetSubKSP(self.pc, &n, &p) )             # <<<<<<<<<<<<<<
  *             subksp = [ref_KSP(p[i]) for i from 0 <= i <n]
  *         finally:
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitGetSubKSP(__pyx_v_self->pc, (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitGetSubKSP(__pyx_v_self->pc, (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 431, __pyx_L4_error)
 
-    /* "PETSc/PC.pyx":391
+    /* "PETSc/PC.pyx":432
  *         try:
  *             CHKERR( PCFieldSplitGetSubKSP(self.pc, &n, &p) )
  *             subksp = [ref_KSP(p[i]) for i from 0 <= i <n]             # <<<<<<<<<<<<<<
  *         finally:
  *             CHKERR( PetscFree(p) )
  */
-    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 432, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = __pyx_v_n;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
-      __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP((__pyx_v_p[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP((__pyx_v_p[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 432, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_4);
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(34, 432, __pyx_L4_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     }
     __Pyx_DECREF_SET(__pyx_v_subksp, __pyx_t_2);
     __pyx_t_2 = 0;
   }
 
-  /* "PETSc/PC.pyx":393
+  /* "PETSc/PC.pyx":434
  *             subksp = [ref_KSP(p[i]) for i from 0 <= i <n]
  *         finally:
  *             CHKERR( PetscFree(p) )             # <<<<<<<<<<<<<<
@@ -141351,12 +144794,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_p)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_p)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 434, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
@@ -141369,8 +144814,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
       __Pyx_XGOTREF(__pyx_t_12);
       __pyx_t_1 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
       {
-        __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_p)); if (unlikely(__pyx_t_13 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+        __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_p)); if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(34, 434, __pyx_L9_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
@@ -141385,6 +144831,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
       __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
       goto __pyx_L1_error;
       __pyx_L9_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
@@ -141400,7 +144847,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
     __pyx_L5:;
   }
 
-  /* "PETSc/PC.pyx":394
+  /* "PETSc/PC.pyx":435
  *         finally:
  *             CHKERR( PetscFree(p) )
  *         return subksp             # <<<<<<<<<<<<<<
@@ -141412,7 +144859,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
   __pyx_r = __pyx_v_subksp;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":385
+  /* "PETSc/PC.pyx":426
  *                                           nfields, ifields, ifields) )
  * 
  *     def getFieldSplitSubKSP(self):             # <<<<<<<<<<<<<<
@@ -141433,7 +144880,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":396
+/* "PETSc/PC.pyx":437
  *         return subksp
  * 
  *     def setFieldSplitSchurFactType(self, ctype):             # <<<<<<<<<<<<<<
@@ -141442,13 +144889,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFieldSplitSchurFactType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_96setFieldSplitSchurFactType[] = "PC.setFieldSplitSchurFactType(self, ctype)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFieldSplitSchurFactType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_111setFieldSplitSchurFactType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_110setFieldSplitSchurFactType[] = "PC.setFieldSplitSchurFactType(self, ctype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_111setFieldSplitSchurFactType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ctype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldSplitSchurFactType (wrapper)", 0);
@@ -141470,7 +144914,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFieldSplitSchurFactType(PyOb
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitSchurFactType") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitSchurFactType") < 0)) __PYX_ERR(34, 437, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141481,50 +144925,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFieldSplitSchurFactType(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldSplitSchurFactType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldSplitSchurFactType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 437, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFieldSplitSchurFactType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_96setFieldSplitSchurFactType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ctype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_110setFieldSplitSchurFactType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ctype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFieldSplitSchurFactType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_110setFieldSplitSchurFactType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype) {
   PCFieldSplitSchurFactType __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PCFieldSplitSchurFactType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFieldSplitSchurFactType", 0);
 
-  /* "PETSc/PC.pyx":397
+  /* "PETSc/PC.pyx":438
  * 
  *     def setFieldSplitSchurFactType(self, ctype):
  *         cdef PetscPCFieldSplitSchurFactType cval = ctype             # <<<<<<<<<<<<<<
  *         CHKERR( PCFieldSplitSetSchurFactType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCFieldSplitSchurFactType)PyInt_AsLong(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PCFieldSplitSchurFactType)__Pyx_PyInt_As_PCFieldSplitSchurFactType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 438, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":398
+  /* "PETSc/PC.pyx":439
  *     def setFieldSplitSchurFactType(self, ctype):
  *         cdef PetscPCFieldSplitSchurFactType cval = ctype
  *         CHKERR( PCFieldSplitSetSchurFactType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def setFieldSplitSchurPreType(self, ptype, Mat pre=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetSchurFactType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetSchurFactType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 439, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":396
+  /* "PETSc/PC.pyx":437
  *         return subksp
  * 
  *     def setFieldSplitSchurFactType(self, ctype):             # <<<<<<<<<<<<<<
@@ -141544,7 +144985,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFieldSplitSchurFactType(stru
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":400
+/* "PETSc/PC.pyx":441
  *         CHKERR( PCFieldSplitSetSchurFactType(self.pc, cval) )
  * 
  *     def setFieldSplitSchurPreType(self, ptype, Mat pre=None):             # <<<<<<<<<<<<<<
@@ -141553,14 +144994,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFieldSplitSchurFactType(stru
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFieldSplitSchurPreType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType[] = "PC.setFieldSplitSchurPreType(self, ptype, Mat pre=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFieldSplitSchurPreType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_113setFieldSplitSchurPreType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType[] = "PC.setFieldSplitSchurPreType(self, ptype, Mat pre=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_113setFieldSplitSchurPreType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ptype = 0;
   struct PyPetscMatObject *__pyx_v_pre = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFieldSplitSchurPreType (wrapper)", 0);
@@ -141589,7 +145027,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFieldSplitSchurPreType(PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitSchurPreType") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitSchurPreType") < 0)) __PYX_ERR(34, 441, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -141604,14 +145042,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFieldSplitSchurPreType(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldSplitSchurPreType", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFieldSplitSchurPreType", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 441, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFieldSplitSchurPreType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pre), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "pre", 0))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ptype, __pyx_v_pre);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pre), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "pre", 0))) __PYX_ERR(34, 441, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ptype, __pyx_v_pre);
 
   /* function exit code */
   goto __pyx_L0;
@@ -141622,7 +145060,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFieldSplitSchurPreType(PyObj
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ptype, struct PyPetscMatObject *__pyx_v_pre) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ptype, struct PyPetscMatObject *__pyx_v_pre) {
   PCFieldSplitSchurPreType __pyx_v_pval;
   Mat __pyx_v_pmat;
   PyObject *__pyx_r = NULL;
@@ -141632,22 +145070,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType(struc
   int __pyx_t_3;
   Mat __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFieldSplitSchurPreType", 0);
 
-  /* "PETSc/PC.pyx":401
+  /* "PETSc/PC.pyx":442
  * 
  *     def setFieldSplitSchurPreType(self, ptype, Mat pre=None):
  *         cdef PetscPCFieldSplitSchurPreType pval = ptype             # <<<<<<<<<<<<<<
  *         cdef PetscMat pmat = NULL
  *         if pre is not None: pmat = pre.mat
  */
-  __pyx_t_1 = ((PCFieldSplitSchurPreType)PyInt_AsLong(__pyx_v_ptype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PCFieldSplitSchurPreType)__Pyx_PyInt_As_PCFieldSplitSchurPreType(__pyx_v_ptype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 442, __pyx_L1_error)
   __pyx_v_pval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":402
+  /* "PETSc/PC.pyx":443
  *     def setFieldSplitSchurPreType(self, ptype, Mat pre=None):
  *         cdef PetscPCFieldSplitSchurPreType pval = ptype
  *         cdef PetscMat pmat = NULL             # <<<<<<<<<<<<<<
@@ -141656,7 +145091,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType(struc
  */
   __pyx_v_pmat = NULL;
 
-  /* "PETSc/PC.pyx":403
+  /* "PETSc/PC.pyx":444
  *         cdef PetscPCFieldSplitSchurPreType pval = ptype
  *         cdef PetscMat pmat = NULL
  *         if pre is not None: pmat = pre.mat             # <<<<<<<<<<<<<<
@@ -141668,20 +145103,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType(struc
   if (__pyx_t_3) {
     __pyx_t_4 = __pyx_v_pre->mat;
     __pyx_v_pmat = __pyx_t_4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":404
+  /* "PETSc/PC.pyx":445
  *         cdef PetscMat pmat = NULL
  *         if pre is not None: pmat = pre.mat
  *         CHKERR( PCFieldSplitSetSchurPre(self.pc, pval, pmat) )             # <<<<<<<<<<<<<<
  * 
  *     def setReusePreconditioner(self, flag):
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetSchurPre(__pyx_v_self->pc, __pyx_v_pval, __pyx_v_pmat)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetSchurPre(__pyx_v_self->pc, __pyx_v_pval, __pyx_v_pmat)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(34, 445, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":400
+  /* "PETSc/PC.pyx":441
  *         CHKERR( PCFieldSplitSetSchurFactType(self.pc, cval) )
  * 
  *     def setFieldSplitSchurPreType(self, ptype, Mat pre=None):             # <<<<<<<<<<<<<<
@@ -141701,7 +145134,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType(struc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":406
+/* "PETSc/PC.pyx":447
  *         CHKERR( PCFieldSplitSetSchurPre(self.pc, pval, pmat) )
  * 
  *     def setReusePreconditioner(self, flag):             # <<<<<<<<<<<<<<
@@ -141710,13 +145143,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_101setReusePreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_100setReusePreconditioner[] = "PC.setReusePreconditioner(self, flag)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_101setReusePreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setReusePreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_114setReusePreconditioner[] = "PC.setReusePreconditioner(self, flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setReusePreconditioner(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("setReusePreconditioner (wrapper)", 0);
@@ -141738,7 +145168,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_101setReusePreconditioner(PyObjec
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setReusePreconditioner") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setReusePreconditioner") < 0)) __PYX_ERR(34, 447, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141749,31 +145179,28 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_101setReusePreconditioner(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setReusePreconditioner", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setReusePreconditioner", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 447, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setReusePreconditioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_100setReusePreconditioner(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_114setReusePreconditioner(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100setReusePreconditioner(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setReusePreconditioner(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_flag) {
   PetscBool __pyx_v_cflag;
   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("setReusePreconditioner", 0);
 
-  /* "PETSc/PC.pyx":407
+  /* "PETSc/PC.pyx":448
  * 
  *     def setReusePreconditioner(self, flag):
  *         cdef PetscBool cflag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -141782,17 +145209,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100setReusePreconditioner(struct
  */
   __pyx_v_cflag = PETSC_FALSE;
 
-  /* "PETSc/PC.pyx":408
+  /* "PETSc/PC.pyx":449
  *     def setReusePreconditioner(self, flag):
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag:             # <<<<<<<<<<<<<<
  *             cflag = PETSC_TRUE
  *         CHKERR( PCSetReusePreconditioner(self.pc, cflag) )
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(34, 449, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":409
+    /* "PETSc/PC.pyx":450
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag:
  *             cflag = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -141800,20 +145227,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100setReusePreconditioner(struct
  * 
  */
     __pyx_v_cflag = PETSC_TRUE;
-    goto __pyx_L3;
+
+    /* "PETSc/PC.pyx":449
+ *     def setReusePreconditioner(self, flag):
+ *         cdef PetscBool cflag = PETSC_FALSE
+ *         if flag:             # <<<<<<<<<<<<<<
+ *             cflag = PETSC_TRUE
+ *         CHKERR( PCSetReusePreconditioner(self.pc, cflag) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/PC.pyx":410
+  /* "PETSc/PC.pyx":451
  *         if flag:
  *             cflag = PETSC_TRUE
  *         CHKERR( PCSetReusePreconditioner(self.pc, cflag) )             # <<<<<<<<<<<<<<
  * 
  *     # --- COMPOSITE ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetReusePreconditioner(__pyx_v_self->pc, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetReusePreconditioner(__pyx_v_self->pc, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 451, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":406
+  /* "PETSc/PC.pyx":447
  *         CHKERR( PCFieldSplitSetSchurPre(self.pc, pval, pmat) )
  * 
  *     def setReusePreconditioner(self, flag):             # <<<<<<<<<<<<<<
@@ -141833,7 +145266,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100setReusePreconditioner(struct
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":414
+/* "PETSc/PC.pyx":455
  *     # --- COMPOSITE ---
  * 
  *     def setCompositeType(self, ctype):             # <<<<<<<<<<<<<<
@@ -141842,13 +145275,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100setReusePreconditioner(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setCompositeType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_102setCompositeType[] = "PC.setCompositeType(self, ctype)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setCompositeType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117setCompositeType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_116setCompositeType[] = "PC.setCompositeType(self, ctype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117setCompositeType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ctype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCompositeType (wrapper)", 0);
@@ -141870,7 +145300,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setCompositeType(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, "setCompositeType") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCompositeType") < 0)) __PYX_ERR(34, 455, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141881,50 +145311,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setCompositeType(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCompositeType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCompositeType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 455, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setCompositeType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_102setCompositeType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ctype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_116setCompositeType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_ctype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_102setCompositeType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116setCompositeType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_ctype) {
   PCCompositeType __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PCCompositeType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCompositeType", 0);
 
-  /* "PETSc/PC.pyx":415
+  /* "PETSc/PC.pyx":456
  * 
  *     def setCompositeType(self, ctype):
  *         cdef PetscPCCompositeType cval = ctype             # <<<<<<<<<<<<<<
  *         CHKERR( PCCompositeSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCCompositeType)PyInt_AsLong(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PCCompositeType)__Pyx_PyInt_As_PCCompositeType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 456, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":416
+  /* "PETSc/PC.pyx":457
  *     def setCompositeType(self, ctype):
  *         cdef PetscPCCompositeType cval = ctype
  *         CHKERR( PCCompositeSetType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getCompositePC(self, n):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCompositeSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCompositeSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 457, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":414
+  /* "PETSc/PC.pyx":455
  *     # --- COMPOSITE ---
  * 
  *     def setCompositeType(self, ctype):             # <<<<<<<<<<<<<<
@@ -141944,7 +145371,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_102setCompositeType(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":418
+/* "PETSc/PC.pyx":459
  *         CHKERR( PCCompositeSetType(self.pc, cval) )
  * 
  *     def getCompositePC(self, n):             # <<<<<<<<<<<<<<
@@ -141953,13 +145380,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_102setCompositeType(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_105getCompositePC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_104getCompositePC[] = "PC.getCompositePC(self, n)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_105getCompositePC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119getCompositePC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_118getCompositePC[] = "PC.getCompositePC(self, n)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119getCompositePC(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getCompositePC (wrapper)", 0);
@@ -141981,7 +145405,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_105getCompositePC(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, "getCompositePC") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCompositePC") < 0)) __PYX_ERR(34, 459, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141992,20 +145416,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_105getCompositePC(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getCompositePC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getCompositePC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 459, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getCompositePC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_104getCompositePC(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_n);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_118getCompositePC(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_n);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104getCompositePC(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_n) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118getCompositePC(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_n) {
   struct PyPetscPCObject *__pyx_v_pc = 0;
   PyObject *__pyx_v_cn = 0;
   PyObject *__pyx_r = NULL;
@@ -142013,47 +145437,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104getCompositePC(struct PyPetscP
   PyObject *__pyx_t_1 = NULL;
   PetscInt __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getCompositePC", 0);
 
-  /* "PETSc/PC.pyx":419
+  /* "PETSc/PC.pyx":460
  * 
  *     def getCompositePC(self, n):
  *         cdef PC pc = PC()             # <<<<<<<<<<<<<<
  *         cdef cn = asInt(n)
  *         CHKERR( PCCompositeGetPC(self.pc, cn, &pc.pc) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_PC)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 460, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_pc = ((struct PyPetscPCObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":420
+  /* "PETSc/PC.pyx":461
  *     def getCompositePC(self, n):
  *         cdef PC pc = PC()
  *         cdef cn = asInt(n)             # <<<<<<<<<<<<<<
  *         CHKERR( PCCompositeGetPC(self.pc, cn, &pc.pc) )
  *         PetscINCREF(pc.obj)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(34, 461, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 461, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_cn = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":421
+  /* "PETSc/PC.pyx":462
  *         cdef PC pc = PC()
  *         cdef cn = asInt(n)
  *         CHKERR( PCCompositeGetPC(self.pc, cn, &pc.pc) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(pc.obj)
  *         return pc
  */
-  __pyx_t_2 = __Pyx_PyInt_As_PetscInt(__pyx_v_cn); if (unlikely((__pyx_t_2 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCompositeGetPC(__pyx_v_self->pc, __pyx_t_2, (&__pyx_v_pc->pc))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_As_PetscInt(__pyx_v_cn); if (unlikely((__pyx_t_2 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(34, 462, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCompositeGetPC(__pyx_v_self->pc, __pyx_t_2, (&__pyx_v_pc->pc))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(34, 462, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":422
+  /* "PETSc/PC.pyx":463
  *         cdef cn = asInt(n)
  *         CHKERR( PCCompositeGetPC(self.pc, cn, &pc.pc) )
  *         PetscINCREF(pc.obj)             # <<<<<<<<<<<<<<
@@ -142062,7 +145483,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104getCompositePC(struct PyPetscP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_pc->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":423
+  /* "PETSc/PC.pyx":464
  *         CHKERR( PCCompositeGetPC(self.pc, cn, &pc.pc) )
  *         PetscINCREF(pc.obj)
  *         return pc             # <<<<<<<<<<<<<<
@@ -142074,7 +145495,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104getCompositePC(struct PyPetscP
   __pyx_r = ((PyObject *)__pyx_v_pc);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":418
+  /* "PETSc/PC.pyx":459
  *         CHKERR( PCCompositeSetType(self.pc, cval) )
  * 
  *     def getCompositePC(self, n):             # <<<<<<<<<<<<<<
@@ -142095,7 +145516,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104getCompositePC(struct PyPetscP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":425
+/* "PETSc/PC.pyx":466
  *         return pc
  * 
  *     def addCompositePC(self, pc_type):             # <<<<<<<<<<<<<<
@@ -142104,13 +145525,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104getCompositePC(struct PyPetscP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107addCompositePC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_106addCompositePC[] = "PC.addCompositePC(self, pc_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107addCompositePC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121addCompositePC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_120addCompositePC[] = "PC.addCompositePC(self, pc_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121addCompositePC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_pc_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addCompositePC (wrapper)", 0);
@@ -142132,7 +145550,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107addCompositePC(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, "addCompositePC") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addCompositePC") < 0)) __PYX_ERR(34, 466, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142143,32 +145561,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107addCompositePC(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("addCompositePC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("addCompositePC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 466, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.addCompositePC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_106addCompositePC(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_pc_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_120addCompositePC(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_pc_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106addCompositePC(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_pc_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120addCompositePC(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_pc_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("addCompositePC", 0);
   __Pyx_INCREF(__pyx_v_pc_type);
 
-  /* "PETSc/PC.pyx":426
+  /* "PETSc/PC.pyx":467
  * 
  *     def addCompositePC(self, pc_type):
  *         cdef PetscPCType cval = NULL             # <<<<<<<<<<<<<<
@@ -142177,28 +145592,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106addCompositePC(struct PyPetscP
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":427
+  /* "PETSc/PC.pyx":468
  *     def addCompositePC(self, pc_type):
  *         cdef PetscPCType cval = NULL
  *         pc_type = str2bytes(pc_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( PCCompositeAddPC(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_pc_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_pc_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 468, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_pc_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":428
+  /* "PETSc/PC.pyx":469
  *         cdef PetscPCType cval = NULL
  *         pc_type = str2bytes(pc_type, &cval)
  *         CHKERR( PCCompositeAddPC(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
  *     # --- KSP ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCompositeAddPC(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCompositeAddPC(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 469, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":425
+  /* "PETSc/PC.pyx":466
  *         return pc
  * 
  *     def addCompositePC(self, pc_type):             # <<<<<<<<<<<<<<
@@ -142220,7 +145635,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106addCompositePC(struct PyPetscP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":432
+/* "PETSc/PC.pyx":473
  *     # --- KSP ---
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -142229,55 +145644,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106addCompositePC(struct PyPetscP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_109getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_108getKSP[] = "PC.getKSP(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_109getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_123getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_122getKSP[] = "PC.getKSP(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_123getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getKSP (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getKSP", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKSP", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_108getKSP(((struct PyPetscPCObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_122getKSP(((struct PyPetscPCObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getKSP(struct PyPetscPCObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122getKSP(struct PyPetscPCObject *__pyx_v_self) {
   struct PyPetscKSPObject *__pyx_v_ksp = 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("getKSP", 0);
 
-  /* "PETSc/PC.pyx":433
+  /* "PETSc/PC.pyx":474
  * 
  *     def getKSP(self):
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( PCKSPGetKSP(self.pc, &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[34]; __pyx_lineno = 433; __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(34, 474, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":434
+  /* "PETSc/PC.pyx":475
  *     def getKSP(self):
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCKSPGetKSP(self.pc, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCKSPGetKSP(__pyx_v_self->pc, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCKSPGetKSP(__pyx_v_self->pc, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 475, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":435
+  /* "PETSc/PC.pyx":476
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCKSPGetKSP(self.pc, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -142286,7 +145698,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getKSP(struct PyPetscPCObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":436
+  /* "PETSc/PC.pyx":477
  *         CHKERR( PCKSPGetKSP(self.pc, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -142298,7 +145710,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getKSP(struct PyPetscPCObject
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":432
+  /* "PETSc/PC.pyx":473
  *     # --- KSP ---
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -142318,70 +145730,265 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getKSP(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":439
+/* "PETSc/PC.pyx":481
+ *     # --- MG ---
+ * 
+ *     def getMGType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCMGType cval = PC_MG_ADDITIVE
+ *         CHKERR( PCMGGetType(self.pc, &cval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_125getMGType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_124getMGType[] = "PC.getMGType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_125getMGType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getMGType (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getMGType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMGType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_124getMGType(((struct PyPetscPCObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGType(struct PyPetscPCObject *__pyx_v_self) {
+  PCMGType __pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getMGType", 0);
+
+  /* "PETSc/PC.pyx":482
+ * 
+ *     def getMGType(self):
+ *         cdef PetscPCMGType cval = PC_MG_ADDITIVE             # <<<<<<<<<<<<<<
+ *         CHKERR( PCMGGetType(self.pc, &cval) )
+ *         return cval
+ */
+  __pyx_v_cval = PC_MG_ADDITIVE;
+
+  /* "PETSc/PC.pyx":483
+ *     def getMGType(self):
+ *         cdef PetscPCMGType cval = PC_MG_ADDITIVE
+ *         CHKERR( PCMGGetType(self.pc, &cval) )             # <<<<<<<<<<<<<<
+ *         return cval
  * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetType(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 483, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":484
+ *         cdef PetscPCMGType cval = PC_MG_ADDITIVE
+ *         CHKERR( PCMGGetType(self.pc, &cval) )
+ *         return cval             # <<<<<<<<<<<<<<
+ * 
+ *     def setMGType(self, mgtype):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PCMGType(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 484, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/PC.pyx":481
  *     # --- MG ---
+ * 
+ *     def getMGType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCMGType cval = PC_MG_ADDITIVE
+ *         CHKERR( PCMGGetType(self.pc, &cval) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":486
+ *         return cval
+ * 
+ *     def setMGType(self, mgtype):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCMGType cval = mgtype
+ *         CHKERR( PCMGSetType(self.pc, cval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127setMGType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_126setMGType[] = "PC.setMGType(self, mgtype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127setMGType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_mgtype = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setMGType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mgtype,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_mgtype)) != 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, "setMGType") < 0)) __PYX_ERR(34, 486, __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_mgtype = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setMGType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 486, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_126setMGType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mgtype);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126setMGType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_mgtype) {
+  PCMGType __pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PCMGType __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setMGType", 0);
+
+  /* "PETSc/PC.pyx":487
+ * 
+ *     def setMGType(self, mgtype):
+ *         cdef PetscPCMGType cval = mgtype             # <<<<<<<<<<<<<<
+ *         CHKERR( PCMGSetType(self.pc, cval) )
+ * 
+ */
+  __pyx_t_1 = ((PCMGType)__Pyx_PyInt_As_PCMGType(__pyx_v_mgtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 487, __pyx_L1_error)
+  __pyx_v_cval = __pyx_t_1;
+
+  /* "PETSc/PC.pyx":488
+ *     def setMGType(self, mgtype):
+ *         cdef PetscPCMGType cval = mgtype
+ *         CHKERR( PCMGSetType(self.pc, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getMGLevels(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 488, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":486
+ *         return cval
+ * 
+ *     def setMGType(self, mgtype):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCMGType cval = mgtype
+ *         CHKERR( PCMGSetType(self.pc, cval) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":490
+ *         CHKERR( PCMGSetType(self.pc, cval) )
+ * 
  *     def getMGLevels(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt levels
+ *         cdef PetscInt levels = 0
  *         CHKERR( PCMGGetLevels(self.pc, &levels) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_111getMGLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_110getMGLevels[] = "PC.getMGLevels(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_111getMGLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_129getMGLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_128getMGLevels[] = "PC.getMGLevels(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_129getMGLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMGLevels (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMGLevels", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMGLevels", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_110getMGLevels(((struct PyPetscPCObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_128getMGLevels(((struct PyPetscPCObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_110getMGLevels(struct PyPetscPCObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGLevels(struct PyPetscPCObject *__pyx_v_self) {
   PetscInt __pyx_v_levels;
   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("getMGLevels", 0);
 
-  /* "PETSc/PC.pyx":441
+  /* "PETSc/PC.pyx":491
+ * 
  *     def getMGLevels(self):
- *         cdef PetscInt levels
+ *         cdef PetscInt levels = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( PCMGGetLevels(self.pc, &levels) )
+ *         return toInt(levels)
+ */
+  __pyx_v_levels = 0;
+
+  /* "PETSc/PC.pyx":492
+ *     def getMGLevels(self):
+ *         cdef PetscInt levels = 0
  *         CHKERR( PCMGGetLevels(self.pc, &levels) )             # <<<<<<<<<<<<<<
  *         return toInt(levels)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetLevels(__pyx_v_self->pc, (&__pyx_v_levels))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetLevels(__pyx_v_self->pc, (&__pyx_v_levels))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(34, 492, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":442
- *         cdef PetscInt levels
+  /* "PETSc/PC.pyx":493
+ *         cdef PetscInt levels = 0
  *         CHKERR( PCMGGetLevels(self.pc, &levels) )
  *         return toInt(levels)             # <<<<<<<<<<<<<<
  * 
  *     def getMGCoarseSolve(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_levels); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_levels); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 493, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":439
+  /* "PETSc/PC.pyx":490
+ *         CHKERR( PCMGSetType(self.pc, cval) )
  * 
- *     # --- MG ---
  *     def getMGLevels(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt levels
+ *         cdef PetscInt levels = 0
  *         CHKERR( PCMGGetLevels(self.pc, &levels) )
  */
 
@@ -142396,7 +146003,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_110getMGLevels(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":444
+/* "PETSc/PC.pyx":495
  *         return toInt(levels)
  * 
  *     def getMGCoarseSolve(self):             # <<<<<<<<<<<<<<
@@ -142405,55 +146012,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_110getMGLevels(struct PyPetscPCOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_113getMGCoarseSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_112getMGCoarseSolve[] = "PC.getMGCoarseSolve(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_113getMGCoarseSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_131getMGCoarseSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_130getMGCoarseSolve[] = "PC.getMGCoarseSolve(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_131getMGCoarseSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMGCoarseSolve (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMGCoarseSolve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMGCoarseSolve", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_112getMGCoarseSolve(((struct PyPetscPCObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_130getMGCoarseSolve(((struct PyPetscPCObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112getMGCoarseSolve(struct PyPetscPCObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGCoarseSolve(struct PyPetscPCObject *__pyx_v_self) {
   struct PyPetscKSPObject *__pyx_v_ksp = 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("getMGCoarseSolve", 0);
 
-  /* "PETSc/PC.pyx":445
+  /* "PETSc/PC.pyx":496
  * 
  *     def getMGCoarseSolve(self):
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGGetCoarseSolve(self.pc, &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[34]; __pyx_lineno = 445; __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(34, 496, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":446
+  /* "PETSc/PC.pyx":497
  *     def getMGCoarseSolve(self):
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetCoarseSolve(self.pc, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetCoarseSolve(__pyx_v_self->pc, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetCoarseSolve(__pyx_v_self->pc, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 497, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":447
+  /* "PETSc/PC.pyx":498
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetCoarseSolve(self.pc, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -142462,7 +146066,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112getMGCoarseSolve(struct PyPets
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":448
+  /* "PETSc/PC.pyx":499
  *         CHKERR( PCMGGetCoarseSolve(self.pc, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -142474,7 +146078,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112getMGCoarseSolve(struct PyPets
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":444
+  /* "PETSc/PC.pyx":495
  *         return toInt(levels)
  * 
  *     def getMGCoarseSolve(self):             # <<<<<<<<<<<<<<
@@ -142494,7 +146098,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112getMGCoarseSolve(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":450
+/* "PETSc/PC.pyx":501
  *         return ksp
  * 
  *     def setMGInterpolation(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -142503,14 +146107,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112getMGCoarseSolve(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setMGInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_114setMGInterpolation[] = "PC.setMGInterpolation(self, level, Mat mat)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setMGInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_132setMGInterpolation[] = "PC.setMGInterpolation(self, level, Mat mat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMGInterpolation (wrapper)", 0);
@@ -142534,11 +146135,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setMGInterpolation(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMGInterpolation", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setMGInterpolation", 1, 2, 2, 1); __PYX_ERR(34, 501, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGInterpolation") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGInterpolation") < 0)) __PYX_ERR(34, 501, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -142551,14 +146152,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setMGInterpolation(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGInterpolation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMGInterpolation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 501, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGInterpolation", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_114setMGInterpolation(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_mat);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(34, 501, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_132setMGInterpolation(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_mat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -142569,37 +146170,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setMGInterpolation(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setMGInterpolation(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_132setMGInterpolation(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat) {
   PetscInt __pyx_v_clevel;
   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("setMGInterpolation", 0);
 
-  /* "PETSc/PC.pyx":451
+  /* "PETSc/PC.pyx":502
  * 
  *     def setMGInterpolation(self, level, Mat mat not None):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 502, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":452
+  /* "PETSc/PC.pyx":503
  *     def setMGInterpolation(self, level, Mat mat not None):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )             # <<<<<<<<<<<<<<
  * 
  *     def getMGInterpolation(self, level):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetInterpolation(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetInterpolation(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 503, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":450
+  /* "PETSc/PC.pyx":501
  *         return ksp
  * 
  *     def setMGInterpolation(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -142619,7 +146217,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setMGInterpolation(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":454
+/* "PETSc/PC.pyx":505
  *         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )
  * 
  *     def getMGInterpolation(self, level):             # <<<<<<<<<<<<<<
@@ -142628,13 +146226,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setMGInterpolation(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117getMGInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_116getMGInterpolation[] = "PC.getMGInterpolation(self, level)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117getMGInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135getMGInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_134getMGInterpolation[] = "PC.getMGInterpolation(self, level)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135getMGInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMGInterpolation (wrapper)", 0);
@@ -142656,7 +146251,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117getMGInterpolation(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGInterpolation") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGInterpolation") < 0)) __PYX_ERR(34, 505, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142667,20 +146262,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117getMGInterpolation(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getMGInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 505, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGInterpolation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_116getMGInterpolation(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_134getMGInterpolation(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116getMGInterpolation(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134getMGInterpolation(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
   PetscInt __pyx_v_clevel;
   struct PyPetscMatObject *__pyx_v_interpolation = 0;
   PyObject *__pyx_r = NULL;
@@ -142688,43 +146283,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116getMGInterpolation(struct PyPe
   PetscInt __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("getMGInterpolation", 0);
 
-  /* "PETSc/PC.pyx":455
+  /* "PETSc/PC.pyx":506
  * 
  *     def getMGInterpolation(self, level):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         cdef Mat interpolation = Mat()
  *         CHKERR( PCMGGetInterpolation(self.pc, clevel, &interpolation.mat) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 506, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":456
+  /* "PETSc/PC.pyx":507
  *     def getMGInterpolation(self, level):
  *         cdef PetscInt clevel = asInt(level)
  *         cdef Mat interpolation = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGGetInterpolation(self.pc, clevel, &interpolation.mat) )
  *         PetscINCREF(interpolation.obj)
  */
-  __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[34]; __pyx_lineno = 456; __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(34, 507, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_interpolation = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":457
+  /* "PETSc/PC.pyx":508
  *         cdef PetscInt clevel = asInt(level)
  *         cdef Mat interpolation = Mat()
  *         CHKERR( PCMGGetInterpolation(self.pc, clevel, &interpolation.mat) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(interpolation.obj)
  *         return interpolation
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetInterpolation(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_interpolation->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetInterpolation(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_interpolation->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(34, 508, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":458
+  /* "PETSc/PC.pyx":509
  *         cdef Mat interpolation = Mat()
  *         CHKERR( PCMGGetInterpolation(self.pc, clevel, &interpolation.mat) )
  *         PetscINCREF(interpolation.obj)             # <<<<<<<<<<<<<<
@@ -142733,7 +146325,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116getMGInterpolation(struct PyPe
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_interpolation->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":459
+  /* "PETSc/PC.pyx":510
  *         CHKERR( PCMGGetInterpolation(self.pc, clevel, &interpolation.mat) )
  *         PetscINCREF(interpolation.obj)
  *         return interpolation             # <<<<<<<<<<<<<<
@@ -142745,7 +146337,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116getMGInterpolation(struct PyPe
   __pyx_r = ((PyObject *)__pyx_v_interpolation);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":454
+  /* "PETSc/PC.pyx":505
  *         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )
  * 
  *     def getMGInterpolation(self, level):             # <<<<<<<<<<<<<<
@@ -142765,7 +146357,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116getMGInterpolation(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":461
+/* "PETSc/PC.pyx":512
  *         return interpolation
  * 
  *     def setMGRestriction(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -142774,14 +146366,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116getMGInterpolation(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119setMGRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_118setMGRestriction[] = "PC.setMGRestriction(self, level, Mat mat)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119setMGRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_136setMGRestriction[] = "PC.setMGRestriction(self, level, Mat mat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMGRestriction (wrapper)", 0);
@@ -142805,11 +146394,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119setMGRestriction(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMGRestriction", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setMGRestriction", 1, 2, 2, 1); __PYX_ERR(34, 512, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRestriction") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRestriction") < 0)) __PYX_ERR(34, 512, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -142822,14 +146411,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119setMGRestriction(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGRestriction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMGRestriction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 512, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGRestriction", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_118setMGRestriction(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_mat);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(34, 512, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_136setMGRestriction(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_mat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -142840,37 +146429,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119setMGRestriction(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118setMGRestriction(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_136setMGRestriction(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscMatObject *__pyx_v_mat) {
   PetscInt __pyx_v_clevel;
   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("setMGRestriction", 0);
 
-  /* "PETSc/PC.pyx":462
+  /* "PETSc/PC.pyx":513
  * 
  *     def setMGRestriction(self, level, Mat mat not None):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 513, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":463
+  /* "PETSc/PC.pyx":514
  *     def setMGRestriction(self, level, Mat mat not None):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )             # <<<<<<<<<<<<<<
  * 
  *     def getMGRestriction(self, level):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetRestriction(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetRestriction(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 514, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":461
+  /* "PETSc/PC.pyx":512
  *         return interpolation
  * 
  *     def setMGRestriction(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
@@ -142890,7 +146476,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118setMGRestriction(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":465
+/* "PETSc/PC.pyx":516
  *         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )
  * 
  *     def getMGRestriction(self, level):             # <<<<<<<<<<<<<<
@@ -142899,13 +146485,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118setMGRestriction(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121getMGRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_120getMGRestriction[] = "PC.getMGRestriction(self, level)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121getMGRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139getMGRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_138getMGRestriction[] = "PC.getMGRestriction(self, level)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139getMGRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMGRestriction (wrapper)", 0);
@@ -142927,7 +146510,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121getMGRestriction(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, "getMGRestriction") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGRestriction") < 0)) __PYX_ERR(34, 516, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142938,20 +146521,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121getMGRestriction(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGRestriction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getMGRestriction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 516, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGRestriction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_120getMGRestriction(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_138getMGRestriction(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120getMGRestriction(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_138getMGRestriction(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
   PetscInt __pyx_v_clevel;
   struct PyPetscMatObject *__pyx_v_restriction = 0;
   PyObject *__pyx_r = NULL;
@@ -142959,43 +146542,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120getMGRestriction(struct PyPets
   PetscInt __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("getMGRestriction", 0);
 
-  /* "PETSc/PC.pyx":466
+  /* "PETSc/PC.pyx":517
  * 
  *     def getMGRestriction(self, level):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         cdef Mat restriction = Mat()
  *         CHKERR( PCMGGetRestriction(self.pc, clevel, &restriction.mat) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 517, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":467
+  /* "PETSc/PC.pyx":518
  *     def getMGRestriction(self, level):
  *         cdef PetscInt clevel = asInt(level)
  *         cdef Mat restriction = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGGetRestriction(self.pc, clevel, &restriction.mat) )
  *         PetscINCREF(restriction.obj)
  */
-  __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[34]; __pyx_lineno = 467; __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(34, 518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_restriction = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":468
+  /* "PETSc/PC.pyx":519
  *         cdef PetscInt clevel = asInt(level)
  *         cdef Mat restriction = Mat()
  *         CHKERR( PCMGGetRestriction(self.pc, clevel, &restriction.mat) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(restriction.obj)
  *         return restriction
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetRestriction(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_restriction->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetRestriction(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_restriction->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(34, 519, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":469
+  /* "PETSc/PC.pyx":520
  *         cdef Mat restriction = Mat()
  *         CHKERR( PCMGGetRestriction(self.pc, clevel, &restriction.mat) )
  *         PetscINCREF(restriction.obj)             # <<<<<<<<<<<<<<
@@ -143004,7 +146584,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120getMGRestriction(struct PyPets
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_restriction->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":470
+  /* "PETSc/PC.pyx":521
  *         CHKERR( PCMGGetRestriction(self.pc, clevel, &restriction.mat) )
  *         PetscINCREF(restriction.obj)
  *         return restriction             # <<<<<<<<<<<<<<
@@ -143016,7 +146596,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120getMGRestriction(struct PyPets
   __pyx_r = ((PyObject *)__pyx_v_restriction);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":465
+  /* "PETSc/PC.pyx":516
  *         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )
  * 
  *     def getMGRestriction(self, level):             # <<<<<<<<<<<<<<
@@ -143036,7 +146616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120getMGRestriction(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":472
+/* "PETSc/PC.pyx":523
  *         return restriction
  * 
  *     def setMGRScale(self, level, Vec rscale not None):             # <<<<<<<<<<<<<<
@@ -143045,14 +146625,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120getMGRestriction(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_123setMGRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_122setMGRScale[] = "PC.setMGRScale(self, level, Vec rscale)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_123setMGRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_141setMGRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_140setMGRScale[] = "PC.setMGRScale(self, level, Vec rscale)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_141setMGRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscVecObject *__pyx_v_rscale = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMGRScale (wrapper)", 0);
@@ -143076,11 +146653,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_123setMGRScale(PyObject *__pyx_v_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rscale)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMGRScale", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setMGRScale", 1, 2, 2, 1); __PYX_ERR(34, 523, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRScale") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRScale") < 0)) __PYX_ERR(34, 523, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -143093,14 +146670,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_123setMGRScale(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGRScale", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMGRScale", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 523, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGRScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rscale), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "rscale", 0))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_122setMGRScale(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_rscale);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rscale), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "rscale", 0))) __PYX_ERR(34, 523, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_140setMGRScale(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_rscale);
 
   /* function exit code */
   goto __pyx_L0;
@@ -143111,37 +146688,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_123setMGRScale(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122setMGRScale(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rscale) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_140setMGRScale(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rscale) {
   PetscInt __pyx_v_clevel;
   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("setMGRScale", 0);
 
-  /* "PETSc/PC.pyx":473
+  /* "PETSc/PC.pyx":524
  * 
  *     def setMGRScale(self, level, Vec rscale not None):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 524, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":474
+  /* "PETSc/PC.pyx":525
  *     def setMGRScale(self, level, Vec rscale not None):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def getMGRScale(self, level):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetRScale(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_rscale->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetRScale(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_rscale->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 525, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":472
+  /* "PETSc/PC.pyx":523
  *         return restriction
  * 
  *     def setMGRScale(self, level, Vec rscale not None):             # <<<<<<<<<<<<<<
@@ -143161,7 +146735,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122setMGRScale(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":476
+/* "PETSc/PC.pyx":527
  *         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )
  * 
  *     def getMGRScale(self, level):             # <<<<<<<<<<<<<<
@@ -143170,13 +146744,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122setMGRScale(struct PyPetscPCOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_125getMGRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_124getMGRScale[] = "PC.getMGRScale(self, level)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_125getMGRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_143getMGRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_142getMGRScale[] = "PC.getMGRScale(self, level)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_143getMGRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMGRScale (wrapper)", 0);
@@ -143198,7 +146769,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_125getMGRScale(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, "getMGRScale") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGRScale") < 0)) __PYX_ERR(34, 527, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -143209,20 +146780,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_125getMGRScale(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGRScale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getMGRScale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 527, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGRScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_124getMGRScale(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_142getMGRScale(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGRScale(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_142getMGRScale(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
   PetscInt __pyx_v_clevel;
   struct PyPetscVecObject *__pyx_v_rscale = 0;
   PyObject *__pyx_r = NULL;
@@ -143230,43 +146801,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGRScale(struct PyPetscPCOb
   PetscInt __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("getMGRScale", 0);
 
-  /* "PETSc/PC.pyx":477
+  /* "PETSc/PC.pyx":528
  * 
  *     def getMGRScale(self, level):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         cdef Vec rscale = Vec()
  *         CHKERR( PCMGGetRScale(self.pc, clevel, &rscale.vec) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 528, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":478
+  /* "PETSc/PC.pyx":529
  *     def getMGRScale(self, level):
  *         cdef PetscInt clevel = asInt(level)
  *         cdef Vec rscale = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGGetRScale(self.pc, clevel, &rscale.vec) )
  *         PetscINCREF(rscale.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 529, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_rscale = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":479
+  /* "PETSc/PC.pyx":530
  *         cdef PetscInt clevel = asInt(level)
  *         cdef Vec rscale = Vec()
  *         CHKERR( PCMGGetRScale(self.pc, clevel, &rscale.vec) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(rscale.obj)
  *         return rscale
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetRScale(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_rscale->vec))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetRScale(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_rscale->vec))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(34, 530, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":480
+  /* "PETSc/PC.pyx":531
  *         cdef Vec rscale = Vec()
  *         CHKERR( PCMGGetRScale(self.pc, clevel, &rscale.vec) )
  *         PetscINCREF(rscale.obj)             # <<<<<<<<<<<<<<
@@ -143275,7 +146843,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGRScale(struct PyPetscPCOb
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_rscale->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":481
+  /* "PETSc/PC.pyx":532
  *         CHKERR( PCMGGetRScale(self.pc, clevel, &rscale.vec) )
  *         PetscINCREF(rscale.obj)
  *         return rscale             # <<<<<<<<<<<<<<
@@ -143287,7 +146855,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGRScale(struct PyPetscPCOb
   __pyx_r = ((PyObject *)__pyx_v_rscale);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":476
+  /* "PETSc/PC.pyx":527
  *         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )
  * 
  *     def getMGRScale(self, level):             # <<<<<<<<<<<<<<
@@ -143307,7 +146875,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGRScale(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":483
+/* "PETSc/PC.pyx":534
  *         return rscale
  * 
  *     def getMGSmoother(self, level):             # <<<<<<<<<<<<<<
@@ -143316,13 +146884,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGRScale(struct PyPetscPCOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127getMGSmoother(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_126getMGSmoother[] = "PC.getMGSmoother(self, level)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127getMGSmoother(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_145getMGSmoother(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_144getMGSmoother[] = "PC.getMGSmoother(self, level)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_145getMGSmoother(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMGSmoother (wrapper)", 0);
@@ -143344,7 +146909,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127getMGSmoother(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, "getMGSmoother") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGSmoother") < 0)) __PYX_ERR(34, 534, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -143355,20 +146920,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127getMGSmoother(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGSmoother", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getMGSmoother", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 534, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGSmoother", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_126getMGSmoother(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_144getMGSmoother(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126getMGSmoother(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_144getMGSmoother(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
   PetscInt __pyx_v_clevel;
   struct PyPetscKSPObject *__pyx_v_ksp = 0;
   PyObject *__pyx_r = NULL;
@@ -143376,43 +146941,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126getMGSmoother(struct PyPetscPC
   PetscInt __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("getMGSmoother", 0);
 
-  /* "PETSc/PC.pyx":484
+  /* "PETSc/PC.pyx":535
  * 
  *     def getMGSmoother(self, level):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmoother(self.pc, clevel, &ksp.ksp) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 535, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":485
+  /* "PETSc/PC.pyx":536
  *     def getMGSmoother(self, level):
  *         cdef PetscInt clevel = asInt(level)
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGGetSmoother(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_KSP)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 536, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":486
+  /* "PETSc/PC.pyx":537
  *         cdef PetscInt clevel = asInt(level)
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmoother(self.pc, clevel, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetSmoother(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetSmoother(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(34, 537, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":487
+  /* "PETSc/PC.pyx":538
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmoother(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -143421,7 +146983,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126getMGSmoother(struct PyPetscPC
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":488
+  /* "PETSc/PC.pyx":539
  *         CHKERR( PCMGGetSmoother(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -143433,7 +146995,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126getMGSmoother(struct PyPetscPC
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":483
+  /* "PETSc/PC.pyx":534
  *         return rscale
  * 
  *     def getMGSmoother(self, level):             # <<<<<<<<<<<<<<
@@ -143453,7 +147015,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126getMGSmoother(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":490
+/* "PETSc/PC.pyx":541
  *         return ksp
  * 
  *     def getMGSmootherDown(self, level):             # <<<<<<<<<<<<<<
@@ -143462,13 +147024,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126getMGSmoother(struct PyPetscPC
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_129getMGSmootherDown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_128getMGSmootherDown[] = "PC.getMGSmootherDown(self, level)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_129getMGSmootherDown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_147getMGSmootherDown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_146getMGSmootherDown[] = "PC.getMGSmootherDown(self, level)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_147getMGSmootherDown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMGSmootherDown (wrapper)", 0);
@@ -143490,7 +147049,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_129getMGSmootherDown(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGSmootherDown") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGSmootherDown") < 0)) __PYX_ERR(34, 541, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -143501,20 +147060,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_129getMGSmootherDown(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGSmootherDown", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getMGSmootherDown", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 541, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGSmootherDown", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_128getMGSmootherDown(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_146getMGSmootherDown(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGSmootherDown(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_146getMGSmootherDown(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
   PetscInt __pyx_v_clevel;
   struct PyPetscKSPObject *__pyx_v_ksp = 0;
   PyObject *__pyx_r = NULL;
@@ -143522,43 +147081,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGSmootherDown(struct PyPet
   PetscInt __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("getMGSmootherDown", 0);
 
-  /* "PETSc/PC.pyx":491
+  /* "PETSc/PC.pyx":542
  * 
  *     def getMGSmootherDown(self, level):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmootherDown(self.pc, clevel, &ksp.ksp) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 542, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":492
+  /* "PETSc/PC.pyx":543
  *     def getMGSmootherDown(self, level):
  *         cdef PetscInt clevel = asInt(level)
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGGetSmootherDown(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_KSP)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 543, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":493
+  /* "PETSc/PC.pyx":544
  *         cdef PetscInt clevel = asInt(level)
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmootherDown(self.pc, clevel, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetSmootherDown(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetSmootherDown(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(34, 544, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":494
+  /* "PETSc/PC.pyx":545
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmootherDown(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -143567,7 +147123,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGSmootherDown(struct PyPet
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":495
+  /* "PETSc/PC.pyx":546
  *         CHKERR( PCMGGetSmootherDown(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -143579,7 +147135,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGSmootherDown(struct PyPet
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":490
+  /* "PETSc/PC.pyx":541
  *         return ksp
  * 
  *     def getMGSmootherDown(self, level):             # <<<<<<<<<<<<<<
@@ -143599,7 +147155,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGSmootherDown(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":497
+/* "PETSc/PC.pyx":548
  *         return ksp
  * 
  *     def getMGSmootherUp(self, level):             # <<<<<<<<<<<<<<
@@ -143608,13 +147164,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGSmootherDown(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_131getMGSmootherUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_130getMGSmootherUp[] = "PC.getMGSmootherUp(self, level)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_131getMGSmootherUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_149getMGSmootherUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_148getMGSmootherUp[] = "PC.getMGSmootherUp(self, level)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_149getMGSmootherUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMGSmootherUp (wrapper)", 0);
@@ -143636,7 +147189,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_131getMGSmootherUp(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, "getMGSmootherUp") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGSmootherUp") < 0)) __PYX_ERR(34, 548, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -143647,20 +147200,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_131getMGSmootherUp(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGSmootherUp", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getMGSmootherUp", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 548, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGSmootherUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_130getMGSmootherUp(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_148getMGSmootherUp(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGSmootherUp(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_148getMGSmootherUp(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level) {
   PetscInt __pyx_v_clevel;
   struct PyPetscKSPObject *__pyx_v_ksp = 0;
   PyObject *__pyx_r = NULL;
@@ -143668,43 +147221,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGSmootherUp(struct PyPetsc
   PetscInt __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("getMGSmootherUp", 0);
 
-  /* "PETSc/PC.pyx":498
+  /* "PETSc/PC.pyx":549
  * 
  *     def getMGSmootherUp(self, level):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmootherUp(self.pc, clevel, &ksp.ksp) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 549, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":499
+  /* "PETSc/PC.pyx":550
  *     def getMGSmootherUp(self, level):
  *         cdef PetscInt clevel = asInt(level)
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGGetSmootherUp(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_KSP)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 550, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":500
+  /* "PETSc/PC.pyx":551
  *         cdef PetscInt clevel = asInt(level)
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmootherUp(self.pc, clevel, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetSmootherUp(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetSmootherUp(__pyx_v_self->pc, __pyx_v_clevel, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(34, 551, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":501
+  /* "PETSc/PC.pyx":552
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmootherUp(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -143713,7 +147263,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGSmootherUp(struct PyPetsc
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":502
+  /* "PETSc/PC.pyx":553
  *         CHKERR( PCMGGetSmootherUp(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -143725,7 +147275,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGSmootherUp(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":497
+  /* "PETSc/PC.pyx":548
  *         return ksp
  * 
  *     def getMGSmootherUp(self, level):             # <<<<<<<<<<<<<<
@@ -143745,7 +147295,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGSmootherUp(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":504
+/* "PETSc/PC.pyx":555
  *         return ksp
  * 
  *     def setMGCyclesOnLevel(self, level, ncycle):             # <<<<<<<<<<<<<<
@@ -143754,14 +147304,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGSmootherUp(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGCyclesOnLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_132setMGCyclesOnLevel[] = "PC.setMGCyclesOnLevel(self, level, ncycle)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGCyclesOnLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_151setMGCyclesOnLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_150setMGCyclesOnLevel[] = "PC.setMGCyclesOnLevel(self, level, ncycle)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_151setMGCyclesOnLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   PyObject *__pyx_v_ncycle = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMGCyclesOnLevel (wrapper)", 0);
@@ -143785,11 +147332,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGCyclesOnLevel(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncycle)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMGCyclesOnLevel", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setMGCyclesOnLevel", 1, 2, 2, 1); __PYX_ERR(34, 555, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGCyclesOnLevel") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGCyclesOnLevel") < 0)) __PYX_ERR(34, 555, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -143802,61 +147349,58 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGCyclesOnLevel(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGCyclesOnLevel", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMGCyclesOnLevel", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 555, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGCyclesOnLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_132setMGCyclesOnLevel(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_ncycle);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_150setMGCyclesOnLevel(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_ncycle);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_132setMGCyclesOnLevel(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, PyObject *__pyx_v_ncycle) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_150setMGCyclesOnLevel(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, PyObject *__pyx_v_ncycle) {
   PetscInt __pyx_v_clevel;
   PetscInt __pyx_v_c;
   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("setMGCyclesOnLevel", 0);
 
-  /* "PETSc/PC.pyx":505
+  /* "PETSc/PC.pyx":556
  * 
  *     def setMGCyclesOnLevel(self, level, ncycle):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         cdef PetscInt c = asInt(ncycle)
  *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 556, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":506
+  /* "PETSc/PC.pyx":557
  *     def setMGCyclesOnLevel(self, level, ncycle):
  *         cdef PetscInt clevel = asInt(level)
  *         cdef PetscInt c = asInt(ncycle)             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_ncycle); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_ncycle); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 557, __pyx_L1_error)
   __pyx_v_c = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":507
+  /* "PETSc/PC.pyx":558
  *         cdef PetscInt clevel = asInt(level)
  *         cdef PetscInt c = asInt(ncycle)
  *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )             # <<<<<<<<<<<<<<
  * 
  *     def setMGRhs(self, level, Vec rhs not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetCyclesOnLevel(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_c)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetCyclesOnLevel(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_c)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 558, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":504
+  /* "PETSc/PC.pyx":555
  *         return ksp
  * 
  *     def setMGCyclesOnLevel(self, level, ncycle):             # <<<<<<<<<<<<<<
@@ -143876,7 +147420,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_132setMGCyclesOnLevel(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":509
+/* "PETSc/PC.pyx":560
  *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
  * 
  *     def setMGRhs(self, level, Vec rhs not None):             # <<<<<<<<<<<<<<
@@ -143885,14 +147429,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_132setMGCyclesOnLevel(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135setMGRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_134setMGRhs[] = "PC.setMGRhs(self, level, Vec rhs)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135setMGRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_153setMGRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_152setMGRhs[] = "PC.setMGRhs(self, level, Vec rhs)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_153setMGRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscVecObject *__pyx_v_rhs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMGRhs (wrapper)", 0);
@@ -143916,11 +147457,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135setMGRhs(PyObject *__pyx_v_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rhs)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMGRhs", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setMGRhs", 1, 2, 2, 1); __PYX_ERR(34, 560, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRhs") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRhs") < 0)) __PYX_ERR(34, 560, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -143933,14 +147474,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135setMGRhs(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGRhs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMGRhs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 560, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGRhs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rhs), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "rhs", 0))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_134setMGRhs(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_rhs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rhs), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "rhs", 0))) __PYX_ERR(34, 560, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_152setMGRhs(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_rhs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -143951,37 +147492,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135setMGRhs(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134setMGRhs(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rhs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_152setMGRhs(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rhs) {
   PetscInt __pyx_v_clevel;
   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("setMGRhs", 0);
 
-  /* "PETSc/PC.pyx":510
+  /* "PETSc/PC.pyx":561
  * 
  *     def setMGRhs(self, level, Vec rhs not None):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 561, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":511
+  /* "PETSc/PC.pyx":562
  *     def setMGRhs(self, level, Vec rhs not None):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def setMGX(self, level, Vec x not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetRhs(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_rhs->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetRhs(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_rhs->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 562, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":509
+  /* "PETSc/PC.pyx":560
  *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
  * 
  *     def setMGRhs(self, level, Vec rhs not None):             # <<<<<<<<<<<<<<
@@ -144001,7 +147539,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134setMGRhs(struct PyPetscPCObjec
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":513
+/* "PETSc/PC.pyx":564
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )
  * 
  *     def setMGX(self, level, Vec x not None):             # <<<<<<<<<<<<<<
@@ -144010,14 +147548,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134setMGRhs(struct PyPetscPCObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGX(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_136setMGX[] = "PC.setMGX(self, level, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGX(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_155setMGX(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_154setMGX[] = "PC.setMGX(self, level, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_155setMGX(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMGX (wrapper)", 0);
@@ -144041,11 +147576,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGX(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMGX", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setMGX", 1, 2, 2, 1); __PYX_ERR(34, 564, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGX") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGX") < 0)) __PYX_ERR(34, 564, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -144058,14 +147593,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGX(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGX", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMGX", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 564, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGX", __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[34]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_136setMGX(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(34, 564, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_154setMGX(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -144076,37 +147611,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGX(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_136setMGX(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_154setMGX(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_x) {
   PetscInt __pyx_v_clevel;
   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("setMGX", 0);
 
-  /* "PETSc/PC.pyx":514
+  /* "PETSc/PC.pyx":565
  * 
  *     def setMGX(self, level, Vec x not None):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 565, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":515
+  /* "PETSc/PC.pyx":566
  *     def setMGX(self, level, Vec x not None):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def setMGR(self, level, Vec r not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetX(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_x->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetX(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_x->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 566, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":513
+  /* "PETSc/PC.pyx":564
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )
  * 
  *     def setMGX(self, level, Vec x not None):             # <<<<<<<<<<<<<<
@@ -144126,7 +147658,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_136setMGX(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":517
+/* "PETSc/PC.pyx":568
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )
  * 
  *     def setMGR(self, level, Vec r not None):             # <<<<<<<<<<<<<<
@@ -144135,14 +147667,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_136setMGX(struct PyPetscPCObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139setMGR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2PC_138setMGR[] = "PC.setMGR(self, level, Vec r)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139setMGR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_157setMGR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_156setMGR[] = "PC.setMGR(self, level, Vec r)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_157setMGR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscVecObject *__pyx_v_r = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMGR (wrapper)", 0);
@@ -144166,11 +147695,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139setMGR(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_r)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMGR", 1, 2, 2, 1); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setMGR", 1, 2, 2, 1); __PYX_ERR(34, 568, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGR") < 0)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGR") < 0)) __PYX_ERR(34, 568, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -144183,14 +147712,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139setMGR(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGR", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[34]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMGR", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 568, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_r), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "r", 0))) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_138setMGR(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_r);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_r), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "r", 0))) __PYX_ERR(34, 568, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_156setMGR(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_r);
 
   /* function exit code */
   goto __pyx_L0;
@@ -144201,37 +147730,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139setMGR(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_138setMGR(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_r) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_156setMGR(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_r) {
   PetscInt __pyx_v_clevel;
   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("setMGR", 0);
 
-  /* "PETSc/PC.pyx":518
+  /* "PETSc/PC.pyx":569
  * 
  *     def setMGR(self, level, Vec r not None):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGSetR(self.pc, clevel, r.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(34, 569, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":519
+  /* "PETSc/PC.pyx":570
  *     def setMGR(self, level, Vec r not None):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetR(self.pc, clevel, r.vec) )             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetR(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_r->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetR(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_r->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(34, 570, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":517
+  /* "PETSc/PC.pyx":568
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )
  * 
  *     def setMGR(self, level, Vec r not None):             # <<<<<<<<<<<<<<
@@ -144251,7 +147777,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_138setMGR(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":87
+/* "PETSc/KSP.pyx":94
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -144280,7 +147806,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/KSP.pyx":88
+  /* "PETSc/KSP.pyx":95
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.ksp             # <<<<<<<<<<<<<<
@@ -144289,7 +147815,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__p
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->ksp));
 
-  /* "PETSc/KSP.pyx":89
+  /* "PETSc/KSP.pyx":96
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.ksp
  *         self.ksp = NULL             # <<<<<<<<<<<<<<
@@ -144298,7 +147824,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__p
  */
   __pyx_v_self->ksp = NULL;
 
-  /* "PETSc/KSP.pyx":87
+  /* "PETSc/KSP.pyx":94
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -144312,7 +147838,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":91
+/* "PETSc/KSP.pyx":98
  *         self.ksp = NULL
  * 
  *     def __call__(self, b, x=None):             # <<<<<<<<<<<<<<
@@ -144325,9 +147851,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_3__call__(PyObject *__pyx_v_self
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_b = 0;
   PyObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
@@ -144356,7 +147879,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_3__call__(PyObject *__pyx_v_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(35, 98, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -144371,7 +147894,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_3__call__(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 98, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -144394,13 +147917,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   Py_ssize_t __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
   __Pyx_INCREF(__pyx_v_x);
 
-  /* "PETSc/KSP.pyx":92
+  /* "PETSc/KSP.pyx":99
  * 
  *     def __call__(self, b, x=None):
  *         if x is None: # XXX do this better             # <<<<<<<<<<<<<<
@@ -144411,14 +147931,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/KSP.pyx":93
+    /* "PETSc/KSP.pyx":100
  *     def __call__(self, b, x=None):
  *         if x is None: # XXX do this better
  *             x = self.getOperators()[0].createVecLeft()             # <<<<<<<<<<<<<<
  *         self.solve(b, x)
  *         return x
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOperators); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOperators); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 100, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -144431,17 +147951,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
       }
     }
     if (__pyx_t_6) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 100, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
-      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 100, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 100, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 100, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_5 = NULL;
@@ -144455,27 +147975,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
       }
     }
     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[35]; __pyx_lineno = 93; __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(35, 100, __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[35]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 100, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/KSP.pyx":99
+ * 
+ *     def __call__(self, b, x=None):
+ *         if x is None: # XXX do this better             # <<<<<<<<<<<<<<
+ *             x = self.getOperators()[0].createVecLeft()
+ *         self.solve(b, x)
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":94
+  /* "PETSc/KSP.pyx":101
  *         if x is None: # XXX do this better
  *             x = self.getOperators()[0].createVecLeft()
  *         self.solve(b, x)             # <<<<<<<<<<<<<<
  *         return x
  * 
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_solve); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_solve); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_7 = 0;
@@ -144489,7 +148015,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
       __pyx_t_7 = 1;
     }
   }
-  __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(35, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   if (__pyx_t_5) {
     __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
@@ -144500,13 +148026,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
   __Pyx_INCREF(__pyx_v_x);
   __Pyx_GIVEREF(__pyx_v_x);
   PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_7, __pyx_v_x);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":95
+  /* "PETSc/KSP.pyx":102
  *             x = self.getOperators()[0].createVecLeft()
  *         self.solve(b, x)
  *         return x             # <<<<<<<<<<<<<<
@@ -144518,7 +148044,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
   __pyx_r = __pyx_v_x;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":91
+  /* "PETSc/KSP.pyx":98
  *         self.ksp = NULL
  * 
  *     def __call__(self, b, x=None):             # <<<<<<<<<<<<<<
@@ -144541,7 +148067,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":99
+/* "PETSc/KSP.pyx":106
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -144554,9 +148080,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_5view(PyObject *__pyx_v_self, Py
 static char __pyx_doc_8petsc4py_5PETSc_3KSP_4view[] = "KSP.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_5view(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);
@@ -144581,7 +148104,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_5view(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[35]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(35, 106, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -144594,13 +148117,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_5view(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[35]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 106, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.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[35]; __pyx_lineno = 99; __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(35, 106, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_4view(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -144620,12 +148143,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *_
   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);
 
-  /* "PETSc/KSP.pyx":100
+  /* "PETSc/KSP.pyx":107
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -144634,7 +148154,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *_
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/KSP.pyx":101
+  /* "PETSc/KSP.pyx":108
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -144646,20 +148166,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *_
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":102
+  /* "PETSc/KSP.pyx":109
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( KSPView(self.ksp, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPView(__pyx_v_self->ksp, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPView(__pyx_v_self->ksp, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 109, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":99
+  /* "PETSc/KSP.pyx":106
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -144679,7 +148197,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *_
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":104
+/* "PETSc/KSP.pyx":111
  *         CHKERR( KSPView(self.ksp, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -144708,21 +148226,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6destroy(struct PyPetscKSPObject
   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);
 
-  /* "PETSc/KSP.pyx":105
+  /* "PETSc/KSP.pyx":112
  * 
  *     def destroy(self):
  *         CHKERR( KSPDestroy(&self.ksp) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPDestroy((&__pyx_v_self->ksp))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPDestroy((&__pyx_v_self->ksp))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 112, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":106
+  /* "PETSc/KSP.pyx":113
  *     def destroy(self):
  *         CHKERR( KSPDestroy(&self.ksp) )
  *         return self             # <<<<<<<<<<<<<<
@@ -144734,7 +148249,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6destroy(struct PyPetscKSPObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":104
+  /* "PETSc/KSP.pyx":111
  *         CHKERR( KSPView(self.ksp, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -144752,7 +148267,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6destroy(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":108
+/* "PETSc/KSP.pyx":115
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -144765,9 +148280,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_9create(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_3KSP_8create[] = "KSP.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_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);
@@ -144792,7 +148304,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_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[35]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(35, 115, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -144805,7 +148317,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_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[35]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 115, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -144825,22 +148337,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
   __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);
 
-  /* "PETSc/KSP.pyx":109
+  /* "PETSc/KSP.pyx":116
  * 
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscKSP newksp = NULL
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 116, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":110
+  /* "PETSc/KSP.pyx":117
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscKSP newksp = NULL             # <<<<<<<<<<<<<<
@@ -144849,16 +148358,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
  */
   __pyx_v_newksp = NULL;
 
-  /* "PETSc/KSP.pyx":111
+  /* "PETSc/KSP.pyx":118
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscKSP newksp = NULL
  *         CHKERR( KSPCreate(ccomm, &newksp) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.ksp = newksp
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPCreate(__pyx_v_ccomm, (&__pyx_v_newksp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPCreate(__pyx_v_ccomm, (&__pyx_v_newksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 118, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":112
+  /* "PETSc/KSP.pyx":119
  *         cdef PetscKSP newksp = NULL
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  *         PetscCLEAR(self.obj); self.ksp = newksp             # <<<<<<<<<<<<<<
@@ -144868,7 +148377,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->ksp = __pyx_v_newksp;
 
-  /* "PETSc/KSP.pyx":113
+  /* "PETSc/KSP.pyx":120
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  *         PetscCLEAR(self.obj); self.ksp = newksp
  *         return self             # <<<<<<<<<<<<<<
@@ -144880,7 +148389,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":108
+  /* "PETSc/KSP.pyx":115
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -144898,7 +148407,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":115
+/* "PETSc/KSP.pyx":122
  *         return self
  * 
  *     def setType(self, ksp_type):             # <<<<<<<<<<<<<<
@@ -144911,9 +148420,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_11setType(PyObject *__pyx_v_self
 static char __pyx_doc_8petsc4py_5PETSc_3KSP_10setType[] = "KSP.setType(self, ksp_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ksp_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);
@@ -144935,7 +148441,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_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[35]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(35, 122, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -144946,7 +148452,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_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[35]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 122, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -144965,13 +148471,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_10setType(struct PyPetscKSPObjec
   __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_ksp_type);
 
-  /* "PETSc/KSP.pyx":116
+  /* "PETSc/KSP.pyx":123
  * 
  *     def setType(self, ksp_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -144980,28 +148483,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_10setType(struct PyPetscKSPObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":117
+  /* "PETSc/KSP.pyx":124
  *     def setType(self, ksp_type):
  *         cdef const_char *cval = NULL
  *         ksp_type = str2bytes(ksp_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetType(self.ksp, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ksp_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ksp_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_ksp_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":118
+  /* "PETSc/KSP.pyx":125
  *         cdef const_char *cval = NULL
  *         ksp_type = str2bytes(ksp_type, &cval)
  *         CHKERR( KSPSetType(self.ksp, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetType(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetType(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 125, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":115
+  /* "PETSc/KSP.pyx":122
  *         return self
  * 
  *     def setType(self, ksp_type):             # <<<<<<<<<<<<<<
@@ -145023,7 +148526,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_10setType(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":120
+/* "PETSc/KSP.pyx":127
  *         CHKERR( KSPSetType(self.ksp, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -145054,12 +148557,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObjec
   __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);
 
-  /* "PETSc/KSP.pyx":121
+  /* "PETSc/KSP.pyx":128
  * 
  *     def getType(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -145068,16 +148568,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":122
+  /* "PETSc/KSP.pyx":129
  *     def getType(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( KSPGetType(self.ksp, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetType(__pyx_v_self->ksp, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetType(__pyx_v_self->ksp, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 129, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":123
+  /* "PETSc/KSP.pyx":130
  *         cdef const_char *cval = NULL
  *         CHKERR( KSPGetType(self.ksp, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -145085,13 +148585,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObjec
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":120
+  /* "PETSc/KSP.pyx":127
  *         CHKERR( KSPSetType(self.ksp, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -145110,7 +148610,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":125
+/* "PETSc/KSP.pyx":132
  *         return bytes2str(cval)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -145123,9 +148623,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_15setOptionsPrefix(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_3KSP_14setOptionsPrefix[] = "KSP.setOptionsPrefix(self, prefix)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_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);
@@ -145147,7 +148644,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_15setOptionsPrefix(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[35]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(35, 132, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -145158,7 +148655,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_15setOptionsPrefix(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[35]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 132, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -145177,13 +148674,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_14setOptionsPrefix(struct PyPets
   __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);
 
-  /* "PETSc/KSP.pyx":126
+  /* "PETSc/KSP.pyx":133
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -145192,28 +148686,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_14setOptionsPrefix(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":127
+  /* "PETSc/KSP.pyx":134
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetOptionsPrefix(self.ksp, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":128
+  /* "PETSc/KSP.pyx":135
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
  *         CHKERR( KSPSetOptionsPrefix(self.ksp, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetOptionsPrefix(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetOptionsPrefix(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 135, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":125
+  /* "PETSc/KSP.pyx":132
  *         return bytes2str(cval)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -145235,7 +148729,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_14setOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":130
+/* "PETSc/KSP.pyx":137
  *         CHKERR( KSPSetOptionsPrefix(self.ksp, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -145266,12 +148760,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPets
   __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);
 
-  /* "PETSc/KSP.pyx":131
+  /* "PETSc/KSP.pyx":138
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -145280,16 +148771,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":132
+  /* "PETSc/KSP.pyx":139
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( KSPGetOptionsPrefix(self.ksp, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetOptionsPrefix(__pyx_v_self->ksp, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetOptionsPrefix(__pyx_v_self->ksp, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 139, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":133
+  /* "PETSc/KSP.pyx":140
  *         cdef const_char *cval = NULL
  *         CHKERR( KSPGetOptionsPrefix(self.ksp, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -145297,13 +148788,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPets
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 140, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":130
+  /* "PETSc/KSP.pyx":137
  *         CHKERR( KSPSetOptionsPrefix(self.ksp, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -145322,7 +148813,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":135
+/* "PETSc/KSP.pyx":142
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -145351,21 +148842,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_18setFromOptions(struct PyPetscK
   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);
 
-  /* "PETSc/KSP.pyx":136
+  /* "PETSc/KSP.pyx":143
  * 
  *     def setFromOptions(self):
  *         CHKERR( KSPSetFromOptions(self.ksp) )             # <<<<<<<<<<<<<<
  * 
  *     # --- application context ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetFromOptions(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetFromOptions(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 143, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":135
+  /* "PETSc/KSP.pyx":142
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -145385,7 +148873,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_18setFromOptions(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":140
+/* "PETSc/KSP.pyx":147
  *     # --- application context ---
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -145398,9 +148886,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_21setAppCtx(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_3KSP_20setAppCtx[] = "KSP.setAppCtx(self, appctx)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_21setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_appctx = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAppCtx (wrapper)", 0);
@@ -145422,7 +148907,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_21setAppCtx(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, "setAppCtx") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) __PYX_ERR(35, 147, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -145433,7 +148918,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_21setAppCtx(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 147, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -145450,23 +148935,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_20setAppCtx(struct PyPetscKSPObj
   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("setAppCtx", 0);
 
-  /* "PETSc/KSP.pyx":141
+  /* "PETSc/KSP.pyx":148
  * 
  *     def setAppCtx(self, appctx):
  *         self.set_attr('__appctx__', appctx)             # <<<<<<<<<<<<<<
  * 
  *     def getAppCtx(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2, __pyx_v_appctx); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__"), __pyx_v_appctx); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 148, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":140
+  /* "PETSc/KSP.pyx":147
  *     # --- application context ---
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -145487,7 +148969,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_20setAppCtx(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":143
+/* "PETSc/KSP.pyx":150
  *         self.set_attr('__appctx__', appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -145516,12 +148998,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_22getAppCtx(struct PyPetscKSPObj
   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("getAppCtx", 0);
 
-  /* "PETSc/KSP.pyx":144
+  /* "PETSc/KSP.pyx":151
  * 
  *     def getAppCtx(self):
  *         return self.get_attr('__appctx__')             # <<<<<<<<<<<<<<
@@ -145529,13 +149008,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_22getAppCtx(struct PyPetscKSPObj
  *     # --- discretization space ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 151, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":143
+  /* "PETSc/KSP.pyx":150
  *         self.set_attr('__appctx__', appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -145554,7 +149033,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_22getAppCtx(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":148
+/* "PETSc/KSP.pyx":155
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -145587,12 +149066,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
   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("getDM", 0);
 
-  /* "PETSc/KSP.pyx":149
+  /* "PETSc/KSP.pyx":156
  * 
  *     def getDM(self):
  *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
@@ -145601,32 +149077,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/KSP.pyx":150
+  /* "PETSc/KSP.pyx":157
  *     def getDM(self):
  *         cdef PetscDM newdm = NULL
  *         CHKERR( KSPGetDM(self.ksp, &newdm) )             # <<<<<<<<<<<<<<
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetDM(__pyx_v_self->ksp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetDM(__pyx_v_self->ksp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 157, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":151
+  /* "PETSc/KSP.pyx":158
  *         cdef PetscDM newdm = NULL
  *         CHKERR( KSPGetDM(self.ksp, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()             # <<<<<<<<<<<<<<
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 158, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 158, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(35, 158, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":152
+  /* "PETSc/KSP.pyx":159
  *         CHKERR( KSPGetDM(self.ksp, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm             # <<<<<<<<<<<<<<
@@ -145635,7 +149111,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
  */
   __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/KSP.pyx":153
+  /* "PETSc/KSP.pyx":160
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
@@ -145644,7 +149120,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":154
+  /* "PETSc/KSP.pyx":161
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  *         return dm             # <<<<<<<<<<<<<<
@@ -145656,7 +149132,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":148
+  /* "PETSc/KSP.pyx":155
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -145677,7 +149153,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":156
+/* "PETSc/KSP.pyx":163
  *         return dm
  * 
  *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
@@ -145690,9 +149166,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_27setDM(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_3KSP_26setDM[] = "KSP.setDM(self, DM dm)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_27setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscDMObject *__pyx_v_dm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDM (wrapper)", 0);
@@ -145714,7 +149187,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_27setDM(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, "setDM") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) __PYX_ERR(35, 163, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -145725,13 +149198,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_27setDM(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 163, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(35, 163, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_26setDM(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
@@ -145747,21 +149220,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_26setDM(struct PyPetscKSPObject
   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("setDM", 0);
 
-  /* "PETSc/KSP.pyx":157
+  /* "PETSc/KSP.pyx":164
  * 
  *     def setDM(self, DM dm not None):
  *         CHKERR( KSPSetDM(self.ksp, dm.dm) )             # <<<<<<<<<<<<<<
  * 
  *     def setDMActive(self, bint flag):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetDM(__pyx_v_self->ksp, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetDM(__pyx_v_self->ksp, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 164, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":156
+  /* "PETSc/KSP.pyx":163
  *         return dm
  * 
  *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
@@ -145781,7 +149251,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_26setDM(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":159
+/* "PETSc/KSP.pyx":166
  *         CHKERR( KSPSetDM(self.ksp, dm.dm) )
  * 
  *     def setDMActive(self, bint flag):             # <<<<<<<<<<<<<<
@@ -145794,9 +149264,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_29setDMActive(PyObject *__pyx_v_
 static char __pyx_doc_8petsc4py_5PETSc_3KSP_28setDMActive[] = "KSP.setDMActive(self, bool flag)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_29setDMActive(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_flag;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDMActive (wrapper)", 0);
@@ -145818,18 +149285,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_29setDMActive(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, "setDMActive") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDMActive") < 0)) __PYX_ERR(35, 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_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 166, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDMActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDMActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 166, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setDMActive", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -145848,12 +149315,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPO
   __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("setDMActive", 0);
 
-  /* "PETSc/KSP.pyx":160
+  /* "PETSc/KSP.pyx":167
  * 
  *     def setDMActive(self, bint flag):
  *         cdef PetscBool cflag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -145862,7 +149326,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPO
  */
   __pyx_v_cflag = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":161
+  /* "PETSc/KSP.pyx":168
  *     def setDMActive(self, bint flag):
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag: cflag = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -145872,20 +149336,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPO
   __pyx_t_1 = (__pyx_v_flag != 0);
   if (__pyx_t_1) {
     __pyx_v_cflag = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":162
+  /* "PETSc/KSP.pyx":169
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag: cflag = PETSC_TRUE
  *         CHKERR( KSPSetDMActive(self.ksp, cflag) )             # <<<<<<<<<<<<<<
  * 
  *     # --- operators and preconditioner ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetDMActive(__pyx_v_self->ksp, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetDMActive(__pyx_v_self->ksp, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 169, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":159
+  /* "PETSc/KSP.pyx":166
  *         CHKERR( KSPSetDM(self.ksp, dm.dm) )
  * 
  *     def setDMActive(self, bint flag):             # <<<<<<<<<<<<<<
@@ -145905,23 +149367,394 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":166
+/* "PETSc/KSP.pyx":173
+ *     # --- operators and preconditioner ---
+ * 
+ *     def setComputeRHS(self, rhs, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setComputeRHS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_30setComputeRHS[] = "KSP.setComputeRHS(self, rhs, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setComputeRHS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_rhs = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setComputeRHS (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rhs,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    PyObject* values[3] = {0,0,0};
+    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 (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rhs)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeRHS") < 0)) __PYX_ERR(35, 173, __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_rhs = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setComputeRHS", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 173, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeRHS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_30setComputeRHS(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_rhs, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setComputeRHS(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rhs, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+  PyObject *__pyx_v_context = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setComputeRHS", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/KSP.pyx":174
+ * 
+ *     def setComputeRHS(self, rhs, args=None, kargs=None):
+ *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *         if kargs is None: kargs = {}
+ *         context = (rhs, 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);
+  }
+
+  /* "PETSc/KSP.pyx":175
+ *     def setComputeRHS(self, rhs, args=None, kargs=None):
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *         context = (rhs, args, kargs)
+ *         self.set_attr('__rhs__', context)
+ */
+  __pyx_t_2 = (__pyx_v_kargs == Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 175, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/KSP.pyx":176
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ *         context = (rhs, args, kargs)             # <<<<<<<<<<<<<<
+ *         self.set_attr('__rhs__', context)
+ *         CHKERR( KSPSetComputeRHS(self.ksp, KSP_ComputeRHS, <void*>context) )
+ */
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 176, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_v_rhs);
+  __Pyx_GIVEREF(__pyx_v_rhs);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_rhs);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_GIVEREF(__pyx_v_args);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+  __Pyx_GIVEREF(__pyx_v_kargs);
+  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+  __pyx_v_context = ((PyObject*)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/KSP.pyx":177
+ *         if kargs is None: kargs = {}
+ *         context = (rhs, args, kargs)
+ *         self.set_attr('__rhs__', context)             # <<<<<<<<<<<<<<
+ *         CHKERR( KSPSetComputeRHS(self.ksp, KSP_ComputeRHS, <void*>context) )
+ * 
+ */
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__rhs__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 177, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/KSP.pyx":178
+ *         context = (rhs, args, kargs)
+ *         self.set_attr('__rhs__', context)
+ *         CHKERR( KSPSetComputeRHS(self.ksp, KSP_ComputeRHS, <void*>context) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setComputeOperators(self, operators, args=None, kargs=None):
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetComputeRHS(__pyx_v_self->ksp, __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 178, __pyx_L1_error)
+
+  /* "PETSc/KSP.pyx":173
  *     # --- operators and preconditioner ---
  * 
+ *     def setComputeRHS(self, rhs, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         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_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeRHS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/KSP.pyx":180
+ *         CHKERR( KSPSetComputeRHS(self.ksp, KSP_ComputeRHS, <void*>context) )
+ * 
+ *     def setComputeOperators(self, operators, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_33setComputeOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_32setComputeOperators[] = "KSP.setComputeOperators(self, operators, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_33setComputeOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_operators = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setComputeOperators (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_operators,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    PyObject* values[3] = {0,0,0};
+    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 (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_operators)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeOperators") < 0)) __PYX_ERR(35, 180, __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_operators = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setComputeOperators", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 180, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_32setComputeOperators(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_operators, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32setComputeOperators(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_operators, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+  PyObject *__pyx_v_context = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setComputeOperators", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/KSP.pyx":181
+ * 
+ *     def setComputeOperators(self, operators, args=None, kargs=None):
+ *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *         if kargs is None: kargs = {}
+ *         context = (operators, 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);
+  }
+
+  /* "PETSc/KSP.pyx":182
+ *     def setComputeOperators(self, operators, args=None, kargs=None):
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *         context = (operators, args, kargs)
+ *         self.set_attr('__operators__', context)
+ */
+  __pyx_t_2 = (__pyx_v_kargs == Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 182, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/KSP.pyx":183
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ *         context = (operators, args, kargs)             # <<<<<<<<<<<<<<
+ *         self.set_attr('__operators__', context)
+ *         CHKERR( KSPSetComputeOperators(self.ksp, KSP_ComputeOps, <void*>context) )
+ */
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 183, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_v_operators);
+  __Pyx_GIVEREF(__pyx_v_operators);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_operators);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_GIVEREF(__pyx_v_args);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+  __Pyx_GIVEREF(__pyx_v_kargs);
+  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+  __pyx_v_context = ((PyObject*)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/KSP.pyx":184
+ *         if kargs is None: kargs = {}
+ *         context = (operators, args, kargs)
+ *         self.set_attr('__operators__', context)             # <<<<<<<<<<<<<<
+ *         CHKERR( KSPSetComputeOperators(self.ksp, KSP_ComputeOps, <void*>context) )
+ * 
+ */
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__operators__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 184, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/KSP.pyx":185
+ *         context = (operators, args, kargs)
+ *         self.set_attr('__operators__', context)
+ *         CHKERR( KSPSetComputeOperators(self.ksp, KSP_ComputeOps, <void*>context) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setOperators(self, Mat A=None, Mat P=None):
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetComputeOperators(__pyx_v_self->ksp, __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 185, __pyx_L1_error)
+
+  /* "PETSc/KSP.pyx":180
+ *         CHKERR( KSPSetComputeRHS(self.ksp, KSP_ComputeRHS, <void*>context) )
+ * 
+ *     def setComputeOperators(self, operators, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         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_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/KSP.pyx":187
+ *         CHKERR( KSPSetComputeOperators(self.ksp, KSP_ComputeOps, <void*>context) )
+ * 
  *     def setOperators(self, Mat A=None, Mat P=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_30setOperators[] = "KSP.setOperators(self, Mat A=None, Mat P=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_34setOperators[] = "KSP.setOperators(self, Mat A=None, Mat P=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_A = 0;
   struct PyPetscMatObject *__pyx_v_P = 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);
@@ -145953,7 +149786,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setOperators(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) __PYX_ERR(35, 187, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -145968,15 +149801,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setOperators(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOperators", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOperators", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 187, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setOperators", __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, 1, "A", 0))) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 166; __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[35]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_A, __pyx_v_P);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "A", 0))) __PYX_ERR(35, 187, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(35, 187, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_A, __pyx_v_P);
 
   /* function exit code */
   goto __pyx_L0;
@@ -145987,7 +149820,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setOperators(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_P) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_P) {
   Mat __pyx_v_amat;
   Mat __pyx_v_pmat;
   PyObject *__pyx_r = NULL;
@@ -145996,12 +149829,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSP
   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);
 
-  /* "PETSc/KSP.pyx":167
+  /* "PETSc/KSP.pyx":188
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):
  *         cdef PetscMat amat=NULL             # <<<<<<<<<<<<<<
@@ -146010,7 +149840,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSP
  */
   __pyx_v_amat = NULL;
 
-  /* "PETSc/KSP.pyx":168
+  /* "PETSc/KSP.pyx":189
  *     def setOperators(self, Mat A=None, Mat P=None):
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat             # <<<<<<<<<<<<<<
@@ -146022,11 +149852,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSP
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_A->mat;
     __pyx_v_amat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":169
+  /* "PETSc/KSP.pyx":190
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat
  *         cdef PetscMat pmat=amat             # <<<<<<<<<<<<<<
@@ -146035,7 +149863,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSP
  */
   __pyx_v_pmat = __pyx_v_amat;
 
-  /* "PETSc/KSP.pyx":170
+  /* "PETSc/KSP.pyx":191
  *         if A is not None: amat = A.mat
  *         cdef PetscMat pmat=amat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -146047,21 +149875,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSP
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_pmat = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/KSP.pyx":171
+  /* "PETSc/KSP.pyx":192
  *         cdef PetscMat pmat=amat
  *         if P is not None: pmat = P.mat
  *         CHKERR( KSPSetOperators(self.ksp, amat, pmat) )             # <<<<<<<<<<<<<<
  * 
  *     def getOperators(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetOperators(__pyx_v_self->ksp, __pyx_v_amat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetOperators(__pyx_v_self->ksp, __pyx_v_amat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 192, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":166
- *     # --- operators and preconditioner ---
+  /* "PETSc/KSP.pyx":187
+ *         CHKERR( KSPSetComputeOperators(self.ksp, KSP_ComputeOps, <void*>context) )
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMat amat=NULL
@@ -146080,7 +149906,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":173
+/* "PETSc/KSP.pyx":194
  *         CHKERR( KSPSetOperators(self.ksp, amat, pmat) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -146089,60 +149915,57 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setOperators(struct PyPetscKSP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_33getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_32getOperators[] = "KSP.getOperators(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_33getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_37getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_36getOperators[] = "KSP.getOperators(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_37getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   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_8petsc4py_5PETSc_3KSP_32getOperators(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_36getOperators(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32getOperators(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getOperators(struct PyPetscKSPObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_A = 0;
   struct PyPetscMatObject *__pyx_v_P = 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("getOperators", 0);
 
-  /* "PETSc/KSP.pyx":174
+  /* "PETSc/KSP.pyx":195
  * 
  *     def getOperators(self):
  *         cdef Mat A = Mat(), P = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( KSPGetOperators(self.ksp, &A.mat, &P.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[35]; __pyx_lineno = 174; __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(35, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
-  __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[35]; __pyx_lineno = 174; __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(35, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":175
+  /* "PETSc/KSP.pyx":196
  *     def getOperators(self):
  *         cdef Mat A = Mat(), P = Mat()
  *         CHKERR( KSPGetOperators(self.ksp, &A.mat, &P.mat) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetOperators(__pyx_v_self->ksp, (&__pyx_v_A->mat), (&__pyx_v_P->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetOperators(__pyx_v_self->ksp, (&__pyx_v_A->mat), (&__pyx_v_P->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 196, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":176
+  /* "PETSc/KSP.pyx":197
  *         cdef Mat A = Mat(), P = Mat()
  *         CHKERR( KSPGetOperators(self.ksp, &A.mat, &P.mat) )
  *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
@@ -146151,7 +149974,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32getOperators(struct PyPetscKSP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":177
+  /* "PETSc/KSP.pyx":198
  *         CHKERR( KSPGetOperators(self.ksp, &A.mat, &P.mat) )
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
@@ -146160,7 +149983,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32getOperators(struct PyPetscKSP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_P->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":178
+  /* "PETSc/KSP.pyx":199
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)
  *         return (A, P)             # <<<<<<<<<<<<<<
@@ -146168,7 +149991,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32getOperators(struct PyPetscKSP
  *     def setPC(self, PC pc not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 199, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_A));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_A));
@@ -146180,7 +150003,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32getOperators(struct PyPetscKSP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":173
+  /* "PETSc/KSP.pyx":194
  *         CHKERR( KSPSetOperators(self.ksp, amat, pmat) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -146201,7 +150024,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32getOperators(struct PyPetscKSP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":180
+/* "PETSc/KSP.pyx":201
  *         return (A, P)
  * 
  *     def setPC(self, PC pc not None):             # <<<<<<<<<<<<<<
@@ -146210,13 +150033,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32getOperators(struct PyPetscKSP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_34setPC[] = "KSP.setPC(self, PC pc)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_38setPC[] = "KSP.setPC(self, PC pc)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscPCObject *__pyx_v_pc = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPC (wrapper)", 0);
@@ -146238,7 +150058,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setPC(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, "setPC") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPC") < 0)) __PYX_ERR(35, 201, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -146249,14 +150069,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setPC(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 201, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setPC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pc), __pyx_ptype_8petsc4py_5PETSc_PC, 0, "pc", 0))) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_34setPC(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_pc);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pc), __pyx_ptype_8petsc4py_5PETSc_PC, 0, "pc", 0))) __PYX_ERR(35, 201, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_38setPC(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_pc);
 
   /* function exit code */
   goto __pyx_L0;
@@ -146267,25 +150087,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setPC(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setPC(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscPCObject *__pyx_v_pc) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setPC(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscPCObject *__pyx_v_pc) {
   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("setPC", 0);
 
-  /* "PETSc/KSP.pyx":181
+  /* "PETSc/KSP.pyx":202
  * 
  *     def setPC(self, PC pc not None):
  *         CHKERR( KSPSetPC(self.ksp, pc.pc) )             # <<<<<<<<<<<<<<
  * 
  *     def getPC(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetPC(__pyx_v_self->ksp, __pyx_v_pc->pc)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetPC(__pyx_v_self->ksp, __pyx_v_pc->pc)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 202, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":180
+  /* "PETSc/KSP.pyx":201
  *         return (A, P)
  * 
  *     def setPC(self, PC pc not None):             # <<<<<<<<<<<<<<
@@ -146305,7 +150122,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setPC(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":183
+/* "PETSc/KSP.pyx":204
  *         CHKERR( KSPSetPC(self.ksp, pc.pc) )
  * 
  *     def getPC(self):             # <<<<<<<<<<<<<<
@@ -146314,55 +150131,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setPC(struct PyPetscKSPObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_37getPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_36getPC[] = "KSP.getPC(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_37getPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_41getPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_40getPC[] = "KSP.getPC(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_41getPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getPC (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getPC", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPC", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_36getPC(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_40getPC(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getPC(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getPC(struct PyPetscKSPObject *__pyx_v_self) {
   struct PyPetscPCObject *__pyx_v_pc = 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("getPC", 0);
 
-  /* "PETSc/KSP.pyx":184
+  /* "PETSc/KSP.pyx":205
  * 
  *     def getPC(self):
  *         cdef PC pc = PC()             # <<<<<<<<<<<<<<
  *         CHKERR( KSPGetPC(self.ksp, &pc.pc) )
  *         PetscINCREF(pc.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_PC)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 205, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_pc = ((struct PyPetscPCObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":185
+  /* "PETSc/KSP.pyx":206
  *     def getPC(self):
  *         cdef PC pc = PC()
  *         CHKERR( KSPGetPC(self.ksp, &pc.pc) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(pc.obj)
  *         return pc
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetPC(__pyx_v_self->ksp, (&__pyx_v_pc->pc))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetPC(__pyx_v_self->ksp, (&__pyx_v_pc->pc))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 206, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":186
+  /* "PETSc/KSP.pyx":207
  *         cdef PC pc = PC()
  *         CHKERR( KSPGetPC(self.ksp, &pc.pc) )
  *         PetscINCREF(pc.obj)             # <<<<<<<<<<<<<<
@@ -146371,7 +150185,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getPC(struct PyPetscKSPObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_pc->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":187
+  /* "PETSc/KSP.pyx":208
  *         CHKERR( KSPGetPC(self.ksp, &pc.pc) )
  *         PetscINCREF(pc.obj)
  *         return pc             # <<<<<<<<<<<<<<
@@ -146383,7 +150197,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getPC(struct PyPetscKSPObject
   __pyx_r = ((PyObject *)__pyx_v_pc);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":183
+  /* "PETSc/KSP.pyx":204
  *         CHKERR( KSPSetPC(self.ksp, pc.pc) )
  * 
  *     def getPC(self):             # <<<<<<<<<<<<<<
@@ -146403,7 +150217,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getPC(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":191
+/* "PETSc/KSP.pyx":212
  *     # --- tolerances and convergence ---
  * 
  *     def setTolerances(self, rtol=None, atol=None, divtol=None, max_it=None):             # <<<<<<<<<<<<<<
@@ -146412,16 +150226,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getPC(struct PyPetscKSPObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_38setTolerances[] = "KSP.setTolerances(self, rtol=None, atol=None, divtol=None, max_it=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_42setTolerances[] = "KSP.setTolerances(self, rtol=None, atol=None, divtol=None, max_it=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rtol = 0;
   PyObject *__pyx_v_atol = 0;
   PyObject *__pyx_v_divtol = 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);
@@ -146467,7 +150278,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setTolerances(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(35, 212, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -146486,20 +150297,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setTolerances(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 212, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol, __pyx_v_divtol, __pyx_v_max_it);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol, __pyx_v_divtol, __pyx_v_max_it);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol, PyObject *__pyx_v_divtol, PyObject *__pyx_v_max_it) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol, PyObject *__pyx_v_divtol, PyObject *__pyx_v_max_it) {
   PetscReal __pyx_v_crtol;
   PetscReal __pyx_v_catol;
   PetscReal __pyx_v_cdivtol;
@@ -146511,12 +150322,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
   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);
 
-  /* "PETSc/KSP.pyx":193
+  /* "PETSc/KSP.pyx":214
  *     def setTolerances(self, rtol=None, atol=None, divtol=None, max_it=None):
  *         cdef PetscReal crtol, catol, cdivtol
  *         crtol = catol = cdivtol = PETSC_DEFAULT;             # <<<<<<<<<<<<<<
@@ -146527,7 +150335,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
   __pyx_v_catol = PETSC_DEFAULT;
   __pyx_v_cdivtol = PETSC_DEFAULT;
 
-  /* "PETSc/KSP.pyx":194
+  /* "PETSc/KSP.pyx":215
  *         cdef PetscReal crtol, catol, cdivtol
  *         crtol = catol = cdivtol = PETSC_DEFAULT;
  *         if rtol   is not None: crtol   = asReal(rtol)             # <<<<<<<<<<<<<<
@@ -146537,13 +150345,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
   __pyx_t_1 = (__pyx_v_rtol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(35, 215, __pyx_L1_error)
     __pyx_v_crtol = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":195
+  /* "PETSc/KSP.pyx":216
  *         crtol = catol = cdivtol = PETSC_DEFAULT;
  *         if rtol   is not None: crtol   = asReal(rtol)
  *         if atol   is not None: catol   = asReal(atol)             # <<<<<<<<<<<<<<
@@ -146553,13 +150359,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
   __pyx_t_2 = (__pyx_v_atol != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(35, 216, __pyx_L1_error)
     __pyx_v_catol = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/KSP.pyx":196
+  /* "PETSc/KSP.pyx":217
  *         if rtol   is not None: crtol   = asReal(rtol)
  *         if atol   is not None: catol   = asReal(atol)
  *         if divtol is not None: cdivtol = asReal(divtol)             # <<<<<<<<<<<<<<
@@ -146569,13 +150373,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
   __pyx_t_1 = (__pyx_v_divtol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_divtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_divtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(35, 217, __pyx_L1_error)
     __pyx_v_cdivtol = __pyx_t_3;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/KSP.pyx":197
+  /* "PETSc/KSP.pyx":218
  *         if atol   is not None: catol   = asReal(atol)
  *         if divtol is not None: cdivtol = asReal(divtol)
  *         cdef PetscInt cmaxits = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -146584,7 +150386,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
  */
   __pyx_v_cmaxits = PETSC_DEFAULT;
 
-  /* "PETSc/KSP.pyx":198
+  /* "PETSc/KSP.pyx":219
  *         if divtol is not None: cdivtol = asReal(divtol)
  *         cdef PetscInt cmaxits = PETSC_DEFAULT
  *         if max_it is not None: cmaxits = asInt(max_it)             # <<<<<<<<<<<<<<
@@ -146594,22 +150396,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
   __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_8petsc4py_5PETSc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(35, 219, __pyx_L1_error)
     __pyx_v_cmaxits = __pyx_t_4;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
-  /* "PETSc/KSP.pyx":199
+  /* "PETSc/KSP.pyx":220
  *         cdef PetscInt cmaxits = PETSC_DEFAULT
  *         if max_it is not None: cmaxits = asInt(max_it)
  *         CHKERR( KSPSetTolerances(self.ksp, crtol, catol, cdivtol, cmaxits) )             # <<<<<<<<<<<<<<
  * 
  *     def getTolerances(self):
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetTolerances(__pyx_v_self->ksp, __pyx_v_crtol, __pyx_v_catol, __pyx_v_cdivtol, __pyx_v_cmaxits)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetTolerances(__pyx_v_self->ksp, __pyx_v_crtol, __pyx_v_catol, __pyx_v_cdivtol, __pyx_v_cmaxits)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(35, 220, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":191
+  /* "PETSc/KSP.pyx":212
  *     # --- tolerances and convergence ---
  * 
  *     def setTolerances(self, rtol=None, atol=None, divtol=None, max_it=None):             # <<<<<<<<<<<<<<
@@ -146629,7 +150429,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":201
+/* "PETSc/KSP.pyx":222
  *         CHKERR( KSPSetTolerances(self.ksp, crtol, catol, cdivtol, cmaxits) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -146638,23 +150438,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setTolerances(struct PyPetscKS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_41getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_40getTolerances[] = "KSP.getTolerances(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_41getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_45getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_44getTolerances[] = "KSP.getTolerances(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_45getTolerances(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_8petsc4py_5PETSc_3KSP_40getTolerances(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(struct PyPetscKSPObject *__pyx_v_self) {
   PetscReal __pyx_v_crtol;
   PetscReal __pyx_v_catol;
   PetscReal __pyx_v_cdivtol;
@@ -146667,12 +150467,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKS
   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("getTolerances", 0);
 
-  /* "PETSc/KSP.pyx":202
+  /* "PETSc/KSP.pyx":223
  * 
  *     def getTolerances(self):
  *         cdef PetscReal crtol=0, catol=0, cdivtol=0             # <<<<<<<<<<<<<<
@@ -146683,7 +150480,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKS
   __pyx_v_catol = 0.0;
   __pyx_v_cdivtol = 0.0;
 
-  /* "PETSc/KSP.pyx":203
+  /* "PETSc/KSP.pyx":224
  *     def getTolerances(self):
  *         cdef PetscReal crtol=0, catol=0, cdivtol=0
  *         cdef PetscInt cmaxits=0             # <<<<<<<<<<<<<<
@@ -146692,16 +150489,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKS
  */
   __pyx_v_cmaxits = 0;
 
-  /* "PETSc/KSP.pyx":204
+  /* "PETSc/KSP.pyx":225
  *         cdef PetscReal crtol=0, catol=0, cdivtol=0
  *         cdef PetscInt cmaxits=0
  *         CHKERR( KSPGetTolerances(self.ksp, &crtol, &catol, &cdivtol, &cmaxits) )             # <<<<<<<<<<<<<<
  *         return (toReal(crtol), toReal(catol), toReal(cdivtol), toInt(cmaxits))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetTolerances(__pyx_v_self->ksp, (&__pyx_v_crtol), (&__pyx_v_catol), (&__pyx_v_cdivtol), (&__pyx_v_cmaxits))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetTolerances(__pyx_v_self->ksp, (&__pyx_v_crtol), (&__pyx_v_catol), (&__pyx_v_cdivtol), (&__pyx_v_cmaxits))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 225, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":205
+  /* "PETSc/KSP.pyx":226
  *         cdef PetscInt cmaxits=0
  *         CHKERR( KSPGetTolerances(self.ksp, &crtol, &catol, &cdivtol, &cmaxits) )
  *         return (toReal(crtol), toReal(catol), toReal(cdivtol), toInt(cmaxits))             # <<<<<<<<<<<<<<
@@ -146709,15 +150506,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKS
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_crtol); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_crtol); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_catol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_catol); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cdivtol); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cdivtol); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cmaxits); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cmaxits); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(35, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -146735,7 +150532,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKS
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":201
+  /* "PETSc/KSP.pyx":222
  *         CHKERR( KSPSetTolerances(self.ksp, crtol, catol, cdivtol, cmaxits) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -146758,7 +150555,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":207
+/* "PETSc/KSP.pyx":228
  *         return (toReal(crtol), toReal(catol), toReal(cdivtol), toInt(cmaxits))
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -146767,20 +150564,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getTolerances(struct PyPetscKS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_42setConvergenceTest[] = "KSP.setConvergenceTest(self, converged, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_46setConvergenceTest[] = "KSP.setConvergenceTest(self, converged, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_converged = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergenceTest (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_converged_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_converged,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -146797,7 +150591,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setConvergenceTest(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -146811,7 +150605,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setConvergenceTest(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) __PYX_ERR(35, 228, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -146828,20 +150622,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setConvergenceTest(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 228, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_converged, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_converged, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   KSPNormType __pyx_v_normtype;
   void *__pyx_v_cctx;
   PyObject *__pyx_r = NULL;
@@ -146851,14 +150645,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
   int __pyx_t_3;
   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("setConvergenceTest", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/KSP.pyx":208
+  /* "PETSc/KSP.pyx":229
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE             # <<<<<<<<<<<<<<
@@ -146867,7 +150658,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
  */
   __pyx_v_normtype = KSP_NORM_NONE;
 
-  /* "PETSc/KSP.pyx":209
+  /* "PETSc/KSP.pyx":230
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
  *         cdef void* cctx = NULL             # <<<<<<<<<<<<<<
@@ -146876,7 +150667,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
  */
   __pyx_v_cctx = NULL;
 
-  /* "PETSc/KSP.pyx":210
+  /* "PETSc/KSP.pyx":231
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
  *         cdef void* cctx = NULL
  *         if converged is not None:             # <<<<<<<<<<<<<<
@@ -146887,16 +150678,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/KSP.pyx":211
+    /* "PETSc/KSP.pyx":232
  *         cdef void* cctx = NULL
  *         if converged is not None:
  *             CHKERR( KSPSetConvergenceTest(             # <<<<<<<<<<<<<<
  *                     self.ksp, KSP_Converged, NULL, NULL) )
  *             if args is None: args = ()
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergenceTest(__pyx_v_self->ksp, __pyx_f_8petsc4py_5PETSc_KSP_Converged, NULL, NULL)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergenceTest(__pyx_v_self->ksp, __pyx_f_8petsc4py_5PETSc_KSP_Converged, NULL, NULL)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(35, 232, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":213
+    /* "PETSc/KSP.pyx":234
  *             CHKERR( KSPSetConvergenceTest(
  *                     self.ksp, KSP_Converged, NULL, NULL) )
  *             if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -146908,11 +150699,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
-    /* "PETSc/KSP.pyx":214
+    /* "PETSc/KSP.pyx":235
  *                     self.ksp, KSP_Converged, NULL, NULL) )
  *             if args is None: args = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -146922,22 +150711,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 235, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
-    /* "PETSc/KSP.pyx":215
+    /* "PETSc/KSP.pyx":236
  *             if args is None: args = ()
  *             if kargs is None: kargs = {}
  *             self.set_attr('__converged__', (converged, args, kargs))             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( KSPGetNormType(self.ksp, &normtype) )
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 236, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_converged);
     __Pyx_GIVEREF(__pyx_v_converged);
@@ -146948,24 +150735,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
     __Pyx_INCREF(__pyx_v_kargs);
     __Pyx_GIVEREF(__pyx_v_kargs);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
-    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 236, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+    /* "PETSc/KSP.pyx":231
+ *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
+ *         cdef void* cctx = NULL
+ *         if converged is not None:             # <<<<<<<<<<<<<<
+ *             CHKERR( KSPSetConvergenceTest(
+ *                     self.ksp, KSP_Converged, NULL, NULL) )
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/KSP.pyx":217
+  /* "PETSc/KSP.pyx":238
  *             self.set_attr('__converged__', (converged, args, kargs))
  *         else:
  *             CHKERR( KSPGetNormType(self.ksp, &normtype) )             # <<<<<<<<<<<<<<
  *             if normtype != KSP_NORM_NONE:
  *                 CHKERR( KSPConvergedDefaultCreate(&cctx) )
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetNormType(__pyx_v_self->ksp, (&__pyx_v_normtype))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetNormType(__pyx_v_self->ksp, (&__pyx_v_normtype))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(35, 238, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":218
+    /* "PETSc/KSP.pyx":239
  *         else:
  *             CHKERR( KSPGetNormType(self.ksp, &normtype) )
  *             if normtype != KSP_NORM_NONE:             # <<<<<<<<<<<<<<
@@ -146975,52 +150770,68 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
     __pyx_t_2 = ((__pyx_v_normtype != KSP_NORM_NONE) != 0);
     if (__pyx_t_2) {
 
-      /* "PETSc/KSP.pyx":219
+      /* "PETSc/KSP.pyx":240
  *             CHKERR( KSPGetNormType(self.ksp, &normtype) )
  *             if normtype != KSP_NORM_NONE:
  *                 CHKERR( KSPConvergedDefaultCreate(&cctx) )             # <<<<<<<<<<<<<<
  *                 CHKERR( KSPSetConvergenceTest(
  *                         self.ksp, KSPConvergedDefault,
  */
-      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPConvergedDefaultCreate((&__pyx_v_cctx))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPConvergedDefaultCreate((&__pyx_v_cctx))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(35, 240, __pyx_L1_error)
 
-      /* "PETSc/KSP.pyx":220
+      /* "PETSc/KSP.pyx":241
  *             if normtype != KSP_NORM_NONE:
  *                 CHKERR( KSPConvergedDefaultCreate(&cctx) )
  *                 CHKERR( KSPSetConvergenceTest(             # <<<<<<<<<<<<<<
  *                         self.ksp, KSPConvergedDefault,
  *                         cctx, KSPConvergedDefaultDestroy) )
  */
-      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergenceTest(__pyx_v_self->ksp, KSPConvergedDefault, __pyx_v_cctx, KSPConvergedDefaultDestroy)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergenceTest(__pyx_v_self->ksp, KSPConvergedDefault, __pyx_v_cctx, KSPConvergedDefaultDestroy)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(35, 241, __pyx_L1_error)
+
+      /* "PETSc/KSP.pyx":239
+ *         else:
+ *             CHKERR( KSPGetNormType(self.ksp, &normtype) )
+ *             if normtype != KSP_NORM_NONE:             # <<<<<<<<<<<<<<
+ *                 CHKERR( KSPConvergedDefaultCreate(&cctx) )
+ *                 CHKERR( KSPSetConvergenceTest(
+ */
       goto __pyx_L6;
     }
-    /*else*/ {
 
-      /* "PETSc/KSP.pyx":224
+    /* "PETSc/KSP.pyx":245
  *                         cctx, KSPConvergedDefaultDestroy) )
  *             else:
  *                 CHKERR( KSPSetConvergenceTest(             # <<<<<<<<<<<<<<
  *                         self.ksp, KSPConvergedSkip,
  *                         NULL, NULL) )
  */
-      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergenceTest(__pyx_v_self->ksp, KSPConvergedSkip, NULL, NULL)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+
+      /* "PETSc/KSP.pyx":247
+ *                 CHKERR( KSPSetConvergenceTest(
+ *                         self.ksp, KSPConvergedSkip,
+ *                         NULL, NULL) )             # <<<<<<<<<<<<<<
+ *             self.set_attr('__converged__', None)
+ * 
+ */
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergenceTest(__pyx_v_self->ksp, KSPConvergedSkip, NULL, NULL)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(35, 245, __pyx_L1_error)
     }
     __pyx_L6:;
 
-    /* "PETSc/KSP.pyx":227
+    /* "PETSc/KSP.pyx":248
  *                         self.ksp, KSPConvergedSkip,
  *                         NULL, NULL) )
  *             self.set_attr('__converged__', None)             # <<<<<<<<<<<<<<
  * 
  *     def getConvergenceTest(self):
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged, Py_None); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__"), Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 248, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":207
+  /* "PETSc/KSP.pyx":228
  *         return (toReal(crtol), toReal(catol), toReal(cdivtol), toInt(cmaxits))
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -147044,7 +150855,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":229
+/* "PETSc/KSP.pyx":250
  *             self.set_attr('__converged__', None)
  * 
  *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
@@ -147053,32 +150864,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setConvergenceTest(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_45getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_44getConvergenceTest[] = "KSP.getConvergenceTest(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_45getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_49getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_48getConvergenceTest[] = "KSP.getConvergenceTest(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_49getConvergenceTest(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_8petsc4py_5PETSc_3KSP_44getConvergenceTest(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_48getConvergenceTest(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getConvergenceTest(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48getConvergenceTest(struct PyPetscKSPObject *__pyx_v_self) {
   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("getConvergenceTest", 0);
 
-  /* "PETSc/KSP.pyx":230
+  /* "PETSc/KSP.pyx":251
  * 
  *     def getConvergenceTest(self):
  *         return self.get_attr('__converged__')             # <<<<<<<<<<<<<<
@@ -147086,13 +150894,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getConvergenceTest(struct PyPe
  *     def callConvergenceTest(self, its, rnorm):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":229
+  /* "PETSc/KSP.pyx":250
  *             self.set_attr('__converged__', None)
  * 
  *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
@@ -147111,7 +150919,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getConvergenceTest(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":232
+/* "PETSc/KSP.pyx":253
  *         return self.get_attr('__converged__')
  * 
  *     def callConvergenceTest(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -147120,14 +150928,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getConvergenceTest(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47callConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_46callConvergenceTest[] = "KSP.callConvergenceTest(self, its, rnorm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47callConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_51callConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_50callConvergenceTest[] = "KSP.callConvergenceTest(self, its, rnorm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_51callConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_its = 0;
   PyObject *__pyx_v_rnorm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("callConvergenceTest (wrapper)", 0);
@@ -147151,11 +150956,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47callConvergenceTest(PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rnorm)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 2, 2, 1); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 2, 2, 1); __PYX_ERR(35, 253, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "callConvergenceTest") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "callConvergenceTest") < 0)) __PYX_ERR(35, 253, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -147168,20 +150973,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47callConvergenceTest(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 253, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.callConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_46callConvergenceTest(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_its, __pyx_v_rnorm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_50callConvergenceTest(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_its, __pyx_v_rnorm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46callConvergenceTest(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50callConvergenceTest(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   KSPConvergedReason __pyx_v_reason;
@@ -147191,32 +150996,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46callConvergenceTest(struct PyP
   PetscReal __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("callConvergenceTest", 0);
 
-  /* "PETSc/KSP.pyx":233
+  /* "PETSc/KSP.pyx":254
  * 
  *     def callConvergenceTest(self, its, rnorm):
  *         cdef PetscInt  ival = asInt(its)             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(rnorm)
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(35, 254, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":234
+  /* "PETSc/KSP.pyx":255
  *     def callConvergenceTest(self, its, rnorm):
  *         cdef PetscInt  ival = asInt(its)
  *         cdef PetscReal rval = asReal(rnorm)             # <<<<<<<<<<<<<<
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING
  *         CHKERR( KSPConvergenceTestCall(self.ksp, ival, rval, &reason) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) __PYX_ERR(35, 255, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_2;
 
-  /* "PETSc/KSP.pyx":235
+  /* "PETSc/KSP.pyx":256
  *         cdef PetscInt  ival = asInt(its)
  *         cdef PetscReal rval = asReal(rnorm)
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -147225,16 +151027,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46callConvergenceTest(struct PyP
  */
   __pyx_v_reason = KSP_CONVERGED_ITERATING;
 
-  /* "PETSc/KSP.pyx":236
+  /* "PETSc/KSP.pyx":257
  *         cdef PetscReal rval = asReal(rnorm)
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING
  *         CHKERR( KSPConvergenceTestCall(self.ksp, ival, rval, &reason) )             # <<<<<<<<<<<<<<
  *         return reason
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPConvergenceTestCall(__pyx_v_self->ksp, __pyx_v_ival, __pyx_v_rval, (&__pyx_v_reason))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPConvergenceTestCall(__pyx_v_self->ksp, __pyx_v_ival, __pyx_v_rval, (&__pyx_v_reason))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(35, 257, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":237
+  /* "PETSc/KSP.pyx":258
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING
  *         CHKERR( KSPConvergenceTestCall(self.ksp, ival, rval, &reason) )
  *         return reason             # <<<<<<<<<<<<<<
@@ -147242,13 +151044,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46callConvergenceTest(struct PyP
  *     def setConvergenceHistory(self, length=None, reset=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_KSPConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":232
+  /* "PETSc/KSP.pyx":253
  *         return self.get_attr('__converged__')
  * 
  *     def callConvergenceTest(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -147267,7 +151069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46callConvergenceTest(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":239
+/* "PETSc/KSP.pyx":260
  *         return reason
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):             # <<<<<<<<<<<<<<
@@ -147276,14 +151078,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46callConvergenceTest(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_49setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_48setConvergenceHistory[] = "KSP.setConvergenceHistory(self, length=None, reset=False)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_49setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_52setConvergenceHistory[] = "KSP.setConvergenceHistory(self, length=None, reset=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_length = 0;
   PyObject *__pyx_v_reset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergenceHistory (wrapper)", 0);
@@ -147315,7 +151114,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_49setConvergenceHistory(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceHistory") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceHistory") < 0)) __PYX_ERR(35, 260, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -147330,20 +151129,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_49setConvergenceHistory(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceHistory", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergenceHistory", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 260, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setConvergenceHistory", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_length, __pyx_v_reset);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_length, __pyx_v_reset);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset) {
   PetscReal *__pyx_v_data;
   PetscInt __pyx_v_size;
   PetscBool __pyx_v_flag;
@@ -147356,12 +151155,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct P
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setConvergenceHistory", 0);
 
-  /* "PETSc/KSP.pyx":240
+  /* "PETSc/KSP.pyx":261
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):
  *         cdef PetscReal *data = NULL             # <<<<<<<<<<<<<<
@@ -147370,16 +151166,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct P
  */
   __pyx_v_data = NULL;
 
-  /* "PETSc/KSP.pyx":241
+  /* "PETSc/KSP.pyx":262
  *     def setConvergenceHistory(self, length=None, reset=False):
  *         cdef PetscReal *data = NULL
  *         cdef PetscInt   size = 10000             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         if   length is True:     pass
  */
-  __pyx_v_size = 10000;
+  __pyx_v_size = 0x2710;
 
-  /* "PETSc/KSP.pyx":242
+  /* "PETSc/KSP.pyx":263
  *         cdef PetscReal *data = NULL
  *         cdef PetscInt   size = 10000
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -147388,7 +151184,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct P
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":243
+  /* "PETSc/KSP.pyx":264
  *         cdef PetscInt   size = 10000
  *         cdef PetscBool flag = PETSC_FALSE
  *         if   length is True:     pass             # <<<<<<<<<<<<<<
@@ -147401,7 +151197,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct P
     goto __pyx_L3;
   }
 
-  /* "PETSc/KSP.pyx":244
+  /* "PETSc/KSP.pyx":265
  *         cdef PetscBool flag = PETSC_FALSE
  *         if   length is True:     pass
  *         elif length is not None: size = asInt(length)             # <<<<<<<<<<<<<<
@@ -147411,13 +151207,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct P
   __pyx_t_2 = (__pyx_v_length != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_length); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_length); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(35, 265, __pyx_L1_error)
     __pyx_v_size = __pyx_t_3;
-    goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":245
+  /* "PETSc/KSP.pyx":266
  *         if   length is True:     pass
  *         elif length is not None: size = asInt(length)
  *         if size < 0: size = 10000             # <<<<<<<<<<<<<<
@@ -147426,61 +151221,57 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct P
  */
   __pyx_t_1 = ((__pyx_v_size < 0) != 0);
   if (__pyx_t_1) {
-    __pyx_v_size = 10000;
-    goto __pyx_L4;
+    __pyx_v_size = 0x2710;
   }
-  __pyx_L4:;
 
-  /* "PETSc/KSP.pyx":246
+  /* "PETSc/KSP.pyx":267
  *         elif length is not None: size = asInt(length)
  *         if size < 0: size = 10000
  *         if reset: flag = PETSC_TRUE             # <<<<<<<<<<<<<<
  *         cdef object hist = oarray_r(empty_r(size), NULL, &data)
  *         self.set_attr('__history__', hist)
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_reset); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_reset); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(35, 267, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_flag = PETSC_TRUE;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/KSP.pyx":247
+  /* "PETSc/KSP.pyx":268
  *         if size < 0: size = 10000
  *         if reset: flag = PETSC_TRUE
  *         cdef object hist = oarray_r(empty_r(size), NULL, &data)             # <<<<<<<<<<<<<<
  *         self.set_attr('__history__', hist)
  *         CHKERR( KSPSetResidualHistory(self.ksp, data, size, flag) )
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_size)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_size)); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_r(__pyx_t_4, NULL, (&__pyx_v_data))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_r(__pyx_t_4, NULL, (&__pyx_v_data))); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_hist = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "PETSc/KSP.pyx":248
+  /* "PETSc/KSP.pyx":269
  *         if reset: flag = PETSC_TRUE
  *         cdef object hist = oarray_r(empty_r(size), NULL, &data)
  *         self.set_attr('__history__', hist)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetResidualHistory(self.ksp, data, size, flag) )
  * 
  */
-  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_history, __pyx_v_hist); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__history__"), __pyx_v_hist); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 269, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/KSP.pyx":249
+  /* "PETSc/KSP.pyx":270
  *         cdef object hist = oarray_r(empty_r(size), NULL, &data)
  *         self.set_attr('__history__', hist)
  *         CHKERR( KSPSetResidualHistory(self.ksp, data, size, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def getConvergenceHistory(self):
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetResidualHistory(__pyx_v_self->ksp, __pyx_v_data, __pyx_v_size, __pyx_v_flag)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetResidualHistory(__pyx_v_self->ksp, __pyx_v_data, __pyx_v_size, __pyx_v_flag)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(35, 270, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":239
+  /* "PETSc/KSP.pyx":260
  *         return reason
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):             # <<<<<<<<<<<<<<
@@ -147503,7 +151294,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":251
+/* "PETSc/KSP.pyx":272
  *         CHKERR( KSPSetResidualHistory(self.ksp, data, size, flag) )
  * 
  *     def getConvergenceHistory(self):             # <<<<<<<<<<<<<<
@@ -147512,35 +151303,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48setConvergenceHistory(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_51getConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_50getConvergenceHistory[] = "KSP.getConvergenceHistory(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_51getConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_55getConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_54getConvergenceHistory[] = "KSP.getConvergenceHistory(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_55getConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getConvergenceHistory (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getConvergenceHistory", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergenceHistory", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_50getConvergenceHistory(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_54getConvergenceHistory(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50getConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54getConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self) {
   PetscReal *__pyx_v_data;
   PetscInt __pyx_v_size;
   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("getConvergenceHistory", 0);
 
-  /* "PETSc/KSP.pyx":252
+  /* "PETSc/KSP.pyx":273
  * 
  *     def getConvergenceHistory(self):
  *         cdef PetscReal *data = NULL             # <<<<<<<<<<<<<<
@@ -147549,7 +151337,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50getConvergenceHistory(struct P
  */
   __pyx_v_data = NULL;
 
-  /* "PETSc/KSP.pyx":253
+  /* "PETSc/KSP.pyx":274
  *     def getConvergenceHistory(self):
  *         cdef PetscReal *data = NULL
  *         cdef PetscInt   size = 0             # <<<<<<<<<<<<<<
@@ -147558,16 +151346,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50getConvergenceHistory(struct P
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/KSP.pyx":254
+  /* "PETSc/KSP.pyx":275
  *         cdef PetscReal *data = NULL
  *         cdef PetscInt   size = 0
  *         CHKERR( KSPGetResidualHistory(self.ksp, &data, &size) )             # <<<<<<<<<<<<<<
  *         return array_r(size, data)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetResidualHistory(__pyx_v_self->ksp, (&__pyx_v_data), (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetResidualHistory(__pyx_v_self->ksp, (&__pyx_v_data), (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 275, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":255
+  /* "PETSc/KSP.pyx":276
  *         cdef PetscInt   size = 0
  *         CHKERR( KSPGetResidualHistory(self.ksp, &data, &size) )
  *         return array_r(size, data)             # <<<<<<<<<<<<<<
@@ -147575,13 +151363,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50getConvergenceHistory(struct P
  *     def logConvergenceHistory(self, rnorm):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_r(__pyx_v_size, __pyx_v_data)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_r(__pyx_v_size, __pyx_v_data)); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":251
+  /* "PETSc/KSP.pyx":272
  *         CHKERR( KSPSetResidualHistory(self.ksp, data, size, flag) )
  * 
  *     def getConvergenceHistory(self):             # <<<<<<<<<<<<<<
@@ -147600,7 +151388,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50getConvergenceHistory(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":257
+/* "PETSc/KSP.pyx":278
  *         return array_r(size, data)
  * 
  *     def logConvergenceHistory(self, rnorm):             # <<<<<<<<<<<<<<
@@ -147609,13 +151397,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50getConvergenceHistory(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_52logConvergenceHistory[] = "KSP.logConvergenceHistory(self, rnorm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_57logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_56logConvergenceHistory[] = "KSP.logConvergenceHistory(self, rnorm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_57logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rnorm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("logConvergenceHistory (wrapper)", 0);
@@ -147637,7 +151422,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53logConvergenceHistory(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logConvergenceHistory") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logConvergenceHistory") < 0)) __PYX_ERR(35, 278, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -147648,50 +151433,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53logConvergenceHistory(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("logConvergenceHistory", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("logConvergenceHistory", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 278, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.logConvergenceHistory", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_52logConvergenceHistory(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_rnorm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_56logConvergenceHistory(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_rnorm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52logConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rnorm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56logConvergenceHistory(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rnorm) {
   PetscReal __pyx_v_rval;
   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("logConvergenceHistory", 0);
 
-  /* "PETSc/KSP.pyx":258
+  /* "PETSc/KSP.pyx":279
  * 
  *     def logConvergenceHistory(self, rnorm):
  *         cdef PetscReal rval = asReal(rnorm)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPLogResidualHistory(self.ksp, rval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(35, 279, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":259
+  /* "PETSc/KSP.pyx":280
  *     def logConvergenceHistory(self, rnorm):
  *         cdef PetscReal rval = asReal(rnorm)
  *         CHKERR( KSPLogResidualHistory(self.ksp, rval) )             # <<<<<<<<<<<<<<
  * 
  *     # --- monitoring ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPLogResidualHistory(__pyx_v_self->ksp, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPLogResidualHistory(__pyx_v_self->ksp, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 280, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":257
+  /* "PETSc/KSP.pyx":278
  *         return array_r(size, data)
  * 
  *     def logConvergenceHistory(self, rnorm):             # <<<<<<<<<<<<<<
@@ -147711,7 +151493,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52logConvergenceHistory(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":263
+/* "PETSc/KSP.pyx":284
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -147720,20 +151502,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52logConvergenceHistory(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_55setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_54setMonitor[] = "KSP.setMonitor(self, monitor, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_55setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_59setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_58setMonitor[] = "KSP.setMonitor(self, monitor, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_59setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_monitor = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMonitor (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_monitor_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_monitor,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -147750,7 +151529,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_55setMonitor(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_monitor_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_monitor)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -147764,7 +151543,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_55setMonitor(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(35, 284, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -147781,20 +151560,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_55setMonitor(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 284, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_monitor, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_monitor, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_monitorlist = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -147803,14 +151582,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPOb
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setMonitor", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/KSP.pyx":264
+  /* "PETSc/KSP.pyx":285
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):
  *         if monitor is None: return             # <<<<<<<<<<<<<<
@@ -147825,19 +151601,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPOb
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":265
+  /* "PETSc/KSP.pyx":286
  *     def setMonitor(self, monitor, args=None, kargs=None):
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
  *         if monitorlist is None:
  *             monitorlist = []
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_monitorlist = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":266
+  /* "PETSc/KSP.pyx":287
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -147848,42 +151624,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPOb
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/KSP.pyx":267
+    /* "PETSc/KSP.pyx":288
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:
  *             monitorlist = []             # <<<<<<<<<<<<<<
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( KSPMonitorSet(self.ksp, KSP_Monitor, NULL, NULL) )
  */
-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 288, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_monitorlist, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/KSP.pyx":268
+    /* "PETSc/KSP.pyx":289
  *         if monitorlist is None:
  *             monitorlist = []
  *             self.set_attr('__monitor__', monitorlist)             # <<<<<<<<<<<<<<
  *             CHKERR( KSPMonitorSet(self.ksp, KSP_Monitor, NULL, NULL) )
  *         if args is None: args = ()
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor, __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__"), __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 289, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/KSP.pyx":269
+    /* "PETSc/KSP.pyx":290
  *             monitorlist = []
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( KSPMonitorSet(self.ksp, KSP_Monitor, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPMonitorSet(__pyx_v_self->ksp, __pyx_f_8petsc4py_5PETSc_KSP_Monitor, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPMonitorSet(__pyx_v_self->ksp, __pyx_f_8petsc4py_5PETSc_KSP_Monitor, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 290, __pyx_L1_error)
+
+    /* "PETSc/KSP.pyx":287
+ *         if monitor is None: return
+ *         cdef object monitorlist = self.get_attr('__monitor__')
+ *         if monitorlist is None:             # <<<<<<<<<<<<<<
+ *             monitorlist = []
+ *             self.set_attr('__monitor__', monitorlist)
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/KSP.pyx":270
+  /* "PETSc/KSP.pyx":291
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( KSPMonitorSet(self.ksp, KSP_Monitor, NULL, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -147895,11 +151677,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPOb
   if (__pyx_t_2) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/KSP.pyx":271
+  /* "PETSc/KSP.pyx":292
  *             CHKERR( KSPMonitorSet(self.ksp, KSP_Monitor, NULL, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -147909,22 +151689,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPOb
   __pyx_t_2 = (__pyx_v_kargs == Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 292, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
-  /* "PETSc/KSP.pyx":272
+  /* "PETSc/KSP.pyx":293
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         monitorlist.append((monitor, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def getMonitor(self):
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 293, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_monitor);
   __Pyx_GIVEREF(__pyx_v_monitor);
@@ -147935,10 +151713,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPOb
   __Pyx_INCREF(__pyx_v_kargs);
   __Pyx_GIVEREF(__pyx_v_kargs);
   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
-  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_t_3); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_t_3); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(35, 293, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":263
+  /* "PETSc/KSP.pyx":284
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -147962,7 +151740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPOb
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":274
+/* "PETSc/KSP.pyx":295
  *         monitorlist.append((monitor, args, kargs))
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -147971,32 +151749,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54setMonitor(struct PyPetscKSPOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_57getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_56getMonitor[] = "KSP.getMonitor(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_57getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_61getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_60getMonitor[] = "KSP.getMonitor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_61getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMonitor (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMonitor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_56getMonitor(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_60getMonitor(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56getMonitor(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60getMonitor(struct PyPetscKSPObject *__pyx_v_self) {
   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("getMonitor", 0);
 
-  /* "PETSc/KSP.pyx":275
+  /* "PETSc/KSP.pyx":296
  * 
  *     def getMonitor(self):
  *         return self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
@@ -148004,13 +151779,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56getMonitor(struct PyPetscKSPOb
  *     def cancelMonitor(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":274
+  /* "PETSc/KSP.pyx":295
  *         monitorlist.append((monitor, args, kargs))
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -148029,7 +151804,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56getMonitor(struct PyPetscKSPOb
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":277
+/* "PETSc/KSP.pyx":298
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -148038,53 +151813,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56getMonitor(struct PyPetscKSPOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_59cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_58cancelMonitor[] = "KSP.cancelMonitor(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_59cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_63cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_62cancelMonitor[] = "KSP.cancelMonitor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_63cancelMonitor(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_8petsc4py_5PETSc_3KSP_58cancelMonitor(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_62cancelMonitor(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58cancelMonitor(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_62cancelMonitor(struct PyPetscKSPObject *__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("cancelMonitor", 0);
 
-  /* "PETSc/KSP.pyx":278
+  /* "PETSc/KSP.pyx":299
  * 
  *     def cancelMonitor(self):
  *         CHKERR( KSPMonitorCancel(self.ksp) )             # <<<<<<<<<<<<<<
  *         self.set_attr('__monitor__', None)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPMonitorCancel(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPMonitorCancel(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 299, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":279
+  /* "PETSc/KSP.pyx":300
  *     def cancelMonitor(self):
  *         CHKERR( KSPMonitorCancel(self.ksp) )
  *         self.set_attr('__monitor__', None)             # <<<<<<<<<<<<<<
  * 
  *     def monitor(self, its, rnorm):
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__"), Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 300, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":277
+  /* "PETSc/KSP.pyx":298
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -148105,7 +151877,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58cancelMonitor(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":281
+/* "PETSc/KSP.pyx":302
  *         self.set_attr('__monitor__', None)
  * 
  *     def monitor(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -148114,14 +151886,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58cancelMonitor(struct PyPetscKS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_61monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_60monitor[] = "KSP.monitor(self, its, rnorm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_61monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_65monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_64monitor[] = "KSP.monitor(self, its, rnorm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_65monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_its = 0;
   PyObject *__pyx_v_rnorm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("monitor (wrapper)", 0);
@@ -148145,11 +151914,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_61monitor(PyObject *__pyx_v_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rnorm)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, 1); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, 1); __PYX_ERR(35, 302, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(35, 302, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -148162,20 +151931,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_61monitor(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 302, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.monitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_60monitor(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_its, __pyx_v_rnorm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_64monitor(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_its, __pyx_v_rnorm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60monitor(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64monitor(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -148183,41 +151952,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60monitor(struct PyPetscKSPObjec
   PetscInt __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("monitor", 0);
 
-  /* "PETSc/KSP.pyx":282
+  /* "PETSc/KSP.pyx":303
  * 
  *     def monitor(self, its, rnorm):
  *         cdef PetscInt  ival = asInt(its)             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(rnorm)
  *         CHKERR( KSPMonitor(self.ksp, ival, rval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(35, 303, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":283
+  /* "PETSc/KSP.pyx":304
  *     def monitor(self, its, rnorm):
  *         cdef PetscInt  ival = asInt(its)
  *         cdef PetscReal rval = asReal(rnorm)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPMonitor(self.ksp, ival, rval) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) __PYX_ERR(35, 304, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_2;
 
-  /* "PETSc/KSP.pyx":284
+  /* "PETSc/KSP.pyx":305
  *         cdef PetscInt  ival = asInt(its)
  *         cdef PetscReal rval = asReal(rnorm)
  *         CHKERR( KSPMonitor(self.ksp, ival, rval) )             # <<<<<<<<<<<<<<
  * 
  *     # --- customization ---
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPMonitor(__pyx_v_self->ksp, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPMonitor(__pyx_v_self->ksp, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(35, 305, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":281
+  /* "PETSc/KSP.pyx":302
  *         self.set_attr('__monitor__', None)
  * 
  *     def monitor(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -148237,7 +152003,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60monitor(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":288
+/* "PETSc/KSP.pyx":309
  *     # --- customization ---
  * 
  *     def setPCSide(self, side):             # <<<<<<<<<<<<<<
@@ -148246,13 +152012,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60monitor(struct PyPetscKSPObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_63setPCSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_62setPCSide[] = "KSP.setPCSide(self, side)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_63setPCSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setPCSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_66setPCSide[] = "KSP.setPCSide(self, side)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setPCSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_side = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPCSide (wrapper)", 0);
@@ -148274,7 +152037,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_63setPCSide(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, "setPCSide") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPCSide") < 0)) __PYX_ERR(35, 309, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -148285,40 +152048,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_63setPCSide(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPCSide", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPCSide", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 309, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setPCSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_62setPCSide(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_side);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_66setPCSide(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_side);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_62setPCSide(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_side) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_66setPCSide(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_side) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PCSide __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setPCSide", 0);
 
-  /* "PETSc/KSP.pyx":289
+  /* "PETSc/KSP.pyx":310
  * 
  *     def setPCSide(self, side):
  *         CHKERR( KSPSetPCSide(self.ksp, side) )             # <<<<<<<<<<<<<<
  * 
  *     def getPCSide(self):
  */
-  __pyx_t_1 = ((PCSide)PyInt_AsLong(__pyx_v_side)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetPCSide(__pyx_v_self->ksp, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PCSide)__Pyx_PyInt_As_PCSide(__pyx_v_side)); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 310, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetPCSide(__pyx_v_self->ksp, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 310, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":288
+  /* "PETSc/KSP.pyx":309
  *     # --- customization ---
  * 
  *     def setPCSide(self, side):             # <<<<<<<<<<<<<<
@@ -148338,7 +152098,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_62setPCSide(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":291
+/* "PETSc/KSP.pyx":312
  *         CHKERR( KSPSetPCSide(self.ksp, side) )
  * 
  *     def getPCSide(self):             # <<<<<<<<<<<<<<
@@ -148347,34 +152107,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_62setPCSide(struct PyPetscKSPObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_65getPCSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_64getPCSide[] = "KSP.getPCSide(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_65getPCSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_69getPCSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_68getPCSide[] = "KSP.getPCSide(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_69getPCSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getPCSide (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getPCSide", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPCSide", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_64getPCSide(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_68getPCSide(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64getPCSide(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getPCSide(struct PyPetscKSPObject *__pyx_v_self) {
   PCSide __pyx_v_side;
   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("getPCSide", 0);
 
-  /* "PETSc/KSP.pyx":292
+  /* "PETSc/KSP.pyx":313
  * 
  *     def getPCSide(self):
  *         cdef PetscPCSide side = PC_LEFT             # <<<<<<<<<<<<<<
@@ -148383,16 +152140,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64getPCSide(struct PyPetscKSPObj
  */
   __pyx_v_side = PC_LEFT;
 
-  /* "PETSc/KSP.pyx":293
+  /* "PETSc/KSP.pyx":314
  *     def getPCSide(self):
  *         cdef PetscPCSide side = PC_LEFT
  *         CHKERR( KSPGetPCSide(self.ksp, &side) )             # <<<<<<<<<<<<<<
  *         return side
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetPCSide(__pyx_v_self->ksp, (&__pyx_v_side))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetPCSide(__pyx_v_self->ksp, (&__pyx_v_side))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 314, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":294
+  /* "PETSc/KSP.pyx":315
  *         cdef PetscPCSide side = PC_LEFT
  *         CHKERR( KSPGetPCSide(self.ksp, &side) )
  *         return side             # <<<<<<<<<<<<<<
@@ -148400,13 +152157,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64getPCSide(struct PyPetscKSPObj
  *     def setNormType(self, normtype):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_side); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PCSide(__pyx_v_side); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 315, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":291
+  /* "PETSc/KSP.pyx":312
  *         CHKERR( KSPSetPCSide(self.ksp, side) )
  * 
  *     def getPCSide(self):             # <<<<<<<<<<<<<<
@@ -148425,7 +152182,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64getPCSide(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":296
+/* "PETSc/KSP.pyx":317
  *         return side
  * 
  *     def setNormType(self, normtype):             # <<<<<<<<<<<<<<
@@ -148434,13 +152191,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64getPCSide(struct PyPetscKSPObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setNormType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_66setNormType[] = "KSP.setNormType(self, normtype)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setNormType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_71setNormType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_70setNormType[] = "KSP.setNormType(self, normtype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_71setNormType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_normtype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setNormType (wrapper)", 0);
@@ -148462,7 +152216,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setNormType(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, "setNormType") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNormType") < 0)) __PYX_ERR(35, 317, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -148473,40 +152227,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setNormType(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNormType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setNormType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 317, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setNormType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_66setNormType(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_normtype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_70setNormType(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_normtype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_66setNormType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_normtype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setNormType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_normtype) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   KSPNormType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setNormType", 0);
 
-  /* "PETSc/KSP.pyx":297
+  /* "PETSc/KSP.pyx":318
  * 
  *     def setNormType(self, normtype):
  *         CHKERR( KSPSetNormType(self.ksp, normtype) )             # <<<<<<<<<<<<<<
  * 
  *     def getNormType(self):
  */
-  __pyx_t_1 = ((KSPNormType)PyInt_AsLong(__pyx_v_normtype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetNormType(__pyx_v_self->ksp, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((KSPNormType)__Pyx_PyInt_As_KSPNormType(__pyx_v_normtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 318, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetNormType(__pyx_v_self->ksp, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 318, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":296
+  /* "PETSc/KSP.pyx":317
  *         return side
  * 
  *     def setNormType(self, normtype):             # <<<<<<<<<<<<<<
@@ -148526,7 +152277,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_66setNormType(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":299
+/* "PETSc/KSP.pyx":320
  *         CHKERR( KSPSetNormType(self.ksp, normtype) )
  * 
  *     def getNormType(self):             # <<<<<<<<<<<<<<
@@ -148535,34 +152286,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_66setNormType(struct PyPetscKSPO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_69getNormType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_68getNormType[] = "KSP.getNormType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_69getNormType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_73getNormType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_72getNormType[] = "KSP.getNormType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_73getNormType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getNormType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getNormType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNormType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_68getNormType(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_72getNormType(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getNormType(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getNormType(struct PyPetscKSPObject *__pyx_v_self) {
   KSPNormType __pyx_v_normtype;
   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("getNormType", 0);
 
-  /* "PETSc/KSP.pyx":300
+  /* "PETSc/KSP.pyx":321
  * 
  *     def getNormType(self):
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE             # <<<<<<<<<<<<<<
@@ -148571,16 +152319,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getNormType(struct PyPetscKSPO
  */
   __pyx_v_normtype = KSP_NORM_NONE;
 
-  /* "PETSc/KSP.pyx":301
+  /* "PETSc/KSP.pyx":322
  *     def getNormType(self):
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
  *         CHKERR( KSPGetNormType(self.ksp, &normtype) )             # <<<<<<<<<<<<<<
  *         return normtype
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetNormType(__pyx_v_self->ksp, (&__pyx_v_normtype))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetNormType(__pyx_v_self->ksp, (&__pyx_v_normtype))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 322, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":302
+  /* "PETSc/KSP.pyx":323
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
  *         CHKERR( KSPGetNormType(self.ksp, &normtype) )
  *         return normtype             # <<<<<<<<<<<<<<
@@ -148588,13 +152336,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getNormType(struct PyPetscKSPO
  *     def setComputeEigenvalues(self, bint flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_normtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_KSPNormType(__pyx_v_normtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":299
+  /* "PETSc/KSP.pyx":320
  *         CHKERR( KSPSetNormType(self.ksp, normtype) )
  * 
  *     def getNormType(self):             # <<<<<<<<<<<<<<
@@ -148613,7 +152361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getNormType(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":304
+/* "PETSc/KSP.pyx":325
  *         return normtype
  * 
  *     def setComputeEigenvalues(self, bint flag):             # <<<<<<<<<<<<<<
@@ -148622,13 +152370,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getNormType(struct PyPetscKSPO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_71setComputeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues[] = "KSP.setComputeEigenvalues(self, bool flag)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_71setComputeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues[] = "KSP.setComputeEigenvalues(self, bool flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_flag;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setComputeEigenvalues (wrapper)", 0);
@@ -148650,42 +152395,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_71setComputeEigenvalues(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeEigenvalues") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeEigenvalues") < 0)) __PYX_ERR(35, 325, __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 = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 325, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setComputeEigenvalues", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setComputeEigenvalues", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 325, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeEigenvalues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag) {
   PetscBool __pyx_v_compute;
   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("setComputeEigenvalues", 0);
 
-  /* "PETSc/KSP.pyx":305
+  /* "PETSc/KSP.pyx":326
  * 
  *     def setComputeEigenvalues(self, bint flag):
  *         cdef PetscBool compute = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -148694,7 +152436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues(struct P
  */
   __pyx_v_compute = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":306
+  /* "PETSc/KSP.pyx":327
  *     def setComputeEigenvalues(self, bint flag):
  *         cdef PetscBool compute = PETSC_FALSE
  *         if flag: compute = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -148704,20 +152446,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues(struct P
   __pyx_t_1 = (__pyx_v_flag != 0);
   if (__pyx_t_1) {
     __pyx_v_compute = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":307
+  /* "PETSc/KSP.pyx":328
  *         cdef PetscBool compute = PETSC_FALSE
  *         if flag: compute = PETSC_TRUE
  *         CHKERR( KSPSetComputeEigenvalues(self.ksp, compute) )             # <<<<<<<<<<<<<<
  * 
  *     def getComputeEigenvalues(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetComputeEigenvalues(__pyx_v_self->ksp, __pyx_v_compute)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetComputeEigenvalues(__pyx_v_self->ksp, __pyx_v_compute)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 328, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":304
+  /* "PETSc/KSP.pyx":325
  *         return normtype
  * 
  *     def setComputeEigenvalues(self, bint flag):             # <<<<<<<<<<<<<<
@@ -148737,7 +152477,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":309
+/* "PETSc/KSP.pyx":330
  *         CHKERR( KSPSetComputeEigenvalues(self.ksp, compute) )
  * 
  *     def getComputeEigenvalues(self):             # <<<<<<<<<<<<<<
@@ -148746,34 +152486,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_73getComputeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues[] = "KSP.getComputeEigenvalues(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_73getComputeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_77getComputeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_76getComputeEigenvalues[] = "KSP.getComputeEigenvalues(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_77getComputeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getComputeEigenvalues (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getComputeEigenvalues", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getComputeEigenvalues", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeEigenvalues(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self) {
   PetscBool __pyx_v_compute;
   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("getComputeEigenvalues", 0);
 
-  /* "PETSc/KSP.pyx":310
+  /* "PETSc/KSP.pyx":331
  * 
  *     def getComputeEigenvalues(self):
  *         cdef PetscBool compute = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -148782,16 +152519,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues(struct P
  */
   __pyx_v_compute = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":311
+  /* "PETSc/KSP.pyx":332
  *     def getComputeEigenvalues(self):
  *         cdef PetscBool compute = PETSC_FALSE
  *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &compute) )             # <<<<<<<<<<<<<<
  *         return <bint>compute
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetComputeEigenvalues(__pyx_v_self->ksp, (&__pyx_v_compute))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetComputeEigenvalues(__pyx_v_self->ksp, (&__pyx_v_compute))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 332, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":312
+  /* "PETSc/KSP.pyx":333
  *         cdef PetscBool compute = PETSC_FALSE
  *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &compute) )
  *         return <bint>compute             # <<<<<<<<<<<<<<
@@ -148799,13 +152536,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues(struct P
  *     def setComputeSingularValues(self, bint flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_compute); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_compute); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 333, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":309
+  /* "PETSc/KSP.pyx":330
  *         CHKERR( KSPSetComputeEigenvalues(self.ksp, compute) )
  * 
  *     def getComputeEigenvalues(self):             # <<<<<<<<<<<<<<
@@ -148824,7 +152561,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":314
+/* "PETSc/KSP.pyx":335
  *         return <bint>compute
  * 
  *     def setComputeSingularValues(self, bint flag):             # <<<<<<<<<<<<<<
@@ -148833,13 +152570,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_74setComputeSingularValues[] = "KSP.setComputeSingularValues(self, bool flag)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_79setComputeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_78setComputeSingularValues[] = "KSP.setComputeSingularValues(self, bool flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_79setComputeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_flag;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setComputeSingularValues (wrapper)", 0);
@@ -148861,42 +152595,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeSingularValues(PyObj
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeSingularValues") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeSingularValues") < 0)) __PYX_ERR(35, 335, __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 = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 335, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setComputeSingularValues", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setComputeSingularValues", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 335, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeSingularValues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeSingularValues(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_78setComputeSingularValues(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag) {
   PetscBool __pyx_v_compute;
   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("setComputeSingularValues", 0);
 
-  /* "PETSc/KSP.pyx":315
+  /* "PETSc/KSP.pyx":336
  * 
  *     def setComputeSingularValues(self, bint flag):
  *         cdef PetscBool compute = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -148905,7 +152636,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeSingularValues(struc
  */
   __pyx_v_compute = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":316
+  /* "PETSc/KSP.pyx":337
  *     def setComputeSingularValues(self, bint flag):
  *         cdef PetscBool compute = PETSC_FALSE
  *         if flag: compute = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -148915,20 +152646,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeSingularValues(struc
   __pyx_t_1 = (__pyx_v_flag != 0);
   if (__pyx_t_1) {
     __pyx_v_compute = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":317
+  /* "PETSc/KSP.pyx":338
  *         cdef PetscBool compute = PETSC_FALSE
  *         if flag: compute = PETSC_TRUE
  *         CHKERR( KSPSetComputeSingularValues(self.ksp, compute) )             # <<<<<<<<<<<<<<
  * 
  *     def getComputeSingularValues(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetComputeSingularValues(__pyx_v_self->ksp, __pyx_v_compute)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetComputeSingularValues(__pyx_v_self->ksp, __pyx_v_compute)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 338, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":314
+  /* "PETSc/KSP.pyx":335
  *         return <bint>compute
  * 
  *     def setComputeSingularValues(self, bint flag):             # <<<<<<<<<<<<<<
@@ -148948,7 +152677,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeSingularValues(struc
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":319
+/* "PETSc/KSP.pyx":340
  *         CHKERR( KSPSetComputeSingularValues(self.ksp, compute) )
  * 
  *     def getComputeSingularValues(self):             # <<<<<<<<<<<<<<
@@ -148957,34 +152686,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeSingularValues(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_77getComputeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_76getComputeSingularValues[] = "KSP.getComputeSingularValues(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_77getComputeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_81getComputeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_80getComputeSingularValues[] = "KSP.getComputeSingularValues(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_81getComputeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getComputeSingularValues (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getComputeSingularValues", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getComputeSingularValues", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeSingularValues(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_80getComputeSingularValues(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self) {
   PetscBool __pyx_v_compute;
   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("getComputeSingularValues", 0);
 
-  /* "PETSc/KSP.pyx":320
+  /* "PETSc/KSP.pyx":341
  * 
  *     def getComputeSingularValues(self):
  *         cdef PetscBool compute = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -148993,16 +152719,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeSingularValues(struc
  */
   __pyx_v_compute = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":321
+  /* "PETSc/KSP.pyx":342
  *     def getComputeSingularValues(self):
  *         cdef PetscBool compute = PETSC_FALSE
  *         CHKERR( KSPGetComputeSingularValues(self.ksp, &compute) )             # <<<<<<<<<<<<<<
  *         return <bint>compute
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetComputeSingularValues(__pyx_v_self->ksp, (&__pyx_v_compute))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetComputeSingularValues(__pyx_v_self->ksp, (&__pyx_v_compute))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 342, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":322
+  /* "PETSc/KSP.pyx":343
  *         cdef PetscBool compute = PETSC_FALSE
  *         CHKERR( KSPGetComputeSingularValues(self.ksp, &compute) )
  *         return <bint>compute             # <<<<<<<<<<<<<<
@@ -149010,13 +152736,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeSingularValues(struc
  *     # --- initial guess ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_compute); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_compute); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":319
+  /* "PETSc/KSP.pyx":340
  *         CHKERR( KSPSetComputeSingularValues(self.ksp, compute) )
  * 
  *     def getComputeSingularValues(self):             # <<<<<<<<<<<<<<
@@ -149035,7 +152761,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeSingularValues(struc
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":326
+/* "PETSc/KSP.pyx":347
  *     # --- initial guess ---
  * 
  *     def setInitialGuessNonzero(self, bint flag):             # <<<<<<<<<<<<<<
@@ -149044,13 +152770,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeSingularValues(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_79setInitialGuessNonzero(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero[] = "KSP.setInitialGuessNonzero(self, bool flag)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_79setInitialGuessNonzero(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessNonzero(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero[] = "KSP.setInitialGuessNonzero(self, bool flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessNonzero(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_flag;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setInitialGuessNonzero (wrapper)", 0);
@@ -149072,42 +152795,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_79setInitialGuessNonzero(PyObjec
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialGuessNonzero") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialGuessNonzero") < 0)) __PYX_ERR(35, 347, __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 = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 347, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialGuessNonzero", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInitialGuessNonzero", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 347, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setInitialGuessNonzero", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag) {
   PetscBool __pyx_v_guess_nonzero;
   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("setInitialGuessNonzero", 0);
 
-  /* "PETSc/KSP.pyx":327
+  /* "PETSc/KSP.pyx":348
  * 
  *     def setInitialGuessNonzero(self, bint flag):
  *         cdef PetscBool guess_nonzero = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -149116,7 +152836,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero(struct
  */
   __pyx_v_guess_nonzero = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":328
+  /* "PETSc/KSP.pyx":349
  *     def setInitialGuessNonzero(self, bint flag):
  *         cdef PetscBool guess_nonzero = PETSC_FALSE
  *         if flag: guess_nonzero = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -149126,20 +152846,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero(struct
   __pyx_t_1 = (__pyx_v_flag != 0);
   if (__pyx_t_1) {
     __pyx_v_guess_nonzero = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":329
+  /* "PETSc/KSP.pyx":350
  *         cdef PetscBool guess_nonzero = PETSC_FALSE
  *         if flag: guess_nonzero = PETSC_TRUE
  *         CHKERR( KSPSetInitialGuessNonzero(self.ksp, guess_nonzero) )             # <<<<<<<<<<<<<<
  * 
  *     def getInitialGuessNonzero(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetInitialGuessNonzero(__pyx_v_self->ksp, __pyx_v_guess_nonzero)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetInitialGuessNonzero(__pyx_v_self->ksp, __pyx_v_guess_nonzero)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 350, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":326
+  /* "PETSc/KSP.pyx":347
  *     # --- initial guess ---
  * 
  *     def setInitialGuessNonzero(self, bint flag):             # <<<<<<<<<<<<<<
@@ -149159,7 +152877,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero(struct
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":331
+/* "PETSc/KSP.pyx":352
  *         CHKERR( KSPSetInitialGuessNonzero(self.ksp, guess_nonzero) )
  * 
  *     def getInitialGuessNonzero(self):             # <<<<<<<<<<<<<<
@@ -149168,34 +152886,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_81getInitialGuessNonzero(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero[] = "KSP.getInitialGuessNonzero(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_81getInitialGuessNonzero(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_85getInitialGuessNonzero(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_84getInitialGuessNonzero[] = "KSP.getInitialGuessNonzero(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_85getInitialGuessNonzero(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getInitialGuessNonzero (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getInitialGuessNonzero", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInitialGuessNonzero", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessNonzero(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self) {
   PetscBool __pyx_v_guess_nonzero;
   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("getInitialGuessNonzero", 0);
 
-  /* "PETSc/KSP.pyx":332
+  /* "PETSc/KSP.pyx":353
  * 
  *     def getInitialGuessNonzero(self):
  *         cdef PetscBool guess_nonzero = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -149204,16 +152919,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero(struct
  */
   __pyx_v_guess_nonzero = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":333
+  /* "PETSc/KSP.pyx":354
  *     def getInitialGuessNonzero(self):
  *         cdef PetscBool guess_nonzero = PETSC_FALSE
  *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &guess_nonzero) )             # <<<<<<<<<<<<<<
  *         return <bint>guess_nonzero
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetInitialGuessNonzero(__pyx_v_self->ksp, (&__pyx_v_guess_nonzero))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetInitialGuessNonzero(__pyx_v_self->ksp, (&__pyx_v_guess_nonzero))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 354, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":334
+  /* "PETSc/KSP.pyx":355
  *         cdef PetscBool guess_nonzero = PETSC_FALSE
  *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &guess_nonzero) )
  *         return <bint>guess_nonzero             # <<<<<<<<<<<<<<
@@ -149221,13 +152936,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero(struct
  *     def setInitialGuessKnoll(self, bint flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_guess_nonzero); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_guess_nonzero); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 355, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":331
+  /* "PETSc/KSP.pyx":352
  *         CHKERR( KSPSetInitialGuessNonzero(self.ksp, guess_nonzero) )
  * 
  *     def getInitialGuessNonzero(self):             # <<<<<<<<<<<<<<
@@ -149246,7 +152961,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero(struct
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":336
+/* "PETSc/KSP.pyx":357
  *         return <bint>guess_nonzero
  * 
  *     def setInitialGuessKnoll(self, bint flag):             # <<<<<<<<<<<<<<
@@ -149255,13 +152970,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessKnoll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll[] = "KSP.setInitialGuessKnoll(self, bool flag)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessKnoll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_87setInitialGuessKnoll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll[] = "KSP.setInitialGuessKnoll(self, bool flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_87setInitialGuessKnoll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_flag;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setInitialGuessKnoll (wrapper)", 0);
@@ -149283,42 +152995,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessKnoll(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialGuessKnoll") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialGuessKnoll") < 0)) __PYX_ERR(35, 357, __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 = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 357, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialGuessKnoll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInitialGuessKnoll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 357, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setInitialGuessKnoll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self, int __pyx_v_flag) {
   PetscBool __pyx_v_guess_knoll;
   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("setInitialGuessKnoll", 0);
 
-  /* "PETSc/KSP.pyx":337
+  /* "PETSc/KSP.pyx":358
  * 
  *     def setInitialGuessKnoll(self, bint flag):
  *         cdef PetscBool guess_knoll = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -149327,7 +153036,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll(struct Py
  */
   __pyx_v_guess_knoll = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":338
+  /* "PETSc/KSP.pyx":359
  *     def setInitialGuessKnoll(self, bint flag):
  *         cdef PetscBool guess_knoll = PETSC_FALSE
  *         if flag: guess_knoll = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -149337,20 +153046,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll(struct Py
   __pyx_t_1 = (__pyx_v_flag != 0);
   if (__pyx_t_1) {
     __pyx_v_guess_knoll = PETSC_TRUE;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":339
+  /* "PETSc/KSP.pyx":360
  *         cdef PetscBool guess_knoll = PETSC_FALSE
  *         if flag: guess_knoll = PETSC_TRUE
  *         CHKERR( KSPSetInitialGuessKnoll(self.ksp, guess_knoll) )             # <<<<<<<<<<<<<<
  * 
  *     def getInitialGuessKnoll(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetInitialGuessKnoll(__pyx_v_self->ksp, __pyx_v_guess_knoll)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetInitialGuessKnoll(__pyx_v_self->ksp, __pyx_v_guess_knoll)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 360, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":336
+  /* "PETSc/KSP.pyx":357
  *         return <bint>guess_nonzero
  * 
  *     def setInitialGuessKnoll(self, bint flag):             # <<<<<<<<<<<<<<
@@ -149370,7 +153077,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":341
+/* "PETSc/KSP.pyx":362
  *         CHKERR( KSPSetInitialGuessKnoll(self.ksp, guess_knoll) )
  * 
  *     def getInitialGuessKnoll(self):             # <<<<<<<<<<<<<<
@@ -149379,34 +153086,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_85getInitialGuessKnoll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll[] = "KSP.getInitialGuessKnoll(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_85getInitialGuessKnoll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_89getInitialGuessKnoll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_88getInitialGuessKnoll[] = "KSP.getInitialGuessKnoll(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_89getInitialGuessKnoll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getInitialGuessKnoll (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getInitialGuessKnoll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInitialGuessKnoll", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_88getInitialGuessKnoll(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_88getInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self) {
   PetscBool __pyx_v_guess_knoll;
   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("getInitialGuessKnoll", 0);
 
-  /* "PETSc/KSP.pyx":342
+  /* "PETSc/KSP.pyx":363
  * 
  *     def getInitialGuessKnoll(self):
  *         cdef PetscBool guess_knoll = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -149415,16 +153119,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll(struct Py
  */
   __pyx_v_guess_knoll = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":343
+  /* "PETSc/KSP.pyx":364
  *     def getInitialGuessKnoll(self):
  *         cdef PetscBool guess_knoll = PETSC_FALSE
  *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &guess_knoll) )             # <<<<<<<<<<<<<<
  *         return <bint>guess_knoll
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetInitialGuessKnoll(__pyx_v_self->ksp, (&__pyx_v_guess_knoll))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetInitialGuessKnoll(__pyx_v_self->ksp, (&__pyx_v_guess_knoll))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 364, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":344
+  /* "PETSc/KSP.pyx":365
  *         cdef PetscBool guess_knoll = PETSC_FALSE
  *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &guess_knoll) )
  *         return <bint>guess_knoll             # <<<<<<<<<<<<<<
@@ -149432,13 +153136,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll(struct Py
  *     def setUseFischerGuess(self, model, size):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_guess_knoll); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_guess_knoll); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 365, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":341
+  /* "PETSc/KSP.pyx":362
  *         CHKERR( KSPSetInitialGuessKnoll(self.ksp, guess_knoll) )
  * 
  *     def getInitialGuessKnoll(self):             # <<<<<<<<<<<<<<
@@ -149457,7 +153161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":346
+/* "PETSc/KSP.pyx":367
  *         return <bint>guess_knoll
  * 
  *     def setUseFischerGuess(self, model, size):             # <<<<<<<<<<<<<<
@@ -149466,14 +153170,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_87setUseFischerGuess(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_86setUseFischerGuess[] = "KSP.setUseFischerGuess(self, model, size)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_87setUseFischerGuess(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_91setUseFischerGuess(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_90setUseFischerGuess[] = "KSP.setUseFischerGuess(self, model, size)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_91setUseFischerGuess(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_model = 0;
   PyObject *__pyx_v_size = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setUseFischerGuess (wrapper)", 0);
@@ -149497,11 +153198,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_87setUseFischerGuess(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setUseFischerGuess", 1, 2, 2, 1); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setUseFischerGuess", 1, 2, 2, 1); __PYX_ERR(35, 367, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseFischerGuess") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseFischerGuess") < 0)) __PYX_ERR(35, 367, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -149514,61 +153215,58 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_87setUseFischerGuess(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setUseFischerGuess", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setUseFischerGuess", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 367, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setUseFischerGuess", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_86setUseFischerGuess(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_model, __pyx_v_size);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_90setUseFischerGuess(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_model, __pyx_v_size);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setUseFischerGuess(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_model, PyObject *__pyx_v_size) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_90setUseFischerGuess(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_model, PyObject *__pyx_v_size) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   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("setUseFischerGuess", 0);
 
-  /* "PETSc/KSP.pyx":347
+  /* "PETSc/KSP.pyx":368
  * 
  *     def setUseFischerGuess(self, model, size):
  *         cdef PetscInt ival1 = asInt(model)             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival2 = asInt(size)
  *         CHKERR( KSPSetUseFischerGuess(self.ksp, ival1, ival2) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_model); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_model); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(35, 368, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":348
+  /* "PETSc/KSP.pyx":369
  *     def setUseFischerGuess(self, model, size):
  *         cdef PetscInt ival1 = asInt(model)
  *         cdef PetscInt ival2 = asInt(size)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetUseFischerGuess(self.ksp, ival1, ival2) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(35, 369, __pyx_L1_error)
   __pyx_v_ival2 = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":349
+  /* "PETSc/KSP.pyx":370
  *         cdef PetscInt ival1 = asInt(model)
  *         cdef PetscInt ival2 = asInt(size)
  *         CHKERR( KSPSetUseFischerGuess(self.ksp, ival1, ival2) )             # <<<<<<<<<<<<<<
  * 
  *     # --- solving ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetUseFischerGuess(__pyx_v_self->ksp, __pyx_v_ival1, __pyx_v_ival2)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetUseFischerGuess(__pyx_v_self->ksp, __pyx_v_ival1, __pyx_v_ival2)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 370, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":346
+  /* "PETSc/KSP.pyx":367
  *         return <bint>guess_knoll
  * 
  *     def setUseFischerGuess(self, model, size):             # <<<<<<<<<<<<<<
@@ -149588,7 +153286,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setUseFischerGuess(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":353
+/* "PETSc/KSP.pyx":374
  *     # --- solving ---
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -149597,41 +153295,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setUseFischerGuess(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_89setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_88setUp[] = "KSP.setUp(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_89setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_93setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_92setUp[] = "KSP.setUp(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_93setUp(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_8petsc4py_5PETSc_3KSP_88setUp(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_92setUp(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_88setUp(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_92setUp(struct PyPetscKSPObject *__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);
 
-  /* "PETSc/KSP.pyx":354
+  /* "PETSc/KSP.pyx":375
  * 
  *     def setUp(self):
  *         CHKERR( KSPSetUp(self.ksp) )             # <<<<<<<<<<<<<<
  * 
  *     def reset(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetUp(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetUp(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 375, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":353
+  /* "PETSc/KSP.pyx":374
  *     # --- solving ---
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -149651,7 +153346,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_88setUp(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":356
+/* "PETSc/KSP.pyx":377
  *         CHKERR( KSPSetUp(self.ksp) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -149660,41 +153355,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_88setUp(struct PyPetscKSPObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_91reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_90reset[] = "KSP.reset(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_91reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_95reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_94reset[] = "KSP.reset(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_95reset(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_8petsc4py_5PETSc_3KSP_90reset(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_94reset(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_90reset(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_94reset(struct PyPetscKSPObject *__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);
 
-  /* "PETSc/KSP.pyx":357
+  /* "PETSc/KSP.pyx":378
  * 
  *     def reset(self):
  *         CHKERR( KSPReset(self.ksp) )             # <<<<<<<<<<<<<<
  * 
  *     def setUpOnBlocks(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPReset(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPReset(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 378, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":356
+  /* "PETSc/KSP.pyx":377
  *         CHKERR( KSPSetUp(self.ksp) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -149714,7 +153406,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_90reset(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":359
+/* "PETSc/KSP.pyx":380
  *         CHKERR( KSPReset(self.ksp) )
  * 
  *     def setUpOnBlocks(self):             # <<<<<<<<<<<<<<
@@ -149723,41 +153415,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_90reset(struct PyPetscKSPObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_93setUpOnBlocks(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_92setUpOnBlocks[] = "KSP.setUpOnBlocks(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_93setUpOnBlocks(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_97setUpOnBlocks(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_96setUpOnBlocks[] = "KSP.setUpOnBlocks(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_97setUpOnBlocks(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setUpOnBlocks (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("setUpOnBlocks", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUpOnBlocks", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_92setUpOnBlocks(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_96setUpOnBlocks(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_92setUpOnBlocks(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_96setUpOnBlocks(struct PyPetscKSPObject *__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("setUpOnBlocks", 0);
 
-  /* "PETSc/KSP.pyx":360
+  /* "PETSc/KSP.pyx":381
  * 
  *     def setUpOnBlocks(self):
  *         CHKERR( KSPSetUpOnBlocks(self.ksp) )             # <<<<<<<<<<<<<<
  * 
  *     def solve(self, Vec b not None, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetUpOnBlocks(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetUpOnBlocks(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 381, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":359
+  /* "PETSc/KSP.pyx":380
  *         CHKERR( KSPReset(self.ksp) )
  * 
  *     def setUpOnBlocks(self):             # <<<<<<<<<<<<<<
@@ -149777,7 +153466,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_92setUpOnBlocks(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":362
+/* "PETSc/KSP.pyx":383
  *         CHKERR( KSPSetUpOnBlocks(self.ksp) )
  * 
  *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -149786,14 +153475,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_92setUpOnBlocks(struct PyPetscKS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_95solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_94solve[] = "KSP.solve(self, Vec b, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_95solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_98solve[] = "KSP.solve(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99solve(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solve (wrapper)", 0);
@@ -149817,11 +153503,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_95solve(PyObject *__pyx_v_self,
         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[35]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(35, 383, __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[35]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(35, 383, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -149834,15 +153520,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_95solve(PyObject *__pyx_v_self,
   }
   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[35]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 383, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.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[35]; __pyx_lineno = 362; __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[35]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_94solve(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(35, 383, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(35, 383, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_98solve(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -149853,25 +153539,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_95solve(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_94solve(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_98solve(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
   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);
 
-  /* "PETSc/KSP.pyx":363
+  /* "PETSc/KSP.pyx":384
  * 
  *     def solve(self, Vec b not None, Vec x not None):
  *         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def solveTranspose(self, Vec b not None, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSolve(__pyx_v_self->ksp, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSolve(__pyx_v_self->ksp, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 384, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":362
+  /* "PETSc/KSP.pyx":383
  *         CHKERR( KSPSetUpOnBlocks(self.ksp) )
  * 
  *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -149891,7 +153574,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_94solve(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":365
+/* "PETSc/KSP.pyx":386
  *         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )
  * 
  *     def solveTranspose(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -149900,14 +153583,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_94solve(struct PyPetscKSPObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_97solveTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_96solveTranspose[] = "KSP.solveTranspose(self, Vec b, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_97solveTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_101solveTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_100solveTranspose[] = "KSP.solveTranspose(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_101solveTranspose(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solveTranspose (wrapper)", 0);
@@ -149931,11 +153611,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_97solveTranspose(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, 1); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, 1); __PYX_ERR(35, 386, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTranspose") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTranspose") < 0)) __PYX_ERR(35, 386, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -149948,15 +153628,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_97solveTranspose(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 386, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.solveTranspose", __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[35]; __pyx_lineno = 365; __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[35]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_96solveTranspose(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(35, 386, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(35, 386, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_100solveTranspose(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -149967,25 +153647,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_97solveTranspose(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_96solveTranspose(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100solveTranspose(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
   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("solveTranspose", 0);
 
-  /* "PETSc/KSP.pyx":366
+  /* "PETSc/KSP.pyx":387
  * 
  *     def solveTranspose(self, Vec b not None, Vec x not None):
  *         CHKERR( KSPSolveTranspose(self.ksp, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def setIterationNumber(self, its):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSolveTranspose(__pyx_v_self->ksp, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSolveTranspose(__pyx_v_self->ksp, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 387, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":365
+  /* "PETSc/KSP.pyx":386
  *         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )
  * 
  *     def solveTranspose(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
@@ -150005,7 +153682,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_96solveTranspose(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":368
+/* "PETSc/KSP.pyx":389
  *         CHKERR( KSPSolveTranspose(self.ksp, b.vec, x.vec) )
  * 
  *     def setIterationNumber(self, its):             # <<<<<<<<<<<<<<
@@ -150014,13 +153691,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_96solveTranspose(struct PyPetscK
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99setIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_98setIterationNumber[] = "KSP.setIterationNumber(self, its)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99setIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_102setIterationNumber[] = "KSP.setIterationNumber(self, its)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_its = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setIterationNumber (wrapper)", 0);
@@ -150042,7 +153716,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99setIterationNumber(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIterationNumber") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIterationNumber") < 0)) __PYX_ERR(35, 389, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -150053,50 +153727,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99setIterationNumber(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setIterationNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setIterationNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 389, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_98setIterationNumber(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_its);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_102setIterationNumber(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_its);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_98setIterationNumber(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_102setIterationNumber(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_its) {
   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("setIterationNumber", 0);
 
-  /* "PETSc/KSP.pyx":369
+  /* "PETSc/KSP.pyx":390
  * 
  *     def setIterationNumber(self, its):
  *         cdef PetscInt ival = asInt(its)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetIterationNumber(self.ksp, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(35, 390, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":370
+  /* "PETSc/KSP.pyx":391
  *     def setIterationNumber(self, its):
  *         cdef PetscInt ival = asInt(its)
  *         CHKERR( KSPSetIterationNumber(self.ksp, ival) )             # <<<<<<<<<<<<<<
  * 
  *     def getIterationNumber(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetIterationNumber(__pyx_v_self->ksp, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetIterationNumber(__pyx_v_self->ksp, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 391, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":368
+  /* "PETSc/KSP.pyx":389
  *         CHKERR( KSPSolveTranspose(self.ksp, b.vec, x.vec) )
  * 
  *     def setIterationNumber(self, its):             # <<<<<<<<<<<<<<
@@ -150116,7 +153787,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_98setIterationNumber(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":372
+/* "PETSc/KSP.pyx":393
  *         CHKERR( KSPSetIterationNumber(self.ksp, ival) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
@@ -150125,34 +153796,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_98setIterationNumber(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_101getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_100getIterationNumber[] = "KSP.getIterationNumber(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_101getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_105getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_104getIterationNumber[] = "KSP.getIterationNumber(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_105getIterationNumber(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_8petsc4py_5PETSc_3KSP_100getIterationNumber(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_104getIterationNumber(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100getIterationNumber(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getIterationNumber(struct PyPetscKSPObject *__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);
 
-  /* "PETSc/KSP.pyx":373
+  /* "PETSc/KSP.pyx":394
  * 
  *     def getIterationNumber(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -150161,16 +153829,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100getIterationNumber(struct PyP
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/KSP.pyx":374
+  /* "PETSc/KSP.pyx":395
  *     def getIterationNumber(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( KSPGetIterationNumber(self.ksp, &ival) )             # <<<<<<<<<<<<<<
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetIterationNumber(__pyx_v_self->ksp, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetIterationNumber(__pyx_v_self->ksp, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 395, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":375
+  /* "PETSc/KSP.pyx":396
  *         cdef PetscInt ival = 0
  *         CHKERR( KSPGetIterationNumber(self.ksp, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -150178,13 +153846,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100getIterationNumber(struct PyP
  *     def setResidualNorm(self, rnorm):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 396, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":372
+  /* "PETSc/KSP.pyx":393
  *         CHKERR( KSPSetIterationNumber(self.ksp, ival) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
@@ -150203,7 +153871,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100getIterationNumber(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":377
+/* "PETSc/KSP.pyx":398
  *         return toInt(ival)
  * 
  *     def setResidualNorm(self, rnorm):             # <<<<<<<<<<<<<<
@@ -150212,13 +153880,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100getIterationNumber(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setResidualNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_102setResidualNorm[] = "KSP.setResidualNorm(self, rnorm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setResidualNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setResidualNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_106setResidualNorm[] = "KSP.setResidualNorm(self, rnorm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setResidualNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rnorm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setResidualNorm (wrapper)", 0);
@@ -150240,7 +153905,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setResidualNorm(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, "setResidualNorm") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setResidualNorm") < 0)) __PYX_ERR(35, 398, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -150251,50 +153916,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setResidualNorm(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setResidualNorm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setResidualNorm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 398, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setResidualNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_102setResidualNorm(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_rnorm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_106setResidualNorm(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_rnorm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_102setResidualNorm(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rnorm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_106setResidualNorm(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_rnorm) {
   PetscReal __pyx_v_rval;
   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("setResidualNorm", 0);
 
-  /* "PETSc/KSP.pyx":378
+  /* "PETSc/KSP.pyx":399
  * 
  *     def setResidualNorm(self, rnorm):
  *         cdef PetscReal rval = asReal(rnorm)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetResidualNorm(self.ksp, rval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(35, 399, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":379
+  /* "PETSc/KSP.pyx":400
  *     def setResidualNorm(self, rnorm):
  *         cdef PetscReal rval = asReal(rnorm)
  *         CHKERR( KSPSetResidualNorm(self.ksp, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def getResidualNorm(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetResidualNorm(__pyx_v_self->ksp, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetResidualNorm(__pyx_v_self->ksp, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 400, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":377
+  /* "PETSc/KSP.pyx":398
  *         return toInt(ival)
  * 
  *     def setResidualNorm(self, rnorm):             # <<<<<<<<<<<<<<
@@ -150314,7 +153976,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_102setResidualNorm(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":381
+/* "PETSc/KSP.pyx":402
  *         CHKERR( KSPSetResidualNorm(self.ksp, rval) )
  * 
  *     def getResidualNorm(self):             # <<<<<<<<<<<<<<
@@ -150323,34 +153985,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_102setResidualNorm(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_105getResidualNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_104getResidualNorm[] = "KSP.getResidualNorm(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_105getResidualNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_109getResidualNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_108getResidualNorm[] = "KSP.getResidualNorm(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_109getResidualNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getResidualNorm (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getResidualNorm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getResidualNorm", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_104getResidualNorm(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_108getResidualNorm(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getResidualNorm(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getResidualNorm(struct PyPetscKSPObject *__pyx_v_self) {
   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("getResidualNorm", 0);
 
-  /* "PETSc/KSP.pyx":382
+  /* "PETSc/KSP.pyx":403
  * 
  *     def getResidualNorm(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -150359,16 +154018,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getResidualNorm(struct PyPets
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/KSP.pyx":383
+  /* "PETSc/KSP.pyx":404
  *     def getResidualNorm(self):
  *         cdef PetscReal rval = 0
  *         CHKERR( KSPGetResidualNorm(self.ksp, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetResidualNorm(__pyx_v_self->ksp, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetResidualNorm(__pyx_v_self->ksp, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 404, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":384
+  /* "PETSc/KSP.pyx":405
  *         cdef PetscReal rval = 0
  *         CHKERR( KSPGetResidualNorm(self.ksp, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -150376,13 +154035,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getResidualNorm(struct PyPets
  *     def setConvergedReason(self, reason):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 405, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":381
+  /* "PETSc/KSP.pyx":402
  *         CHKERR( KSPSetResidualNorm(self.ksp, rval) )
  * 
  *     def getResidualNorm(self):             # <<<<<<<<<<<<<<
@@ -150401,7 +154060,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getResidualNorm(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":386
+/* "PETSc/KSP.pyx":407
  *         return toReal(rval)
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -150410,13 +154069,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getResidualNorm(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_106setConvergedReason[] = "KSP.setConvergedReason(self, reason)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_111setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_110setConvergedReason[] = "KSP.setConvergedReason(self, reason)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_111setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_reason = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergedReason (wrapper)", 0);
@@ -150438,7 +154094,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setConvergedReason(PyObject *
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) __PYX_ERR(35, 407, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -150449,50 +154105,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setConvergedReason(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 407, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_106setConvergedReason(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_reason);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_110setConvergedReason(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_reason);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_106setConvergedReason(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_reason) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110setConvergedReason(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_reason) {
   KSPConvergedReason __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   KSPConvergedReason __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setConvergedReason", 0);
 
-  /* "PETSc/KSP.pyx":387
+  /* "PETSc/KSP.pyx":408
  * 
  *     def setConvergedReason(self, reason):
  *         cdef PetscKSPConvergedReason val = reason             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetConvergedReason(self.ksp, val) )
  * 
  */
-  __pyx_t_1 = ((KSPConvergedReason)PyInt_AsLong(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((KSPConvergedReason)__Pyx_PyInt_As_KSPConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 408, __pyx_L1_error)
   __pyx_v_val = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":388
+  /* "PETSc/KSP.pyx":409
  *     def setConvergedReason(self, reason):
  *         cdef PetscKSPConvergedReason val = reason
  *         CHKERR( KSPSetConvergedReason(self.ksp, val) )             # <<<<<<<<<<<<<<
  * 
  *     def getConvergedReason(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergedReason(__pyx_v_self->ksp, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergedReason(__pyx_v_self->ksp, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 409, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":386
+  /* "PETSc/KSP.pyx":407
  *         return toReal(rval)
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -150512,7 +154165,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_106setConvergedReason(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":390
+/* "PETSc/KSP.pyx":411
  *         CHKERR( KSPSetConvergedReason(self.ksp, val) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -150521,34 +154174,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_106setConvergedReason(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_109getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_108getConvergedReason[] = "KSP.getConvergedReason(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_109getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_113getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_112getConvergedReason[] = "KSP.getConvergedReason(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_113getConvergedReason(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_8petsc4py_5PETSc_3KSP_108getConvergedReason(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_112getConvergedReason(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getConvergedReason(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getConvergedReason(struct PyPetscKSPObject *__pyx_v_self) {
   KSPConvergedReason __pyx_v_reason;
   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);
 
-  /* "PETSc/KSP.pyx":391
+  /* "PETSc/KSP.pyx":412
  * 
  *     def getConvergedReason(self):
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -150557,16 +154207,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getConvergedReason(struct PyP
  */
   __pyx_v_reason = KSP_CONVERGED_ITERATING;
 
-  /* "PETSc/KSP.pyx":392
+  /* "PETSc/KSP.pyx":413
  *     def getConvergedReason(self):
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING
  *         CHKERR( KSPGetConvergedReason(self.ksp, &reason) )             # <<<<<<<<<<<<<<
  *         return reason
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetConvergedReason(__pyx_v_self->ksp, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetConvergedReason(__pyx_v_self->ksp, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 413, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":393
+  /* "PETSc/KSP.pyx":414
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING
  *         CHKERR( KSPGetConvergedReason(self.ksp, &reason) )
  *         return reason             # <<<<<<<<<<<<<<
@@ -150574,13 +154224,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getConvergedReason(struct PyP
  *     def getRhs(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_KSPConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 414, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":390
+  /* "PETSc/KSP.pyx":411
  *         CHKERR( KSPSetConvergedReason(self.ksp, val) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -150599,7 +154249,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getConvergedReason(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":395
+/* "PETSc/KSP.pyx":416
  *         return reason
  * 
  *     def getRhs(self):             # <<<<<<<<<<<<<<
@@ -150608,55 +154258,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getConvergedReason(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_111getRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_110getRhs[] = "KSP.getRhs(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_111getRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_115getRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_114getRhs[] = "KSP.getRhs(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_115getRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRhs (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getRhs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRhs", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_110getRhs(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_114getRhs(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110getRhs(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getRhs(struct PyPetscKSPObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vec = 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("getRhs", 0);
 
-  /* "PETSc/KSP.pyx":396
+  /* "PETSc/KSP.pyx":417
  * 
  *     def getRhs(self):
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( KSPGetRhs(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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[35]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 417, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":397
+  /* "PETSc/KSP.pyx":418
  *     def getRhs(self):
  *         cdef Vec vec = Vec()
  *         CHKERR( KSPGetRhs(self.ksp, &vec.vec) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(vec.obj)
  *         return vec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetRhs(__pyx_v_self->ksp, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetRhs(__pyx_v_self->ksp, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 418, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":398
+  /* "PETSc/KSP.pyx":419
  *         cdef Vec vec = Vec()
  *         CHKERR( KSPGetRhs(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -150665,7 +154312,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110getRhs(struct PyPetscKSPObjec
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":399
+  /* "PETSc/KSP.pyx":420
  *         CHKERR( KSPGetRhs(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
@@ -150677,7 +154324,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110getRhs(struct PyPetscKSPObjec
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":395
+  /* "PETSc/KSP.pyx":416
  *         return reason
  * 
  *     def getRhs(self):             # <<<<<<<<<<<<<<
@@ -150697,7 +154344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110getRhs(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":401
+/* "PETSc/KSP.pyx":422
  *         return vec
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -150706,55 +154353,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110getRhs(struct PyPetscKSPObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_113getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_112getSolution[] = "KSP.getSolution(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_113getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_117getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_116getSolution[] = "KSP.getSolution(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_117getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSolution (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSolution", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSolution", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_112getSolution(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_116getSolution(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getSolution(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116getSolution(struct PyPetscKSPObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vec = 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("getSolution", 0);
 
-  /* "PETSc/KSP.pyx":402
+  /* "PETSc/KSP.pyx":423
  * 
  *     def getSolution(self):
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( KSPGetSolution(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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[35]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":403
+  /* "PETSc/KSP.pyx":424
  *     def getSolution(self):
  *         cdef Vec vec = Vec()
  *         CHKERR( KSPGetSolution(self.ksp, &vec.vec) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(vec.obj)
  *         return vec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetSolution(__pyx_v_self->ksp, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetSolution(__pyx_v_self->ksp, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 424, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":404
+  /* "PETSc/KSP.pyx":425
  *         cdef Vec vec = Vec()
  *         CHKERR( KSPGetSolution(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -150763,7 +154407,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getSolution(struct PyPetscKSP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":405
+  /* "PETSc/KSP.pyx":426
  *         CHKERR( KSPGetSolution(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
@@ -150775,7 +154419,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getSolution(struct PyPetscKSP
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":401
+  /* "PETSc/KSP.pyx":422
  *         return vec
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -150795,7 +154439,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getSolution(struct PyPetscKSP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":407
+/* "PETSc/KSP.pyx":428
  *         return vec
  * 
  *     def getWorkVecs(self, right=None, left=None):             # <<<<<<<<<<<<<<
@@ -150804,14 +154448,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getSolution(struct PyPetscKSP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_115getWorkVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_114getWorkVecs[] = "KSP.getWorkVecs(self, right=None, left=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_115getWorkVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119getWorkVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_118getWorkVecs[] = "KSP.getWorkVecs(self, right=None, left=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119getWorkVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_right = 0;
   PyObject *__pyx_v_left = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getWorkVecs (wrapper)", 0);
@@ -150843,7 +154484,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_115getWorkVecs(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getWorkVecs") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getWorkVecs") < 0)) __PYX_ERR(35, 428, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -150858,20 +154499,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_115getWorkVecs(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getWorkVecs", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getWorkVecs", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 428, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.getWorkVecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_right, __pyx_v_left);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_right, __pyx_v_left);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_right, PyObject *__pyx_v_left) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_right, PyObject *__pyx_v_left) {
   int __pyx_v_R;
   int __pyx_v_L;
   PetscInt __pyx_v_i;
@@ -150898,12 +154539,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   PyObject *__pyx_t_13 = NULL;
   PyObject *__pyx_t_14 = NULL;
   PyObject *__pyx_t_15 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getWorkVecs", 0);
 
-  /* "PETSc/KSP.pyx":408
+  /* "PETSc/KSP.pyx":429
  * 
  *     def getWorkVecs(self, right=None, left=None):
  *         cdef bint R = right is not None             # <<<<<<<<<<<<<<
@@ -150913,7 +154551,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   __pyx_t_1 = (__pyx_v_right != Py_None);
   __pyx_v_R = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":409
+  /* "PETSc/KSP.pyx":430
  *     def getWorkVecs(self, right=None, left=None):
  *         cdef bint R = right is not None
  *         cdef bint L = left is not None             # <<<<<<<<<<<<<<
@@ -150923,7 +154561,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   __pyx_t_1 = (__pyx_v_left != Py_None);
   __pyx_v_L = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":410
+  /* "PETSc/KSP.pyx":431
  *         cdef bint R = right is not None
  *         cdef bint L = left is not None
  *         cdef PetscInt i=0, nr=0, nl=0             # <<<<<<<<<<<<<<
@@ -150934,7 +154572,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   __pyx_v_nr = 0;
   __pyx_v_nl = 0;
 
-  /* "PETSc/KSP.pyx":411
+  /* "PETSc/KSP.pyx":432
  *         cdef bint L = left is not None
  *         cdef PetscInt i=0, nr=0, nl=0
  *         cdef PetscVec *vr=NULL, *vl=NULL             # <<<<<<<<<<<<<<
@@ -150944,7 +154582,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   __pyx_v_vr = NULL;
   __pyx_v_vl = NULL;
 
-  /* "PETSc/KSP.pyx":412
+  /* "PETSc/KSP.pyx":433
  *         cdef PetscInt i=0, nr=0, nl=0
  *         cdef PetscVec *vr=NULL, *vl=NULL
  *         if R: nr = asInt(right)             # <<<<<<<<<<<<<<
@@ -150953,13 +154591,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  */
   __pyx_t_1 = (__pyx_v_R != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_right); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_right); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(35, 433, __pyx_L1_error)
     __pyx_v_nr = __pyx_t_2;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":413
+  /* "PETSc/KSP.pyx":434
  *         cdef PetscVec *vr=NULL, *vl=NULL
  *         if R: nr = asInt(right)
  *         if L: nl = asInt(left)             # <<<<<<<<<<<<<<
@@ -150968,13 +154604,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  */
   __pyx_t_1 = (__pyx_v_L != 0);
   if (__pyx_t_1) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_left); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_left); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(35, 434, __pyx_L1_error)
     __pyx_v_nl = __pyx_t_2;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/KSP.pyx":414
+  /* "PETSc/KSP.pyx":435
  *         if R: nr = asInt(right)
  *         if L: nl = asInt(left)
  *         cdef object vecsr = [] if R else None             # <<<<<<<<<<<<<<
@@ -150982,7 +154616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  *         CHKERR( KSPCreateVecs(self.ksp, nr, &vr, nl, &vr) )
  */
   if ((__pyx_v_R != 0)) {
-    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 435, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -150993,7 +154627,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   __pyx_v_vecsr = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":415
+  /* "PETSc/KSP.pyx":436
  *         if L: nl = asInt(left)
  *         cdef object vecsr = [] if R else None
  *         cdef object vecsl = [] if L else None             # <<<<<<<<<<<<<<
@@ -151001,7 +154635,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  *         try:
  */
   if ((__pyx_v_L != 0)) {
-    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 436, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -151012,16 +154646,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   __pyx_v_vecsl = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":416
+  /* "PETSc/KSP.pyx":437
  *         cdef object vecsr = [] if R else None
  *         cdef object vecsl = [] if L else None
  *         CHKERR( KSPCreateVecs(self.ksp, nr, &vr, nl, &vr) )             # <<<<<<<<<<<<<<
  *         try:
  *             for i from 0 <= i < nr:
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPCreateVecs(__pyx_v_self->ksp, __pyx_v_nr, (&__pyx_v_vr), __pyx_v_nl, (&__pyx_v_vr))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPCreateVecs(__pyx_v_self->ksp, __pyx_v_nr, (&__pyx_v_vr), __pyx_v_nl, (&__pyx_v_vr))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(35, 437, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":417
+  /* "PETSc/KSP.pyx":438
  *         cdef object vecsl = [] if L else None
  *         CHKERR( KSPCreateVecs(self.ksp, nr, &vr, nl, &vr) )
  *         try:             # <<<<<<<<<<<<<<
@@ -151030,7 +154664,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  */
   /*try:*/ {
 
-    /* "PETSc/KSP.pyx":418
+    /* "PETSc/KSP.pyx":439
  *         CHKERR( KSPCreateVecs(self.ksp, nr, &vr, nl, &vr) )
  *         try:
  *             for i from 0 <= i < nr:             # <<<<<<<<<<<<<<
@@ -151040,20 +154674,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
     __pyx_t_2 = __pyx_v_nr;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-      /* "PETSc/KSP.pyx":419
+      /* "PETSc/KSP.pyx":440
  *         try:
  *             for i from 0 <= i < nr:
  *                 vecsr.append(ref_Vec(vr[i]))             # <<<<<<<<<<<<<<
  *             for i from 0 <= i < nl:
  *                 vecsl.append(ref_Vec(vl[i]))
  */
-      __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec((__pyx_v_vr[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+      __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec((__pyx_v_vr[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 440, __pyx_L6_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_vecsr, __pyx_t_3); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+      __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_vecsr, __pyx_t_3); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(35, 440, __pyx_L6_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
 
-    /* "PETSc/KSP.pyx":420
+    /* "PETSc/KSP.pyx":441
  *             for i from 0 <= i < nr:
  *                 vecsr.append(ref_Vec(vr[i]))
  *             for i from 0 <= i < nl:             # <<<<<<<<<<<<<<
@@ -151063,21 +154697,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
     __pyx_t_2 = __pyx_v_nl;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-      /* "PETSc/KSP.pyx":421
+      /* "PETSc/KSP.pyx":442
  *                 vecsr.append(ref_Vec(vr[i]))
  *             for i from 0 <= i < nl:
  *                 vecsl.append(ref_Vec(vl[i]))             # <<<<<<<<<<<<<<
  *         finally:
  *             if nr > 0 and vr != NULL:
  */
-      __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec((__pyx_v_vl[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+      __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec((__pyx_v_vl[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 442, __pyx_L6_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_vecsl, __pyx_t_3); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+      __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_vecsl, __pyx_t_3); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(35, 442, __pyx_L6_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
   }
 
-  /* "PETSc/KSP.pyx":423
+  /* "PETSc/KSP.pyx":444
  *                 vecsl.append(ref_Vec(vl[i]))
  *         finally:
  *             if nr > 0 and vr != NULL:             # <<<<<<<<<<<<<<
@@ -151097,7 +154731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
       __pyx_L13_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "PETSc/KSP.pyx":424
+        /* "PETSc/KSP.pyx":445
  *         finally:
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?             # <<<<<<<<<<<<<<
@@ -151105,11 +154739,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  *                 VecDestroyVecs(nl, &vl) # XXX errors?
  */
         VecDestroyVecs(__pyx_v_nr, (&__pyx_v_vr));
-        goto __pyx_L12;
+
+        /* "PETSc/KSP.pyx":444
+ *                 vecsl.append(ref_Vec(vl[i]))
+ *         finally:
+ *             if nr > 0 and vr != NULL:             # <<<<<<<<<<<<<<
+ *                 VecDestroyVecs(nr, &vr) # XXX errors?
+ *             if nl > 0 and vl !=NULL:
+ */
       }
-      __pyx_L12:;
 
-      /* "PETSc/KSP.pyx":425
+      /* "PETSc/KSP.pyx":446
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:             # <<<<<<<<<<<<<<
@@ -151127,7 +154767,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
       __pyx_L16_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "PETSc/KSP.pyx":426
+        /* "PETSc/KSP.pyx":447
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:
  *                 VecDestroyVecs(nl, &vl) # XXX errors?             # <<<<<<<<<<<<<<
@@ -151135,14 +154775,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  *         if R and L: return (vecsr, vecsl)
  */
         VecDestroyVecs(__pyx_v_nl, (&__pyx_v_vl));
-        goto __pyx_L15;
+
+        /* "PETSc/KSP.pyx":446
+ *             if nr > 0 and vr != NULL:
+ *                 VecDestroyVecs(nr, &vr) # XXX errors?
+ *             if nl > 0 and vl !=NULL:             # <<<<<<<<<<<<<<
+ *                 VecDestroyVecs(nl, &vl) # XXX errors?
+ *         #
+ */
       }
-      __pyx_L15:;
       goto __pyx_L7;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L6_error:;
       __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
@@ -151156,7 +154804,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
       __pyx_t_5 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
 
-        /* "PETSc/KSP.pyx":423
+        /* "PETSc/KSP.pyx":444
  *                 vecsl.append(ref_Vec(vl[i]))
  *         finally:
  *             if nr > 0 and vr != NULL:             # <<<<<<<<<<<<<<
@@ -151174,7 +154822,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
         __pyx_L21_bool_binop_done:;
         if (__pyx_t_1) {
 
-          /* "PETSc/KSP.pyx":424
+          /* "PETSc/KSP.pyx":445
  *         finally:
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?             # <<<<<<<<<<<<<<
@@ -151182,11 +154830,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  *                 VecDestroyVecs(nl, &vl) # XXX errors?
  */
           VecDestroyVecs(__pyx_v_nr, (&__pyx_v_vr));
-          goto __pyx_L20;
+
+          /* "PETSc/KSP.pyx":444
+ *                 vecsl.append(ref_Vec(vl[i]))
+ *         finally:
+ *             if nr > 0 and vr != NULL:             # <<<<<<<<<<<<<<
+ *                 VecDestroyVecs(nr, &vr) # XXX errors?
+ *             if nl > 0 and vl !=NULL:
+ */
         }
-        __pyx_L20:;
 
-        /* "PETSc/KSP.pyx":425
+        /* "PETSc/KSP.pyx":446
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:             # <<<<<<<<<<<<<<
@@ -151204,7 +154858,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
         __pyx_L24_bool_binop_done:;
         if (__pyx_t_1) {
 
-          /* "PETSc/KSP.pyx":426
+          /* "PETSc/KSP.pyx":447
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:
  *                 VecDestroyVecs(nl, &vl) # XXX errors?             # <<<<<<<<<<<<<<
@@ -151212,10 +154866,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  *         if R and L: return (vecsr, vecsl)
  */
           VecDestroyVecs(__pyx_v_nl, (&__pyx_v_vl));
-          goto __pyx_L23;
+
+          /* "PETSc/KSP.pyx":446
+ *             if nr > 0 and vr != NULL:
+ *                 VecDestroyVecs(nr, &vr) # XXX errors?
+ *             if nl > 0 and vl !=NULL:             # <<<<<<<<<<<<<<
+ *                 VecDestroyVecs(nl, &vl) # XXX errors?
+ *         #
+ */
         }
-        __pyx_L23:;
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
         __Pyx_XGIVEREF(__pyx_t_14);
@@ -151233,7 +154894,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
     __pyx_L7:;
   }
 
-  /* "PETSc/KSP.pyx":428
+  /* "PETSc/KSP.pyx":449
  *                 VecDestroyVecs(nl, &vl) # XXX errors?
  *         #
  *         if R and L: return (vecsr, vecsl)             # <<<<<<<<<<<<<<
@@ -151251,7 +154912,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   __pyx_L27_bool_binop_done:;
   if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 449, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_vecsr);
     __Pyx_GIVEREF(__pyx_v_vecsr);
@@ -151264,7 +154925,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":429
+  /* "PETSc/KSP.pyx":450
  *         #
  *         if R and L: return (vecsr, vecsl)
  *         elif R:     return vecsr             # <<<<<<<<<<<<<<
@@ -151279,7 +154940,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":430
+  /* "PETSc/KSP.pyx":451
  *         if R and L: return (vecsr, vecsl)
  *         elif R:     return vecsr
  *         elif L:     return vecsl             # <<<<<<<<<<<<<<
@@ -151293,22 +154954,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
     __pyx_r = __pyx_v_vecsl;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/KSP.pyx":431
+  /* "PETSc/KSP.pyx":452
  *         elif R:     return vecsr
  *         elif L:     return vecsl
  *         else:       return None             # <<<<<<<<<<<<<<
  * 
  *     def buildSolution(self, Vec x=None):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":407
+  /* "PETSc/KSP.pyx":428
  *         return vec
  * 
  *     def getWorkVecs(self, right=None, left=None):             # <<<<<<<<<<<<<<
@@ -151330,7 +154991,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":433
+/* "PETSc/KSP.pyx":454
  *         else:       return None
  * 
  *     def buildSolution(self, Vec x=None):             # <<<<<<<<<<<<<<
@@ -151339,13 +155000,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getWorkVecs(struct PyPetscKSP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_117buildSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_116buildSolution[] = "KSP.buildSolution(self, Vec x=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_117buildSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_121buildSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_120buildSolution[] = "KSP.buildSolution(self, Vec x=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_121buildSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("buildSolution (wrapper)", 0);
@@ -151370,7 +155028,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_117buildSolution(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "buildSolution") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "buildSolution") < 0)) __PYX_ERR(35, 454, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -151383,14 +155041,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_117buildSolution(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("buildSolution", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("buildSolution", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 454, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.buildSolution", __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, 1, "x", 0))) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_116buildSolution(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(35, 454, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -151401,20 +155059,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_117buildSolution(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116buildSolution(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("buildSolution", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_x);
 
-  /* "PETSc/KSP.pyx":434
+  /* "PETSc/KSP.pyx":455
  * 
  *     def buildSolution(self, Vec x=None):
  *         if x is None: x = Vec()             # <<<<<<<<<<<<<<
@@ -151424,15 +155079,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116buildSolution(struct PyPetscK
   __pyx_t_1 = (((PyObject *)__pyx_v_x) == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 455, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_x, ((struct PyPetscVecObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":435
+  /* "PETSc/KSP.pyx":456
  *     def buildSolution(self, Vec x=None):
  *         if x is None: x = Vec()
  *         if x.vec == NULL:             # <<<<<<<<<<<<<<
@@ -151442,37 +155095,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116buildSolution(struct PyPetscK
   __pyx_t_2 = ((__pyx_v_x->vec == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/KSP.pyx":436
+    /* "PETSc/KSP.pyx":457
  *         if x is None: x = Vec()
  *         if x.vec == NULL:
  *             CHKERR( KSPGetSolution(self.ksp, &x.vec) )             # <<<<<<<<<<<<<<
  *             CHKERR( VecDuplicate(x.vec, &x.vec) )
  *         CHKERR( KSPBuildSolution(self.ksp, x.vec, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetSolution(__pyx_v_self->ksp, (&__pyx_v_x->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetSolution(__pyx_v_self->ksp, (&__pyx_v_x->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 457, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":437
+    /* "PETSc/KSP.pyx":458
  *         if x.vec == NULL:
  *             CHKERR( KSPGetSolution(self.ksp, &x.vec) )
  *             CHKERR( VecDuplicate(x.vec, &x.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( KSPBuildSolution(self.ksp, x.vec, NULL) )
  *         return x
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_x->vec, (&__pyx_v_x->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_x->vec, (&__pyx_v_x->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 458, __pyx_L1_error)
+
+    /* "PETSc/KSP.pyx":456
+ *     def buildSolution(self, Vec x=None):
+ *         if x is None: x = Vec()
+ *         if x.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( KSPGetSolution(self.ksp, &x.vec) )
+ *             CHKERR( VecDuplicate(x.vec, &x.vec) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/KSP.pyx":438
+  /* "PETSc/KSP.pyx":459
  *             CHKERR( KSPGetSolution(self.ksp, &x.vec) )
  *             CHKERR( VecDuplicate(x.vec, &x.vec) )
  *         CHKERR( KSPBuildSolution(self.ksp, x.vec, NULL) )             # <<<<<<<<<<<<<<
  *         return x
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPBuildSolution(__pyx_v_self->ksp, __pyx_v_x->vec, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPBuildSolution(__pyx_v_self->ksp, __pyx_v_x->vec, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 459, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":439
+  /* "PETSc/KSP.pyx":460
  *             CHKERR( VecDuplicate(x.vec, &x.vec) )
  *         CHKERR( KSPBuildSolution(self.ksp, x.vec, NULL) )
  *         return x             # <<<<<<<<<<<<<<
@@ -151484,7 +155143,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116buildSolution(struct PyPetscK
   __pyx_r = ((PyObject *)__pyx_v_x);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":433
+  /* "PETSc/KSP.pyx":454
  *         else:       return None
  * 
  *     def buildSolution(self, Vec x=None):             # <<<<<<<<<<<<<<
@@ -151504,7 +155163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116buildSolution(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":441
+/* "PETSc/KSP.pyx":462
  *         return x
  * 
  *     def buildResidual(self, Vec r=None):             # <<<<<<<<<<<<<<
@@ -151513,13 +155172,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116buildSolution(struct PyPetscK
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119buildResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_118buildResidual[] = "KSP.buildResidual(self, Vec r=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119buildResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_123buildResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_122buildResidual[] = "KSP.buildResidual(self, Vec r=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_123buildResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_r = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("buildResidual (wrapper)", 0);
@@ -151544,7 +155200,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119buildResidual(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "buildResidual") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "buildResidual") < 0)) __PYX_ERR(35, 462, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -151557,14 +155213,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119buildResidual(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("buildResidual", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("buildResidual", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 462, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.buildResidual", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_r), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "r", 0))) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_118buildResidual(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_r);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_r), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "r", 0))) __PYX_ERR(35, 462, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_r);
 
   /* function exit code */
   goto __pyx_L0;
@@ -151575,20 +155231,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119buildResidual(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118buildResidual(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_r) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(struct PyPetscKSPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_r) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("buildResidual", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_r);
 
-  /* "PETSc/KSP.pyx":442
+  /* "PETSc/KSP.pyx":463
  * 
  *     def buildResidual(self, Vec r=None):
  *         if r is None: r = Vec()             # <<<<<<<<<<<<<<
@@ -151598,15 +155251,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118buildResidual(struct PyPetscK
   __pyx_t_1 = (((PyObject *)__pyx_v_r) == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 463, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_r, ((struct PyPetscVecObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":443
+  /* "PETSc/KSP.pyx":464
  *     def buildResidual(self, Vec r=None):
  *         if r is None: r = Vec()
  *         if r.vec == NULL:             # <<<<<<<<<<<<<<
@@ -151616,37 +155267,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118buildResidual(struct PyPetscK
   __pyx_t_2 = ((__pyx_v_r->vec == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/KSP.pyx":444
+    /* "PETSc/KSP.pyx":465
  *         if r is None: r = Vec()
  *         if r.vec == NULL:
  *             CHKERR( KSPGetRhs(self.ksp, &r.vec) )             # <<<<<<<<<<<<<<
  *             CHKERR( VecDuplicate(r.vec, &r.vec) )
  *         CHKERR( KSPBuildResidual(self.ksp , NULL, r.vec, &r.vec) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetRhs(__pyx_v_self->ksp, (&__pyx_v_r->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetRhs(__pyx_v_self->ksp, (&__pyx_v_r->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 465, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":445
+    /* "PETSc/KSP.pyx":466
  *         if r.vec == NULL:
  *             CHKERR( KSPGetRhs(self.ksp, &r.vec) )
  *             CHKERR( VecDuplicate(r.vec, &r.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( KSPBuildResidual(self.ksp , NULL, r.vec, &r.vec) )
  *         return r
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_r->vec, (&__pyx_v_r->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_r->vec, (&__pyx_v_r->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 466, __pyx_L1_error)
+
+    /* "PETSc/KSP.pyx":464
+ *     def buildResidual(self, Vec r=None):
+ *         if r is None: r = Vec()
+ *         if r.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( KSPGetRhs(self.ksp, &r.vec) )
+ *             CHKERR( VecDuplicate(r.vec, &r.vec) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/KSP.pyx":446
+  /* "PETSc/KSP.pyx":467
  *             CHKERR( KSPGetRhs(self.ksp, &r.vec) )
  *             CHKERR( VecDuplicate(r.vec, &r.vec) )
  *         CHKERR( KSPBuildResidual(self.ksp , NULL, r.vec, &r.vec) )             # <<<<<<<<<<<<<<
  *         return r
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPBuildResidual(__pyx_v_self->ksp, NULL, __pyx_v_r->vec, (&__pyx_v_r->vec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPBuildResidual(__pyx_v_self->ksp, NULL, __pyx_v_r->vec, (&__pyx_v_r->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(35, 467, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":447
+  /* "PETSc/KSP.pyx":468
  *             CHKERR( VecDuplicate(r.vec, &r.vec) )
  *         CHKERR( KSPBuildResidual(self.ksp , NULL, r.vec, &r.vec) )
  *         return r             # <<<<<<<<<<<<<<
@@ -151658,7 +155315,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118buildResidual(struct PyPetscK
   __pyx_r = ((PyObject *)__pyx_v_r);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":441
+  /* "PETSc/KSP.pyx":462
  *         return x
  * 
  *     def buildResidual(self, Vec r=None):             # <<<<<<<<<<<<<<
@@ -151678,7 +155335,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118buildResidual(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":449
+/* "PETSc/KSP.pyx":470
  *         return r
  * 
  *     def computeEigenvalues(self):             # <<<<<<<<<<<<<<
@@ -151687,23 +155344,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118buildResidual(struct PyPetscK
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_121computeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_120computeEigenvalues[] = "KSP.computeEigenvalues(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_121computeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_125computeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_124computeEigenvalues[] = "KSP.computeEigenvalues(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_125computeEigenvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeEigenvalues (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("computeEigenvalues", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "computeEigenvalues", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyPetscKSPObject *__pyx_v_self) {
   PetscInt __pyx_v_its;
   PetscInt __pyx_v_neig;
   PetscReal *__pyx_v_rdata;
@@ -151716,12 +155373,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyP
   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("computeEigenvalues", 0);
 
-  /* "PETSc/KSP.pyx":450
+  /* "PETSc/KSP.pyx":471
  * 
  *     def computeEigenvalues(self):
  *         cdef PetscInt its = 0             # <<<<<<<<<<<<<<
@@ -151730,7 +155384,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyP
  */
   __pyx_v_its = 0;
 
-  /* "PETSc/KSP.pyx":451
+  /* "PETSc/KSP.pyx":472
  *     def computeEigenvalues(self):
  *         cdef PetscInt its = 0
  *         cdef PetscInt neig = 0             # <<<<<<<<<<<<<<
@@ -151739,7 +155393,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyP
  */
   __pyx_v_neig = 0;
 
-  /* "PETSc/KSP.pyx":452
+  /* "PETSc/KSP.pyx":473
  *         cdef PetscInt its = 0
  *         cdef PetscInt neig = 0
  *         cdef PetscReal *rdata = NULL             # <<<<<<<<<<<<<<
@@ -151748,7 +155402,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyP
  */
   __pyx_v_rdata = NULL;
 
-  /* "PETSc/KSP.pyx":453
+  /* "PETSc/KSP.pyx":474
  *         cdef PetscInt neig = 0
  *         cdef PetscReal *rdata = NULL
  *         cdef PetscReal *idata = NULL             # <<<<<<<<<<<<<<
@@ -151757,91 +155411,91 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyP
  */
   __pyx_v_idata = NULL;
 
-  /* "PETSc/KSP.pyx":454
+  /* "PETSc/KSP.pyx":475
  *         cdef PetscReal *rdata = NULL
  *         cdef PetscReal *idata = NULL
  *         CHKERR( KSPGetIterationNumber(self.ksp, &its) )             # <<<<<<<<<<<<<<
  *         cdef ndarray r = oarray_r(empty_r(its), NULL, &rdata)
  *         cdef ndarray i = oarray_r(empty_r(its), NULL, &idata)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetIterationNumber(__pyx_v_self->ksp, (&__pyx_v_its))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetIterationNumber(__pyx_v_self->ksp, (&__pyx_v_its))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 475, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":455
+  /* "PETSc/KSP.pyx":476
  *         cdef PetscReal *idata = NULL
  *         CHKERR( KSPGetIterationNumber(self.ksp, &its) )
  *         cdef ndarray r = oarray_r(empty_r(its), NULL, &rdata)             # <<<<<<<<<<<<<<
  *         cdef ndarray i = oarray_r(empty_r(its), NULL, &idata)
  *         CHKERR( KSPComputeEigenvalues(self.ksp, its, rdata, idata, &neig) )
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_its)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_its)); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 476, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_r(__pyx_t_2, NULL, (&__pyx_v_rdata))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_r(__pyx_t_2, NULL, (&__pyx_v_rdata))); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 476, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_r = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":456
+  /* "PETSc/KSP.pyx":477
  *         CHKERR( KSPGetIterationNumber(self.ksp, &its) )
  *         cdef ndarray r = oarray_r(empty_r(its), NULL, &rdata)
  *         cdef ndarray i = oarray_r(empty_r(its), NULL, &idata)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPComputeEigenvalues(self.ksp, its, rdata, idata, &neig) )
  *         eigen = empty_c(neig)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_its)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_its)); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 477, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_r(__pyx_t_3, NULL, (&__pyx_v_idata))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_r(__pyx_t_3, NULL, (&__pyx_v_idata))); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 477, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_i = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":457
+  /* "PETSc/KSP.pyx":478
  *         cdef ndarray r = oarray_r(empty_r(its), NULL, &rdata)
  *         cdef ndarray i = oarray_r(empty_r(its), NULL, &idata)
  *         CHKERR( KSPComputeEigenvalues(self.ksp, its, rdata, idata, &neig) )             # <<<<<<<<<<<<<<
  *         eigen = empty_c(neig)
  *         eigen.real = r[:neig]
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPComputeEigenvalues(__pyx_v_self->ksp, __pyx_v_its, __pyx_v_rdata, __pyx_v_idata, (&__pyx_v_neig))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPComputeEigenvalues(__pyx_v_self->ksp, __pyx_v_its, __pyx_v_rdata, __pyx_v_idata, (&__pyx_v_neig))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 478, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":458
+  /* "PETSc/KSP.pyx":479
  *         cdef ndarray i = oarray_r(empty_r(its), NULL, &idata)
  *         CHKERR( KSPComputeEigenvalues(self.ksp, its, rdata, idata, &neig) )
  *         eigen = empty_c(neig)             # <<<<<<<<<<<<<<
  *         eigen.real = r[:neig]
  *         eigen.imag = i[:neig]
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_c(__pyx_v_neig)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_c(__pyx_v_neig)); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 479, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_eigen = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":459
+  /* "PETSc/KSP.pyx":480
  *         CHKERR( KSPComputeEigenvalues(self.ksp, its, rdata, idata, &neig) )
  *         eigen = empty_c(neig)
  *         eigen.real = r[:neig]             # <<<<<<<<<<<<<<
  *         eigen.imag = i[:neig]
  *         return eigen
  */
-  __pyx_t_2 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_r), 0, __pyx_v_neig, NULL, NULL, NULL, 0, 1, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_r), 0, __pyx_v_neig, NULL, NULL, NULL, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 480, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_eigen), __pyx_n_s_real, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_eigen), __pyx_n_s_real, __pyx_t_2) < 0) __PYX_ERR(35, 480, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":460
+  /* "PETSc/KSP.pyx":481
  *         eigen = empty_c(neig)
  *         eigen.real = r[:neig]
  *         eigen.imag = i[:neig]             # <<<<<<<<<<<<<<
  *         return eigen
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_i), 0, __pyx_v_neig, NULL, NULL, NULL, 0, 1, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_i), 0, __pyx_v_neig, NULL, NULL, NULL, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 481, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_eigen), __pyx_n_s_imag, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_eigen), __pyx_n_s_imag, __pyx_t_2) < 0) __PYX_ERR(35, 481, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":461
+  /* "PETSc/KSP.pyx":482
  *         eigen.real = r[:neig]
  *         eigen.imag = i[:neig]
  *         return eigen             # <<<<<<<<<<<<<<
@@ -151853,7 +155507,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_eigen);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":449
+  /* "PETSc/KSP.pyx":470
  *         return r
  * 
  *     def computeEigenvalues(self):             # <<<<<<<<<<<<<<
@@ -151876,7 +155530,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":463
+/* "PETSc/KSP.pyx":484
  *         return eigen
  * 
  *     def computeExtremeSingularValues(self):             # <<<<<<<<<<<<<<
@@ -151885,23 +155539,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120computeEigenvalues(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_123computeExtremeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues[] = "KSP.computeExtremeSingularValues(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_123computeExtremeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_127computeExtremeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues[] = "KSP.computeExtremeSingularValues(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_127computeExtremeSingularValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeExtremeSingularValues (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("computeExtremeSingularValues", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "computeExtremeSingularValues", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(struct PyPetscKSPObject *__pyx_v_self) {
   PetscReal __pyx_v_smax;
   PetscReal __pyx_v_smin;
   PyObject *__pyx_r = NULL;
@@ -151910,12 +155564,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(
   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("computeExtremeSingularValues", 0);
 
-  /* "PETSc/KSP.pyx":464
+  /* "PETSc/KSP.pyx":485
  * 
  *     def computeExtremeSingularValues(self):
  *         cdef PetscReal smax = 0             # <<<<<<<<<<<<<<
@@ -151924,7 +155575,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(
  */
   __pyx_v_smax = 0.0;
 
-  /* "PETSc/KSP.pyx":465
+  /* "PETSc/KSP.pyx":486
  *     def computeExtremeSingularValues(self):
  *         cdef PetscReal smax = 0
  *         cdef PetscReal smin = 0             # <<<<<<<<<<<<<<
@@ -151933,16 +155584,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(
  */
   __pyx_v_smin = 0.0;
 
-  /* "PETSc/KSP.pyx":466
+  /* "PETSc/KSP.pyx":487
  *         cdef PetscReal smax = 0
  *         cdef PetscReal smin = 0
  *         CHKERR( KSPComputeExtremeSingularValues(self.ksp, &smax, &smin) )             # <<<<<<<<<<<<<<
  *         return smax, smin
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPComputeExtremeSingularValues(__pyx_v_self->ksp, (&__pyx_v_smax), (&__pyx_v_smin))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPComputeExtremeSingularValues(__pyx_v_self->ksp, (&__pyx_v_smax), (&__pyx_v_smin))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 487, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":467
+  /* "PETSc/KSP.pyx":488
  *         cdef PetscReal smin = 0
  *         CHKERR( KSPComputeExtremeSingularValues(self.ksp, &smax, &smin) )
  *         return smax, smin             # <<<<<<<<<<<<<<
@@ -151950,11 +155601,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(
  *     # --- GMRES ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_smax); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_smax); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 488, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_smin); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_smin); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 488, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 488, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -151966,7 +155617,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":463
+  /* "PETSc/KSP.pyx":484
  *         return eigen
  * 
  *     def computeExtremeSingularValues(self):             # <<<<<<<<<<<<<<
@@ -151987,7 +155638,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":471
+/* "PETSc/KSP.pyx":492
  *     # --- GMRES ---
  * 
  *     def setGMRESRestart(self, restart):             # <<<<<<<<<<<<<<
@@ -151996,13 +155647,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues(
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_125setGMRESRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_124setGMRESRestart[] = "KSP.setGMRESRestart(self, restart)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_125setGMRESRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setGMRESRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_128setGMRESRestart[] = "KSP.setGMRESRestart(self, restart)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setGMRESRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_restart = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGMRESRestart (wrapper)", 0);
@@ -152024,7 +155672,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_125setGMRESRestart(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, "setGMRESRestart") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGMRESRestart") < 0)) __PYX_ERR(35, 492, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -152035,50 +155683,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_125setGMRESRestart(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGMRESRestart", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGMRESRestart", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 492, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setGMRESRestart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_124setGMRESRestart(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_restart);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_128setGMRESRestart(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_restart);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124setGMRESRestart(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_restart) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_128setGMRESRestart(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_restart) {
   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("setGMRESRestart", 0);
 
-  /* "PETSc/KSP.pyx":472
+  /* "PETSc/KSP.pyx":493
  * 
  *     def setGMRESRestart(self, restart):
  *         cdef PetscInt ival = asInt(restart)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPGMRESSetRestart(self.ksp, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_restart); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_restart); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(35, 493, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":473
+  /* "PETSc/KSP.pyx":494
  *     def setGMRESRestart(self, restart):
  *         cdef PetscInt ival = asInt(restart)
  *         CHKERR( KSPGMRESSetRestart(self.ksp, ival) )             # <<<<<<<<<<<<<<
  * 
  *     # --- Python ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGMRESSetRestart(__pyx_v_self->ksp, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGMRESSetRestart(__pyx_v_self->ksp, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 494, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":471
+  /* "PETSc/KSP.pyx":492
  *     # --- GMRES ---
  * 
  *     def setGMRESRestart(self, restart):             # <<<<<<<<<<<<<<
@@ -152098,7 +155743,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124setGMRESRestart(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":477
+/* "PETSc/KSP.pyx":498
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -152107,14 +155752,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124setGMRESRestart(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_127createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_126createPython[] = "KSP.createPython(self, context=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_127createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_131createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_130createPython[] = "KSP.createPython(self, context=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_131createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
   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("createPython (wrapper)", 0);
@@ -152146,7 +155788,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_127createPython(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(35, 498, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -152161,42 +155803,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_127createPython(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 498, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.createPython", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_126createPython(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_context, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_130createPython(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_context, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126createPython(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130createPython(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   KSP __pyx_v_newksp;
   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("createPython", 0);
 
-  /* "PETSc/KSP.pyx":478
+  /* "PETSc/KSP.pyx":499
  * 
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscKSP newksp = NULL
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 499, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":479
+  /* "PETSc/KSP.pyx":500
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscKSP newksp = NULL             # <<<<<<<<<<<<<<
@@ -152205,16 +155844,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126createPython(struct PyPetscKS
  */
   __pyx_v_newksp = NULL;
 
-  /* "PETSc/KSP.pyx":480
+  /* "PETSc/KSP.pyx":501
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscKSP newksp = NULL
  *         CHKERR( KSPCreate(ccomm, &newksp) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.ksp = newksp
  *         CHKERR( KSPSetType(self.ksp, KSPPYTHON) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPCreate(__pyx_v_ccomm, (&__pyx_v_newksp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPCreate(__pyx_v_ccomm, (&__pyx_v_newksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 501, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":481
+  /* "PETSc/KSP.pyx":502
  *         cdef PetscKSP newksp = NULL
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  *         PetscCLEAR(self.obj); self.ksp = newksp             # <<<<<<<<<<<<<<
@@ -152224,25 +155863,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126createPython(struct PyPetscKS
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->ksp = __pyx_v_newksp;
 
-  /* "PETSc/KSP.pyx":482
+  /* "PETSc/KSP.pyx":503
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  *         PetscCLEAR(self.obj); self.ksp = newksp
  *         CHKERR( KSPSetType(self.ksp, KSPPYTHON) )             # <<<<<<<<<<<<<<
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetType(__pyx_v_self->ksp, KSPPYTHON)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetType(__pyx_v_self->ksp, KSPPYTHON)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 503, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":483
+  /* "PETSc/KSP.pyx":504
  *         PetscCLEAR(self.obj); self.ksp = newksp
  *         CHKERR( KSPSetType(self.ksp, KSPPYTHON) )
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonSetContext(__pyx_v_self->ksp, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonSetContext(__pyx_v_self->ksp, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 504, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":484
+  /* "PETSc/KSP.pyx":505
  *         CHKERR( KSPSetType(self.ksp, KSPPYTHON) )
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )
  *         return self             # <<<<<<<<<<<<<<
@@ -152254,7 +155893,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126createPython(struct PyPetscKS
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":477
+  /* "PETSc/KSP.pyx":498
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -152272,7 +155911,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126createPython(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":486
+/* "PETSc/KSP.pyx":507
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -152281,13 +155920,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126createPython(struct PyPetscKS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_128setPythonContext[] = "KSP.setPythonContext(self, context)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_132setPythonContext[] = "KSP.setPythonContext(self, context)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonContext (wrapper)", 0);
@@ -152309,7 +155945,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setPythonContext(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(35, 507, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -152320,38 +155956,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setPythonContext(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 507, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setPythonContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_128setPythonContext(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_context);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonContext(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_context);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_128setPythonContext(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_context) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonContext(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_context) {
   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("setPythonContext", 0);
 
-  /* "PETSc/KSP.pyx":487
+  /* "PETSc/KSP.pyx":508
  * 
  *     def setPythonContext(self, context):
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )             # <<<<<<<<<<<<<<
  * 
  *     def getPythonContext(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonSetContext(__pyx_v_self->ksp, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonSetContext(__pyx_v_self->ksp, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 508, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":486
+  /* "PETSc/KSP.pyx":507
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -152371,7 +156004,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_128setPythonContext(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":489
+/* "PETSc/KSP.pyx":510
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -152380,34 +156013,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_128setPythonContext(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_131getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_130getPythonContext[] = "KSP.getPythonContext(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_131getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_135getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_134getPythonContext[] = "KSP.getPythonContext(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_135getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getPythonContext (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getPythonContext", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPythonContext", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_130getPythonContext(((struct PyPetscKSPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_134getPythonContext(((struct PyPetscKSPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130getPythonContext(struct PyPetscKSPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_134getPythonContext(struct PyPetscKSPObject *__pyx_v_self) {
   void *__pyx_v_context;
   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("getPythonContext", 0);
 
-  /* "PETSc/KSP.pyx":490
+  /* "PETSc/KSP.pyx":511
  * 
  *     def getPythonContext(self):
  *         cdef void *context = NULL             # <<<<<<<<<<<<<<
@@ -152416,16 +156046,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130getPythonContext(struct PyPet
  */
   __pyx_v_context = NULL;
 
-  /* "PETSc/KSP.pyx":491
+  /* "PETSc/KSP.pyx":512
  *     def getPythonContext(self):
  *         cdef void *context = NULL
  *         CHKERR( KSPPythonGetContext(self.ksp, &context) )             # <<<<<<<<<<<<<<
  *         if context == NULL: return None
  *         else: return <object> context
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonGetContext(__pyx_v_self->ksp, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonGetContext(__pyx_v_self->ksp, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(35, 512, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":492
+  /* "PETSc/KSP.pyx":513
  *         cdef void *context = NULL
  *         CHKERR( KSPPythonGetContext(self.ksp, &context) )
  *         if context == NULL: return None             # <<<<<<<<<<<<<<
@@ -152439,22 +156069,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130getPythonContext(struct PyPet
     __pyx_r = Py_None;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/KSP.pyx":493
+  /* "PETSc/KSP.pyx":514
  *         CHKERR( KSPPythonGetContext(self.ksp, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
  * 
  *     def setPythonType(self, py_type):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(((PyObject *)__pyx_v_context));
     __pyx_r = ((PyObject *)__pyx_v_context);
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":489
+  /* "PETSc/KSP.pyx":510
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -152472,7 +156102,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130getPythonContext(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":495
+/* "PETSc/KSP.pyx":516
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -152481,13 +156111,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130getPythonContext(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3KSP_132setPythonType[] = "KSP.setPythonType(self, py_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_137setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3KSP_136setPythonType[] = "KSP.setPythonType(self, py_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_137setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_py_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonType (wrapper)", 0);
@@ -152509,7 +156136,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonType(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, "setPythonType") < 0)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(35, 516, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -152520,32 +156147,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonType(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[35]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 516, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setPythonType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonType(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_py_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_136setPythonType(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_py_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_py_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_136setPythonType(struct PyPetscKSPObject *__pyx_v_self, PyObject *__pyx_v_py_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("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
-  /* "PETSc/KSP.pyx":496
+  /* "PETSc/KSP.pyx":517
  * 
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -152554,28 +156178,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonType(struct PyPetscK
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":497
+  /* "PETSc/KSP.pyx":518
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( KSPPythonSetType(self.ksp, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_py_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":498
+  /* "PETSc/KSP.pyx":519
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)
  *         CHKERR( KSPPythonSetType(self.ksp, cval) )             # <<<<<<<<<<<<<<
  * 
  *     # --- application context ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonSetType(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonSetType(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(35, 519, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":495
+  /* "PETSc/KSP.pyx":516
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -152597,7 +156221,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonType(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":503
+/* "PETSc/KSP.pyx":524
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -152624,12 +156248,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKS
   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);
 
-  /* "PETSc/KSP.pyx":504
+  /* "PETSc/KSP.pyx":525
  *     property appctx:
  *         def __get__(self):
  *             return self.getAppCtx()             # <<<<<<<<<<<<<<
@@ -152637,7 +156258,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKS
  *             self.setAppCtx(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getAppCtx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getAppCtx); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -152650,10 +156271,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKS
     }
   }
   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[35]; __pyx_lineno = 504; __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(35, 525, __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[35]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 525, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -152661,7 +156282,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":503
+  /* "PETSc/KSP.pyx":524
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -152682,7 +156303,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":505
+/* "PETSc/KSP.pyx":526
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -152710,19 +156331,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6appctx_2__set__(struct PyPetscKSPObje
   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);
 
-  /* "PETSc/KSP.pyx":506
+  /* "PETSc/KSP.pyx":527
  *             return self.getAppCtx()
  *         def __set__(self, value):
  *             self.setAppCtx(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- discretization space ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setAppCtx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setAppCtx); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -152735,23 +156353,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6appctx_2__set__(struct PyPetscKSPObje
     }
   }
   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[35]; __pyx_lineno = 506; __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(35, 527, __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[35]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 527, __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[35]; __pyx_lineno = 506; __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(35, 527, __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;
 
-  /* "PETSc/KSP.pyx":505
+  /* "PETSc/KSP.pyx":526
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -152774,7 +156392,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6appctx_2__set__(struct PyPetscKSPObje
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":511
+/* "PETSc/KSP.pyx":532
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -152801,12 +156419,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObj
   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);
 
-  /* "PETSc/KSP.pyx":512
+  /* "PETSc/KSP.pyx":533
  *     property dm:
  *         def __get__(self):
  *             return self.getDM()             # <<<<<<<<<<<<<<
@@ -152814,7 +156429,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObj
  *             self.setDM(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDM); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDM); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -152827,10 +156442,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObj
     }
   }
   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[35]; __pyx_lineno = 512; __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(35, 533, __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[35]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 533, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -152838,7 +156453,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":511
+  /* "PETSc/KSP.pyx":532
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -152859,7 +156474,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":513
+/* "PETSc/KSP.pyx":534
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -152887,19 +156502,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_2dm_2__set__(struct PyPetscKSPObject *
   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);
 
-  /* "PETSc/KSP.pyx":514
+  /* "PETSc/KSP.pyx":535
  *             return self.getDM()
  *         def __set__(self, value):
  *             self.setDM(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- vectors ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDM); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDM); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 535, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -152912,23 +156524,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_2dm_2__set__(struct PyPetscKSPObject *
     }
   }
   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[35]; __pyx_lineno = 514; __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(35, 535, __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[35]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 535, __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[35]; __pyx_lineno = 514; __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(35, 535, __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;
 
-  /* "PETSc/KSP.pyx":513
+  /* "PETSc/KSP.pyx":534
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -152951,7 +156563,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_2dm_2__set__(struct PyPetscKSPObject *
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":519
+/* "PETSc/KSP.pyx":540
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -152978,12 +156590,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscK
   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);
 
-  /* "PETSc/KSP.pyx":520
+  /* "PETSc/KSP.pyx":541
  *     property vec_sol:
  *         def __get__(self):
  *             return self.getSolution()             # <<<<<<<<<<<<<<
@@ -152991,7 +156600,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscK
  *     property vec_rhs:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolution); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 541, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153004,10 +156613,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscK
     }
   }
   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[35]; __pyx_lineno = 520; __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(35, 541, __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[35]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 541, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -153015,7 +156624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscK
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":519
+  /* "PETSc/KSP.pyx":540
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153036,7 +156645,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":523
+/* "PETSc/KSP.pyx":544
  * 
  *     property vec_rhs:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153063,12 +156672,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscK
   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);
 
-  /* "PETSc/KSP.pyx":524
+  /* "PETSc/KSP.pyx":545
  *     property vec_rhs:
  *         def __get__(self):
  *             return self.getRhs()             # <<<<<<<<<<<<<<
@@ -153076,7 +156682,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscK
  *     # --- operators ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRhs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRhs); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 545, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153089,10 +156695,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscK
     }
   }
   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[35]; __pyx_lineno = 524; __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(35, 545, __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[35]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 545, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -153100,7 +156706,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscK
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":523
+  /* "PETSc/KSP.pyx":544
  * 
  *     property vec_rhs:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153121,7 +156727,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":529
+/* "PETSc/KSP.pyx":550
  * 
  *     property mat_op:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153148,12 +156754,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_op___get__(struct PyPetscKS
   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);
 
-  /* "PETSc/KSP.pyx":530
+  /* "PETSc/KSP.pyx":551
  *     property mat_op:
  *         def __get__(self):
  *             return self.getOperators()[0]             # <<<<<<<<<<<<<<
@@ -153161,7 +156764,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_op___get__(struct PyPetscKS
  *     property mat_pc:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOperators); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOperators); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 551, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153174,21 +156777,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_op___get__(struct PyPetscKS
     }
   }
   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[35]; __pyx_lineno = 530; __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(35, 551, __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[35]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 551, __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[35]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __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(35, 551, __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;
 
-  /* "PETSc/KSP.pyx":529
+  /* "PETSc/KSP.pyx":550
  * 
  *     property mat_op:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153209,7 +156812,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_op___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":533
+/* "PETSc/KSP.pyx":554
  * 
  *     property mat_pc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153236,12 +156839,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_pc___get__(struct PyPetscKS
   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);
 
-  /* "PETSc/KSP.pyx":534
+  /* "PETSc/KSP.pyx":555
  *     property mat_pc:
  *         def __get__(self):
  *             return self.getOperators()[1]             # <<<<<<<<<<<<<<
@@ -153249,7 +156849,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_pc___get__(struct PyPetscKS
  *     # --- initial guess ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOperators); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getOperators); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 555, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153262,21 +156862,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_pc___get__(struct PyPetscKS
     }
   }
   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[35]; __pyx_lineno = 534; __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(35, 555, __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[35]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 555, __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[35]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __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(35, 555, __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;
 
-  /* "PETSc/KSP.pyx":533
+  /* "PETSc/KSP.pyx":554
  * 
  *     property mat_pc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153297,7 +156897,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_pc___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":539
+/* "PETSc/KSP.pyx":560
  * 
  *     property guess_nonzero:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153324,12 +156924,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct P
   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);
 
-  /* "PETSc/KSP.pyx":540
+  /* "PETSc/KSP.pyx":561
  *     property guess_nonzero:
  *         def __get__(self):
  *             return self.getInitialGuessNonzero()             # <<<<<<<<<<<<<<
@@ -153337,7 +156934,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct P
  *             self.setInitialGuessNonzero(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getInitialGuessNonzero); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getInitialGuessNonzero); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 561, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153350,10 +156947,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct P
     }
   }
   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[35]; __pyx_lineno = 540; __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(35, 561, __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[35]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 561, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -153361,7 +156958,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct P
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":539
+  /* "PETSc/KSP.pyx":560
  * 
  *     property guess_nonzero:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153382,7 +156979,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":541
+/* "PETSc/KSP.pyx":562
  *         def __get__(self):
  *             return self.getInitialGuessNonzero()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -153410,19 +157007,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero_2__set__(struct PyPets
   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);
 
-  /* "PETSc/KSP.pyx":542
+  /* "PETSc/KSP.pyx":563
  *             return self.getInitialGuessNonzero()
  *         def __set__(self, value):
  *             self.setInitialGuessNonzero(value)             # <<<<<<<<<<<<<<
  * 
  *     property guess_knoll:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setInitialGuessNonzero); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setInitialGuessNonzero); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 563, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153435,23 +157029,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero_2__set__(struct PyPets
     }
   }
   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[35]; __pyx_lineno = 542; __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(35, 563, __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[35]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 563, __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[35]; __pyx_lineno = 542; __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(35, 563, __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;
 
-  /* "PETSc/KSP.pyx":541
+  /* "PETSc/KSP.pyx":562
  *         def __get__(self):
  *             return self.getInitialGuessNonzero()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -153474,7 +157068,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero_2__set__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":545
+/* "PETSc/KSP.pyx":566
  * 
  *     property guess_knoll:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153501,12 +157095,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyP
   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);
 
-  /* "PETSc/KSP.pyx":546
+  /* "PETSc/KSP.pyx":567
  *     property guess_knoll:
  *         def __get__(self):
  *             return self.getInitialGuessKnoll()             # <<<<<<<<<<<<<<
@@ -153514,7 +157105,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyP
  *             self.setInitialGuessKnoll(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getInitialGuessKnoll); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getInitialGuessKnoll); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 567, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153527,10 +157118,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyP
     }
   }
   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[35]; __pyx_lineno = 546; __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(35, 567, __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[35]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 567, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -153538,7 +157129,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":545
+  /* "PETSc/KSP.pyx":566
  * 
  *     property guess_knoll:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153559,7 +157150,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":547
+/* "PETSc/KSP.pyx":568
  *         def __get__(self):
  *             return self.getInitialGuessKnoll()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -153587,19 +157178,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll_2__set__(struct PyPetscK
   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);
 
-  /* "PETSc/KSP.pyx":548
+  /* "PETSc/KSP.pyx":569
  *             return self.getInitialGuessKnoll()
  *         def __set__(self, value):
  *             self.setInitialGuessKnoll(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- preconditioner ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setInitialGuessKnoll); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setInitialGuessKnoll); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 569, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153612,23 +157200,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll_2__set__(struct PyPetscK
     }
   }
   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[35]; __pyx_lineno = 548; __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(35, 569, __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[35]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 569, __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[35]; __pyx_lineno = 548; __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(35, 569, __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;
 
-  /* "PETSc/KSP.pyx":547
+  /* "PETSc/KSP.pyx":568
  *         def __get__(self):
  *             return self.getInitialGuessKnoll()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -153651,7 +157239,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll_2__set__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":553
+/* "PETSc/KSP.pyx":574
  * 
  *     property pc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153678,12 +157266,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObj
   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);
 
-  /* "PETSc/KSP.pyx":554
+  /* "PETSc/KSP.pyx":575
  *     property pc:
  *         def __get__(self):
  *             return self.getPC()             # <<<<<<<<<<<<<<
@@ -153691,7 +157276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObj
  *     property pc_side:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getPC); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getPC); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153704,10 +157289,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObj
     }
   }
   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[35]; __pyx_lineno = 554; __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(35, 575, __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[35]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 575, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -153715,7 +157300,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":553
+  /* "PETSc/KSP.pyx":574
  * 
  *     property pc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153736,7 +157321,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":557
+/* "PETSc/KSP.pyx":578
  * 
  *     property pc_side:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153763,12 +157348,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscK
   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);
 
-  /* "PETSc/KSP.pyx":558
+  /* "PETSc/KSP.pyx":579
  *     property pc_side:
  *         def __get__(self):
  *             return self.getPCSide()             # <<<<<<<<<<<<<<
@@ -153776,7 +157358,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscK
  *             self.setPCSide(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getPCSide); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getPCSide); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 579, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153789,10 +157371,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscK
     }
   }
   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[35]; __pyx_lineno = 558; __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(35, 579, __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[35]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 579, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -153800,7 +157382,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscK
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":557
+  /* "PETSc/KSP.pyx":578
  * 
  *     property pc_side:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153821,7 +157403,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":559
+/* "PETSc/KSP.pyx":580
  *         def __get__(self):
  *             return self.getPCSide()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -153849,19 +157431,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side_2__set__(struct PyPetscKSPObj
   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);
 
-  /* "PETSc/KSP.pyx":560
+  /* "PETSc/KSP.pyx":581
  *             return self.getPCSide()
  *         def __set__(self, value):
  *             self.setPCSide(value)             # <<<<<<<<<<<<<<
  * 
  *     property norm_type:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setPCSide); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setPCSide); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 581, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153874,23 +157453,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side_2__set__(struct PyPetscKSPObj
     }
   }
   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[35]; __pyx_lineno = 560; __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(35, 581, __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[35]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 581, __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[35]; __pyx_lineno = 560; __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(35, 581, __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;
 
-  /* "PETSc/KSP.pyx":559
+  /* "PETSc/KSP.pyx":580
  *         def __get__(self):
  *             return self.getPCSide()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -153913,7 +157492,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side_2__set__(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":563
+/* "PETSc/KSP.pyx":584
  * 
  *     property norm_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153940,12 +157519,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPets
   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);
 
-  /* "PETSc/KSP.pyx":564
+  /* "PETSc/KSP.pyx":585
  *     property norm_type:
  *         def __get__(self):
  *             return self.getNormType()             # <<<<<<<<<<<<<<
@@ -153953,7 +157529,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPets
  *             self.setNormType(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getNormType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getNormType); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -153966,10 +157542,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPets
     }
   }
   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[35]; __pyx_lineno = 564; __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(35, 585, __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[35]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 585, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -153977,7 +157553,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":563
+  /* "PETSc/KSP.pyx":584
  * 
  *     property norm_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -153998,7 +157574,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":565
+/* "PETSc/KSP.pyx":586
  *         def __get__(self):
  *             return self.getNormType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154026,19 +157602,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type_2__set__(struct PyPetscKSPO
   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);
 
-  /* "PETSc/KSP.pyx":566
+  /* "PETSc/KSP.pyx":587
  *             return self.getNormType()
  *         def __set__(self, value):
  *             self.setNormType(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- tolerances ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setNormType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setNormType); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 587, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -154051,23 +157624,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type_2__set__(struct PyPetscKSPO
     }
   }
   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[35]; __pyx_lineno = 566; __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(35, 587, __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[35]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 587, __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[35]; __pyx_lineno = 566; __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(35, 587, __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;
 
-  /* "PETSc/KSP.pyx":565
+  /* "PETSc/KSP.pyx":586
  *         def __get__(self):
  *             return self.getNormType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154090,7 +157663,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type_2__set__(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":571
+/* "PETSc/KSP.pyx":592
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154117,12 +157690,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4rtol___get__(struct PyPetscKSPO
   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);
 
-  /* "PETSc/KSP.pyx":572
+  /* "PETSc/KSP.pyx":593
  *     property rtol:
  *         def __get__(self):
  *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
@@ -154130,7 +157700,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4rtol___get__(struct PyPetscKSPO
  *             self.setTolerances(rtol=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[35]; __pyx_lineno = 572; __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(35, 593, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -154143,21 +157713,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4rtol___get__(struct PyPetscKSPO
     }
   }
   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[35]; __pyx_lineno = 572; __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(35, 593, __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[35]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 593, __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[35]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __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(35, 593, __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;
 
-  /* "PETSc/KSP.pyx":571
+  /* "PETSc/KSP.pyx":592
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154178,7 +157748,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4rtol___get__(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":573
+/* "PETSc/KSP.pyx":594
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154205,30 +157775,27 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4rtol_2__set__(struct PyPetscKSPObject
   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);
 
-  /* "PETSc/KSP.pyx":574
+  /* "PETSc/KSP.pyx":595
  *             return self.getTolerances()[0]
  *         def __set__(self, value):
  *             self.setTolerances(rtol=value)             # <<<<<<<<<<<<<<
  * 
  *     property atol:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 574; __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(35, 595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 574; __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[35]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) __PYX_ERR(35, 595, __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(35, 595, __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;
 
-  /* "PETSc/KSP.pyx":573
+  /* "PETSc/KSP.pyx":594
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154250,7 +157817,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4rtol_2__set__(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":577
+/* "PETSc/KSP.pyx":598
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154277,12 +157844,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4atol___get__(struct PyPetscKSPO
   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);
 
-  /* "PETSc/KSP.pyx":578
+  /* "PETSc/KSP.pyx":599
  *     property atol:
  *         def __get__(self):
  *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
@@ -154290,7 +157854,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4atol___get__(struct PyPetscKSPO
  *             self.setTolerances(atol=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[35]; __pyx_lineno = 578; __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(35, 599, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -154303,21 +157867,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4atol___get__(struct PyPetscKSPO
     }
   }
   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[35]; __pyx_lineno = 578; __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(35, 599, __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[35]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 599, __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[35]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __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(35, 599, __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;
 
-  /* "PETSc/KSP.pyx":577
+  /* "PETSc/KSP.pyx":598
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154338,7 +157902,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4atol___get__(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":579
+/* "PETSc/KSP.pyx":600
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154365,30 +157929,27 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4atol_2__set__(struct PyPetscKSPObject
   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);
 
-  /* "PETSc/KSP.pyx":580
+  /* "PETSc/KSP.pyx":601
  *             return self.getTolerances()[1]
  *         def __set__(self, value):
  *             self.setTolerances(atol=value)             # <<<<<<<<<<<<<<
  * 
  *     property divtol:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 580; __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(35, 601, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 601, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 580; __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[35]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) __PYX_ERR(35, 601, __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(35, 601, __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;
 
-  /* "PETSc/KSP.pyx":579
+  /* "PETSc/KSP.pyx":600
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154410,7 +157971,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4atol_2__set__(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":583
+/* "PETSc/KSP.pyx":604
  * 
  *     property divtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154437,12 +157998,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6divtol___get__(struct PyPetscKS
   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);
 
-  /* "PETSc/KSP.pyx":584
+  /* "PETSc/KSP.pyx":605
  *     property divtol:
  *         def __get__(self):
  *             return self.getTolerances()[2]             # <<<<<<<<<<<<<<
@@ -154450,7 +158008,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6divtol___get__(struct PyPetscKS
  *             self.setTolerances(divtol=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[35]; __pyx_lineno = 584; __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(35, 605, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -154463,21 +158021,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6divtol___get__(struct PyPetscKS
     }
   }
   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[35]; __pyx_lineno = 584; __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(35, 605, __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[35]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 605, __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, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 605, __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;
 
-  /* "PETSc/KSP.pyx":583
+  /* "PETSc/KSP.pyx":604
  * 
  *     property divtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154498,7 +158056,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6divtol___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":585
+/* "PETSc/KSP.pyx":606
  *         def __get__(self):
  *             return self.getTolerances()[2]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154525,30 +158083,27 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6divtol_2__set__(struct PyPetscKSPObje
   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);
 
-  /* "PETSc/KSP.pyx":586
+  /* "PETSc/KSP.pyx":607
  *             return self.getTolerances()[2]
  *         def __set__(self, value):
  *             self.setTolerances(divtol=value)             # <<<<<<<<<<<<<<
  * 
  *     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[35]; __pyx_lineno = 586; __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(35, 607, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 607, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_divtol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 586; __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[35]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_divtol, __pyx_v_value) < 0) __PYX_ERR(35, 607, __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(35, 607, __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;
 
-  /* "PETSc/KSP.pyx":585
+  /* "PETSc/KSP.pyx":606
  *         def __get__(self):
  *             return self.getTolerances()[2]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154570,7 +158125,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6divtol_2__set__(struct PyPetscKSPObje
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":589
+/* "PETSc/KSP.pyx":610
  * 
  *     property max_it:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154597,12 +158152,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6max_it___get__(struct PyPetscKS
   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);
 
-  /* "PETSc/KSP.pyx":590
+  /* "PETSc/KSP.pyx":611
  *     property max_it:
  *         def __get__(self):
  *             return self.getTolerances()[3]             # <<<<<<<<<<<<<<
@@ -154610,7 +158162,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6max_it___get__(struct PyPetscKS
  *             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[35]; __pyx_lineno = 590; __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(35, 611, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -154623,21 +158175,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6max_it___get__(struct PyPetscKS
     }
   }
   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[35]; __pyx_lineno = 590; __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(35, 611, __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[35]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 611, __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, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 611, __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;
 
-  /* "PETSc/KSP.pyx":589
+  /* "PETSc/KSP.pyx":610
  * 
  *     property max_it:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154658,7 +158210,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6max_it___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":591
+/* "PETSc/KSP.pyx":612
  *         def __get__(self):
  *             return self.getTolerances()[3]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154685,30 +158237,27 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6max_it_2__set__(struct PyPetscKSPObje
   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);
 
-  /* "PETSc/KSP.pyx":592
+  /* "PETSc/KSP.pyx":613
  *             return self.getTolerances()[3]
  *         def __set__(self, value):
  *             self.setTolerances(max_it=value)             # <<<<<<<<<<<<<<
  * 
  *     # --- iteration ---
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 592; __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(35, 613, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 613, __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[35]; __pyx_lineno = 592; __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[35]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) __PYX_ERR(35, 613, __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(35, 613, __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;
 
-  /* "PETSc/KSP.pyx":591
+  /* "PETSc/KSP.pyx":612
  *         def __get__(self):
  *             return self.getTolerances()[3]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154730,7 +158279,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6max_it_2__set__(struct PyPetscKSPObje
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":597
+/* "PETSc/KSP.pyx":618
  * 
  *     property its:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154757,12 +158306,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPOb
   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);
 
-  /* "PETSc/KSP.pyx":598
+  /* "PETSc/KSP.pyx":619
  *     property its:
  *         def __get__(self):
  *             return self.getIterationNumber()             # <<<<<<<<<<<<<<
@@ -154770,7 +158316,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPOb
  *             self.setIterationNumber(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIterationNumber); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIterationNumber); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 619, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -154783,10 +158329,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPOb
     }
   }
   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[35]; __pyx_lineno = 598; __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(35, 619, __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[35]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 619, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -154794,7 +158340,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":597
+  /* "PETSc/KSP.pyx":618
  * 
  *     property its:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154815,7 +158361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPOb
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":599
+/* "PETSc/KSP.pyx":620
  *         def __get__(self):
  *             return self.getIterationNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154843,19 +158389,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_3its_2__set__(struct PyPetscKSPObject
   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);
 
-  /* "PETSc/KSP.pyx":600
+  /* "PETSc/KSP.pyx":621
  *             return self.getIterationNumber()
  *         def __set__(self, value):
  *             self.setIterationNumber(value)             # <<<<<<<<<<<<<<
  * 
  *     property norm:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setIterationNumber); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setIterationNumber); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 621, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -154868,23 +158411,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_3its_2__set__(struct PyPetscKSPObject
     }
   }
   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[35]; __pyx_lineno = 600; __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(35, 621, __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[35]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 621, __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[35]; __pyx_lineno = 600; __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(35, 621, __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;
 
-  /* "PETSc/KSP.pyx":599
+  /* "PETSc/KSP.pyx":620
  *         def __get__(self):
  *             return self.getIterationNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -154907,7 +158450,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_3its_2__set__(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":603
+/* "PETSc/KSP.pyx":624
  * 
  *     property norm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154934,12 +158477,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPO
   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);
 
-  /* "PETSc/KSP.pyx":604
+  /* "PETSc/KSP.pyx":625
  *     property norm:
  *         def __get__(self):
  *             return self.getResidualNorm()             # <<<<<<<<<<<<<<
@@ -154947,7 +158487,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPO
  *             self.setResidualNorm(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getResidualNorm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getResidualNorm); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 625, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -154960,10 +158500,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPO
     }
   }
   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[35]; __pyx_lineno = 604; __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(35, 625, __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[35]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 625, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -154971,7 +158511,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":603
+  /* "PETSc/KSP.pyx":624
  * 
  *     property norm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -154992,7 +158532,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":605
+/* "PETSc/KSP.pyx":626
  *         def __get__(self):
  *             return self.getResidualNorm()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -155020,19 +158560,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4norm_2__set__(struct PyPetscKSPObject
   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);
 
-  /* "PETSc/KSP.pyx":606
+  /* "PETSc/KSP.pyx":627
  *             return self.getResidualNorm()
  *         def __set__(self, value):
  *             self.setResidualNorm(value)             # <<<<<<<<<<<<<<
  * 
  *     property history:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setResidualNorm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setResidualNorm); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 627, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -155045,23 +158582,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4norm_2__set__(struct PyPetscKSPObject
     }
   }
   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[35]; __pyx_lineno = 606; __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(35, 627, __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[35]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 627, __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[35]; __pyx_lineno = 606; __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(35, 627, __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;
 
-  /* "PETSc/KSP.pyx":605
+  /* "PETSc/KSP.pyx":626
  *         def __get__(self):
  *             return self.getResidualNorm()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -155084,7 +158621,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4norm_2__set__(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":609
+/* "PETSc/KSP.pyx":630
  * 
  *     property history:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155111,12 +158648,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscK
   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);
 
-  /* "PETSc/KSP.pyx":610
+  /* "PETSc/KSP.pyx":631
  *     property history:
  *         def __get__(self):
  *             return self.getConvergenceHistory()             # <<<<<<<<<<<<<<
@@ -155124,7 +158658,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscK
  *     # --- convergence ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergenceHistory); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergenceHistory); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 631, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -155137,10 +158671,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscK
     }
   }
   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[35]; __pyx_lineno = 610; __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(35, 631, __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[35]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 631, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -155148,7 +158682,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscK
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":609
+  /* "PETSc/KSP.pyx":630
  * 
  *     property history:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155169,7 +158703,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":615
+/* "PETSc/KSP.pyx":636
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155196,12 +158730,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKS
   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);
 
-  /* "PETSc/KSP.pyx":616
+  /* "PETSc/KSP.pyx":637
  *     property reason:
  *         def __get__(self):
  *             return self.getConvergedReason()             # <<<<<<<<<<<<<<
@@ -155209,7 +158740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKS
  *             self.setConvergedReason(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 637, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -155222,10 +158753,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKS
     }
   }
   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[35]; __pyx_lineno = 616; __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(35, 637, __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[35]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 637, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -155233,7 +158764,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":615
+  /* "PETSc/KSP.pyx":636
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155254,7 +158785,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":617
+/* "PETSc/KSP.pyx":638
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -155282,19 +158813,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6reason_2__set__(struct PyPetscKSPObje
   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);
 
-  /* "PETSc/KSP.pyx":618
+  /* "PETSc/KSP.pyx":639
  *             return self.getConvergedReason()
  *         def __set__(self, value):
  *             self.setConvergedReason(value)             # <<<<<<<<<<<<<<
  * 
  *     property iterating:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 639, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -155307,23 +158835,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6reason_2__set__(struct PyPetscKSPObje
     }
   }
   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[35]; __pyx_lineno = 618; __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(35, 639, __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[35]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 639, __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[35]; __pyx_lineno = 618; __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(35, 639, __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;
 
-  /* "PETSc/KSP.pyx":617
+  /* "PETSc/KSP.pyx":638
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -155346,7 +158874,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6reason_2__set__(struct PyPetscKSPObje
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":621
+/* "PETSc/KSP.pyx":642
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155372,12 +158900,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9iterating___get__(struct PyPets
   __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("__get__", 0);
 
-  /* "PETSc/KSP.pyx":622
+  /* "PETSc/KSP.pyx":643
  *     property iterating:
  *         def __get__(self):
  *             return self.reason == 0             # <<<<<<<<<<<<<<
@@ -155385,15 +158910,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9iterating___get__(struct PyPets
  *     property converged:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 643, __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;
 
-  /* "PETSc/KSP.pyx":621
+  /* "PETSc/KSP.pyx":642
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155413,7 +158939,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9iterating___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":625
+/* "PETSc/KSP.pyx":646
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155439,12 +158965,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9converged___get__(struct PyPets
   __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("__get__", 0);
 
-  /* "PETSc/KSP.pyx":626
+  /* "PETSc/KSP.pyx":647
  *     property converged:
  *         def __get__(self):
  *             return self.reason > 0             # <<<<<<<<<<<<<<
@@ -155452,15 +158975,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9converged___get__(struct PyPets
  *     property diverged:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 647, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 647, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":625
+  /* "PETSc/KSP.pyx":646
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155480,7 +159003,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9converged___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":629
+/* "PETSc/KSP.pyx":650
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155506,12 +159029,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8diverged___get__(struct PyPetsc
   __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("__get__", 0);
 
-  /* "PETSc/KSP.pyx":630
+  /* "PETSc/KSP.pyx":651
  *     property diverged:
  *         def __get__(self):
  *             return self.reason < 0             # <<<<<<<<<<<<<<
@@ -155519,15 +159039,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8diverged___get__(struct PyPetsc
  * # --------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 651, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 651, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":629
+  /* "PETSc/KSP.pyx":650
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -155621,9 +159141,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_3view(PyObject *__pyx_v_self, P
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_2view[] = "SNES.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_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);
@@ -155648,7 +159165,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_3view(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(36, 75, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -155661,13 +159178,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_3view(PyObject *__pyx_v_self, P
   }
   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[36]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 75, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.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[36]; __pyx_lineno = 75; __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(36, 75, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_2view(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -155687,9 +159204,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2view(struct PyPetscSNESObject
   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);
 
   /* "PETSc/SNES.pyx":76
@@ -155713,9 +159227,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2view(struct PyPetscSNESObject
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_cviewer = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SNES.pyx":78
  *         cdef PetscViewer cviewer = NULL
@@ -155724,7 +159236,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2view(struct PyPetscSNESObject
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESView(__pyx_v_self->snes, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESView(__pyx_v_self->snes, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 78, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":75
  *     # --- xxx ---
@@ -155775,9 +159287,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4destroy(struct PyPetscSNESObje
   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);
 
   /* "PETSc/SNES.pyx":81
@@ -155787,7 +159296,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4destroy(struct PyPetscSNESObje
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESDestroy((&__pyx_v_self->snes))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESDestroy((&__pyx_v_self->snes))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 81, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":82
  *     def destroy(self):
@@ -155832,9 +159341,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_7create(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_6create[] = "SNES.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_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);
@@ -155859,7 +159365,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_7create(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[36]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(36, 84, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -155872,7 +159378,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_7create(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[36]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 84, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -155892,9 +159398,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6create(struct PyPetscSNESObjec
   __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);
 
   /* "PETSc/SNES.pyx":85
@@ -155904,7 +159407,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6create(struct PyPetscSNESObjec
  *         cdef PetscSNES newsnes = NULL
  *         CHKERR( SNESCreate(ccomm, &newsnes) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 85, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":86
@@ -155923,7 +159426,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6create(struct PyPetscSNESObjec
  *         PetscCLEAR(self.obj); self.snes = newsnes
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCreate(__pyx_v_ccomm, (&__pyx_v_newsnes))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCreate(__pyx_v_ccomm, (&__pyx_v_newsnes))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 87, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":88
  *         cdef PetscSNES newsnes = NULL
@@ -155978,9 +159481,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_9setType(PyObject *__pyx_v_self
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_8setType[] = "SNES.setType(self, snes_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_snes_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);
@@ -156002,7 +159502,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_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[36]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(36, 91, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -156013,7 +159513,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_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[36]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 91, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -156032,9 +159532,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8setType(struct PyPetscSNESObje
   __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_snes_type);
 
@@ -156054,7 +159551,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8setType(struct PyPetscSNESObje
  *         CHKERR( SNESSetType(self.snes, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_snes_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_snes_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_snes_type, __pyx_t_1);
   __pyx_t_1 = 0;
@@ -156066,7 +159563,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8setType(struct PyPetscSNESObje
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetType(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetType(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 94, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":91
  *         return self
@@ -156121,9 +159618,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_10getType(struct PyPetscSNESObj
   __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);
 
   /* "PETSc/SNES.pyx":97
@@ -156142,7 +159636,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_10getType(struct PyPetscSNESObj
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetType(__pyx_v_self->snes, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetType(__pyx_v_self->snes, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 98, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":99
  *         cdef PetscSNESType cval = NULL
@@ -156152,7 +159646,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_10getType(struct PyPetscSNESObj
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 99, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -156190,9 +159684,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_13setOptionsPrefix(PyObject *__
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_12setOptionsPrefix[] = "SNES.setOptionsPrefix(self, prefix)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
@@ -156214,7 +159705,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_13setOptionsPrefix(PyObject *__
         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[36]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(36, 101, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -156225,7 +159716,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_13setOptionsPrefix(PyObject *__
   }
   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[36]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 101, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -156244,9 +159735,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_12setOptionsPrefix(struct PyPet
   __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);
 
@@ -156266,7 +159754,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_12setOptionsPrefix(struct PyPet
  *         CHKERR( SNESSetOptionsPrefix(self.snes, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
@@ -156278,7 +159766,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_12setOptionsPrefix(struct PyPet
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetOptionsPrefix(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetOptionsPrefix(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 104, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":101
  *         return bytes2str(cval)
@@ -156333,9 +159821,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_14getOptionsPrefix(struct PyPet
   __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);
 
   /* "PETSc/SNES.pyx":107
@@ -156354,7 +159839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_14getOptionsPrefix(struct PyPet
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetOptionsPrefix(__pyx_v_self->snes, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetOptionsPrefix(__pyx_v_self->snes, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 108, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":109
  *         cdef const_char *cval = NULL
@@ -156364,7 +159849,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_14getOptionsPrefix(struct PyPet
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -156418,9 +159903,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_16setFromOptions(struct PyPetsc
   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);
 
   /* "PETSc/SNES.pyx":112
@@ -156430,7 +159912,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_16setFromOptions(struct PyPetsc
  * 
  *     # --- application context ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFromOptions(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFromOptions(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 112, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":111
  *         return bytes2str(cval)
@@ -156465,9 +159947,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_19setAppCtx(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_18setAppCtx[] = "SNES.setAppCtx(self, appctx)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_19setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_appctx = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAppCtx (wrapper)", 0);
@@ -156489,7 +159968,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_19setAppCtx(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) __PYX_ERR(36, 116, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -156500,7 +159979,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_19setAppCtx(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 116, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -156517,9 +159996,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_18setAppCtx(struct PyPetscSNESO
   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("setAppCtx", 0);
 
   /* "PETSc/SNES.pyx":117
@@ -156529,7 +160005,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_18setAppCtx(struct PyPetscSNESO
  * 
  *     def getAppCtx(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2, __pyx_v_appctx); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__"), __pyx_v_appctx); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
@@ -156583,9 +160059,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_20getAppCtx(struct PyPetscSNESO
   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("getAppCtx", 0);
 
   /* "PETSc/SNES.pyx":120
@@ -156596,7 +160069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_20getAppCtx(struct PyPetscSNESO
  *     # --- discretization space ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 120, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -156654,9 +160127,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_22getDM(struct PyPetscSNESObjec
   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("getDM", 0);
 
   /* "PETSc/SNES.pyx":125
@@ -156675,7 +160145,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_22getDM(struct PyPetscSNESObjec
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetDM(__pyx_v_self->snes, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetDM(__pyx_v_self->snes, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 126, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":127
  *         cdef PetscDM newdm = NULL
@@ -156684,12 +160154,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_22getDM(struct PyPetscSNESObjec
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(36, 127, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
@@ -156757,9 +160227,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_25setDM(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_24setDM[] = "SNES.setDM(self, DM dm)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_25setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscDMObject *__pyx_v_dm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDM (wrapper)", 0);
@@ -156781,7 +160248,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_25setDM(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, "setDM") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) __PYX_ERR(36, 132, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -156792,13 +160259,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_25setDM(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 132, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(36, 132, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_24setDM(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
@@ -156814,9 +160281,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_24setDM(struct PyPetscSNESObjec
   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("setDM", 0);
 
   /* "PETSc/SNES.pyx":133
@@ -156826,7 +160290,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_24setDM(struct PyPetscSNESObjec
  * 
  *     # --- FAS ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetDM(__pyx_v_self->snes, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetDM(__pyx_v_self->snes, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 133, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":132
  *         return dm
@@ -156862,9 +160326,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_26setFASInterpolation[] = "SNES.set
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_27setFASInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFASInterpolation (wrapper)", 0);
@@ -156888,11 +160349,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_27setFASInterpolation(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFASInterpolation", 1, 2, 2, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFASInterpolation", 1, 2, 2, 1); __PYX_ERR(36, 136, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASInterpolation") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASInterpolation") < 0)) __PYX_ERR(36, 136, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -156905,13 +160366,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_27setFASInterpolation(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFASInterpolation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFASInterpolation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 136, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setFASInterpolation", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(36, 136, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_26setFASInterpolation(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_level, __pyx_v_mat);
 
   /* function exit code */
@@ -156929,9 +160390,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_26setFASInterpolation(struct Py
   __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("setFASInterpolation", 0);
 
   /* "PETSc/SNES.pyx":137
@@ -156941,7 +160399,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_26setFASInterpolation(struct Py
  *         CHKERR( SNESFASSetInterpolation(self.snes, clevel, mat.mat) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 137, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":138
@@ -156951,7 +160409,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_26setFASInterpolation(struct Py
  * 
  *     def getFASInterpolation(self, level):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetInterpolation(__pyx_v_self->snes, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetInterpolation(__pyx_v_self->snes, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 138, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":136
  * 
@@ -156986,9 +160444,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_29getFASInterpolation(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_28getFASInterpolation[] = "SNES.getFASInterpolation(self, level)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_29getFASInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFASInterpolation (wrapper)", 0);
@@ -157010,7 +160465,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_29getFASInterpolation(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASInterpolation") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASInterpolation") < 0)) __PYX_ERR(36, 140, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -157021,7 +160476,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_29getFASInterpolation(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFASInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFASInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 140, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getFASInterpolation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -157042,9 +160497,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_28getFASInterpolation(struct Py
   PetscInt __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("getFASInterpolation", 0);
 
   /* "PETSc/SNES.pyx":141
@@ -157054,7 +160506,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_28getFASInterpolation(struct Py
  *         cdef Mat mat = Mat()
  *         CHKERR( SNESFASGetInterpolation(self.snes, clevel, &mat.mat) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 141, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":142
@@ -157064,7 +160516,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_28getFASInterpolation(struct Py
  *         CHKERR( SNESFASGetInterpolation(self.snes, clevel, &mat.mat) )
  *         PetscINCREF(mat.obj)
  */
-  __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[36]; __pyx_lineno = 142; __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(36, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -157076,7 +160528,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_28getFASInterpolation(struct Py
  *         PetscINCREF(mat.obj)
  *         return mat
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetInterpolation(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetInterpolation(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 143, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":144
  *         cdef Mat mat = Mat()
@@ -157133,9 +160585,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_30setFASRestriction[] = "SNES.setFA
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_31setFASRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFASRestriction (wrapper)", 0);
@@ -157159,11 +160608,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_31setFASRestriction(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFASRestriction", 1, 2, 2, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFASRestriction", 1, 2, 2, 1); __PYX_ERR(36, 147, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASRestriction") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASRestriction") < 0)) __PYX_ERR(36, 147, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -157176,13 +160625,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_31setFASRestriction(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFASRestriction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFASRestriction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 147, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setFASRestriction", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(36, 147, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_30setFASRestriction(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_level, __pyx_v_mat);
 
   /* function exit code */
@@ -157200,9 +160649,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_30setFASRestriction(struct PyPe
   __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("setFASRestriction", 0);
 
   /* "PETSc/SNES.pyx":148
@@ -157212,7 +160658,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_30setFASRestriction(struct PyPe
  *         CHKERR( SNESFASSetRestriction(self.snes, clevel, mat.mat) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 148, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":149
@@ -157222,7 +160668,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_30setFASRestriction(struct PyPe
  * 
  *     def getFASRestriction(self, level):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetRestriction(__pyx_v_self->snes, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetRestriction(__pyx_v_self->snes, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 149, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":147
  *         return mat
@@ -157257,9 +160703,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_33getFASRestriction(PyObject *_
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_32getFASRestriction[] = "SNES.getFASRestriction(self, level)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_33getFASRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFASRestriction (wrapper)", 0);
@@ -157281,7 +160724,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_33getFASRestriction(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASRestriction") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASRestriction") < 0)) __PYX_ERR(36, 151, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -157292,7 +160735,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_33getFASRestriction(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFASRestriction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFASRestriction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 151, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getFASRestriction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -157313,9 +160756,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_32getFASRestriction(struct PyPe
   PetscInt __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("getFASRestriction", 0);
 
   /* "PETSc/SNES.pyx":152
@@ -157325,7 +160765,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_32getFASRestriction(struct PyPe
  *         cdef Mat mat = Mat()
  *         CHKERR( SNESFASGetRestriction(self.snes, clevel, &mat.mat) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 152, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":153
@@ -157335,7 +160775,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_32getFASRestriction(struct PyPe
  *         CHKERR( SNESFASGetRestriction(self.snes, clevel, &mat.mat) )
  *         PetscINCREF(mat.obj)
  */
-  __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[36]; __pyx_lineno = 153; __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(36, 153, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -157347,7 +160787,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_32getFASRestriction(struct PyPe
  *         PetscINCREF(mat.obj)
  *         return mat
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetRestriction(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetRestriction(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 154, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":155
  *         cdef Mat mat = Mat()
@@ -157404,9 +160844,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_34setFASInjection[] = "SNES.setFASI
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_35setFASInjection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFASInjection (wrapper)", 0);
@@ -157430,11 +160867,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_35setFASInjection(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFASInjection", 1, 2, 2, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFASInjection", 1, 2, 2, 1); __PYX_ERR(36, 158, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASInjection") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASInjection") < 0)) __PYX_ERR(36, 158, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -157447,13 +160884,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_35setFASInjection(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFASInjection", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFASInjection", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 158, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setFASInjection", __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, 0, "mat", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(36, 158, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_34setFASInjection(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_level, __pyx_v_mat);
 
   /* function exit code */
@@ -157471,9 +160908,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_34setFASInjection(struct PyPets
   __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("setFASInjection", 0);
 
   /* "PETSc/SNES.pyx":159
@@ -157483,7 +160917,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_34setFASInjection(struct PyPets
  *         CHKERR( SNESFASSetInjection(self.snes, clevel, mat.mat) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 159, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":160
@@ -157493,7 +160927,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_34setFASInjection(struct PyPets
  * 
  *     def getFASInjection(self, level):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetInjection(__pyx_v_self->snes, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetInjection(__pyx_v_self->snes, __pyx_v_clevel, __pyx_v_mat->mat)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 160, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":158
  *         return mat
@@ -157528,9 +160962,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_37getFASInjection(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_36getFASInjection[] = "SNES.getFASInjection(self, level)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_37getFASInjection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFASInjection (wrapper)", 0);
@@ -157552,7 +160983,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_37getFASInjection(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, "getFASInjection") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASInjection") < 0)) __PYX_ERR(36, 162, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -157563,7 +160994,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_37getFASInjection(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFASInjection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFASInjection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 162, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getFASInjection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -157584,9 +161015,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_36getFASInjection(struct PyPets
   PetscInt __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("getFASInjection", 0);
 
   /* "PETSc/SNES.pyx":163
@@ -157596,7 +161024,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_36getFASInjection(struct PyPets
  *         cdef Mat mat = Mat()
  *         CHKERR( SNESFASGetInjection(self.snes, clevel, &mat.mat) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 163, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":164
@@ -157606,7 +161034,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_36getFASInjection(struct PyPets
  *         CHKERR( SNESFASGetInjection(self.snes, clevel, &mat.mat) )
  *         PetscINCREF(mat.obj)
  */
-  __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[36]; __pyx_lineno = 164; __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(36, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -157618,7 +161046,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_36getFASInjection(struct PyPets
  *         PetscINCREF(mat.obj)
  *         return mat
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetInjection(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetInjection(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 165, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":166
  *         cdef Mat mat = Mat()
@@ -157675,9 +161103,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_38setFASRScale[] = "SNES.setFASRSca
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_39setFASRScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFASRScale (wrapper)", 0);
@@ -157701,11 +161126,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_39setFASRScale(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setFASRScale", 1, 2, 2, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFASRScale", 1, 2, 2, 1); __PYX_ERR(36, 169, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASRScale") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASRScale") < 0)) __PYX_ERR(36, 169, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -157718,13 +161143,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_39setFASRScale(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFASRScale", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFASRScale", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 169, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setFASRScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(36, 169, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_38setFASRScale(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_level, __pyx_v_vec);
 
   /* function exit code */
@@ -157742,9 +161167,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_38setFASRScale(struct PyPetscSN
   __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("setFASRScale", 0);
 
   /* "PETSc/SNES.pyx":170
@@ -157754,7 +161176,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_38setFASRScale(struct PyPetscSN
  *         CHKERR( SNESFASSetRScale(self.snes, clevel, vec.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 170, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":171
@@ -157764,7 +161186,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_38setFASRScale(struct PyPetscSN
  * 
  *     def setFASLevels(self, levels, comms=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetRScale(__pyx_v_self->snes, __pyx_v_clevel, __pyx_v_vec->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetRScale(__pyx_v_self->snes, __pyx_v_clevel, __pyx_v_vec->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 171, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":169
  *         return mat
@@ -157800,9 +161222,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_40setFASLevels[] = "SNES.setFASLeve
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_41setFASLevels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_levels = 0;
   PyObject *__pyx_v_comms = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFASLevels (wrapper)", 0);
@@ -157831,7 +161250,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_41setFASLevels(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASLevels") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFASLevels") < 0)) __PYX_ERR(36, 173, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -157846,7 +161265,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_41setFASLevels(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFASLevels", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFASLevels", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 173, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setFASLevels", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -157885,9 +161304,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
   PyObject *__pyx_t_17 = NULL;
   PyObject *__pyx_t_18 = NULL;
   int __pyx_t_19;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFASLevels", 0);
 
   /* "PETSc/SNES.pyx":174
@@ -157897,7 +161313,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
  *         cdef MPI_Comm *ccomms = NULL
  *         cdef Py_ssize_t i = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 174, __pyx_L1_error)
   __pyx_v_clevels = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":175
@@ -157936,7 +161352,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
  *                 raise ValueError("Must provide as many communicators as levels")
  *             CHKERR( PetscMalloc(sizeof(MPI_Comm)*<size_t>clevels, &ccomms) )
  */
-    __pyx_t_4 = PyObject_Length(__pyx_v_comms); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Length(__pyx_v_comms); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 178, __pyx_L1_error)
     __pyx_t_3 = ((__pyx_v_clevels != ((PetscInt)__pyx_t_4)) != 0);
     if (__pyx_t_3) {
 
@@ -157947,11 +161363,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
  *             CHKERR( PetscMalloc(sizeof(MPI_Comm)*<size_t>clevels, &ccomms) )
  *             try:
  */
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__56, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__59, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 179, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[36]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(36, 179, __pyx_L1_error)
+
+      /* "PETSc/SNES.pyx":178
+ *         cdef Py_ssize_t i = 0
+ *         if comms is not None:
+ *             if clevels != <PetscInt>len(comms):             # <<<<<<<<<<<<<<
+ *                 raise ValueError("Must provide as many communicators as levels")
+ *             CHKERR( PetscMalloc(sizeof(MPI_Comm)*<size_t>clevels, &ccomms) )
+ */
     }
 
     /* "PETSc/SNES.pyx":180
@@ -157961,7 +161385,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
  *             try:
  *                 for i, comm in enumerate(comms):
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc(((sizeof(MPI_Comm)) * ((size_t)__pyx_v_clevels)), (&__pyx_v_ccomms))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc(((sizeof(MPI_Comm)) * ((size_t)__pyx_v_clevels)), (&__pyx_v_ccomms))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(36, 180, __pyx_L1_error)
 
     /* "PETSc/SNES.pyx":181
  *                 raise ValueError("Must provide as many communicators as levels")
@@ -157984,26 +161408,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
         __pyx_t_5 = __pyx_v_comms; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = 0;
         __pyx_t_8 = NULL;
       } else {
-        __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_comms); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_comms); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 182, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 182, __pyx_L6_error)
       }
       for (;;) {
         if (likely(!__pyx_t_8)) {
           if (likely(PyList_CheckExact(__pyx_t_5))) {
             if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break;
             #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_9 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+            __pyx_t_9 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(36, 182, __pyx_L6_error)
             #else
-            __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+            __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(36, 182, __pyx_L6_error)
             __Pyx_GOTREF(__pyx_t_9);
             #endif
           } else {
             if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
             #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+            __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(36, 182, __pyx_L6_error)
             #else
-            __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+            __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(36, 182, __pyx_L6_error)
             __Pyx_GOTREF(__pyx_t_9);
             #endif
           }
@@ -158013,7 +161437,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
             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[36]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+              else __PYX_ERR(36, 182, __pyx_L6_error)
             }
             break;
           }
@@ -158031,7 +161455,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
  *                 CHKERR( SNESFASSetLevels(self.snes, clevels, ccomms) )
  *             finally:
  */
-        __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, MPI_COMM_NULL); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, MPI_COMM_NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 183, __pyx_L6_error)
         (__pyx_v_ccomms[__pyx_v_i]) = __pyx_t_10;
 
         /* "PETSc/SNES.pyx":182
@@ -158051,7 +161475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
  *             finally:
  *                 CHKERR( PetscFree(ccomms) )
  */
-      __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetLevels(__pyx_v_self->snes, __pyx_v_clevels, __pyx_v_ccomms)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+      __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetLevels(__pyx_v_self->snes, __pyx_v_clevels, __pyx_v_ccomms)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(36, 184, __pyx_L6_error)
     }
 
     /* "PETSc/SNES.pyx":186
@@ -158063,12 +161487,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
  */
     /*finally:*/ {
       /*normal exit:*/{
-        __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_ccomms)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_ccomms)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(36, 186, __pyx_L1_error)
         goto __pyx_L7;
       }
       /*exception exit:*/{
+        __Pyx_PyThreadState_declare
         __pyx_L6_error:;
         __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
+        __Pyx_PyThreadState_assign
         __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
@@ -158081,8 +161507,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
         __Pyx_XGOTREF(__pyx_t_18);
         __pyx_t_6 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
         {
-          __pyx_t_19 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_ccomms)); if (unlikely(__pyx_t_19 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_19 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_ccomms)); if (unlikely(__pyx_t_19 == -1)) __PYX_ERR(36, 186, __pyx_L11_error)
         }
+        __Pyx_PyThreadState_assign
         if (PY_MAJOR_VERSION >= 3) {
           __Pyx_XGIVEREF(__pyx_t_16);
           __Pyx_XGIVEREF(__pyx_t_17);
@@ -158097,6 +161524,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
         __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
         goto __pyx_L1_error;
         __pyx_L11_error:;
+        __Pyx_PyThreadState_assign
         if (PY_MAJOR_VERSION >= 3) {
           __Pyx_XGIVEREF(__pyx_t_16);
           __Pyx_XGIVEREF(__pyx_t_17);
@@ -158111,18 +161539,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
       }
       __pyx_L7:;
     }
+
+    /* "PETSc/SNES.pyx":177
+ *         cdef MPI_Comm *ccomms = NULL
+ *         cdef Py_ssize_t i = 0
+ *         if comms is not None:             # <<<<<<<<<<<<<<
+ *             if clevels != <PetscInt>len(comms):
+ *                 raise ValueError("Must provide as many communicators as levels")
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/SNES.pyx":188
+  /* "PETSc/SNES.pyx":188
  *                 CHKERR( PetscFree(ccomms) )
  *         else:
  *             CHKERR( SNESFASSetLevels(self.snes, clevels, ccomms) )             # <<<<<<<<<<<<<<
  * 
  *     def getFASLevels(self):
  */
-    __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetLevels(__pyx_v_self->snes, __pyx_v_clevels, __pyx_v_ccomms)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetLevels(__pyx_v_self->snes, __pyx_v_clevels, __pyx_v_ccomms)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(36, 188, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -158180,9 +161616,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_42getFASLevels(struct PyPetscSN
   __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("getFASLevels", 0);
 
   /* "PETSc/SNES.pyx":191
@@ -158201,7 +161634,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_42getFASLevels(struct PyPetscSN
  *         return toInt(levels)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetLevels(__pyx_v_self->snes, (&__pyx_v_levels))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetLevels(__pyx_v_self->snes, (&__pyx_v_levels))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 192, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":193
  *         cdef PetscInt levels = 0
@@ -158211,7 +161644,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_42getFASLevels(struct PyPetscSN
  *     def getFASCycleSNES(self, level):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_levels); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_levels); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 193, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -158249,9 +161682,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_45getFASCycleSNES(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_44getFASCycleSNES[] = "SNES.getFASCycleSNES(self, level)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_45getFASCycleSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFASCycleSNES (wrapper)", 0);
@@ -158273,7 +161703,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_45getFASCycleSNES(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, "getFASCycleSNES") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASCycleSNES") < 0)) __PYX_ERR(36, 195, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -158284,7 +161714,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_45getFASCycleSNES(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFASCycleSNES", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFASCycleSNES", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 195, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getFASCycleSNES", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -158305,9 +161735,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_44getFASCycleSNES(struct PyPets
   PetscInt __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("getFASCycleSNES", 0);
 
   /* "PETSc/SNES.pyx":196
@@ -158317,7 +161744,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_44getFASCycleSNES(struct PyPets
  *         cdef SNES lsnes = SNES()
  *         CHKERR( SNESFASGetCycleSNES(self.snes, clevel, &lsnes.snes) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 196, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":197
@@ -158327,7 +161754,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_44getFASCycleSNES(struct PyPets
  *         CHKERR( SNESFASGetCycleSNES(self.snes, clevel, &lsnes.snes) )
  *         PetscINCREF(lsnes.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 197, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lsnes = ((struct PyPetscSNESObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -158339,7 +161766,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_44getFASCycleSNES(struct PyPets
  *         PetscINCREF(lsnes.obj)
  *         return lsnes
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetCycleSNES(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_lsnes->snes))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetCycleSNES(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_lsnes->snes))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 198, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":199
  *         cdef SNES lsnes = SNES()
@@ -158413,9 +161840,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_46getFASCoarseSolve(struct PyPe
   __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("getFASCoarseSolve", 0);
 
   /* "PETSc/SNES.pyx":203
@@ -158425,7 +161849,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_46getFASCoarseSolve(struct PyPe
  *         CHKERR( SNESFASGetCoarseSolve(self.snes, &smooth.snes) )
  *         PetscINCREF(smooth.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 203, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_smooth = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -158437,7 +161861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_46getFASCoarseSolve(struct PyPe
  *         PetscINCREF(smooth.obj)
  *         return smooth
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetCoarseSolve(__pyx_v_self->snes, (&__pyx_v_smooth->snes))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetCoarseSolve(__pyx_v_self->snes, (&__pyx_v_smooth->snes))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 204, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":205
  *         cdef SNES smooth = SNES()
@@ -158493,9 +161917,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_49getFASSmoother(PyObject *__py
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_48getFASSmoother[] = "SNES.getFASSmoother(self, level)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_49getFASSmoother(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFASSmoother (wrapper)", 0);
@@ -158517,7 +161938,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_49getFASSmoother(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, "getFASSmoother") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASSmoother") < 0)) __PYX_ERR(36, 208, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -158528,7 +161949,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_49getFASSmoother(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFASSmoother", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFASSmoother", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 208, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getFASSmoother", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -158549,9 +161970,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_48getFASSmoother(struct PyPetsc
   PetscInt __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("getFASSmoother", 0);
 
   /* "PETSc/SNES.pyx":209
@@ -158561,7 +161979,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_48getFASSmoother(struct PyPetsc
  *         cdef SNES smooth = SNES()
  *         CHKERR( SNESFASGetSmoother(self.snes, clevel, &smooth.snes) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 209, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":210
@@ -158571,7 +161989,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_48getFASSmoother(struct PyPetsc
  *         CHKERR( SNESFASGetSmoother(self.snes, clevel, &smooth.snes) )
  *         PetscINCREF(smooth.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_smooth = ((struct PyPetscSNESObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -158583,7 +162001,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_48getFASSmoother(struct PyPetsc
  *         PetscINCREF(smooth.obj)
  *         return smooth
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetSmoother(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_smooth->snes))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetSmoother(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_smooth->snes))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 211, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":212
  *         cdef SNES smooth = SNES()
@@ -158639,9 +162057,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_51getFASSmootherDown(PyObject *
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_50getFASSmootherDown[] = "SNES.getFASSmootherDown(self, level)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_51getFASSmootherDown(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFASSmootherDown (wrapper)", 0);
@@ -158663,7 +162078,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_51getFASSmootherDown(PyObject *
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASSmootherDown") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASSmootherDown") < 0)) __PYX_ERR(36, 215, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -158674,7 +162089,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_51getFASSmootherDown(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFASSmootherDown", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFASSmootherDown", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 215, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getFASSmootherDown", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -158695,9 +162110,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_50getFASSmootherDown(struct PyP
   PetscInt __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("getFASSmootherDown", 0);
 
   /* "PETSc/SNES.pyx":216
@@ -158707,7 +162119,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_50getFASSmootherDown(struct PyP
  *         cdef SNES smooth = SNES()
  *         CHKERR( SNESFASGetSmootherDown(self.snes, clevel, &smooth.snes) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 216, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":217
@@ -158717,7 +162129,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_50getFASSmootherDown(struct PyP
  *         CHKERR( SNESFASGetSmootherDown(self.snes, clevel, &smooth.snes) )
  *         PetscINCREF(smooth.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_smooth = ((struct PyPetscSNESObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -158729,7 +162141,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_50getFASSmootherDown(struct PyP
  *         PetscINCREF(smooth.obj)
  *         return smooth
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetSmootherDown(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_smooth->snes))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetSmootherDown(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_smooth->snes))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 218, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":219
  *         cdef SNES smooth = SNES()
@@ -158785,9 +162197,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_53getFASSmootherUp(PyObject *__
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_52getFASSmootherUp[] = "SNES.getFASSmootherUp(self, level)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_53getFASSmootherUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFASSmootherUp (wrapper)", 0);
@@ -158809,7 +162218,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_53getFASSmootherUp(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASSmootherUp") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getFASSmootherUp") < 0)) __PYX_ERR(36, 222, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -158820,7 +162229,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_53getFASSmootherUp(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getFASSmootherUp", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getFASSmootherUp", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 222, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getFASSmootherUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -158841,9 +162250,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_52getFASSmootherUp(struct PyPet
   PetscInt __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("getFASSmootherUp", 0);
 
   /* "PETSc/SNES.pyx":223
@@ -158853,7 +162259,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_52getFASSmootherUp(struct PyPet
  *         cdef SNES smooth = SNES()
  *         CHKERR( SNESFASGetSmootherUp(self.snes, clevel, &smooth.snes) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 223, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":224
@@ -158863,7 +162269,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_52getFASSmootherUp(struct PyPet
  *         CHKERR( SNESFASGetSmootherUp(self.snes, clevel, &smooth.snes) )
  *         PetscINCREF(smooth.obj)
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_smooth = ((struct PyPetscSNESObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -158875,7 +162281,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_52getFASSmootherUp(struct PyPet
  *         PetscINCREF(smooth.obj)
  *         return smooth
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetSmootherUp(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_smooth->snes))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetSmootherUp(__pyx_v_self->snes, __pyx_v_clevel, (&__pyx_v_smooth->snes))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 225, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":226
  *         cdef SNES smooth = SNES()
@@ -158949,9 +162355,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_54getNPC(struct PyPetscSNESObje
   __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("getNPC", 0);
 
   /* "PETSc/SNES.pyx":231
@@ -158961,7 +162364,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_54getNPC(struct PyPetscSNESObje
  *         CHKERR( SNESGetNPC(self.snes, &snes.snes) )
  *         PetscINCREF(snes.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -158973,7 +162376,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_54getNPC(struct PyPetscSNESObje
  *         PetscINCREF(snes.obj)
  *         return snes
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNPC(__pyx_v_self->snes, (&__pyx_v_snes->snes))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNPC(__pyx_v_self->snes, (&__pyx_v_snes->snes))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 232, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":233
  *         cdef SNES snes = SNES()
@@ -159047,9 +162450,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObje
   __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("hasNPC", 0);
 
   /* "PETSc/SNES.pyx":237
@@ -159068,7 +162468,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObje
  *         return <bint> has_npc
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESHasNPC(__pyx_v_self->snes, (&__pyx_v_has_npc))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESHasNPC(__pyx_v_self->snes, (&__pyx_v_has_npc))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 238, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":239
  *         cdef PetscBool has_npc = PETSC_FALSE
@@ -159078,7 +162478,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObje
  *     def setNPC(self, SNES snes not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_has_npc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_has_npc); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -159116,9 +162516,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_59setNPC(PyObject *__pyx_v_self
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_58setNPC[] = "SNES.setNPC(self, SNES snes)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_59setNPC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscSNESObject *__pyx_v_snes = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setNPC (wrapper)", 0);
@@ -159140,7 +162537,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_59setNPC(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, "setNPC") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNPC") < 0)) __PYX_ERR(36, 241, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -159151,13 +162548,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_59setNPC(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNPC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setNPC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 241, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setNPC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_snes), __pyx_ptype_8petsc4py_5PETSc_SNES, 0, "snes", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_snes), __pyx_ptype_8petsc4py_5PETSc_SNES, 0, "snes", 0))) __PYX_ERR(36, 241, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_58setNPC(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_snes);
 
   /* function exit code */
@@ -159173,9 +162570,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_58setNPC(struct PyPetscSNESObje
   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("setNPC", 0);
 
   /* "PETSc/SNES.pyx":242
@@ -159185,7 +162579,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_58setNPC(struct PyPetscSNESObje
  * 
  *     # --- user Function/Jacobian routines ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetNPC(__pyx_v_self->snes, __pyx_v_snes->snes)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetNPC(__pyx_v_self->snes, __pyx_v_snes->snes)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 242, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":241
  *         return <bint> has_npc
@@ -159222,14 +162616,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_61setInitialGuess(PyObject *__p
   PyObject *__pyx_v_initialguess = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setInitialGuess (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_initialguess_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_initialguess,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -159246,7 +162637,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_61setInitialGuess(PyObject *__p
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_initialguess_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_initialguess)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -159260,7 +162651,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_61setInitialGuess(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialGuess") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialGuess") < 0)) __PYX_ERR(36, 246, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -159277,7 +162668,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_61setInitialGuess(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialGuess", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInitialGuess", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 246, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setInitialGuess", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -159298,9 +162689,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPets
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setInitialGuess", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -159328,9 +162716,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPets
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/SNES.pyx":249
  *         if initialguess is not None:
@@ -159342,13 +162728,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPets
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 249, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/SNES.pyx":250
  *             if args  is None: args  = ()
@@ -159357,7 +162741,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPets
  *             self.set_attr('__initialguess__', context)
  *             CHKERR( SNESSetInitialGuess(self.snes, SNES_InitialGuess, <void*>context) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 250, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_initialguess);
     __Pyx_GIVEREF(__pyx_v_initialguess);
@@ -159378,7 +162762,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPets
  *             CHKERR( SNESSetInitialGuess(self.snes, SNES_InitialGuess, <void*>context) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_initialguess, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__initialguess__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 251, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -159389,19 +162773,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPets
  *         else:
  *             self.set_attr('__initialguess__', None)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetComputeInitialGuess(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetComputeInitialGuess(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 252, __pyx_L1_error)
+
+    /* "PETSc/SNES.pyx":247
+ * 
+ *     def setInitialGuess(self, initialguess, args=None, kargs=None):
+ *         if initialguess is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/SNES.pyx":254
+  /* "PETSc/SNES.pyx":254
  *             CHKERR( SNESSetInitialGuess(self.snes, SNES_InitialGuess, <void*>context) )
  *         else:
  *             self.set_attr('__initialguess__', None)             # <<<<<<<<<<<<<<
  *             CHKERR( SNESSetInitialGuess(self.snes, NULL, NULL) )
  * 
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_initialguess, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__initialguess__"), Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 254, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -159412,7 +162804,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_60setInitialGuess(struct PyPets
  * 
  *     def getInitialGuess(self):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetComputeInitialGuess(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetComputeInitialGuess(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 255, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -159469,9 +162861,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_62getInitialGuess(struct PyPets
   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("getInitialGuess", 0);
 
   /* "PETSc/SNES.pyx":258
@@ -159482,7 +162871,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_62getInitialGuess(struct PyPets
  *     def setFunction(self, function, Vec f, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_initialguess); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__initialguess__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -159523,14 +162912,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_65setFunction(PyObject *__pyx_v
   struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFunction (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function_2,&__pyx_n_s_f,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function,&__pyx_n_s_f,&__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);
@@ -159548,12 +162934,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_65setFunction(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--;
+        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, 4, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setFunction", 0, 2, 4, 1); __PYX_ERR(36, 260, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -159567,7 +162953,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_65setFunction(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFunction") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFunction") < 0)) __PYX_ERR(36, 260, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -159586,13 +162972,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_65setFunction(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFunction", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setFunction", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 260, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.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_Vec, 1, "f", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "f", 0))) __PYX_ERR(36, 260, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_function, __pyx_v_f, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
@@ -159614,9 +163000,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNE
   Vec __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  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);
@@ -159642,9 +163025,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNE
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_f->vec;
     __pyx_v_fvec = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SNES.pyx":263
  *         cdef PetscVec fvec=NULL
@@ -159669,9 +163050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNE
     if (__pyx_t_2) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/SNES.pyx":265
  *         if function is not None:
@@ -159683,13 +163062,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNE
     __pyx_t_2 = (__pyx_v_kargs == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 265, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L6;
     }
-    __pyx_L6:;
 
     /* "PETSc/SNES.pyx":266
  *             if args  is None: args  = ()
@@ -159698,7 +163075,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNE
  *             self.set_attr('__function__', context)
  *             CHKERR( SNESSetFunction(self.snes, fvec, SNES_Function, <void*>context) )
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 266, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_function);
     __Pyx_GIVEREF(__pyx_v_function);
@@ -159719,7 +163096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNE
  *             CHKERR( SNESSetFunction(self.snes, fvec, SNES_Function, <void*>context) )
  *         else:
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_function, __pyx_v_context); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__function__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 267, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
@@ -159730,19 +163107,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNE
  *         else:
  *             CHKERR( SNESSetFunction(self.snes, fvec, NULL, NULL) )
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFunction(__pyx_v_self->snes, __pyx_v_fvec, __pyx_f_8petsc4py_5PETSc_SNES_Function, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFunction(__pyx_v_self->snes, __pyx_v_fvec, __pyx_f_8petsc4py_5PETSc_SNES_Function, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(36, 268, __pyx_L1_error)
+
+    /* "PETSc/SNES.pyx":263
+ *         cdef PetscVec fvec=NULL
+ *         if f is not None: fvec = f.vec
+ *         if function is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/SNES.pyx":270
+  /* "PETSc/SNES.pyx":270
  *             CHKERR( SNESSetFunction(self.snes, fvec, SNES_Function, <void*>context) )
  *         else:
  *             CHKERR( SNESSetFunction(self.snes, fvec, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def getFunction(self):
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFunction(__pyx_v_self->snes, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFunction(__pyx_v_self->snes, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(36, 270, __pyx_L1_error)
   }
   __pyx_L4:;
 
@@ -159802,9 +163187,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_66getFunction(struct PyPetscSNE
   __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("getFunction", 0);
 
   /* "PETSc/SNES.pyx":273
@@ -159814,7 +163196,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_66getFunction(struct PyPetscSNE
  *         CHKERR( SNESGetFunction(self.snes, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)
  */
-  __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[36]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 273, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_f = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -159826,7 +163208,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_66getFunction(struct PyPetscSNE
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__function__')
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetFunction(__pyx_v_self->snes, (&__pyx_v_f->vec), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetFunction(__pyx_v_self->snes, (&__pyx_v_f->vec), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 274, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":275
  *         cdef Vec f = Vec()
@@ -159844,7 +163226,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_66getFunction(struct PyPetscSNE
  *         return (f, function)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_function); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_function = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -159857,7 +163239,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_66getFunction(struct PyPetscSNE
  *     def setUpdate(self, update, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_f));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
@@ -159905,14 +163287,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_69setUpdate(PyObject *__pyx_v_s
   PyObject *__pyx_v_update = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setUpdate (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_update_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_update,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -159929,7 +163308,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_69setUpdate(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_update_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_update)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -159943,7 +163322,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_69setUpdate(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUpdate") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUpdate") < 0)) __PYX_ERR(36, 279, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -159960,7 +163339,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_69setUpdate(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setUpdate", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setUpdate", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 279, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setUpdate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -159981,9 +163360,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESO
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setUpdate", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -160011,9 +163387,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESO
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/SNES.pyx":282
  *         if update is not None:
@@ -160025,13 +163399,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESO
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 282, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/SNES.pyx":283
  *             if args  is None: args  = ()
@@ -160040,7 +163412,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESO
  *             self.set_attr('__update__', context)
  *             CHKERR( SNESSetUpdate(self.snes, SNES_Update) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 283, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_update);
     __Pyx_GIVEREF(__pyx_v_update);
@@ -160061,7 +163433,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESO
  *             CHKERR( SNESSetUpdate(self.snes, SNES_Update) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_update, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__update__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 284, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -160072,19 +163444,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESO
  *         else:
  *             self.set_attr('__update__', None)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUpdate(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_Update)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUpdate(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_Update)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 285, __pyx_L1_error)
+
+    /* "PETSc/SNES.pyx":280
+ * 
+ *     def setUpdate(self, update, args=None, kargs=None):
+ *         if update is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/SNES.pyx":287
+  /* "PETSc/SNES.pyx":287
  *             CHKERR( SNESSetUpdate(self.snes, SNES_Update) )
  *         else:
  *             self.set_attr('__update__', None)             # <<<<<<<<<<<<<<
  *             CHKERR( SNESSetUpdate(self.snes, NULL) )
  * 
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_update, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__update__"), Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 287, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -160095,7 +163475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_68setUpdate(struct PyPetscSNESO
  * 
  *     def getUpdate(self):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUpdate(__pyx_v_self->snes, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUpdate(__pyx_v_self->snes, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 288, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -160152,9 +163532,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_70getUpdate(struct PyPetscSNESO
   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("getUpdate", 0);
 
   /* "PETSc/SNES.pyx":291
@@ -160165,7 +163542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_70getUpdate(struct PyPetscSNESO
  *     def setJacobian(self, jacobian, Mat J, Mat P=None, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__update__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -160207,14 +163584,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v
   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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setJacobian (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_2,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian,&__pyx_n_s_J,&__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);
@@ -160234,12 +163608,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(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_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, 5, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 2, 5, 1); __PYX_ERR(36, 293, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -160258,7 +163632,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobian") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobian") < 0)) __PYX_ERR(36, 293, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -160279,14 +163653,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 293, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.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_filename = __pyx_f[36]; __pyx_lineno = 293; __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[36]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(36, 293, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(36, 293, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
@@ -160309,9 +163683,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
   Mat __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  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);
@@ -160337,9 +163708,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_J->mat;
     __pyx_v_Jmat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SNES.pyx":296
  *         cdef PetscMat Jmat=NULL
@@ -160362,9 +163731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_Pmat = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/SNES.pyx":298
  *         cdef PetscMat Pmat=Jmat
@@ -160389,9 +163756,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L6;
     }
-    __pyx_L6:;
 
     /* "PETSc/SNES.pyx":300
  *         if jacobian is not None:
@@ -160403,13 +163768,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 300, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L7;
     }
-    __pyx_L7:;
 
     /* "PETSc/SNES.pyx":301
  *             if args  is None: args  = ()
@@ -160418,7 +163781,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
  *             self.set_attr('__jacobian__', context)
  *             CHKERR( SNESSetJacobian(self.snes, Jmat, Pmat, SNES_Jacobian, <void*>context) )
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 301, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_jacobian);
     __Pyx_GIVEREF(__pyx_v_jacobian);
@@ -160439,7 +163802,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
  *             CHKERR( SNESSetJacobian(self.snes, Jmat, Pmat, SNES_Jacobian, <void*>context) )
  *         else:
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_jacobian, __pyx_v_context); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__jacobian__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 302, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
@@ -160450,19 +163813,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
  *         else:
  *             CHKERR( SNESSetJacobian(self.snes, Jmat, Pmat, NULL, NULL) )
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetJacobian(__pyx_v_self->snes, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_SNES_Jacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetJacobian(__pyx_v_self->snes, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_SNES_Jacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(36, 303, __pyx_L1_error)
+
+    /* "PETSc/SNES.pyx":298
+ *         cdef PetscMat Pmat=Jmat
+ *         if P is not None: Pmat = P.mat
+ *         if jacobian is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/SNES.pyx":305
+  /* "PETSc/SNES.pyx":305
  *             CHKERR( SNESSetJacobian(self.snes, Jmat, Pmat, SNES_Jacobian, <void*>context) )
  *         else:
  *             CHKERR( SNESSetJacobian(self.snes, Jmat, Pmat, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def getJacobian(self):
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetJacobian(__pyx_v_self->snes, __pyx_v_Jmat, __pyx_v_Pmat, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetJacobian(__pyx_v_self->snes, __pyx_v_Jmat, __pyx_v_Pmat, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(36, 305, __pyx_L1_error)
   }
   __pyx_L5:;
 
@@ -160523,9 +163894,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_74getJacobian(struct PyPetscSNE
   __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("getJacobian", 0);
 
   /* "PETSc/SNES.pyx":308
@@ -160535,7 +163903,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_74getJacobian(struct PyPetscSNE
  *         cdef Mat P = Mat()
  *         CHKERR( SNESGetJacobian(self.snes, &J.mat, &P.mat, NULL, NULL) )
  */
-  __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[36]; __pyx_lineno = 308; __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(36, 308, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_J = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -160547,7 +163915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_74getJacobian(struct PyPetscSNE
  *         CHKERR( SNESGetJacobian(self.snes, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.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[36]; __pyx_lineno = 309; __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(36, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -160559,7 +163927,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_74getJacobian(struct PyPetscSNE
  *         PetscINCREF(J.obj)
  *         PetscINCREF(P.obj)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetJacobian(__pyx_v_self->snes, (&__pyx_v_J->mat), (&__pyx_v_P->mat), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetJacobian(__pyx_v_self->snes, (&__pyx_v_J->mat), (&__pyx_v_P->mat), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 310, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":311
  *         cdef Mat P = Mat()
@@ -160586,7 +163954,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_74getJacobian(struct PyPetscSNE
  *         return (J, P, jacobian)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_jacobian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__jacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 313, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_jacobian = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -160599,7 +163967,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_74getJacobian(struct PyPetscSNE
  *     def setObjective(self, objective, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 314, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_J));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
@@ -160651,14 +164019,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_77setObjective(PyObject *__pyx_
   PyObject *__pyx_v_objective = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setObjective (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_objective_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_objective,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -160675,7 +164040,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_77setObjective(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_objective_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_objective)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -160689,7 +164054,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_77setObjective(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setObjective") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setObjective") < 0)) __PYX_ERR(36, 316, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -160706,7 +164071,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_77setObjective(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setObjective", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setObjective", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 316, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setObjective", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -160727,9 +164092,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSN
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setObjective", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -160757,9 +164119,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSN
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/SNES.pyx":319
  *         if objective is not None:
@@ -160771,13 +164131,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSN
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 319, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/SNES.pyx":320
  *             if args  is None: args  = ()
@@ -160786,7 +164144,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSN
  *             self.set_attr('__objective__', context)
  *             CHKERR( SNESSetObjective(self.snes, SNES_Objective, <void*>context) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 320, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_objective);
     __Pyx_GIVEREF(__pyx_v_objective);
@@ -160807,7 +164165,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSN
  *             CHKERR( SNESSetObjective(self.snes, SNES_Objective, <void*>context) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_objective, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__objective__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 321, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -160818,19 +164176,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSN
  *         else:
  *             CHKERR( SNESSetObjective(self.snes, NULL, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetObjective(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_Objective, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetObjective(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_Objective, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 322, __pyx_L1_error)
+
+    /* "PETSc/SNES.pyx":317
+ * 
+ *     def setObjective(self, objective, args=None, kargs=None):
+ *         if objective is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/SNES.pyx":324
+  /* "PETSc/SNES.pyx":324
  *             CHKERR( SNESSetObjective(self.snes, SNES_Objective, <void*>context) )
  *         else:
  *             CHKERR( SNESSetObjective(self.snes, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def getObjective(self):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetObjective(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetObjective(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 324, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -160889,9 +164255,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_78getObjective(struct PyPetscSN
   __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("getObjective", 0);
 
   /* "PETSc/SNES.pyx":327
@@ -160901,7 +164264,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_78getObjective(struct PyPetscSN
  *         cdef object objective = self.get_attr('__objective__')
  *         return objective
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetObjective(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetObjective(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 327, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":328
  *     def getObjective(self):
@@ -160910,7 +164273,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_78getObjective(struct PyPetscSN
  *         return objective
  * 
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_objective); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__objective__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_objective = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -160961,9 +164324,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_80computeFunction[] = "SNES.compute
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_81computeFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_f = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeFunction (wrapper)", 0);
@@ -160987,11 +164347,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_81computeFunction(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeFunction", 1, 2, 2, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeFunction", 1, 2, 2, 1); __PYX_ERR(36, 331, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeFunction") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeFunction") < 0)) __PYX_ERR(36, 331, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -161004,14 +164364,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_81computeFunction(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeFunction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeFunction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 331, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.computeFunction", __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[36]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 331; __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(36, 331, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(36, 331, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_80computeFunction(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_x, __pyx_v_f);
 
   /* function exit code */
@@ -161027,9 +164387,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_80computeFunction(struct PyPets
   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("computeFunction", 0);
 
   /* "PETSc/SNES.pyx":332
@@ -161039,7 +164396,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_80computeFunction(struct PyPets
  * 
  *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESComputeFunction(__pyx_v_self->snes, __pyx_v_x->vec, __pyx_v_f->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESComputeFunction(__pyx_v_self->snes, __pyx_v_x->vec, __pyx_v_f->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 332, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":331
  *         return objective
@@ -161076,9 +164433,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_83computeJacobian(PyObject *__p
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeJacobian (wrapper)", 0);
@@ -161104,7 +164458,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_83computeJacobian(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeJacobian", 0, 2, 3, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeJacobian", 0, 2, 3, 1); __PYX_ERR(36, 334, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -161113,7 +164467,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_83computeJacobian(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeJacobian") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeJacobian") < 0)) __PYX_ERR(36, 334, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -161130,15 +164484,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_83computeJacobian(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeJacobian", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeJacobian", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 334, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.computeJacobian", __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[36]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 334; __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[36]; __pyx_lineno = 334; __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(36, 334, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(36, 334, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(36, 334, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_x, __pyx_v_J, __pyx_v_P);
 
   /* function exit code */
@@ -161159,9 +164513,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPets
   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("computeJacobian", 0);
 
   /* "PETSc/SNES.pyx":335
@@ -161188,9 +164539,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPets
   if (__pyx_t_3) {
     __pyx_t_1 = __pyx_v_P->mat;
     __pyx_v_pmat = __pyx_t_1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SNES.pyx":337
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
@@ -161199,7 +164548,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPets
  * 
  *     def computeObjective(self, Vec x not None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESComputeJacobian(__pyx_v_self->snes, __pyx_v_x->vec, __pyx_v_jmat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESComputeJacobian(__pyx_v_self->snes, __pyx_v_x->vec, __pyx_v_jmat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 337, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":334
  *         CHKERR( SNESComputeFunction(self.snes, x.vec, f.vec) )
@@ -161234,9 +164583,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_85computeObjective(PyObject *__
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_84computeObjective[] = "SNES.computeObjective(self, Vec x)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_85computeObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeObjective (wrapper)", 0);
@@ -161258,7 +164604,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_85computeObjective(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeObjective") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeObjective") < 0)) __PYX_ERR(36, 339, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -161269,13 +164615,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_85computeObjective(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeObjective", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeObjective", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 339, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.computeObjective", __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[36]; __pyx_lineno = 339; __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(36, 339, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_x);
 
   /* function exit code */
@@ -161293,9 +164639,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPet
   __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("computeObjective", 0);
 
   /* "PETSc/SNES.pyx":340
@@ -161314,7 +164657,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPet
  *         return toReal(o)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESComputeObjective(__pyx_v_self->snes, __pyx_v_x->vec, (&__pyx_v_o))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESComputeObjective(__pyx_v_self->snes, __pyx_v_x->vec, (&__pyx_v_o))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 341, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":342
  *         cdef PetscReal o = 0
@@ -161324,7 +164667,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPet
  *     # --- tolerances and convergence ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_o); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_o); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 342, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -161365,9 +164708,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setTolerances(PyObject *__pyx
   PyObject *__pyx_v_atol = 0;
   PyObject *__pyx_v_stol = 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);
@@ -161413,7 +164753,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setTolerances(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(36, 346, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -161432,7 +164772,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setTolerances(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 346, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -161457,9 +164797,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
   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);
 
   /* "PETSc/SNES.pyx":348
@@ -161492,11 +164829,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
   __pyx_t_1 = (__pyx_v_rtol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 350, __pyx_L1_error)
     __pyx_v_crtol = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SNES.pyx":351
  *         cdef PetscInt cmaxit = PETSC_DEFAULT
@@ -161508,11 +164843,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
   __pyx_t_2 = (__pyx_v_atol != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 351, __pyx_L1_error)
     __pyx_v_catol = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/SNES.pyx":352
  *         if rtol   is not None: crtol  = asReal(rtol)
@@ -161524,11 +164857,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
   __pyx_t_1 = (__pyx_v_stol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_stol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_stol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 352, __pyx_L1_error)
     __pyx_v_cstol = __pyx_t_3;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
   /* "PETSc/SNES.pyx":353
  *         if atol   is not None: catol  = asReal(atol)
@@ -161540,11 +164871,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
   __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_8petsc4py_5PETSc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(36, 353, __pyx_L1_error)
     __pyx_v_cmaxit = __pyx_t_4;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
   /* "PETSc/SNES.pyx":354
  *         if stol   is not None: cstol  = asReal(stol)
@@ -161553,7 +164882,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
  *                                   cmaxit, PETSC_DEFAULT) )
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetTolerances(__pyx_v_self->snes, __pyx_v_catol, __pyx_v_crtol, __pyx_v_cstol, __pyx_v_cmaxit, PETSC_DEFAULT)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetTolerances(__pyx_v_self->snes, __pyx_v_catol, __pyx_v_crtol, __pyx_v_cstol, __pyx_v_cmaxit, PETSC_DEFAULT)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(36, 354, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":346
  *     # --- tolerances and convergence ---
@@ -161613,9 +164942,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
   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("getTolerances", 0);
 
   /* "PETSc/SNES.pyx":358
@@ -161645,7 +164971,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
  *                                   &cmaxit, NULL) )
  *         return (toReal(crtol), toReal(catol), toReal(cstol), toInt(cmaxit))
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetTolerances(__pyx_v_self->snes, (&__pyx_v_catol), (&__pyx_v_crtol), (&__pyx_v_cstol), (&__pyx_v_cmaxit), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetTolerances(__pyx_v_self->snes, (&__pyx_v_catol), (&__pyx_v_crtol), (&__pyx_v_cstol), (&__pyx_v_cmaxit), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 360, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":362
  *         CHKERR( SNESGetTolerances(self.snes, &catol, &crtol, &cstol,
@@ -161655,15 +164981,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
  *     def setNormSchedule(self, normsched):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_crtol); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_crtol); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_catol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_catol); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cstol); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cstol); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cmaxit); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cmaxit); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(36, 362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -161717,9 +165043,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_91setNormSchedule(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_90setNormSchedule[] = "SNES.setNormSchedule(self, normsched)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_91setNormSchedule(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_normsched = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setNormSchedule (wrapper)", 0);
@@ -161741,7 +165064,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_91setNormSchedule(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, "setNormSchedule") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNormSchedule") < 0)) __PYX_ERR(36, 364, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -161752,7 +165075,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_91setNormSchedule(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNormSchedule", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setNormSchedule", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 364, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setNormSchedule", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -161770,9 +165093,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_90setNormSchedule(struct PyPets
   __Pyx_RefNannyDeclarations
   SNESNormSchedule __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setNormSchedule", 0);
 
   /* "PETSc/SNES.pyx":365
@@ -161782,8 +165102,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_90setNormSchedule(struct PyPets
  * 
  *     def getNormSchedule(self):
  */
-  __pyx_t_1 = ((SNESNormSchedule)PyInt_AsLong(__pyx_v_normsched)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetNormSchedule(__pyx_v_self->snes, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((SNESNormSchedule)__Pyx_PyInt_As_SNESNormSchedule(__pyx_v_normsched)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 365, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetNormSchedule(__pyx_v_self->snes, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 365, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":364
  *         return (toReal(crtol), toReal(catol), toReal(cstol), toInt(cmaxit))
@@ -161836,9 +165156,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPets
   __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("getNormSchedule", 0);
 
   /* "PETSc/SNES.pyx":368
@@ -161857,7 +165174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPets
  *         return normsched
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNormSchedule(__pyx_v_self->snes, (&__pyx_v_normsched))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNormSchedule(__pyx_v_self->snes, (&__pyx_v_normsched))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 369, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":370
  *         cdef PetscSNESNormSchedule normsched = SNES_NORM_NONE
@@ -161867,7 +165184,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPets
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_normsched); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_SNESNormSchedule(__pyx_v_normsched); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 370, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -161907,14 +165224,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest(PyObject *
   PyObject *__pyx_v_converged = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergenceTest (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_converged_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_converged,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -161931,7 +165245,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -161945,7 +165259,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) __PYX_ERR(36, 372, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -161962,7 +165276,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 372, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -161983,9 +165297,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setConvergenceTest", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -162013,9 +165324,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/SNES.pyx":375
  *         if converged is not None:
@@ -162027,13 +165336,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 375, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/SNES.pyx":376
  *             if args  is None: args  = ()
@@ -162042,7 +165349,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
  *             self.set_attr('__converged__', context)
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNES_Converged, <void*>context, NULL) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 376, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_converged);
     __Pyx_GIVEREF(__pyx_v_converged);
@@ -162063,7 +165370,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNES_Converged, <void*>context, NULL) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 377, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -162074,19 +165381,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
  *         else:
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNESConvergedDefault, NULL, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergenceTest(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_Converged, ((void *)__pyx_v_context), NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergenceTest(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_Converged, ((void *)__pyx_v_context), NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 378, __pyx_L1_error)
+
+    /* "PETSc/SNES.pyx":373
+ * 
+ *     def setConvergenceTest(self, converged, args=None, kargs=None):
+ *         if converged is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/SNES.pyx":380
+  /* "PETSc/SNES.pyx":380
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNES_Converged, <void*>context, NULL) )
  *         else:
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNESConvergedDefault, NULL, NULL) )             # <<<<<<<<<<<<<<
  *             self.set_attr('__converged__', None)
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergenceTest(__pyx_v_self->snes, SNESConvergedDefault, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergenceTest(__pyx_v_self->snes, SNESConvergedDefault, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 380, __pyx_L1_error)
 
     /* "PETSc/SNES.pyx":381
  *         else:
@@ -162095,7 +165410,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
  * 
  *     def getConvergenceTest(self):
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__"), Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 381, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
@@ -162154,9 +165469,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96getConvergenceTest(struct PyP
   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("getConvergenceTest", 0);
 
   /* "PETSc/SNES.pyx":384
@@ -162167,7 +165479,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96getConvergenceTest(struct PyP
  *     def callConvergenceTest(self, its, xnorm, ynorm, fnorm):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -162208,9 +165520,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99callConvergenceTest(PyObject
   PyObject *__pyx_v_xnorm = 0;
   PyObject *__pyx_v_ynorm = 0;
   PyObject *__pyx_v_fnorm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("callConvergenceTest (wrapper)", 0);
@@ -162236,21 +165545,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99callConvergenceTest(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xnorm)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 1); __PYX_ERR(36, 386, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ynorm)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 2); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 2); __PYX_ERR(36, 386, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fnorm)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 3); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 3); __PYX_ERR(36, 386, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "callConvergenceTest") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "callConvergenceTest") < 0)) __PYX_ERR(36, 386, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -162267,7 +165576,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99callConvergenceTest(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 386, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.callConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -162292,9 +165601,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
   PetscReal __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("callConvergenceTest", 0);
 
   /* "PETSc/SNES.pyx":387
@@ -162304,7 +165610,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  *         cdef PetscReal rval1 = asReal(xnorm)
  *         cdef PetscReal rval2 = asReal(ynorm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 387, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":388
@@ -162314,7 +165620,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  *         cdef PetscReal rval2 = asReal(ynorm)
  *         cdef PetscReal rval3 = asReal(fnorm)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 388, __pyx_L1_error)
   __pyx_v_rval1 = __pyx_t_2;
 
   /* "PETSc/SNES.pyx":389
@@ -162324,7 +165630,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  *         cdef PetscReal rval3 = asReal(fnorm)
  *         cdef PetscSNESConvergedReason reason = SNES_CONVERGED_ITERATING
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ynorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ynorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 389, __pyx_L1_error)
   __pyx_v_rval2 = __pyx_t_2;
 
   /* "PETSc/SNES.pyx":390
@@ -162334,7 +165640,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  *         cdef PetscSNESConvergedReason reason = SNES_CONVERGED_ITERATING
  *         CHKERR( SNESConvergenceTestCall(self.snes, ival,
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 390, __pyx_L1_error)
   __pyx_v_rval3 = __pyx_t_2;
 
   /* "PETSc/SNES.pyx":391
@@ -162353,7 +165659,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  *                                         rval1, rval2, rval3, &reason) )
  *         return reason
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESConvergenceTestCall(__pyx_v_self->snes, __pyx_v_ival, __pyx_v_rval1, __pyx_v_rval2, __pyx_v_rval3, (&__pyx_v_reason))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESConvergenceTestCall(__pyx_v_self->snes, __pyx_v_ival, __pyx_v_rval1, __pyx_v_rval2, __pyx_v_rval3, (&__pyx_v_reason))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 392, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":394
  *         CHKERR( SNESConvergenceTestCall(self.snes, ival,
@@ -162363,7 +165669,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  *     def setConvergenceHistory(self, length=None, reset=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_SNESConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 394, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
@@ -162402,9 +165708,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_100setConvergenceHistory[] = "SNES.
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_length = 0;
   PyObject *__pyx_v_reset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergenceHistory (wrapper)", 0);
@@ -162436,7 +165739,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceHistory(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceHistory") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceHistory") < 0)) __PYX_ERR(36, 396, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -162451,7 +165754,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceHistory(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceHistory", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergenceHistory", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 396, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setConvergenceHistory", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -162479,9 +165782,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setConvergenceHistory", 0);
 
   /* "PETSc/SNES.pyx":397
@@ -162509,7 +165809,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  *         cdef PetscBool flag = PETSC_FALSE
  *         if   length is True:     pass
  */
-  __pyx_v_size = 1000;
+  __pyx_v_size = 0x3E8;
 
   /* "PETSc/SNES.pyx":400
  *         cdef PetscInt  *idata = NULL
@@ -162543,9 +165843,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
   __pyx_t_2 = (__pyx_v_length != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_length); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_length); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(36, 402, __pyx_L1_error)
     __pyx_v_size = __pyx_t_3;
-    goto __pyx_L3;
   }
   __pyx_L3:;
 
@@ -162558,10 +165857,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  */
   __pyx_t_1 = ((__pyx_v_size < 0) != 0);
   if (__pyx_t_1) {
-    __pyx_v_size = 1000;
-    goto __pyx_L4;
+    __pyx_v_size = 0x3E8;
   }
-  __pyx_L4:;
 
   /* "PETSc/SNES.pyx":404
  *         elif length is not None: size = asInt(length)
@@ -162570,12 +165867,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  *         cdef object rhist = oarray_r(empty_r(size), NULL, &rdata)
  *         cdef object ihist = oarray_i(empty_i(size), NULL, &idata)
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_reset); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_reset); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(36, 404, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_flag = PETSC_TRUE;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
   /* "PETSc/SNES.pyx":405
  *         if size < 0: size = 1000
@@ -162584,9 +165879,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  *         cdef object ihist = oarray_i(empty_i(size), NULL, &idata)
  *         self.set_attr('__history__', (rhist, ihist))
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_size)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_size)); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 405, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_r(__pyx_t_4, NULL, (&__pyx_v_rdata))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_r(__pyx_t_4, NULL, (&__pyx_v_rdata))); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 405, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_rhist = __pyx_t_5;
@@ -162599,9 +165894,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  *         self.set_attr('__history__', (rhist, ihist))
  *         CHKERR( SNESSetConvergenceHistory(self.snes, rdata, idata, size, flag) )
  */
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_size)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_size)); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_5, NULL, (&__pyx_v_idata))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_t_5, NULL, (&__pyx_v_idata))); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_ihist = __pyx_t_4;
@@ -162614,7 +165909,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  *         CHKERR( SNESSetConvergenceHistory(self.snes, rdata, idata, size, flag) )
  * 
  */
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_rhist);
   __Pyx_GIVEREF(__pyx_v_rhist);
@@ -162622,7 +165917,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
   __Pyx_INCREF(__pyx_v_ihist);
   __Pyx_GIVEREF(__pyx_v_ihist);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_ihist);
-  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_history, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__history__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -162634,7 +165929,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  * 
  *     def getConvergenceHistory(self):
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergenceHistory(__pyx_v_self->snes, __pyx_v_rdata, __pyx_v_idata, __pyx_v_size, __pyx_v_flag)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergenceHistory(__pyx_v_self->snes, __pyx_v_rdata, __pyx_v_idata, __pyx_v_size, __pyx_v_flag)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(36, 408, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":396
  *         return reason
@@ -162695,9 +165990,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
   __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("getConvergenceHistory", 0);
 
   /* "PETSc/SNES.pyx":411
@@ -162734,7 +166026,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
  *         cdef object rhist = array_r(size, rdata)
  *         cdef object ihist = array_i(size, idata)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetConvergenceHistory(__pyx_v_self->snes, (&__pyx_v_rdata), (&__pyx_v_idata), (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetConvergenceHistory(__pyx_v_self->snes, (&__pyx_v_rdata), (&__pyx_v_idata), (&__pyx_v_size))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 414, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":415
  *         cdef PetscInt   size = 0
@@ -162743,7 +166035,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
  *         cdef object ihist = array_i(size, idata)
  *         return (rhist, ihist)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_r(__pyx_v_size, __pyx_v_rdata)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_r(__pyx_v_size, __pyx_v_rdata)); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 415, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_rhist = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -162755,7 +166047,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
  *         return (rhist, ihist)
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_size, __pyx_v_idata)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_size, __pyx_v_idata)); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 416, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ihist = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -162768,7 +166060,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
  *     def logConvergenceHistory(self, norm, linear_its=0):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 417, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_rhist);
   __Pyx_GIVEREF(__pyx_v_rhist);
@@ -162815,9 +166107,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_104logConvergenceHistory[] = "SNES.
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_norm = 0;
   PyObject *__pyx_v_linear_its = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("logConvergenceHistory (wrapper)", 0);
@@ -162846,7 +166135,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105logConvergenceHistory(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logConvergenceHistory") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logConvergenceHistory") < 0)) __PYX_ERR(36, 419, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -162861,7 +166150,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105logConvergenceHistory(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("logConvergenceHistory", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("logConvergenceHistory", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 419, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.logConvergenceHistory", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -162882,9 +166171,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct
   PetscReal __pyx_t_1;
   PetscInt __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("logConvergenceHistory", 0);
 
   /* "PETSc/SNES.pyx":420
@@ -162894,7 +166180,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct
  *         cdef PetscInt  ival = asInt(linear_its)
  *         CHKERR( SNESLogConvergenceHistory(self.snes, rval, ival) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_norm); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_norm); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 420, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":421
@@ -162904,7 +166190,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct
  *         CHKERR( SNESLogConvergenceHistory(self.snes, rval, ival) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_linear_its); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_linear_its); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(36, 421, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_2;
 
   /* "PETSc/SNES.pyx":422
@@ -162914,7 +166200,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct
  * 
  *     def setResetCounters(self, reset=True):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESLogConvergenceHistory(__pyx_v_self->snes, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESLogConvergenceHistory(__pyx_v_self->snes, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 422, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":419
  *         return (rhist, ihist)
@@ -162949,9 +166235,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_107setResetCounters(PyObject *_
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_106setResetCounters[] = "SNES.setResetCounters(self, reset=True)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_107setResetCounters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_reset = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setResetCounters (wrapper)", 0);
@@ -162976,7 +166259,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_107setResetCounters(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setResetCounters") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setResetCounters") < 0)) __PYX_ERR(36, 424, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -162989,7 +166272,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_107setResetCounters(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setResetCounters", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setResetCounters", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 424, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setResetCounters", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -163008,9 +166291,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPe
   __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("setResetCounters", 0);
 
   /* "PETSc/SNES.pyx":425
@@ -163020,7 +166300,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPe
  *         CHKERR( SNESSetCountersReset(self.snes, flag) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_reset)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_reset)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 425, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":426
@@ -163030,7 +166310,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPe
  * 
  *     # --- monitoring ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetCountersReset(__pyx_v_self->snes, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetCountersReset(__pyx_v_self->snes, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 426, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":424
  *         CHKERR( SNESLogConvergenceHistory(self.snes, rval, ival) )
@@ -163067,14 +166347,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor(PyObject *__pyx_v
   PyObject *__pyx_v_monitor = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMonitor (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_monitor_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_monitor,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -163091,7 +166368,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor(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_monitor_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_monitor)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -163105,7 +166382,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(36, 430, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -163122,7 +166399,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 430, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -163145,9 +166422,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setMonitor", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -163174,7 +166448,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
  *         if monitorlist is None:
  *             monitorlist = []
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_monitorlist = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -163197,7 +166471,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( SNESMonitorSet(self.snes, SNES_Monitor, NULL, NULL) )
  */
-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 434, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_monitorlist, __pyx_t_3);
     __pyx_t_3 = 0;
@@ -163209,7 +166483,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
  *             CHKERR( SNESMonitorSet(self.snes, SNES_Monitor, NULL, NULL) )
  *         if args  is None: args  = ()
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor, __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__"), __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 435, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -163220,10 +166494,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
  *         if args  is None: args  = ()
  *         if kargs is None: kargs = {}
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESMonitorSet(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_Monitor, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESMonitorSet(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_Monitor, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 436, __pyx_L1_error)
+
+    /* "PETSc/SNES.pyx":433
+ *         if monitor is None: return
+ *         cdef object monitorlist = self.get_attr('__monitor__')
+ *         if monitorlist is None:             # <<<<<<<<<<<<<<
+ *             monitorlist = []
+ *             self.set_attr('__monitor__', monitorlist)
+ */
   }
-  __pyx_L4:;
 
   /* "PETSc/SNES.pyx":437
  *             self.set_attr('__monitor__', monitorlist)
@@ -163237,9 +166517,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
   if (__pyx_t_2) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
   /* "PETSc/SNES.pyx":438
  *             CHKERR( SNESMonitorSet(self.snes, SNES_Monitor, NULL, NULL) )
@@ -163251,13 +166529,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
   __pyx_t_2 = (__pyx_v_kargs == Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 438, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
   /* "PETSc/SNES.pyx":439
  *         if args  is None: args  = ()
@@ -163266,7 +166542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
  *         monitorlist.append(context)
  * 
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 439, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_monitor);
   __Pyx_GIVEREF(__pyx_v_monitor);
@@ -163287,7 +166563,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
  * 
  *     def getMonitor(self):
  */
-  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_v_context); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_v_context); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(36, 440, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":430
  *     # --- monitoring ---
@@ -163343,9 +166619,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110getMonitor(struct PyPetscSNE
   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("getMonitor", 0);
 
   /* "PETSc/SNES.pyx":443
@@ -163356,7 +166629,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110getMonitor(struct PyPetscSNE
  *     def cancelMonitor(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 443, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -163411,9 +166684,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112cancelMonitor(struct PyPetsc
   __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("cancelMonitor", 0);
 
   /* "PETSc/SNES.pyx":446
@@ -163423,7 +166693,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112cancelMonitor(struct PyPetsc
  *         self.set_attr('__monitor__', None)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESMonitorCancel(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESMonitorCancel(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 446, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":447
  *     def cancelMonitor(self):
@@ -163432,7 +166702,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112cancelMonitor(struct PyPetsc
  * 
  *     def monitor(self, its, rnorm):
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__"), Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 447, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
@@ -163471,9 +166741,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_114monitor[] = "SNES.monitor(self,
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_its = 0;
   PyObject *__pyx_v_rnorm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("monitor (wrapper)", 0);
@@ -163497,11 +166764,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115monitor(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rnorm)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, 1); __PYX_ERR(36, 449, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(36, 449, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -163514,7 +166781,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115monitor(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 449, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.monitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -163535,9 +166802,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESOb
   PetscInt __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("monitor", 0);
 
   /* "PETSc/SNES.pyx":450
@@ -163547,7 +166811,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESOb
  *         cdef PetscReal rval = asReal(rnorm)
  *         CHKERR( SNESMonitor(self.snes, ival, rval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 450, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":451
@@ -163557,7 +166821,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESOb
  *         CHKERR( SNESMonitor(self.snes, ival, rval) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 451, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_2;
 
   /* "PETSc/SNES.pyx":452
@@ -163567,7 +166831,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESOb
  * 
  *     # --- more tolerances ---
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESMonitor(__pyx_v_self->snes, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESMonitor(__pyx_v_self->snes, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 452, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":449
  *         self.set_attr('__monitor__', None)
@@ -163602,9 +166866,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_117setMaxFunctionEvaluations(Py
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations[] = "SNES.setMaxFunctionEvaluations(self, max_funcs)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_117setMaxFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_funcs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMaxFunctionEvaluations (wrapper)", 0);
@@ -163626,7 +166887,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_117setMaxFunctionEvaluations(Py
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxFunctionEvaluations") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxFunctionEvaluations") < 0)) __PYX_ERR(36, 456, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -163637,7 +166898,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_117setMaxFunctionEvaluations(Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxFunctionEvaluations", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMaxFunctionEvaluations", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 456, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setMaxFunctionEvaluations", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -163658,9 +166919,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(st
   __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("setMaxFunctionEvaluations", 0);
 
   /* "PETSc/SNES.pyx":457
@@ -163688,7 +166946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(st
  *         CHKERR( SNESSetTolerances(self.snes, r, r, r, i, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_funcs); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_funcs); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 459, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":460
@@ -163698,7 +166956,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(st
  * 
  *     def getMaxFunctionEvaluations(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetTolerances(__pyx_v_self->snes, __pyx_v_r, __pyx_v_r, __pyx_v_r, __pyx_v_i, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetTolerances(__pyx_v_self->snes, __pyx_v_r, __pyx_v_r, __pyx_v_r, __pyx_v_i, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 460, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":456
  *     # --- more tolerances ---
@@ -163753,9 +167011,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
   __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("getMaxFunctionEvaluations", 0);
 
   /* "PETSc/SNES.pyx":463
@@ -163792,7 +167047,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetTolerances(__pyx_v_self->snes, __pyx_v_r, __pyx_v_r, __pyx_v_r, __pyx_v_i, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetTolerances(__pyx_v_self->snes, __pyx_v_r, __pyx_v_r, __pyx_v_r, __pyx_v_i, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 466, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":467
  *         cdef PetscInt ival = 0
@@ -163802,7 +167057,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
  *     def getFunctionEvaluations(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 467, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -163858,9 +167113,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struc
   __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("getFunctionEvaluations", 0);
 
   /* "PETSc/SNES.pyx":470
@@ -163879,7 +167131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struc
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNumberFunctionEvals(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNumberFunctionEvals(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 471, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":472
  *         cdef PetscInt ival = 0
@@ -163889,7 +167141,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struc
  *     def setMaxStepFailures(self, max_fails):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -163927,9 +167179,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxStepFailures(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_122setMaxStepFailures[] = "SNES.setMaxStepFailures(self, max_fails)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_fails = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMaxStepFailures (wrapper)", 0);
@@ -163951,7 +167200,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxStepFailures(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxStepFailures") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxStepFailures") < 0)) __PYX_ERR(36, 474, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -163962,7 +167211,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxStepFailures(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxStepFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMaxStepFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 474, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setMaxStepFailures", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -163981,9 +167230,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct Py
   __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("setMaxStepFailures", 0);
 
   /* "PETSc/SNES.pyx":475
@@ -163993,7 +167239,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct Py
  *         CHKERR( SNESSetMaxNonlinearStepFailures(self.snes, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_fails); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_fails); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 475, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":476
@@ -164003,7 +167249,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct Py
  * 
  *     def getMaxStepFailures(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetMaxNonlinearStepFailures(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetMaxNonlinearStepFailures(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 476, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":474
  *         return toInt(ival)
@@ -164056,9 +167302,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct Py
   __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("getMaxStepFailures", 0);
 
   /* "PETSc/SNES.pyx":479
@@ -164077,7 +167320,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct Py
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetMaxNonlinearStepFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetMaxNonlinearStepFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 480, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":481
  *         cdef PetscInt ival = 0
@@ -164087,7 +167330,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct Py
  *     def getStepFailures(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 481, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -164143,9 +167386,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPet
   __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("getStepFailures", 0);
 
   /* "PETSc/SNES.pyx":484
@@ -164164,7 +167404,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPet
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNonlinearStepFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNonlinearStepFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 485, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":486
  *         cdef PetscInt ival = 0
@@ -164174,7 +167414,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPet
  *     def setMaxKSPFailures(self, max_fails):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 486, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -164212,9 +167452,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxKSPFailures(PyObject *
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures[] = "SNES.setMaxKSPFailures(self, max_fails)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_fails = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMaxKSPFailures (wrapper)", 0);
@@ -164236,7 +167473,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxKSPFailures(PyObject *
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxKSPFailures") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxKSPFailures") < 0)) __PYX_ERR(36, 488, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -164247,7 +167484,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxKSPFailures(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxKSPFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMaxKSPFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 488, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setMaxKSPFailures", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -164266,9 +167503,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyP
   __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("setMaxKSPFailures", 0);
 
   /* "PETSc/SNES.pyx":489
@@ -164278,7 +167512,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyP
  *         CHKERR( SNESSetMaxLinearSolveFailures(self.snes, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_fails); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_fails); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 489, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":490
@@ -164288,7 +167522,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyP
  * 
  *     def getMaxKSPFailures(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetMaxLinearSolveFailures(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetMaxLinearSolveFailures(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 490, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":488
  *         return toInt(ival)
@@ -164341,9 +167575,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyP
   __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("getMaxKSPFailures", 0);
 
   /* "PETSc/SNES.pyx":493
@@ -164362,7 +167593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyP
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetMaxLinearSolveFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetMaxLinearSolveFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 494, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":495
  *         cdef PetscInt ival = 0
@@ -164372,7 +167603,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyP
  *     def getKSPFailures(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 495, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -164428,9 +167659,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPets
   __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("getKSPFailures", 0);
 
   /* "PETSc/SNES.pyx":498
@@ -164449,7 +167677,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPets
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetLinearSolveFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetLinearSolveFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 499, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":500
  *         cdef PetscInt ival = 0
@@ -164459,7 +167687,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPets
  *     setMaxNonlinearStepFailures = setMaxStepFailures
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 500, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -164513,9 +167741,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setUp(struct PyPetscSNESObje
   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);
 
   /* "PETSc/SNES.pyx":512
@@ -164525,7 +167750,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setUp(struct PyPetscSNESObje
  * 
  *     def reset(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUp(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUp(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 512, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":511
  *     # --- solving ---
@@ -164576,9 +167801,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_136reset(struct PyPetscSNESObje
   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);
 
   /* "PETSc/SNES.pyx":515
@@ -164588,7 +167810,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_136reset(struct PyPetscSNESObje
  * 
  *     def solve(self, Vec b, Vec x not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESReset(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESReset(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 515, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":514
  *         CHKERR( SNESSetUp(self.snes) )
@@ -164624,9 +167846,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_138solve[] = "SNES.solve(self, Vec
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139solve(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solve (wrapper)", 0);
@@ -164650,11 +167869,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139solve(PyObject *__pyx_v_self
         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[36]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(36, 517, __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[36]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(36, 517, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -164667,14 +167886,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139solve(PyObject *__pyx_v_self
   }
   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[36]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 517, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.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, 1, "b", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 517; __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[36]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(36, 517, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(36, 517, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_138solve(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
@@ -164694,9 +167913,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObje
   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("solve", 0);
 
   /* "PETSc/SNES.pyx":518
@@ -164720,9 +167936,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObje
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_b->vec;
     __pyx_v_rhs = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SNES.pyx":520
  *         cdef PetscVec rhs = NULL
@@ -164731,7 +167945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObje
  * 
  *     def setConvergedReason(self, reason):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSolve(__pyx_v_self->snes, __pyx_v_rhs, __pyx_v_x->vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSolve(__pyx_v_self->snes, __pyx_v_rhs, __pyx_v_x->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(36, 520, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":517
  *         CHKERR( SNESReset(self.snes) )
@@ -164766,9 +167980,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_141setConvergedReason(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_140setConvergedReason[] = "SNES.setConvergedReason(self, reason)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_141setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_reason = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergedReason (wrapper)", 0);
@@ -164790,7 +168001,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_141setConvergedReason(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) __PYX_ERR(36, 522, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -164801,7 +168012,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_141setConvergedReason(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 522, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -164820,9 +168031,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct Py
   __Pyx_RefNannyDeclarations
   SNESConvergedReason __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setConvergedReason", 0);
 
   /* "PETSc/SNES.pyx":523
@@ -164832,7 +168040,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct Py
  *         CHKERR( SNESSetConvergedReason(self.snes, eval) )
  * 
  */
-  __pyx_t_1 = ((SNESConvergedReason)PyInt_AsLong(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((SNESConvergedReason)__Pyx_PyInt_As_SNESConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 523, __pyx_L1_error)
   __pyx_v_eval = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":524
@@ -164842,7 +168050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct Py
  * 
  *     def getConvergedReason(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergedReason(__pyx_v_self->snes, __pyx_v_eval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergedReason(__pyx_v_self->snes, __pyx_v_eval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 524, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":522
  *         CHKERR( SNESSolve(self.snes, rhs, x.vec) )
@@ -164895,9 +168103,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct Py
   __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);
 
   /* "PETSc/SNES.pyx":527
@@ -164916,7 +168121,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct Py
  *         return reason
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetConvergedReason(__pyx_v_self->snes, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetConvergedReason(__pyx_v_self->snes, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 528, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":529
  *         cdef PetscSNESConvergedReason reason = SNES_CONVERGED_ITERATING
@@ -164926,7 +168131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct Py
  *     def setIterationNumber(self, its):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_SNESConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 529, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -164964,9 +168169,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_145setIterationNumber(PyObject
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_144setIterationNumber[] = "SNES.setIterationNumber(self, its)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_145setIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_its = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setIterationNumber (wrapper)", 0);
@@ -164988,7 +168190,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_145setIterationNumber(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIterationNumber") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIterationNumber") < 0)) __PYX_ERR(36, 531, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -164999,7 +168201,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_145setIterationNumber(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setIterationNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setIterationNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 531, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -165018,9 +168220,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct Py
   __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("setIterationNumber", 0);
 
   /* "PETSc/SNES.pyx":532
@@ -165030,7 +168229,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct Py
  *         CHKERR( SNESSetIterationNumber(self.snes, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(36, 532, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":533
@@ -165040,7 +168239,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct Py
  * 
  *     def getIterationNumber(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetIterationNumber(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetIterationNumber(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 533, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":531
  *         return reason
@@ -165093,9 +168292,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct Py
   __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);
 
   /* "PETSc/SNES.pyx":536
@@ -165114,7 +168310,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct Py
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetIterationNumber(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetIterationNumber(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 537, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":538
  *         cdef PetscInt ival = 0
@@ -165124,7 +168320,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct Py
  *     def getLinearSolveIterations(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 538, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -165180,9 +168376,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(str
   __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("getLinearSolveIterations", 0);
 
   /* "PETSc/SNES.pyx":541
@@ -165201,7 +168394,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(str
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetLinearSolveIterations(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetLinearSolveIterations(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 542, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":543
  *         cdef PetscInt ival = 0
@@ -165211,7 +168404,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(str
  *     def getRhs(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 543, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -165267,9 +168460,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObj
   __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("getRhs", 0);
 
   /* "PETSc/SNES.pyx":546
@@ -165279,7 +168469,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObj
  *         CHKERR( SNESGetRhs(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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[36]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -165291,7 +168481,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObj
  *         PetscINCREF(vec.obj)
  *         return vec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetRhs(__pyx_v_self->snes, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetRhs(__pyx_v_self->snes, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 547, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":548
  *         cdef Vec vec = Vec()
@@ -165365,9 +168555,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSN
   __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("getSolution", 0);
 
   /* "PETSc/SNES.pyx":552
@@ -165377,7 +168564,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSN
  *         CHKERR( SNESGetSolution(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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[36]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 552, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -165389,7 +168576,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSN
  *         PetscINCREF(vec.obj)
  *         return vec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetSolution(__pyx_v_self->snes, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetSolution(__pyx_v_self->snes, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 553, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":554
  *         cdef Vec vec = Vec()
@@ -165445,9 +168632,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setSolution(PyObject *__pyx_
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_154setSolution[] = "SNES.setSolution(self, Vec vec)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setSolution (wrapper)", 0);
@@ -165469,7 +168653,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setSolution(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, "setSolution") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSolution") < 0)) __PYX_ERR(36, 557, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -165480,13 +168664,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setSolution(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSolution", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSolution", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 557, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setSolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(36, 557, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
@@ -165502,9 +168686,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(struct PyPetscSN
   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("setSolution", 0);
 
   /* "PETSc/SNES.pyx":558
@@ -165514,7 +168695,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(struct PyPetscSN
  * 
  *     def getSolutionUpdate(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetSolution(__pyx_v_self->snes, __pyx_v_vec->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetSolution(__pyx_v_self->snes, __pyx_v_vec->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 558, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":557
  *         return vec
@@ -165567,9 +168748,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyP
   __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("getSolutionUpdate", 0);
 
   /* "PETSc/SNES.pyx":561
@@ -165579,7 +168757,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyP
  *         CHKERR( SNESGetSolutionUpdate(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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[36]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 561, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -165591,7 +168769,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyP
  *         PetscINCREF(vec.obj)
  *         return vec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetSolutionUpdate(__pyx_v_self->snes, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetSolutionUpdate(__pyx_v_self->snes, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 562, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":563
  *         cdef Vec vec = Vec()
@@ -165647,9 +168825,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159setKSP(PyObject *__pyx_v_sel
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_158setKSP[] = "SNES.setKSP(self, KSP ksp)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159setKSP(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);
@@ -165671,7 +168846,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159setKSP(PyObject *__pyx_v_sel
         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[36]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKSP") < 0)) __PYX_ERR(36, 568, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -165682,13 +168857,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159setKSP(PyObject *__pyx_v_sel
   }
   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[36]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setKSP", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 568, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.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[36]; __pyx_lineno = 568; __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(36, 568, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_ksp);
 
   /* function exit code */
@@ -165704,9 +168879,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(struct PyPetscSNESObj
   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);
 
   /* "PETSc/SNES.pyx":569
@@ -165716,7 +168888,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(struct PyPetscSNESObj
  * 
  *     def getKSP(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetKSP(__pyx_v_self->snes, __pyx_v_ksp->ksp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetKSP(__pyx_v_self->snes, __pyx_v_ksp->ksp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 569, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":568
  *     # --- linear solver ---
@@ -165769,9 +168941,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObj
   __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);
 
   /* "PETSc/SNES.pyx":572
@@ -165781,7 +168950,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObj
  *         CHKERR( SNESGetKSP(self.snes, &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[36]; __pyx_lineno = 572; __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(36, 572, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -165793,7 +168962,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObj
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetKSP(__pyx_v_self->snes, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetKSP(__pyx_v_self->snes, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 573, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":574
  *         cdef KSP ksp = KSP()
@@ -165851,9 +169020,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163setUseEW(PyObject *__pyx_v_s
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_v_targs = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setUseEW (wrapper)", 0);
@@ -165892,7 +169058,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163setUseEW(PyObject *__pyx_v_s
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kargs, values, used_pos_args, "setUseEW") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kargs, values, used_pos_args, "setUseEW") < 0)) __PYX_ERR(36, 577, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -165930,11 +169096,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESO
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  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("setUseEW", 0);
 
   /* "PETSc/SNES.pyx":578
@@ -165944,7 +169105,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESO
  *         CHKERR( SNESKSPSetUseEW(self.snes, bval) )
  *         if targs or kargs: self.setParamsEW(*targs, **kargs)
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 578, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":579
@@ -165954,7 +169115,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESO
  *         if targs or kargs: self.setParamsEW(*targs, **kargs)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPSetUseEW(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPSetUseEW(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 579, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":580
  *         cdef PetscBool bval = flag
@@ -165969,25 +169130,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESO
     __pyx_t_3 = __pyx_t_4;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kargs); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(36, 580, __pyx_L1_error)
   __pyx_t_3 = __pyx_t_4;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_3) {
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setParamsEW); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setParamsEW); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 580, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_Tuple(__pyx_v_targs); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_v_targs, __pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(36, 580, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_7);
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SNES.pyx":577
  *         return ksp
@@ -166003,8 +169156,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESO
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setUseEW", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -166044,9 +169195,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESO
   __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("getUseEW", 0);
 
   /* "PETSc/SNES.pyx":583
@@ -166065,7 +169213,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESO
  *         return <bint> flag
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPGetUseEW(__pyx_v_self->snes, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPGetUseEW(__pyx_v_self->snes, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 584, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":585
  *         cdef PetscBool flag = PETSC_FALSE
@@ -166075,7 +169223,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESO
  *     def setParamsEW(self, version=None,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -166119,9 +169267,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
   PyObject *__pyx_v_alpha = 0;
   PyObject *__pyx_v_alpha2 = 0;
   PyObject *__pyx_v_threshold = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setParamsEW (wrapper)", 0);
@@ -166212,7 +169357,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setParamsEW") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setParamsEW") < 0)) __PYX_ERR(36, 587, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -166237,7 +169382,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setParamsEW", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setParamsEW", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 587, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setParamsEW", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -166273,9 +169418,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   PetscInt __pyx_t_3;
   PetscReal __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setParamsEW", 0);
 
   /* "PETSc/SNES.pyx":591
@@ -166351,11 +169493,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   __pyx_t_1 = (__pyx_v_version != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_version); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_version); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(36, 598, __pyx_L1_error)
     __pyx_v_cversion = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SNES.pyx":599
  *         cdef PetscReal cthreshold = PETSC_DEFAULT
@@ -166367,11 +169507,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   __pyx_t_2 = (__pyx_v_rtol_0 != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol_0); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol_0); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 599, __pyx_L1_error)
     __pyx_v_crtol_0 = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "PETSc/SNES.pyx":600
  *         if version   is not None: cversion   = asInt(version)
@@ -166383,11 +169521,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   __pyx_t_1 = (__pyx_v_rtol_max != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol_max); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol_max); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 600, __pyx_L1_error)
     __pyx_v_crtol_max = __pyx_t_4;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
   /* "PETSc/SNES.pyx":601
  *         if rtol_0    is not None: crtol_0    = asReal(rtol_0)
@@ -166399,11 +169535,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   __pyx_t_2 = (__pyx_v_gamma != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gamma); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gamma); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 601, __pyx_L1_error)
     __pyx_v_cgamma = __pyx_t_4;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
   /* "PETSc/SNES.pyx":602
  *         if rtol_max  is not None: crtol_max  = asReal(rtol_max)
@@ -166415,11 +169549,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   __pyx_t_1 = (__pyx_v_alpha != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 602, __pyx_L1_error)
     __pyx_v_calpha = __pyx_t_4;
-    goto __pyx_L7;
   }
-  __pyx_L7:;
 
   /* "PETSc/SNES.pyx":603
  *         if gamma     is not None: cgamma     = asReal(gamma)
@@ -166431,11 +169563,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   __pyx_t_2 = (__pyx_v_alpha2 != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha2); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha2); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 603, __pyx_L1_error)
     __pyx_v_calpha2 = __pyx_t_4;
-    goto __pyx_L8;
   }
-  __pyx_L8:;
 
   /* "PETSc/SNES.pyx":604
  *         if alpha     is not None: calpha     = asReal(alpha)
@@ -166447,11 +169577,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   __pyx_t_1 = (__pyx_v_threshold != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_threshold); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_threshold); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(36, 604, __pyx_L1_error)
     __pyx_v_cthreshold = __pyx_t_4;
-    goto __pyx_L9;
   }
-  __pyx_L9:;
 
   /* "PETSc/SNES.pyx":605
  *         if alpha2    is not None: calpha2    = asReal(alpha2)
@@ -166460,7 +169588,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  *             self.snes, cversion, crtol_0, crtol_max,
  *             cgamma, calpha, calpha2, cthreshold) )
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPSetParametersEW(__pyx_v_self->snes, __pyx_v_cversion, __pyx_v_crtol_0, __pyx_v_crtol_max, __pyx_v_cgamma, __pyx_v_calpha, __pyx_v_calpha2, __pyx_v_cthreshold)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPSetParametersEW(__pyx_v_self->snes, __pyx_v_cversion, __pyx_v_crtol_0, __pyx_v_crtol_max, __pyx_v_cgamma, __pyx_v_calpha, __pyx_v_calpha2, __pyx_v_cthreshold)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(36, 605, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":587
  *         return <bint> flag
@@ -166520,9 +169648,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
   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("getParamsEW", 0);
 
   /* "PETSc/SNES.pyx":610
@@ -166571,7 +169696,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  *             self.snes, &version, &rtol_0, &rtol_max,
  *             &gamma, &alpha, &alpha2, &threshold) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPGetParametersEW(__pyx_v_self->snes, (&__pyx_v_version), (&__pyx_v_rtol_0), (&__pyx_v_rtol_max), (&__pyx_v_gamma), (&__pyx_v_alpha), (&__pyx_v_alpha2), (&__pyx_v_threshold))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPGetParametersEW(__pyx_v_self->snes, (&__pyx_v_version), (&__pyx_v_rtol_0), (&__pyx_v_rtol_max), (&__pyx_v_gamma), (&__pyx_v_alpha), (&__pyx_v_alpha2), (&__pyx_v_threshold))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 614, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":617
  *             self.snes, &version, &rtol_0, &rtol_max,
@@ -166581,11 +169706,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  *                 'rtol_max'  : toReal(rtol_max),
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_version); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_version); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_version, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_version, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/SNES.pyx":618
@@ -166595,9 +169720,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  *                 'rtol_max'  : toReal(rtol_max),
  *                 'gamma'     : toReal(gamma),
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rtol_0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rtol_0); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 618, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol_0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol_0, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/SNES.pyx":619
@@ -166607,9 +169732,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  *                 'gamma'     : toReal(gamma),
  *                 'alpha'     : toReal(alpha),
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rtol_max); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rtol_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 619, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol_max, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol_max, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/SNES.pyx":620
@@ -166619,9 +169744,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  *                 'alpha'     : toReal(alpha),
  *                 'alpha2'    : toReal(alpha2),
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gamma); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gamma); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 620, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_gamma, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_gamma, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/SNES.pyx":621
@@ -166631,9 +169756,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  *                 'alpha2'    : toReal(alpha2),
  *                 'threshold' : toReal(threshold),}
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_alpha); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_alpha); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 621, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_alpha, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_alpha, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/SNES.pyx":622
@@ -166643,9 +169768,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  *                 'threshold' : toReal(threshold),}
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_alpha2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_alpha2); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 622, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_alpha2, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_alpha2, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/SNES.pyx":623
@@ -166655,9 +169780,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  * 
  *     # --- matrix free / finite diferences ---
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_threshold); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_threshold); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 623, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_threshold, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_threshold, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -166696,9 +169821,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_171setUseMF(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_170setUseMF[] = "SNES.setUseMF(self, flag=True)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_171setUseMF(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("setUseMF (wrapper)", 0);
@@ -166723,7 +169845,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_171setUseMF(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseMF") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseMF") < 0)) __PYX_ERR(36, 627, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -166736,7 +169858,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_171setUseMF(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setUseMF", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setUseMF", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 627, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setUseMF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -166755,9 +169877,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(struct PyPetscSNESO
   __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("setUseMF", 0);
 
   /* "PETSc/SNES.pyx":628
@@ -166767,7 +169886,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(struct PyPetscSNESO
  *         CHKERR( SNESSetUseMFFD(self.snes, bval) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 628, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":629
@@ -166777,7 +169896,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(struct PyPetscSNESO
  * 
  *     def getUseMF(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUseMFFD(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUseMFFD(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 629, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":627
  *     # --- matrix free / finite diferences ---
@@ -166830,9 +169949,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(struct PyPetscSNESO
   __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("getUseMF", 0);
 
   /* "PETSc/SNES.pyx":632
@@ -166851,7 +169967,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(struct PyPetscSNESO
  *         return <bint> bval
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetUseMFFD(__pyx_v_self->snes, (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetUseMFFD(__pyx_v_self->snes, (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 633, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":634
  *         cdef PetscBool bval = PETSC_FALSE
@@ -166861,7 +169977,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(struct PyPetscSNESO
  *     def setUseFD(self, flag=True):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_bval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 634, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -166899,9 +170015,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_175setUseFD(PyObject *__pyx_v_s
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_174setUseFD[] = "SNES.setUseFD(self, flag=True)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_175setUseFD(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("setUseFD (wrapper)", 0);
@@ -166926,7 +170039,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_175setUseFD(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseFD") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseFD") < 0)) __PYX_ERR(36, 636, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -166939,7 +170052,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_175setUseFD(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setUseFD", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setUseFD", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 636, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setUseFD", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -166958,9 +170071,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(struct PyPetscSNESO
   __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("setUseFD", 0);
 
   /* "PETSc/SNES.pyx":637
@@ -166970,7 +170080,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(struct PyPetscSNESO
  *         CHKERR( SNESSetUseFDColoring(self.snes, bval) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 637, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":638
@@ -166980,7 +170090,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(struct PyPetscSNESO
  * 
  *     def getUseFD(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUseFDColoring(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUseFDColoring(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 638, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":636
  *         return <bint> bval
@@ -167033,9 +170143,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176getUseFD(struct PyPetscSNESO
   __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("getUseFD", 0);
 
   /* "PETSc/SNES.pyx":641
@@ -167054,7 +170161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176getUseFD(struct PyPetscSNESO
  *         return <bint> bval
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetUseFDColoring(__pyx_v_self->snes, (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetUseFDColoring(__pyx_v_self->snes, (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 642, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":643
  *         cdef PetscBool bval = PETSC_FALSE
@@ -167064,7 +170171,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176getUseFD(struct PyPetscSNESO
  *     # --- VI ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_bval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -167103,9 +170210,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_178setVariableBounds[] = "SNES.setV
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_xl = 0;
   struct PyPetscVecObject *__pyx_v_xu = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setVariableBounds (wrapper)", 0);
@@ -167129,11 +170233,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds(PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xu)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setVariableBounds", 1, 2, 2, 1); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setVariableBounds", 1, 2, 2, 1); __PYX_ERR(36, 647, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVariableBounds") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVariableBounds") < 0)) __PYX_ERR(36, 647, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -167146,14 +170250,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setVariableBounds", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setVariableBounds", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 647, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setVariableBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xl", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xu), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xu", 0))) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xl", 0))) __PYX_ERR(36, 647, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xu), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xu", 0))) __PYX_ERR(36, 647, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_178setVariableBounds(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_xl, __pyx_v_xu);
 
   /* function exit code */
@@ -167169,9 +170273,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_178setVariableBounds(struct PyP
   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("setVariableBounds", 0);
 
   /* "PETSc/SNES.pyx":648
@@ -167181,7 +170282,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_178setVariableBounds(struct PyP
  * 
  *     def getVIInactiveSet(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESVISetVariableBounds(__pyx_v_self->snes, __pyx_v_xl->vec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESVISetVariableBounds(__pyx_v_self->snes, __pyx_v_xl->vec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 648, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":647
  *     # --- VI ---
@@ -167234,9 +170335,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPe
   __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("getVIInactiveSet", 0);
 
   /* "PETSc/SNES.pyx":651
@@ -167246,7 +170344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPe
  *         CHKERR( SNESVIGetInactiveSet(self.snes, &inact.iset) )
  *         PetscINCREF(inact.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 651, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_inact = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -167258,7 +170356,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPe
  *         PetscINCREF(inact.obj)
  *         return inact
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESVIGetInactiveSet(__pyx_v_self->snes, (&__pyx_v_inact->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESVIGetInactiveSet(__pyx_v_self->snes, (&__pyx_v_inact->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 652, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":653
  *         cdef IS inact = IS()
@@ -167315,9 +170413,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4SNES_182createPython[] = "SNES.createPyt
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
   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("createPython (wrapper)", 0);
@@ -167349,7 +170444,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183createPython(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(36, 658, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -167364,7 +170459,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183createPython(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 658, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.createPython", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -167384,9 +170479,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
   __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("createPython", 0);
 
   /* "PETSc/SNES.pyx":659
@@ -167396,7 +170488,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
  *         cdef PetscSNES newsnes = NULL
  *         CHKERR( SNESCreate(ccomm, &newsnes) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 659, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":660
@@ -167415,7 +170507,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
  *         PetscCLEAR(self.obj); self.snes = newsnes
  *         CHKERR( SNESSetType(self.snes, SNESPYTHON) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCreate(__pyx_v_ccomm, (&__pyx_v_newsnes))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCreate(__pyx_v_ccomm, (&__pyx_v_newsnes))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 661, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":662
  *         cdef PetscSNES newsnes = NULL
@@ -167434,7 +170526,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
  *         CHKERR( SNESPythonSetContext(self.snes, <void*>context) )
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetType(__pyx_v_self->snes, SNESPYTHON)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetType(__pyx_v_self->snes, SNESPYTHON)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 663, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":664
  *         PetscCLEAR(self.obj); self.snes = newsnes
@@ -167443,7 +170535,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonSetContext(__pyx_v_self->snes, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonSetContext(__pyx_v_self->snes, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 664, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":665
  *         CHKERR( SNESSetType(self.snes, SNESPYTHON) )
@@ -167488,9 +170580,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_185setPythonContext(PyObject *_
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_184setPythonContext[] = "SNES.setPythonContext(self, context)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_185setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonContext (wrapper)", 0);
@@ -167512,7 +170601,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_185setPythonContext(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(36, 667, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -167523,7 +170612,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_185setPythonContext(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 667, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setPythonContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -167540,9 +170629,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setPythonContext(struct PyPe
   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("setPythonContext", 0);
 
   /* "PETSc/SNES.pyx":668
@@ -167552,7 +170638,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setPythonContext(struct PyPe
  * 
  *     def getPythonContext(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonSetContext(__pyx_v_self->snes, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonSetContext(__pyx_v_self->snes, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 668, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":667
  *         return self
@@ -167605,9 +170691,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
   __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("getPythonContext", 0);
 
   /* "PETSc/SNES.pyx":671
@@ -167626,7 +170709,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
  *         if context == NULL: return None
  *         else: return <object> context
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonGetContext(__pyx_v_self->snes, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonGetContext(__pyx_v_self->snes, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 672, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":673
  *         cdef void *context = NULL
@@ -167642,15 +170725,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
     __pyx_r = Py_None;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/SNES.pyx":674
+  /* "PETSc/SNES.pyx":674
  *         CHKERR( SNESPythonGetContext(self.snes, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
  * 
  *     def setPythonType(self, py_type):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(((PyObject *)__pyx_v_context));
     __pyx_r = ((PyObject *)__pyx_v_context);
@@ -167688,9 +170771,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_189setPythonType(PyObject *__py
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_188setPythonType[] = "SNES.setPythonType(self, py_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_189setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_py_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonType (wrapper)", 0);
@@ -167712,7 +170792,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_189setPythonType(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, "setPythonType") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(36, 676, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -167723,7 +170803,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_189setPythonType(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 676, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setPythonType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -167742,9 +170822,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetsc
   __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("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
@@ -167764,7 +170841,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetsc
  *         CHKERR( SNESPythonSetType(self.snes, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 678, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_py_type, __pyx_t_1);
   __pyx_t_1 = 0;
@@ -167776,7 +170853,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetsc
  * 
  *     # --- Composite ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonSetType(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonSetType(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(36, 679, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":676
  *         else: return <object> context
@@ -167813,9 +170890,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_191getCompositeSNES(PyObject *_
 static char __pyx_doc_8petsc4py_5PETSc_4SNES_190getCompositeSNES[] = "SNES.getCompositeSNES(self, n)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_191getCompositeSNES(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getCompositeSNES (wrapper)", 0);
@@ -167837,7 +170911,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_191getCompositeSNES(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCompositeSNES") < 0)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCompositeSNES") < 0)) __PYX_ERR(36, 683, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -167848,7 +170922,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_191getCompositeSNES(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getCompositeSNES", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[36]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getCompositeSNES", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 683, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getCompositeSNES", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -167869,9 +170943,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
   PyObject *__pyx_t_1 = NULL;
   PetscInt __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getCompositeSNES", 0);
 
   /* "PETSc/SNES.pyx":685
@@ -167881,7 +170952,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
  *         cn = asInt(n)
  *         CHKERR( SNESCompositeGetSNES(self.snes, cn, &snes.snes) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 685, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -167893,7 +170964,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
  *         CHKERR( SNESCompositeGetSNES(self.snes, cn, &snes.snes) )
  *         PetscINCREF(snes.obj)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(36, 686, __pyx_L1_error)
   __pyx_v_cn = __pyx_t_2;
 
   /* "PETSc/SNES.pyx":687
@@ -167903,7 +170974,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
  *         PetscINCREF(snes.obj)
  *         return snes
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCompositeGetSNES(__pyx_v_self->snes, __pyx_v_cn, (&__pyx_v_snes->snes))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCompositeGetSNES(__pyx_v_self->snes, __pyx_v_cn, (&__pyx_v_snes->snes))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(36, 687, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":688
  *         cn = asInt(n)
@@ -167977,9 +171048,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct Py
   __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("getCompositeNumber", 0);
 
   /* "PETSc/SNES.pyx":692
@@ -167998,7 +171066,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct Py
  *         return toInt(cn)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCompositeGetNumber(__pyx_v_self->snes, (&__pyx_v_cn))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCompositeGetNumber(__pyx_v_self->snes, (&__pyx_v_cn))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(36, 693, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":694
  *         cdef PetscInt cn = 0
@@ -168008,7 +171076,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct Py
  *     # --- application context ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cn); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cn); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 694, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -168060,9 +171128,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6appctx___get__(struct PyPetscS
   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);
 
   /* "PETSc/SNES.pyx":700
@@ -168073,7 +171138,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6appctx___get__(struct PyPetscS
  *             self.setAppCtx(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getAppCtx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getAppCtx); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 700, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168086,10 +171151,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6appctx___get__(struct PyPetscS
     }
   }
   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[36]; __pyx_lineno = 700; __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(36, 700, __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[36]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 700, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -168146,9 +171211,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6appctx_2__set__(struct PyPetscSNESOb
   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);
 
   /* "PETSc/SNES.pyx":702
@@ -168158,7 +171220,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6appctx_2__set__(struct PyPetscSNESOb
  * 
  *     # --- discretization space ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setAppCtx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setAppCtx); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 702, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168171,16 +171233,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6appctx_2__set__(struct PyPetscSNESOb
     }
   }
   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[36]; __pyx_lineno = 702; __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(36, 702, __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[36]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 702, __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[36]; __pyx_lineno = 702; __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(36, 702, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -168237,9 +171299,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2dm___get__(struct PyPetscSNESO
   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);
 
   /* "PETSc/SNES.pyx":708
@@ -168250,7 +171309,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2dm___get__(struct PyPetscSNESO
  *             self.setDM(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDM); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDM); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 708, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168263,10 +171322,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2dm___get__(struct PyPetscSNESO
     }
   }
   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[36]; __pyx_lineno = 708; __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(36, 708, __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[36]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 708, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -168323,9 +171382,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_2dm_2__set__(struct PyPetscSNESObject
   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);
 
   /* "PETSc/SNES.pyx":710
@@ -168335,7 +171391,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_2dm_2__set__(struct PyPetscSNESObject
  * 
  *     # --- nonlinear preconditioner ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDM); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDM); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 710, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168348,16 +171404,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_2dm_2__set__(struct PyPetscSNESObject
     }
   }
   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[36]; __pyx_lineno = 710; __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(36, 710, __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[36]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 710, __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[36]; __pyx_lineno = 710; __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(36, 710, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -168414,9 +171470,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3npc___get__(struct PyPetscSNES
   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);
 
   /* "PETSc/SNES.pyx":716
@@ -168427,7 +171480,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3npc___get__(struct PyPetscSNES
  *             self.setNPC(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getNPC); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getNPC); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 716, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168440,10 +171493,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3npc___get__(struct PyPetscSNES
     }
   }
   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[36]; __pyx_lineno = 716; __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(36, 716, __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[36]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 716, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -168500,9 +171553,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3npc_2__set__(struct PyPetscSNESObjec
   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);
 
   /* "PETSc/SNES.pyx":718
@@ -168512,7 +171562,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3npc_2__set__(struct PyPetscSNESObjec
  * 
  *     # --- vectors ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setNPC); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setNPC); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 718, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168525,16 +171575,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3npc_2__set__(struct PyPetscSNESObjec
     }
   }
   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[36]; __pyx_lineno = 718; __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(36, 718, __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[36]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 718, __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[36]; __pyx_lineno = 718; __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(36, 718, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -168591,9 +171641,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_sol___get__(struct PyPetsc
   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);
 
   /* "PETSc/SNES.pyx":724
@@ -168604,7 +171651,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_sol___get__(struct PyPetsc
  *     property vec_upd:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolution); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 724, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168617,10 +171664,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_sol___get__(struct PyPetsc
     }
   }
   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[36]; __pyx_lineno = 724; __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(36, 724, __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[36]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 724, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -168676,9 +171723,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_upd___get__(struct PyPetsc
   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);
 
   /* "PETSc/SNES.pyx":728
@@ -168689,7 +171733,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_upd___get__(struct PyPetsc
  *     property vec_rhs:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolutionUpdate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolutionUpdate); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 728, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168702,10 +171746,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_upd___get__(struct PyPetsc
     }
   }
   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[36]; __pyx_lineno = 728; __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(36, 728, __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[36]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 728, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -168761,9 +171805,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_rhs___get__(struct PyPetsc
   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);
 
   /* "PETSc/SNES.pyx":732
@@ -168774,7 +171815,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_rhs___get__(struct PyPetsc
  *     # --- linear solver ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRhs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRhs); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 732, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168787,10 +171828,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_rhs___get__(struct PyPetsc
     }
   }
   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[36]; __pyx_lineno = 732; __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(36, 732, __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[36]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 732, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -168846,9 +171887,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3ksp___get__(struct PyPetscSNES
   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);
 
   /* "PETSc/SNES.pyx":738
@@ -168859,7 +171897,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3ksp___get__(struct PyPetscSNES
  *             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[36]; __pyx_lineno = 738; __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(36, 738, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168872,10 +171910,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3ksp___get__(struct PyPetscSNES
     }
   }
   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[36]; __pyx_lineno = 738; __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(36, 738, __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[36]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 738, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -168932,9 +171970,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3ksp_2__set__(struct PyPetscSNESObjec
   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);
 
   /* "PETSc/SNES.pyx":740
@@ -168944,7 +171979,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3ksp_2__set__(struct PyPetscSNESObjec
  * 
  *     property use_ew:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setKSP); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 740; __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(36, 740, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168957,16 +171992,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3ksp_2__set__(struct PyPetscSNESObjec
     }
   }
   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[36]; __pyx_lineno = 740; __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(36, 740, __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[36]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 740, __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[36]; __pyx_lineno = 740; __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(36, 740, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -169023,9 +172058,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew___get__(struct PyPetscS
   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);
 
   /* "PETSc/SNES.pyx":744
@@ -169036,7 +172068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew___get__(struct PyPetscS
  *             self.setUseEW(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getUseEW); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getUseEW); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 744, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -169049,10 +172081,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew___get__(struct PyPetscS
     }
   }
   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[36]; __pyx_lineno = 744; __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(36, 744, __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[36]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 744, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -169109,9 +172141,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew_2__set__(struct PyPetscSNESOb
   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);
 
   /* "PETSc/SNES.pyx":746
@@ -169121,7 +172150,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew_2__set__(struct PyPetscSNESOb
  * 
  *     # --- tolerances ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseEW); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseEW); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 746, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -169134,16 +172163,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew_2__set__(struct PyPetscSNESOb
     }
   }
   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[36]; __pyx_lineno = 746; __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(36, 746, __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[36]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 746, __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[36]; __pyx_lineno = 746; __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(36, 746, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -169200,9 +172229,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4rtol___get__(struct PyPetscSNE
   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);
 
   /* "PETSc/SNES.pyx":752
@@ -169213,7 +172239,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4rtol___get__(struct PyPetscSNE
  *             self.setTolerances(rtol=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[36]; __pyx_lineno = 752; __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(36, 752, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -169226,14 +172252,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4rtol___get__(struct PyPetscSNE
     }
   }
   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[36]; __pyx_lineno = 752; __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(36, 752, __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[36]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 752, __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[36]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __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(36, 752, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -169288,9 +172314,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4rtol_2__set__(struct PyPetscSNESObje
   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);
 
   /* "PETSc/SNES.pyx":754
@@ -169300,12 +172323,12 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4rtol_2__set__(struct PyPetscSNESObje
  * 
  *     property atol:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 754; __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(36, 754, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 754, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 754; __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[36]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) __PYX_ERR(36, 754, __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(36, 754, __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;
@@ -169360,9 +172383,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4atol___get__(struct PyPetscSNE
   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);
 
   /* "PETSc/SNES.pyx":758
@@ -169373,7 +172393,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4atol___get__(struct PyPetscSNE
  *             self.setTolerances(atol=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[36]; __pyx_lineno = 758; __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(36, 758, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -169386,14 +172406,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4atol___get__(struct PyPetscSNE
     }
   }
   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[36]; __pyx_lineno = 758; __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(36, 758, __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[36]; __pyx_lineno = 758; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 758, __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[36]; __pyx_lineno = 758; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __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(36, 758, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -169448,9 +172468,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4atol_2__set__(struct PyPetscSNESObje
   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);
 
   /* "PETSc/SNES.pyx":760
@@ -169460,12 +172477,12 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4atol_2__set__(struct PyPetscSNESObje
  * 
  *     property stol:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 760; __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(36, 760, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 760, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 760; __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[36]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) __PYX_ERR(36, 760, __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(36, 760, __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;
@@ -169520,9 +172537,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4stol___get__(struct PyPetscSNE
   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);
 
   /* "PETSc/SNES.pyx":764
@@ -169533,7 +172547,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4stol___get__(struct PyPetscSNE
  *             self.setTolerances(stol=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[36]; __pyx_lineno = 764; __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(36, 764, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -169546,14 +172560,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4stol___get__(struct PyPetscSNE
     }
   }
   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[36]; __pyx_lineno = 764; __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(36, 764, __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[36]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 764, __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, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 764, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -169608,9 +172622,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4stol_2__set__(struct PyPetscSNESObje
   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);
 
   /* "PETSc/SNES.pyx":766
@@ -169620,12 +172631,12 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4stol_2__set__(struct PyPetscSNESObje
  * 
  *     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[36]; __pyx_lineno = 766; __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(36, 766, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 766, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 766; __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[36]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stol, __pyx_v_value) < 0) __PYX_ERR(36, 766, __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(36, 766, __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;
@@ -169680,9 +172691,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6max_it___get__(struct PyPetscS
   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);
 
   /* "PETSc/SNES.pyx":770
@@ -169693,7 +172701,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6max_it___get__(struct PyPetscS
  *             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[36]; __pyx_lineno = 770; __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(36, 770, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -169706,14 +172714,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6max_it___get__(struct PyPetscS
     }
   }
   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[36]; __pyx_lineno = 770; __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(36, 770, __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[36]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 770, __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, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 770, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -169768,9 +172776,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6max_it_2__set__(struct PyPetscSNESOb
   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);
 
   /* "PETSc/SNES.pyx":772
@@ -169780,12 +172785,12 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6max_it_2__set__(struct PyPetscSNESOb
  * 
  *     # --- more tolerances ---
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 772; __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(36, 772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 772, __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[36]; __pyx_lineno = 772; __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[36]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) __PYX_ERR(36, 772, __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(36, 772, __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;
@@ -169840,9 +172845,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPet
   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);
 
   /* "PETSc/SNES.pyx":778
@@ -169853,7 +172855,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPet
  *             self.setMaxFunctionEvaluations(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getMaxFunctionEvaluations); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getMaxFunctionEvaluations); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 778, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -169866,10 +172868,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPet
     }
   }
   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[36]; __pyx_lineno = 778; __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(36, 778, __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[36]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 778, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -169926,9 +172928,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs_2__set__(struct PyPetscSNE
   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);
 
   /* "PETSc/SNES.pyx":780
@@ -169938,7 +172937,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs_2__set__(struct PyPetscSNE
  * 
  *     # --- iteration ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMaxFunctionEvaluations); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMaxFunctionEvaluations); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 780, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -169951,16 +172950,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs_2__set__(struct PyPetscSNE
     }
   }
   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[36]; __pyx_lineno = 780; __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(36, 780, __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[36]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 780, __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[36]; __pyx_lineno = 780; __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(36, 780, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -170017,9 +173016,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3its___get__(struct PyPetscSNES
   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);
 
   /* "PETSc/SNES.pyx":786
@@ -170030,7 +173026,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3its___get__(struct PyPetscSNES
  *             self.setIterationNumber(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIterationNumber); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIterationNumber); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 786, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170043,10 +173039,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3its___get__(struct PyPetscSNES
     }
   }
   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[36]; __pyx_lineno = 786; __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(36, 786, __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[36]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 786, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -170103,9 +173099,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3its_2__set__(struct PyPetscSNESObjec
   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);
 
   /* "PETSc/SNES.pyx":788
@@ -170115,7 +173108,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3its_2__set__(struct PyPetscSNESObjec
  * 
  *     property history:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setIterationNumber); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setIterationNumber); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 788, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170128,16 +173121,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3its_2__set__(struct PyPetscSNESObjec
     }
   }
   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[36]; __pyx_lineno = 788; __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(36, 788, __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[36]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 788, __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[36]; __pyx_lineno = 788; __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(36, 788, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -170194,9 +173187,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7history___get__(struct PyPetsc
   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);
 
   /* "PETSc/SNES.pyx":792
@@ -170207,7 +173197,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7history___get__(struct PyPetsc
  *     # --- convergence ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergenceHistory); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergenceHistory); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170220,10 +173210,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7history___get__(struct PyPetsc
     }
   }
   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[36]; __pyx_lineno = 792; __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(36, 792, __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[36]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 792, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -170279,9 +173269,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6reason___get__(struct PyPetscS
   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);
 
   /* "PETSc/SNES.pyx":798
@@ -170292,7 +173279,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6reason___get__(struct PyPetscS
  *             self.setConvergedReason(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170305,10 +173292,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6reason___get__(struct PyPetscS
     }
   }
   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[36]; __pyx_lineno = 798; __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(36, 798, __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[36]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 798, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -170365,9 +173352,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6reason_2__set__(struct PyPetscSNESOb
   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);
 
   /* "PETSc/SNES.pyx":800
@@ -170377,7 +173361,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6reason_2__set__(struct PyPetscSNESOb
  * 
  *     property iterating:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170390,16 +173374,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6reason_2__set__(struct PyPetscSNESOb
     }
   }
   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[36]; __pyx_lineno = 800; __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(36, 800, __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[36]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 800, __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[36]; __pyx_lineno = 800; __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(36, 800, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -170455,9 +173439,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9iterating___get__(struct PyPet
   __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("__get__", 0);
 
   /* "PETSc/SNES.pyx":804
@@ -170468,9 +173449,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9iterating___get__(struct PyPet
  *     property converged:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 804, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 804, __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;
@@ -170522,9 +173504,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9converged___get__(struct PyPet
   __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("__get__", 0);
 
   /* "PETSc/SNES.pyx":808
@@ -170535,9 +173514,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9converged___get__(struct PyPet
  *     property diverged:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 808, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -170589,9 +173568,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8diverged___get__(struct PyPets
   __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("__get__", 0);
 
   /* "PETSc/SNES.pyx":812
@@ -170602,9 +173578,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8diverged___get__(struct PyPets
  *     # --- matrix free / finite diferences ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 812, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 812, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -170657,9 +173633,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf___get__(struct PyPetscS
   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);
 
   /* "PETSc/SNES.pyx":818
@@ -170670,7 +173643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf___get__(struct PyPetscS
  *             self.setUseMF(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getUseMF); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getUseMF); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 818, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170683,10 +173656,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf___get__(struct PyPetscS
     }
   }
   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[36]; __pyx_lineno = 818; __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(36, 818, __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[36]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 818, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -170743,9 +173716,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf_2__set__(struct PyPetscSNESOb
   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);
 
   /* "PETSc/SNES.pyx":820
@@ -170755,7 +173725,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf_2__set__(struct PyPetscSNESOb
  * 
  *     property use_fd:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseMF); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseMF); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 820, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170768,16 +173738,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf_2__set__(struct PyPetscSNESOb
     }
   }
   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[36]; __pyx_lineno = 820; __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(36, 820, __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[36]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 820, __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[36]; __pyx_lineno = 820; __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(36, 820, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -170834,9 +173804,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd___get__(struct PyPetscS
   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);
 
   /* "PETSc/SNES.pyx":824
@@ -170847,7 +173814,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd___get__(struct PyPetscS
  *             self.setUseFD(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getUseFD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getUseFD); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 824, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170860,10 +173827,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd___get__(struct PyPetscS
     }
   }
   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[36]; __pyx_lineno = 824; __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(36, 824, __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[36]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 824, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -170920,9 +173887,6 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd_2__set__(struct PyPetscSNESOb
   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);
 
   /* "PETSc/SNES.pyx":826
@@ -170932,7 +173896,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd_2__set__(struct PyPetscSNESOb
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseFD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseFD); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 826, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -170945,16 +173909,16 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd_2__set__(struct PyPetscSNESOb
     }
   }
   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[36]; __pyx_lineno = 826; __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(36, 826, __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[36]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 826, __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[36]; __pyx_lineno = 826; __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(36, 826, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -170984,7 +173948,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd_2__set__(struct PyPetscSNESOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":72
+/* "PETSc/TS.pyx":80
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -171013,7 +173977,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/TS.pyx":73
+  /* "PETSc/TS.pyx":81
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.ts             # <<<<<<<<<<<<<<
@@ -171022,7 +173986,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->ts));
 
-  /* "PETSc/TS.pyx":74
+  /* "PETSc/TS.pyx":82
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.ts
  *         self.ts = NULL             # <<<<<<<<<<<<<<
@@ -171031,7 +173995,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx
  */
   __pyx_v_self->ts = NULL;
 
-  /* "PETSc/TS.pyx":72
+  /* "PETSc/TS.pyx":80
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -171045,7 +174009,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":78
+/* "PETSc/TS.pyx":86
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -171058,9 +174022,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_3view(PyObject *__pyx_v_self, PyO
 static char __pyx_doc_8petsc4py_5PETSc_2TS_2view[] = "TS.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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);
@@ -171085,7 +174046,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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[37]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(37, 86, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -171098,13 +174059,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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[37]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 86, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.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[37]; __pyx_lineno = 78; __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(37, 86, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_2view(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -171124,12 +174085,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__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);
 
-  /* "PETSc/TS.pyx":79
+  /* "PETSc/TS.pyx":87
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL             # <<<<<<<<<<<<<<
@@ -171138,7 +174096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__p
  */
   __pyx_v_cviewer = NULL;
 
-  /* "PETSc/TS.pyx":80
+  /* "PETSc/TS.pyx":88
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr             # <<<<<<<<<<<<<<
@@ -171150,20 +174108,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__p
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_cviewer = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":81
+  /* "PETSc/TS.pyx":89
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr
  *         CHKERR( TSView(self.ts, cviewer) )             # <<<<<<<<<<<<<<
  * 
- *     def destroy(self):
+ *     def load(self, Viewer viewer not None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSView(__pyx_v_self->ts, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSView(__pyx_v_self->ts, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(37, 89, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":78
+  /* "PETSc/TS.pyx":86
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -171183,50 +174139,145 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":83
+/* "PETSc/TS.pyx":91
+ *         CHKERR( TSView(self.ts, cviewer) )
+ * 
+ *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSLoad(self.ts, viewer.vwr) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_5load(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_4load[] = "TS.load(self, Viewer viewer)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_5load(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("load (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,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_viewer)) != 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, "load") < 0)) __PYX_ERR(37, 91, __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_viewer = ((struct PyPetscViewerObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 91, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.load", __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, 0, "viewer", 0))) __PYX_ERR(37, 91, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_4load(((struct PyPetscTSObject *)__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_8petsc4py_5PETSc_2TS_4load(struct PyPetscTSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("load", 0);
+
+  /* "PETSc/TS.pyx":92
+ * 
+ *     def load(self, Viewer viewer not None):
+ *         CHKERR( TSLoad(self.ts, viewer.vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def destroy(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSLoad(__pyx_v_self->ts, __pyx_v_viewer->vwr)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 92, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":91
  *         CHKERR( TSView(self.ts, cviewer) )
  * 
+ *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSLoad(self.ts, viewer.vwr) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.load", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":94
+ *         CHKERR( TSLoad(self.ts, viewer.vwr) )
+ * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
  *         CHKERR( TSDestroy(&self.ts) )
  *         return self
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_4destroy[] = "TS.destroy(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_7destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_6destroy[] = "TS.destroy(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_7destroy(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_8petsc4py_5PETSc_2TS_4destroy(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_6destroy(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4destroy(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6destroy(struct PyPetscTSObject *__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);
 
-  /* "PETSc/TS.pyx":84
+  /* "PETSc/TS.pyx":95
  * 
  *     def destroy(self):
  *         CHKERR( TSDestroy(&self.ts) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSDestroy((&__pyx_v_self->ts))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSDestroy((&__pyx_v_self->ts))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 95, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":85
+  /* "PETSc/TS.pyx":96
  *     def destroy(self):
  *         CHKERR( TSDestroy(&self.ts) )
  *         return self             # <<<<<<<<<<<<<<
@@ -171238,8 +174289,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4destroy(struct PyPetscTSObject *
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":83
- *         CHKERR( TSView(self.ts, cviewer) )
+  /* "PETSc/TS.pyx":94
+ *         CHKERR( TSLoad(self.ts, viewer.vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
  *         CHKERR( TSDestroy(&self.ts) )
@@ -171256,7 +174307,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4destroy(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":87
+/* "PETSc/TS.pyx":98
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -171265,13 +174316,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4destroy(struct PyPetscTSObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_6create[] = "TS.create(self, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_8create[] = "TS.create(self, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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);
@@ -171296,7 +174344,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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[37]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(37, 98, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -171309,42 +174357,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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[37]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 98, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_6create(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_8create(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6create(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8create(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   TS __pyx_v_newts;
   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);
 
-  /* "PETSc/TS.pyx":88
+  /* "PETSc/TS.pyx":99
  * 
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscTS newts = NULL
  *         CHKERR( TSCreate(ccomm, &newts) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 99, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":89
+  /* "PETSc/TS.pyx":100
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscTS newts = NULL             # <<<<<<<<<<<<<<
@@ -171353,16 +174398,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6create(struct PyPetscTSObject *_
  */
   __pyx_v_newts = NULL;
 
-  /* "PETSc/TS.pyx":90
+  /* "PETSc/TS.pyx":101
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscTS newts = NULL
  *         CHKERR( TSCreate(ccomm, &newts) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.ts = newts
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSCreate(__pyx_v_ccomm, (&__pyx_v_newts))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSCreate(__pyx_v_ccomm, (&__pyx_v_newts))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 101, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":91
+  /* "PETSc/TS.pyx":102
  *         cdef PetscTS newts = NULL
  *         CHKERR( TSCreate(ccomm, &newts) )
  *         PetscCLEAR(self.obj); self.ts = newts             # <<<<<<<<<<<<<<
@@ -171372,19 +174417,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6create(struct PyPetscTSObject *_
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->ts = __pyx_v_newts;
 
-  /* "PETSc/TS.pyx":92
+  /* "PETSc/TS.pyx":103
  *         CHKERR( TSCreate(ccomm, &newts) )
  *         PetscCLEAR(self.obj); self.ts = newts
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setType(self, ts_type):
+ *     def clone(self):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":87
+  /* "PETSc/TS.pyx":98
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -171402,22 +174447,105 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6create(struct PyPetscTSObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":94
+/* "PETSc/TS.pyx":105
+ *         return self
+ * 
+ *     def clone(self):             # <<<<<<<<<<<<<<
+ *         cdef TS ts = TS()
+ *         CHKERR( TSClone(self.ts, &ts.ts) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_11clone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_10clone[] = "TS.clone(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_11clone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("clone (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("clone", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "clone", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_10clone(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10clone(struct PyPetscTSObject *__pyx_v_self) {
+  struct PyPetscTSObject *__pyx_v_ts = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("clone", 0);
+
+  /* "PETSc/TS.pyx":106
+ * 
+ *     def clone(self):
+ *         cdef TS ts = TS()             # <<<<<<<<<<<<<<
+ *         CHKERR( TSClone(self.ts, &ts.ts) )
+ *         return ts
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ts = ((struct PyPetscTSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":107
+ *     def clone(self):
+ *         cdef TS ts = TS()
+ *         CHKERR( TSClone(self.ts, &ts.ts) )             # <<<<<<<<<<<<<<
+ *         return ts
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSClone(__pyx_v_self->ts, (&__pyx_v_ts->ts))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 107, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":108
+ *         cdef TS ts = TS()
+ *         CHKERR( TSClone(self.ts, &ts.ts) )
+ *         return ts             # <<<<<<<<<<<<<<
+ * 
+ *     def setType(self, ts_type):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_ts));
+  __pyx_r = ((PyObject *)__pyx_v_ts);
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":105
  *         return self
  * 
+ *     def clone(self):             # <<<<<<<<<<<<<<
+ *         cdef TS ts = TS()
+ *         CHKERR( TSClone(self.ts, &ts.ts) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.clone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ts);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":110
+ *         return ts
+ * 
  *     def setType(self, ts_type):             # <<<<<<<<<<<<<<
  *         cdef const_char *cval = NULL
  *         ts_type = str2bytes(ts_type, &cval)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_8setType[] = "TS.setType(self, ts_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_12setType[] = "TS.setType(self, ts_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ts_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);
@@ -171439,7 +174567,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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[37]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(37, 110, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -171450,32 +174578,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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[37]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 110, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_8setType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_ts_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_12setType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_ts_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8setType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ts_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ts_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_ts_type);
 
-  /* "PETSc/TS.pyx":95
+  /* "PETSc/TS.pyx":111
  * 
  *     def setType(self, ts_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -171484,29 +174609,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8setType(struct PyPetscTSObject *
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":96
+  /* "PETSc/TS.pyx":112
  *     def setType(self, ts_type):
  *         cdef const_char *cval = NULL
  *         ts_type = str2bytes(ts_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetType(self.ts, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ts_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ts_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_ts_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":97
+  /* "PETSc/TS.pyx":113
  *         cdef const_char *cval = NULL
  *         ts_type = str2bytes(ts_type, &cval)
  *         CHKERR( TSSetType(self.ts, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetType(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetType(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 113, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":94
- *         return self
+  /* "PETSc/TS.pyx":110
+ *         return ts
  * 
  *     def setType(self, ts_type):             # <<<<<<<<<<<<<<
  *         cdef const_char *cval = NULL
@@ -171527,7 +174652,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8setType(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":99
+/* "PETSc/TS.pyx":115
  *         CHKERR( TSSetType(self.ts, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -171536,34 +174661,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8setType(struct PyPetscTSObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_10getType[] = "TS.getType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_15getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_14getType[] = "TS.getType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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_8petsc4py_5PETSc_2TS_10getType(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_14getType(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10getType(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getType(struct PyPetscTSObject *__pyx_v_self) {
   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("getType", 0);
 
-  /* "PETSc/TS.pyx":100
+  /* "PETSc/TS.pyx":116
  * 
  *     def getType(self):
  *         cdef PetscTSType cval = NULL             # <<<<<<<<<<<<<<
@@ -171572,16 +174694,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10getType(struct PyPetscTSObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":101
+  /* "PETSc/TS.pyx":117
  *     def getType(self):
  *         cdef PetscTSType cval = NULL
  *         CHKERR( TSGetType(self.ts, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetType(__pyx_v_self->ts, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetType(__pyx_v_self->ts, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 117, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":102
+  /* "PETSc/TS.pyx":118
  *         cdef PetscTSType cval = NULL
  *         CHKERR( TSGetType(self.ts, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -171589,13 +174711,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10getType(struct PyPetscTSObject
  *     def setProblemType(self, ptype):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":99
+  /* "PETSc/TS.pyx":115
  *         CHKERR( TSSetType(self.ts, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -171614,7 +174736,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10getType(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":104
+/* "PETSc/TS.pyx":120
  *         return bytes2str(cval)
  * 
  *     def setProblemType(self, ptype):             # <<<<<<<<<<<<<<
@@ -171623,13 +174745,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10getType(struct PyPetscTSObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_12setProblemType[] = "TS.setProblemType(self, ptype)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_16setProblemType[] = "TS.setProblemType(self, ptype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ptype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setProblemType (wrapper)", 0);
@@ -171651,7 +174770,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setProblemType(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, "setProblemType") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setProblemType") < 0)) __PYX_ERR(37, 120, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -171662,40 +174781,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setProblemType(PyObject *__pyx_
   }
   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[37]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setProblemType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 120, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_12setProblemType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_ptype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_16setProblemType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_ptype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setProblemType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ptype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setProblemType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ptype) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   TSProblemType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setProblemType", 0);
 
-  /* "PETSc/TS.pyx":105
+  /* "PETSc/TS.pyx":121
  * 
  *     def setProblemType(self, ptype):
  *         CHKERR( TSSetProblemType(self.ts, ptype) )             # <<<<<<<<<<<<<<
  * 
  *     def getProblemType(self):
  */
-  __pyx_t_1 = ((TSProblemType)PyInt_AsLong(__pyx_v_ptype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetProblemType(__pyx_v_self->ts, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((TSProblemType)__Pyx_PyInt_As_TSProblemType(__pyx_v_ptype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 121, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetProblemType(__pyx_v_self->ts, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 121, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":104
+  /* "PETSc/TS.pyx":120
  *         return bytes2str(cval)
  * 
  *     def setProblemType(self, ptype):             # <<<<<<<<<<<<<<
@@ -171715,7 +174831,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setProblemType(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":107
+/* "PETSc/TS.pyx":123
  *         CHKERR( TSSetProblemType(self.ts, ptype) )
  * 
  *     def getProblemType(self):             # <<<<<<<<<<<<<<
@@ -171724,34 +174840,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setProblemType(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_15getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_14getProblemType[] = "TS.getProblemType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_15getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_19getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_18getProblemType[] = "TS.getProblemType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_19getProblemType(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_8petsc4py_5PETSc_2TS_14getProblemType(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getProblemType(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(struct PyPetscTSObject *__pyx_v_self) {
   TSProblemType __pyx_v_ptype;
   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);
 
-  /* "PETSc/TS.pyx":108
+  /* "PETSc/TS.pyx":124
  * 
  *     def getProblemType(self):
  *         cdef PetscTSProblemType ptype = TS_NONLINEAR             # <<<<<<<<<<<<<<
@@ -171760,16 +174873,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getProblemType(struct PyPetscTS
  */
   __pyx_v_ptype = TS_NONLINEAR;
 
-  /* "PETSc/TS.pyx":109
+  /* "PETSc/TS.pyx":125
  *     def getProblemType(self):
  *         cdef PetscTSProblemType ptype = TS_NONLINEAR
  *         CHKERR( TSGetProblemType(self.ts, &ptype) )             # <<<<<<<<<<<<<<
  *         return ptype
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetProblemType(__pyx_v_self->ts, (&__pyx_v_ptype))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetProblemType(__pyx_v_self->ts, (&__pyx_v_ptype))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 125, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":110
+  /* "PETSc/TS.pyx":126
  *         cdef PetscTSProblemType ptype = TS_NONLINEAR
  *         CHKERR( TSGetProblemType(self.ts, &ptype) )
  *         return ptype             # <<<<<<<<<<<<<<
@@ -171777,13 +174890,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getProblemType(struct PyPetscTS
  *     def setEquationType(self, eqtype):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_ptype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_TSProblemType(__pyx_v_ptype); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":107
+  /* "PETSc/TS.pyx":123
  *         CHKERR( TSSetProblemType(self.ts, ptype) )
  * 
  *     def getProblemType(self):             # <<<<<<<<<<<<<<
@@ -171802,7 +174915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getProblemType(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":112
+/* "PETSc/TS.pyx":128
  *         return ptype
  * 
  *     def setEquationType(self, eqtype):             # <<<<<<<<<<<<<<
@@ -171811,13 +174924,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getProblemType(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_16setEquationType[] = "TS.setEquationType(self, eqtype)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_20setEquationType[] = "TS.setEquationType(self, eqtype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_eqtype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setEquationType (wrapper)", 0);
@@ -171839,7 +174949,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setEquationType(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, "setEquationType") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setEquationType") < 0)) __PYX_ERR(37, 128, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -171850,40 +174960,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setEquationType(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setEquationType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setEquationType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 128, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setEquationType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_16setEquationType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_eqtype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_20setEquationType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_eqtype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setEquationType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_eqtype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setEquationType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_eqtype) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   TSEquationType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setEquationType", 0);
 
-  /* "PETSc/TS.pyx":113
+  /* "PETSc/TS.pyx":129
  * 
  *     def setEquationType(self, eqtype):
  *         CHKERR( TSSetEquationType(self.ts, eqtype) )             # <<<<<<<<<<<<<<
  * 
  *     def getEquationType(self):
  */
-  __pyx_t_1 = ((TSEquationType)PyInt_AsLong(__pyx_v_eqtype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetEquationType(__pyx_v_self->ts, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((TSEquationType)__Pyx_PyInt_As_TSEquationType(__pyx_v_eqtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 129, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetEquationType(__pyx_v_self->ts, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 129, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":112
+  /* "PETSc/TS.pyx":128
  *         return ptype
  * 
  *     def setEquationType(self, eqtype):             # <<<<<<<<<<<<<<
@@ -171903,7 +175010,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setEquationType(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":115
+/* "PETSc/TS.pyx":131
  *         CHKERR( TSSetEquationType(self.ts, eqtype) )
  * 
  *     def getEquationType(self):             # <<<<<<<<<<<<<<
@@ -171912,34 +175019,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setEquationType(struct PyPetscT
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_19getEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_18getEquationType[] = "TS.getEquationType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_19getEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_23getEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_22getEquationType[] = "TS.getEquationType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_23getEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getEquationType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getEquationType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getEquationType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_18getEquationType(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getEquationType(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(struct PyPetscTSObject *__pyx_v_self) {
   TSEquationType __pyx_v_eqtype;
   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("getEquationType", 0);
 
-  /* "PETSc/TS.pyx":116
+  /* "PETSc/TS.pyx":132
  * 
  *     def getEquationType(self):
  *         cdef PetscTSEquationType eqtype = TS_EQ_UNSPECIFIED             # <<<<<<<<<<<<<<
@@ -171948,16 +175052,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getEquationType(struct PyPetscT
  */
   __pyx_v_eqtype = TS_EQ_UNSPECIFIED;
 
-  /* "PETSc/TS.pyx":117
+  /* "PETSc/TS.pyx":133
  *     def getEquationType(self):
  *         cdef PetscTSEquationType eqtype = TS_EQ_UNSPECIFIED
  *         CHKERR( TSGetEquationType(self.ts, &eqtype) )             # <<<<<<<<<<<<<<
  *         return eqtype
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetEquationType(__pyx_v_self->ts, (&__pyx_v_eqtype))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetEquationType(__pyx_v_self->ts, (&__pyx_v_eqtype))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 133, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":118
+  /* "PETSc/TS.pyx":134
  *         cdef PetscTSEquationType eqtype = TS_EQ_UNSPECIFIED
  *         CHKERR( TSGetEquationType(self.ts, &eqtype) )
  *         return eqtype             # <<<<<<<<<<<<<<
@@ -171965,13 +175069,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getEquationType(struct PyPetscT
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_eqtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_TSEquationType(__pyx_v_eqtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":115
+  /* "PETSc/TS.pyx":131
  *         CHKERR( TSSetEquationType(self.ts, eqtype) )
  * 
  *     def getEquationType(self):             # <<<<<<<<<<<<<<
@@ -171990,7 +175094,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getEquationType(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":120
+/* "PETSc/TS.pyx":136
  *         return eqtype
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -171999,13 +175103,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getEquationType(struct PyPetscT
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_20setOptionsPrefix[] = "TS.setOptionsPrefix(self, prefix)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_24setOptionsPrefix[] = "TS.setOptionsPrefix(self, prefix)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setOptionsPrefix(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);
@@ -172027,7 +175128,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setOptionsPrefix(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[37]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(37, 136, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -172038,32 +175139,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setOptionsPrefix(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[37]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 136, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_20setOptionsPrefix(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_24setOptionsPrefix(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setOptionsPrefix(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setOptionsPrefix(struct PyPetscTSObject *__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);
 
-  /* "PETSc/TS.pyx":121
+  /* "PETSc/TS.pyx":137
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -172072,28 +175170,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setOptionsPrefix(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":122
+  /* "PETSc/TS.pyx":138
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetOptionsPrefix(self.ts, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 138, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":123
+  /* "PETSc/TS.pyx":139
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
  *         CHKERR( TSSetOptionsPrefix(self.ts, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetOptionsPrefix(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetOptionsPrefix(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 139, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":120
+  /* "PETSc/TS.pyx":136
  *         return eqtype
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -172115,7 +175213,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setOptionsPrefix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":125
+/* "PETSc/TS.pyx":141
  *         CHKERR( TSSetOptionsPrefix(self.ts, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -172124,34 +175222,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setOptionsPrefix(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_23getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_22getOptionsPrefix[] = "TS.getOptionsPrefix(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_23getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_27getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_26getOptionsPrefix[] = "TS.getOptionsPrefix(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_27getOptionsPrefix(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_8petsc4py_5PETSc_2TS_22getOptionsPrefix(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getOptionsPrefix(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(struct PyPetscTSObject *__pyx_v_self) {
   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("getOptionsPrefix", 0);
 
-  /* "PETSc/TS.pyx":126
+  /* "PETSc/TS.pyx":142
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -172160,16 +175255,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getOptionsPrefix(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":127
+  /* "PETSc/TS.pyx":143
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL
  *         CHKERR( TSGetOptionsPrefix(self.ts, &cval) )             # <<<<<<<<<<<<<<
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetOptionsPrefix(__pyx_v_self->ts, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetOptionsPrefix(__pyx_v_self->ts, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 143, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":128
+  /* "PETSc/TS.pyx":144
  *         cdef const_char *cval = NULL
  *         CHKERR( TSGetOptionsPrefix(self.ts, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -172177,13 +175272,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getOptionsPrefix(struct PyPetsc
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":125
+  /* "PETSc/TS.pyx":141
  *         CHKERR( TSSetOptionsPrefix(self.ts, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -172202,7 +175297,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getOptionsPrefix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":130
+/* "PETSc/TS.pyx":146
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -172211,41 +175306,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getOptionsPrefix(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_24setFromOptions[] = "TS.setFromOptions(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_29setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_28setFromOptions[] = "TS.setFromOptions(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_29setFromOptions(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_8petsc4py_5PETSc_2TS_24setFromOptions(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_28setFromOptions(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setFromOptions(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28setFromOptions(struct PyPetscTSObject *__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);
 
-  /* "PETSc/TS.pyx":131
+  /* "PETSc/TS.pyx":147
  * 
  *     def setFromOptions(self):
  *         CHKERR( TSSetFromOptions(self.ts) )             # <<<<<<<<<<<<<<
  * 
  *     # --- application context ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetFromOptions(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetFromOptions(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 147, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":130
+  /* "PETSc/TS.pyx":146
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -172265,7 +175357,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setFromOptions(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":135
+/* "PETSc/TS.pyx":151
  *     # --- application context ---
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -172274,13 +175366,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setFromOptions(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_27setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_26setAppCtx[] = "TS.setAppCtx(self, appctx)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_27setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_30setAppCtx[] = "TS.setAppCtx(self, appctx)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_appctx = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAppCtx (wrapper)", 0);
@@ -172302,7 +175391,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_27setAppCtx(PyObject *__pyx_v_sel
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) __PYX_ERR(37, 151, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -172313,40 +175402,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_27setAppCtx(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 151, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_26setAppCtx(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_appctx);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_30setAppCtx(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_appctx);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26setAppCtx(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_appctx) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setAppCtx(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_appctx) {
   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("setAppCtx", 0);
 
-  /* "PETSc/TS.pyx":136
+  /* "PETSc/TS.pyx":152
  * 
  *     def setAppCtx(self, appctx):
  *         self.set_attr('__appctx__', appctx)             # <<<<<<<<<<<<<<
  * 
  *     def getAppCtx(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2, __pyx_v_appctx); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__"), __pyx_v_appctx); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 152, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":135
+  /* "PETSc/TS.pyx":151
  *     # --- application context ---
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -172367,7 +175453,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26setAppCtx(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":138
+/* "PETSc/TS.pyx":154
  *         self.set_attr('__appctx__', appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -172376,32 +175462,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26setAppCtx(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_29getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_28getAppCtx[] = "TS.getAppCtx(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_29getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_32getAppCtx[] = "TS.getAppCtx(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getAppCtx (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getAppCtx", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAppCtx", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_28getAppCtx(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_32getAppCtx(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28getAppCtx(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32getAppCtx(struct PyPetscTSObject *__pyx_v_self) {
   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("getAppCtx", 0);
 
-  /* "PETSc/TS.pyx":139
+  /* "PETSc/TS.pyx":155
  * 
  *     def getAppCtx(self):
  *         return self.get_attr('__appctx__')             # <<<<<<<<<<<<<<
@@ -172409,13 +175492,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28getAppCtx(struct PyPetscTSObjec
  *     # --- user RHS Function/Jacobian routines ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":138
+  /* "PETSc/TS.pyx":154
  *         self.set_attr('__appctx__', appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -172434,7 +175517,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28getAppCtx(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":143
+/* "PETSc/TS.pyx":159
  *     # --- user RHS Function/Jacobian routines ---
  * 
  *     def setRHSFunction(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -172443,21 +175526,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28getAppCtx(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_30setRHSFunction[] = "TS.setRHSFunction(self, function, Vec f=None, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_34setRHSFunction[] = "TS.setRHSFunction(self, function, Vec f=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_function = 0;
   struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setRHSFunction (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function_2,&__pyx_n_s_f,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function,&__pyx_n_s_f,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[4] = {0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -172476,7 +175556,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setRHSFunction(PyObject *__pyx_
       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--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -172495,7 +175575,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setRHSFunction(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRHSFunction") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRHSFunction") < 0)) __PYX_ERR(37, 159, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -172514,14 +175594,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setRHSFunction(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRHSFunction", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRHSFunction", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 159, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setRHSFunction", __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_Vec, 1, "f", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_function, __pyx_v_f, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "f", 0))) __PYX_ERR(37, 159, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_function, __pyx_v_f, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -172532,7 +175612,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setRHSFunction(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Vec __pyx_v_fvec;
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
@@ -172542,14 +175622,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
   Vec __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setRHSFunction", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":144
+  /* "PETSc/TS.pyx":160
  * 
  *     def setRHSFunction(self, function, Vec f=None, args=None, kargs=None):
  *         cdef PetscVec fvec=NULL             # <<<<<<<<<<<<<<
@@ -172558,7 +175635,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
  */
   __pyx_v_fvec = NULL;
 
-  /* "PETSc/TS.pyx":145
+  /* "PETSc/TS.pyx":161
  *     def setRHSFunction(self, function, Vec f=None, args=None, kargs=None):
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec             # <<<<<<<<<<<<<<
@@ -172570,11 +175647,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_f->vec;
     __pyx_v_fvec = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":146
+  /* "PETSc/TS.pyx":162
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -172585,7 +175660,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":147
+    /* "PETSc/TS.pyx":163
  *         if f is not None: fvec = f.vec
  *         if function is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -172597,11 +175672,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
     if (__pyx_t_2) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
-    /* "PETSc/TS.pyx":148
+    /* "PETSc/TS.pyx":164
  *         if function is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -172611,22 +175684,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
     __pyx_t_2 = (__pyx_v_kargs == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 164, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L6;
     }
-    __pyx_L6:;
 
-    /* "PETSc/TS.pyx":149
+    /* "PETSc/TS.pyx":165
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  *             context = (function, args, kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__rhsfunction__', context)
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, TS_RHSFunction, <void*>context) )
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 165, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_function);
     __Pyx_GIVEREF(__pyx_v_function);
@@ -172640,41 +175711,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
     __pyx_v_context = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":150
+    /* "PETSc/TS.pyx":166
  *             if kargs is None: kargs = {}
  *             context = (function, args, kargs)
  *             self.set_attr('__rhsfunction__', context)             # <<<<<<<<<<<<<<
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, TS_RHSFunction, <void*>context) )
  *         else:
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_rhsfunction, __pyx_v_context); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__rhsfunction__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 166, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":151
+    /* "PETSc/TS.pyx":167
  *             context = (function, args, kargs)
  *             self.set_attr('__rhsfunction__', context)
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, TS_RHSFunction, <void*>context) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, NULL, NULL) )
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSFunction(__pyx_v_self->ts, __pyx_v_fvec, __pyx_f_8petsc4py_5PETSc_TS_RHSFunction, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSFunction(__pyx_v_self->ts, __pyx_v_fvec, __pyx_f_8petsc4py_5PETSc_TS_RHSFunction, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 167, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":162
+ *         cdef PetscVec fvec=NULL
+ *         if f is not None: fvec = f.vec
+ *         if function is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":153
+  /* "PETSc/TS.pyx":169
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, TS_RHSFunction, <void*>context) )
  *         else:
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSFunction(__pyx_v_self->ts, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSFunction(__pyx_v_self->ts, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 169, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "PETSc/TS.pyx":143
+  /* "PETSc/TS.pyx":159
  *     # --- user RHS Function/Jacobian routines ---
  * 
  *     def setRHSFunction(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -172698,7 +175777,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":155
+/* "PETSc/TS.pyx":171
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, NULL, NULL) )
  * 
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -172707,22 +175786,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setRHSFunction(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33setRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_32setRHSJacobian[] = "TS.setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33setRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37setRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_36setRHSJacobian[] = "TS.setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37setRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_jacobian = 0;
   struct PyPetscMatObject *__pyx_v_J = 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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setRHSJacobian (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_2,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[5] = {0,0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscMatObject *)Py_None);
     values[2] = (PyObject *)((struct PyPetscMatObject *)Py_None);
@@ -172743,7 +175819,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33setRHSJacobian(PyObject *__pyx_
       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_jacobian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -172767,7 +175843,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33setRHSJacobian(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRHSJacobian") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRHSJacobian") < 0)) __PYX_ERR(37, 171, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -172788,15 +175864,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33setRHSJacobian(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRHSJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRHSJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 171, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setRHSJacobian", __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[37]; __pyx_lineno = 155; __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[37]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(37, 171, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 171, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -172807,7 +175883,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33setRHSJacobian(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Mat __pyx_v_Jmat;
   Mat __pyx_v_Pmat;
   PyObject *__pyx_v_context = NULL;
@@ -172818,14 +175894,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
   Mat __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setRHSJacobian", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":156
+  /* "PETSc/TS.pyx":172
  * 
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
@@ -172834,7 +175907,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
  */
   __pyx_v_Jmat = NULL;
 
-  /* "PETSc/TS.pyx":157
+  /* "PETSc/TS.pyx":173
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
@@ -172846,11 +175919,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_J->mat;
     __pyx_v_Jmat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":158
+  /* "PETSc/TS.pyx":174
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat             # <<<<<<<<<<<<<<
@@ -172859,7 +175930,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
  */
   __pyx_v_Pmat = __pyx_v_Jmat;
 
-  /* "PETSc/TS.pyx":159
+  /* "PETSc/TS.pyx":175
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
@@ -172871,11 +175942,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_Pmat = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TS.pyx":160
+  /* "PETSc/TS.pyx":176
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:             # <<<<<<<<<<<<<<
@@ -172886,7 +175955,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":161
+    /* "PETSc/TS.pyx":177
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -172898,11 +175967,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L6;
     }
-    __pyx_L6:;
 
-    /* "PETSc/TS.pyx":162
+    /* "PETSc/TS.pyx":178
  *         if jacobian is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -172912,22 +175979,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 178, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L7;
     }
-    __pyx_L7:;
 
-    /* "PETSc/TS.pyx":163
+    /* "PETSc/TS.pyx":179
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  *             context = (jacobian, args, kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__rhsjacobian__', context)
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, TS_RHSJacobian, <void*>context) )
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 179, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_jacobian);
     __Pyx_GIVEREF(__pyx_v_jacobian);
@@ -172941,41 +176006,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
     __pyx_v_context = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":164
+    /* "PETSc/TS.pyx":180
  *             if kargs is None: kargs = {}
  *             context = (jacobian, args, kargs)
  *             self.set_attr('__rhsjacobian__', context)             # <<<<<<<<<<<<<<
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, TS_RHSJacobian, <void*>context) )
  *         else:
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_rhsjacobian, __pyx_v_context); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__rhsjacobian__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 180, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":165
+    /* "PETSc/TS.pyx":181
  *             context = (jacobian, args, kargs)
  *             self.set_attr('__rhsjacobian__', context)
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, TS_RHSJacobian, <void*>context) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSJacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSJacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 181, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":176
+ *         cdef PetscMat Pmat=Jmat
+ *         if P is not None: Pmat = P.mat
+ *         if jacobian is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":167
+  /* "PETSc/TS.pyx":183
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, TS_RHSJacobian, <void*>context) )
  *         else:
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSJacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSJacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 183, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/TS.pyx":155
+  /* "PETSc/TS.pyx":171
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, NULL, NULL) )
  * 
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -172999,7 +176072,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":169
+/* "PETSc/TS.pyx":185
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
  *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
@@ -173008,15 +176081,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setRHSJacobian(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35computeRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_34computeRHSFunction[] = "TS.computeRHSFunction(self, t, Vec x, Vec f)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35computeRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_38computeRHSFunction[] = "TS.computeRHSFunction(self, t, Vec x, Vec f)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_t = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_f = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeRHSFunction (wrapper)", 0);
@@ -173041,16 +176111,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35computeRHSFunction(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, 1); __PYX_ERR(37, 185, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, 2); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, 2); __PYX_ERR(37, 185, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSFunction") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSFunction") < 0)) __PYX_ERR(37, 185, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -173065,15 +176135,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35computeRHSFunction(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 185, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.computeRHSFunction", __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[37]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_34computeRHSFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_f);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 185, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(37, 185, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_f);
 
   /* function exit code */
   goto __pyx_L0;
@@ -173084,37 +176154,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35computeRHSFunction(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34computeRHSFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f) {
   PetscReal __pyx_v_time;
   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("computeRHSFunction", 0);
 
-  /* "PETSc/TS.pyx":170
+  /* "PETSc/TS.pyx":186
  * 
  *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):
  *         cdef PetscReal time = asReal(t)             # <<<<<<<<<<<<<<
  *         CHKERR( TSComputeRHSFunction(self.ts, time, x.vec, f.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 186, __pyx_L1_error)
   __pyx_v_time = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":171
+  /* "PETSc/TS.pyx":187
  *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):
  *         cdef PetscReal time = asReal(t)
  *         CHKERR( TSComputeRHSFunction(self.ts, time, x.vec, f.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeRHSFunction(__pyx_v_self->ts, __pyx_v_time, __pyx_v_x->vec, __pyx_v_f->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeRHSFunction(__pyx_v_self->ts, __pyx_v_time, __pyx_v_x->vec, __pyx_v_f->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 187, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":169
+  /* "PETSc/TS.pyx":185
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
  *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
@@ -173134,7 +176201,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34computeRHSFunction(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":173
+/* "PETSc/TS.pyx":189
  *         CHKERR( TSComputeRHSFunction(self.ts, time, x.vec, f.vec) )
  * 
  *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
@@ -173143,15 +176210,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34computeRHSFunction(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37computeRHSFunctionLinear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_36computeRHSFunctionLinear[] = "TS.computeRHSFunctionLinear(self, t, Vec x, Vec f)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37computeRHSFunctionLinear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSFunctionLinear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_40computeRHSFunctionLinear[] = "TS.computeRHSFunctionLinear(self, t, Vec x, Vec f)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSFunctionLinear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_t = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_f = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeRHSFunctionLinear (wrapper)", 0);
@@ -173176,16 +176240,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37computeRHSFunctionLinear(PyObje
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, 1); __PYX_ERR(37, 189, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, 2); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, 2); __PYX_ERR(37, 189, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSFunctionLinear") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSFunctionLinear") < 0)) __PYX_ERR(37, 189, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -173200,15 +176264,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37computeRHSFunctionLinear(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 189, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.computeRHSFunctionLinear", __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[37]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_36computeRHSFunctionLinear(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_f);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 189, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(37, 189, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSFunctionLinear(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_f);
 
   /* function exit code */
   goto __pyx_L0;
@@ -173219,37 +176283,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37computeRHSFunctionLinear(PyObje
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36computeRHSFunctionLinear(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSFunctionLinear(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f) {
   PetscReal __pyx_v_time;
   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("computeRHSFunctionLinear", 0);
 
-  /* "PETSc/TS.pyx":174
+  /* "PETSc/TS.pyx":190
  * 
  *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):
  *         cdef PetscReal time = asReal(t)             # <<<<<<<<<<<<<<
  *         CHKERR( TSComputeRHSFunctionLinear(self.ts, time, x.vec, f.vec, NULL) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 190, __pyx_L1_error)
   __pyx_v_time = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":175
+  /* "PETSc/TS.pyx":191
  *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):
  *         cdef PetscReal time = asReal(t)
  *         CHKERR( TSComputeRHSFunctionLinear(self.ts, time, x.vec, f.vec, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def computeRHSJacobian(self, t, Vec x not None, Mat J not None, Mat P=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeRHSFunctionLinear(__pyx_v_self->ts, __pyx_v_time, __pyx_v_x->vec, __pyx_v_f->vec, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeRHSFunctionLinear(__pyx_v_self->ts, __pyx_v_time, __pyx_v_x->vec, __pyx_v_f->vec, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 191, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":173
+  /* "PETSc/TS.pyx":189
  *         CHKERR( TSComputeRHSFunction(self.ts, time, x.vec, f.vec) )
  * 
  *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
@@ -173269,7 +176330,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36computeRHSFunctionLinear(struct
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":177
+/* "PETSc/TS.pyx":193
  *         CHKERR( TSComputeRHSFunctionLinear(self.ts, time, x.vec, f.vec, NULL) )
  * 
  *     def computeRHSJacobian(self, t, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -173278,16 +176339,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36computeRHSFunctionLinear(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_38computeRHSJacobian[] = "TS.computeRHSJacobian(self, t, Vec x, Mat J, Mat P=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_42computeRHSJacobian[] = "TS.computeRHSJacobian(self, t, Vec x, Mat J, Mat P=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_t = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeRHSJacobian (wrapper)", 0);
@@ -173314,12 +176372,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSJacobian(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, 1); __PYX_ERR(37, 193, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, 2); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, 2); __PYX_ERR(37, 193, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -173328,7 +176386,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSJacobian(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSJacobian") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSJacobian") < 0)) __PYX_ERR(37, 193, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -173347,16 +176405,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSJacobian(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 193, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.computeRHSJacobian", __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[37]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 177; __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[37]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_J, __pyx_v_P);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 193, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(37, 193, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 193, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_J, __pyx_v_P);
 
   /* function exit code */
   goto __pyx_L0;
@@ -173367,7 +176425,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSJacobian(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P) {
   PetscReal __pyx_v_time;
   Mat __pyx_v_jmat;
   Mat __pyx_v_pmat;
@@ -173378,22 +176436,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSJacobian(struct PyPet
   int __pyx_t_3;
   int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("computeRHSJacobian", 0);
 
-  /* "PETSc/TS.pyx":178
+  /* "PETSc/TS.pyx":194
  * 
  *     def computeRHSJacobian(self, t, Vec x not None, Mat J not None, Mat P=None):
  *         cdef PetscReal time = asReal(t)             # <<<<<<<<<<<<<<
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 194, __pyx_L1_error)
   __pyx_v_time = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":179
+  /* "PETSc/TS.pyx":195
  *     def computeRHSJacobian(self, t, Vec x not None, Mat J not None, Mat P=None):
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
@@ -173405,7 +176460,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSJacobian(struct PyPet
   __pyx_t_2 = __pyx_v_J->mat;
   __pyx_v_pmat = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":180
+  /* "PETSc/TS.pyx":196
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -173417,20 +176472,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSJacobian(struct PyPet
   if (__pyx_t_4) {
     __pyx_t_2 = __pyx_v_P->mat;
     __pyx_v_pmat = __pyx_t_2;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":181
+  /* "PETSc/TS.pyx":197
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  *         CHKERR( TSComputeRHSJacobian(self.ts, time, x.vec, jmat, pmat) )             # <<<<<<<<<<<<<<
  * 
  *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeRHSJacobian(__pyx_v_self->ts, __pyx_v_time, __pyx_v_x->vec, __pyx_v_jmat, __pyx_v_pmat)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeRHSJacobian(__pyx_v_self->ts, __pyx_v_time, __pyx_v_x->vec, __pyx_v_jmat, __pyx_v_pmat)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 197, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":177
+  /* "PETSc/TS.pyx":193
  *         CHKERR( TSComputeRHSFunctionLinear(self.ts, time, x.vec, f.vec, NULL) )
  * 
  *     def computeRHSJacobian(self, t, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -173450,7 +176503,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSJacobian(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":183
+/* "PETSc/TS.pyx":199
  *         CHKERR( TSComputeRHSJacobian(self.ts, time, x.vec, jmat, pmat) )
  * 
  *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -173459,16 +176512,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSJacobian(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSJacobianConstant(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant[] = "TS.computeRHSJacobianConstant(self, t, Vec x, Mat J, Mat P=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSJacobianConstant(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSJacobianConstant(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant[] = "TS.computeRHSJacobianConstant(self, t, Vec x, Mat J, Mat P=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSJacobianConstant(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_t = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeRHSJacobianConstant (wrapper)", 0);
@@ -173495,12 +176545,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSJacobianConstant(PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, 1); __PYX_ERR(37, 199, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, 2); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, 2); __PYX_ERR(37, 199, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -173509,7 +176559,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSJacobianConstant(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSJacobianConstant") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSJacobianConstant") < 0)) __PYX_ERR(37, 199, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -173528,16 +176578,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSJacobianConstant(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 199, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.computeRHSJacobianConstant", __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[37]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 183; __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[37]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_J, __pyx_v_P);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 199, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(37, 199, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 199, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_J, __pyx_v_P);
 
   /* function exit code */
   goto __pyx_L0;
@@ -173548,7 +176598,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSJacobianConstant(PyOb
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P) {
   PetscReal __pyx_v_time;
   Mat __pyx_v_jmat;
   Mat __pyx_v_pmat;
@@ -173559,22 +176609,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant(stru
   int __pyx_t_3;
   int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("computeRHSJacobianConstant", 0);
 
-  /* "PETSc/TS.pyx":184
+  /* "PETSc/TS.pyx":200
  * 
  *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):
  *         cdef PetscReal time = asReal(t)             # <<<<<<<<<<<<<<
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 200, __pyx_L1_error)
   __pyx_v_time = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":185
+  /* "PETSc/TS.pyx":201
  *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
@@ -173586,7 +176633,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant(stru
   __pyx_t_2 = __pyx_v_J->mat;
   __pyx_v_pmat = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":186
+  /* "PETSc/TS.pyx":202
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -173598,20 +176645,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant(stru
   if (__pyx_t_4) {
     __pyx_t_2 = __pyx_v_P->mat;
     __pyx_v_pmat = __pyx_t_2;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":187
+  /* "PETSc/TS.pyx":203
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  *         CHKERR( TSComputeRHSJacobianConstant(self.ts, time, x.vec, jmat, pmat, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def getRHSFunction(self):
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeRHSJacobianConstant(__pyx_v_self->ts, __pyx_v_time, __pyx_v_x->vec, __pyx_v_jmat, __pyx_v_pmat, NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeRHSJacobianConstant(__pyx_v_self->ts, __pyx_v_time, __pyx_v_x->vec, __pyx_v_jmat, __pyx_v_pmat, NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 203, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":183
+  /* "PETSc/TS.pyx":199
  *         CHKERR( TSComputeRHSJacobian(self.ts, time, x.vec, jmat, pmat) )
  * 
  *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -173631,7 +176676,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant(stru
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":189
+/* "PETSc/TS.pyx":205
  *         CHKERR( TSComputeRHSJacobianConstant(self.ts, time, x.vec, jmat, pmat, NULL) )
  * 
  *     def getRHSFunction(self):             # <<<<<<<<<<<<<<
@@ -173640,56 +176685,53 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant(stru
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43getRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_42getRHSFunction[] = "TS.getRHSFunction(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43getRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47getRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_46getRHSFunction[] = "TS.getRHSFunction(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47getRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRHSFunction (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getRHSFunction", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRHSFunction", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_42getRHSFunction(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42getRHSFunction(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_v_function = 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("getRHSFunction", 0);
 
-  /* "PETSc/TS.pyx":190
+  /* "PETSc/TS.pyx":206
  * 
  *     def getRHSFunction(self):
  *         cdef Vec f = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( TSGetRHSFunction(self.ts, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)
  */
-  __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[37]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 206, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_f = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":191
+  /* "PETSc/TS.pyx":207
  *     def getRHSFunction(self):
  *         cdef Vec f = Vec()
  *         CHKERR( TSGetRHSFunction(self.ts, &f.vec, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__rhsfunction__')
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetRHSFunction(__pyx_v_self->ts, (&__pyx_v_f->vec), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetRHSFunction(__pyx_v_self->ts, (&__pyx_v_f->vec), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 207, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":192
+  /* "PETSc/TS.pyx":208
  *         cdef Vec f = Vec()
  *         CHKERR( TSGetRHSFunction(self.ts, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)             # <<<<<<<<<<<<<<
@@ -173698,19 +176740,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42getRHSFunction(struct PyPetscTS
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_f->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":193
+  /* "PETSc/TS.pyx":209
  *         CHKERR( TSGetRHSFunction(self.ts, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__rhsfunction__')             # <<<<<<<<<<<<<<
  *         return (f, function)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_rhsfunction); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__rhsfunction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_function = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":194
+  /* "PETSc/TS.pyx":210
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__rhsfunction__')
  *         return (f, function)             # <<<<<<<<<<<<<<
@@ -173718,7 +176760,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42getRHSFunction(struct PyPetscTS
  *     def getRHSJacobian(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_f));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
@@ -173730,7 +176772,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42getRHSFunction(struct PyPetscTS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":189
+  /* "PETSc/TS.pyx":205
  *         CHKERR( TSComputeRHSJacobianConstant(self.ts, time, x.vec, jmat, pmat, NULL) )
  * 
  *     def getRHSFunction(self):             # <<<<<<<<<<<<<<
@@ -173751,7 +176793,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42getRHSFunction(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":196
+/* "PETSc/TS.pyx":212
  *         return (f, function)
  * 
  *     def getRHSJacobian(self):             # <<<<<<<<<<<<<<
@@ -173760,23 +176802,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42getRHSFunction(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45getRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_44getRHSJacobian[] = "TS.getRHSJacobian(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45getRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49getRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_48getRHSJacobian[] = "TS.getRHSJacobian(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49getRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRHSJacobian (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getRHSJacobian", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRHSJacobian", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
   PyObject *__pyx_v_jacobian = 0;
@@ -173784,37 +176826,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(struct PyPetscTS
   __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("getRHSJacobian", 0);
 
-  /* "PETSc/TS.pyx":197
+  /* "PETSc/TS.pyx":213
  * 
  *     def getRHSJacobian(self):
  *         cdef Mat J = Mat(), P = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( TSGetRHSJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.obj); PetscINCREF(P.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[37]; __pyx_lineno = 197; __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(37, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_J = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
-  __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[37]; __pyx_lineno = 197; __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(37, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":198
+  /* "PETSc/TS.pyx":214
  *     def getRHSJacobian(self):
  *         cdef Mat J = Mat(), P = Mat()
  *         CHKERR( TSGetRHSJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  *         cdef object jacobian = self.get_attr('__rhsjacobian__')
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetRHSJacobian(__pyx_v_self->ts, (&__pyx_v_J->mat), (&__pyx_v_P->mat), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetRHSJacobian(__pyx_v_self->ts, (&__pyx_v_J->mat), (&__pyx_v_P->mat), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 214, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":199
+  /* "PETSc/TS.pyx":215
  *         cdef Mat J = Mat(), P = Mat()
  *         CHKERR( TSGetRHSJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
@@ -173824,19 +176863,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(struct PyPetscTS
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_J->__pyx_base.obj);
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_P->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":200
+  /* "PETSc/TS.pyx":216
  *         CHKERR( TSGetRHSJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  *         cdef object jacobian = self.get_attr('__rhsjacobian__')             # <<<<<<<<<<<<<<
  *         return (J, P, jacobian)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_rhsjacobian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__rhsjacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_jacobian = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":201
+  /* "PETSc/TS.pyx":217
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  *         cdef object jacobian = self.get_attr('__rhsjacobian__')
  *         return (J, P, jacobian)             # <<<<<<<<<<<<<<
@@ -173844,7 +176883,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(struct PyPetscTS
  *     # --- user Implicit Function/Jacobian routines ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_J));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
@@ -173859,7 +176898,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(struct PyPetscTS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":196
+  /* "PETSc/TS.pyx":212
  *         return (f, function)
  * 
  *     def getRHSJacobian(self):             # <<<<<<<<<<<<<<
@@ -173881,7 +176920,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":205
+/* "PETSc/TS.pyx":221
  *     # --- user Implicit Function/Jacobian routines ---
  * 
  *     def setIFunction(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -173890,21 +176929,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44getRHSJacobian(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47setIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_46setIFunction[] = "TS.setIFunction(self, function, Vec f=None, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47setIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51setIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_50setIFunction[] = "TS.setIFunction(self, function, Vec f=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51setIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_function = 0;
   struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setIFunction (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function_2,&__pyx_n_s_f,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function,&__pyx_n_s_f,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[4] = {0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -173923,7 +176959,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47setIFunction(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--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -173942,7 +176978,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47setIFunction(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIFunction") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIFunction") < 0)) __PYX_ERR(37, 221, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -173961,14 +176997,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47setIFunction(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setIFunction", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setIFunction", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 221, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setIFunction", __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_Vec, 1, "f", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_function, __pyx_v_f, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "f", 0))) __PYX_ERR(37, 221, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_function, __pyx_v_f, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -173979,7 +177015,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47setIFunction(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Vec __pyx_v_fvec;
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
@@ -173989,14 +177025,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
   Vec __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setIFunction", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":206
+  /* "PETSc/TS.pyx":222
  * 
  *     def setIFunction(self, function, Vec f=None, args=None, kargs=None):
  *         cdef PetscVec fvec=NULL             # <<<<<<<<<<<<<<
@@ -174005,7 +177038,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
  */
   __pyx_v_fvec = NULL;
 
-  /* "PETSc/TS.pyx":207
+  /* "PETSc/TS.pyx":223
  *     def setIFunction(self, function, Vec f=None, args=None, kargs=None):
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec             # <<<<<<<<<<<<<<
@@ -174017,11 +177050,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_f->vec;
     __pyx_v_fvec = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":208
+  /* "PETSc/TS.pyx":224
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -174032,7 +177063,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":209
+    /* "PETSc/TS.pyx":225
  *         if f is not None: fvec = f.vec
  *         if function is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -174044,11 +177075,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
     if (__pyx_t_2) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
-    /* "PETSc/TS.pyx":210
+    /* "PETSc/TS.pyx":226
  *         if function is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -174058,22 +177087,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
     __pyx_t_2 = (__pyx_v_kargs == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 226, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L6;
     }
-    __pyx_L6:;
 
-    /* "PETSc/TS.pyx":211
+    /* "PETSc/TS.pyx":227
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  *             context = (function, args, kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__ifunction__', context)
  *             CHKERR( TSSetIFunction(self.ts, fvec, TS_IFunction, <void*>context) )
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 227, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_function);
     __Pyx_GIVEREF(__pyx_v_function);
@@ -174087,41 +177114,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
     __pyx_v_context = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":212
+    /* "PETSc/TS.pyx":228
  *             if kargs is None: kargs = {}
  *             context = (function, args, kargs)
  *             self.set_attr('__ifunction__', context)             # <<<<<<<<<<<<<<
  *             CHKERR( TSSetIFunction(self.ts, fvec, TS_IFunction, <void*>context) )
  *         else:
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_ifunction, __pyx_v_context); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__ifunction__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 228, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":213
+    /* "PETSc/TS.pyx":229
  *             context = (function, args, kargs)
  *             self.set_attr('__ifunction__', context)
  *             CHKERR( TSSetIFunction(self.ts, fvec, TS_IFunction, <void*>context) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( TSSetIFunction(self.ts, fvec, NULL, NULL) )
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIFunction(__pyx_v_self->ts, __pyx_v_fvec, __pyx_f_8petsc4py_5PETSc_TS_IFunction, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIFunction(__pyx_v_self->ts, __pyx_v_fvec, __pyx_f_8petsc4py_5PETSc_TS_IFunction, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 229, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":224
+ *         cdef PetscVec fvec=NULL
+ *         if f is not None: fvec = f.vec
+ *         if function is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":215
+  /* "PETSc/TS.pyx":231
  *             CHKERR( TSSetIFunction(self.ts, fvec, TS_IFunction, <void*>context) )
  *         else:
  *             CHKERR( TSSetIFunction(self.ts, fvec, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIFunction(__pyx_v_self->ts, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIFunction(__pyx_v_self->ts, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 231, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "PETSc/TS.pyx":205
+  /* "PETSc/TS.pyx":221
  *     # --- user Implicit Function/Jacobian routines ---
  * 
  *     def setIFunction(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -174145,7 +177180,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":217
+/* "PETSc/TS.pyx":233
  *             CHKERR( TSSetIFunction(self.ts, fvec, NULL, NULL) )
  * 
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -174154,22 +177189,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46setIFunction(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49setIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_48setIJacobian[] = "TS.setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49setIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53setIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_52setIJacobian[] = "TS.setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53setIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_jacobian = 0;
   struct PyPetscMatObject *__pyx_v_J = 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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setIJacobian (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_2,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[5] = {0,0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscMatObject *)Py_None);
     values[2] = (PyObject *)((struct PyPetscMatObject *)Py_None);
@@ -174190,7 +177222,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49setIJacobian(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_jacobian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -174214,7 +177246,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49setIJacobian(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIJacobian") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIJacobian") < 0)) __PYX_ERR(37, 233, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -174235,15 +177267,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49setIJacobian(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setIJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setIJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 233, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setIJacobian", __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[37]; __pyx_lineno = 217; __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[37]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(37, 233, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 233, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -174254,7 +177286,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49setIJacobian(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Mat __pyx_v_Jmat;
   Mat __pyx_v_Pmat;
   PyObject *__pyx_v_context = NULL;
@@ -174265,14 +177297,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
   Mat __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setIJacobian", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":218
+  /* "PETSc/TS.pyx":234
  * 
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
@@ -174281,7 +177310,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
  */
   __pyx_v_Jmat = NULL;
 
-  /* "PETSc/TS.pyx":219
+  /* "PETSc/TS.pyx":235
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
@@ -174293,11 +177322,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_J->mat;
     __pyx_v_Jmat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":220
+  /* "PETSc/TS.pyx":236
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat             # <<<<<<<<<<<<<<
@@ -174306,7 +177333,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
  */
   __pyx_v_Pmat = __pyx_v_Jmat;
 
-  /* "PETSc/TS.pyx":221
+  /* "PETSc/TS.pyx":237
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
@@ -174318,11 +177345,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_Pmat = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TS.pyx":222
+  /* "PETSc/TS.pyx":238
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:             # <<<<<<<<<<<<<<
@@ -174333,7 +177358,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":223
+    /* "PETSc/TS.pyx":239
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -174345,11 +177370,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L6;
     }
-    __pyx_L6:;
 
-    /* "PETSc/TS.pyx":224
+    /* "PETSc/TS.pyx":240
  *         if jacobian is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -174359,22 +177382,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 240, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L7;
     }
-    __pyx_L7:;
 
-    /* "PETSc/TS.pyx":225
+    /* "PETSc/TS.pyx":241
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  *             context = (jacobian, args, kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__ijacobian__', context)
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, TS_IJacobian, <void*>context) )
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 241, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_jacobian);
     __Pyx_GIVEREF(__pyx_v_jacobian);
@@ -174388,41 +177409,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
     __pyx_v_context = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":226
+    /* "PETSc/TS.pyx":242
  *             if kargs is None: kargs = {}
  *             context = (jacobian, args, kargs)
  *             self.set_attr('__ijacobian__', context)             # <<<<<<<<<<<<<<
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, TS_IJacobian, <void*>context) )
  *         else:
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_ijacobian, __pyx_v_context); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__ijacobian__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 242, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":227
+    /* "PETSc/TS.pyx":243
  *             context = (jacobian, args, kargs)
  *             self.set_attr('__ijacobian__', context)
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, TS_IJacobian, <void*>context) )             # <<<<<<<<<<<<<<
  *         else:
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIJacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TS_IJacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIJacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TS_IJacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 243, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":238
+ *         cdef PetscMat Pmat=Jmat
+ *         if P is not None: Pmat = P.mat
+ *         if jacobian is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L5;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":229
+  /* "PETSc/TS.pyx":245
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, TS_IJacobian, <void*>context) )
  *         else:
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def computeIFunction(self,
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIJacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIJacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, NULL, NULL)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 245, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/TS.pyx":217
+  /* "PETSc/TS.pyx":233
  *             CHKERR( TSSetIFunction(self.ts, fvec, NULL, NULL) )
  * 
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -174446,7 +177475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":231
+/* "PETSc/TS.pyx":247
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
  *     def computeIFunction(self,             # <<<<<<<<<<<<<<
@@ -174455,17 +177484,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48setIJacobian(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51computeIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_50computeIFunction[] = "TS.computeIFunction(self, t, Vec x, Vec xdot, Vec f, imex=False)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51computeIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_54computeIFunction[] = "TS.computeIFunction(self, t, Vec x, Vec xdot, Vec f, imex=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_t = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_xdot = 0;
   struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_v_imex = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeIFunction (wrapper)", 0);
@@ -174473,7 +177499,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51computeIFunction(PyObject *__py
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_x,&__pyx_n_s_xdot,&__pyx_n_s_f,&__pyx_n_s_imex,0};
     PyObject* values[5] = {0,0,0,0,0};
 
-    /* "PETSc/TS.pyx":233
+    /* "PETSc/TS.pyx":249
  *     def computeIFunction(self,
  *                          t, Vec x not None, Vec xdot not None,
  *                          Vec f not None, imex=False):             # <<<<<<<<<<<<<<
@@ -174501,17 +177527,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51computeIFunction(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 1); __PYX_ERR(37, 247, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xdot)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 2); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 2); __PYX_ERR(37, 247, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 3); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 3); __PYX_ERR(37, 247, __pyx_L3_error)
         }
         case  4:
         if (kw_args > 0) {
@@ -174520,7 +177546,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51computeIFunction(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeIFunction") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeIFunction") < 0)) __PYX_ERR(37, 247, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -174541,18 +177567,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51computeIFunction(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 247, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.computeIFunction", __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[37]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdot", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_50computeIFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_xdot, __pyx_v_f, __pyx_v_imex);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 248, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdot", 0))) __PYX_ERR(37, 248, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(37, 249, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_54computeIFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_xdot, __pyx_v_f, __pyx_v_imex);
 
-  /* "PETSc/TS.pyx":231
+  /* "PETSc/TS.pyx":247
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
  *     def computeIFunction(self,             # <<<<<<<<<<<<<<
@@ -174569,7 +177595,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51computeIFunction(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50computeIFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_imex) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54computeIFunction(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, struct PyPetscVecObject *__pyx_v_f, PyObject *__pyx_v_imex) {
   PetscReal __pyx_v_rval;
   PetscBool __pyx_v_bval;
   PyObject *__pyx_r = NULL;
@@ -174577,41 +177603,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50computeIFunction(struct PyPetsc
   PetscReal __pyx_t_1;
   PetscBool __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("computeIFunction", 0);
 
-  /* "PETSc/TS.pyx":234
+  /* "PETSc/TS.pyx":250
  *                          t, Vec x not None, Vec xdot not None,
  *                          Vec f not None, imex=False):
  *         cdef PetscReal rval = asReal(t)             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval = imex
  *         CHKERR( TSComputeIFunction(self.ts, rval, x.vec, xdot.vec,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 250, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":235
+  /* "PETSc/TS.pyx":251
  *                          Vec f not None, imex=False):
  *         cdef PetscReal rval = asReal(t)
  *         cdef PetscBool bval = imex             # <<<<<<<<<<<<<<
  *         CHKERR( TSComputeIFunction(self.ts, rval, x.vec, xdot.vec,
  *                                    f.vec, bval) )
  */
-  __pyx_t_2 = ((PetscBool)PyInt_AsLong(__pyx_v_imex)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_imex)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 251, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":236
+  /* "PETSc/TS.pyx":252
  *         cdef PetscReal rval = asReal(t)
  *         cdef PetscBool bval = imex
  *         CHKERR( TSComputeIFunction(self.ts, rval, x.vec, xdot.vec,             # <<<<<<<<<<<<<<
  *                                    f.vec, bval) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeIFunction(__pyx_v_self->ts, __pyx_v_rval, __pyx_v_x->vec, __pyx_v_xdot->vec, __pyx_v_f->vec, __pyx_v_bval)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeIFunction(__pyx_v_self->ts, __pyx_v_rval, __pyx_v_x->vec, __pyx_v_xdot->vec, __pyx_v_f->vec, __pyx_v_bval)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(37, 252, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":231
+  /* "PETSc/TS.pyx":247
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
  *     def computeIFunction(self,             # <<<<<<<<<<<<<<
@@ -174631,7 +177654,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50computeIFunction(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":239
+/* "PETSc/TS.pyx":255
  *                                    f.vec, bval) )
  * 
  *     def computeIJacobian(self,             # <<<<<<<<<<<<<<
@@ -174640,9 +177663,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50computeIFunction(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_52computeIJacobian[] = "TS.computeIJacobian(self, t, Vec x, Vec xdot, a, Mat J, Mat P=None, imex=False)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_56computeIJacobian[] = "TS.computeIJacobian(self, t, Vec x, Vec xdot, a, Mat J, Mat P=None, imex=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_t = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_xdot = 0;
@@ -174650,9 +177673,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian(PyObject *__py
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
   PyObject *__pyx_v_imex = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeIJacobian (wrapper)", 0);
@@ -174660,7 +177680,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian(PyObject *__py
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_x,&__pyx_n_s_xdot,&__pyx_n_s_a,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_imex,0};
     PyObject* values[7] = {0,0,0,0,0,0,0};
 
-    /* "PETSc/TS.pyx":241
+    /* "PETSc/TS.pyx":257
  *     def computeIJacobian(self,
  *                          t, Vec x not None, Vec xdot not None, a,
  *                          Mat J not None, Mat P=None, imex=False):             # <<<<<<<<<<<<<<
@@ -174691,22 +177711,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 1); __PYX_ERR(37, 255, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xdot)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 2); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 2); __PYX_ERR(37, 255, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 3); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 3); __PYX_ERR(37, 255, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 4); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 4); __PYX_ERR(37, 255, __pyx_L3_error)
         }
         case  5:
         if (kw_args > 0) {
@@ -174720,7 +177740,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeIJacobian") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeIJacobian") < 0)) __PYX_ERR(37, 255, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -174745,19 +177765,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 255, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.computeIJacobian", __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[37]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdot", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 241; __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[37]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_52computeIJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_xdot, __pyx_v_a, __pyx_v_J, __pyx_v_P, __pyx_v_imex);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 256, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdot", 0))) __PYX_ERR(37, 256, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(37, 257, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 257, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_56computeIJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_xdot, __pyx_v_a, __pyx_v_J, __pyx_v_P, __pyx_v_imex);
 
-  /* "PETSc/TS.pyx":239
+  /* "PETSc/TS.pyx":255
  *                                    f.vec, bval) )
  * 
  *     def computeIJacobian(self,             # <<<<<<<<<<<<<<
@@ -174774,7 +177794,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52computeIJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, PyObject *__pyx_v_a, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_imex) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56computeIJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, PyObject *__pyx_v_a, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_imex) {
   PetscReal __pyx_v_rval1;
   PetscReal __pyx_v_rval2;
   PetscBool __pyx_v_bval;
@@ -174788,42 +177808,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52computeIJacobian(struct PyPetsc
   int __pyx_t_4;
   int __pyx_t_5;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("computeIJacobian", 0);
 
-  /* "PETSc/TS.pyx":242
+  /* "PETSc/TS.pyx":258
  *                          t, Vec x not None, Vec xdot not None, a,
  *                          Mat J not None, Mat P=None, imex=False):
  *         cdef PetscReal rval1 = asReal(t)             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval2 = asReal(a)
  *         cdef PetscBool bval  = imex
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 258, __pyx_L1_error)
   __pyx_v_rval1 = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":243
+  /* "PETSc/TS.pyx":259
  *                          Mat J not None, Mat P=None, imex=False):
  *         cdef PetscReal rval1 = asReal(t)
  *         cdef PetscReal rval2 = asReal(a)             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval  = imex
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_a); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_a); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 259, __pyx_L1_error)
   __pyx_v_rval2 = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":244
+  /* "PETSc/TS.pyx":260
  *         cdef PetscReal rval1 = asReal(t)
  *         cdef PetscReal rval2 = asReal(a)
  *         cdef PetscBool bval  = imex             # <<<<<<<<<<<<<<
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  */
-  __pyx_t_2 = ((PetscBool)PyInt_AsLong(__pyx_v_imex)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_imex)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 260, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":245
+  /* "PETSc/TS.pyx":261
  *         cdef PetscReal rval2 = asReal(a)
  *         cdef PetscBool bval  = imex
  *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
@@ -174835,7 +177852,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52computeIJacobian(struct PyPetsc
   __pyx_t_3 = __pyx_v_J->mat;
   __pyx_v_pmat = __pyx_t_3;
 
-  /* "PETSc/TS.pyx":246
+  /* "PETSc/TS.pyx":262
  *         cdef PetscBool bval  = imex
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -174847,20 +177864,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52computeIJacobian(struct PyPetsc
   if (__pyx_t_5) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_pmat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":247
+  /* "PETSc/TS.pyx":263
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  *         CHKERR( TSComputeIJacobian(self.ts, rval1, x.vec, xdot.vec, rval2,             # <<<<<<<<<<<<<<
  *                                    jmat, pmat, bval) )
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeIJacobian(__pyx_v_self->ts, __pyx_v_rval1, __pyx_v_x->vec, __pyx_v_xdot->vec, __pyx_v_rval2, __pyx_v_jmat, __pyx_v_pmat, __pyx_v_bval)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeIJacobian(__pyx_v_self->ts, __pyx_v_rval1, __pyx_v_x->vec, __pyx_v_xdot->vec, __pyx_v_rval2, __pyx_v_jmat, __pyx_v_pmat, __pyx_v_bval)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(37, 263, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":239
+  /* "PETSc/TS.pyx":255
  *                                    f.vec, bval) )
  * 
  *     def computeIJacobian(self,             # <<<<<<<<<<<<<<
@@ -174880,7 +177895,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52computeIJacobian(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":250
+/* "PETSc/TS.pyx":266
  *                                    jmat, pmat, bval) )
  * 
  *     def getIFunction(self):             # <<<<<<<<<<<<<<
@@ -174889,56 +177904,53 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52computeIJacobian(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55getIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_54getIFunction[] = "TS.getIFunction(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55getIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59getIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_58getIFunction[] = "TS.getIFunction(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59getIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getIFunction (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getIFunction", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIFunction", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_54getIFunction(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54getIFunction(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_v_function = 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("getIFunction", 0);
 
-  /* "PETSc/TS.pyx":251
+  /* "PETSc/TS.pyx":267
  * 
  *     def getIFunction(self):
  *         cdef Vec f = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( TSGetIFunction(self.ts, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)
  */
-  __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[37]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 267, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_f = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":252
+  /* "PETSc/TS.pyx":268
  *     def getIFunction(self):
  *         cdef Vec f = Vec()
  *         CHKERR( TSGetIFunction(self.ts, &f.vec, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__ifunction__')
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetIFunction(__pyx_v_self->ts, (&__pyx_v_f->vec), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetIFunction(__pyx_v_self->ts, (&__pyx_v_f->vec), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 268, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":253
+  /* "PETSc/TS.pyx":269
  *         cdef Vec f = Vec()
  *         CHKERR( TSGetIFunction(self.ts, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)             # <<<<<<<<<<<<<<
@@ -174947,19 +177959,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54getIFunction(struct PyPetscTSOb
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_f->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":254
+  /* "PETSc/TS.pyx":270
  *         CHKERR( TSGetIFunction(self.ts, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__ifunction__')             # <<<<<<<<<<<<<<
  *         return (f, function)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_ifunction); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__ifunction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_function = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":255
+  /* "PETSc/TS.pyx":271
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__ifunction__')
  *         return (f, function)             # <<<<<<<<<<<<<<
@@ -174967,7 +177979,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54getIFunction(struct PyPetscTSOb
  *     def getIJacobian(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 271, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_f));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
@@ -174979,7 +177991,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54getIFunction(struct PyPetscTSOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":250
+  /* "PETSc/TS.pyx":266
  *                                    jmat, pmat, bval) )
  * 
  *     def getIFunction(self):             # <<<<<<<<<<<<<<
@@ -175000,7 +178012,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54getIFunction(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":257
+/* "PETSc/TS.pyx":273
  *         return (f, function)
  * 
  *     def getIJacobian(self):             # <<<<<<<<<<<<<<
@@ -175009,23 +178021,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54getIFunction(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57getIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_56getIJacobian[] = "TS.getIJacobian(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57getIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_61getIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_60getIJacobian[] = "TS.getIJacobian(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_61getIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getIJacobian (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getIJacobian", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIJacobian", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_60getIJacobian(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getIJacobian(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
   PyObject *__pyx_v_jacobian = 0;
@@ -175033,37 +178045,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(struct PyPetscTSOb
   __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("getIJacobian", 0);
 
-  /* "PETSc/TS.pyx":258
+  /* "PETSc/TS.pyx":274
  * 
  *     def getIJacobian(self):
  *         cdef Mat J = Mat(), P = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( TSGetIJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.obj); PetscINCREF(P.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[37]; __pyx_lineno = 258; __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(37, 274, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_J = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
-  __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[37]; __pyx_lineno = 258; __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(37, 274, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":259
+  /* "PETSc/TS.pyx":275
  *     def getIJacobian(self):
  *         cdef Mat J = Mat(), P = Mat()
  *         CHKERR( TSGetIJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  *         cdef object jacobian = self.get_attr('__ijacobian__')
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetIJacobian(__pyx_v_self->ts, (&__pyx_v_J->mat), (&__pyx_v_P->mat), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetIJacobian(__pyx_v_self->ts, (&__pyx_v_J->mat), (&__pyx_v_P->mat), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 275, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":260
+  /* "PETSc/TS.pyx":276
  *         cdef Mat J = Mat(), P = Mat()
  *         CHKERR( TSGetIJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
@@ -175073,19 +178082,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(struct PyPetscTSOb
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_J->__pyx_base.obj);
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_P->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":261
+  /* "PETSc/TS.pyx":277
  *         CHKERR( TSGetIJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  *         cdef object jacobian = self.get_attr('__ijacobian__')             # <<<<<<<<<<<<<<
  *         return (J, P, jacobian)
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_ijacobian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__ijacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_jacobian = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":262
+  /* "PETSc/TS.pyx":278
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  *         cdef object jacobian = self.get_attr('__ijacobian__')
  *         return (J, P, jacobian)             # <<<<<<<<<<<<<<
@@ -175093,7 +178102,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(struct PyPetscTSOb
  *     # --- solution vector ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_J));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
@@ -175108,7 +178117,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(struct PyPetscTSOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":257
+  /* "PETSc/TS.pyx":273
  *         return (f, function)
  * 
  *     def getIJacobian(self):             # <<<<<<<<<<<<<<
@@ -175130,7 +178139,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":266
+/* "PETSc/TS.pyx":282
  *     # --- solution vector ---
  * 
  *     def setSolution(self, Vec u not None):             # <<<<<<<<<<<<<<
@@ -175139,13 +178148,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56getIJacobian(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_58setSolution[] = "TS.setSolution(self, Vec u)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_63setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_62setSolution[] = "TS.setSolution(self, Vec u)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_63setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_u = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setSolution (wrapper)", 0);
@@ -175167,7 +178173,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59setSolution(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSolution") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSolution") < 0)) __PYX_ERR(37, 282, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -175178,14 +178184,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59setSolution(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSolution", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSolution", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 282, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setSolution", __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[37]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_58setSolution(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_u), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "u", 0))) __PYX_ERR(37, 282, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_62setSolution(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u);
 
   /* function exit code */
   goto __pyx_L0;
@@ -175196,25 +178202,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59setSolution(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58setSolution(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62setSolution(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u) {
   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("setSolution", 0);
 
-  /* "PETSc/TS.pyx":267
+  /* "PETSc/TS.pyx":283
  * 
  *     def setSolution(self, Vec u not None):
  *         CHKERR( TSSetSolution(self.ts, u.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def getSolution(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetSolution(__pyx_v_self->ts, __pyx_v_u->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetSolution(__pyx_v_self->ts, __pyx_v_u->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 283, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":266
+  /* "PETSc/TS.pyx":282
  *     # --- solution vector ---
  * 
  *     def setSolution(self, Vec u not None):             # <<<<<<<<<<<<<<
@@ -175234,7 +178237,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58setSolution(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":269
+/* "PETSc/TS.pyx":285
  *         CHKERR( TSSetSolution(self.ts, u.vec) )
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -175243,55 +178246,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58setSolution(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_61getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_60getSolution[] = "TS.getSolution(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_61getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_65getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_64getSolution[] = "TS.getSolution(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_65getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSolution (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSolution", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSolution", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_60getSolution(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_64getSolution(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getSolution(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getSolution(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscVecObject *__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("getSolution", 0);
 
-  /* "PETSc/TS.pyx":270
+  /* "PETSc/TS.pyx":286
  * 
  *     def getSolution(self):
  *         cdef Vec u = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( TSGetSolution(self.ts, &u.vec) )
  *         PetscINCREF(u.obj)
  */
-  __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[37]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_u = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":271
+  /* "PETSc/TS.pyx":287
  *     def getSolution(self):
  *         cdef Vec u = Vec()
  *         CHKERR( TSGetSolution(self.ts, &u.vec) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(u.obj)
  *         return u
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSolution(__pyx_v_self->ts, (&__pyx_v_u->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSolution(__pyx_v_self->ts, (&__pyx_v_u->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 287, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":272
+  /* "PETSc/TS.pyx":288
  *         cdef Vec u = Vec()
  *         CHKERR( TSGetSolution(self.ts, &u.vec) )
  *         PetscINCREF(u.obj)             # <<<<<<<<<<<<<<
@@ -175300,7 +178300,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getSolution(struct PyPetscTSObj
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_u->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":273
+  /* "PETSc/TS.pyx":289
  *         CHKERR( TSGetSolution(self.ts, &u.vec) )
  *         PetscINCREF(u.obj)
  *         return u             # <<<<<<<<<<<<<<
@@ -175312,7 +178312,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getSolution(struct PyPetscTSObj
   __pyx_r = ((PyObject *)__pyx_v_u);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":269
+  /* "PETSc/TS.pyx":285
  *         CHKERR( TSSetSolution(self.ts, u.vec) )
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -175332,7 +178332,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getSolution(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":277
+/* "PETSc/TS.pyx":293
  *     # --- inner solver ---
  * 
  *     def getSNES(self):             # <<<<<<<<<<<<<<
@@ -175341,55 +178341,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getSolution(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_63getSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_62getSNES[] = "TS.getSNES(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_63getSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_67getSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_66getSNES[] = "TS.getSNES(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_67getSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSNES (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSNES", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSNES", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_62getSNES(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_66getSNES(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62getSNES(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getSNES(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscSNESObject *__pyx_v_snes = 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("getSNES", 0);
 
-  /* "PETSc/TS.pyx":278
+  /* "PETSc/TS.pyx":294
  * 
  *     def getSNES(self):
  *         cdef SNES snes = SNES()             # <<<<<<<<<<<<<<
  *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
  *         PetscINCREF(snes.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 294, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":279
+  /* "PETSc/TS.pyx":295
  *     def getSNES(self):
  *         cdef SNES snes = SNES()
  *         CHKERR( TSGetSNES(self.ts, &snes.snes) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(snes.obj)
  *         return snes
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSNES(__pyx_v_self->ts, (&__pyx_v_snes->snes))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSNES(__pyx_v_self->ts, (&__pyx_v_snes->snes))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 295, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":280
+  /* "PETSc/TS.pyx":296
  *         cdef SNES snes = SNES()
  *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
  *         PetscINCREF(snes.obj)             # <<<<<<<<<<<<<<
@@ -175398,7 +178395,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62getSNES(struct PyPetscTSObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_snes->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":281
+  /* "PETSc/TS.pyx":297
  *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
  *         PetscINCREF(snes.obj)
  *         return snes             # <<<<<<<<<<<<<<
@@ -175410,7 +178407,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62getSNES(struct PyPetscTSObject
   __pyx_r = ((PyObject *)__pyx_v_snes);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":277
+  /* "PETSc/TS.pyx":293
  *     # --- inner solver ---
  * 
  *     def getSNES(self):             # <<<<<<<<<<<<<<
@@ -175430,7 +178427,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62getSNES(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":283
+/* "PETSc/TS.pyx":299
  *         return snes
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -175439,55 +178436,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62getSNES(struct PyPetscTSObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_65getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_64getKSP[] = "TS.getKSP(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_65getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_68getKSP[] = "TS.getKSP(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getKSP (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getKSP", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKSP", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_64getKSP(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_68getKSP(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getKSP(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_68getKSP(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscKSPObject *__pyx_v_ksp = 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("getKSP", 0);
 
-  /* "PETSc/TS.pyx":284
+  /* "PETSc/TS.pyx":300
  * 
  *     def getKSP(self):
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( TSGetKSP(self.ts, &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[37]; __pyx_lineno = 284; __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(37, 300, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":285
+  /* "PETSc/TS.pyx":301
  *     def getKSP(self):
  *         cdef KSP ksp = KSP()
  *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetKSP(__pyx_v_self->ts, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetKSP(__pyx_v_self->ts, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 301, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":286
+  /* "PETSc/TS.pyx":302
  *         cdef KSP ksp = KSP()
  *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -175496,7 +178490,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getKSP(struct PyPetscTSObject *
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":287
+  /* "PETSc/TS.pyx":303
  *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -175508,7 +178502,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getKSP(struct PyPetscTSObject *
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":283
+  /* "PETSc/TS.pyx":299
  *         return snes
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -175528,7 +178522,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getKSP(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":291
+/* "PETSc/TS.pyx":307
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -175537,23 +178531,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getKSP(struct PyPetscTSObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_67getDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_66getDM[] = "TS.getDM(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_67getDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_71getDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_70getDM[] = "TS.getDM(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_71getDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDM (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getDM", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDM", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_66getDM(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_70getDM(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_70getDM(struct PyPetscTSObject *__pyx_v_self) {
   DM __pyx_v_newdm;
   struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = NULL;
@@ -175561,12 +178555,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *_
   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("getDM", 0);
 
-  /* "PETSc/TS.pyx":292
+  /* "PETSc/TS.pyx":308
  * 
  *     def getDM(self):
  *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
@@ -175575,32 +178566,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *_
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/TS.pyx":293
+  /* "PETSc/TS.pyx":309
  *     def getDM(self):
  *         cdef PetscDM newdm = NULL
  *         CHKERR( TSGetDM(self.ts, &newdm) )             # <<<<<<<<<<<<<<
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDM(__pyx_v_self->ts, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDM(__pyx_v_self->ts, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 309, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":294
+  /* "PETSc/TS.pyx":310
  *         cdef PetscDM newdm = NULL
  *         CHKERR( TSGetDM(self.ts, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()             # <<<<<<<<<<<<<<
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(37, 310, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":295
+  /* "PETSc/TS.pyx":311
  *         CHKERR( TSGetDM(self.ts, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm             # <<<<<<<<<<<<<<
@@ -175609,7 +178600,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *_
  */
   __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/TS.pyx":296
+  /* "PETSc/TS.pyx":312
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
@@ -175618,7 +178609,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *_
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":297
+  /* "PETSc/TS.pyx":313
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  *         return dm             # <<<<<<<<<<<<<<
@@ -175630,7 +178621,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *_
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":291
+  /* "PETSc/TS.pyx":307
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -175651,7 +178642,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":299
+/* "PETSc/TS.pyx":315
  *         return dm
  * 
  *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
@@ -175660,13 +178651,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66getDM(struct PyPetscTSObject *_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_68setDM[] = "TS.setDM(self, DM dm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_73setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_72setDM[] = "TS.setDM(self, DM dm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_73setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscDMObject *__pyx_v_dm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDM (wrapper)", 0);
@@ -175688,7 +178676,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69setDM(PyObject *__pyx_v_self, P
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) __PYX_ERR(37, 315, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -175699,14 +178687,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69setDM(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 315, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_68setDM(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_dm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(37, 315, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_72setDM(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
   goto __pyx_L0;
@@ -175717,25 +178705,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69setDM(PyObject *__pyx_v_self, P
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_68setDM(struct PyPetscTSObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72setDM(struct PyPetscTSObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
   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("setDM", 0);
 
-  /* "PETSc/TS.pyx":300
+  /* "PETSc/TS.pyx":316
  * 
  *     def setDM(self, DM dm not None):
  *         CHKERR( TSSetDM(self.ts, dm.dm) )             # <<<<<<<<<<<<<<
  * 
  *     # --- customization ---
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDM(__pyx_v_self->ts, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDM(__pyx_v_self->ts, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 316, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":299
+  /* "PETSc/TS.pyx":315
  *         return dm
  * 
  *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
@@ -175755,7 +178740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_68setDM(struct PyPetscTSObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":304
+/* "PETSc/TS.pyx":320
  *     # --- customization ---
  * 
  *     def setTime(self, t):             # <<<<<<<<<<<<<<
@@ -175764,13 +178749,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_68setDM(struct PyPetscTSObject *_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_71setTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_70setTime[] = "TS.setTime(self, t)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_71setTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_75setTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_74setTime[] = "TS.setTime(self, t)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_75setTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_t = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTime (wrapper)", 0);
@@ -175792,7 +178774,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_71setTime(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, "setTime") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTime") < 0)) __PYX_ERR(37, 320, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -175803,50 +178785,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_71setTime(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 320, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_70setTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_74setTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_70setTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74setTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t) {
   PetscReal __pyx_v_rval;
   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("setTime", 0);
 
-  /* "PETSc/TS.pyx":305
+  /* "PETSc/TS.pyx":321
  * 
  *     def setTime(self, t):
  *         cdef PetscReal rval = asReal(t)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetTime(self.ts, rval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 321, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":306
+  /* "PETSc/TS.pyx":322
  *     def setTime(self, t):
  *         cdef PetscReal rval = asReal(t)
  *         CHKERR( TSSetTime(self.ts, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def getTime(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTime(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTime(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 322, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":304
+  /* "PETSc/TS.pyx":320
  *     # --- customization ---
  * 
  *     def setTime(self, t):             # <<<<<<<<<<<<<<
@@ -175866,7 +178845,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_70setTime(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":308
+/* "PETSc/TS.pyx":324
  *         CHKERR( TSSetTime(self.ts, rval) )
  * 
  *     def getTime(self):             # <<<<<<<<<<<<<<
@@ -175875,34 +178854,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_70setTime(struct PyPetscTSObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_73getTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_72getTime[] = "TS.getTime(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_73getTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_77getTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_76getTime[] = "TS.getTime(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_77getTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getTime (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getTime", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTime", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_72getTime(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_76getTime(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72getTime(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76getTime(struct PyPetscTSObject *__pyx_v_self) {
   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("getTime", 0);
 
-  /* "PETSc/TS.pyx":309
+  /* "PETSc/TS.pyx":325
  * 
  *     def getTime(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -175911,30 +178887,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72getTime(struct PyPetscTSObject
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":310
+  /* "PETSc/TS.pyx":326
  *     def getTime(self):
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTime(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTime(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 326, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":311
+  /* "PETSc/TS.pyx":327
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetTime(self.ts, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- *     def getSolveTime(self):
+ *     def getPrevTime(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":308
+  /* "PETSc/TS.pyx":324
  *         CHKERR( TSSetTime(self.ts, rval) )
  * 
  *     def getTime(self):             # <<<<<<<<<<<<<<
@@ -175953,7 +178929,91 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72getTime(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":313
+/* "PETSc/TS.pyx":329
+ *         return toReal(rval)
+ * 
+ *     def getPrevTime(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetPrevTime(self.ts, &rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_79getPrevTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_78getPrevTime[] = "TS.getPrevTime(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_79getPrevTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getPrevTime (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getPrevTime", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPrevTime", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_78getPrevTime(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_78getPrevTime(struct PyPetscTSObject *__pyx_v_self) {
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getPrevTime", 0);
+
+  /* "PETSc/TS.pyx":330
+ * 
+ *     def getPrevTime(self):
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetPrevTime(self.ts, &rval) )
+ *         return toReal(rval)
+ */
+  __pyx_v_rval = 0.0;
+
+  /* "PETSc/TS.pyx":331
+ *     def getPrevTime(self):
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetPrevTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetPrevTime(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 331, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":332
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetPrevTime(self.ts, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
+ * 
+ *     def getSolveTime(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 332, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":329
+ *         return toReal(rval)
+ * 
+ *     def getPrevTime(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetPrevTime(self.ts, &rval) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getPrevTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":334
  *         return toReal(rval)
  * 
  *     def getSolveTime(self):             # <<<<<<<<<<<<<<
@@ -175962,34 +179022,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72getTime(struct PyPetscTSObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_75getSolveTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_74getSolveTime[] = "TS.getSolveTime(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_75getSolveTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_81getSolveTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_80getSolveTime[] = "TS.getSolveTime(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_81getSolveTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSolveTime (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSolveTime", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSolveTime", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_74getSolveTime(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_80getSolveTime(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74getSolveTime(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getSolveTime(struct PyPetscTSObject *__pyx_v_self) {
   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("getSolveTime", 0);
 
-  /* "PETSc/TS.pyx":314
+  /* "PETSc/TS.pyx":335
  * 
  *     def getSolveTime(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -175998,16 +179055,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74getSolveTime(struct PyPetscTSOb
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":315
+  /* "PETSc/TS.pyx":336
  *     def getSolveTime(self):
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetSolveTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSolveTime(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSolveTime(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 336, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":316
+  /* "PETSc/TS.pyx":337
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetSolveTime(self.ts, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -176015,13 +179072,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74getSolveTime(struct PyPetscTSOb
  *     def setInitialTimeStep(self, initial_time, initial_time_step):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 337, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":313
+  /* "PETSc/TS.pyx":334
  *         return toReal(rval)
  * 
  *     def getSolveTime(self):             # <<<<<<<<<<<<<<
@@ -176040,7 +179097,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74getSolveTime(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":318
+/* "PETSc/TS.pyx":339
  *         return toReal(rval)
  * 
  *     def setInitialTimeStep(self, initial_time, initial_time_step):             # <<<<<<<<<<<<<<
@@ -176049,14 +179106,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74getSolveTime(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_77setInitialTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_76setInitialTimeStep[] = "TS.setInitialTimeStep(self, initial_time, initial_time_step)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_77setInitialTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setInitialTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_82setInitialTimeStep[] = "TS.setInitialTimeStep(self, initial_time, initial_time_step)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setInitialTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_initial_time = 0;
   PyObject *__pyx_v_initial_time_step = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setInitialTimeStep (wrapper)", 0);
@@ -176080,11 +179134,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_77setInitialTimeStep(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_initial_time_step)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setInitialTimeStep", 1, 2, 2, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setInitialTimeStep", 1, 2, 2, 1); __PYX_ERR(37, 339, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialTimeStep") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialTimeStep") < 0)) __PYX_ERR(37, 339, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -176097,61 +179151,58 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_77setInitialTimeStep(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialTimeStep", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInitialTimeStep", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 339, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setInitialTimeStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_76setInitialTimeStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_initial_time, __pyx_v_initial_time_step);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_82setInitialTimeStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_initial_time, __pyx_v_initial_time_step);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76setInitialTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_initial_time, PyObject *__pyx_v_initial_time_step) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setInitialTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_initial_time, PyObject *__pyx_v_initial_time_step) {
   PetscReal __pyx_v_rval1;
   PetscReal __pyx_v_rval2;
   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("setInitialTimeStep", 0);
 
-  /* "PETSc/TS.pyx":319
+  /* "PETSc/TS.pyx":340
  * 
  *     def setInitialTimeStep(self, initial_time, initial_time_step):
  *         cdef PetscReal rval1 = asReal(initial_time)             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval2 = asReal(initial_time_step)
  *         CHKERR( TSSetInitialTimeStep(self.ts, rval1, rval2) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_initial_time); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_initial_time); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 340, __pyx_L1_error)
   __pyx_v_rval1 = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":320
+  /* "PETSc/TS.pyx":341
  *     def setInitialTimeStep(self, initial_time, initial_time_step):
  *         cdef PetscReal rval1 = asReal(initial_time)
  *         cdef PetscReal rval2 = asReal(initial_time_step)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetInitialTimeStep(self.ts, rval1, rval2) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_initial_time_step); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_initial_time_step); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 341, __pyx_L1_error)
   __pyx_v_rval2 = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":321
+  /* "PETSc/TS.pyx":342
  *         cdef PetscReal rval1 = asReal(initial_time)
  *         cdef PetscReal rval2 = asReal(initial_time_step)
  *         CHKERR( TSSetInitialTimeStep(self.ts, rval1, rval2) )             # <<<<<<<<<<<<<<
  * 
  *     def setTimeStep(self, time_step):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetInitialTimeStep(__pyx_v_self->ts, __pyx_v_rval1, __pyx_v_rval2)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetInitialTimeStep(__pyx_v_self->ts, __pyx_v_rval1, __pyx_v_rval2)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 342, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":318
+  /* "PETSc/TS.pyx":339
  *         return toReal(rval)
  * 
  *     def setInitialTimeStep(self, initial_time, initial_time_step):             # <<<<<<<<<<<<<<
@@ -176171,7 +179222,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76setInitialTimeStep(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":323
+/* "PETSc/TS.pyx":344
  *         CHKERR( TSSetInitialTimeStep(self.ts, rval1, rval2) )
  * 
  *     def setTimeStep(self, time_step):             # <<<<<<<<<<<<<<
@@ -176180,13 +179231,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76setInitialTimeStep(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_79setTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_78setTimeStep[] = "TS.setTimeStep(self, time_step)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_79setTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_85setTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_84setTimeStep[] = "TS.setTimeStep(self, time_step)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_85setTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_time_step = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTimeStep (wrapper)", 0);
@@ -176208,7 +179256,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_79setTimeStep(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTimeStep") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTimeStep") < 0)) __PYX_ERR(37, 344, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -176219,50 +179267,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_79setTimeStep(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTimeStep", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTimeStep", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 344, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setTimeStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_78setTimeStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_time_step);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_84setTimeStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_time_step);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_78setTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_time_step) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84setTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_time_step) {
   PetscReal __pyx_v_rval;
   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("setTimeStep", 0);
 
-  /* "PETSc/TS.pyx":324
+  /* "PETSc/TS.pyx":345
  * 
  *     def setTimeStep(self, time_step):
  *         cdef PetscReal rval = asReal(time_step)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetTimeStep(self.ts, rval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_time_step); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_time_step); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 345, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":325
+  /* "PETSc/TS.pyx":346
  *     def setTimeStep(self, time_step):
  *         cdef PetscReal rval = asReal(time_step)
  *         CHKERR( TSSetTimeStep(self.ts, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def getTimeStep(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTimeStep(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTimeStep(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 346, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":323
+  /* "PETSc/TS.pyx":344
  *         CHKERR( TSSetInitialTimeStep(self.ts, rval1, rval2) )
  * 
  *     def setTimeStep(self, time_step):             # <<<<<<<<<<<<<<
@@ -176282,7 +179327,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_78setTimeStep(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":327
+/* "PETSc/TS.pyx":348
  *         CHKERR( TSSetTimeStep(self.ts, rval) )
  * 
  *     def getTimeStep(self):             # <<<<<<<<<<<<<<
@@ -176291,34 +179336,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_78setTimeStep(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_81getTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_80getTimeStep[] = "TS.getTimeStep(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_81getTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_87getTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_86getTimeStep[] = "TS.getTimeStep(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_87getTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getTimeStep (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getTimeStep", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTimeStep", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_80getTimeStep(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_86getTimeStep(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getTimeStep(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86getTimeStep(struct PyPetscTSObject *__pyx_v_self) {
   PetscReal __pyx_v_tstep;
   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("getTimeStep", 0);
 
-  /* "PETSc/TS.pyx":328
+  /* "PETSc/TS.pyx":349
  * 
  *     def getTimeStep(self):
  *         cdef PetscReal tstep = 0             # <<<<<<<<<<<<<<
@@ -176327,16 +179369,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getTimeStep(struct PyPetscTSObj
  */
   __pyx_v_tstep = 0.0;
 
-  /* "PETSc/TS.pyx":329
+  /* "PETSc/TS.pyx":350
  *     def getTimeStep(self):
  *         cdef PetscReal tstep = 0
  *         CHKERR( TSGetTimeStep(self.ts, &tstep) )             # <<<<<<<<<<<<<<
  *         return toReal(tstep)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTimeStep(__pyx_v_self->ts, (&__pyx_v_tstep))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTimeStep(__pyx_v_self->ts, (&__pyx_v_tstep))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 350, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":330
+  /* "PETSc/TS.pyx":351
  *         cdef PetscReal tstep = 0
  *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
  *         return toReal(tstep)             # <<<<<<<<<<<<<<
@@ -176344,13 +179386,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getTimeStep(struct PyPetscTSObj
  *     def setStepNumber(self, step_number):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_tstep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_tstep); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 351, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":327
+  /* "PETSc/TS.pyx":348
  *         CHKERR( TSSetTimeStep(self.ts, rval) )
  * 
  *     def getTimeStep(self):             # <<<<<<<<<<<<<<
@@ -176369,7 +179411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getTimeStep(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":332
+/* "PETSc/TS.pyx":353
  *         return toReal(tstep)
  * 
  *     def setStepNumber(self, step_number):             # <<<<<<<<<<<<<<
@@ -176378,13 +179420,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getTimeStep(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_82setStepNumber[] = "TS.setStepNumber(self, step_number)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_89setStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_88setStepNumber[] = "TS.setStepNumber(self, step_number)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_89setStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_step_number = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setStepNumber (wrapper)", 0);
@@ -176406,7 +179445,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setStepNumber(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, "setStepNumber") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStepNumber") < 0)) __PYX_ERR(37, 353, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -176417,50 +179456,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setStepNumber(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setStepNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setStepNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 353, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setStepNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_82setStepNumber(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_step_number);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_88setStepNumber(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_step_number);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setStepNumber(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step_number) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88setStepNumber(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step_number) {
   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("setStepNumber", 0);
 
-  /* "PETSc/TS.pyx":333
+  /* "PETSc/TS.pyx":354
  * 
  *     def setStepNumber(self, step_number):
  *         cdef PetscInt ival = asInt(step_number)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step_number); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step_number); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(37, 354, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":334
+  /* "PETSc/TS.pyx":355
  *     def setStepNumber(self, step_number):
  *         cdef PetscInt ival = asInt(step_number)
  *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )             # <<<<<<<<<<<<<<
  * 
  *     def getStepNumber(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTimeStepNumber(__pyx_v_self->ts, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTimeStepNumber(__pyx_v_self->ts, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 355, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":332
+  /* "PETSc/TS.pyx":353
  *         return toReal(tstep)
  * 
  *     def setStepNumber(self, step_number):             # <<<<<<<<<<<<<<
@@ -176480,7 +179516,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setStepNumber(struct PyPetscTSO
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":336
+/* "PETSc/TS.pyx":357
  *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )
  * 
  *     def getStepNumber(self):             # <<<<<<<<<<<<<<
@@ -176489,34 +179525,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setStepNumber(struct PyPetscTSO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_85getStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_84getStepNumber[] = "TS.getStepNumber(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_85getStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_91getStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_90getStepNumber[] = "TS.getStepNumber(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_91getStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getStepNumber (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getStepNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getStepNumber", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_84getStepNumber(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_90getStepNumber(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84getStepNumber(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90getStepNumber(struct PyPetscTSObject *__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("getStepNumber", 0);
 
-  /* "PETSc/TS.pyx":337
+  /* "PETSc/TS.pyx":358
  * 
  *     def getStepNumber(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -176525,16 +179558,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84getStepNumber(struct PyPetscTSO
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/TS.pyx":338
+  /* "PETSc/TS.pyx":359
  *     def getStepNumber(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( TSGetTimeStepNumber(self.ts, &ival) )             # <<<<<<<<<<<<<<
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTimeStepNumber(__pyx_v_self->ts, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTimeStepNumber(__pyx_v_self->ts, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 359, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":339
+  /* "PETSc/TS.pyx":360
  *         cdef PetscInt ival = 0
  *         CHKERR( TSGetTimeStepNumber(self.ts, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -176542,13 +179575,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84getStepNumber(struct PyPetscTSO
  *     def setMaxTime(self, max_time):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 360, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":336
+  /* "PETSc/TS.pyx":357
  *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )
  * 
  *     def getStepNumber(self):             # <<<<<<<<<<<<<<
@@ -176567,7 +179600,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84getStepNumber(struct PyPetscTSO
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":341
+/* "PETSc/TS.pyx":362
  *         return toInt(ival)
  * 
  *     def setMaxTime(self, max_time):             # <<<<<<<<<<<<<<
@@ -176576,13 +179609,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84getStepNumber(struct PyPetscTSO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_87setMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_86setMaxTime[] = "TS.setMaxTime(self, max_time)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_87setMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_93setMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_92setMaxTime[] = "TS.setMaxTime(self, max_time)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_93setMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_time = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMaxTime (wrapper)", 0);
@@ -176604,7 +179634,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_87setMaxTime(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, "setMaxTime") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxTime") < 0)) __PYX_ERR(37, 362, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -176615,32 +179645,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_87setMaxTime(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMaxTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 362, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_86setMaxTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_time);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_92setMaxTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_time);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86setMaxTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92setMaxTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   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("setMaxTime", 0);
 
-  /* "PETSc/TS.pyx":342
+  /* "PETSc/TS.pyx":363
  * 
  *     def setMaxTime(self, max_time):
  *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
@@ -176649,35 +179676,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86setMaxTime(struct PyPetscTSObje
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/TS.pyx":343
+  /* "PETSc/TS.pyx":364
  *     def setMaxTime(self, max_time):
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = asReal(max_time)             # <<<<<<<<<<<<<<
  *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_max_time); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_max_time); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 364, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":344
+  /* "PETSc/TS.pyx":365
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = asReal(max_time)
  *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, (&__pyx_v_ival), NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, (&__pyx_v_ival), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 365, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":345
+  /* "PETSc/TS.pyx":366
  *         cdef PetscReal rval = asReal(max_time)
  *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def getMaxTime(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDuration(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDuration(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 366, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":341
+  /* "PETSc/TS.pyx":362
  *         return toInt(ival)
  * 
  *     def setMaxTime(self, max_time):             # <<<<<<<<<<<<<<
@@ -176697,7 +179724,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86setMaxTime(struct PyPetscTSObje
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":347
+/* "PETSc/TS.pyx":368
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  * 
  *     def getMaxTime(self):             # <<<<<<<<<<<<<<
@@ -176706,34 +179733,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86setMaxTime(struct PyPetscTSObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_89getMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_88getMaxTime[] = "TS.getMaxTime(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_89getMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_95getMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_94getMaxTime[] = "TS.getMaxTime(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_95getMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMaxTime (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMaxTime", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMaxTime", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_88getMaxTime(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_94getMaxTime(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88getMaxTime(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94getMaxTime(struct PyPetscTSObject *__pyx_v_self) {
   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("getMaxTime", 0);
 
-  /* "PETSc/TS.pyx":348
+  /* "PETSc/TS.pyx":369
  * 
  *     def getMaxTime(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -176742,16 +179766,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88getMaxTime(struct PyPetscTSObje
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":349
+  /* "PETSc/TS.pyx":370
  *     def getMaxTime(self):
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, NULL, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, NULL, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 370, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":350
+  /* "PETSc/TS.pyx":371
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -176759,13 +179783,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88getMaxTime(struct PyPetscTSObje
  *     def setMaxSteps(self, max_steps):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 371, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":347
+  /* "PETSc/TS.pyx":368
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  * 
  *     def getMaxTime(self):             # <<<<<<<<<<<<<<
@@ -176784,7 +179808,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88getMaxTime(struct PyPetscTSObje
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":352
+/* "PETSc/TS.pyx":373
  *         return toReal(rval)
  * 
  *     def setMaxSteps(self, max_steps):             # <<<<<<<<<<<<<<
@@ -176793,13 +179817,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88getMaxTime(struct PyPetscTSObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_91setMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_90setMaxSteps[] = "TS.setMaxSteps(self, max_steps)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_91setMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_97setMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_96setMaxSteps[] = "TS.setMaxSteps(self, max_steps)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_97setMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_steps = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMaxSteps (wrapper)", 0);
@@ -176821,7 +179842,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_91setMaxSteps(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxSteps") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxSteps") < 0)) __PYX_ERR(37, 373, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -176832,42 +179853,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_91setMaxSteps(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxSteps", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMaxSteps", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 373, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_90setMaxSteps(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_steps);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_96setMaxSteps(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_steps);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90setMaxSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_steps) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96setMaxSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_steps) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   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("setMaxSteps", 0);
 
-  /* "PETSc/TS.pyx":353
+  /* "PETSc/TS.pyx":374
  * 
  *     def setMaxSteps(self, max_steps):
  *         cdef PetscInt  ival = asInt(max_steps)             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_steps); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_steps); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(37, 374, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":354
+  /* "PETSc/TS.pyx":375
  *     def setMaxSteps(self, max_steps):
  *         cdef PetscInt  ival = asInt(max_steps)
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -176876,25 +179894,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90setMaxSteps(struct PyPetscTSObj
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":355
+  /* "PETSc/TS.pyx":376
  *         cdef PetscInt  ival = asInt(max_steps)
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, NULL, (&__pyx_v_rval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, NULL, (&__pyx_v_rval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 376, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":356
+  /* "PETSc/TS.pyx":377
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def getMaxSteps(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDuration(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDuration(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 377, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":352
+  /* "PETSc/TS.pyx":373
  *         return toReal(rval)
  * 
  *     def setMaxSteps(self, max_steps):             # <<<<<<<<<<<<<<
@@ -176914,7 +179932,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90setMaxSteps(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":358
+/* "PETSc/TS.pyx":379
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  * 
  *     def getMaxSteps(self):             # <<<<<<<<<<<<<<
@@ -176923,34 +179941,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90setMaxSteps(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_93getMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_92getMaxSteps[] = "TS.getMaxSteps(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_93getMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_99getMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_98getMaxSteps[] = "TS.getMaxSteps(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_99getMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMaxSteps (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMaxSteps", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMaxSteps", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_92getMaxSteps(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_98getMaxSteps(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92getMaxSteps(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getMaxSteps(struct PyPetscTSObject *__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("getMaxSteps", 0);
 
-  /* "PETSc/TS.pyx":359
+  /* "PETSc/TS.pyx":380
  * 
  *     def getMaxSteps(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -176959,16 +179974,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92getMaxSteps(struct PyPetscTSObj
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/TS.pyx":360
+  /* "PETSc/TS.pyx":381
  *     def getMaxSteps(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )             # <<<<<<<<<<<<<<
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, (&__pyx_v_ival), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, (&__pyx_v_ival), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 381, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":361
+  /* "PETSc/TS.pyx":382
  *         cdef PetscInt ival = 0
  *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -176976,13 +179991,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92getMaxSteps(struct PyPetscTSObj
  *     def setDuration(self, max_time, max_steps=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 382, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":358
+  /* "PETSc/TS.pyx":379
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  * 
  *     def getMaxSteps(self):             # <<<<<<<<<<<<<<
@@ -177001,7 +180016,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92getMaxSteps(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":363
+/* "PETSc/TS.pyx":384
  *         return toInt(ival)
  * 
  *     def setDuration(self, max_time, max_steps=None):             # <<<<<<<<<<<<<<
@@ -177010,14 +180025,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92getMaxSteps(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_95setDuration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_94setDuration[] = "TS.setDuration(self, max_time, max_steps=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_95setDuration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_101setDuration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_100setDuration[] = "TS.setDuration(self, max_time, max_steps=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_101setDuration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_time = 0;
   PyObject *__pyx_v_max_steps = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDuration (wrapper)", 0);
@@ -177046,7 +180058,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_95setDuration(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDuration") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDuration") < 0)) __PYX_ERR(37, 384, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -177061,20 +180073,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_95setDuration(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDuration", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDuration", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 384, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setDuration", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_time, __pyx_v_max_steps);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_100setDuration(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_time, __pyx_v_max_steps);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time, PyObject *__pyx_v_max_steps) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100setDuration(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time, PyObject *__pyx_v_max_steps) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -177084,12 +180096,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObj
   int __pyx_t_3;
   PetscInt __pyx_t_4;
   PetscReal __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setDuration", 0);
 
-  /* "PETSc/TS.pyx":364
+  /* "PETSc/TS.pyx":385
  * 
  *     def setDuration(self, max_time, max_steps=None):
  *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
@@ -177098,7 +180107,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObj
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/TS.pyx":365
+  /* "PETSc/TS.pyx":386
  *     def setDuration(self, max_time, max_steps=None):
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -177107,16 +180116,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObj
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":366
+  /* "PETSc/TS.pyx":387
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )             # <<<<<<<<<<<<<<
  *         if max_steps is not None: ival = asInt(max_steps)
  *         if max_time  is not None: rval = asReal(max_time)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 387, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":367
+  /* "PETSc/TS.pyx":388
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
  *         if max_steps is not None: ival = asInt(max_steps)             # <<<<<<<<<<<<<<
@@ -177126,13 +180135,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObj
   __pyx_t_2 = (__pyx_v_max_steps != Py_None);
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_steps); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_steps); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(37, 388, __pyx_L1_error)
     __pyx_v_ival = __pyx_t_4;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":368
+  /* "PETSc/TS.pyx":389
  *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
  *         if max_steps is not None: ival = asInt(max_steps)
  *         if max_time  is not None: rval = asReal(max_time)             # <<<<<<<<<<<<<<
@@ -177142,22 +180149,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObj
   __pyx_t_3 = (__pyx_v_max_time != Py_None);
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_max_time); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_max_time); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 389, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_5;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TS.pyx":369
+  /* "PETSc/TS.pyx":390
  *         if max_steps is not None: ival = asInt(max_steps)
  *         if max_time  is not None: rval = asReal(max_time)
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def getDuration(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDuration(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDuration(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 390, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":363
+  /* "PETSc/TS.pyx":384
  *         return toInt(ival)
  * 
  *     def setDuration(self, max_time, max_steps=None):             # <<<<<<<<<<<<<<
@@ -177177,7 +180182,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":371
+/* "PETSc/TS.pyx":392
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  * 
  *     def getDuration(self):             # <<<<<<<<<<<<<<
@@ -177186,23 +180191,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setDuration(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_97getDuration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_96getDuration[] = "TS.getDuration(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_97getDuration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_103getDuration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_102getDuration[] = "TS.getDuration(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_103getDuration(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDuration (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getDuration", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDuration", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_96getDuration(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_102getDuration(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getDuration(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102getDuration(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -177211,12 +180216,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getDuration(struct PyPetscTSObj
   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("getDuration", 0);
 
-  /* "PETSc/TS.pyx":372
+  /* "PETSc/TS.pyx":393
  * 
  *     def getDuration(self):
  *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
@@ -177225,7 +180227,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getDuration(struct PyPetscTSObj
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/TS.pyx":373
+  /* "PETSc/TS.pyx":394
  *     def getDuration(self):
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -177234,28 +180236,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getDuration(struct PyPetscTSObj
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":374
+  /* "PETSc/TS.pyx":395
  *         cdef PetscInt  ival = 0
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )             # <<<<<<<<<<<<<<
  *         return (toReal(rval), toInt(ival))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetDuration(__pyx_v_self->ts, (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 395, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":375
+  /* "PETSc/TS.pyx":396
  *         cdef PetscReal rval = 0
  *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
  *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
  * 
- *     def getSNESIterations(self):
+ *     def getTotalSteps(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 396, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 396, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 396, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -177267,7 +180269,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getDuration(struct PyPetscTSObj
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":371
+  /* "PETSc/TS.pyx":392
  *         CHKERR( TSSetDuration(self.ts, ival, rval) )
  * 
  *     def getDuration(self):             # <<<<<<<<<<<<<<
@@ -177288,43 +180290,124 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getDuration(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":377
+/* "PETSc/TS.pyx":398
+ *         return (toReal(rval), toInt(ival))
+ * 
+ *     def getTotalSteps(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = 0
+ *         CHKERR( TSGetTotalSteps(self.ts, &ival) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_105getTotalSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_104getTotalSteps[] = "TS.getTotalSteps(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_105getTotalSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getTotalSteps (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getTotalSteps", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTotalSteps", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_104getTotalSteps(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getTotalSteps(struct PyPetscTSObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getTotalSteps", 0);
+
+  /* "PETSc/TS.pyx":399
+ * 
+ *     def getTotalSteps(self):
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetTotalSteps(self.ts, &ival) )
+ *         return toInt(ival)
+ */
+  __pyx_v_ival = 0;
+
+  /* "PETSc/TS.pyx":400
+ *     def getTotalSteps(self):
+ *         cdef PetscInt ival = 0
+ *         CHKERR( TSGetTotalSteps(self.ts, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTotalSteps(__pyx_v_self->ts, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 400, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":401
+ *         cdef PetscInt ival = 0
+ *         CHKERR( TSGetTotalSteps(self.ts, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
+ * 
+ *     def getSNESIterations(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 401, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":398
  *         return (toReal(rval), toInt(ival))
  * 
+ *     def getTotalSteps(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = 0
+ *         CHKERR( TSGetTotalSteps(self.ts, &ival) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getTotalSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":403
+ *         return toInt(ival)
+ * 
  *     def getSNESIterations(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetSNESIterations(self.ts, &n) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_99getSNESIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_98getSNESIterations[] = "TS.getSNESIterations(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_99getSNESIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_107getSNESIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_106getSNESIterations[] = "TS.getSNESIterations(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_107getSNESIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSNESIterations (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSNESIterations", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSNESIterations", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_98getSNESIterations(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getSNESIterations(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   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("getSNESIterations", 0);
 
-  /* "PETSc/TS.pyx":378
+  /* "PETSc/TS.pyx":404
  * 
  *     def getSNESIterations(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -177333,16 +180416,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getSNESIterations(struct PyPets
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/TS.pyx":379
+  /* "PETSc/TS.pyx":405
  *     def getSNESIterations(self):
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetSNESIterations(self.ts, &n) )             # <<<<<<<<<<<<<<
  *         return toInt(n)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSNESIterations(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSNESIterations(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 405, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":380
+  /* "PETSc/TS.pyx":406
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetSNESIterations(self.ts, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -177350,14 +180433,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getSNESIterations(struct PyPets
  *     def getKSPIterations(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":377
- *         return (toReal(rval), toInt(ival))
+  /* "PETSc/TS.pyx":403
+ *         return toInt(ival)
  * 
  *     def getSNESIterations(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt n = 0
@@ -177375,7 +180458,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getSNESIterations(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":382
+/* "PETSc/TS.pyx":408
  *         return toInt(n)
  * 
  *     def getKSPIterations(self):             # <<<<<<<<<<<<<<
@@ -177384,34 +180467,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getSNESIterations(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_101getKSPIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_100getKSPIterations[] = "TS.getKSPIterations(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_101getKSPIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_109getKSPIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_108getKSPIterations[] = "TS.getKSPIterations(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_109getKSPIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getKSPIterations (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getKSPIterations", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKSPIterations", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_100getKSPIterations(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100getKSPIterations(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   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("getKSPIterations", 0);
 
-  /* "PETSc/TS.pyx":383
+  /* "PETSc/TS.pyx":409
  * 
  *     def getKSPIterations(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -177420,16 +180500,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100getKSPIterations(struct PyPets
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/TS.pyx":384
+  /* "PETSc/TS.pyx":410
  *     def getKSPIterations(self):
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetKSPIterations(self.ts, &n) )             # <<<<<<<<<<<<<<
  *         return toInt(n)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetKSPIterations(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetKSPIterations(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 410, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":385
+  /* "PETSc/TS.pyx":411
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetKSPIterations(self.ts, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -177437,13 +180517,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100getKSPIterations(struct PyPets
  *     def setMaxStepRejections(self, n):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":382
+  /* "PETSc/TS.pyx":408
  *         return toInt(n)
  * 
  *     def getKSPIterations(self):             # <<<<<<<<<<<<<<
@@ -177462,7 +180542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100getKSPIterations(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":387
+/* "PETSc/TS.pyx":413
  *         return toInt(n)
  * 
  *     def setMaxStepRejections(self, n):             # <<<<<<<<<<<<<<
@@ -177471,13 +180551,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100getKSPIterations(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_103setMaxStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_102setMaxStepRejections[] = "TS.setMaxStepRejections(self, n)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_103setMaxStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_110setMaxStepRejections[] = "TS.setMaxStepRejections(self, n)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxStepRejections(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMaxStepRejections (wrapper)", 0);
@@ -177499,7 +180576,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_103setMaxStepRejections(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxStepRejections") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxStepRejections") < 0)) __PYX_ERR(37, 413, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -177510,50 +180587,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_103setMaxStepRejections(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxStepRejections", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMaxStepRejections", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 413, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxStepRejections", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_102setMaxStepRejections(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_n);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_110setMaxStepRejections(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_n);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102setMaxStepRejections(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setMaxStepRejections(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n) {
   PetscInt __pyx_v_rej;
   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("setMaxStepRejections", 0);
 
-  /* "PETSc/TS.pyx":388
+  /* "PETSc/TS.pyx":414
  * 
  *     def setMaxStepRejections(self, n):
  *         cdef PetscInt rej = asInt(n)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetMaxStepRejections(self.ts, rej))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(37, 414, __pyx_L1_error)
   __pyx_v_rej = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":389
+  /* "PETSc/TS.pyx":415
  *     def setMaxStepRejections(self, n):
  *         cdef PetscInt rej = asInt(n)
  *         CHKERR( TSSetMaxStepRejections(self.ts, rej))             # <<<<<<<<<<<<<<
  * 
  *     #def getMaxStepRejections(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetMaxStepRejections(__pyx_v_self->ts, __pyx_v_rej)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetMaxStepRejections(__pyx_v_self->ts, __pyx_v_rej)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 415, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":387
+  /* "PETSc/TS.pyx":413
  *         return toInt(n)
  * 
  *     def setMaxStepRejections(self, n):             # <<<<<<<<<<<<<<
@@ -177573,7 +180647,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102setMaxStepRejections(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":396
+/* "PETSc/TS.pyx":422
  *     #    return toInt(n)
  * 
  *     def getStepRejections(self):             # <<<<<<<<<<<<<<
@@ -177582,34 +180656,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102setMaxStepRejections(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_105getStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_104getStepRejections[] = "TS.getStepRejections(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_105getStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_113getStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_112getStepRejections[] = "TS.getStepRejections(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_113getStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getStepRejections (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getStepRejections", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getStepRejections", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_104getStepRejections(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getStepRejections(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   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("getStepRejections", 0);
 
-  /* "PETSc/TS.pyx":397
+  /* "PETSc/TS.pyx":423
  * 
  *     def getStepRejections(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -177618,16 +180689,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getStepRejections(struct PyPet
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/TS.pyx":398
+  /* "PETSc/TS.pyx":424
  *     def getStepRejections(self):
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetStepRejections(self.ts, &n) )             # <<<<<<<<<<<<<<
  *         return toInt(n)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetStepRejections(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetStepRejections(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 424, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":399
+  /* "PETSc/TS.pyx":425
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetStepRejections(self.ts, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -177635,13 +180706,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getStepRejections(struct PyPet
  *     def setMaxSNESFailures(self, n):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 425, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":396
+  /* "PETSc/TS.pyx":422
  *     #    return toInt(n)
  * 
  *     def getStepRejections(self):             # <<<<<<<<<<<<<<
@@ -177660,7 +180731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getStepRejections(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":401
+/* "PETSc/TS.pyx":427
  *         return toInt(n)
  * 
  *     def setMaxSNESFailures(self, n):             # <<<<<<<<<<<<<<
@@ -177669,13 +180740,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getStepRejections(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_107setMaxSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_106setMaxSNESFailures[] = "TS.setMaxSNESFailures(self, n)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_107setMaxSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_114setMaxSNESFailures[] = "TS.setMaxSNESFailures(self, n)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSNESFailures(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMaxSNESFailures (wrapper)", 0);
@@ -177697,7 +180765,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_107setMaxSNESFailures(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxSNESFailures") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxSNESFailures") < 0)) __PYX_ERR(37, 427, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -177708,50 +180776,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_107setMaxSNESFailures(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxSNESFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMaxSNESFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 427, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxSNESFailures", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_106setMaxSNESFailures(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_n);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSNESFailures(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_n);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106setMaxSNESFailures(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSNESFailures(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n) {
   PetscInt __pyx_v_fails;
   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("setMaxSNESFailures", 0);
 
-  /* "PETSc/TS.pyx":402
+  /* "PETSc/TS.pyx":428
  * 
  *     def setMaxSNESFailures(self, n):
  *         cdef PetscInt fails = asInt(n)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetMaxSNESFailures(self.ts, fails))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(37, 428, __pyx_L1_error)
   __pyx_v_fails = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":403
+  /* "PETSc/TS.pyx":429
  *     def setMaxSNESFailures(self, n):
  *         cdef PetscInt fails = asInt(n)
  *         CHKERR( TSSetMaxSNESFailures(self.ts, fails))             # <<<<<<<<<<<<<<
  * 
  *     #def getMaxSNESFailures(self, n):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetMaxSNESFailures(__pyx_v_self->ts, __pyx_v_fails)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetMaxSNESFailures(__pyx_v_self->ts, __pyx_v_fails)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 429, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":401
+  /* "PETSc/TS.pyx":427
  *         return toInt(n)
  * 
  *     def setMaxSNESFailures(self, n):             # <<<<<<<<<<<<<<
@@ -177771,7 +180836,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106setMaxSNESFailures(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":410
+/* "PETSc/TS.pyx":436
  *     #    return toInt(n)
  * 
  *     def getSNESFailures(self):             # <<<<<<<<<<<<<<
@@ -177780,34 +180845,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106setMaxSNESFailures(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_109getSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_108getSNESFailures[] = "TS.getSNESFailures(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_109getSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_117getSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_116getSNESFailures[] = "TS.getSNESFailures(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_117getSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSNESFailures (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSNESFailures", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSNESFailures", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_108getSNESFailures(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getSNESFailures(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   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("getSNESFailures", 0);
 
-  /* "PETSc/TS.pyx":411
+  /* "PETSc/TS.pyx":437
  * 
  *     def getSNESFailures(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -177816,16 +180878,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getSNESFailures(struct PyPetsc
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/TS.pyx":412
+  /* "PETSc/TS.pyx":438
  *     def getSNESFailures(self):
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetSNESFailures(self.ts, &n) )             # <<<<<<<<<<<<<<
  *         return toInt(n)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSNESFailures(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSNESFailures(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 438, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":413
+  /* "PETSc/TS.pyx":439
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetSNESFailures(self.ts, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -177833,13 +180895,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getSNESFailures(struct PyPetsc
  *     def setErrorIfStepFails(self, flag=True):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 439, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":410
+  /* "PETSc/TS.pyx":436
  *     #    return toInt(n)
  * 
  *     def getSNESFailures(self):             # <<<<<<<<<<<<<<
@@ -177858,7 +180920,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getSNESFailures(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":415
+/* "PETSc/TS.pyx":441
  *         return toInt(n)
  * 
  *     def setErrorIfStepFails(self, flag=True):             # <<<<<<<<<<<<<<
@@ -177867,13 +180929,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getSNESFailures(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setErrorIfStepFails(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_110setErrorIfStepFails[] = "TS.setErrorIfStepFails(self, flag=True)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setErrorIfStepFails(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setErrorIfStepFails(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_118setErrorIfStepFails[] = "TS.setErrorIfStepFails(self, flag=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setErrorIfStepFails(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("setErrorIfStepFails (wrapper)", 0);
@@ -177898,7 +180957,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setErrorIfStepFails(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setErrorIfStepFails") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setErrorIfStepFails") < 0)) __PYX_ERR(37, 441, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -177911,50 +180970,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setErrorIfStepFails(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setErrorIfStepFails", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setErrorIfStepFails", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 441, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setErrorIfStepFails", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_110setErrorIfStepFails(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_118setErrorIfStepFails(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setErrorIfStepFails(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setErrorIfStepFails(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag) {
   PetscBool __pyx_v_bval;
   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("setErrorIfStepFails", 0);
 
-  /* "PETSc/TS.pyx":416
+  /* "PETSc/TS.pyx":442
  * 
  *     def setErrorIfStepFails(self, flag=True):
  *         cdef PetscBool bval = flag             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetErrorIfStepFails(self.ts, bval))
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 442, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":417
+  /* "PETSc/TS.pyx":443
  *     def setErrorIfStepFails(self, flag=True):
  *         cdef PetscBool bval = flag
  *         CHKERR( TSSetErrorIfStepFails(self.ts, bval))             # <<<<<<<<<<<<<<
  * 
  *     def setTolerances(self, rtol=None, atol=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetErrorIfStepFails(__pyx_v_self->ts, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetErrorIfStepFails(__pyx_v_self->ts, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 443, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":415
+  /* "PETSc/TS.pyx":441
  *         return toInt(n)
  * 
  *     def setErrorIfStepFails(self, flag=True):             # <<<<<<<<<<<<<<
@@ -177974,7 +181030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setErrorIfStepFails(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":419
+/* "PETSc/TS.pyx":445
  *         CHKERR( TSSetErrorIfStepFails(self.ts, bval))
  * 
  *     def setTolerances(self, rtol=None, atol=None):             # <<<<<<<<<<<<<<
@@ -177983,14 +181039,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setErrorIfStepFails(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_113setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_112setTolerances[] = "TS.setTolerances(self, rtol=None, atol=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_113setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_120setTolerances[] = "TS.setTolerances(self, rtol=None, atol=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rtol = 0;
   PyObject *__pyx_v_atol = 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);
@@ -178022,7 +181075,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_113setTolerances(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(37, 445, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -178037,20 +181090,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_113setTolerances(PyObject *__pyx_
   }
   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[37]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 445, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol) {
   PetscReal __pyx_v_rrtol;
   PetscReal __pyx_v_ratol;
   Vec __pyx_v_vrtol;
@@ -178062,12 +181115,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
   Vec __pyx_t_3;
   PetscReal __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "PETSc/TS.pyx":420
+  /* "PETSc/TS.pyx":446
  * 
  *     def setTolerances(self, rtol=None, atol=None):
  *         cdef PetscReal rrtol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -178076,7 +181126,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
  */
   __pyx_v_rrtol = PETSC_DEFAULT;
 
-  /* "PETSc/TS.pyx":421
+  /* "PETSc/TS.pyx":447
  *     def setTolerances(self, rtol=None, atol=None):
  *         cdef PetscReal rrtol = PETSC_DEFAULT
  *         cdef PetscReal ratol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -178085,7 +181135,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
  */
   __pyx_v_ratol = PETSC_DEFAULT;
 
-  /* "PETSc/TS.pyx":422
+  /* "PETSc/TS.pyx":448
  *         cdef PetscReal rrtol = PETSC_DEFAULT
  *         cdef PetscReal ratol = PETSC_DEFAULT
  *         cdef PetscVec  vrtol = NULL             # <<<<<<<<<<<<<<
@@ -178094,7 +181144,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
  */
   __pyx_v_vrtol = NULL;
 
-  /* "PETSc/TS.pyx":423
+  /* "PETSc/TS.pyx":449
  *         cdef PetscReal ratol = PETSC_DEFAULT
  *         cdef PetscVec  vrtol = NULL
  *         cdef PetscVec  vatol = NULL             # <<<<<<<<<<<<<<
@@ -178103,7 +181153,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
  */
   __pyx_v_vatol = NULL;
 
-  /* "PETSc/TS.pyx":424
+  /* "PETSc/TS.pyx":450
  *         cdef PetscVec  vrtol = NULL
  *         cdef PetscVec  vatol = NULL
  *         if rtol is None:             # <<<<<<<<<<<<<<
@@ -178116,18 +181166,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
     goto __pyx_L3;
   }
 
-  /* "PETSc/TS.pyx":426
+  /* "PETSc/TS.pyx":452
  *         if rtol is None:
  *             pass
  *         elif isinstance(rtol, Vec):             # <<<<<<<<<<<<<<
  *             vrtol = (<Vec>rtol).vec
  *         else:
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_rtol, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_rtol, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":427
+    /* "PETSc/TS.pyx":453
  *             pass
  *         elif isinstance(rtol, Vec):
  *             vrtol = (<Vec>rtol).vec             # <<<<<<<<<<<<<<
@@ -178136,23 +181186,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
  */
     __pyx_t_3 = ((struct PyPetscVecObject *)__pyx_v_rtol)->vec;
     __pyx_v_vrtol = __pyx_t_3;
+
+    /* "PETSc/TS.pyx":452
+ *         if rtol is None:
+ *             pass
+ *         elif isinstance(rtol, Vec):             # <<<<<<<<<<<<<<
+ *             vrtol = (<Vec>rtol).vec
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":429
+  /* "PETSc/TS.pyx":455
  *             vrtol = (<Vec>rtol).vec
  *         else:
  *             rrtol = asReal(rtol)             # <<<<<<<<<<<<<<
  *         if atol is None:
  *             pass
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 455, __pyx_L1_error)
     __pyx_v_rrtol = __pyx_t_4;
   }
   __pyx_L3:;
 
-  /* "PETSc/TS.pyx":430
+  /* "PETSc/TS.pyx":456
  *         else:
  *             rrtol = asReal(rtol)
  *         if atol is None:             # <<<<<<<<<<<<<<
@@ -178165,18 +181223,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
     goto __pyx_L4;
   }
 
-  /* "PETSc/TS.pyx":432
+  /* "PETSc/TS.pyx":458
  *         if atol is None:
  *             pass
  *         elif isinstance(atol, Vec):             # <<<<<<<<<<<<<<
  *             vatol = (<Vec>atol).vec
  *         else:
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_atol, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_atol, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":433
+    /* "PETSc/TS.pyx":459
  *             pass
  *         elif isinstance(atol, Vec):
  *             vatol = (<Vec>atol).vec             # <<<<<<<<<<<<<<
@@ -178185,32 +181243,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
  */
     __pyx_t_3 = ((struct PyPetscVecObject *)__pyx_v_atol)->vec;
     __pyx_v_vatol = __pyx_t_3;
+
+    /* "PETSc/TS.pyx":458
+ *         if atol is None:
+ *             pass
+ *         elif isinstance(atol, Vec):             # <<<<<<<<<<<<<<
+ *             vatol = (<Vec>atol).vec
+ *         else:
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":435
+  /* "PETSc/TS.pyx":461
  *             vatol = (<Vec>atol).vec
  *         else:
  *             ratol = asReal(atol)             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetTolerances(self.ts, ratol, vatol, rrtol, vrtol) )
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 461, __pyx_L1_error)
     __pyx_v_ratol = __pyx_t_4;
   }
   __pyx_L4:;
 
-  /* "PETSc/TS.pyx":436
+  /* "PETSc/TS.pyx":462
  *         else:
  *             ratol = asReal(atol)
  *         CHKERR( TSSetTolerances(self.ts, ratol, vatol, rrtol, vrtol) )             # <<<<<<<<<<<<<<
  * 
  *     def getTolerances(self):
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTolerances(__pyx_v_self->ts, __pyx_v_ratol, __pyx_v_vatol, __pyx_v_rrtol, __pyx_v_vrtol)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTolerances(__pyx_v_self->ts, __pyx_v_ratol, __pyx_v_vatol, __pyx_v_rrtol, __pyx_v_vrtol)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 462, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":419
+  /* "PETSc/TS.pyx":445
  *         CHKERR( TSSetErrorIfStepFails(self.ts, bval))
  * 
  *     def setTolerances(self, rtol=None, atol=None):             # <<<<<<<<<<<<<<
@@ -178230,7 +181296,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":438
+/* "PETSc/TS.pyx":464
  *         CHKERR( TSSetTolerances(self.ts, ratol, vatol, rrtol, vrtol) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -178239,23 +181305,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112setTolerances(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_114getTolerances[] = "TS.getTolerances(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_122getTolerances[] = "TS.getTolerances(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123getTolerances(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_8petsc4py_5PETSc_2TS_114getTolerances(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTSObject *__pyx_v_self) {
   PetscReal __pyx_v_rrtol;
   PetscReal __pyx_v_ratol;
   Vec __pyx_v_vrtol;
@@ -178267,12 +181333,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
   int __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("getTolerances", 0);
 
-  /* "PETSc/TS.pyx":439
+  /* "PETSc/TS.pyx":465
  * 
  *     def getTolerances(self):
  *         cdef PetscReal rrtol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -178281,7 +181344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
  */
   __pyx_v_rrtol = PETSC_DEFAULT;
 
-  /* "PETSc/TS.pyx":440
+  /* "PETSc/TS.pyx":466
  *     def getTolerances(self):
  *         cdef PetscReal rrtol = PETSC_DEFAULT
  *         cdef PetscReal ratol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -178290,7 +181353,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
  */
   __pyx_v_ratol = PETSC_DEFAULT;
 
-  /* "PETSc/TS.pyx":441
+  /* "PETSc/TS.pyx":467
  *         cdef PetscReal rrtol = PETSC_DEFAULT
  *         cdef PetscReal ratol = PETSC_DEFAULT
  *         cdef PetscVec  vrtol = NULL             # <<<<<<<<<<<<<<
@@ -178299,7 +181362,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
  */
   __pyx_v_vrtol = NULL;
 
-  /* "PETSc/TS.pyx":442
+  /* "PETSc/TS.pyx":468
  *         cdef PetscReal ratol = PETSC_DEFAULT
  *         cdef PetscVec  vrtol = NULL
  *         cdef PetscVec  vatol = NULL             # <<<<<<<<<<<<<<
@@ -178308,16 +181371,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
  */
   __pyx_v_vatol = NULL;
 
-  /* "PETSc/TS.pyx":443
+  /* "PETSc/TS.pyx":469
  *         cdef PetscVec  vrtol = NULL
  *         cdef PetscVec  vatol = NULL
  *         CHKERR( TSGetTolerances(self.ts, &ratol, &vatol, &rrtol, &vrtol) )             # <<<<<<<<<<<<<<
  *         cdef object rtol = None
  *         if vrtol != NULL:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTolerances(__pyx_v_self->ts, (&__pyx_v_ratol), (&__pyx_v_vatol), (&__pyx_v_rrtol), (&__pyx_v_vrtol))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTolerances(__pyx_v_self->ts, (&__pyx_v_ratol), (&__pyx_v_vatol), (&__pyx_v_rrtol), (&__pyx_v_vrtol))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 469, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":444
+  /* "PETSc/TS.pyx":470
  *         cdef PetscVec  vatol = NULL
  *         CHKERR( TSGetTolerances(self.ts, &ratol, &vatol, &rrtol, &vrtol) )
  *         cdef object rtol = None             # <<<<<<<<<<<<<<
@@ -178327,7 +181390,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
   __Pyx_INCREF(Py_None);
   __pyx_v_rtol = Py_None;
 
-  /* "PETSc/TS.pyx":445
+  /* "PETSc/TS.pyx":471
  *         CHKERR( TSGetTolerances(self.ts, &ratol, &vatol, &rrtol, &vrtol) )
  *         cdef object rtol = None
  *         if vrtol != NULL:             # <<<<<<<<<<<<<<
@@ -178337,36 +181400,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
   __pyx_t_2 = ((__pyx_v_vrtol != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":446
+    /* "PETSc/TS.pyx":472
  *         cdef object rtol = None
  *         if vrtol != NULL:
  *             rtol = ref_Vec(vrtol)             # <<<<<<<<<<<<<<
  *         else:
  *             rtol = toReal(rrtol)
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_vrtol)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_vrtol)); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 472, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_rtol, __pyx_t_3);
     __pyx_t_3 = 0;
+
+    /* "PETSc/TS.pyx":471
+ *         CHKERR( TSGetTolerances(self.ts, &ratol, &vatol, &rrtol, &vrtol) )
+ *         cdef object rtol = None
+ *         if vrtol != NULL:             # <<<<<<<<<<<<<<
+ *             rtol = ref_Vec(vrtol)
+ *         else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":448
+  /* "PETSc/TS.pyx":474
  *             rtol = ref_Vec(vrtol)
  *         else:
  *             rtol = toReal(rrtol)             # <<<<<<<<<<<<<<
  *         cdef object atol = None
  *         if vatol != NULL:
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rrtol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rrtol); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 474, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_rtol, __pyx_t_3);
     __pyx_t_3 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/TS.pyx":449
+  /* "PETSc/TS.pyx":475
  *         else:
  *             rtol = toReal(rrtol)
  *         cdef object atol = None             # <<<<<<<<<<<<<<
@@ -178376,7 +181447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
   __Pyx_INCREF(Py_None);
   __pyx_v_atol = Py_None;
 
-  /* "PETSc/TS.pyx":450
+  /* "PETSc/TS.pyx":476
  *             rtol = toReal(rrtol)
  *         cdef object atol = None
  *         if vatol != NULL:             # <<<<<<<<<<<<<<
@@ -178386,36 +181457,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
   __pyx_t_2 = ((__pyx_v_vatol != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":451
+    /* "PETSc/TS.pyx":477
  *         cdef object atol = None
  *         if vatol != NULL:
  *             atol = ref_Vec(vatol)             # <<<<<<<<<<<<<<
  *         else:
  *             atol = toReal(ratol)
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_vatol)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_vatol)); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 477, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_atol, __pyx_t_3);
     __pyx_t_3 = 0;
+
+    /* "PETSc/TS.pyx":476
+ *             rtol = toReal(rrtol)
+ *         cdef object atol = None
+ *         if vatol != NULL:             # <<<<<<<<<<<<<<
+ *             atol = ref_Vec(vatol)
+ *         else:
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":453
+  /* "PETSc/TS.pyx":479
  *             atol = ref_Vec(vatol)
  *         else:
  *             atol = toReal(ratol)             # <<<<<<<<<<<<<<
  *         return (rtol, atol)
  * 
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_ratol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_ratol); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 479, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_atol, __pyx_t_3);
     __pyx_t_3 = 0;
   }
   __pyx_L4:;
 
-  /* "PETSc/TS.pyx":454
+  /* "PETSc/TS.pyx":480
  *         else:
  *             atol = toReal(ratol)
  *         return (rtol, atol)             # <<<<<<<<<<<<<<
@@ -178423,7 +181502,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
  *     def setExactFinalTime(self, option):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 480, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_rtol);
   __Pyx_GIVEREF(__pyx_v_rtol);
@@ -178435,7 +181514,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":438
+  /* "PETSc/TS.pyx":464
  *         CHKERR( TSSetTolerances(self.ts, ratol, vatol, rrtol, vrtol) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -178456,7 +181535,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":456
+/* "PETSc/TS.pyx":482
  *         return (rtol, atol)
  * 
  *     def setExactFinalTime(self, option):             # <<<<<<<<<<<<<<
@@ -178465,13 +181544,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114getTolerances(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_117setExactFinalTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_116setExactFinalTime[] = "TS.setExactFinalTime(self, option)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_117setExactFinalTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125setExactFinalTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_124setExactFinalTime[] = "TS.setExactFinalTime(self, option)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125setExactFinalTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_option = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setExactFinalTime (wrapper)", 0);
@@ -178493,7 +181569,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_117setExactFinalTime(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setExactFinalTime") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setExactFinalTime") < 0)) __PYX_ERR(37, 482, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -178504,50 +181580,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_117setExactFinalTime(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setExactFinalTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setExactFinalTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 482, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setExactFinalTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_116setExactFinalTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_option);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_124setExactFinalTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_option);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116setExactFinalTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_option) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124setExactFinalTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_option) {
   TSExactFinalTimeOption __pyx_v_oval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   TSExactFinalTimeOption __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setExactFinalTime", 0);
 
-  /* "PETSc/TS.pyx":457
+  /* "PETSc/TS.pyx":483
  * 
  *     def setExactFinalTime(self, option):
  *         cdef PetscTSExactFinalTimeOption oval = option             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetExactFinalTime(self.ts, oval) )
  * 
  */
-  __pyx_t_1 = ((TSExactFinalTimeOption)PyInt_AsLong(__pyx_v_option)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((TSExactFinalTimeOption)__Pyx_PyInt_As_TSExactFinalTimeOption(__pyx_v_option)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 483, __pyx_L1_error)
   __pyx_v_oval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":458
+  /* "PETSc/TS.pyx":484
  *     def setExactFinalTime(self, option):
  *         cdef PetscTSExactFinalTimeOption oval = option
  *         CHKERR( TSSetExactFinalTime(self.ts, oval) )             # <<<<<<<<<<<<<<
  * 
  *     def setConvergedReason(self, reason):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetExactFinalTime(__pyx_v_self->ts, __pyx_v_oval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetExactFinalTime(__pyx_v_self->ts, __pyx_v_oval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 484, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":456
+  /* "PETSc/TS.pyx":482
  *         return (rtol, atol)
  * 
  *     def setExactFinalTime(self, option):             # <<<<<<<<<<<<<<
@@ -178567,7 +181640,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116setExactFinalTime(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":460
+/* "PETSc/TS.pyx":486
  *         CHKERR( TSSetExactFinalTime(self.ts, oval) )
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -178576,13 +181649,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116setExactFinalTime(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_118setConvergedReason[] = "TS.setConvergedReason(self, reason)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_126setConvergedReason[] = "TS.setConvergedReason(self, reason)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_reason = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergedReason (wrapper)", 0);
@@ -178604,7 +181674,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setConvergedReason(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) __PYX_ERR(37, 486, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -178615,50 +181685,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setConvergedReason(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 486, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_118setConvergedReason(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_reason);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_126setConvergedReason(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_reason);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setConvergedReason(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_reason) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126setConvergedReason(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_reason) {
   TSConvergedReason __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   TSConvergedReason __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setConvergedReason", 0);
 
-  /* "PETSc/TS.pyx":461
+  /* "PETSc/TS.pyx":487
  * 
  *     def setConvergedReason(self, reason):
  *         cdef PetscTSConvergedReason cval = reason             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetConvergedReason(self.ts, cval) )
  * 
  */
-  __pyx_t_1 = ((TSConvergedReason)PyInt_AsLong(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((TSConvergedReason)__Pyx_PyInt_As_TSConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 487, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":462
+  /* "PETSc/TS.pyx":488
  *     def setConvergedReason(self, reason):
  *         cdef PetscTSConvergedReason cval = reason
  *         CHKERR( TSSetConvergedReason(self.ts, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getConvergedReason(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetConvergedReason(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetConvergedReason(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 488, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":460
+  /* "PETSc/TS.pyx":486
  *         CHKERR( TSSetExactFinalTime(self.ts, oval) )
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -178678,7 +181745,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setConvergedReason(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":464
+/* "PETSc/TS.pyx":490
  *         CHKERR( TSSetConvergedReason(self.ts, cval) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -178687,34 +181754,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setConvergedReason(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_120getConvergedReason[] = "TS.getConvergedReason(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_128getConvergedReason[] = "TS.getConvergedReason(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129getConvergedReason(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_8petsc4py_5PETSc_2TS_120getConvergedReason(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120getConvergedReason(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(struct PyPetscTSObject *__pyx_v_self) {
   TSConvergedReason __pyx_v_reason;
   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);
 
-  /* "PETSc/TS.pyx":465
+  /* "PETSc/TS.pyx":491
  * 
  *     def getConvergedReason(self):
  *         cdef PetscTSConvergedReason reason = TS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -178723,16 +181787,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120getConvergedReason(struct PyPe
  */
   __pyx_v_reason = TS_CONVERGED_ITERATING;
 
-  /* "PETSc/TS.pyx":466
+  /* "PETSc/TS.pyx":492
  *     def getConvergedReason(self):
  *         cdef PetscTSConvergedReason reason = TS_CONVERGED_ITERATING
  *         CHKERR( TSGetConvergedReason(self.ts, &reason) )             # <<<<<<<<<<<<<<
  *         return reason
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetConvergedReason(__pyx_v_self->ts, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetConvergedReason(__pyx_v_self->ts, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 492, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":467
+  /* "PETSc/TS.pyx":493
  *         cdef PetscTSConvergedReason reason = TS_CONVERGED_ITERATING
  *         CHKERR( TSGetConvergedReason(self.ts, &reason) )
  *         return reason             # <<<<<<<<<<<<<<
@@ -178740,13 +181804,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120getConvergedReason(struct PyPe
  *     # --- monitoring ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_TSConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 493, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":464
+  /* "PETSc/TS.pyx":490
  *         CHKERR( TSSetConvergedReason(self.ts, cval) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -178765,7 +181829,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120getConvergedReason(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":471
+/* "PETSc/TS.pyx":497
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -178774,20 +181838,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120getConvergedReason(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_122setMonitor[] = "TS.setMonitor(self, monitor, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_130setMonitor[] = "TS.setMonitor(self, monitor, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_monitor = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMonitor (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_monitor_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_monitor,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -178804,7 +181865,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123setMonitor(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_monitor_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_monitor)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -178818,7 +181879,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123setMonitor(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(37, 497, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -178835,20 +181896,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123setMonitor(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 497, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_monitor, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_monitor, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_monitorlist = 0;
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
@@ -178858,14 +181919,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObj
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setMonitor", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":472
+  /* "PETSc/TS.pyx":498
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):
  *         if monitor is None: return             # <<<<<<<<<<<<<<
@@ -178880,19 +181938,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObj
     goto __pyx_L0;
   }
 
-  /* "PETSc/TS.pyx":473
+  /* "PETSc/TS.pyx":499
  *     def setMonitor(self, monitor, args=None, kargs=None):
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
  *         if monitorlist is None:
  *             monitorlist = []
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 499, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_monitorlist = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":474
+  /* "PETSc/TS.pyx":500
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -178903,42 +181961,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObj
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":475
+    /* "PETSc/TS.pyx":501
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:
  *             monitorlist = []             # <<<<<<<<<<<<<<
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( TSMonitorSet(self.ts, TS_Monitor, NULL, NULL) )
  */
-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 501, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_monitorlist, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":476
+    /* "PETSc/TS.pyx":502
  *         if monitorlist is None:
  *             monitorlist = []
  *             self.set_attr('__monitor__', monitorlist)             # <<<<<<<<<<<<<<
  *             CHKERR( TSMonitorSet(self.ts, TS_Monitor, NULL, NULL) )
  *         if args  is None: args  = ()
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor, __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__"), __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 502, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":477
+    /* "PETSc/TS.pyx":503
  *             monitorlist = []
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( TSMonitorSet(self.ts, TS_Monitor, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         if args  is None: args  = ()
  *         if kargs is None: kargs = {}
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSMonitorSet(__pyx_v_self->ts, __pyx_f_8petsc4py_5PETSc_TS_Monitor, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSMonitorSet(__pyx_v_self->ts, __pyx_f_8petsc4py_5PETSc_TS_Monitor, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(37, 503, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":500
+ *         if monitor is None: return
+ *         cdef object monitorlist = self.get_attr('__monitor__')
+ *         if monitorlist is None:             # <<<<<<<<<<<<<<
+ *             monitorlist = []
+ *             self.set_attr('__monitor__', monitorlist)
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/TS.pyx":478
+  /* "PETSc/TS.pyx":504
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( TSMonitorSet(self.ts, TS_Monitor, NULL, NULL) )
  *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -178950,11 +182014,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObj
   if (__pyx_t_2) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/TS.pyx":479
+  /* "PETSc/TS.pyx":505
  *             CHKERR( TSMonitorSet(self.ts, TS_Monitor, NULL, NULL) )
  *         if args  is None: args  = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -178964,22 +182026,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObj
   __pyx_t_2 = (__pyx_v_kargs == Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 505, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
-  /* "PETSc/TS.pyx":480
+  /* "PETSc/TS.pyx":506
  *         if args  is None: args  = ()
  *         if kargs is None: kargs = {}
  *         context = (monitor, args, kargs)             # <<<<<<<<<<<<<<
  *         monitorlist.append(context)
  * 
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 506, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_monitor);
   __Pyx_GIVEREF(__pyx_v_monitor);
@@ -178993,16 +182053,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObj
   __pyx_v_context = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":481
+  /* "PETSc/TS.pyx":507
  *         if kargs is None: kargs = {}
  *         context = (monitor, args, kargs)
  *         monitorlist.append(context)             # <<<<<<<<<<<<<<
  * 
  *     def getMonitor(self):
  */
-  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_v_context); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_v_context); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(37, 507, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":471
+  /* "PETSc/TS.pyx":497
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -179027,7 +182087,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":483
+/* "PETSc/TS.pyx":509
  *         monitorlist.append(context)
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -179036,32 +182096,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMonitor(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_124getMonitor[] = "TS.getMonitor(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_133getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_132getMonitor[] = "TS.getMonitor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_133getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMonitor (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMonitor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_124getMonitor(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_132getMonitor(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124getMonitor(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getMonitor(struct PyPetscTSObject *__pyx_v_self) {
   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("getMonitor", 0);
 
-  /* "PETSc/TS.pyx":484
+  /* "PETSc/TS.pyx":510
  * 
  *     def getMonitor(self):
  *         return self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
@@ -179069,13 +182126,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124getMonitor(struct PyPetscTSObj
  *     def cancelMonitor(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 510, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":483
+  /* "PETSc/TS.pyx":509
  *         monitorlist.append(context)
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -179094,7 +182151,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124getMonitor(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":486
+/* "PETSc/TS.pyx":512
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -179103,53 +182160,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124getMonitor(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_126cancelMonitor[] = "TS.cancelMonitor(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_134cancelMonitor[] = "TS.cancelMonitor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135cancelMonitor(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_8petsc4py_5PETSc_2TS_126cancelMonitor(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_134cancelMonitor(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126cancelMonitor(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134cancelMonitor(struct PyPetscTSObject *__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("cancelMonitor", 0);
 
-  /* "PETSc/TS.pyx":487
+  /* "PETSc/TS.pyx":513
  * 
  *     def cancelMonitor(self):
  *         self.set_attr('__monitor__', None)             # <<<<<<<<<<<<<<
  *         CHKERR( TSMonitorCancel(self.ts) )
  * 
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__"), Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 513, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":488
+  /* "PETSc/TS.pyx":514
  *     def cancelMonitor(self):
  *         self.set_attr('__monitor__', None)
  *         CHKERR( TSMonitorCancel(self.ts) )             # <<<<<<<<<<<<<<
  * 
  *     def monitor(self, step, time, Vec u=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSMonitorCancel(__pyx_v_self->ts)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSMonitorCancel(__pyx_v_self->ts)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 514, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":486
+  /* "PETSc/TS.pyx":512
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -179170,7 +182224,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126cancelMonitor(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":490
+/* "PETSc/TS.pyx":516
  *         CHKERR( TSMonitorCancel(self.ts) )
  * 
  *     def monitor(self, step, time, Vec u=None):             # <<<<<<<<<<<<<<
@@ -179179,15 +182233,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126cancelMonitor(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_128monitor[] = "TS.monitor(self, step, time, Vec u=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_136monitor[] = "TS.monitor(self, step, time, Vec u=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_step = 0;
   PyObject *__pyx_v_time = 0;
   struct PyPetscVecObject *__pyx_v_u = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("monitor (wrapper)", 0);
@@ -179213,7 +182264,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129monitor(PyObject *__pyx_v_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("monitor", 0, 2, 3, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("monitor", 0, 2, 3, 1); __PYX_ERR(37, 516, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -179222,7 +182273,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129monitor(PyObject *__pyx_v_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(37, 516, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -179239,14 +182290,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129monitor(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("monitor", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("monitor", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 516, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.monitor", __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[37]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_128monitor(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_step, __pyx_v_time, __pyx_v_u);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_u), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "u", 0))) __PYX_ERR(37, 516, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_136monitor(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_step, __pyx_v_time, __pyx_v_u);
 
   /* function exit code */
   goto __pyx_L0;
@@ -179257,7 +182308,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129monitor(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128monitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step, PyObject *__pyx_v_time, struct PyPetscVecObject *__pyx_v_u) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136monitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step, PyObject *__pyx_v_time, struct PyPetscVecObject *__pyx_v_u) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   Vec __pyx_v_uvec;
@@ -179269,32 +182320,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128monitor(struct PyPetscTSObject
   int __pyx_t_4;
   Vec __pyx_t_5;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("monitor", 0);
 
-  /* "PETSc/TS.pyx":491
+  /* "PETSc/TS.pyx":517
  * 
  *     def monitor(self, step, time, Vec u=None):
  *         cdef PetscInt  ival = asInt(step)             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(time)
  *         cdef PetscVec  uvec = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(37, 517, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":492
+  /* "PETSc/TS.pyx":518
  *     def monitor(self, step, time, Vec u=None):
  *         cdef PetscInt  ival = asInt(step)
  *         cdef PetscReal rval = asReal(time)             # <<<<<<<<<<<<<<
  *         cdef PetscVec  uvec = NULL
  *         if u is not None: uvec = u.vec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_time); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_time); if (unlikely(__pyx_t_2 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 518, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":493
+  /* "PETSc/TS.pyx":519
  *         cdef PetscInt  ival = asInt(step)
  *         cdef PetscReal rval = asReal(time)
  *         cdef PetscVec  uvec = NULL             # <<<<<<<<<<<<<<
@@ -179303,7 +182351,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128monitor(struct PyPetscTSObject
  */
   __pyx_v_uvec = NULL;
 
-  /* "PETSc/TS.pyx":494
+  /* "PETSc/TS.pyx":520
  *         cdef PetscReal rval = asReal(time)
  *         cdef PetscVec  uvec = NULL
  *         if u is not None: uvec = u.vec             # <<<<<<<<<<<<<<
@@ -179315,11 +182363,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128monitor(struct PyPetscTSObject
   if (__pyx_t_4) {
     __pyx_t_5 = __pyx_v_u->vec;
     __pyx_v_uvec = __pyx_t_5;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":495
+  /* "PETSc/TS.pyx":521
  *         cdef PetscVec  uvec = NULL
  *         if u is not None: uvec = u.vec
  *         if uvec == NULL:             # <<<<<<<<<<<<<<
@@ -179329,28 +182375,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128monitor(struct PyPetscTSObject
   __pyx_t_4 = ((__pyx_v_uvec == NULL) != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/TS.pyx":496
+    /* "PETSc/TS.pyx":522
  *         if u is not None: uvec = u.vec
  *         if uvec == NULL:
  *             CHKERR( TSGetSolution(self.ts, &uvec) )             # <<<<<<<<<<<<<<
  *         CHKERR( TSMonitor(self.ts, ival, rval, uvec) )
  * 
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSolution(__pyx_v_self->ts, (&__pyx_v_uvec))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSolution(__pyx_v_self->ts, (&__pyx_v_uvec))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(37, 522, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":521
+ *         cdef PetscVec  uvec = NULL
+ *         if u is not None: uvec = u.vec
+ *         if uvec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( TSGetSolution(self.ts, &uvec) )
+ *         CHKERR( TSMonitor(self.ts, ival, rval, uvec) )
+ */
   }
-  __pyx_L4:;
 
-  /* "PETSc/TS.pyx":497
+  /* "PETSc/TS.pyx":523
  *         if uvec == NULL:
  *             CHKERR( TSGetSolution(self.ts, &uvec) )
  *         CHKERR( TSMonitor(self.ts, ival, rval, uvec) )             # <<<<<<<<<<<<<<
  * 
  *     # --- solving ---
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSMonitor(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_rval, __pyx_v_uvec)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSMonitor(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_rval, __pyx_v_uvec)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(37, 523, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":490
+  /* "PETSc/TS.pyx":516
  *         CHKERR( TSMonitorCancel(self.ts) )
  * 
  *     def monitor(self, step, time, Vec u=None):             # <<<<<<<<<<<<<<
@@ -179370,7 +182422,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128monitor(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":501
+/* "PETSc/TS.pyx":527
  *     # --- solving ---
  * 
  *     def setPreStep(self, prestep, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -179379,20 +182431,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128monitor(struct PyPetscTSObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_130setPreStep[] = "TS.setPreStep(self, prestep, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_139setPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_138setPreStep[] = "TS.setPreStep(self, prestep, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_139setPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_prestep = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPreStep (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prestep_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prestep,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -179409,7 +182458,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setPreStep(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_prestep_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prestep)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -179423,7 +182472,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setPreStep(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreStep") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreStep") < 0)) __PYX_ERR(37, 527, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -179440,20 +182489,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setPreStep(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPreStep", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPreStep", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 527, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setPreStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_prestep, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_138setPreStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_prestep, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prestep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_138setPreStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prestep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -179461,14 +182510,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObj
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setPreStep", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":502
+  /* "PETSc/TS.pyx":528
  * 
  *     def setPreStep(self, prestep, args=None, kargs=None):
  *         if prestep is not None:             # <<<<<<<<<<<<<<
@@ -179479,7 +182525,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":503
+    /* "PETSc/TS.pyx":529
  *     def setPreStep(self, prestep, args=None, kargs=None):
  *         if prestep is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -179491,11 +182537,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObj
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
-    /* "PETSc/TS.pyx":504
+    /* "PETSc/TS.pyx":530
  *         if prestep is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -179505,22 +182549,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObj
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 530, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
-    /* "PETSc/TS.pyx":505
+    /* "PETSc/TS.pyx":531
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  *             context = (prestep, args, kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__prestep__', context)
  *             CHKERR( TSSetPreStep(self.ts, TS_PreStep) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 531, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_prestep);
     __Pyx_GIVEREF(__pyx_v_prestep);
@@ -179534,52 +182576,60 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObj
     __pyx_v_context = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":506
+    /* "PETSc/TS.pyx":532
  *             if kargs is None: kargs = {}
  *             context = (prestep, args, kargs)
  *             self.set_attr('__prestep__', context)             # <<<<<<<<<<<<<<
  *             CHKERR( TSSetPreStep(self.ts, TS_PreStep) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_prestep, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__prestep__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 532, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":507
+    /* "PETSc/TS.pyx":533
  *             context = (prestep, args, kargs)
  *             self.set_attr('__prestep__', context)
  *             CHKERR( TSSetPreStep(self.ts, TS_PreStep) )             # <<<<<<<<<<<<<<
  *         else:
  *             self.set_attr('__prestep__', None)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetPreStep(__pyx_v_self->ts, __pyx_f_8petsc4py_5PETSc_TS_PreStep)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetPreStep(__pyx_v_self->ts, __pyx_f_8petsc4py_5PETSc_TS_PreStep)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(37, 533, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":528
+ * 
+ *     def setPreStep(self, prestep, args=None, kargs=None):
+ *         if prestep is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":509
+  /* "PETSc/TS.pyx":535
  *             CHKERR( TSSetPreStep(self.ts, TS_PreStep) )
  *         else:
  *             self.set_attr('__prestep__', None)             # <<<<<<<<<<<<<<
  *             CHKERR( TSSetPreStep(self.ts, NULL) )
  * 
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_prestep, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__prestep__"), Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 535, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":510
+    /* "PETSc/TS.pyx":536
  *         else:
  *             self.set_attr('__prestep__', None)
  *             CHKERR( TSSetPreStep(self.ts, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def getPreStep(self):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetPreStep(__pyx_v_self->ts, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetPreStep(__pyx_v_self->ts, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(37, 536, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/TS.pyx":501
+  /* "PETSc/TS.pyx":527
  *     # --- solving ---
  * 
  *     def setPreStep(self, prestep, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -179603,7 +182653,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":512
+/* "PETSc/TS.pyx":538
  *             CHKERR( TSSetPreStep(self.ts, NULL) )
  * 
  *     def getPreStep(self):             # <<<<<<<<<<<<<<
@@ -179612,32 +182662,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setPreStep(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_133getPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_132getPreStep[] = "TS.getPreStep(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_133getPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_141getPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_140getPreStep[] = "TS.getPreStep(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_141getPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getPreStep (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getPreStep", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPreStep", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_132getPreStep(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_140getPreStep(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getPreStep(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140getPreStep(struct PyPetscTSObject *__pyx_v_self) {
   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("getPreStep", 0);
 
-  /* "PETSc/TS.pyx":513
+  /* "PETSc/TS.pyx":539
  * 
  *     def getPreStep(self):
  *         return self.get_attr('__prestep__')             # <<<<<<<<<<<<<<
@@ -179645,13 +182692,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getPreStep(struct PyPetscTSObj
  *     def setPostStep(self, poststep, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_prestep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__prestep__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":512
+  /* "PETSc/TS.pyx":538
  *             CHKERR( TSSetPreStep(self.ts, NULL) )
  * 
  *     def getPreStep(self):             # <<<<<<<<<<<<<<
@@ -179670,7 +182717,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getPreStep(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":515
+/* "PETSc/TS.pyx":541
  *         return self.get_attr('__prestep__')
  * 
  *     def setPostStep(self, poststep, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -179679,20 +182726,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getPreStep(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135setPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_134setPostStep[] = "TS.setPostStep(self, poststep, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135setPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_143setPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_142setPostStep[] = "TS.setPostStep(self, poststep, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_143setPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_poststep = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPostStep (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_poststep_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_poststep,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -179709,7 +182753,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135setPostStep(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_poststep_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_poststep)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -179723,7 +182767,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135setPostStep(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPostStep") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPostStep") < 0)) __PYX_ERR(37, 541, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -179740,20 +182784,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135setPostStep(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPostStep", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPostStep", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 541, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setPostStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_poststep, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_142setPostStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_poststep, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_poststep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142setPostStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_poststep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -179761,14 +182805,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSOb
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setPostStep", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":516
+  /* "PETSc/TS.pyx":542
  * 
  *     def setPostStep(self, poststep, args=None, kargs=None):
  *         if poststep is not None:             # <<<<<<<<<<<<<<
@@ -179779,7 +182820,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSOb
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":517
+    /* "PETSc/TS.pyx":543
  *     def setPostStep(self, poststep, args=None, kargs=None):
  *         if poststep is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -179791,11 +182832,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSOb
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
-    /* "PETSc/TS.pyx":518
+    /* "PETSc/TS.pyx":544
  *         if poststep is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -179805,22 +182844,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSOb
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 544, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
-    /* "PETSc/TS.pyx":519
+    /* "PETSc/TS.pyx":545
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  *             context = (poststep, args, kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__poststep__', context)
  *             CHKERR( TSSetPostStep(self.ts, TS_PostStep) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 545, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_poststep);
     __Pyx_GIVEREF(__pyx_v_poststep);
@@ -179834,52 +182871,60 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSOb
     __pyx_v_context = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":520
+    /* "PETSc/TS.pyx":546
  *             if kargs is None: kargs = {}
  *             context = (poststep, args, kargs)
  *             self.set_attr('__poststep__', context)             # <<<<<<<<<<<<<<
  *             CHKERR( TSSetPostStep(self.ts, TS_PostStep) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_poststep, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__poststep__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 546, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":521
+    /* "PETSc/TS.pyx":547
  *             context = (poststep, args, kargs)
  *             self.set_attr('__poststep__', context)
  *             CHKERR( TSSetPostStep(self.ts, TS_PostStep) )             # <<<<<<<<<<<<<<
  *         else:
  *             self.set_attr('__poststep__', None)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetPostStep(__pyx_v_self->ts, __pyx_f_8petsc4py_5PETSc_TS_PostStep)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetPostStep(__pyx_v_self->ts, __pyx_f_8petsc4py_5PETSc_TS_PostStep)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(37, 547, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":542
+ * 
+ *     def setPostStep(self, poststep, args=None, kargs=None):
+ *         if poststep is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":523
+  /* "PETSc/TS.pyx":549
  *             CHKERR( TSSetPostStep(self.ts, TS_PostStep) )
  *         else:
  *             self.set_attr('__poststep__', None)             # <<<<<<<<<<<<<<
  *             CHKERR( TSSetPostStep(self.ts, NULL) )
  * 
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_poststep, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__poststep__"), Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 549, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":524
+    /* "PETSc/TS.pyx":550
  *         else:
  *             self.set_attr('__poststep__', None)
  *             CHKERR( TSSetPostStep(self.ts, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def getPostStep(self):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetPostStep(__pyx_v_self->ts, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetPostStep(__pyx_v_self->ts, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(37, 550, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/TS.pyx":515
+  /* "PETSc/TS.pyx":541
  *         return self.get_attr('__prestep__')
  * 
  *     def setPostStep(self, poststep, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -179903,7 +182948,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":526
+/* "PETSc/TS.pyx":552
  *             CHKERR( TSSetPostStep(self.ts, NULL) )
  * 
  *     def getPostStep(self):             # <<<<<<<<<<<<<<
@@ -179912,32 +182957,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134setPostStep(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137getPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_136getPostStep[] = "TS.getPostStep(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137getPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_145getPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_144getPostStep[] = "TS.getPostStep(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_145getPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getPostStep (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getPostStep", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPostStep", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_136getPostStep(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_144getPostStep(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136getPostStep(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_144getPostStep(struct PyPetscTSObject *__pyx_v_self) {
   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("getPostStep", 0);
 
-  /* "PETSc/TS.pyx":527
+  /* "PETSc/TS.pyx":553
  * 
  *     def getPostStep(self):
  *         return self.get_attr('__poststep__')             # <<<<<<<<<<<<<<
@@ -179945,13 +182987,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136getPostStep(struct PyPetscTSOb
  *     def setUp(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_poststep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__poststep__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 553, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":526
+  /* "PETSc/TS.pyx":552
  *             CHKERR( TSSetPostStep(self.ts, NULL) )
  * 
  *     def getPostStep(self):             # <<<<<<<<<<<<<<
@@ -179970,7 +183012,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136getPostStep(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":529
+/* "PETSc/TS.pyx":555
  *         return self.get_attr('__poststep__')
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -179979,41 +183021,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136getPostStep(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_139setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_138setUp[] = "TS.setUp(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_139setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_146setUp[] = "TS.setUp(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147setUp(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_8petsc4py_5PETSc_2TS_138setUp(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_146setUp(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_138setUp(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146setUp(struct PyPetscTSObject *__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);
 
-  /* "PETSc/TS.pyx":530
+  /* "PETSc/TS.pyx":556
  * 
  *     def setUp(self):
  *         CHKERR( TSSetUp(self.ts) )             # <<<<<<<<<<<<<<
  * 
  *     def reset(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetUp(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetUp(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 556, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":529
+  /* "PETSc/TS.pyx":555
  *         return self.get_attr('__poststep__')
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -180033,7 +183072,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_138setUp(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":532
+/* "PETSc/TS.pyx":558
  *         CHKERR( TSSetUp(self.ts) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -180042,41 +183081,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_138setUp(struct PyPetscTSObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_141reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_140reset[] = "TS.reset(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_141reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_148reset[] = "TS.reset(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149reset(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_8petsc4py_5PETSc_2TS_140reset(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_148reset(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140reset(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148reset(struct PyPetscTSObject *__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);
 
-  /* "PETSc/TS.pyx":533
+  /* "PETSc/TS.pyx":559
  * 
  *     def reset(self):
  *         CHKERR( TSReset(self.ts) )             # <<<<<<<<<<<<<<
  * 
  *     def step(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSReset(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSReset(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 559, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":532
+  /* "PETSc/TS.pyx":558
  *         CHKERR( TSSetUp(self.ts) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -180096,7 +183132,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140reset(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":535
+/* "PETSc/TS.pyx":561
  *         CHKERR( TSReset(self.ts) )
  * 
  *     def step(self):             # <<<<<<<<<<<<<<
@@ -180105,41 +183141,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140reset(struct PyPetscTSObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_143step(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_142step[] = "TS.step(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_143step(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_151step(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_150step[] = "TS.step(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_151step(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("step (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("step", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "step", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_142step(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_150step(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142step(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150step(struct PyPetscTSObject *__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("step", 0);
 
-  /* "PETSc/TS.pyx":536
+  /* "PETSc/TS.pyx":562
  * 
  *     def step(self):
  *         CHKERR( TSStep(self.ts) )             # <<<<<<<<<<<<<<
  * 
  *     def rollBack(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSStep(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSStep(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 562, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":535
+  /* "PETSc/TS.pyx":561
  *         CHKERR( TSReset(self.ts) )
  * 
  *     def step(self):             # <<<<<<<<<<<<<<
@@ -180159,7 +183192,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142step(struct PyPetscTSObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":538
+/* "PETSc/TS.pyx":564
  *         CHKERR( TSStep(self.ts) )
  * 
  *     def rollBack(self):             # <<<<<<<<<<<<<<
@@ -180168,41 +183201,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142step(struct PyPetscTSObject *_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_145rollBack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_144rollBack[] = "TS.rollBack(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_145rollBack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_153rollBack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_152rollBack[] = "TS.rollBack(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_153rollBack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("rollBack (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("rollBack", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "rollBack", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_144rollBack(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_152rollBack(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_144rollBack(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152rollBack(struct PyPetscTSObject *__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("rollBack", 0);
 
-  /* "PETSc/TS.pyx":539
+  /* "PETSc/TS.pyx":565
  * 
  *     def rollBack(self):
  *         CHKERR( TSRollBack(self.ts) )             # <<<<<<<<<<<<<<
  * 
  *     def solve(self, Vec u not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSRollBack(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSRollBack(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 565, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":538
+  /* "PETSc/TS.pyx":564
  *         CHKERR( TSStep(self.ts) )
  * 
  *     def rollBack(self):             # <<<<<<<<<<<<<<
@@ -180222,7 +183252,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_144rollBack(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":541
+/* "PETSc/TS.pyx":567
  *         CHKERR( TSRollBack(self.ts) )
  * 
  *     def solve(self, Vec u not None):             # <<<<<<<<<<<<<<
@@ -180231,13 +183261,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_144rollBack(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_146solve[] = "TS.solve(self, Vec u)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_155solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_154solve[] = "TS.solve(self, Vec u)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_155solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_u = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solve (wrapper)", 0);
@@ -180259,7 +183286,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147solve(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, "solve") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(37, 567, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -180270,14 +183297,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147solve(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solve", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 567, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.solve", __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[37]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_146solve(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_u), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "u", 0))) __PYX_ERR(37, 567, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_154solve(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u);
 
   /* function exit code */
   goto __pyx_L0;
@@ -180288,25 +183315,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147solve(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146solve(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154solve(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u) {
   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);
 
-  /* "PETSc/TS.pyx":542
+  /* "PETSc/TS.pyx":568
  * 
  *     def solve(self, Vec u not None):
  *         CHKERR( TSSolve(self.ts, u.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def interpolate(self, t, Vec u not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSolve(__pyx_v_self->ts, __pyx_v_u->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSolve(__pyx_v_self->ts, __pyx_v_u->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 568, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":541
+  /* "PETSc/TS.pyx":567
  *         CHKERR( TSRollBack(self.ts) )
  * 
  *     def solve(self, Vec u not None):             # <<<<<<<<<<<<<<
@@ -180326,7 +183350,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146solve(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":544
+/* "PETSc/TS.pyx":570
  *         CHKERR( TSSolve(self.ts, u.vec) )
  * 
  *     def interpolate(self, t, Vec u not None):             # <<<<<<<<<<<<<<
@@ -180335,14 +183359,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146solve(struct PyPetscTSObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149interpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_148interpolate[] = "TS.interpolate(self, t, Vec u)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149interpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_157interpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_156interpolate[] = "TS.interpolate(self, t, Vec u)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_157interpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_t = 0;
   struct PyPetscVecObject *__pyx_v_u = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("interpolate (wrapper)", 0);
@@ -180366,11 +183387,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149interpolate(PyObject *__pyx_v_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("interpolate", 1, 2, 2, 1); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("interpolate", 1, 2, 2, 1); __PYX_ERR(37, 570, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "interpolate") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "interpolate") < 0)) __PYX_ERR(37, 570, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -180383,14 +183404,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149interpolate(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("interpolate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("interpolate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 570, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.interpolate", __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[37]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_148interpolate(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_u);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_u), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "u", 0))) __PYX_ERR(37, 570, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_156interpolate(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_u);
 
   /* function exit code */
   goto __pyx_L0;
@@ -180401,37 +183422,34 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149interpolate(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148interpolate(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_u) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156interpolate(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_u) {
   PetscReal __pyx_v_rval;
   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("interpolate", 0);
 
-  /* "PETSc/TS.pyx":545
+  /* "PETSc/TS.pyx":571
  * 
  *     def interpolate(self, t, Vec u not None):
  *         cdef PetscReal rval = asReal(t)             # <<<<<<<<<<<<<<
  *         CHKERR( TSInterpolate(self.ts, rval, u.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 571, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":546
+  /* "PETSc/TS.pyx":572
  *     def interpolate(self, t, Vec u not None):
  *         cdef PetscReal rval = asReal(t)
  *         CHKERR( TSInterpolate(self.ts, rval, u.vec) )             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSInterpolate(__pyx_v_self->ts, __pyx_v_rval, __pyx_v_u->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSInterpolate(__pyx_v_self->ts, __pyx_v_rval, __pyx_v_u->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 572, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":544
+  /* "PETSc/TS.pyx":570
  *         CHKERR( TSSolve(self.ts, u.vec) )
  * 
  *     def interpolate(self, t, Vec u not None):             # <<<<<<<<<<<<<<
@@ -180451,7 +183469,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148interpolate(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":551
+/* "PETSc/TS.pyx":577
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -180460,14 +183478,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148interpolate(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_151createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_150createPython[] = "TS.createPython(self, context=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_151createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_158createPython[] = "TS.createPython(self, context=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
   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("createPython (wrapper)", 0);
@@ -180499,7 +183514,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_151createPython(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(37, 577, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -180514,42 +183529,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_151createPython(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 577, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.createPython", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_150createPython(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_context, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_158createPython(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_context, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150createPython(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158createPython(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   TS __pyx_v_newts;
   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("createPython", 0);
 
-  /* "PETSc/TS.pyx":552
+  /* "PETSc/TS.pyx":578
  * 
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscTS newts = NULL
  *         CHKERR( TSCreate(ccomm, &newts) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 578, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":553
+  /* "PETSc/TS.pyx":579
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscTS newts = NULL             # <<<<<<<<<<<<<<
@@ -180558,16 +183570,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150createPython(struct PyPetscTSO
  */
   __pyx_v_newts = NULL;
 
-  /* "PETSc/TS.pyx":554
+  /* "PETSc/TS.pyx":580
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscTS newts = NULL
  *         CHKERR( TSCreate(ccomm, &newts) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.ts = newts
  *         CHKERR( TSSetType(self.ts, TSPYTHON) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSCreate(__pyx_v_ccomm, (&__pyx_v_newts))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSCreate(__pyx_v_ccomm, (&__pyx_v_newts))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 580, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":555
+  /* "PETSc/TS.pyx":581
  *         cdef PetscTS newts = NULL
  *         CHKERR( TSCreate(ccomm, &newts) )
  *         PetscCLEAR(self.obj); self.ts = newts             # <<<<<<<<<<<<<<
@@ -180577,25 +183589,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150createPython(struct PyPetscTSO
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->ts = __pyx_v_newts;
 
-  /* "PETSc/TS.pyx":556
+  /* "PETSc/TS.pyx":582
  *         CHKERR( TSCreate(ccomm, &newts) )
  *         PetscCLEAR(self.obj); self.ts = newts
  *         CHKERR( TSSetType(self.ts, TSPYTHON) )             # <<<<<<<<<<<<<<
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetType(__pyx_v_self->ts, TSPYTHON)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetType(__pyx_v_self->ts, TSPYTHON)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 582, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":557
+  /* "PETSc/TS.pyx":583
  *         PetscCLEAR(self.obj); self.ts = newts
  *         CHKERR( TSSetType(self.ts, TSPYTHON) )
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonSetContext(__pyx_v_self->ts, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonSetContext(__pyx_v_self->ts, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 583, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":558
+  /* "PETSc/TS.pyx":584
  *         CHKERR( TSSetType(self.ts, TSPYTHON) )
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )
  *         return self             # <<<<<<<<<<<<<<
@@ -180607,7 +183619,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150createPython(struct PyPetscTSO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":551
+  /* "PETSc/TS.pyx":577
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -180625,7 +183637,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150createPython(struct PyPetscTSO
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":560
+/* "PETSc/TS.pyx":586
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -180634,13 +183646,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150createPython(struct PyPetscTSO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_153setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_152setPythonContext[] = "TS.setPythonContext(self, context)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_153setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_160setPythonContext[] = "TS.setPythonContext(self, context)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonContext (wrapper)", 0);
@@ -180662,7 +183671,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_153setPythonContext(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, "setPythonContext") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(37, 586, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -180673,38 +183682,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_153setPythonContext(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 586, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setPythonContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_152setPythonContext(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_context);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_160setPythonContext(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_context);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152setPythonContext(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160setPythonContext(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context) {
   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("setPythonContext", 0);
 
-  /* "PETSc/TS.pyx":561
+  /* "PETSc/TS.pyx":587
  * 
  *     def setPythonContext(self, context):
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )             # <<<<<<<<<<<<<<
  * 
  *     def getPythonContext(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonSetContext(__pyx_v_self->ts, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonSetContext(__pyx_v_self->ts, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 587, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":560
+  /* "PETSc/TS.pyx":586
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -180724,7 +183730,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152setPythonContext(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":563
+/* "PETSc/TS.pyx":589
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -180733,34 +183739,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152setPythonContext(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_155getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_154getPythonContext[] = "TS.getPythonContext(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_155getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_163getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_162getPythonContext[] = "TS.getPythonContext(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_163getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getPythonContext (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getPythonContext", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPythonContext", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_154getPythonContext(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154getPythonContext(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPetscTSObject *__pyx_v_self) {
   void *__pyx_v_context;
   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("getPythonContext", 0);
 
-  /* "PETSc/TS.pyx":564
+  /* "PETSc/TS.pyx":590
  * 
  *     def getPythonContext(self):
  *         cdef void *context = NULL             # <<<<<<<<<<<<<<
@@ -180769,16 +183772,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154getPythonContext(struct PyPets
  */
   __pyx_v_context = NULL;
 
-  /* "PETSc/TS.pyx":565
+  /* "PETSc/TS.pyx":591
  *     def getPythonContext(self):
  *         cdef void *context = NULL
  *         CHKERR( TSPythonGetContext(self.ts, &context) )             # <<<<<<<<<<<<<<
  *         if context == NULL: return None
  *         else: return <object> context
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonGetContext(__pyx_v_self->ts, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonGetContext(__pyx_v_self->ts, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 591, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":566
+  /* "PETSc/TS.pyx":592
  *         cdef void *context = NULL
  *         CHKERR( TSPythonGetContext(self.ts, &context) )
  *         if context == NULL: return None             # <<<<<<<<<<<<<<
@@ -180792,22 +183795,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154getPythonContext(struct PyPets
     __pyx_r = Py_None;
     goto __pyx_L0;
   }
-  /*else*/ {
 
-    /* "PETSc/TS.pyx":567
+  /* "PETSc/TS.pyx":593
  *         CHKERR( TSPythonGetContext(self.ts, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
  * 
  *     def setPythonType(self, py_type):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(((PyObject *)__pyx_v_context));
     __pyx_r = ((PyObject *)__pyx_v_context);
     goto __pyx_L0;
   }
 
-  /* "PETSc/TS.pyx":563
+  /* "PETSc/TS.pyx":589
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -180825,7 +183828,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154getPythonContext(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":569
+/* "PETSc/TS.pyx":595
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -180834,13 +183837,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154getPythonContext(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_157setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_156setPythonType[] = "TS.setPythonType(self, py_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_157setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_164setPythonType[] = "TS.setPythonType(self, py_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_py_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setPythonType (wrapper)", 0);
@@ -180862,7 +183862,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_157setPythonType(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, "setPythonType") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(37, 595, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -180873,32 +183873,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_157setPythonType(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 595, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setPythonType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_156setPythonType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_py_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_164setPythonType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_py_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156setPythonType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_py_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164setPythonType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_py_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("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
-  /* "PETSc/TS.pyx":570
+  /* "PETSc/TS.pyx":596
  * 
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -180907,28 +183904,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156setPythonType(struct PyPetscTS
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":571
+  /* "PETSc/TS.pyx":597
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( TSPythonSetType(self.ts, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_py_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 597, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_py_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":572
+  /* "PETSc/TS.pyx":598
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)
  *         CHKERR( TSPythonSetType(self.ts, cval) )             # <<<<<<<<<<<<<<
  * 
  *     # --- Theta ---
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonSetType(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonSetType(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 598, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":569
+  /* "PETSc/TS.pyx":595
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -180950,7 +183947,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156setPythonType(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":576
+/* "PETSc/TS.pyx":602
  *     # --- Theta ---
  * 
  *     def setTheta(self, theta):             # <<<<<<<<<<<<<<
@@ -180959,13 +183956,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156setPythonType(struct PyPetscTS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159setTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_158setTheta[] = "TS.setTheta(self, theta)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159setTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_166setTheta[] = "TS.setTheta(self, theta)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_theta = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTheta (wrapper)", 0);
@@ -180987,7 +183981,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159setTheta(PyObject *__pyx_v_sel
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTheta") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTheta") < 0)) __PYX_ERR(37, 602, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -180998,50 +183992,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159setTheta(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTheta", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTheta", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 602, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setTheta", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_158setTheta(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_theta);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_166setTheta(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_theta);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158setTheta(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_theta) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setTheta(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_theta) {
   PetscReal __pyx_v_rval;
   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("setTheta", 0);
 
-  /* "PETSc/TS.pyx":577
+  /* "PETSc/TS.pyx":603
  * 
  *     def setTheta(self, theta):
  *         cdef PetscReal rval = asReal(theta)             # <<<<<<<<<<<<<<
  *         CHKERR( TSThetaSetTheta(self.ts, rval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_theta); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_theta); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 603, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":578
+  /* "PETSc/TS.pyx":604
  *     def setTheta(self, theta):
  *         cdef PetscReal rval = asReal(theta)
  *         CHKERR( TSThetaSetTheta(self.ts, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def getTheta(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaSetTheta(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaSetTheta(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 604, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":576
+  /* "PETSc/TS.pyx":602
  *     # --- Theta ---
  * 
  *     def setTheta(self, theta):             # <<<<<<<<<<<<<<
@@ -181061,7 +184052,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158setTheta(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":580
+/* "PETSc/TS.pyx":606
  *         CHKERR( TSThetaSetTheta(self.ts, rval) )
  * 
  *     def getTheta(self):             # <<<<<<<<<<<<<<
@@ -181070,34 +184061,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158setTheta(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161getTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_160getTheta[] = "TS.getTheta(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161getTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_169getTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_168getTheta[] = "TS.getTheta(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_169getTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getTheta (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getTheta", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTheta", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_160getTheta(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160getTheta(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(struct PyPetscTSObject *__pyx_v_self) {
   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("getTheta", 0);
 
-  /* "PETSc/TS.pyx":581
+  /* "PETSc/TS.pyx":607
  * 
  *     def getTheta(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -181106,16 +184094,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160getTheta(struct PyPetscTSObjec
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":582
+  /* "PETSc/TS.pyx":608
  *     def getTheta(self):
  *         cdef PetscReal rval = 0
  *         CHKERR( TSThetaGetTheta(self.ts, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaGetTheta(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaGetTheta(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 608, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":583
+  /* "PETSc/TS.pyx":609
  *         cdef PetscReal rval = 0
  *         CHKERR( TSThetaGetTheta(self.ts, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -181123,13 +184111,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160getTheta(struct PyPetscTSObjec
  *     def setThetaEndpoint(self, flag=True):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 609, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":580
+  /* "PETSc/TS.pyx":606
  *         CHKERR( TSThetaSetTheta(self.ts, rval) )
  * 
  *     def getTheta(self):             # <<<<<<<<<<<<<<
@@ -181148,7 +184136,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160getTheta(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":585
+/* "PETSc/TS.pyx":611
  *         return toReal(rval)
  * 
  *     def setThetaEndpoint(self, flag=True):             # <<<<<<<<<<<<<<
@@ -181157,13 +184145,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160getTheta(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_163setThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_162setThetaEndpoint[] = "TS.setThetaEndpoint(self, flag=True)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_163setThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171setThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_170setThetaEndpoint[] = "TS.setThetaEndpoint(self, flag=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171setThetaEndpoint(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("setThetaEndpoint (wrapper)", 0);
@@ -181188,7 +184173,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_163setThetaEndpoint(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setThetaEndpoint") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setThetaEndpoint") < 0)) __PYX_ERR(37, 611, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -181201,50 +184186,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_163setThetaEndpoint(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setThetaEndpoint", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setThetaEndpoint", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 611, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setThetaEndpoint", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_162setThetaEndpoint(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_170setThetaEndpoint(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162setThetaEndpoint(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170setThetaEndpoint(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag) {
   PetscBool __pyx_v_bval;
   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("setThetaEndpoint", 0);
 
-  /* "PETSc/TS.pyx":586
+  /* "PETSc/TS.pyx":612
  * 
  *     def setThetaEndpoint(self, flag=True):
  *         cdef PetscBool bval = flag             # <<<<<<<<<<<<<<
  *         CHKERR( TSThetaSetEndpoint(self.ts, bval) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 612, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":587
+  /* "PETSc/TS.pyx":613
  *     def setThetaEndpoint(self, flag=True):
  *         cdef PetscBool bval = flag
  *         CHKERR( TSThetaSetEndpoint(self.ts, bval) )             # <<<<<<<<<<<<<<
  * 
  *     def getThetaEndpoint(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaSetEndpoint(__pyx_v_self->ts, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaSetEndpoint(__pyx_v_self->ts, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 613, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":585
+  /* "PETSc/TS.pyx":611
  *         return toReal(rval)
  * 
  *     def setThetaEndpoint(self, flag=True):             # <<<<<<<<<<<<<<
@@ -181264,7 +184246,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162setThetaEndpoint(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":589
+/* "PETSc/TS.pyx":615
  *         CHKERR( TSThetaSetEndpoint(self.ts, bval) )
  * 
  *     def getThetaEndpoint(self):             # <<<<<<<<<<<<<<
@@ -181273,34 +184255,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162setThetaEndpoint(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165getThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_164getThetaEndpoint[] = "TS.getThetaEndpoint(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165getThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_173getThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_172getThetaEndpoint[] = "TS.getThetaEndpoint(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_173getThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getThetaEndpoint (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getThetaEndpoint", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getThetaEndpoint", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_164getThetaEndpoint(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_172getThetaEndpoint(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164getThetaEndpoint(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_172getThetaEndpoint(struct PyPetscTSObject *__pyx_v_self) {
   PetscBool __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("getThetaEndpoint", 0);
 
-  /* "PETSc/TS.pyx":590
+  /* "PETSc/TS.pyx":616
  * 
  *     def getThetaEndpoint(self):
  *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -181309,16 +184288,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164getThetaEndpoint(struct PyPets
  */
   __pyx_v_bval = PETSC_FALSE;
 
-  /* "PETSc/TS.pyx":591
+  /* "PETSc/TS.pyx":617
  *     def getThetaEndpoint(self):
  *         cdef PetscBool bval = PETSC_FALSE
  *         CHKERR( TSThetaGetEndpoint(self.ts, &bval) )             # <<<<<<<<<<<<<<
  *         return <bint> bval
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaGetEndpoint(__pyx_v_self->ts, (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaGetEndpoint(__pyx_v_self->ts, (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 617, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":592
+  /* "PETSc/TS.pyx":618
  *         cdef PetscBool bval = PETSC_FALSE
  *         CHKERR( TSThetaGetEndpoint(self.ts, &bval) )
  *         return <bint> bval             # <<<<<<<<<<<<<<
@@ -181326,13 +184305,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164getThetaEndpoint(struct PyPets
  *     # --- Alpha ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_bval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 618, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":589
+  /* "PETSc/TS.pyx":615
  *         CHKERR( TSThetaSetEndpoint(self.ts, bval) )
  * 
  *     def getThetaEndpoint(self):             # <<<<<<<<<<<<<<
@@ -181351,7 +184330,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164getThetaEndpoint(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":596
+/* "PETSc/TS.pyx":622
  *     # --- Alpha ---
  * 
  *     def setAlphaRadius(self, radius):             # <<<<<<<<<<<<<<
@@ -181360,13 +184339,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164getThetaEndpoint(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setAlphaRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_166setAlphaRadius[] = "TS.setAlphaRadius(self, radius)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setAlphaRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_175setAlphaRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_174setAlphaRadius[] = "TS.setAlphaRadius(self, radius)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_175setAlphaRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_radius = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAlphaRadius (wrapper)", 0);
@@ -181388,7 +184364,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setAlphaRadius(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, "setAlphaRadius") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAlphaRadius") < 0)) __PYX_ERR(37, 622, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -181399,50 +184375,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setAlphaRadius(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAlphaRadius", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAlphaRadius", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 622, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setAlphaRadius", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_166setAlphaRadius(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_radius);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_174setAlphaRadius(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_radius);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setAlphaRadius(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_radius) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_174setAlphaRadius(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_radius) {
   PetscReal __pyx_v_rval;
   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("setAlphaRadius", 0);
 
-  /* "PETSc/TS.pyx":597
+  /* "PETSc/TS.pyx":623
  * 
  *     def setAlphaRadius(self, radius):
  *         cdef PetscReal rval = asReal(radius)             # <<<<<<<<<<<<<<
  *         CHKERR( TSAlphaSetRadius(self.ts, rval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_radius); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_radius); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 623, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":598
+  /* "PETSc/TS.pyx":624
  *     def setAlphaRadius(self, radius):
  *         cdef PetscReal rval = asReal(radius)
  *         CHKERR( TSAlphaSetRadius(self.ts, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaSetRadius(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaSetRadius(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(37, 624, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":596
+  /* "PETSc/TS.pyx":622
  *     # --- Alpha ---
  * 
  *     def setAlphaRadius(self, radius):             # <<<<<<<<<<<<<<
@@ -181462,7 +184435,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setAlphaRadius(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":600
+/* "PETSc/TS.pyx":626
  *         CHKERR( TSAlphaSetRadius(self.ts, rval) )
  * 
  *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):             # <<<<<<<<<<<<<<
@@ -181471,15 +184444,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setAlphaRadius(struct PyPetscT
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_169setAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_168setAlphaParams[] = "TS.setAlphaParams(self, alpha_m=None, alpha_f=None, gamma=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_169setAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_177setAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_176setAlphaParams[] = "TS.setAlphaParams(self, alpha_m=None, alpha_f=None, gamma=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_177setAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alpha_m = 0;
   PyObject *__pyx_v_alpha_f = 0;
   PyObject *__pyx_v_gamma = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAlphaParams (wrapper)", 0);
@@ -181518,7 +184488,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_169setAlphaParams(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAlphaParams") < 0)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAlphaParams") < 0)) __PYX_ERR(37, 626, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -181535,20 +184505,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_169setAlphaParams(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAlphaParams", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[37]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAlphaParams", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 626, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setAlphaParams", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_alpha_m, __pyx_v_alpha_f, __pyx_v_gamma);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_alpha_m, __pyx_v_alpha_f, __pyx_v_gamma);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_alpha_m, PyObject *__pyx_v_alpha_f, PyObject *__pyx_v_gamma) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_alpha_m, PyObject *__pyx_v_alpha_f, PyObject *__pyx_v_gamma) {
   PetscReal __pyx_v_rval1;
   PetscReal __pyx_v_rval2;
   PetscReal __pyx_v_rval3;
@@ -181561,12 +184531,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
   int __pyx_t_5;
   int __pyx_t_6;
   PetscReal __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setAlphaParams", 0);
 
-  /* "PETSc/TS.pyx":601
+  /* "PETSc/TS.pyx":627
  * 
  *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0             # <<<<<<<<<<<<<<
@@ -181577,7 +184544,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
   __pyx_v_rval2 = 0.0;
   __pyx_v_rval3 = 0.0;
 
-  /* "PETSc/TS.pyx":602
+  /* "PETSc/TS.pyx":628
  *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0
  *         try: CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )             # <<<<<<<<<<<<<<
@@ -181585,39 +184552,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
  *         if alpha_m is not None: rval1 = asReal(alpha_m)
  */
   {
+    __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:*/ {
-      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaGetParams(__pyx_v_self->ts, (&__pyx_v_rval1), (&__pyx_v_rval2), (&__pyx_v_rval3))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaGetParams(__pyx_v_self->ts, (&__pyx_v_rval1), (&__pyx_v_rval2), (&__pyx_v_rval3))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(37, 628, __pyx_L3_error)
     }
     __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
 
-    /* "PETSc/TS.pyx":603
+    /* "PETSc/TS.pyx":629
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0
  *         try: CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )
  *         except PetscError: pass             # <<<<<<<<<<<<<<
  *         if alpha_m is not None: rval1 = asReal(alpha_m)
  *         if alpha_f is not None: rval2 = asReal(alpha_f)
  */
-    __pyx_t_4 = PyErr_ExceptionMatches(__pyx_v_8petsc4py_5PETSc_PetscError);
+    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_v_8petsc4py_5PETSc_PetscError);
     if (__pyx_t_4) {
-      PyErr_Restore(0,0,0);
+      __Pyx_ErrRestore(0,0,0);
       goto __pyx_L4_exception_handled;
     }
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
+
+    /* "PETSc/TS.pyx":628
+ *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):
+ *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0
+ *         try: CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )             # <<<<<<<<<<<<<<
+ *         except PetscError: pass
+ *         if alpha_m is not None: rval1 = asReal(alpha_m)
+ */
+    __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);
@@ -181625,7 +184605,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
     __pyx_L10_try_end:;
   }
 
-  /* "PETSc/TS.pyx":604
+  /* "PETSc/TS.pyx":630
  *         try: CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )
  *         except PetscError: pass
  *         if alpha_m is not None: rval1 = asReal(alpha_m)             # <<<<<<<<<<<<<<
@@ -181635,13 +184615,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
   __pyx_t_5 = (__pyx_v_alpha_m != Py_None);
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha_m); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha_m); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 630, __pyx_L1_error)
     __pyx_v_rval1 = __pyx_t_7;
-    goto __pyx_L11;
   }
-  __pyx_L11:;
 
-  /* "PETSc/TS.pyx":605
+  /* "PETSc/TS.pyx":631
  *         except PetscError: pass
  *         if alpha_m is not None: rval1 = asReal(alpha_m)
  *         if alpha_f is not None: rval2 = asReal(alpha_f)             # <<<<<<<<<<<<<<
@@ -181651,13 +184629,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
   __pyx_t_6 = (__pyx_v_alpha_f != Py_None);
   __pyx_t_5 = (__pyx_t_6 != 0);
   if (__pyx_t_5) {
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha_f); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha_f); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 631, __pyx_L1_error)
     __pyx_v_rval2 = __pyx_t_7;
-    goto __pyx_L12;
   }
-  __pyx_L12:;
 
-  /* "PETSc/TS.pyx":606
+  /* "PETSc/TS.pyx":632
  *         if alpha_m is not None: rval1 = asReal(alpha_m)
  *         if alpha_f is not None: rval2 = asReal(alpha_f)
  *         if gamma   is not None: rval3 = asReal(gamma)             # <<<<<<<<<<<<<<
@@ -181667,22 +184643,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
   __pyx_t_5 = (__pyx_v_gamma != Py_None);
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gamma); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gamma); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) __PYX_ERR(37, 632, __pyx_L1_error)
     __pyx_v_rval3 = __pyx_t_7;
-    goto __pyx_L13;
   }
-  __pyx_L13:;
 
-  /* "PETSc/TS.pyx":607
+  /* "PETSc/TS.pyx":633
  *         if alpha_f is not None: rval2 = asReal(alpha_f)
  *         if gamma   is not None: rval3 = asReal(gamma)
  *         CHKERR( TSAlphaSetParams(self.ts,  rval1,  rval2,  rval3) )             # <<<<<<<<<<<<<<
  * 
  *     def getAlphaParams(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaSetParams(__pyx_v_self->ts, __pyx_v_rval1, __pyx_v_rval2, __pyx_v_rval3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaSetParams(__pyx_v_self->ts, __pyx_v_rval1, __pyx_v_rval2, __pyx_v_rval3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(37, 633, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":600
+  /* "PETSc/TS.pyx":626
  *         CHKERR( TSAlphaSetRadius(self.ts, rval) )
  * 
  *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):             # <<<<<<<<<<<<<<
@@ -181702,7 +184676,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":609
+/* "PETSc/TS.pyx":635
  *         CHKERR( TSAlphaSetParams(self.ts,  rval1,  rval2,  rval3) )
  * 
  *     def getAlphaParams(self):             # <<<<<<<<<<<<<<
@@ -181711,23 +184685,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168setAlphaParams(struct PyPetscT
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171getAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2TS_170getAlphaParams[] = "TS.getAlphaParams(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171getAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_179getAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_178getAlphaParams[] = "TS.getAlphaParams(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_179getAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getAlphaParams (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getAlphaParams", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAlphaParams", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_170getAlphaParams(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170getAlphaParams(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(struct PyPetscTSObject *__pyx_v_self) {
   PetscReal __pyx_v_rval1;
   PetscReal __pyx_v_rval2;
   PetscReal __pyx_v_rval3;
@@ -181738,12 +184712,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170getAlphaParams(struct PyPetscT
   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("getAlphaParams", 0);
 
-  /* "PETSc/TS.pyx":610
+  /* "PETSc/TS.pyx":636
  * 
  *     def getAlphaParams(self):
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0             # <<<<<<<<<<<<<<
@@ -181754,16 +184725,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170getAlphaParams(struct PyPetscT
   __pyx_v_rval2 = 0.0;
   __pyx_v_rval3 = 0.0;
 
-  /* "PETSc/TS.pyx":611
+  /* "PETSc/TS.pyx":637
  *     def getAlphaParams(self):
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0
  *         CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )             # <<<<<<<<<<<<<<
  *         return (toReal(rval1), toReal(rval2), toReal(rval3))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaGetParams(__pyx_v_self->ts, (&__pyx_v_rval1), (&__pyx_v_rval2), (&__pyx_v_rval3))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaGetParams(__pyx_v_self->ts, (&__pyx_v_rval1), (&__pyx_v_rval2), (&__pyx_v_rval3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(37, 637, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":612
+  /* "PETSc/TS.pyx":638
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0
  *         CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )
  *         return (toReal(rval1), toReal(rval2), toReal(rval3))             # <<<<<<<<<<<<<<
@@ -181771,13 +184742,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170getAlphaParams(struct PyPetscT
  *     # --- application context ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval1); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval2); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -181792,7 +184763,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170getAlphaParams(struct PyPetscT
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":609
+  /* "PETSc/TS.pyx":635
  *         CHKERR( TSAlphaSetParams(self.ts,  rval1,  rval2,  rval3) )
  * 
  *     def getAlphaParams(self):             # <<<<<<<<<<<<<<
@@ -181814,7 +184785,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170getAlphaParams(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":617
+/* "PETSc/TS.pyx":643
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -181841,12 +184812,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSO
   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);
 
-  /* "PETSc/TS.pyx":618
+  /* "PETSc/TS.pyx":644
  *     property appctx:
  *         def __get__(self):
  *             return self.getAppCtx()             # <<<<<<<<<<<<<<
@@ -181854,7 +184822,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSO
  *             self.setAppCtx(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getAppCtx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getAppCtx); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 644, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -181867,10 +184835,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSO
     }
   }
   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[37]; __pyx_lineno = 618; __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(37, 644, __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[37]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 644, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -181878,7 +184846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":617
+  /* "PETSc/TS.pyx":643
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -181899,7 +184867,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSO
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":619
+/* "PETSc/TS.pyx":645
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -181927,19 +184895,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6appctx_2__set__(struct PyPetscTSObject
   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);
 
-  /* "PETSc/TS.pyx":620
+  /* "PETSc/TS.pyx":646
  *             return self.getAppCtx()
  *         def __set__(self, value):
  *             self.setAppCtx(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- discretization space ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setAppCtx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setAppCtx); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 646, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -181952,23 +184917,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6appctx_2__set__(struct PyPetscTSObject
     }
   }
   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[37]; __pyx_lineno = 620; __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(37, 646, __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[37]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 646, __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[37]; __pyx_lineno = 620; __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(37, 646, __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;
 
-  /* "PETSc/TS.pyx":619
+  /* "PETSc/TS.pyx":645
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -181991,7 +184956,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6appctx_2__set__(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":625
+/* "PETSc/TS.pyx":651
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182018,12 +184983,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObjec
   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);
 
-  /* "PETSc/TS.pyx":626
+  /* "PETSc/TS.pyx":652
  *     property dm:
  *         def __get__(self):
  *             return self.getDM()             # <<<<<<<<<<<<<<
@@ -182031,7 +184993,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObjec
  *             self.setDM(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDM); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDM); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 652, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182044,10 +185006,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObjec
     }
   }
   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[37]; __pyx_lineno = 626; __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(37, 652, __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[37]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 652, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -182055,7 +185017,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObjec
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":625
+  /* "PETSc/TS.pyx":651
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182076,7 +185038,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":627
+/* "PETSc/TS.pyx":653
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -182104,19 +185066,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_2dm_2__set__(struct PyPetscTSObject *__
   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);
 
-  /* "PETSc/TS.pyx":628
+  /* "PETSc/TS.pyx":654
  *             return self.getDM()
  *         def __set__(self, value):
  *             self.setDM(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- xxx ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDM); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDM); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 654, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182129,23 +185088,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_2dm_2__set__(struct PyPetscTSObject *__
     }
   }
   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[37]; __pyx_lineno = 628; __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(37, 654, __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[37]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 654, __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[37]; __pyx_lineno = 628; __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(37, 654, __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;
 
-  /* "PETSc/TS.pyx":627
+  /* "PETSc/TS.pyx":653
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -182168,7 +185127,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_2dm_2__set__(struct PyPetscTSObject *__
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":633
+/* "PETSc/TS.pyx":659
  * 
  *     property problem_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182195,12 +185154,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyP
   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);
 
-  /* "PETSc/TS.pyx":634
+  /* "PETSc/TS.pyx":660
  *     property problem_type:
  *         def __get__(self):
  *             return self.getProblemType()             # <<<<<<<<<<<<<<
@@ -182208,7 +185164,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyP
  *             self.setProblemType(value)
  */
   __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[37]; __pyx_lineno = 634; __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(37, 660, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182221,10 +185177,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyP
     }
   }
   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[37]; __pyx_lineno = 634; __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(37, 660, __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[37]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 660, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -182232,7 +185188,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":633
+  /* "PETSc/TS.pyx":659
  * 
  *     property problem_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182253,7 +185209,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":635
+/* "PETSc/TS.pyx":661
  *         def __get__(self):
  *             return self.getProblemType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -182281,19 +185237,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_12problem_type_2__set__(struct PyPetscT
   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);
 
-  /* "PETSc/TS.pyx":636
+  /* "PETSc/TS.pyx":662
  *             return self.getProblemType()
  *         def __set__(self, value):
  *             self.setProblemType(value)             # <<<<<<<<<<<<<<
  * 
  *     property equation_type:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setProblemType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setProblemType); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 662, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182306,23 +185259,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_12problem_type_2__set__(struct PyPetscT
     }
   }
   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[37]; __pyx_lineno = 636; __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(37, 662, __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[37]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 662, __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[37]; __pyx_lineno = 636; __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(37, 662, __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;
 
-  /* "PETSc/TS.pyx":635
+  /* "PETSc/TS.pyx":661
  *         def __get__(self):
  *             return self.getProblemType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -182345,7 +185298,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_12problem_type_2__set__(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":639
+/* "PETSc/TS.pyx":665
  * 
  *     property equation_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182372,12 +185325,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct Py
   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);
 
-  /* "PETSc/TS.pyx":640
+  /* "PETSc/TS.pyx":666
  *     property equation_type:
  *         def __get__(self):
  *             return self.getEquationType()             # <<<<<<<<<<<<<<
@@ -182385,7 +185335,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct Py
  *             self.setEquationType(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getEquationType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getEquationType); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 666, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182398,10 +185348,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct Py
     }
   }
   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[37]; __pyx_lineno = 640; __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(37, 666, __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[37]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 666, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -182409,7 +185359,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":639
+  /* "PETSc/TS.pyx":665
  * 
  *     property equation_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182430,7 +185380,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":641
+/* "PETSc/TS.pyx":667
  *         def __get__(self):
  *             return self.getEquationType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -182458,19 +185408,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_13equation_type_2__set__(struct PyPetsc
   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);
 
-  /* "PETSc/TS.pyx":642
+  /* "PETSc/TS.pyx":668
  *             return self.getEquationType()
  *         def __set__(self, value):
  *             self.setEquationType(value)             # <<<<<<<<<<<<<<
  * 
  *     property snes:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setEquationType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setEquationType); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 668, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182483,23 +185430,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_13equation_type_2__set__(struct PyPetsc
     }
   }
   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[37]; __pyx_lineno = 642; __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(37, 668, __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[37]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 668, __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[37]; __pyx_lineno = 642; __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(37, 668, __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;
 
-  /* "PETSc/TS.pyx":641
+  /* "PETSc/TS.pyx":667
  *         def __get__(self):
  *             return self.getEquationType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -182522,7 +185469,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_13equation_type_2__set__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":645
+/* "PETSc/TS.pyx":671
  * 
  *     property snes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182549,12 +185496,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObj
   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);
 
-  /* "PETSc/TS.pyx":646
+  /* "PETSc/TS.pyx":672
  *     property snes:
  *         def __get__(self):
  *             return self.getSNES()             # <<<<<<<<<<<<<<
@@ -182562,7 +185506,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObj
  *     property ksp:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSNES); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSNES); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 672, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182575,10 +185519,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObj
     }
   }
   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[37]; __pyx_lineno = 646; __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(37, 672, __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[37]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 672, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -182586,7 +185530,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":645
+  /* "PETSc/TS.pyx":671
  * 
  *     property snes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182607,7 +185551,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":649
+/* "PETSc/TS.pyx":675
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182634,12 +185578,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObje
   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);
 
-  /* "PETSc/TS.pyx":650
+  /* "PETSc/TS.pyx":676
  *     property ksp:
  *         def __get__(self):
  *             return self.getKSP()             # <<<<<<<<<<<<<<
@@ -182647,7 +185588,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObje
  *     property vec_sol:
  */
   __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[37]; __pyx_lineno = 650; __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(37, 676, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182660,10 +185601,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObje
     }
   }
   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[37]; __pyx_lineno = 650; __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(37, 676, __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[37]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 676, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -182671,7 +185612,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObje
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":649
+  /* "PETSc/TS.pyx":675
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182692,7 +185633,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObje
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":653
+/* "PETSc/TS.pyx":679
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182719,12 +185660,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTS
   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);
 
-  /* "PETSc/TS.pyx":654
+  /* "PETSc/TS.pyx":680
  *     property vec_sol:
  *         def __get__(self):
  *             return self.getSolution()             # <<<<<<<<<<<<<<
@@ -182732,7 +185670,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTS
  *     # --- xxx ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolution); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 680, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182745,10 +185683,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTS
     }
   }
   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[37]; __pyx_lineno = 654; __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(37, 680, __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[37]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 680, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -182756,7 +185694,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":653
+  /* "PETSc/TS.pyx":679
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182777,7 +185715,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":659
+/* "PETSc/TS.pyx":685
  * 
  *     property time:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182804,12 +185742,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObj
   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);
 
-  /* "PETSc/TS.pyx":660
+  /* "PETSc/TS.pyx":686
  *     property time:
  *         def __get__(self):
  *             return self.getTime()             # <<<<<<<<<<<<<<
@@ -182817,7 +185752,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObj
  *             self.setTime(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTime); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTime); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 686, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182830,10 +185765,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObj
     }
   }
   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[37]; __pyx_lineno = 660; __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(37, 686, __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[37]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 686, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -182841,7 +185776,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":659
+  /* "PETSc/TS.pyx":685
  * 
  *     property time:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182862,7 +185797,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":661
+/* "PETSc/TS.pyx":687
  *         def __get__(self):
  *             return self.getTime()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -182890,19 +185825,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4time_2__set__(struct PyPetscTSObject *
   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);
 
-  /* "PETSc/TS.pyx":662
+  /* "PETSc/TS.pyx":688
  *             return self.getTime()
  *         def __set__(self, value):
  *             self.setTime(value)             # <<<<<<<<<<<<<<
  * 
  *     property time_step:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTime); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTime); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 688, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -182915,23 +185847,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4time_2__set__(struct PyPetscTSObject *
     }
   }
   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[37]; __pyx_lineno = 662; __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(37, 688, __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[37]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 688, __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[37]; __pyx_lineno = 662; __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(37, 688, __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;
 
-  /* "PETSc/TS.pyx":661
+  /* "PETSc/TS.pyx":687
  *         def __get__(self):
  *             return self.getTime()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -182954,7 +185886,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4time_2__set__(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":665
+/* "PETSc/TS.pyx":691
  * 
  *     property time_step:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -182981,12 +185913,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetsc
   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);
 
-  /* "PETSc/TS.pyx":666
+  /* "PETSc/TS.pyx":692
  *     property time_step:
  *         def __get__(self):
  *             return self.getTimeStep()             # <<<<<<<<<<<<<<
@@ -182994,7 +185923,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetsc
  *             self.setTimeStep(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTimeStep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTimeStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 692, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183007,10 +185936,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetsc
     }
   }
   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[37]; __pyx_lineno = 666; __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(37, 692, __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[37]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 692, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -183018,7 +185947,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":665
+  /* "PETSc/TS.pyx":691
  * 
  *     property time_step:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183039,7 +185968,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":667
+/* "PETSc/TS.pyx":693
  *         def __get__(self):
  *             return self.getTimeStep()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183067,19 +185996,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9time_step_2__set__(struct PyPetscTSObj
   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);
 
-  /* "PETSc/TS.pyx":668
+  /* "PETSc/TS.pyx":694
  *             return self.getTimeStep()
  *         def __set__(self, value):
  *             self.setTimeStep(value)             # <<<<<<<<<<<<<<
  * 
  *     property step_number:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTimeStep); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTimeStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 694, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183092,23 +186018,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9time_step_2__set__(struct PyPetscTSObj
     }
   }
   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[37]; __pyx_lineno = 668; __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(37, 694, __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[37]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 694, __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[37]; __pyx_lineno = 668; __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(37, 694, __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;
 
-  /* "PETSc/TS.pyx":667
+  /* "PETSc/TS.pyx":693
  *         def __get__(self):
  *             return self.getTimeStep()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183131,7 +186057,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9time_step_2__set__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":671
+/* "PETSc/TS.pyx":697
  * 
  *     property step_number:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183158,12 +186084,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPe
   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);
 
-  /* "PETSc/TS.pyx":672
+  /* "PETSc/TS.pyx":698
  *     property step_number:
  *         def __get__(self):
  *             return self.getStepNumber()             # <<<<<<<<<<<<<<
@@ -183171,7 +186094,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPe
  *             self.setStepNumber(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getStepNumber); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getStepNumber); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 698, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183184,10 +186107,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPe
     }
   }
   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[37]; __pyx_lineno = 672; __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(37, 698, __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[37]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 698, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -183195,7 +186118,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":671
+  /* "PETSc/TS.pyx":697
  * 
  *     property step_number:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183216,7 +186139,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":673
+/* "PETSc/TS.pyx":699
  *         def __get__(self):
  *             return self.getStepNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183244,19 +186167,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_11step_number_2__set__(struct PyPetscTS
   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);
 
-  /* "PETSc/TS.pyx":674
+  /* "PETSc/TS.pyx":700
  *             return self.getStepNumber()
  *         def __set__(self, value):
  *             self.setStepNumber(value)             # <<<<<<<<<<<<<<
  * 
  *     property max_time:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setStepNumber); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setStepNumber); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 700, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183269,23 +186189,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_11step_number_2__set__(struct PyPetscTS
     }
   }
   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[37]; __pyx_lineno = 674; __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(37, 700, __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[37]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 700, __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[37]; __pyx_lineno = 674; __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(37, 700, __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;
 
-  /* "PETSc/TS.pyx":673
+  /* "PETSc/TS.pyx":699
  *         def __get__(self):
  *             return self.getStepNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183308,7 +186228,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_11step_number_2__set__(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":677
+/* "PETSc/TS.pyx":703
  * 
  *     property max_time:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183335,12 +186255,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscT
   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);
 
-  /* "PETSc/TS.pyx":678
+  /* "PETSc/TS.pyx":704
  *     property max_time:
  *         def __get__(self):
  *             return self.getMaxTime()             # <<<<<<<<<<<<<<
@@ -183348,7 +186265,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscT
  *             self.setMaxTime(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getMaxTime); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getMaxTime); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 704, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183361,10 +186278,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscT
     }
   }
   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[37]; __pyx_lineno = 678; __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(37, 704, __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[37]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 704, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -183372,7 +186289,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscT
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":677
+  /* "PETSc/TS.pyx":703
  * 
  *     property max_time:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183393,7 +186310,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":679
+/* "PETSc/TS.pyx":705
  *         def __get__(self):
  *             return self.getMaxTime()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183421,19 +186338,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_8max_time_2__set__(struct PyPetscTSObje
   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);
 
-  /* "PETSc/TS.pyx":680
+  /* "PETSc/TS.pyx":706
  *             return self.getMaxTime()
  *         def __set__(self, value):
  *             self.setMaxTime(value)             # <<<<<<<<<<<<<<
  * 
  *     property max_steps:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMaxTime); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMaxTime); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 706, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183446,23 +186360,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_8max_time_2__set__(struct PyPetscTSObje
     }
   }
   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[37]; __pyx_lineno = 680; __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(37, 706, __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[37]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 706, __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[37]; __pyx_lineno = 680; __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(37, 706, __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;
 
-  /* "PETSc/TS.pyx":679
+  /* "PETSc/TS.pyx":705
  *         def __get__(self):
  *             return self.getMaxTime()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183485,7 +186399,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_8max_time_2__set__(struct PyPetscTSObje
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":683
+/* "PETSc/TS.pyx":709
  * 
  *     property max_steps:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183512,12 +186426,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetsc
   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);
 
-  /* "PETSc/TS.pyx":684
+  /* "PETSc/TS.pyx":710
  *     property max_steps:
  *         def __get__(self):
  *             return self.getMaxSteps()             # <<<<<<<<<<<<<<
@@ -183525,7 +186436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetsc
  *             self.setMaxSteps(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getMaxSteps); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getMaxSteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 710, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183538,10 +186449,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetsc
     }
   }
   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[37]; __pyx_lineno = 684; __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(37, 710, __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[37]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 710, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -183549,7 +186460,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":683
+  /* "PETSc/TS.pyx":709
  * 
  *     property max_steps:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183570,7 +186481,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":685
+/* "PETSc/TS.pyx":711
  *         def __get__(self):
  *             return self.getMaxSteps()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183598,19 +186509,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9max_steps_2__set__(struct PyPetscTSObj
   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);
 
-  /* "PETSc/TS.pyx":686
+  /* "PETSc/TS.pyx":712
  *             return self.getMaxSteps()
  *         def __set__(self, value):
  *             self.setMaxSteps(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- convergence ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMaxSteps); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMaxSteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 712, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183623,23 +186531,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9max_steps_2__set__(struct PyPetscTSObj
     }
   }
   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[37]; __pyx_lineno = 686; __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(37, 712, __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[37]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 712, __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[37]; __pyx_lineno = 686; __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(37, 712, __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;
 
-  /* "PETSc/TS.pyx":685
+  /* "PETSc/TS.pyx":711
  *         def __get__(self):
  *             return self.getMaxSteps()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183662,7 +186570,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9max_steps_2__set__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":691
+/* "PETSc/TS.pyx":717
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183689,12 +186597,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4rtol___get__(struct PyPetscTSObj
   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);
 
-  /* "PETSc/TS.pyx":692
+  /* "PETSc/TS.pyx":718
  *     property rtol:
  *         def __get__(self):
  *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
@@ -183702,7 +186607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4rtol___get__(struct PyPetscTSObj
  *             self.setTolerances(rtol=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[37]; __pyx_lineno = 692; __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(37, 718, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183715,21 +186620,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4rtol___get__(struct PyPetscTSObj
     }
   }
   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[37]; __pyx_lineno = 692; __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(37, 718, __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[37]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 718, __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[37]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __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(37, 718, __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;
 
-  /* "PETSc/TS.pyx":691
+  /* "PETSc/TS.pyx":717
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183750,7 +186655,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4rtol___get__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":693
+/* "PETSc/TS.pyx":719
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183777,30 +186682,27 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4rtol_2__set__(struct PyPetscTSObject *
   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);
 
-  /* "PETSc/TS.pyx":694
+  /* "PETSc/TS.pyx":720
  *             return self.getTolerances()[0]
  *         def __set__(self, value):
  *             self.setTolerances(rtol=value)             # <<<<<<<<<<<<<<
  * 
  *     property atol:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 694; __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(37, 720, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 720, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 694; __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[37]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) __PYX_ERR(37, 720, __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(37, 720, __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;
 
-  /* "PETSc/TS.pyx":693
+  /* "PETSc/TS.pyx":719
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183822,7 +186724,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4rtol_2__set__(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":697
+/* "PETSc/TS.pyx":723
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183849,12 +186751,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4atol___get__(struct PyPetscTSObj
   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);
 
-  /* "PETSc/TS.pyx":698
+  /* "PETSc/TS.pyx":724
  *     property atol:
  *         def __get__(self):
  *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
@@ -183862,7 +186761,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4atol___get__(struct PyPetscTSObj
  *             self.setTolerances(atol=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[37]; __pyx_lineno = 698; __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(37, 724, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -183875,21 +186774,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4atol___get__(struct PyPetscTSObj
     }
   }
   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[37]; __pyx_lineno = 698; __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(37, 724, __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[37]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 724, __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[37]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __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(37, 724, __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;
 
-  /* "PETSc/TS.pyx":697
+  /* "PETSc/TS.pyx":723
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -183910,7 +186809,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4atol___get__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":699
+/* "PETSc/TS.pyx":725
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183937,30 +186836,27 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4atol_2__set__(struct PyPetscTSObject *
   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);
 
-  /* "PETSc/TS.pyx":700
+  /* "PETSc/TS.pyx":726
  *             return self.getTolerances()[1]
  *         def __set__(self, value):
  *             self.setTolerances(atol=value)             # <<<<<<<<<<<<<<
  * 
  *     property reason:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 700; __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(37, 726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 700; __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[37]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) __PYX_ERR(37, 726, __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(37, 726, __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;
 
-  /* "PETSc/TS.pyx":699
+  /* "PETSc/TS.pyx":725
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -183982,7 +186878,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4atol_2__set__(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":703
+/* "PETSc/TS.pyx":729
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184009,12 +186905,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSO
   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);
 
-  /* "PETSc/TS.pyx":704
+  /* "PETSc/TS.pyx":730
  *     property reason:
  *         def __get__(self):
  *             return self.getConvergedReason()             # <<<<<<<<<<<<<<
@@ -184022,7 +186915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSO
  *             self.setConvergedReason(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 730, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -184035,10 +186928,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSO
     }
   }
   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[37]; __pyx_lineno = 704; __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(37, 730, __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[37]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 730, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -184046,7 +186939,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":703
+  /* "PETSc/TS.pyx":729
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184067,7 +186960,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSO
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":705
+/* "PETSc/TS.pyx":731
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -184095,19 +186988,16 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6reason_2__set__(struct PyPetscTSObject
   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);
 
-  /* "PETSc/TS.pyx":706
+  /* "PETSc/TS.pyx":732
  *             return self.getConvergedReason()
  *         def __set__(self, value):
  *             self.setConvergedReason(value)             # <<<<<<<<<<<<<<
  * 
  *     property iterating:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 732, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -184120,23 +187010,23 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6reason_2__set__(struct PyPetscTSObject
     }
   }
   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[37]; __pyx_lineno = 706; __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(37, 732, __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[37]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 732, __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[37]; __pyx_lineno = 706; __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(37, 732, __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;
 
-  /* "PETSc/TS.pyx":705
+  /* "PETSc/TS.pyx":731
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -184159,7 +187049,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6reason_2__set__(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":709
+/* "PETSc/TS.pyx":735
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184185,12 +187075,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9iterating___get__(struct PyPetsc
   __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("__get__", 0);
 
-  /* "PETSc/TS.pyx":710
+  /* "PETSc/TS.pyx":736
  *     property iterating:
  *         def __get__(self):
  *             return self.reason == 0             # <<<<<<<<<<<<<<
@@ -184198,15 +187085,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9iterating___get__(struct PyPetsc
  *     property converged:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 736, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 736, __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;
 
-  /* "PETSc/TS.pyx":709
+  /* "PETSc/TS.pyx":735
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184226,7 +187114,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9iterating___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":713
+/* "PETSc/TS.pyx":739
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184252,12 +187140,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9converged___get__(struct PyPetsc
   __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("__get__", 0);
 
-  /* "PETSc/TS.pyx":714
+  /* "PETSc/TS.pyx":740
  *     property converged:
  *         def __get__(self):
  *             return self.reason > 0             # <<<<<<<<<<<<<<
@@ -184265,15 +187150,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9converged___get__(struct PyPetsc
  *     property diverged:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 740, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 740, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":713
+  /* "PETSc/TS.pyx":739
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184293,7 +187178,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9converged___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":717
+/* "PETSc/TS.pyx":743
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184319,12 +187204,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8diverged___get__(struct PyPetscT
   __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("__get__", 0);
 
-  /* "PETSc/TS.pyx":718
+  /* "PETSc/TS.pyx":744
  *     property diverged:
  *         def __get__(self):
  *             return self.reason < 0             # <<<<<<<<<<<<<<
@@ -184332,15 +187214,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8diverged___get__(struct PyPetscT
  * # -----------------------------------------------------------------------------
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 744, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 744, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":717
+  /* "PETSc/TS.pyx":743
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184360,7 +187242,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8diverged___get__(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":64
+/* "PETSc/TAO.pyx":62
  *     Reason = TAOConvergedReason
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -184389,7 +187271,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO___cinit__(struct PyPetscTAOObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/TAO.pyx":65
+  /* "PETSc/TAO.pyx":63
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.tao             # <<<<<<<<<<<<<<
@@ -184398,16 +187280,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO___cinit__(struct PyPetscTAOObject *__p
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->tao));
 
-  /* "PETSc/TAO.pyx":66
+  /* "PETSc/TAO.pyx":64
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.tao
  *         self.tao = NULL             # <<<<<<<<<<<<<<
  * 
- *     def __dealloc__(self):
+ *     def view(self, Viewer viewer=None):
  */
   __pyx_v_self->tao = NULL;
 
-  /* "PETSc/TAO.pyx":64
+  /* "PETSc/TAO.pyx":62
  *     Reason = TAOConvergedReason
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -184421,49 +187303,19 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO___cinit__(struct PyPetscTAOObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":68
+/* "PETSc/TAO.pyx":66
  *         self.tao = NULL
  * 
- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
- *         pass
- * 
- */
-
-/* Python wrapper */
-static void __pyx_pw_8petsc4py_5PETSc_3TAO_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pw_8petsc4py_5PETSc_3TAO_3__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
-  __pyx_pf_8petsc4py_5PETSc_3TAO_2__dealloc__(((struct PyPetscTAOObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-}
-
-static void __pyx_pf_8petsc4py_5PETSc_3TAO_2__dealloc__(CYTHON_UNUSED struct PyPetscTAOObject *__pyx_v_self) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__dealloc__", 0);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-}
-
-/* "PETSc/TAO.pyx":71
- *         pass
- * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_4view[] = "TAO.view(self, Viewer viewer=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_2view[] = "TAO.view(self, Viewer viewer=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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);
@@ -184488,7 +187340,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5view(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[38]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(38, 66, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -184501,14 +187353,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5view(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[38]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 66, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.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[38]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_4view(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_viewer);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(38, 66, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_2view(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -184519,7 +187371,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5view(PyObject *__pyx_v_self, Py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4view(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_2view(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
   PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -184527,12 +187379,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4view(struct PyPetscTAOObject *_
   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);
 
-  /* "PETSc/TAO.pyx":74
+  /* "PETSc/TAO.pyx":69
  *         """
  *         """
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -184541,7 +187390,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4view(struct PyPetscTAOObject *_
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/TAO.pyx":75
+  /* "PETSc/TAO.pyx":70
  *         """
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -184553,21 +187402,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4view(struct PyPetscTAOObject *_
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":76
+  /* "PETSc/TAO.pyx":71
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( TaoView(self.tao, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoView(__pyx_v_self->tao, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoView(__pyx_v_self->tao, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 71, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":71
- *         pass
+  /* "PETSc/TAO.pyx":66
+ *         self.tao = NULL
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
@@ -184586,7 +187433,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4view(struct PyPetscTAOObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":78
+/* "PETSc/TAO.pyx":73
  *         CHKERR( TaoView(self.tao, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -184595,41 +187442,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4view(struct PyPetscTAOObject *_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_7destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_6destroy[] = "TAO.destroy(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_7destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_4destroy[] = "TAO.destroy(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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_8petsc4py_5PETSc_3TAO_6destroy(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_4destroy(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6destroy(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4destroy(struct PyPetscTAOObject *__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);
 
-  /* "PETSc/TAO.pyx":81
+  /* "PETSc/TAO.pyx":76
  *         """
  *         """
  *         CHKERR( TaoDestroy(&self.tao) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoDestroy((&__pyx_v_self->tao))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoDestroy((&__pyx_v_self->tao))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 76, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":82
+  /* "PETSc/TAO.pyx":77
  *         """
  *         CHKERR( TaoDestroy(&self.tao) )
  *         return self             # <<<<<<<<<<<<<<
@@ -184641,7 +187485,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6destroy(struct PyPetscTAOObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":78
+  /* "PETSc/TAO.pyx":73
  *         CHKERR( TaoView(self.tao, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -184659,7 +187503,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6destroy(struct PyPetscTAOObject
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":84
+/* "PETSc/TAO.pyx":79
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -184668,13 +187512,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6destroy(struct PyPetscTAOObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_8create[] = "TAO.create(self, comm=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_6create[] = "TAO.create(self, comm=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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);
@@ -184699,7 +187540,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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[38]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(38, 79, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -184712,42 +187553,39 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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[38]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 79, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8create(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_6create(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8create(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6create(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   Tao __pyx_v_newtao;
   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);
 
-  /* "PETSc/TAO.pyx":87
+  /* "PETSc/TAO.pyx":82
  *         """
  *         """
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscTAO newtao = NULL
  *         CHKERR( TaoCreate(ccomm, &newtao) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(38, 82, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/TAO.pyx":88
+  /* "PETSc/TAO.pyx":83
  *         """
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscTAO newtao = NULL             # <<<<<<<<<<<<<<
@@ -184756,16 +187594,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8create(struct PyPetscTAOObject
  */
   __pyx_v_newtao = NULL;
 
-  /* "PETSc/TAO.pyx":89
+  /* "PETSc/TAO.pyx":84
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscTAO newtao = NULL
  *         CHKERR( TaoCreate(ccomm, &newtao) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.tao = newtao
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoCreate(__pyx_v_ccomm, (&__pyx_v_newtao))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoCreate(__pyx_v_ccomm, (&__pyx_v_newtao))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 84, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":90
+  /* "PETSc/TAO.pyx":85
  *         cdef PetscTAO newtao = NULL
  *         CHKERR( TaoCreate(ccomm, &newtao) )
  *         PetscCLEAR(self.obj); self.tao = newtao             # <<<<<<<<<<<<<<
@@ -184775,7 +187613,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8create(struct PyPetscTAOObject
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->tao = __pyx_v_newtao;
 
-  /* "PETSc/TAO.pyx":91
+  /* "PETSc/TAO.pyx":86
  *         CHKERR( TaoCreate(ccomm, &newtao) )
  *         PetscCLEAR(self.obj); self.tao = newtao
  *         return self             # <<<<<<<<<<<<<<
@@ -184787,7 +187625,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8create(struct PyPetscTAOObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":84
+  /* "PETSc/TAO.pyx":79
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -184805,7 +187643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8create(struct PyPetscTAOObject
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":93
+/* "PETSc/TAO.pyx":88
  *         return self
  * 
  *     def setType(self, tao_type):             # <<<<<<<<<<<<<<
@@ -184814,13 +187652,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8create(struct PyPetscTAOObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_10setType[] = "TAO.setType(self, tao_type)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_8setType[] = "TAO.setType(self, tao_type)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tao_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);
@@ -184842,7 +187677,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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[38]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(38, 88, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -184853,32 +187688,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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[38]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 88, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_10setType(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_tao_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8setType(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_tao_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_10setType(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_tao_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8setType(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_tao_type) {
   const char* __pyx_v_ctype;
   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_tao_type);
 
-  /* "PETSc/TAO.pyx":96
+  /* "PETSc/TAO.pyx":91
  *         """
  *         """
  *         cdef PetscTAOType ctype = NULL             # <<<<<<<<<<<<<<
@@ -184887,28 +187719,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_10setType(struct PyPetscTAOObjec
  */
   __pyx_v_ctype = NULL;
 
-  /* "PETSc/TAO.pyx":97
+  /* "PETSc/TAO.pyx":92
  *         """
  *         cdef PetscTAOType ctype = NULL
  *         tao_type = str2bytes(tao_type, &ctype)             # <<<<<<<<<<<<<<
  *         CHKERR( TaoSetType(self.tao, ctype) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_tao_type, (&__pyx_v_ctype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_tao_type, (&__pyx_v_ctype)); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 92, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_tao_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TAO.pyx":98
+  /* "PETSc/TAO.pyx":93
  *         cdef PetscTAOType ctype = NULL
  *         tao_type = str2bytes(tao_type, &ctype)
  *         CHKERR( TaoSetType(self.tao, ctype) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetType(__pyx_v_self->tao, __pyx_v_ctype)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetType(__pyx_v_self->tao, __pyx_v_ctype)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 93, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":93
+  /* "PETSc/TAO.pyx":88
  *         return self
  * 
  *     def setType(self, tao_type):             # <<<<<<<<<<<<<<
@@ -184930,7 +187762,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_10setType(struct PyPetscTAOObjec
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":100
+/* "PETSc/TAO.pyx":95
  *         CHKERR( TaoSetType(self.tao, ctype) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -184939,34 +187771,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_10setType(struct PyPetscTAOObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_12getType[] = "TAO.getType(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_10getType[] = "TAO.getType(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_11getType(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_8petsc4py_5PETSc_3TAO_12getType(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_10getType(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12getType(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_10getType(struct PyPetscTAOObject *__pyx_v_self) {
   const char* __pyx_v_ctype;
   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);
 
-  /* "PETSc/TAO.pyx":103
+  /* "PETSc/TAO.pyx":98
  *         """
  *         """
  *         cdef PetscTAOType ctype = NULL             # <<<<<<<<<<<<<<
@@ -184975,16 +187804,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12getType(struct PyPetscTAOObjec
  */
   __pyx_v_ctype = NULL;
 
-  /* "PETSc/TAO.pyx":104
+  /* "PETSc/TAO.pyx":99
  *         """
  *         cdef PetscTAOType ctype = NULL
  *         CHKERR( TaoGetType(self.tao, &ctype) )             # <<<<<<<<<<<<<<
  *         return bytes2str(ctype)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetType(__pyx_v_self->tao, (&__pyx_v_ctype))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetType(__pyx_v_self->tao, (&__pyx_v_ctype))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 99, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":105
+  /* "PETSc/TAO.pyx":100
  *         cdef PetscTAOType ctype = NULL
  *         CHKERR( TaoGetType(self.tao, &ctype) )
  *         return bytes2str(ctype)             # <<<<<<<<<<<<<<
@@ -184992,13 +187821,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12getType(struct PyPetscTAOObjec
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_ctype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_ctype); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":100
+  /* "PETSc/TAO.pyx":95
  *         CHKERR( TaoSetType(self.tao, ctype) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -185017,7 +187846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12getType(struct PyPetscTAOObjec
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":107
+/* "PETSc/TAO.pyx":102
  *         return bytes2str(ctype)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -185026,13 +187855,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12getType(struct PyPetscTAOObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_15setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_14setOptionsPrefix[] = "TAO.setOptionsPrefix(self, prefix)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_15setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_12setOptionsPrefix[] = "TAO.setOptionsPrefix(self, prefix)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
@@ -185054,7 +187880,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_15setOptionsPrefix(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[38]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(38, 102, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -185065,32 +187891,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_15setOptionsPrefix(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[38]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 102, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_14setOptionsPrefix(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_12setOptionsPrefix(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_14setOptionsPrefix(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12setOptionsPrefix(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
   const char *__pyx_v_cprefix;
   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);
 
-  /* "PETSc/TAO.pyx":110
+  /* "PETSc/TAO.pyx":105
  *         """
  *         """
  *         cdef const_char *cprefix = NULL             # <<<<<<<<<<<<<<
@@ -185099,28 +187922,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_14setOptionsPrefix(struct PyPets
  */
   __pyx_v_cprefix = NULL;
 
-  /* "PETSc/TAO.pyx":111
+  /* "PETSc/TAO.pyx":106
  *         """
  *         cdef const_char *cprefix = NULL
  *         prefix = str2bytes(prefix, &cprefix)             # <<<<<<<<<<<<<<
  *         CHKERR( TaoSetOptionsPrefix(self.tao, cprefix) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cprefix)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cprefix)); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TAO.pyx":112
+  /* "PETSc/TAO.pyx":107
  *         cdef const_char *cprefix = NULL
  *         prefix = str2bytes(prefix, &cprefix)
  *         CHKERR( TaoSetOptionsPrefix(self.tao, cprefix) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetOptionsPrefix(__pyx_v_self->tao, __pyx_v_cprefix)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetOptionsPrefix(__pyx_v_self->tao, __pyx_v_cprefix)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 107, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":107
+  /* "PETSc/TAO.pyx":102
  *         return bytes2str(ctype)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -185142,7 +187965,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_14setOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":114
+/* "PETSc/TAO.pyx":109
  *         CHKERR( TaoSetOptionsPrefix(self.tao, cprefix) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -185151,34 +187974,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_14setOptionsPrefix(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_17getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_16getOptionsPrefix[] = "TAO.getOptionsPrefix(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_17getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_14getOptionsPrefix[] = "TAO.getOptionsPrefix(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_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_8petsc4py_5PETSc_3TAO_16getOptionsPrefix(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_14getOptionsPrefix(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16getOptionsPrefix(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_14getOptionsPrefix(struct PyPetscTAOObject *__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);
 
-  /* "PETSc/TAO.pyx":117
+  /* "PETSc/TAO.pyx":112
  *         """
  *         """
  *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
@@ -185187,16 +188007,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16getOptionsPrefix(struct PyPets
  */
   __pyx_v_prefix = NULL;
 
-  /* "PETSc/TAO.pyx":118
+  /* "PETSc/TAO.pyx":113
  *         """
  *         cdef const_char *prefix = NULL
  *         CHKERR( TaoGetOptionsPrefix(self.tao, &prefix) )             # <<<<<<<<<<<<<<
  *         return bytes2str(prefix)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetOptionsPrefix(__pyx_v_self->tao, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetOptionsPrefix(__pyx_v_self->tao, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 113, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":119
+  /* "PETSc/TAO.pyx":114
  *         cdef const_char *prefix = NULL
  *         CHKERR( TaoGetOptionsPrefix(self.tao, &prefix) )
  *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
@@ -185204,13 +188024,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16getOptionsPrefix(struct PyPets
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":114
+  /* "PETSc/TAO.pyx":109
  *         CHKERR( TaoSetOptionsPrefix(self.tao, cprefix) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -185229,7 +188049,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16getOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":121
+/* "PETSc/TAO.pyx":116
  *         return bytes2str(prefix)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -185238,41 +188058,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16getOptionsPrefix(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_19setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_18setFromOptions[] = "TAO.setFromOptions(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_19setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_16setFromOptions[] = "TAO.setFromOptions(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_17setFromOptions(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_8petsc4py_5PETSc_3TAO_18setFromOptions(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_16setFromOptions(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_18setFromOptions(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16setFromOptions(struct PyPetscTAOObject *__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);
 
-  /* "PETSc/TAO.pyx":124
+  /* "PETSc/TAO.pyx":119
  *         """
  *         """
  *         CHKERR( TaoSetFromOptions(self.tao) )             # <<<<<<<<<<<<<<
  * 
  *     def setUp(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetFromOptions(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetFromOptions(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 119, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":121
+  /* "PETSc/TAO.pyx":116
  *         return bytes2str(prefix)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -185292,7 +188109,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_18setFromOptions(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":126
+/* "PETSc/TAO.pyx":121
  *         CHKERR( TaoSetFromOptions(self.tao) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -185301,41 +188118,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_18setFromOptions(struct PyPetscT
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_21setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_20setUp[] = "TAO.setUp(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_21setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_19setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_18setUp[] = "TAO.setUp(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_19setUp(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_8petsc4py_5PETSc_3TAO_20setUp(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_18setUp(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_20setUp(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_18setUp(struct PyPetscTAOObject *__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);
 
-  /* "PETSc/TAO.pyx":129
+  /* "PETSc/TAO.pyx":124
  *         """
  *         """
  *         CHKERR( TaoSetUp(self.tao) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetUp(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetUp(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 124, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":126
+  /* "PETSc/TAO.pyx":121
  *         CHKERR( TaoSetFromOptions(self.tao) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -185355,7 +188169,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_20setUp(struct PyPetscTAOObject
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":133
+/* "PETSc/TAO.pyx":128
  *     #
  * 
  *     def setInitialTrustRegionRadius(self, radius):             # <<<<<<<<<<<<<<
@@ -185364,13 +188178,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_20setUp(struct PyPetscTAOObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_23setInitialTrustRegionRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_22setInitialTrustRegionRadius[] = "TAO.setInitialTrustRegionRadius(self, radius)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_23setInitialTrustRegionRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_21setInitialTrustRegionRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_20setInitialTrustRegionRadius[] = "TAO.setInitialTrustRegionRadius(self, radius)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_21setInitialTrustRegionRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_radius = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setInitialTrustRegionRadius (wrapper)", 0);
@@ -185392,7 +188203,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_23setInitialTrustRegionRadius(Py
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialTrustRegionRadius") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialTrustRegionRadius") < 0)) __PYX_ERR(38, 128, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -185403,50 +188214,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_23setInitialTrustRegionRadius(Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialTrustRegionRadius", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInitialTrustRegionRadius", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 128, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setInitialTrustRegionRadius", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_22setInitialTrustRegionRadius(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_radius);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_20setInitialTrustRegionRadius(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_radius);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_22setInitialTrustRegionRadius(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_radius) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_20setInitialTrustRegionRadius(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_radius) {
   PetscReal __pyx_v_cradius;
   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("setInitialTrustRegionRadius", 0);
 
-  /* "PETSc/TAO.pyx":134
+  /* "PETSc/TAO.pyx":129
  * 
  *     def setInitialTrustRegionRadius(self, radius):
  *         cdef PetscReal cradius = asReal(radius)             # <<<<<<<<<<<<<<
  *         CHKERR( TaoSetInitialTrustRegionRadius(self.tao, cradius) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_radius); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_radius); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(38, 129, __pyx_L1_error)
   __pyx_v_cradius = __pyx_t_1;
 
-  /* "PETSc/TAO.pyx":135
+  /* "PETSc/TAO.pyx":130
  *     def setInitialTrustRegionRadius(self, radius):
  *         cdef PetscReal cradius = asReal(radius)
  *         CHKERR( TaoSetInitialTrustRegionRadius(self.tao, cradius) )             # <<<<<<<<<<<<<<
  * 
  *     # --------------
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetInitialTrustRegionRadius(__pyx_v_self->tao, __pyx_v_cradius)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetInitialTrustRegionRadius(__pyx_v_self->tao, __pyx_v_cradius)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 130, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":133
+  /* "PETSc/TAO.pyx":128
  *     #
  * 
  *     def setInitialTrustRegionRadius(self, radius):             # <<<<<<<<<<<<<<
@@ -185466,7 +188274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_22setInitialTrustRegionRadius(st
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":139
+/* "PETSc/TAO.pyx":134
  *     # --------------
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -185475,13 +188283,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_22setInitialTrustRegionRadius(st
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_25setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_24setAppCtx[] = "TAO.setAppCtx(self, appctx)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_25setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_23setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_22setAppCtx[] = "TAO.setAppCtx(self, appctx)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_23setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_appctx = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAppCtx (wrapper)", 0);
@@ -185503,7 +188308,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_25setAppCtx(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, "setAppCtx") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) __PYX_ERR(38, 134, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -185514,40 +188319,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_25setAppCtx(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 134, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_24setAppCtx(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_appctx);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_22setAppCtx(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_appctx);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_24setAppCtx(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_appctx) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_22setAppCtx(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_appctx) {
   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("setAppCtx", 0);
 
-  /* "PETSc/TAO.pyx":140
+  /* "PETSc/TAO.pyx":135
  * 
  *     def setAppCtx(self, appctx):
  *         self.set_attr("__appctx__", appctx)             # <<<<<<<<<<<<<<
  * 
  *     def getAppCtx(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2, __pyx_v_appctx); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__"), __pyx_v_appctx); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TAO.pyx":139
+  /* "PETSc/TAO.pyx":134
  *     # --------------
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -185568,7 +188370,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_24setAppCtx(struct PyPetscTAOObj
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":142
+/* "PETSc/TAO.pyx":137
  *         self.set_attr("__appctx__", appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -185577,32 +188379,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_24setAppCtx(struct PyPetscTAOObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_27getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_26getAppCtx[] = "TAO.getAppCtx(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_27getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_25getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_24getAppCtx[] = "TAO.getAppCtx(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_25getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getAppCtx (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getAppCtx", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAppCtx", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_26getAppCtx(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_24getAppCtx(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_26getAppCtx(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_24getAppCtx(struct PyPetscTAOObject *__pyx_v_self) {
   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("getAppCtx", 0);
 
-  /* "PETSc/TAO.pyx":143
+  /* "PETSc/TAO.pyx":138
  * 
  *     def getAppCtx(self):
  *         return self.get_attr("__appctx__")             # <<<<<<<<<<<<<<
@@ -185610,13 +188409,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_26getAppCtx(struct PyPetscTAOObj
  *     def setInitial(self, Vec x not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 138, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":142
+  /* "PETSc/TAO.pyx":137
  *         self.set_attr("__appctx__", appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -185635,7 +188434,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_26getAppCtx(struct PyPetscTAOObj
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":145
+/* "PETSc/TAO.pyx":140
  *         return self.get_attr("__appctx__")
  * 
  *     def setInitial(self, Vec x not None):             # <<<<<<<<<<<<<<
@@ -185644,13 +188443,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_26getAppCtx(struct PyPetscTAOObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setInitial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_28setInitial[] = "TAO.setInitial(self, Vec x)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setInitial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_27setInitial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_26setInitial[] = "TAO.setInitial(self, Vec x)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_27setInitial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setInitial (wrapper)", 0);
@@ -185672,7 +188468,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setInitial(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitial") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitial") < 0)) __PYX_ERR(38, 140, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -185683,14 +188479,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setInitial(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitial", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInitial", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 140, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setInitial", __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[38]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_28setInitial(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(38, 140, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_26setInitial(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -185701,25 +188497,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setInitial(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_28setInitial(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_26setInitial(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x) {
   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("setInitial", 0);
 
-  /* "PETSc/TAO.pyx":148
+  /* "PETSc/TAO.pyx":143
  *         """
  *         """
  *         CHKERR( TaoSetInitialVector(self.tao, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def setObjective(self, objective, args=None, kargs=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetInitialVector(__pyx_v_self->tao, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetInitialVector(__pyx_v_self->tao, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 143, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":145
+  /* "PETSc/TAO.pyx":140
  *         return self.get_attr("__appctx__")
  * 
  *     def setInitial(self, Vec x not None):             # <<<<<<<<<<<<<<
@@ -185739,7 +188532,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_28setInitial(struct PyPetscTAOOb
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":150
+/* "PETSc/TAO.pyx":145
  *         CHKERR( TaoSetInitialVector(self.tao, x.vec) )
  * 
  *     def setObjective(self, objective, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -185748,20 +188541,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_28setInitial(struct PyPetscTAOOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_30setObjective[] = "TAO.setObjective(self, objective, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_28setObjective[] = "TAO.setObjective(self, objective, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_objective = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setObjective (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_objective_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_objective,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -185778,7 +188568,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setObjective(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_objective_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_objective)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -185792,7 +188582,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setObjective(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setObjective") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setObjective") < 0)) __PYX_ERR(38, 145, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -185809,20 +188599,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setObjective(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setObjective", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setObjective", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 145, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setObjective", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_objective, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_28setObjective(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_objective, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_objective, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_28setObjective(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_objective, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -185830,23 +188620,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(struct PyPetscTAO
   int __pyx_t_3;
   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("setObjective", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":153
+  /* "PETSc/TAO.pyx":148
  *         """
  *         """
  *         CHKERR( TaoSetObjectiveRoutine(self.tao, TAO_Objective, NULL) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetObjectiveRoutine(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_Objective, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetObjectiveRoutine(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_Objective, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 148, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":154
+  /* "PETSc/TAO.pyx":149
  *         """
  *         CHKERR( TaoSetObjectiveRoutine(self.tao, TAO_Objective, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -185858,11 +188645,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(struct PyPetscTAO
   if (__pyx_t_3) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":155
+  /* "PETSc/TAO.pyx":150
  *         CHKERR( TaoSetObjectiveRoutine(self.tao, TAO_Objective, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -185872,22 +188657,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(struct PyPetscTAO
   __pyx_t_3 = (__pyx_v_kargs == Py_None);
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
-    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 150, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":156
+  /* "PETSc/TAO.pyx":151
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__objective__", (objective, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def setSeparableObjective(self, separable, Vec O=None,
  */
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 151, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_objective);
   __Pyx_GIVEREF(__pyx_v_objective);
@@ -185898,12 +188681,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(struct PyPetscTAO
   __Pyx_INCREF(__pyx_v_kargs);
   __Pyx_GIVEREF(__pyx_v_kargs);
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
-  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_objective, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__objective__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 151, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/TAO.pyx":150
+  /* "PETSc/TAO.pyx":145
  *         CHKERR( TaoSetInitialVector(self.tao, x.vec) )
  * 
  *     def setObjective(self, objective, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -185927,7 +188710,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(struct PyPetscTAO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":158
+/* "PETSc/TAO.pyx":153
  *         self.set_attr("__objective__", (objective, args, kargs))
  * 
  *     def setSeparableObjective(self, separable, Vec O=None,             # <<<<<<<<<<<<<<
@@ -185936,25 +188719,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setObjective(struct PyPetscTAO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setSeparableObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_32setSeparableObjective[] = "TAO.setSeparableObjective(self, separable, Vec O=None, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setSeparableObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setSeparableObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_30setSeparableObjective[] = "TAO.setSeparableObjective(self, separable, Vec O=None, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setSeparableObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_separable = 0;
   struct PyPetscVecObject *__pyx_v_O = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setSeparableObjective (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_separable_2,&__pyx_n_s_O,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_separable,&__pyx_n_s_O,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[4] = {0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
 
-    /* "PETSc/TAO.pyx":159
+    /* "PETSc/TAO.pyx":154
  * 
  *     def setSeparableObjective(self, separable, Vec O=None,
  *                               args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -185977,7 +188757,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setSeparableObjective(PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_separable_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_separable)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -185996,7 +188776,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setSeparableObjective(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSeparableObjective") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSeparableObjective") < 0)) __PYX_ERR(38, 153, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -186015,16 +188795,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setSeparableObjective(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSeparableObjective", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSeparableObjective", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 153, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setSeparableObjective", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_O), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "O", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_separable, __pyx_v_O, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_O), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "O", 0))) __PYX_ERR(38, 153, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_30setSeparableObjective(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_separable, __pyx_v_O, __pyx_v_args, __pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":158
+  /* "PETSc/TAO.pyx":153
  *         self.set_attr("__objective__", (objective, args, kargs))
  * 
  *     def setSeparableObjective(self, separable, Vec O=None,             # <<<<<<<<<<<<<<
@@ -186041,7 +188821,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setSeparableObjective(PyObject
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_separable, struct PyPetscVecObject *__pyx_v_O, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setSeparableObjective(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_separable, struct PyPetscVecObject *__pyx_v_O, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Vec __pyx_v_Ovec;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -186051,14 +188831,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct P
   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("setSeparableObjective", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":162
+  /* "PETSc/TAO.pyx":157
  *         """
  *         """
  *         cdef PetscVec Ovec = NULL             # <<<<<<<<<<<<<<
@@ -186067,7 +188844,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct P
  */
   __pyx_v_Ovec = NULL;
 
-  /* "PETSc/TAO.pyx":163
+  /* "PETSc/TAO.pyx":158
  *         """
  *         cdef PetscVec Ovec = NULL
  *         if O is not None: Ovec = O.vec             # <<<<<<<<<<<<<<
@@ -186079,29 +188856,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct P
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_O->vec;
     __pyx_v_Ovec = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":164
+  /* "PETSc/TAO.pyx":159
  *         cdef PetscVec Ovec = NULL
  *         if O is not None: Ovec = O.vec
  *         CHKERR( TaoSetSeparableObjectiveRoutine(self.tao, Ovec,             # <<<<<<<<<<<<<<
  *                                                 TAO_SeparableObjective, NULL) )
  *         CHKERR( PetscObjectCompose(self.obj[0], "@sepobjvec", <PetscObject>Ovec) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetSeparableObjectiveRoutine(__pyx_v_self->tao, __pyx_v_Ovec, __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetSeparableObjectiveRoutine(__pyx_v_self->tao, __pyx_v_Ovec, __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 159, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":166
+  /* "PETSc/TAO.pyx":161
  *         CHKERR( TaoSetSeparableObjectiveRoutine(self.tao, Ovec,
  *                                                 TAO_SeparableObjective, NULL) )
  *         CHKERR( PetscObjectCompose(self.obj[0], "@sepobjvec", <PetscObject>Ovec) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectCompose((__pyx_v_self->__pyx_base.obj[0]), __pyx_k_sepobjvec, ((PetscObject)__pyx_v_Ovec))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectCompose((__pyx_v_self->__pyx_base.obj[0]), ((char *)"@sepobjvec"), ((PetscObject)__pyx_v_Ovec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 161, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":167
+  /* "PETSc/TAO.pyx":162
  *                                                 TAO_SeparableObjective, NULL) )
  *         CHKERR( PetscObjectCompose(self.obj[0], "@sepobjvec", <PetscObject>Ovec) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -186113,11 +188888,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct P
   if (__pyx_t_1) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":168
+  /* "PETSc/TAO.pyx":163
  *         CHKERR( PetscObjectCompose(self.obj[0], "@sepobjvec", <PetscObject>Ovec) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -186127,22 +188900,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct P
   __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[38]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 163, __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:;
 
-  /* "PETSc/TAO.pyx":169
+  /* "PETSc/TAO.pyx":164
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__separable__", (separable, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def setGradient(self, gradient, args=None, kargs=None):
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_separable);
   __Pyx_GIVEREF(__pyx_v_separable);
@@ -186153,12 +188924,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct P
   __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_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_separable, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__separable__"), __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 164, __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;
 
-  /* "PETSc/TAO.pyx":158
+  /* "PETSc/TAO.pyx":153
  *         self.set_attr("__objective__", (objective, args, kargs))
  * 
  *     def setSeparableObjective(self, separable, Vec O=None,             # <<<<<<<<<<<<<<
@@ -186182,7 +188953,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct P
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":171
+/* "PETSc/TAO.pyx":166
  *         self.set_attr("__separable__", (separable, args, kargs))
  * 
  *     def setGradient(self, gradient, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -186191,20 +188962,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setSeparableObjective(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_34setGradient[] = "TAO.setGradient(self, gradient, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_32setGradient[] = "TAO.setGradient(self, gradient, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_gradient = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGradient (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gradient_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gradient,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -186221,7 +188989,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setGradient(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_gradient_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gradient)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -186235,7 +189003,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setGradient(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGradient") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGradient") < 0)) __PYX_ERR(38, 166, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -186252,20 +189020,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setGradient(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGradient", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGradient", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 166, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setGradient", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_gradient, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_32setGradient(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_gradient, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_gradient, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setGradient(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_gradient, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -186273,23 +189041,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(struct PyPetscTAOO
   int __pyx_t_3;
   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("setGradient", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":174
+  /* "PETSc/TAO.pyx":169
  *         """
  *         """
  *         CHKERR( TaoSetGradientRoutine(self.tao, TAO_Gradient, NULL) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetGradientRoutine(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_Gradient, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetGradientRoutine(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_Gradient, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 169, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":175
+  /* "PETSc/TAO.pyx":170
  *         """
  *         CHKERR( TaoSetGradientRoutine(self.tao, TAO_Gradient, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -186301,11 +189066,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(struct PyPetscTAOO
   if (__pyx_t_3) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":176
+  /* "PETSc/TAO.pyx":171
  *         CHKERR( TaoSetGradientRoutine(self.tao, TAO_Gradient, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -186315,22 +189078,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(struct PyPetscTAOO
   __pyx_t_3 = (__pyx_v_kargs == Py_None);
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
-    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 171, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":177
+  /* "PETSc/TAO.pyx":172
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__gradient__", (gradient, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def setObjectiveGradient(self, objgrad, args=None, kargs=None):
  */
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 172, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_gradient);
   __Pyx_GIVEREF(__pyx_v_gradient);
@@ -186341,12 +189102,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(struct PyPetscTAOO
   __Pyx_INCREF(__pyx_v_kargs);
   __Pyx_GIVEREF(__pyx_v_kargs);
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
-  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_gradient, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__gradient__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 172, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/TAO.pyx":171
+  /* "PETSc/TAO.pyx":166
  *         self.set_attr("__separable__", (separable, args, kargs))
  * 
  *     def setGradient(self, gradient, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -186370,7 +189131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(struct PyPetscTAOO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":179
+/* "PETSc/TAO.pyx":174
  *         self.set_attr("__gradient__", (gradient, args, kargs))
  * 
  *     def setObjectiveGradient(self, objgrad, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -186379,20 +189140,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setGradient(struct PyPetscTAOO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setObjectiveGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_36setObjectiveGradient[] = "TAO.setObjectiveGradient(self, objgrad, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setObjectiveGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setObjectiveGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_34setObjectiveGradient[] = "TAO.setObjectiveGradient(self, objgrad, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setObjectiveGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_objgrad = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setObjectiveGradient (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_objgrad_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_objgrad,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -186409,7 +189167,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setObjectiveGradient(PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_objgrad_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_objgrad)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -186423,7 +189181,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setObjectiveGradient(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setObjectiveGradient") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setObjectiveGradient") < 0)) __PYX_ERR(38, 174, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -186440,20 +189198,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setObjectiveGradient(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setObjectiveGradient", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setObjectiveGradient", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 174, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setObjectiveGradient", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_objgrad, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_34setObjectiveGradient(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_objgrad, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_objgrad, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setObjectiveGradient(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_objgrad, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -186461,23 +189219,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(struct Py
   int __pyx_t_3;
   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("setObjectiveGradient", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":182
+  /* "PETSc/TAO.pyx":177
  *         """
  *         """
  *         CHKERR( TaoSetObjectiveAndGradientRoutine(self.tao, TAO_ObjGrad, NULL) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetObjectiveAndGradientRoutine(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetObjectiveAndGradientRoutine(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 177, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":183
+  /* "PETSc/TAO.pyx":178
  *         """
  *         CHKERR( TaoSetObjectiveAndGradientRoutine(self.tao, TAO_ObjGrad, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -186489,11 +189244,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(struct Py
   if (__pyx_t_3) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":184
+  /* "PETSc/TAO.pyx":179
  *         CHKERR( TaoSetObjectiveAndGradientRoutine(self.tao, TAO_ObjGrad, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -186503,22 +189256,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(struct Py
   __pyx_t_3 = (__pyx_v_kargs == Py_None);
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
-    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 179, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
     __pyx_t_4 = 0;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":185
+  /* "PETSc/TAO.pyx":180
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__objgrad__", (objgrad, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def setVariableBounds(self, varbounds, args=None, kargs=None):
  */
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 180, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_objgrad);
   __Pyx_GIVEREF(__pyx_v_objgrad);
@@ -186529,12 +189280,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(struct Py
   __Pyx_INCREF(__pyx_v_kargs);
   __Pyx_GIVEREF(__pyx_v_kargs);
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
-  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_objgrad, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__objgrad__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 180, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/TAO.pyx":179
+  /* "PETSc/TAO.pyx":174
  *         self.set_attr("__gradient__", (gradient, args, kargs))
  * 
  *     def setObjectiveGradient(self, objgrad, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -186558,7 +189309,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":187
+/* "PETSc/TAO.pyx":182
  *         self.set_attr("__objgrad__", (objgrad, args, kargs))
  * 
  *     def setVariableBounds(self, varbounds, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -186567,20 +189318,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setObjectiveGradient(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_38setVariableBounds[] = "TAO.setVariableBounds(self, varbounds, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_36setVariableBounds[] = "TAO.setVariableBounds(self, varbounds, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_varbounds = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setVariableBounds (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_varbounds_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_varbounds,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -186597,7 +189345,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setVariableBounds(PyObject *__
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varbounds_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varbounds)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -186611,7 +189359,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setVariableBounds(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVariableBounds") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVariableBounds") < 0)) __PYX_ERR(38, 182, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -186628,20 +189376,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setVariableBounds(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setVariableBounds", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setVariableBounds", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 182, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setVariableBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_varbounds, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_varbounds, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_varbounds, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_varbounds, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   struct PyPetscVecObject *__pyx_v_xl = 0;
   struct PyPetscVecObject *__pyx_v_xu = 0;
   PyObject *__pyx_v_ol = NULL;
@@ -186656,14 +189404,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
   PyObject *__pyx_t_6 = NULL;
   PyObject *(*__pyx_t_7)(PyObject *);
   int __pyx_t_8;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setVariableBounds", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":190
+  /* "PETSc/TAO.pyx":185
  *         """
  *         """
  *         cdef Vec xl=None, xu=None             # <<<<<<<<<<<<<<
@@ -186675,7 +189420,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
   __Pyx_INCREF(Py_None);
   __pyx_v_xu = ((struct PyPetscVecObject *)Py_None);
 
-  /* "PETSc/TAO.pyx":191
+  /* "PETSc/TAO.pyx":186
  *         """
  *         cdef Vec xl=None, xu=None
  *         if (isinstance(varbounds, list) or isinstance(varbounds, tuple)):             # <<<<<<<<<<<<<<
@@ -186695,7 +189440,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/TAO.pyx":192
+    /* "PETSc/TAO.pyx":187
  *         cdef Vec xl=None, xu=None
  *         if (isinstance(varbounds, list) or isinstance(varbounds, tuple)):
  *             ol, ou = varbounds             # <<<<<<<<<<<<<<
@@ -186712,7 +189457,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[38]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(38, 187, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -186725,21 +189470,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 187, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 187, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_v_varbounds); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_v_varbounds); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 187, __pyx_L1_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_L6_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_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(38, 187, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L7_unpacking_done;
@@ -186747,7 +189492,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[38]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(38, 187, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_ol = __pyx_t_4;
@@ -186755,34 +189500,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
     __pyx_v_ou = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "PETSc/TAO.pyx":193
+    /* "PETSc/TAO.pyx":188
  *         if (isinstance(varbounds, list) or isinstance(varbounds, tuple)):
  *             ol, ou = varbounds
  *             xl = <Vec?> ol; xu = <Vec?> ou             # <<<<<<<<<<<<<<
  *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )
  *             return
  */
-    if (!(likely(__Pyx_TypeTest(__pyx_v_ol, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_v_ol, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(38, 188, __pyx_L1_error)
     __pyx_t_5 = __pyx_v_ol;
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_xl, ((struct PyPetscVecObject *)__pyx_t_5));
     __pyx_t_5 = 0;
-    if (!(likely(__Pyx_TypeTest(__pyx_v_ou, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_v_ou, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(38, 188, __pyx_L1_error)
     __pyx_t_5 = __pyx_v_ou;
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_xu, ((struct PyPetscVecObject *)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "PETSc/TAO.pyx":194
+    /* "PETSc/TAO.pyx":189
  *             ol, ou = varbounds
  *             xl = <Vec?> ol; xu = <Vec?> ou
  *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )             # <<<<<<<<<<<<<<
  *             return
  *         if isinstance(varbounds, Vec):
  */
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetVariableBounds(__pyx_v_self->tao, __pyx_v_xl->vec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetVariableBounds(__pyx_v_self->tao, __pyx_v_xl->vec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(38, 189, __pyx_L1_error)
 
-    /* "PETSc/TAO.pyx":195
+    /* "PETSc/TAO.pyx":190
  *             xl = <Vec?> ol; xu = <Vec?> ou
  *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )
  *             return             # <<<<<<<<<<<<<<
@@ -186792,20 +189537,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
     __Pyx_XDECREF(__pyx_r);
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
+
+    /* "PETSc/TAO.pyx":186
+ *         """
+ *         cdef Vec xl=None, xu=None
+ *         if (isinstance(varbounds, list) or isinstance(varbounds, tuple)):             # <<<<<<<<<<<<<<
+ *             ol, ou = varbounds
+ *             xl = <Vec?> ol; xu = <Vec?> ou
+ */
   }
 
-  /* "PETSc/TAO.pyx":196
+  /* "PETSc/TAO.pyx":191
  *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )
  *             return
  *         if isinstance(varbounds, Vec):             # <<<<<<<<<<<<<<
  *             ol = varbounds; ou = args
  *             xl = <Vec?> ol; xu = <Vec?> ou
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_varbounds, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_varbounds, __pyx_ptype_8petsc4py_5PETSc_Vec); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TAO.pyx":197
+    /* "PETSc/TAO.pyx":192
  *             return
  *         if isinstance(varbounds, Vec):
  *             ol = varbounds; ou = args             # <<<<<<<<<<<<<<
@@ -186817,34 +189570,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
     __Pyx_INCREF(__pyx_v_args);
     __pyx_v_ou = __pyx_v_args;
 
-    /* "PETSc/TAO.pyx":198
+    /* "PETSc/TAO.pyx":193
  *         if isinstance(varbounds, Vec):
  *             ol = varbounds; ou = args
  *             xl = <Vec?> ol; xu = <Vec?> ou             # <<<<<<<<<<<<<<
  *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )
  *             return
  */
-    if (!(likely(__Pyx_TypeTest(__pyx_v_ol, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_v_ol, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(38, 193, __pyx_L1_error)
     __pyx_t_5 = __pyx_v_ol;
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_xl, ((struct PyPetscVecObject *)__pyx_t_5));
     __pyx_t_5 = 0;
-    if (!(likely(__Pyx_TypeTest(__pyx_v_ou, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_v_ou, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(38, 193, __pyx_L1_error)
     __pyx_t_5 = __pyx_v_ou;
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_xu, ((struct PyPetscVecObject *)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "PETSc/TAO.pyx":199
+    /* "PETSc/TAO.pyx":194
  *             ol = varbounds; ou = args
  *             xl = <Vec?> ol; xu = <Vec?> ou
  *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )             # <<<<<<<<<<<<<<
  *             return
  *         CHKERR( TaoSetVariableBoundsRoutine(self.tao, TAO_VarBounds, NULL) )
  */
-    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetVariableBounds(__pyx_v_self->tao, __pyx_v_xl->vec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetVariableBounds(__pyx_v_self->tao, __pyx_v_xl->vec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(38, 194, __pyx_L1_error)
 
-    /* "PETSc/TAO.pyx":200
+    /* "PETSc/TAO.pyx":195
  *             xl = <Vec?> ol; xu = <Vec?> ou
  *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )
  *             return             # <<<<<<<<<<<<<<
@@ -186854,18 +189607,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
     __Pyx_XDECREF(__pyx_r);
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
+
+    /* "PETSc/TAO.pyx":191
+ *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )
+ *             return
+ *         if isinstance(varbounds, Vec):             # <<<<<<<<<<<<<<
+ *             ol = varbounds; ou = args
+ *             xl = <Vec?> ol; xu = <Vec?> ou
+ */
   }
 
-  /* "PETSc/TAO.pyx":201
+  /* "PETSc/TAO.pyx":196
  *             CHKERR( TaoSetVariableBounds(self.tao, xl.vec, xu.vec) )
  *             return
  *         CHKERR( TaoSetVariableBoundsRoutine(self.tao, TAO_VarBounds, NULL) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetVariableBoundsRoutine(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_VarBounds, NULL)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetVariableBoundsRoutine(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_VarBounds, NULL)); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(38, 196, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":202
+  /* "PETSc/TAO.pyx":197
  *             return
  *         CHKERR( TaoSetVariableBoundsRoutine(self.tao, TAO_VarBounds, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -186877,11 +189638,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
   if (__pyx_t_1) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L9;
   }
-  __pyx_L9:;
 
-  /* "PETSc/TAO.pyx":203
+  /* "PETSc/TAO.pyx":198
  *         CHKERR( TaoSetVariableBoundsRoutine(self.tao, TAO_VarBounds, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -186891,22 +189650,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
   __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[38]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 198, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_5);
     __pyx_t_5 = 0;
-    goto __pyx_L10;
   }
-  __pyx_L10:;
 
-  /* "PETSc/TAO.pyx":204
+  /* "PETSc/TAO.pyx":199
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__varbounds__", (varbounds, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def setConstraints(self, constraints, Vec C=None,
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 199, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_varbounds);
   __Pyx_GIVEREF(__pyx_v_varbounds);
@@ -186917,12 +189674,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
   __Pyx_INCREF(__pyx_v_kargs);
   __Pyx_GIVEREF(__pyx_v_kargs);
   PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_kargs);
-  __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_varbounds, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__varbounds__"), __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 199, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/TAO.pyx":187
+  /* "PETSc/TAO.pyx":182
  *         self.set_attr("__objgrad__", (objgrad, args, kargs))
  * 
  *     def setVariableBounds(self, varbounds, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -186951,7 +189708,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":206
+/* "PETSc/TAO.pyx":201
  *         self.set_attr("__varbounds__", (varbounds, args, kargs))
  * 
  *     def setConstraints(self, constraints, Vec C=None,             # <<<<<<<<<<<<<<
@@ -186960,25 +189717,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setVariableBounds(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setConstraints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_40setConstraints[] = "TAO.setConstraints(self, constraints, Vec C=None, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setConstraints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setConstraints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_38setConstraints[] = "TAO.setConstraints(self, constraints, Vec C=None, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setConstraints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_constraints = 0;
   struct PyPetscVecObject *__pyx_v_C = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConstraints (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_constraints_2,&__pyx_n_s_C,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_constraints,&__pyx_n_s_C,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[4] = {0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
 
-    /* "PETSc/TAO.pyx":207
+    /* "PETSc/TAO.pyx":202
  * 
  *     def setConstraints(self, constraints, Vec C=None,
  *                        args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -187001,7 +189755,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setConstraints(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_constraints_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_constraints)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -187020,7 +189774,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setConstraints(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConstraints") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConstraints") < 0)) __PYX_ERR(38, 201, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -187039,16 +189793,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setConstraints(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConstraints", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConstraints", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 201, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setConstraints", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_C), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "C", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_constraints, __pyx_v_C, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_C), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "C", 0))) __PYX_ERR(38, 201, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_38setConstraints(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_constraints, __pyx_v_C, __pyx_v_args, __pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":206
+  /* "PETSc/TAO.pyx":201
  *         self.set_attr("__varbounds__", (varbounds, args, kargs))
  * 
  *     def setConstraints(self, constraints, Vec C=None,             # <<<<<<<<<<<<<<
@@ -187065,7 +189819,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setConstraints(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_constraints, struct PyPetscVecObject *__pyx_v_C, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setConstraints(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_constraints, struct PyPetscVecObject *__pyx_v_C, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Vec __pyx_v_Cvec;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -187075,14 +189829,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscT
   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("setConstraints", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":210
+  /* "PETSc/TAO.pyx":205
  *         """
  *         """
  *         cdef PetscVec Cvec=NULL             # <<<<<<<<<<<<<<
@@ -187091,7 +189842,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscT
  */
   __pyx_v_Cvec = NULL;
 
-  /* "PETSc/TAO.pyx":211
+  /* "PETSc/TAO.pyx":206
  *         """
  *         cdef PetscVec Cvec=NULL
  *         if C is not None: Cvec = C.vec             # <<<<<<<<<<<<<<
@@ -187103,20 +189854,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscT
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_C->vec;
     __pyx_v_Cvec = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":212
+  /* "PETSc/TAO.pyx":207
  *         cdef PetscVec Cvec=NULL
  *         if C is not None: Cvec = C.vec
  *         CHKERR( TaoSetConstraintsRoutine(self.tao, Cvec, TAO_Constraints, NULL) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConstraintsRoutine(__pyx_v_self->tao, __pyx_v_Cvec, __pyx_f_8petsc4py_5PETSc_TAO_Constraints, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConstraintsRoutine(__pyx_v_self->tao, __pyx_v_Cvec, __pyx_f_8petsc4py_5PETSc_TAO_Constraints, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 207, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":213
+  /* "PETSc/TAO.pyx":208
  *         if C is not None: Cvec = C.vec
  *         CHKERR( TaoSetConstraintsRoutine(self.tao, Cvec, TAO_Constraints, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -187128,11 +189877,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscT
   if (__pyx_t_1) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":214
+  /* "PETSc/TAO.pyx":209
  *         CHKERR( TaoSetConstraintsRoutine(self.tao, Cvec, TAO_Constraints, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -187142,22 +189889,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscT
   __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[38]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 209, __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:;
 
-  /* "PETSc/TAO.pyx":215
+  /* "PETSc/TAO.pyx":210
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__constraints__", (constraints, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def setHessian(self, hessian, Mat H=None, Mat P=None,
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_constraints);
   __Pyx_GIVEREF(__pyx_v_constraints);
@@ -187168,12 +189913,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscT
   __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_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_constraints, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__constraints__"), __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 210, __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;
 
-  /* "PETSc/TAO.pyx":206
+  /* "PETSc/TAO.pyx":201
  *         self.set_attr("__varbounds__", (varbounds, args, kargs))
  * 
  *     def setConstraints(self, constraints, Vec C=None,             # <<<<<<<<<<<<<<
@@ -187197,7 +189942,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":217
+/* "PETSc/TAO.pyx":212
  *         self.set_attr("__constraints__", (constraints, args, kargs))
  * 
  *     def setHessian(self, hessian, Mat H=None, Mat P=None,             # <<<<<<<<<<<<<<
@@ -187206,27 +189951,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setConstraints(struct PyPetscT
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setHessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_42setHessian[] = "TAO.setHessian(self, hessian, Mat H=None, Mat P=None, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setHessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setHessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_40setHessian[] = "TAO.setHessian(self, hessian, Mat H=None, Mat P=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setHessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_hessian = 0;
   struct PyPetscMatObject *__pyx_v_H = 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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setHessian (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_hessian_2,&__pyx_n_s_H,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_hessian,&__pyx_n_s_H,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[5] = {0,0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscMatObject *)Py_None);
     values[2] = (PyObject *)((struct PyPetscMatObject *)Py_None);
 
-    /* "PETSc/TAO.pyx":218
+    /* "PETSc/TAO.pyx":213
  * 
  *     def setHessian(self, hessian, Mat H=None, Mat P=None,
  *                    args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -187250,7 +189992,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setHessian(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_hessian_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_hessian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -187274,7 +190016,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setHessian(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHessian") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHessian") < 0)) __PYX_ERR(38, 212, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -187295,17 +190037,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setHessian(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setHessian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setHessian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 212, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setHessian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_H), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "H", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 217; __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[38]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_hessian, __pyx_v_H, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_H), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "H", 0))) __PYX_ERR(38, 212, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(38, 212, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_40setHessian(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_hessian, __pyx_v_H, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":217
+  /* "PETSc/TAO.pyx":212
  *         self.set_attr("__constraints__", (constraints, args, kargs))
  * 
  *     def setHessian(self, hessian, Mat H=None, Mat P=None,             # <<<<<<<<<<<<<<
@@ -187322,7 +190064,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setHessian(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_hessian, struct PyPetscMatObject *__pyx_v_H, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setHessian(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_hessian, struct PyPetscMatObject *__pyx_v_H, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Mat __pyx_v_Hmat;
   Mat __pyx_v_Pmat;
   PyObject *__pyx_r = NULL;
@@ -187333,14 +190075,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
   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("setHessian", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":219
+  /* "PETSc/TAO.pyx":214
  *     def setHessian(self, hessian, Mat H=None, Mat P=None,
  *                    args=None, kargs=None):
  *         cdef PetscMat Hmat=NULL             # <<<<<<<<<<<<<<
@@ -187349,7 +190088,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
  */
   __pyx_v_Hmat = NULL;
 
-  /* "PETSc/TAO.pyx":220
+  /* "PETSc/TAO.pyx":215
  *                    args=None, kargs=None):
  *         cdef PetscMat Hmat=NULL
  *         if H is not None: Hmat = H.mat             # <<<<<<<<<<<<<<
@@ -187361,11 +190100,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_H->mat;
     __pyx_v_Hmat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":221
+  /* "PETSc/TAO.pyx":216
  *         cdef PetscMat Hmat=NULL
  *         if H is not None: Hmat = H.mat
  *         cdef PetscMat Pmat = Hmat             # <<<<<<<<<<<<<<
@@ -187374,7 +190111,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
  */
   __pyx_v_Pmat = __pyx_v_Hmat;
 
-  /* "PETSc/TAO.pyx":222
+  /* "PETSc/TAO.pyx":217
  *         if H is not None: Hmat = H.mat
  *         cdef PetscMat Pmat = Hmat
  *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
@@ -187386,20 +190123,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_Pmat = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":223
+  /* "PETSc/TAO.pyx":218
  *         cdef PetscMat Pmat = Hmat
  *         if P is not None: Pmat = P.mat
  *         CHKERR( TaoSetHessianRoutine(self.tao, Hmat, Pmat, TAO_Hessian, NULL) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetHessianRoutine(__pyx_v_self->tao, __pyx_v_Hmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TAO_Hessian, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetHessianRoutine(__pyx_v_self->tao, __pyx_v_Hmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TAO_Hessian, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 218, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":224
+  /* "PETSc/TAO.pyx":219
  *         if P is not None: Pmat = P.mat
  *         CHKERR( TaoSetHessianRoutine(self.tao, Hmat, Pmat, TAO_Hessian, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -187411,11 +190146,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
   if (__pyx_t_2) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/TAO.pyx":225
+  /* "PETSc/TAO.pyx":220
  *         CHKERR( TaoSetHessianRoutine(self.tao, Hmat, Pmat, TAO_Hessian, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -187425,22 +190158,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
   __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_filename = __pyx_f[38]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 220, __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_L6:;
 
-  /* "PETSc/TAO.pyx":226
+  /* "PETSc/TAO.pyx":221
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__hessian__", (hessian, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def setJacobian(self, jacobian, Mat J=None, Mat P=None,
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_hessian);
   __Pyx_GIVEREF(__pyx_v_hessian);
@@ -187451,12 +190182,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
   __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_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_hessian, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__hessian__"), __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 221, __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;
 
-  /* "PETSc/TAO.pyx":217
+  /* "PETSc/TAO.pyx":212
  *         self.set_attr("__constraints__", (constraints, args, kargs))
  * 
  *     def setHessian(self, hessian, Mat H=None, Mat P=None,             # <<<<<<<<<<<<<<
@@ -187480,7 +190211,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":228
+/* "PETSc/TAO.pyx":223
  *         self.set_attr("__hessian__", (hessian, args, kargs))
  * 
  *     def setJacobian(self, jacobian, Mat J=None, Mat P=None,             # <<<<<<<<<<<<<<
@@ -187489,27 +190220,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setHessian(struct PyPetscTAOOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_44setJacobian[] = "TAO.setJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_42setJacobian[] = "TAO.setJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_jacobian = 0;
   struct PyPetscMatObject *__pyx_v_J = 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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setJacobian (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_2,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[5] = {0,0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscMatObject *)Py_None);
     values[2] = (PyObject *)((struct PyPetscMatObject *)Py_None);
 
-    /* "PETSc/TAO.pyx":229
+    /* "PETSc/TAO.pyx":224
  * 
  *     def setJacobian(self, jacobian, Mat J=None, Mat P=None,
  *                     args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -187533,7 +190261,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setJacobian(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_jacobian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -187557,7 +190285,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setJacobian(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobian") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobian") < 0)) __PYX_ERR(38, 223, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -187578,17 +190306,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setJacobian(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 223, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.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_filename = __pyx_f[38]; __pyx_lineno = 228; __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[38]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(38, 223, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(38, 223, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_42setJacobian(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":228
+  /* "PETSc/TAO.pyx":223
  *         self.set_attr("__hessian__", (hessian, args, kargs))
  * 
  *     def setJacobian(self, jacobian, Mat J=None, Mat P=None,             # <<<<<<<<<<<<<<
@@ -187605,7 +190333,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setJacobian(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setJacobian(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Mat __pyx_v_Jmat;
   Mat __pyx_v_Pmat;
   PyObject *__pyx_r = NULL;
@@ -187616,14 +190344,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
   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);
 
-  /* "PETSc/TAO.pyx":232
+  /* "PETSc/TAO.pyx":227
  *         """
  *         """
  *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
@@ -187632,7 +190357,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
  */
   __pyx_v_Jmat = NULL;
 
-  /* "PETSc/TAO.pyx":233
+  /* "PETSc/TAO.pyx":228
  *         """
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
@@ -187644,11 +190369,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_J->mat;
     __pyx_v_Jmat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":234
+  /* "PETSc/TAO.pyx":229
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat = Jmat             # <<<<<<<<<<<<<<
@@ -187657,7 +190380,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
  */
   __pyx_v_Pmat = __pyx_v_Jmat;
 
-  /* "PETSc/TAO.pyx":235
+  /* "PETSc/TAO.pyx":230
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat = Jmat
  *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
@@ -187669,20 +190392,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_Pmat = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":236
+  /* "PETSc/TAO.pyx":231
  *         cdef PetscMat Pmat = Jmat
  *         if P is not None: Pmat = P.mat
  *         CHKERR( TaoSetJacobianRoutine(self.tao, Jmat, Pmat, TAO_Jacobian, NULL) )             # <<<<<<<<<<<<<<
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetJacobianRoutine(__pyx_v_self->tao, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TAO_Jacobian, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetJacobianRoutine(__pyx_v_self->tao, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TAO_Jacobian, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 231, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":237
+  /* "PETSc/TAO.pyx":232
  *         if P is not None: Pmat = P.mat
  *         CHKERR( TaoSetJacobianRoutine(self.tao, Jmat, Pmat, TAO_Jacobian, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -187694,11 +190415,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
   if (__pyx_t_2) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/TAO.pyx":238
+  /* "PETSc/TAO.pyx":233
  *         CHKERR( TaoSetJacobianRoutine(self.tao, Jmat, Pmat, TAO_Jacobian, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -187708,22 +190427,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
   __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_filename = __pyx_f[38]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 233, __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_L6:;
 
-  /* "PETSc/TAO.pyx":239
+  /* "PETSc/TAO.pyx":234
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__jacobian__", (jacobian, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 234, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_jacobian);
   __Pyx_GIVEREF(__pyx_v_jacobian);
@@ -187734,12 +190451,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
   __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_8petsc4py_5PETSc_TAO *)__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[38]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__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(38, 234, __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;
 
-  /* "PETSc/TAO.pyx":228
+  /* "PETSc/TAO.pyx":223
  *         self.set_attr("__hessian__", (hessian, args, kargs))
  * 
  *     def setJacobian(self, jacobian, Mat J=None, Mat P=None,             # <<<<<<<<<<<<<<
@@ -187763,7 +190480,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":243
+/* "PETSc/TAO.pyx":238
  *     #
  * 
  *     def setStateDesignIS(self, IS state, IS design):             # <<<<<<<<<<<<<<
@@ -187772,14 +190489,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setJacobian(struct PyPetscTAOO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setStateDesignIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_46setStateDesignIS[] = "TAO.setStateDesignIS(self, IS state, IS design)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setStateDesignIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setStateDesignIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_44setStateDesignIS[] = "TAO.setStateDesignIS(self, IS state, IS design)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setStateDesignIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_state = 0;
   struct PyPetscISObject *__pyx_v_design = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setStateDesignIS (wrapper)", 0);
@@ -187803,11 +190517,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setStateDesignIS(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_design)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setStateDesignIS", 1, 2, 2, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setStateDesignIS", 1, 2, 2, 1); __PYX_ERR(38, 238, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStateDesignIS") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStateDesignIS") < 0)) __PYX_ERR(38, 238, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -187820,15 +190534,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setStateDesignIS(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setStateDesignIS", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setStateDesignIS", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 238, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setStateDesignIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_state), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "state", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_design), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "design", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_state, __pyx_v_design);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_state), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "state", 0))) __PYX_ERR(38, 238, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_design), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "design", 0))) __PYX_ERR(38, 238, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_44setStateDesignIS(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_state, __pyx_v_design);
 
   /* function exit code */
   goto __pyx_L0;
@@ -187839,7 +190553,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setStateDesignIS(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_state, struct PyPetscISObject *__pyx_v_design) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setStateDesignIS(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_state, struct PyPetscISObject *__pyx_v_design) {
   IS __pyx_v_s_is;
   IS __pyx_v_d_is;
   PyObject *__pyx_r = NULL;
@@ -187848,12 +190562,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(struct PyPets
   int __pyx_t_2;
   IS __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setStateDesignIS", 0);
 
-  /* "PETSc/TAO.pyx":246
+  /* "PETSc/TAO.pyx":241
  *         """
  *         """
  *         cdef PetscIS s_is = NULL, d_is = NULL             # <<<<<<<<<<<<<<
@@ -187863,7 +190574,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(struct PyPets
   __pyx_v_s_is = NULL;
   __pyx_v_d_is = NULL;
 
-  /* "PETSc/TAO.pyx":247
+  /* "PETSc/TAO.pyx":242
  *         """
  *         cdef PetscIS s_is = NULL, d_is = NULL
  *         if state  is not None: s_is = state.iset             # <<<<<<<<<<<<<<
@@ -187875,11 +190586,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(struct PyPets
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_state->iset;
     __pyx_v_s_is = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":248
+  /* "PETSc/TAO.pyx":243
  *         cdef PetscIS s_is = NULL, d_is = NULL
  *         if state  is not None: s_is = state.iset
  *         if design is not None: d_is = design.iset             # <<<<<<<<<<<<<<
@@ -187891,20 +190600,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(struct PyPets
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_design->iset;
     __pyx_v_d_is = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":249
+  /* "PETSc/TAO.pyx":244
  *         if state  is not None: s_is = state.iset
  *         if design is not None: d_is = design.iset
  *         CHKERR( TaoSetStateDesignIS(self.tao, s_is, d_is) )             # <<<<<<<<<<<<<<
  * 
  *     def setJacobianState(self, jacobian_state, Mat J=None, Mat P=None, Mat I=None,
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetStateDesignIS(__pyx_v_self->tao, __pyx_v_s_is, __pyx_v_d_is)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetStateDesignIS(__pyx_v_self->tao, __pyx_v_s_is, __pyx_v_d_is)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 244, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":243
+  /* "PETSc/TAO.pyx":238
  *     #
  * 
  *     def setStateDesignIS(self, IS state, IS design):             # <<<<<<<<<<<<<<
@@ -187924,7 +190631,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":251
+/* "PETSc/TAO.pyx":246
  *         CHKERR( TaoSetStateDesignIS(self.tao, s_is, d_is) )
  * 
  *     def setJacobianState(self, jacobian_state, Mat J=None, Mat P=None, Mat I=None,             # <<<<<<<<<<<<<<
@@ -187933,29 +190640,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setStateDesignIS(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_48setJacobianState[] = "TAO.setJacobianState(self, jacobian_state, Mat J=None, Mat P=None, Mat I=None, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setJacobianState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_46setJacobianState[] = "TAO.setJacobianState(self, jacobian_state, Mat J=None, Mat P=None, Mat I=None, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setJacobianState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_jacobian_state = 0;
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
   struct PyPetscMatObject *__pyx_v_I = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setJacobianState (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_state_2,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_I,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_state,&__pyx_n_s_J,&__pyx_n_s_P,&__pyx_n_s_I,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[6] = {0,0,0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscMatObject *)Py_None);
     values[2] = (PyObject *)((struct PyPetscMatObject *)Py_None);
     values[3] = (PyObject *)((struct PyPetscMatObject *)Py_None);
 
-    /* "PETSc/TAO.pyx":252
+    /* "PETSc/TAO.pyx":247
  * 
  *     def setJacobianState(self, jacobian_state, Mat J=None, Mat P=None, Mat I=None,
  *                          args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -187980,7 +190684,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianState(PyObject *__p
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian_state_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian_state)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -188009,7 +190713,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianState(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobianState") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobianState") < 0)) __PYX_ERR(38, 246, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -188032,18 +190736,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianState(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setJacobianState", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setJacobianState", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 246, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setJacobianState", __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[38]; __pyx_lineno = 251; __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[38]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_I), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "I", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_jacobian_state, __pyx_v_J, __pyx_v_P, __pyx_v_I, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(38, 246, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(38, 246, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_I), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "I", 0))) __PYX_ERR(38, 246, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_46setJacobianState(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_jacobian_state, __pyx_v_J, __pyx_v_P, __pyx_v_I, __pyx_v_args, __pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":251
+  /* "PETSc/TAO.pyx":246
  *         CHKERR( TaoSetStateDesignIS(self.tao, s_is, d_is) )
  * 
  *     def setJacobianState(self, jacobian_state, Mat J=None, Mat P=None, Mat I=None,             # <<<<<<<<<<<<<<
@@ -188060,7 +190764,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianState(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian_state, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, struct PyPetscMatObject *__pyx_v_I, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setJacobianState(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian_state, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P, struct PyPetscMatObject *__pyx_v_I, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Mat __pyx_v_Jmat;
   Mat __pyx_v_Pmat;
   Mat __pyx_v_Imat;
@@ -188072,14 +190776,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
   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("setJacobianState", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":255
+  /* "PETSc/TAO.pyx":250
  *         """
  *         """
  *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
@@ -188088,7 +190789,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
  */
   __pyx_v_Jmat = NULL;
 
-  /* "PETSc/TAO.pyx":256
+  /* "PETSc/TAO.pyx":251
  *         """
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
@@ -188100,11 +190801,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_J->mat;
     __pyx_v_Jmat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":257
+  /* "PETSc/TAO.pyx":252
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat = Jmat             # <<<<<<<<<<<<<<
@@ -188113,7 +190812,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
  */
   __pyx_v_Pmat = __pyx_v_Jmat;
 
-  /* "PETSc/TAO.pyx":258
+  /* "PETSc/TAO.pyx":253
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat = Jmat
  *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
@@ -188125,11 +190824,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_P->mat;
     __pyx_v_Pmat = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":259
+  /* "PETSc/TAO.pyx":254
  *         cdef PetscMat Pmat = Jmat
  *         if P is not None: Pmat = P.mat
  *         cdef PetscMat Imat = NULL             # <<<<<<<<<<<<<<
@@ -188138,7 +190835,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
  */
   __pyx_v_Imat = NULL;
 
-  /* "PETSc/TAO.pyx":260
+  /* "PETSc/TAO.pyx":255
  *         if P is not None: Pmat = P.mat
  *         cdef PetscMat Imat = NULL
  *         if I is not None: Imat = I.mat             # <<<<<<<<<<<<<<
@@ -188150,20 +190847,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_I->mat;
     __pyx_v_Imat = __pyx_t_3;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/TAO.pyx":261
+  /* "PETSc/TAO.pyx":256
  *         cdef PetscMat Imat = NULL
  *         if I is not None: Imat = I.mat
  *         CHKERR( TaoSetJacobianStateRoutine(self.tao, Jmat, Pmat, Imat,             # <<<<<<<<<<<<<<
  *                                            TAO_JacobianState, NULL) )
  *         if args is None: args = ()
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetJacobianStateRoutine(__pyx_v_self->tao, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_v_Imat, __pyx_f_8petsc4py_5PETSc_TAO_JacobianState, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetJacobianStateRoutine(__pyx_v_self->tao, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_v_Imat, __pyx_f_8petsc4py_5PETSc_TAO_JacobianState, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 256, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":263
+  /* "PETSc/TAO.pyx":258
  *         CHKERR( TaoSetJacobianStateRoutine(self.tao, Jmat, Pmat, Imat,
  *                                            TAO_JacobianState, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -188175,11 +190870,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
   if (__pyx_t_1) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
-  /* "PETSc/TAO.pyx":264
+  /* "PETSc/TAO.pyx":259
  *                                            TAO_JacobianState, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -188189,22 +190882,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
   __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[38]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 259, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_5);
     __pyx_t_5 = 0;
-    goto __pyx_L7;
   }
-  __pyx_L7:;
 
-  /* "PETSc/TAO.pyx":265
+  /* "PETSc/TAO.pyx":260
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__jacobian_state__", (jacobian_state, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def setJacobianDesign(self, jacobian_design, Mat J=None,
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_jacobian_state);
   __Pyx_GIVEREF(__pyx_v_jacobian_state);
@@ -188215,12 +190906,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
   __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_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_jacobian_state, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__jacobian_state__"), __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 260, __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;
 
-  /* "PETSc/TAO.pyx":251
+  /* "PETSc/TAO.pyx":246
  *         CHKERR( TaoSetStateDesignIS(self.tao, s_is, d_is) )
  * 
  *     def setJacobianState(self, jacobian_state, Mat J=None, Mat P=None, Mat I=None,             # <<<<<<<<<<<<<<
@@ -188244,7 +190935,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":267
+/* "PETSc/TAO.pyx":262
  *         self.set_attr("__jacobian_state__", (jacobian_state, args, kargs))
  * 
  *     def setJacobianDesign(self, jacobian_design, Mat J=None,             # <<<<<<<<<<<<<<
@@ -188253,25 +190944,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianState(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51setJacobianDesign(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_50setJacobianDesign[] = "TAO.setJacobianDesign(self, jacobian_design, Mat J=None, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51setJacobianDesign(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianDesign(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_48setJacobianDesign[] = "TAO.setJacobianDesign(self, jacobian_design, Mat J=None, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianDesign(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_jacobian_design = 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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setJacobianDesign (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_design_2,&__pyx_n_s_J,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_design,&__pyx_n_s_J,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[4] = {0,0,0,0};
     values[1] = (PyObject *)((struct PyPetscMatObject *)Py_None);
 
-    /* "PETSc/TAO.pyx":268
+    /* "PETSc/TAO.pyx":263
  * 
  *     def setJacobianDesign(self, jacobian_design, Mat J=None,
  *                           args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -188294,7 +190982,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51setJacobianDesign(PyObject *__
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian_design_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian_design)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -188313,7 +191001,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51setJacobianDesign(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobianDesign") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobianDesign") < 0)) __PYX_ERR(38, 262, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -188332,16 +191020,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51setJacobianDesign(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setJacobianDesign", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setJacobianDesign", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 262, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setJacobianDesign", __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[38]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_jacobian_design, __pyx_v_J, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(38, 262, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianDesign(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_jacobian_design, __pyx_v_J, __pyx_v_args, __pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":267
+  /* "PETSc/TAO.pyx":262
  *         self.set_attr("__jacobian_state__", (jacobian_state, args, kargs))
  * 
  *     def setJacobianDesign(self, jacobian_design, Mat J=None,             # <<<<<<<<<<<<<<
@@ -188358,7 +191046,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51setJacobianDesign(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian_design, struct PyPetscMatObject *__pyx_v_J, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianDesign(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_jacobian_design, struct PyPetscMatObject *__pyx_v_J, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   Mat __pyx_v_Jmat;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -188368,14 +191056,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPet
   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("setJacobianDesign", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":271
+  /* "PETSc/TAO.pyx":266
  *         """
  *         """
  *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
@@ -188384,7 +191069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPet
  */
   __pyx_v_Jmat = NULL;
 
-  /* "PETSc/TAO.pyx":272
+  /* "PETSc/TAO.pyx":267
  *         """
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
@@ -188396,20 +191081,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPet
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_J->mat;
     __pyx_v_Jmat = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":273
+  /* "PETSc/TAO.pyx":268
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  *         CHKERR( TaoSetJacobianDesignRoutine(self.tao, Jmat,             # <<<<<<<<<<<<<<
  *                                             TAO_JacobianDesign, NULL) )
  *         if args is None: args = ()
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetJacobianDesignRoutine(__pyx_v_self->tao, __pyx_v_Jmat, __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetJacobianDesignRoutine(__pyx_v_self->tao, __pyx_v_Jmat, __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 268, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":275
+  /* "PETSc/TAO.pyx":270
  *         CHKERR( TaoSetJacobianDesignRoutine(self.tao, Jmat,
  *                                             TAO_JacobianDesign, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -188421,11 +191104,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPet
   if (__pyx_t_1) {
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":276
+  /* "PETSc/TAO.pyx":271
  *                                             TAO_JacobianDesign, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -188435,22 +191116,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPet
   __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[38]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 271, __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:;
 
-  /* "PETSc/TAO.pyx":277
+  /* "PETSc/TAO.pyx":272
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}
  *         self.set_attr("__jacobian_design__", (jacobian_design, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     # --------------
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 272, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_jacobian_design);
   __Pyx_GIVEREF(__pyx_v_jacobian_design);
@@ -188461,12 +191140,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPet
   __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_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_jacobian_design, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__jacobian_design__"), __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 272, __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;
 
-  /* "PETSc/TAO.pyx":267
+  /* "PETSc/TAO.pyx":262
  *         self.set_attr("__jacobian_state__", (jacobian_state, args, kargs))
  * 
  *     def setJacobianDesign(self, jacobian_design, Mat J=None,             # <<<<<<<<<<<<<<
@@ -188490,7 +191169,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":281
+/* "PETSc/TAO.pyx":276
  *     # --------------
  * 
  *     def computeObjective(self, Vec x not None):             # <<<<<<<<<<<<<<
@@ -188499,13 +191178,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50setJacobianDesign(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_52computeObjective[] = "TAO.computeObjective(self, Vec x)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51computeObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_50computeObjective[] = "TAO.computeObjective(self, Vec x)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51computeObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeObjective (wrapper)", 0);
@@ -188527,7 +191203,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeObjective(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, "computeObjective") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeObjective") < 0)) __PYX_ERR(38, 276, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -188538,14 +191214,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeObjective(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeObjective", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeObjective", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 276, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeObjective", __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[38]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_52computeObjective(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(38, 276, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_50computeObjective(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -188556,18 +191232,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeObjective(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeObjective(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50computeObjective(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x) {
   PetscReal __pyx_v_f;
   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("computeObjective", 0);
 
-  /* "PETSc/TAO.pyx":284
+  /* "PETSc/TAO.pyx":279
  *         """
  *         """
  *         cdef PetscReal f = 0             # <<<<<<<<<<<<<<
@@ -188576,16 +191249,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeObjective(struct PyPets
  */
   __pyx_v_f = 0.0;
 
-  /* "PETSc/TAO.pyx":285
+  /* "PETSc/TAO.pyx":280
  *         """
  *         cdef PetscReal f = 0
  *         CHKERR( TaoComputeObjective(self.tao, x.vec, &f) )             # <<<<<<<<<<<<<<
  *         return toReal(f)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeObjective(__pyx_v_self->tao, __pyx_v_x->vec, (&__pyx_v_f))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeObjective(__pyx_v_self->tao, __pyx_v_x->vec, (&__pyx_v_f))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 280, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":286
+  /* "PETSc/TAO.pyx":281
  *         cdef PetscReal f = 0
  *         CHKERR( TaoComputeObjective(self.tao, x.vec, &f) )
  *         return toReal(f)             # <<<<<<<<<<<<<<
@@ -188593,13 +191266,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeObjective(struct PyPets
  *     def computeSeparableObjective(self, Vec x not None, Vec f not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_f); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 281, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":281
+  /* "PETSc/TAO.pyx":276
  *     # --------------
  * 
  *     def computeObjective(self, Vec x not None):             # <<<<<<<<<<<<<<
@@ -188618,7 +191291,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeObjective(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":288
+/* "PETSc/TAO.pyx":283
  *         return toReal(f)
  * 
  *     def computeSeparableObjective(self, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
@@ -188627,14 +191300,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeObjective(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeSeparableObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_54computeSeparableObjective[] = "TAO.computeSeparableObjective(self, Vec x, Vec f)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeSeparableObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeSeparableObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_52computeSeparableObjective[] = "TAO.computeSeparableObjective(self, Vec x, Vec f)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeSeparableObjective(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_f = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeSeparableObjective (wrapper)", 0);
@@ -188658,11 +191328,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeSeparableObjective(PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeSeparableObjective", 1, 2, 2, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeSeparableObjective", 1, 2, 2, 1); __PYX_ERR(38, 283, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeSeparableObjective") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeSeparableObjective") < 0)) __PYX_ERR(38, 283, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -188675,15 +191345,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeSeparableObjective(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeSeparableObjective", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeSeparableObjective", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 283, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeSeparableObjective", __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[38]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_54computeSeparableObjective(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_f);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(38, 283, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(38, 283, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_52computeSeparableObjective(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_f);
 
   /* function exit code */
   goto __pyx_L0;
@@ -188694,25 +191364,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeSeparableObjective(PyOb
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_54computeSeparableObjective(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeSeparableObjective(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_f) {
   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("computeSeparableObjective", 0);
 
-  /* "PETSc/TAO.pyx":291
+  /* "PETSc/TAO.pyx":286
  *         """
  *         """
  *         CHKERR( TaoComputeSeparableObjective(self.tao, x.vec, f.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def computeGradient(self, Vec x not None, Vec g not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeSeparableObjective(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_f->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeSeparableObjective(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_f->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 286, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":288
+  /* "PETSc/TAO.pyx":283
  *         return toReal(f)
  * 
  *     def computeSeparableObjective(self, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
@@ -188732,7 +191399,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_54computeSeparableObjective(stru
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":293
+/* "PETSc/TAO.pyx":288
  *         CHKERR( TaoComputeSeparableObjective(self.tao, x.vec, f.vec) )
  * 
  *     def computeGradient(self, Vec x not None, Vec g not None):             # <<<<<<<<<<<<<<
@@ -188741,14 +191408,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_54computeSeparableObjective(stru
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_56computeGradient[] = "TAO.computeGradient(self, Vec x, Vec g)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_54computeGradient[] = "TAO.computeGradient(self, Vec x, Vec g)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_g = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeGradient (wrapper)", 0);
@@ -188772,11 +191436,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeGradient(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeGradient", 1, 2, 2, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeGradient", 1, 2, 2, 1); __PYX_ERR(38, 288, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeGradient") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeGradient") < 0)) __PYX_ERR(38, 288, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -188789,15 +191453,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeGradient(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeGradient", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeGradient", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 288, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeGradient", __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[38]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "g", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_56computeGradient(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(38, 288, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "g", 0))) __PYX_ERR(38, 288, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_54computeGradient(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_g);
 
   /* function exit code */
   goto __pyx_L0;
@@ -188808,25 +191472,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeGradient(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeGradient(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_g) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_54computeGradient(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_g) {
   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("computeGradient", 0);
 
-  /* "PETSc/TAO.pyx":296
+  /* "PETSc/TAO.pyx":291
  *         """
  *         """
  *         CHKERR( TaoComputeGradient(self.tao, x.vec, g.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def computeObjectiveGradient(self, Vec x not None, Vec g not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeGradient(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_g->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeGradient(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_g->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 291, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":293
+  /* "PETSc/TAO.pyx":288
  *         CHKERR( TaoComputeSeparableObjective(self.tao, x.vec, f.vec) )
  * 
  *     def computeGradient(self, Vec x not None, Vec g not None):             # <<<<<<<<<<<<<<
@@ -188846,7 +191507,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeGradient(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":298
+/* "PETSc/TAO.pyx":293
  *         CHKERR( TaoComputeGradient(self.tao, x.vec, g.vec) )
  * 
  *     def computeObjectiveGradient(self, Vec x not None, Vec g not None):             # <<<<<<<<<<<<<<
@@ -188855,14 +191516,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeGradient(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeObjectiveGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient[] = "TAO.computeObjectiveGradient(self, Vec x, Vec g)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeObjectiveGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeObjectiveGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_56computeObjectiveGradient[] = "TAO.computeObjectiveGradient(self, Vec x, Vec g)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeObjectiveGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_g = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeObjectiveGradient (wrapper)", 0);
@@ -188886,11 +191544,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeObjectiveGradient(PyObj
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeObjectiveGradient", 1, 2, 2, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeObjectiveGradient", 1, 2, 2, 1); __PYX_ERR(38, 293, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeObjectiveGradient") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeObjectiveGradient") < 0)) __PYX_ERR(38, 293, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -188903,15 +191561,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeObjectiveGradient(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeObjectiveGradient", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeObjectiveGradient", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 293, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeObjectiveGradient", __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[38]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "g", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(38, 293, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "g", 0))) __PYX_ERR(38, 293, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_56computeObjectiveGradient(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_g);
 
   /* function exit code */
   goto __pyx_L0;
@@ -188922,18 +191580,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeObjectiveGradient(PyObj
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_g) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeObjectiveGradient(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_g) {
   PetscReal __pyx_v_f;
   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("computeObjectiveGradient", 0);
 
-  /* "PETSc/TAO.pyx":301
+  /* "PETSc/TAO.pyx":296
  *         """
  *         """
  *         cdef PetscReal f = 0             # <<<<<<<<<<<<<<
@@ -188942,16 +191597,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient(struc
  */
   __pyx_v_f = 0.0;
 
-  /* "PETSc/TAO.pyx":302
+  /* "PETSc/TAO.pyx":297
  *         """
  *         cdef PetscReal f = 0
  *         CHKERR( TaoComputeObjectiveAndGradient(self.tao, x.vec, &f, g.vec) )             # <<<<<<<<<<<<<<
  *         return toReal(f)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeObjectiveAndGradient(__pyx_v_self->tao, __pyx_v_x->vec, (&__pyx_v_f), __pyx_v_g->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeObjectiveAndGradient(__pyx_v_self->tao, __pyx_v_x->vec, (&__pyx_v_f), __pyx_v_g->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 297, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":303
+  /* "PETSc/TAO.pyx":298
  *         cdef PetscReal f = 0
  *         CHKERR( TaoComputeObjectiveAndGradient(self.tao, x.vec, &f, g.vec) )
  *         return toReal(f)             # <<<<<<<<<<<<<<
@@ -188959,13 +191614,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient(struc
  *     def computeDualVariables(self, Vec xl not None, Vec xu not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_f); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 298, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":298
+  /* "PETSc/TAO.pyx":293
  *         CHKERR( TaoComputeGradient(self.tao, x.vec, g.vec) )
  * 
  *     def computeObjectiveGradient(self, Vec x not None, Vec g not None):             # <<<<<<<<<<<<<<
@@ -188984,7 +191639,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient(struc
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":305
+/* "PETSc/TAO.pyx":300
  *         return toReal(f)
  * 
  *     def computeDualVariables(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
@@ -188993,14 +191648,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeDualVariables(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_60computeDualVariables[] = "TAO.computeDualVariables(self, Vec xl, Vec xu)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeDualVariables(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeDualVariables(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_58computeDualVariables[] = "TAO.computeDualVariables(self, Vec xl, Vec xu)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeDualVariables(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_xl = 0;
   struct PyPetscVecObject *__pyx_v_xu = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeDualVariables (wrapper)", 0);
@@ -189024,11 +191676,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeDualVariables(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xu)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeDualVariables", 1, 2, 2, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeDualVariables", 1, 2, 2, 1); __PYX_ERR(38, 300, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeDualVariables") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeDualVariables") < 0)) __PYX_ERR(38, 300, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -189041,15 +191693,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeDualVariables(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeDualVariables", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeDualVariables", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 300, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeDualVariables", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xl", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xu), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xu", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_60computeDualVariables(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_xl, __pyx_v_xu);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xl", 0))) __PYX_ERR(38, 300, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xu), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xu", 0))) __PYX_ERR(38, 300, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_58computeDualVariables(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_xl, __pyx_v_xu);
 
   /* function exit code */
   goto __pyx_L0;
@@ -189060,25 +191712,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeDualVariables(PyObject
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeDualVariables(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeDualVariables(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu) {
   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("computeDualVariables", 0);
 
-  /* "PETSc/TAO.pyx":308
+  /* "PETSc/TAO.pyx":303
  *         """
  *         """
  *         CHKERR( TaoComputeDualVariables(self.tao, xl.vec, xu.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def computeVariableBounds(self, Vec xl not None, Vec xu not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeDualVariables(__pyx_v_self->tao, __pyx_v_xl->vec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeDualVariables(__pyx_v_self->tao, __pyx_v_xl->vec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 303, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":305
+  /* "PETSc/TAO.pyx":300
  *         return toReal(f)
  * 
  *     def computeDualVariables(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
@@ -189098,7 +191747,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeDualVariables(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":310
+/* "PETSc/TAO.pyx":305
  *         CHKERR( TaoComputeDualVariables(self.tao, xl.vec, xu.vec) )
  * 
  *     def computeVariableBounds(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
@@ -189107,14 +191756,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeDualVariables(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_62computeVariableBounds[] = "TAO.computeVariableBounds(self, Vec xl, Vec xu)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_60computeVariableBounds[] = "TAO.computeVariableBounds(self, Vec xl, Vec xu)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_xl = 0;
   struct PyPetscVecObject *__pyx_v_xu = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeVariableBounds (wrapper)", 0);
@@ -189138,11 +191784,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeVariableBounds(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xu)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeVariableBounds", 1, 2, 2, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeVariableBounds", 1, 2, 2, 1); __PYX_ERR(38, 305, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeVariableBounds") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeVariableBounds") < 0)) __PYX_ERR(38, 305, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -189155,15 +191801,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeVariableBounds(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeVariableBounds", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeVariableBounds", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 305, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeVariableBounds", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xl", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xu), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xu", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_xl, __pyx_v_xu);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xl", 0))) __PYX_ERR(38, 305, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xu), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xu", 0))) __PYX_ERR(38, 305, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_xl, __pyx_v_xu);
 
   /* function exit code */
   goto __pyx_L0;
@@ -189174,28 +191820,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeVariableBounds(PyObject
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu) {
   Vec __pyx_v_Lvec;
   Vec __pyx_v_Uvec;
   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("computeVariableBounds", 0);
 
-  /* "PETSc/TAO.pyx":313
+  /* "PETSc/TAO.pyx":308
  *         """
  *         """
  *         CHKERR( TaoComputeVariableBounds(self.tao) )             # <<<<<<<<<<<<<<
  *         cdef PetscVec Lvec = NULL, Uvec = NULL
  *         CHKERR( TaoGetVariableBounds(self.tao, &Lvec, &Uvec) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeVariableBounds(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeVariableBounds(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 308, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":314
+  /* "PETSc/TAO.pyx":309
  *         """
  *         CHKERR( TaoComputeVariableBounds(self.tao) )
  *         cdef PetscVec Lvec = NULL, Uvec = NULL             # <<<<<<<<<<<<<<
@@ -189205,16 +191848,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct P
   __pyx_v_Lvec = NULL;
   __pyx_v_Uvec = NULL;
 
-  /* "PETSc/TAO.pyx":315
+  /* "PETSc/TAO.pyx":310
  *         CHKERR( TaoComputeVariableBounds(self.tao) )
  *         cdef PetscVec Lvec = NULL, Uvec = NULL
  *         CHKERR( TaoGetVariableBounds(self.tao, &Lvec, &Uvec) )             # <<<<<<<<<<<<<<
  *         if xl.vec != NULL:
  *             if Lvec != NULL:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetVariableBounds(__pyx_v_self->tao, (&__pyx_v_Lvec), (&__pyx_v_Uvec))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetVariableBounds(__pyx_v_self->tao, (&__pyx_v_Lvec), (&__pyx_v_Uvec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 310, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":316
+  /* "PETSc/TAO.pyx":311
  *         cdef PetscVec Lvec = NULL, Uvec = NULL
  *         CHKERR( TaoGetVariableBounds(self.tao, &Lvec, &Uvec) )
  *         if xl.vec != NULL:             # <<<<<<<<<<<<<<
@@ -189224,7 +191867,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct P
   __pyx_t_2 = ((__pyx_v_xl->vec != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TAO.pyx":317
+    /* "PETSc/TAO.pyx":312
  *         CHKERR( TaoGetVariableBounds(self.tao, &Lvec, &Uvec) )
  *         if xl.vec != NULL:
  *             if Lvec != NULL:             # <<<<<<<<<<<<<<
@@ -189234,33 +191877,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct P
     __pyx_t_2 = ((__pyx_v_Lvec != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "PETSc/TAO.pyx":318
+      /* "PETSc/TAO.pyx":313
  *         if xl.vec != NULL:
  *             if Lvec != NULL:
  *                 CHKERR( VecCopy(Lvec, xl.vec) )             # <<<<<<<<<<<<<<
  *             else:
  *                 CHKERR( VecSet(xl.vec, <PetscScalar>PETSC_NINFINITY) )
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_Lvec, __pyx_v_xl->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_Lvec, __pyx_v_xl->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 313, __pyx_L1_error)
+
+      /* "PETSc/TAO.pyx":312
+ *         CHKERR( TaoGetVariableBounds(self.tao, &Lvec, &Uvec) )
+ *         if xl.vec != NULL:
+ *             if Lvec != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( VecCopy(Lvec, xl.vec) )
+ *             else:
+ */
       goto __pyx_L4;
     }
-    /*else*/ {
 
-      /* "PETSc/TAO.pyx":320
+    /* "PETSc/TAO.pyx":315
  *                 CHKERR( VecCopy(Lvec, xl.vec) )
  *             else:
  *                 CHKERR( VecSet(xl.vec, <PetscScalar>PETSC_NINFINITY) )             # <<<<<<<<<<<<<<
  *         if xu.vec != NULL:
  *             if Uvec != NULL:
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_xl->vec, ((PetscScalar)PETSC_NINFINITY))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_xl->vec, ((PetscScalar)PETSC_NINFINITY))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 315, __pyx_L1_error)
     }
     __pyx_L4:;
-    goto __pyx_L3;
+
+    /* "PETSc/TAO.pyx":311
+ *         cdef PetscVec Lvec = NULL, Uvec = NULL
+ *         CHKERR( TaoGetVariableBounds(self.tao, &Lvec, &Uvec) )
+ *         if xl.vec != NULL:             # <<<<<<<<<<<<<<
+ *             if Lvec != NULL:
+ *                 CHKERR( VecCopy(Lvec, xl.vec) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":321
+  /* "PETSc/TAO.pyx":316
  *             else:
  *                 CHKERR( VecSet(xl.vec, <PetscScalar>PETSC_NINFINITY) )
  *         if xu.vec != NULL:             # <<<<<<<<<<<<<<
@@ -189270,7 +191927,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct P
   __pyx_t_2 = ((__pyx_v_xu->vec != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TAO.pyx":322
+    /* "PETSc/TAO.pyx":317
  *                 CHKERR( VecSet(xl.vec, <PetscScalar>PETSC_NINFINITY) )
  *         if xu.vec != NULL:
  *             if Uvec != NULL:             # <<<<<<<<<<<<<<
@@ -189280,33 +191937,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct P
     __pyx_t_2 = ((__pyx_v_Uvec != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "PETSc/TAO.pyx":323
+      /* "PETSc/TAO.pyx":318
  *         if xu.vec != NULL:
  *             if Uvec != NULL:
  *                 CHKERR( VecCopy(Uvec, xu.vec) )             # <<<<<<<<<<<<<<
  *             else:
  *                 CHKERR( VecSet(xu.vec, <PetscScalar>PETSC_INFINITY) )
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_Uvec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_Uvec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 318, __pyx_L1_error)
+
+      /* "PETSc/TAO.pyx":317
+ *                 CHKERR( VecSet(xl.vec, <PetscScalar>PETSC_NINFINITY) )
+ *         if xu.vec != NULL:
+ *             if Uvec != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( VecCopy(Uvec, xu.vec) )
+ *             else:
+ */
       goto __pyx_L6;
     }
-    /*else*/ {
 
-      /* "PETSc/TAO.pyx":325
+    /* "PETSc/TAO.pyx":320
  *                 CHKERR( VecCopy(Uvec, xu.vec) )
  *             else:
  *                 CHKERR( VecSet(xu.vec, <PetscScalar>PETSC_INFINITY) )             # <<<<<<<<<<<<<<
  * 
  *     def computeConstraints(self, Vec x not None, Vec c not None):
  */
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_xu->vec, ((PetscScalar)PETSC_INFINITY))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_xu->vec, ((PetscScalar)PETSC_INFINITY))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 320, __pyx_L1_error)
     }
     __pyx_L6:;
-    goto __pyx_L5;
+
+    /* "PETSc/TAO.pyx":316
+ *             else:
+ *                 CHKERR( VecSet(xl.vec, <PetscScalar>PETSC_NINFINITY) )
+ *         if xu.vec != NULL:             # <<<<<<<<<<<<<<
+ *             if Uvec != NULL:
+ *                 CHKERR( VecCopy(Uvec, xu.vec) )
+ */
   }
-  __pyx_L5:;
 
-  /* "PETSc/TAO.pyx":310
+  /* "PETSc/TAO.pyx":305
  *         CHKERR( TaoComputeDualVariables(self.tao, xl.vec, xu.vec) )
  * 
  *     def computeVariableBounds(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
@@ -189326,7 +191997,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct P
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":327
+/* "PETSc/TAO.pyx":322
  *                 CHKERR( VecSet(xu.vec, <PetscScalar>PETSC_INFINITY) )
  * 
  *     def computeConstraints(self, Vec x not None, Vec c not None):             # <<<<<<<<<<<<<<
@@ -189335,14 +192006,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeVariableBounds(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeConstraints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_64computeConstraints[] = "TAO.computeConstraints(self, Vec x, Vec c)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeConstraints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeConstraints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_62computeConstraints[] = "TAO.computeConstraints(self, Vec x, Vec c)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeConstraints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_c = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeConstraints (wrapper)", 0);
@@ -189366,11 +192034,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeConstraints(PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeConstraints", 1, 2, 2, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeConstraints", 1, 2, 2, 1); __PYX_ERR(38, 322, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeConstraints") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeConstraints") < 0)) __PYX_ERR(38, 322, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -189383,15 +192051,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeConstraints(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeConstraints", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeConstraints", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 322, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeConstraints", __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[38]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "c", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_64computeConstraints(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_c);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(38, 322, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "c", 0))) __PYX_ERR(38, 322, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_62computeConstraints(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_c);
 
   /* function exit code */
   goto __pyx_L0;
@@ -189402,25 +192070,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeConstraints(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_64computeConstraints(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_c) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeConstraints(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_c) {
   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("computeConstraints", 0);
 
-  /* "PETSc/TAO.pyx":330
+  /* "PETSc/TAO.pyx":325
  *         """
  *         """
  *         CHKERR( TaoComputeConstraints(self.tao, x.vec, c.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def computeHessian(self, Vec x not None, Mat H not None, Mat P=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeConstraints(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_c->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeConstraints(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_c->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 325, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":327
+  /* "PETSc/TAO.pyx":322
  *                 CHKERR( VecSet(xu.vec, <PetscScalar>PETSC_INFINITY) )
  * 
  *     def computeConstraints(self, Vec x not None, Vec c not None):             # <<<<<<<<<<<<<<
@@ -189440,7 +192105,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_64computeConstraints(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":332
+/* "PETSc/TAO.pyx":327
  *         CHKERR( TaoComputeConstraints(self.tao, x.vec, c.vec) )
  * 
  *     def computeHessian(self, Vec x not None, Mat H not None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -189449,15 +192114,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_64computeConstraints(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeHessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_66computeHessian[] = "TAO.computeHessian(self, Vec x, Mat H, Mat P=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeHessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeHessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_64computeHessian[] = "TAO.computeHessian(self, Vec x, Mat H, Mat P=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeHessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscMatObject *__pyx_v_H = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeHessian (wrapper)", 0);
@@ -189483,7 +192145,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeHessian(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_H)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeHessian", 0, 2, 3, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeHessian", 0, 2, 3, 1); __PYX_ERR(38, 327, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -189492,7 +192154,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeHessian(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeHessian") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeHessian") < 0)) __PYX_ERR(38, 327, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -189509,16 +192171,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeHessian(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeHessian", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeHessian", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 327, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeHessian", __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[38]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_H), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "H", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 332; __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[38]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_66computeHessian(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_H, __pyx_v_P);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(38, 327, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_H), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "H", 0))) __PYX_ERR(38, 327, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(38, 327, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_64computeHessian(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_H, __pyx_v_P);
 
   /* function exit code */
   goto __pyx_L0;
@@ -189529,7 +192191,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeHessian(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeHessian(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_H, struct PyPetscMatObject *__pyx_v_P) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_64computeHessian(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_H, struct PyPetscMatObject *__pyx_v_P) {
   Mat __pyx_v_hmat;
   Mat __pyx_v_pmat;
   PyObject *__pyx_r = NULL;
@@ -189538,12 +192200,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeHessian(struct PyPetscT
   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("computeHessian", 0);
 
-  /* "PETSc/TAO.pyx":335
+  /* "PETSc/TAO.pyx":330
  *         """
  *         """
  *         cdef PetscMat hmat = H.mat, pmat = H.mat             # <<<<<<<<<<<<<<
@@ -189555,7 +192214,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeHessian(struct PyPetscT
   __pyx_t_1 = __pyx_v_H->mat;
   __pyx_v_pmat = __pyx_t_1;
 
-  /* "PETSc/TAO.pyx":336
+  /* "PETSc/TAO.pyx":331
  *         """
  *         cdef PetscMat hmat = H.mat, pmat = H.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -189567,20 +192226,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeHessian(struct PyPetscT
   if (__pyx_t_3) {
     __pyx_t_1 = __pyx_v_P->mat;
     __pyx_v_pmat = __pyx_t_1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":337
+  /* "PETSc/TAO.pyx":332
  *         cdef PetscMat hmat = H.mat, pmat = H.mat
  *         if P is not None: pmat = P.mat
  *         CHKERR( TaoComputeHessian(self.tao, x.vec, hmat, pmat) )             # <<<<<<<<<<<<<<
  * 
  *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeHessian(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_hmat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeHessian(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_hmat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 332, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":332
+  /* "PETSc/TAO.pyx":327
  *         CHKERR( TaoComputeConstraints(self.tao, x.vec, c.vec) )
  * 
  *     def computeHessian(self, Vec x not None, Mat H not None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -189600,7 +192257,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeHessian(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":339
+/* "PETSc/TAO.pyx":334
  *         CHKERR( TaoComputeHessian(self.tao, x.vec, hmat, pmat) )
  * 
  *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -189609,15 +192266,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeHessian(struct PyPetscT
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69computeJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_68computeJacobian[] = "TAO.computeJacobian(self, Vec x, Mat J, Mat P=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69computeJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_66computeJacobian[] = "TAO.computeJacobian(self, Vec x, Mat J, Mat P=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeJacobian (wrapper)", 0);
@@ -189643,7 +192297,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69computeJacobian(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("computeJacobian", 0, 2, 3, 1); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("computeJacobian", 0, 2, 3, 1); __PYX_ERR(38, 334, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -189652,7 +192306,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69computeJacobian(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeJacobian") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeJacobian") < 0)) __PYX_ERR(38, 334, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -189669,16 +192323,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69computeJacobian(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeJacobian", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeJacobian", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 334, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.computeJacobian", __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[38]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 339; __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[38]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_68computeJacobian(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_J, __pyx_v_P);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(38, 334, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(38, 334, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(38, 334, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_66computeJacobian(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x, __pyx_v_J, __pyx_v_P);
 
   /* function exit code */
   goto __pyx_L0;
@@ -189689,7 +192343,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69computeJacobian(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68computeJacobian(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeJacobian(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P) {
   Mat __pyx_v_jmat;
   Mat __pyx_v_pmat;
   PyObject *__pyx_r = NULL;
@@ -189698,12 +192352,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68computeJacobian(struct PyPetsc
   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("computeJacobian", 0);
 
-  /* "PETSc/TAO.pyx":342
+  /* "PETSc/TAO.pyx":337
  *         """
  *         """
  *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
@@ -189715,7 +192366,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68computeJacobian(struct PyPetsc
   __pyx_t_1 = __pyx_v_J->mat;
   __pyx_v_pmat = __pyx_t_1;
 
-  /* "PETSc/TAO.pyx":343
+  /* "PETSc/TAO.pyx":338
  *         """
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -189727,20 +192378,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68computeJacobian(struct PyPetsc
   if (__pyx_t_3) {
     __pyx_t_1 = __pyx_v_P->mat;
     __pyx_v_pmat = __pyx_t_1;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":344
+  /* "PETSc/TAO.pyx":339
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  *         CHKERR( TaoComputeJacobian(self.tao, x.vec, jmat, pmat) )             # <<<<<<<<<<<<<<
  * 
  *     # --------------
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeJacobian(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_jmat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeJacobian(__pyx_v_self->tao, __pyx_v_x->vec, __pyx_v_jmat, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 339, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":339
+  /* "PETSc/TAO.pyx":334
  *         CHKERR( TaoComputeHessian(self.tao, x.vec, hmat, pmat) )
  * 
  *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -189760,750 +192409,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68computeJacobian(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":350
+/* "PETSc/TAO.pyx":345
  *     #
  * 
- *     def setTolerances(self,             # <<<<<<<<<<<<<<
- *                       fatol=None, frtol=None,
- *                       gatol=None, grtol=None, gttol=None):
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_71setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_70setTolerances[] = "TAO.setTolerances(self, fatol=None, frtol=None, gatol=None, grtol=None, gttol=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_71setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_fatol = 0;
-  PyObject *__pyx_v_frtol = 0;
-  PyObject *__pyx_v_gatol = 0;
-  PyObject *__pyx_v_grtol = 0;
-  PyObject *__pyx_v_gttol = 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);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fatol,&__pyx_n_s_frtol,&__pyx_n_s_gatol,&__pyx_n_s_grtol,&__pyx_n_s_gttol,0};
-    PyObject* values[5] = {0,0,0,0,0};
-
-    /* "PETSc/TAO.pyx":351
- * 
- *     def setTolerances(self,
- *                       fatol=None, frtol=None,             # <<<<<<<<<<<<<<
- *                       gatol=None, grtol=None, gttol=None):
- *         """
- */
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
-
-    /* "PETSc/TAO.pyx":352
- *     def setTolerances(self,
- *                       fatol=None, frtol=None,
- *                       gatol=None, grtol=None, gttol=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 (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fatol);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_frtol);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gatol);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_grtol);
-          if (value) { values[3] = value; kw_args--; }
-        }
-        case  4:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gttol);
-          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[38]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __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);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_fatol = values[0];
-    __pyx_v_frtol = values[1];
-    __pyx_v_gatol = values[2];
-    __pyx_v_grtol = values[3];
-    __pyx_v_gttol = values[4];
-  }
-  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[38]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_70setTolerances(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_fatol, __pyx_v_frtol, __pyx_v_gatol, __pyx_v_grtol, __pyx_v_gttol);
-
-  /* "PETSc/TAO.pyx":350
- *     #
- * 
- *     def setTolerances(self,             # <<<<<<<<<<<<<<
- *                       fatol=None, frtol=None,
- *                       gatol=None, grtol=None, gttol=None):
- */
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_70setTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_fatol, PyObject *__pyx_v_frtol, PyObject *__pyx_v_gatol, PyObject *__pyx_v_grtol, PyObject *__pyx_v_gttol) {
-  PetscReal __pyx_v__fatol;
-  PetscReal __pyx_v__frtol;
-  PetscReal __pyx_v__gatol;
-  PetscReal __pyx_v__grtol;
-  PetscReal __pyx_v__gttol;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  PetscReal __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTolerances", 0);
-
-  /* "PETSc/TAO.pyx":355
- *         """
- *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if fatol is not None: _fatol = asReal(fatol)
- *         if frtol is not None: _frtol = asReal(frtol)
- */
-  __pyx_v__fatol = PETSC_DEFAULT;
-  __pyx_v__frtol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":356
- *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
- *         if fatol is not None: _fatol = asReal(fatol)             # <<<<<<<<<<<<<<
- *         if frtol is not None: _frtol = asReal(frtol)
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- */
-  __pyx_t_1 = (__pyx_v_fatol != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fatol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v__fatol = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "PETSc/TAO.pyx":357
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
- *         if fatol is not None: _fatol = asReal(fatol)
- *         if frtol is not None: _frtol = asReal(frtol)             # <<<<<<<<<<<<<<
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         if gatol is not None: _gatol = asReal(gatol)
- */
-  __pyx_t_2 = (__pyx_v_frtol != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_frtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v__frtol = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "PETSc/TAO.pyx":358
- *         if fatol is not None: _fatol = asReal(fatol)
- *         if frtol is not None: _frtol = asReal(frtol)
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if gatol is not None: _gatol = asReal(gatol)
- *         if grtol is not None: _grtol = asReal(grtol)
- */
-  __pyx_v__gatol = PETSC_DEFAULT;
-  __pyx_v__grtol = PETSC_DEFAULT;
-  __pyx_v__gttol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":359
- *         if frtol is not None: _frtol = asReal(frtol)
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         if gatol is not None: _gatol = asReal(gatol)             # <<<<<<<<<<<<<<
- *         if grtol is not None: _grtol = asReal(grtol)
- *         if gttol is not None: _gttol = asReal(gttol)
- */
-  __pyx_t_1 = (__pyx_v_gatol != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gatol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v__gatol = __pyx_t_3;
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
-
-  /* "PETSc/TAO.pyx":360
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         if gatol is not None: _gatol = asReal(gatol)
- *         if grtol is not None: _grtol = asReal(grtol)             # <<<<<<<<<<<<<<
- *         if gttol is not None: _gttol = asReal(gttol)
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
- */
-  __pyx_t_2 = (__pyx_v_grtol != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_grtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v__grtol = __pyx_t_3;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
-
-  /* "PETSc/TAO.pyx":361
- *         if gatol is not None: _gatol = asReal(gatol)
- *         if grtol is not None: _grtol = asReal(grtol)
- *         if gttol is not None: _gttol = asReal(gttol)             # <<<<<<<<<<<<<<
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
- * 
- */
-  __pyx_t_1 = (__pyx_v_gttol != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gttol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v__gttol = __pyx_t_3;
-    goto __pyx_L7;
-  }
-  __pyx_L7:;
-
-  /* "PETSc/TAO.pyx":362
- *         if grtol is not None: _grtol = asReal(grtol)
- *         if gttol is not None: _gttol = asReal(gttol)
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )             # <<<<<<<<<<<<<<
- * 
- *     def getTolerances(self):
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetTolerances(__pyx_v_self->tao, __pyx_v__fatol, __pyx_v__frtol, __pyx_v__gatol, __pyx_v__grtol, __pyx_v__gttol)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/TAO.pyx":350
- *     #
- * 
- *     def setTolerances(self,             # <<<<<<<<<<<<<<
- *                       fatol=None, frtol=None,
- *                       gatol=None, grtol=None, gttol=None):
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TAO.pyx":364
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
- * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, gatol=None, grtol=None, gttol=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_73getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_72getTolerances[] = "TAO.getTolerances(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_73getTolerances(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_8petsc4py_5PETSc_3TAO_72getTolerances(((struct PyPetscTAOObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_72getTolerances(struct PyPetscTAOObject *__pyx_v_self) {
-  PetscReal __pyx_v__fatol;
-  PetscReal __pyx_v__frtol;
-  PetscReal __pyx_v__gatol;
-  PetscReal __pyx_v__grtol;
-  PetscReal __pyx_v__gttol;
-  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("getTolerances", 0);
-
-  /* "PETSc/TAO.pyx":367
- *         """
- *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- */
-  __pyx_v__fatol = PETSC_DEFAULT;
-  __pyx_v__frtol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":368
- *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- *         return (toReal(_fatol), toReal(_frtol),
- */
-  __pyx_v__gatol = PETSC_DEFAULT;
-  __pyx_v__grtol = PETSC_DEFAULT;
-  __pyx_v__gttol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":369
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )             # <<<<<<<<<<<<<<
- *         return (toReal(_fatol), toReal(_frtol),
- *                 toReal(_gatol), toReal(_grtol), toReal(_gttol))
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetTolerances(__pyx_v_self->tao, (&__pyx_v__fatol), (&__pyx_v__frtol), (&__pyx_v__gatol), (&__pyx_v__grtol), (&__pyx_v__gttol))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/TAO.pyx":370
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- *         return (toReal(_fatol), toReal(_frtol),             # <<<<<<<<<<<<<<
- *                 toReal(_gatol), toReal(_grtol), toReal(_gttol))
- * 
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__fatol); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__frtol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-
-  /* "PETSc/TAO.pyx":371
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- *         return (toReal(_fatol), toReal(_frtol),
- *                 toReal(_gatol), toReal(_grtol), toReal(_gttol))             # <<<<<<<<<<<<<<
- * 
- *     def setObjectiveTolerances(self, fatol=None, frtol=None):
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__gatol); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__grtol); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__gttol); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-
-  /* "PETSc/TAO.pyx":370
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- *         return (toReal(_fatol), toReal(_frtol),             # <<<<<<<<<<<<<<
- *                 toReal(_gatol), toReal(_grtol), toReal(_gttol))
- * 
- */
-  __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 370; __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;
-  goto __pyx_L0;
-
-  /* "PETSc/TAO.pyx":364
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
- * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
- *         """
- *         """
- */
-
-  /* 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("petsc4py.PETSc.TAO.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TAO.pyx":373
- *                 toReal(_gatol), toReal(_grtol), toReal(_gttol))
- * 
- *     def setObjectiveTolerances(self, fatol=None, frtol=None):             # <<<<<<<<<<<<<<
- *         """
- *         """
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_75setObjectiveTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_74setObjectiveTolerances[] = "TAO.setObjectiveTolerances(self, fatol=None, frtol=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_75setObjectiveTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_fatol = 0;
-  PyObject *__pyx_v_frtol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setObjectiveTolerances (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fatol,&__pyx_n_s_frtol,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_fatol);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_frtol);
-          if (value) { values[1] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setObjectiveTolerances") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 373; __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);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_fatol = values[0];
-    __pyx_v_frtol = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setObjectiveTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setObjectiveTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_74setObjectiveTolerances(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_fatol, __pyx_v_frtol);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_74setObjectiveTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_fatol, PyObject *__pyx_v_frtol) {
-  PetscReal __pyx_v__fatol;
-  PetscReal __pyx_v__frtol;
-  PetscReal __pyx_v__gatol;
-  PetscReal __pyx_v__grtol;
-  PetscReal __pyx_v__gttol;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  PetscReal __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setObjectiveTolerances", 0);
-
-  /* "PETSc/TAO.pyx":376
- *         """
- *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         if fatol is not None: _fatol = asReal(fatol)
- */
-  __pyx_v__fatol = PETSC_DEFAULT;
-  __pyx_v__frtol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":377
- *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if fatol is not None: _fatol = asReal(fatol)
- *         if frtol is not None: _frtol = asReal(frtol)
- */
-  __pyx_v__gatol = PETSC_DEFAULT;
-  __pyx_v__grtol = PETSC_DEFAULT;
-  __pyx_v__gttol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":378
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         if fatol is not None: _fatol = asReal(fatol)             # <<<<<<<<<<<<<<
- *         if frtol is not None: _frtol = asReal(frtol)
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
- */
-  __pyx_t_1 = (__pyx_v_fatol != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fatol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v__fatol = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "PETSc/TAO.pyx":379
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         if fatol is not None: _fatol = asReal(fatol)
- *         if frtol is not None: _frtol = asReal(frtol)             # <<<<<<<<<<<<<<
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
- * 
- */
-  __pyx_t_2 = (__pyx_v_frtol != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_frtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v__frtol = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "PETSc/TAO.pyx":380
- *         if fatol is not None: _fatol = asReal(fatol)
- *         if frtol is not None: _frtol = asReal(frtol)
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )             # <<<<<<<<<<<<<<
- * 
- *     def getObjectiveTolerances(self):
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetTolerances(__pyx_v_self->tao, __pyx_v__fatol, __pyx_v__frtol, __pyx_v__gatol, __pyx_v__grtol, __pyx_v__gttol)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/TAO.pyx":373
- *                 toReal(_gatol), toReal(_grtol), toReal(_gttol))
- * 
- *     def setObjectiveTolerances(self, fatol=None, frtol=None):             # <<<<<<<<<<<<<<
- *         """
- *         """
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setObjectiveTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TAO.pyx":382
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
- * 
- *     def getObjectiveTolerances(self):             # <<<<<<<<<<<<<<
- *         """
- *         """
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_77getObjectiveTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_76getObjectiveTolerances[] = "TAO.getObjectiveTolerances(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_77getObjectiveTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getObjectiveTolerances (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getObjectiveTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getObjectiveTolerances", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_76getObjectiveTolerances(((struct PyPetscTAOObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_76getObjectiveTolerances(struct PyPetscTAOObject *__pyx_v_self) {
-  PetscReal __pyx_v__fatol;
-  PetscReal __pyx_v__frtol;
-  PetscReal __pyx_v__gatol;
-  PetscReal __pyx_v__grtol;
-  PetscReal __pyx_v__gttol;
-  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("getObjectiveTolerances", 0);
-
-  /* "PETSc/TAO.pyx":385
- *         """
- *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- */
-  __pyx_v__fatol = PETSC_DEFAULT;
-  __pyx_v__frtol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":386
- *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- *         return (toReal(_fatol), toReal(_frtol))
- */
-  __pyx_v__gatol = PETSC_DEFAULT;
-  __pyx_v__grtol = PETSC_DEFAULT;
-  __pyx_v__gttol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":387
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )             # <<<<<<<<<<<<<<
- *         return (toReal(_fatol), toReal(_frtol))
- * 
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetTolerances(__pyx_v_self->tao, (&__pyx_v__fatol), (&__pyx_v__frtol), (&__pyx_v__gatol), (&__pyx_v__grtol), (&__pyx_v__gttol))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/TAO.pyx":388
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- *         return (toReal(_fatol), toReal(_frtol))             # <<<<<<<<<<<<<<
- * 
- *     setFunctionTolerances = setObjectiveTolerances
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__fatol); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__frtol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 388; __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[38]; __pyx_lineno = 388; __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;
-
-  /* "PETSc/TAO.pyx":382
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
- * 
- *     def getObjectiveTolerances(self):             # <<<<<<<<<<<<<<
- *         """
- *         """
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getObjectiveTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TAO.pyx":393
- *     getFunctionTolerances = getObjectiveTolerances
- * 
- *     def setGradientTolerances(self, gatol=None, grtol=None, gttol=None):             # <<<<<<<<<<<<<<
- *         """
- *         """
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_79setGradientTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_78setGradientTolerances[] = "TAO.setGradientTolerances(self, gatol=None, grtol=None, gttol=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_79setGradientTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_68setTolerances[] = "TAO.setTolerances(self, gatol=None, grtol=None, gttol=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_gatol = 0;
   PyObject *__pyx_v_grtol = 0;
   PyObject *__pyx_v_gttol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setGradientTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gatol,&__pyx_n_s_grtol,&__pyx_n_s_gttol,0};
     PyObject* values[3] = {0,0,0};
@@ -190539,7 +192462,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_79setGradientTolerances(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGradientTolerances") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(38, 345, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -190556,22 +192479,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_79setGradientTolerances(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGradientTolerances", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 345, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setGradientTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_78setGradientTolerances(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_gatol, __pyx_v_grtol, __pyx_v_gttol);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_68setTolerances(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_gatol, __pyx_v_grtol, __pyx_v_gttol);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78setGradientTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_gatol, PyObject *__pyx_v_grtol, PyObject *__pyx_v_gttol) {
-  PetscReal __pyx_v__fatol;
-  PetscReal __pyx_v__frtol;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68setTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_gatol, PyObject *__pyx_v_grtol, PyObject *__pyx_v_gttol) {
   PetscReal __pyx_v__gatol;
   PetscReal __pyx_v__grtol;
   PetscReal __pyx_v__gttol;
@@ -190581,24 +192502,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78setGradientTolerances(struct P
   int __pyx_t_2;
   PetscReal __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setGradientTolerances", 0);
+  __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "PETSc/TAO.pyx":396
- *         """
+  /* "PETSc/TAO.pyx":348
  *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         if gatol is not None: _gatol = asReal(gatol)
- */
-  __pyx_v__fatol = PETSC_DEFAULT;
-  __pyx_v__frtol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":397
  *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
  *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
  *         if gatol is not None: _gatol = asReal(gatol)
  *         if grtol is not None: _grtol = asReal(grtol)
@@ -190607,8 +192515,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78setGradientTolerances(struct P
   __pyx_v__grtol = PETSC_DEFAULT;
   __pyx_v__gttol = PETSC_DEFAULT;
 
-  /* "PETSc/TAO.pyx":398
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
+  /* "PETSc/TAO.pyx":349
+ *         """
  *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
  *         if gatol is not None: _gatol = asReal(gatol)             # <<<<<<<<<<<<<<
  *         if grtol is not None: _grtol = asReal(grtol)
@@ -190617,57 +192525,51 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78setGradientTolerances(struct P
   __pyx_t_1 = (__pyx_v_gatol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gatol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gatol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(38, 349, __pyx_L1_error)
     __pyx_v__gatol = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":399
+  /* "PETSc/TAO.pyx":350
  *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
  *         if gatol is not None: _gatol = asReal(gatol)
  *         if grtol is not None: _grtol = asReal(grtol)             # <<<<<<<<<<<<<<
  *         if gttol is not None: _gttol = asReal(gttol)
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
+ *         CHKERR( TaoSetTolerances(self.tao, _gatol, _grtol, _gttol) )
  */
   __pyx_t_2 = (__pyx_v_grtol != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_grtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_grtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(38, 350, __pyx_L1_error)
     __pyx_v__grtol = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":400
+  /* "PETSc/TAO.pyx":351
  *         if gatol is not None: _gatol = asReal(gatol)
  *         if grtol is not None: _grtol = asReal(grtol)
  *         if gttol is not None: _gttol = asReal(gttol)             # <<<<<<<<<<<<<<
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
+ *         CHKERR( TaoSetTolerances(self.tao, _gatol, _grtol, _gttol) )
  * 
  */
   __pyx_t_1 = (__pyx_v_gttol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gttol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gttol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(38, 351, __pyx_L1_error)
     __pyx_v__gttol = __pyx_t_3;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "PETSc/TAO.pyx":401
+  /* "PETSc/TAO.pyx":352
  *         if grtol is not None: _grtol = asReal(grtol)
  *         if gttol is not None: _gttol = asReal(gttol)
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )             # <<<<<<<<<<<<<<
+ *         CHKERR( TaoSetTolerances(self.tao, _gatol, _grtol, _gttol) )             # <<<<<<<<<<<<<<
  * 
- *     def getGradientTolerances(self):
+ *     def getTolerances(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetTolerances(__pyx_v_self->tao, __pyx_v__fatol, __pyx_v__frtol, __pyx_v__gatol, __pyx_v__grtol, __pyx_v__gttol)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetTolerances(__pyx_v_self->tao, __pyx_v__gatol, __pyx_v__grtol, __pyx_v__gttol)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 352, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":393
- *     getFunctionTolerances = getObjectiveTolerances
+  /* "PETSc/TAO.pyx":345
+ *     #
  * 
- *     def setGradientTolerances(self, gatol=None, grtol=None, gttol=None):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, gatol=None, grtol=None, gttol=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -190676,7 +192578,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78setGradientTolerances(struct P
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setGradientTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -190684,34 +192586,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78setGradientTolerances(struct P
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":403
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
+/* "PETSc/TAO.pyx":354
+ *         CHKERR( TaoSetTolerances(self.tao, _gatol, _grtol, _gttol) )
  * 
- *     def getGradientTolerances(self):             # <<<<<<<<<<<<<<
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_81getGradientTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_80getGradientTolerances[] = "TAO.getGradientTolerances(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_81getGradientTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_71getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_70getTolerances[] = "TAO.getTolerances(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_71getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getGradientTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getGradientTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getGradientTolerances", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_80getGradientTolerances(((struct PyPetscTAOObject *)__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_8petsc4py_5PETSc_3TAO_70getTolerances(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80getGradientTolerances(struct PyPetscTAOObject *__pyx_v_self) {
-  PetscReal __pyx_v__fatol;
-  PetscReal __pyx_v__frtol;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_70getTolerances(struct PyPetscTAOObject *__pyx_v_self) {
   PetscReal __pyx_v__gatol;
   PetscReal __pyx_v__grtol;
   PetscReal __pyx_v__gttol;
@@ -190722,56 +192622,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80getGradientTolerances(struct 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("getGradientTolerances", 0);
+  __Pyx_RefNannySetupContext("getTolerances", 0);
 
-  /* "PETSc/TAO.pyx":406
- *         """
+  /* "PETSc/TAO.pyx":357
  *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
- */
-  __pyx_v__fatol = PETSC_DEFAULT;
-  __pyx_v__frtol = PETSC_DEFAULT;
-
-  /* "PETSc/TAO.pyx":407
  *         """
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
  *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
+ *         CHKERR( TaoGetTolerances(self.tao, &_gatol, &_grtol, &_gttol) )
  *         return (toReal(_gatol), toReal(_grtol), toReal(_gttol))
  */
   __pyx_v__gatol = PETSC_DEFAULT;
   __pyx_v__grtol = PETSC_DEFAULT;
   __pyx_v__gttol = PETSC_DEFAULT;
 
-  /* "PETSc/TAO.pyx":408
- *         cdef PetscReal _fatol=PETSC_DEFAULT, _frtol=PETSC_DEFAULT
+  /* "PETSc/TAO.pyx":358
+ *         """
  *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )             # <<<<<<<<<<<<<<
+ *         CHKERR( TaoGetTolerances(self.tao, &_gatol, &_grtol, &_gttol) )             # <<<<<<<<<<<<<<
  *         return (toReal(_gatol), toReal(_grtol), toReal(_gttol))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetTolerances(__pyx_v_self->tao, (&__pyx_v__fatol), (&__pyx_v__frtol), (&__pyx_v__gatol), (&__pyx_v__grtol), (&__pyx_v__gttol))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetTolerances(__pyx_v_self->tao, (&__pyx_v__gatol), (&__pyx_v__grtol), (&__pyx_v__gttol))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 358, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":409
+  /* "PETSc/TAO.pyx":359
  *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
- *         CHKERR( TaoGetTolerances(self.tao, &_fatol, &_frtol, &_gatol, &_grtol, &_gttol) )
+ *         CHKERR( TaoGetTolerances(self.tao, &_gatol, &_grtol, &_gttol) )
  *         return (toReal(_gatol), toReal(_grtol), toReal(_gttol))             # <<<<<<<<<<<<<<
  * 
  *     def setConstraintTolerances(self, catol=None, crtol=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__gatol); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__gatol); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 359, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__grtol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__grtol); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 359, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__gttol); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__gttol); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 359, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 359, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -190786,10 +192673,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80getGradientTolerances(struct P
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":403
- *         CHKERR( TaoSetTolerances(self.tao, _fatol, _frtol, _gatol, _grtol, _gttol) )
+  /* "PETSc/TAO.pyx":354
+ *         CHKERR( TaoSetTolerances(self.tao, _gatol, _grtol, _gttol) )
  * 
- *     def getGradientTolerances(self):             # <<<<<<<<<<<<<<
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -190800,7 +192687,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80getGradientTolerances(struct P
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getGradientTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -190808,7 +192695,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80getGradientTolerances(struct P
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":411
+/* "PETSc/TAO.pyx":361
  *         return (toReal(_gatol), toReal(_grtol), toReal(_gttol))
  * 
  *     def setConstraintTolerances(self, catol=None, crtol=None):             # <<<<<<<<<<<<<<
@@ -190817,14 +192704,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80getGradientTolerances(struct P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_83setConstraintTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_82setConstraintTolerances[] = "TAO.setConstraintTolerances(self, catol=None, crtol=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_83setConstraintTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_73setConstraintTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_72setConstraintTolerances[] = "TAO.setConstraintTolerances(self, catol=None, crtol=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_73setConstraintTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_catol = 0;
   PyObject *__pyx_v_crtol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConstraintTolerances (wrapper)", 0);
@@ -190856,7 +192740,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_83setConstraintTolerances(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConstraintTolerances") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConstraintTolerances") < 0)) __PYX_ERR(38, 361, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -190871,20 +192755,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_83setConstraintTolerances(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConstraintTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConstraintTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 361, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setConstraintTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_catol, __pyx_v_crtol);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_72setConstraintTolerances(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_catol, __pyx_v_crtol);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_catol, PyObject *__pyx_v_crtol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_72setConstraintTolerances(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_catol, PyObject *__pyx_v_crtol) {
   PetscReal __pyx_v__catol;
   PetscReal __pyx_v__crtol;
   PyObject *__pyx_r = NULL;
@@ -190893,12 +192777,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(struct
   int __pyx_t_2;
   PetscReal __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setConstraintTolerances", 0);
 
-  /* "PETSc/TAO.pyx":414
+  /* "PETSc/TAO.pyx":364
  *         """
  *         """
  *         cdef PetscReal _catol=PETSC_DEFAULT, _crtol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -190908,7 +192789,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(struct
   __pyx_v__catol = PETSC_DEFAULT;
   __pyx_v__crtol = PETSC_DEFAULT;
 
-  /* "PETSc/TAO.pyx":415
+  /* "PETSc/TAO.pyx":365
  *         """
  *         cdef PetscReal _catol=PETSC_DEFAULT, _crtol=PETSC_DEFAULT
  *         if catol is not None: _catol = asReal(catol)             # <<<<<<<<<<<<<<
@@ -190918,13 +192799,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(struct
   __pyx_t_1 = (__pyx_v_catol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_catol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_catol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(38, 365, __pyx_L1_error)
     __pyx_v__catol = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":416
+  /* "PETSc/TAO.pyx":366
  *         cdef PetscReal _catol=PETSC_DEFAULT, _crtol=PETSC_DEFAULT
  *         if catol is not None: _catol = asReal(catol)
  *         if crtol is not None: _crtol = asReal(crtol)             # <<<<<<<<<<<<<<
@@ -190934,22 +192813,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(struct
   __pyx_t_2 = (__pyx_v_crtol != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_crtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_crtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(38, 366, __pyx_L1_error)
     __pyx_v__crtol = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":417
+  /* "PETSc/TAO.pyx":367
  *         if catol is not None: _catol = asReal(catol)
  *         if crtol is not None: _crtol = asReal(crtol)
  *         CHKERR( TaoSetConstraintTolerances(self.tao, _catol, _crtol) )             # <<<<<<<<<<<<<<
  * 
  *     def getConstraintTolerances(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConstraintTolerances(__pyx_v_self->tao, __pyx_v__catol, __pyx_v__crtol)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConstraintTolerances(__pyx_v_self->tao, __pyx_v__catol, __pyx_v__crtol)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 367, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":411
+  /* "PETSc/TAO.pyx":361
  *         return (toReal(_gatol), toReal(_grtol), toReal(_gttol))
  * 
  *     def setConstraintTolerances(self, catol=None, crtol=None):             # <<<<<<<<<<<<<<
@@ -190969,7 +192846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(struct
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":419
+/* "PETSc/TAO.pyx":369
  *         CHKERR( TaoSetConstraintTolerances(self.tao, _catol, _crtol) )
  * 
  *     def getConstraintTolerances(self):             # <<<<<<<<<<<<<<
@@ -190978,23 +192855,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82setConstraintTolerances(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_85getConstraintTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_84getConstraintTolerances[] = "TAO.getConstraintTolerances(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_85getConstraintTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_75getConstraintTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_74getConstraintTolerances[] = "TAO.getConstraintTolerances(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_75getConstraintTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getConstraintTolerances (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getConstraintTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConstraintTolerances", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_74getConstraintTolerances(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_74getConstraintTolerances(struct PyPetscTAOObject *__pyx_v_self) {
   PetscReal __pyx_v__catol;
   PetscReal __pyx_v__crtol;
   PyObject *__pyx_r = NULL;
@@ -191003,12 +192880,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(struct
   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("getConstraintTolerances", 0);
 
-  /* "PETSc/TAO.pyx":422
+  /* "PETSc/TAO.pyx":372
  *         """
  *         """
  *         cdef PetscReal _catol=PETSC_DEFAULT, _crtol=PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -191018,16 +192892,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(struct
   __pyx_v__catol = PETSC_DEFAULT;
   __pyx_v__crtol = PETSC_DEFAULT;
 
-  /* "PETSc/TAO.pyx":423
+  /* "PETSc/TAO.pyx":373
  *         """
  *         cdef PetscReal _catol=PETSC_DEFAULT, _crtol=PETSC_DEFAULT
  *         CHKERR( TaoGetConstraintTolerances(self.tao, &_catol, &_crtol) )             # <<<<<<<<<<<<<<
  *         return (toReal(_catol), toReal(_crtol))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetConstraintTolerances(__pyx_v_self->tao, (&__pyx_v__catol), (&__pyx_v__crtol))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetConstraintTolerances(__pyx_v_self->tao, (&__pyx_v__catol), (&__pyx_v__crtol))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 373, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":424
+  /* "PETSc/TAO.pyx":374
  *         cdef PetscReal _catol=PETSC_DEFAULT, _crtol=PETSC_DEFAULT
  *         CHKERR( TaoGetConstraintTolerances(self.tao, &_catol, &_crtol) )
  *         return (toReal(_catol), toReal(_crtol))             # <<<<<<<<<<<<<<
@@ -191035,11 +192909,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(struct
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__catol); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__catol); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 374, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__crtol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v__crtol); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 374, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 374, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -191051,7 +192925,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(struct
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":419
+  /* "PETSc/TAO.pyx":369
  *         CHKERR( TaoSetConstraintTolerances(self.tao, _catol, _crtol) )
  * 
  *     def getConstraintTolerances(self):             # <<<<<<<<<<<<<<
@@ -191072,7 +192946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(struct
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":426
+/* "PETSc/TAO.pyx":376
  *         return (toReal(_catol), toReal(_crtol))
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -191081,20 +192955,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84getConstraintTolerances(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_87setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_86setConvergenceTest[] = "TAO.setConvergenceTest(self, converged, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_87setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_77setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_76setConvergenceTest[] = "TAO.setConvergenceTest(self, converged, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_77setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_converged = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergenceTest (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_converged_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_converged,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -191111,7 +192982,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_87setConvergenceTest(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -191125,7 +192996,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_87setConvergenceTest(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) __PYX_ERR(38, 376, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -191142,20 +193013,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_87setConvergenceTest(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 376, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_converged, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_76setConvergenceTest(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_converged, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_76setConvergenceTest(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -191163,14 +193034,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(struct PyPe
   int __pyx_t_3;
   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("setConvergenceTest", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":429
+  /* "PETSc/TAO.pyx":379
  *         """
  *         """
  *         if converged is None:             # <<<<<<<<<<<<<<
@@ -191181,46 +193049,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(struct PyPe
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TAO.pyx":430
+    /* "PETSc/TAO.pyx":380
  *         """
  *         if converged is None:
  *             CHKERR( TaoSetConvergenceTest(self.tao, TaoDefaultConvergenceTest, NULL) )             # <<<<<<<<<<<<<<
  *             self.set_attr('__converged__', None)
  *         else:
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergenceTest(__pyx_v_self->tao, TaoDefaultConvergenceTest, NULL)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergenceTest(__pyx_v_self->tao, TaoDefaultConvergenceTest, NULL)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(38, 380, __pyx_L1_error)
 
-    /* "PETSc/TAO.pyx":431
+    /* "PETSc/TAO.pyx":381
  *         if converged is None:
  *             CHKERR( TaoSetConvergenceTest(self.tao, TaoDefaultConvergenceTest, NULL) )
  *             self.set_attr('__converged__', None)             # <<<<<<<<<<<<<<
  *         else:
  *             if args is None: args = ()
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged, Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__"), Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 381, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+    /* "PETSc/TAO.pyx":379
+ *         """
+ *         """
+ *         if converged is None:             # <<<<<<<<<<<<<<
+ *             CHKERR( TaoSetConvergenceTest(self.tao, TaoDefaultConvergenceTest, NULL) )
+ *             self.set_attr('__converged__', None)
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/TAO.pyx":433
+  /* "PETSc/TAO.pyx":383
  *             self.set_attr('__converged__', None)
  *         else:
  *             if args is None: args = ()             # <<<<<<<<<<<<<<
  *             if kargs is None: kargs = {}
  *             self.set_attr('__converged__', (converged, args, kargs))
  */
+  /*else*/ {
     __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:;
 
-    /* "PETSc/TAO.pyx":434
+    /* "PETSc/TAO.pyx":384
  *         else:
  *             if args is None: args = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -191230,22 +193104,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(struct PyPe
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 384, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
-    /* "PETSc/TAO.pyx":435
+    /* "PETSc/TAO.pyx":385
  *             if args is None: args = ()
  *             if kargs is None: kargs = {}
  *             self.set_attr('__converged__', (converged, args, kargs))             # <<<<<<<<<<<<<<
  *             CHKERR( TaoSetConvergenceTest(self.tao, TAO_Converged, NULL) )
  * 
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 385, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_converged);
     __Pyx_GIVEREF(__pyx_v_converged);
@@ -191256,23 +193128,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(struct PyPe
     __Pyx_INCREF(__pyx_v_kargs);
     __Pyx_GIVEREF(__pyx_v_kargs);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
-    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 385, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/TAO.pyx":436
+    /* "PETSc/TAO.pyx":386
  *             if kargs is None: kargs = {}
  *             self.set_attr('__converged__', (converged, args, kargs))
  *             CHKERR( TaoSetConvergenceTest(self.tao, TAO_Converged, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def getConvergenceTest(self):
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergenceTest(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_Converged, NULL)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergenceTest(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_Converged, NULL)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(38, 386, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":426
+  /* "PETSc/TAO.pyx":376
  *         return (toReal(_catol), toReal(_crtol))
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -191296,7 +193168,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":438
+/* "PETSc/TAO.pyx":388
  *             CHKERR( TaoSetConvergenceTest(self.tao, TAO_Converged, NULL) )
  * 
  *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
@@ -191305,32 +193177,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86setConvergenceTest(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_89getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_88getConvergenceTest[] = "TAO.getConvergenceTest(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_89getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_79getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_78getConvergenceTest[] = "TAO.getConvergenceTest(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_79getConvergenceTest(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_8petsc4py_5PETSc_3TAO_88getConvergenceTest(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_78getConvergenceTest(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_88getConvergenceTest(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_78getConvergenceTest(struct PyPetscTAOObject *__pyx_v_self) {
   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("getConvergenceTest", 0);
 
-  /* "PETSc/TAO.pyx":441
+  /* "PETSc/TAO.pyx":391
  *         """
  *         """
  *         return self.get_attr('__converged__')             # <<<<<<<<<<<<<<
@@ -191338,13 +193207,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_88getConvergenceTest(struct PyPe
  *     def setConvergedReason(self, reason):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_converged); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 391, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":438
+  /* "PETSc/TAO.pyx":388
  *             CHKERR( TaoSetConvergenceTest(self.tao, TAO_Converged, NULL) )
  * 
  *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
@@ -191363,7 +193232,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_88getConvergenceTest(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":443
+/* "PETSc/TAO.pyx":393
  *         return self.get_attr('__converged__')
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -191372,13 +193241,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_88getConvergenceTest(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_91setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_90setConvergedReason[] = "TAO.setConvergedReason(self, reason)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_91setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_81setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_80setConvergedReason[] = "TAO.setConvergedReason(self, reason)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_81setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_reason = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setConvergedReason (wrapper)", 0);
@@ -191400,7 +193266,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_91setConvergedReason(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) __PYX_ERR(38, 393, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -191411,50 +193277,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_91setConvergedReason(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 393, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_90setConvergedReason(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_reason);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_80setConvergedReason(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_reason);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_90setConvergedReason(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_reason) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80setConvergedReason(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_reason) {
   TaoConvergedReason __pyx_v_creason;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   TaoConvergedReason __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setConvergedReason", 0);
 
-  /* "PETSc/TAO.pyx":446
+  /* "PETSc/TAO.pyx":396
  *         """
  *         """
  *         cdef PetscTAOConvergedReason creason = reason             # <<<<<<<<<<<<<<
  *         CHKERR( TaoSetConvergedReason(self.tao, creason) )
  * 
  */
-  __pyx_t_1 = ((TaoConvergedReason)PyInt_AsLong(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((TaoConvergedReason)__Pyx_PyInt_As_TaoConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(38, 396, __pyx_L1_error)
   __pyx_v_creason = __pyx_t_1;
 
-  /* "PETSc/TAO.pyx":447
+  /* "PETSc/TAO.pyx":397
  *         """
  *         cdef PetscTAOConvergedReason creason = reason
  *         CHKERR( TaoSetConvergedReason(self.tao, creason) )             # <<<<<<<<<<<<<<
  * 
  *     def getConvergedReason(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergedReason(__pyx_v_self->tao, __pyx_v_creason)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergedReason(__pyx_v_self->tao, __pyx_v_creason)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 397, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":443
+  /* "PETSc/TAO.pyx":393
  *         return self.get_attr('__converged__')
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -191474,7 +193337,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_90setConvergedReason(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":449
+/* "PETSc/TAO.pyx":399
  *         CHKERR( TaoSetConvergedReason(self.tao, creason) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -191483,34 +193346,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_90setConvergedReason(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_93getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_92getConvergedReason[] = "TAO.getConvergedReason(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_93getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_83getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_82getConvergedReason[] = "TAO.getConvergedReason(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_83getConvergedReason(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_8petsc4py_5PETSc_3TAO_92getConvergedReason(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_82getConvergedReason(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getConvergedReason(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82getConvergedReason(struct PyPetscTAOObject *__pyx_v_self) {
   TaoConvergedReason __pyx_v_creason;
   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);
 
-  /* "PETSc/TAO.pyx":452
+  /* "PETSc/TAO.pyx":402
  *         """
  *         """
  *         cdef PetscTAOConvergedReason creason = TAO_CONTINUE_ITERATING             # <<<<<<<<<<<<<<
@@ -191519,16 +193379,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getConvergedReason(struct PyPe
  */
   __pyx_v_creason = TAO_CONTINUE_ITERATING;
 
-  /* "PETSc/TAO.pyx":453
+  /* "PETSc/TAO.pyx":403
  *         """
  *         cdef PetscTAOConvergedReason creason = TAO_CONTINUE_ITERATING
  *         CHKERR( TaoGetConvergedReason(self.tao, &creason) )             # <<<<<<<<<<<<<<
  *         return creason
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetConvergedReason(__pyx_v_self->tao, (&__pyx_v_creason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetConvergedReason(__pyx_v_self->tao, (&__pyx_v_creason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 403, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":454
+  /* "PETSc/TAO.pyx":404
  *         cdef PetscTAOConvergedReason creason = TAO_CONTINUE_ITERATING
  *         CHKERR( TaoGetConvergedReason(self.tao, &creason) )
  *         return creason             # <<<<<<<<<<<<<<
@@ -191536,13 +193396,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getConvergedReason(struct PyPe
  *     def setMonitor(self, monitor, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_creason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_TaoConvergedReason(__pyx_v_creason); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 404, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":449
+  /* "PETSc/TAO.pyx":399
  *         CHKERR( TaoSetConvergedReason(self.tao, creason) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -191561,7 +193421,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getConvergedReason(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":456
+/* "PETSc/TAO.pyx":406
  *         return creason
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -191570,20 +193430,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getConvergedReason(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_95setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_94setMonitor[] = "TAO.setMonitor(self, monitor, args=None, kargs=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_95setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_85setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_84setMonitor[] = "TAO.setMonitor(self, monitor, args=None, kargs=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_85setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_monitor = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMonitor (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_monitor_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_monitor,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -191600,7 +193457,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_95setMonitor(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_monitor_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_monitor)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -191614,7 +193471,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_95setMonitor(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(38, 406, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -191631,20 +193488,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_95setMonitor(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 406, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.setMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_monitor, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_84setMonitor(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_monitor, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84setMonitor(struct PyPetscTAOObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_monitorlist = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -191654,14 +193511,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setMonitor", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TAO.pyx":459
+  /* "PETSc/TAO.pyx":409
  *         """
  *         """
  *         if monitor is None: return             # <<<<<<<<<<<<<<
@@ -191676,19 +193530,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
     goto __pyx_L0;
   }
 
-  /* "PETSc/TAO.pyx":460
+  /* "PETSc/TAO.pyx":410
  *         """
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
  *         if monitorlist is None:
  *             CHKERR( TaoSetMonitor(self.tao, TAO_Monitor, NULL, NULL) )
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_monitorlist = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/TAO.pyx":461
+  /* "PETSc/TAO.pyx":411
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -191699,16 +193553,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TAO.pyx":462
+    /* "PETSc/TAO.pyx":412
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:
  *             CHKERR( TaoSetMonitor(self.tao, TAO_Monitor, NULL, NULL) )             # <<<<<<<<<<<<<<
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetMonitor(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_Monitor, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetMonitor(__pyx_v_self->tao, __pyx_f_8petsc4py_5PETSc_TAO_Monitor, NULL, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 412, __pyx_L1_error)
 
-    /* "PETSc/TAO.pyx":463
+    /* "PETSc/TAO.pyx":413
  *         if monitorlist is None:
  *             CHKERR( TaoSetMonitor(self.tao, TAO_Monitor, NULL, NULL) )
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -191720,11 +193574,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
     if (__pyx_t_2) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
-    /* "PETSc/TAO.pyx":464
+    /* "PETSc/TAO.pyx":414
  *             CHKERR( TaoSetMonitor(self.tao, TAO_Monitor, NULL, NULL) )
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -191734,22 +193586,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
     __pyx_t_2 = (__pyx_v_kargs == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 414, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L6;
     }
-    __pyx_L6:;
 
-    /* "PETSc/TAO.pyx":465
+    /* "PETSc/TAO.pyx":415
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  *             self.set_attr('__monitor__',  [(monitor, args, kargs)])             # <<<<<<<<<<<<<<
  *         else:
  *             monitorlist.append((monitor, args, kargs))
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 415, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_monitor);
     __Pyx_GIVEREF(__pyx_v_monitor);
@@ -191760,27 +193610,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
     __Pyx_INCREF(__pyx_v_kargs);
     __Pyx_GIVEREF(__pyx_v_kargs);
     PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
-    __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 415, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_3);
     PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__"), __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 415, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/TAO.pyx":411
+ *         if monitor is None: return
+ *         cdef object monitorlist = self.get_attr('__monitor__')
+ *         if monitorlist is None:             # <<<<<<<<<<<<<<
+ *             CHKERR( TaoSetMonitor(self.tao, TAO_Monitor, NULL, NULL) )
+ *             if args  is None: args  = ()
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/TAO.pyx":467
+  /* "PETSc/TAO.pyx":417
  *             self.set_attr('__monitor__',  [(monitor, args, kargs)])
  *         else:
  *             monitorlist.append((monitor, args, kargs))             # <<<<<<<<<<<<<<
  * 
  *     def getMonitor(self):
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 417, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_monitor);
     __Pyx_GIVEREF(__pyx_v_monitor);
@@ -191791,12 +193649,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
     __Pyx_INCREF(__pyx_v_kargs);
     __Pyx_GIVEREF(__pyx_v_kargs);
     PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
-    __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_t_3); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_t_3); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(38, 417, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __pyx_L4:;
 
-  /* "PETSc/TAO.pyx":456
+  /* "PETSc/TAO.pyx":406
  *         return creason
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -191821,7 +193679,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":469
+/* "PETSc/TAO.pyx":419
  *             monitorlist.append((monitor, args, kargs))
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -191830,32 +193688,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94setMonitor(struct PyPetscTAOOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_97getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_96getMonitor[] = "TAO.getMonitor(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_97getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_87getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_86getMonitor[] = "TAO.getMonitor(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_87getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMonitor (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMonitor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_96getMonitor(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_86getMonitor(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_96getMonitor(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_86getMonitor(struct PyPetscTAOObject *__pyx_v_self) {
   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("getMonitor", 0);
 
-  /* "PETSc/TAO.pyx":472
+  /* "PETSc/TAO.pyx":422
  *         """
  *         """
  *         return self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
@@ -191863,13 +193718,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_96getMonitor(struct PyPetscTAOOb
  *     def cancelMonitor(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 422, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":469
+  /* "PETSc/TAO.pyx":419
  *             monitorlist.append((monitor, args, kargs))
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -191888,7 +193743,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_96getMonitor(struct PyPetscTAOOb
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":474
+/* "PETSc/TAO.pyx":424
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -191897,53 +193752,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_96getMonitor(struct PyPetscTAOOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_99cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_98cancelMonitor[] = "TAO.cancelMonitor(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_99cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_89cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_88cancelMonitor[] = "TAO.cancelMonitor(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_89cancelMonitor(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_8petsc4py_5PETSc_3TAO_98cancelMonitor(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_88cancelMonitor(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_98cancelMonitor(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_88cancelMonitor(struct PyPetscTAOObject *__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("cancelMonitor", 0);
 
-  /* "PETSc/TAO.pyx":477
+  /* "PETSc/TAO.pyx":427
  *         """
  *         """
  *         CHKERR( TaoCancelMonitors(self.tao) )             # <<<<<<<<<<<<<<
  *         self.set_attr('__monitor__',  None)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoCancelMonitors(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoCancelMonitors(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 427, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":478
+  /* "PETSc/TAO.pyx":428
  *         """
  *         CHKERR( TaoCancelMonitors(self.tao) )
  *         self.set_attr('__monitor__',  None)             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_monitor, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__monitor__"), Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 428, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/TAO.pyx":474
+  /* "PETSc/TAO.pyx":424
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -191964,7 +193816,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_98cancelMonitor(struct PyPetscTA
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":482
+/* "PETSc/TAO.pyx":432
  *     #
  * 
  *     def solve(self, Vec x=None):             # <<<<<<<<<<<<<<
@@ -191973,13 +193825,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_98cancelMonitor(struct PyPetscTA
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_100solve[] = "TAO.solve(self, Vec x=None)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_91solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_90solve[] = "TAO.solve(self, Vec x=None)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_91solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solve (wrapper)", 0);
@@ -192004,7 +193853,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101solve(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(38, 432, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -192017,14 +193866,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101solve(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solve", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[38]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("solve", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 432, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TAO.solve", __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, 1, "x", 0))) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_100solve(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(38, 432, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_90solve(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -192035,18 +193884,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101solve(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_100solve(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_90solve(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("solve", 0);
 
-  /* "PETSc/TAO.pyx":485
+  /* "PETSc/TAO.pyx":435
  *         """
  *         """
  *         if x is not None:             # <<<<<<<<<<<<<<
@@ -192057,28 +193903,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_100solve(struct PyPetscTAOObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TAO.pyx":486
+    /* "PETSc/TAO.pyx":436
  *         """
  *         if x is not None:
  *             CHKERR( TaoSetInitialVector(self.tao, x.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( TaoSolve(self.tao) )
  * 
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetInitialVector(__pyx_v_self->tao, __pyx_v_x->vec)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetInitialVector(__pyx_v_self->tao, __pyx_v_x->vec)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(38, 436, __pyx_L1_error)
+
+    /* "PETSc/TAO.pyx":435
+ *         """
+ *         """
+ *         if x is not None:             # <<<<<<<<<<<<<<
+ *             CHKERR( TaoSetInitialVector(self.tao, x.vec) )
+ *         CHKERR( TaoSolve(self.tao) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":487
+  /* "PETSc/TAO.pyx":437
  *         if x is not None:
  *             CHKERR( TaoSetInitialVector(self.tao, x.vec) )
  *         CHKERR( TaoSolve(self.tao) )             # <<<<<<<<<<<<<<
  * 
  *     def getSolution(self):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSolve(__pyx_v_self->tao)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSolve(__pyx_v_self->tao)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(38, 437, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":482
+  /* "PETSc/TAO.pyx":432
  *     #
  * 
  *     def solve(self, Vec x=None):             # <<<<<<<<<<<<<<
@@ -192098,7 +193950,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_100solve(struct PyPetscTAOObject
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":489
+/* "PETSc/TAO.pyx":439
  *         CHKERR( TaoSolve(self.tao) )
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -192107,55 +193959,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_100solve(struct PyPetscTAOObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_103getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_102getSolution[] = "TAO.getSolution(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_103getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_93getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_92getSolution[] = "TAO.getSolution(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_93getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSolution (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSolution", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSolution", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_102getSolution(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_92getSolution(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getSolution(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getSolution(struct PyPetscTAOObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vec = 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("getSolution", 0);
 
-  /* "PETSc/TAO.pyx":492
+  /* "PETSc/TAO.pyx":442
  *         """
  *         """
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( TaoGetSolutionVector(self.tao, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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[38]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 442, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TAO.pyx":493
+  /* "PETSc/TAO.pyx":443
  *         """
  *         cdef Vec vec = Vec()
  *         CHKERR( TaoGetSolutionVector(self.tao, &vec.vec) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(vec.obj)
  *         return vec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionVector(__pyx_v_self->tao, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionVector(__pyx_v_self->tao, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 443, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":494
+  /* "PETSc/TAO.pyx":444
  *         cdef Vec vec = Vec()
  *         CHKERR( TaoGetSolutionVector(self.tao, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -192164,7 +194013,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getSolution(struct PyPetscTAO
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/TAO.pyx":495
+  /* "PETSc/TAO.pyx":445
  *         CHKERR( TaoGetSolutionVector(self.tao, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
@@ -192176,7 +194025,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getSolution(struct PyPetscTAO
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":489
+  /* "PETSc/TAO.pyx":439
  *         CHKERR( TaoSolve(self.tao) )
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -192196,7 +194045,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getSolution(struct PyPetscTAO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":497
+/* "PETSc/TAO.pyx":447
  *         return vec
  * 
  *     def getGradient(self):             # <<<<<<<<<<<<<<
@@ -192205,55 +194054,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getSolution(struct PyPetscTAO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_105getGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_104getGradient[] = "TAO.getGradient(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_105getGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_95getGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_94getGradient[] = "TAO.getGradient(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_95getGradient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getGradient (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getGradient", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getGradient", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_104getGradient(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_94getGradient(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_104getGradient(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94getGradient(struct PyPetscTAOObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vec = 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("getGradient", 0);
 
-  /* "PETSc/TAO.pyx":500
+  /* "PETSc/TAO.pyx":450
  *         """
  *         """
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( TaoGetGradientVector(self.tao, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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[38]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 450, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TAO.pyx":501
+  /* "PETSc/TAO.pyx":451
  *         """
  *         cdef Vec vec = Vec()
  *         CHKERR( TaoGetGradientVector(self.tao, &vec.vec) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(vec.obj)
  *         return vec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetGradientVector(__pyx_v_self->tao, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetGradientVector(__pyx_v_self->tao, (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 451, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":502
+  /* "PETSc/TAO.pyx":452
  *         cdef Vec vec = Vec()
  *         CHKERR( TaoGetGradientVector(self.tao, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -192262,19 +194108,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_104getGradient(struct PyPetscTAO
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/TAO.pyx":503
+  /* "PETSc/TAO.pyx":453
  *         CHKERR( TaoGetGradientVector(self.tao, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
  * 
- *     def getVariableBounds(self):
+ *     def setGradientNorm(self, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_vec));
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":497
+  /* "PETSc/TAO.pyx":447
  *         return vec
  * 
  *     def getGradient(self):             # <<<<<<<<<<<<<<
@@ -192294,9 +194140,490 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_104getGradient(struct PyPetscTAO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":505
+/* "PETSc/TAO.pyx":455
  *         return vec
  * 
+ *     def setGradientNorm(self, Mat mat):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_97setGradientNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_96setGradientNorm[] = "TAO.setGradientNorm(self, Mat mat)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_97setGradientNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setGradientNorm (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,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_mat)) != 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, "setGradientNorm") < 0)) __PYX_ERR(38, 455, __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_mat = ((struct PyPetscMatObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setGradientNorm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 455, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setGradientNorm", __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_ERR(38, 455, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_96setGradientNorm(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_mat);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_96setGradientNorm(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setGradientNorm", 0);
+
+  /* "PETSc/TAO.pyx":458
+ *         """
+ *         """
+ *         CHKERR( TaoSetGradientNorm(self.tao, mat.mat) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getGradientNorm(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetGradientNorm(__pyx_v_self->tao, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 458, __pyx_L1_error)
+
+  /* "PETSc/TAO.pyx":455
+ *         return vec
+ * 
+ *     def setGradientNorm(self, Mat mat):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setGradientNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":460
+ *         CHKERR( TaoSetGradientNorm(self.tao, mat.mat) )
+ * 
+ *     def getGradientNorm(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_99getGradientNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_98getGradientNorm[] = "TAO.getGradientNorm(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_99getGradientNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getGradientNorm (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getGradientNorm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getGradientNorm", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_98getGradientNorm(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_98getGradientNorm(struct PyPetscTAOObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getGradientNorm", 0);
+
+  /* "PETSc/TAO.pyx":463
+ *         """
+ *         """
+ *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( TaoGetGradientNorm(self.tao, &mat.mat) )
+ *         PetscINCREF(mat.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 463, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":464
+ *         """
+ *         cdef Mat mat = Mat()
+ *         CHKERR( TaoGetGradientNorm(self.tao, &mat.mat) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(mat.obj)
+ *         return mat
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetGradientNorm(__pyx_v_self->tao, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 464, __pyx_L1_error)
+
+  /* "PETSc/TAO.pyx":465
+ *         cdef Mat mat = Mat()
+ *         CHKERR( TaoGetGradientNorm(self.tao, &mat.mat) )
+ *         PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
+ *         return mat
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
+
+  /* "PETSc/TAO.pyx":466
+ *         CHKERR( TaoGetGradientNorm(self.tao, &mat.mat) )
+ *         PetscINCREF(mat.obj)
+ *         return mat             # <<<<<<<<<<<<<<
+ * 
+ *     def setLMVMH0(self, Mat mat):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_mat));
+  __pyx_r = ((PyObject *)__pyx_v_mat);
+  goto __pyx_L0;
+
+  /* "PETSc/TAO.pyx":460
+ *         CHKERR( TaoSetGradientNorm(self.tao, mat.mat) )
+ * 
+ *     def getGradientNorm(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getGradientNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":468
+ *         return mat
+ * 
+ *     def setLMVMH0(self, Mat mat):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101setLMVMH0(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_100setLMVMH0[] = "TAO.setLMVMH0(self, Mat mat)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101setLMVMH0(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setLMVMH0 (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,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_mat)) != 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, "setLMVMH0") < 0)) __PYX_ERR(38, 468, __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_mat = ((struct PyPetscMatObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setLMVMH0", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 468, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setLMVMH0", __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_ERR(38, 468, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_100setLMVMH0(((struct PyPetscTAOObject *)__pyx_v_self), __pyx_v_mat);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_100setLMVMH0(struct PyPetscTAOObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setLMVMH0", 0);
+
+  /* "PETSc/TAO.pyx":471
+ *         """
+ *         """
+ *         CHKERR( TaoLMVMSetH0(self.tao, mat.mat) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getLMVMH0(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoLMVMSetH0(__pyx_v_self->tao, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 471, __pyx_L1_error)
+
+  /* "PETSc/TAO.pyx":468
+ *         return mat
+ * 
+ *     def setLMVMH0(self, Mat mat):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.setLMVMH0", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":473
+ *         CHKERR( TaoLMVMSetH0(self.tao, mat.mat) )
+ * 
+ *     def getLMVMH0(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_103getLMVMH0(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_102getLMVMH0[] = "TAO.getLMVMH0(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_103getLMVMH0(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getLMVMH0 (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getLMVMH0", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLMVMH0", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_102getLMVMH0(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getLMVMH0(struct PyPetscTAOObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLMVMH0", 0);
+
+  /* "PETSc/TAO.pyx":476
+ *         """
+ *         """
+ *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( TaoLMVMGetH0(self.tao, &mat.mat) )
+ *         PetscINCREF(mat.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 476, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":477
+ *         """
+ *         cdef Mat mat = Mat()
+ *         CHKERR( TaoLMVMGetH0(self.tao, &mat.mat) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(mat.obj)
+ *         return mat
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoLMVMGetH0(__pyx_v_self->tao, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 477, __pyx_L1_error)
+
+  /* "PETSc/TAO.pyx":478
+ *         cdef Mat mat = Mat()
+ *         CHKERR( TaoLMVMGetH0(self.tao, &mat.mat) )
+ *         PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
+ *         return mat
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
+
+  /* "PETSc/TAO.pyx":479
+ *         CHKERR( TaoLMVMGetH0(self.tao, &mat.mat) )
+ *         PetscINCREF(mat.obj)
+ *         return mat             # <<<<<<<<<<<<<<
+ * 
+ *     def getLMVMH0KSP(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_mat));
+  __pyx_r = ((PyObject *)__pyx_v_mat);
+  goto __pyx_L0;
+
+  /* "PETSc/TAO.pyx":473
+ *         CHKERR( TaoLMVMSetH0(self.tao, mat.mat) )
+ * 
+ *     def getLMVMH0(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getLMVMH0", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":481
+ *         return mat
+ * 
+ *     def getLMVMH0KSP(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_105getLMVMH0KSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_104getLMVMH0KSP[] = "TAO.getLMVMH0KSP(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_105getLMVMH0KSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getLMVMH0KSP (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getLMVMH0KSP", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLMVMH0KSP", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_104getLMVMH0KSP(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_104getLMVMH0KSP(struct PyPetscTAOObject *__pyx_v_self) {
+  struct PyPetscKSPObject *__pyx_v_ksp = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLMVMH0KSP", 0);
+
+  /* "PETSc/TAO.pyx":484
+ *         """
+ *         """
+ *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
+ *         CHKERR( TaoLMVMGetH0KSP(self.tao, &ksp.ksp) )
+ *         PetscINCREF(ksp.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 484, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":485
+ *         """
+ *         cdef KSP ksp = KSP()
+ *         CHKERR( TaoLMVMGetH0KSP(self.tao, &ksp.ksp) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(ksp.obj)
+ *         return ksp
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoLMVMGetH0KSP(__pyx_v_self->tao, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 485, __pyx_L1_error)
+
+  /* "PETSc/TAO.pyx":486
+ *         cdef KSP ksp = KSP()
+ *         CHKERR( TaoLMVMGetH0KSP(self.tao, &ksp.ksp) )
+ *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
+ *         return ksp
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
+
+  /* "PETSc/TAO.pyx":487
+ *         CHKERR( TaoLMVMGetH0KSP(self.tao, &ksp.ksp) )
+ *         PetscINCREF(ksp.obj)
+ *         return ksp             # <<<<<<<<<<<<<<
+ * 
+ *     def getVariableBounds(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_ksp));
+  __pyx_r = ((PyObject *)__pyx_v_ksp);
+  goto __pyx_L0;
+
+  /* "PETSc/TAO.pyx":481
+ *         return mat
+ * 
+ *     def getLMVMH0KSP(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         """
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getLMVMH0KSP", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ksp);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":489
+ *         return ksp
+ * 
  *     def getVariableBounds(self):             # <<<<<<<<<<<<<<
  *         """
  *         """
@@ -192326,37 +194653,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_106getVariableBounds(struct PyPe
   __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("getVariableBounds", 0);
 
-  /* "PETSc/TAO.pyx":508
+  /* "PETSc/TAO.pyx":492
  *         """
  *         """
  *         cdef Vec xl = Vec(), xu = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( TaoGetVariableBounds(self.tao, &xl.vec, &xu.vec) )
  *         PetscINCREF(xl.obj); PetscINCREF(xu.obj)
  */
-  __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[38]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 492, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_xl = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
-  __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[38]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 492, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_xu = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TAO.pyx":509
+  /* "PETSc/TAO.pyx":493
  *         """
  *         cdef Vec xl = Vec(), xu = Vec()
  *         CHKERR( TaoGetVariableBounds(self.tao, &xl.vec, &xu.vec) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(xl.obj); PetscINCREF(xu.obj)
  *         return (xl, xu)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetVariableBounds(__pyx_v_self->tao, (&__pyx_v_xl->vec), (&__pyx_v_xu->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetVariableBounds(__pyx_v_self->tao, (&__pyx_v_xl->vec), (&__pyx_v_xu->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 493, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":510
+  /* "PETSc/TAO.pyx":494
  *         cdef Vec xl = Vec(), xu = Vec()
  *         CHKERR( TaoGetVariableBounds(self.tao, &xl.vec, &xu.vec) )
  *         PetscINCREF(xl.obj); PetscINCREF(xu.obj)             # <<<<<<<<<<<<<<
@@ -192366,7 +194690,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_106getVariableBounds(struct PyPe
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_xl->__pyx_base.obj);
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_xu->__pyx_base.obj);
 
-  /* "PETSc/TAO.pyx":511
+  /* "PETSc/TAO.pyx":495
  *         CHKERR( TaoGetVariableBounds(self.tao, &xl.vec, &xu.vec) )
  *         PetscINCREF(xl.obj); PetscINCREF(xu.obj)
  *         return (xl, xu)             # <<<<<<<<<<<<<<
@@ -192374,7 +194698,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_106getVariableBounds(struct PyPe
  *     def getIterationNumber(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 495, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_xl));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_xl));
@@ -192386,8 +194710,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_106getVariableBounds(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":505
- *         return vec
+  /* "PETSc/TAO.pyx":489
+ *         return ksp
  * 
  *     def getVariableBounds(self):             # <<<<<<<<<<<<<<
  *         """
@@ -192407,7 +194731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_106getVariableBounds(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":513
+/* "PETSc/TAO.pyx":497
  *         return (xl, xu)
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
@@ -192438,12 +194762,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_108getIterationNumber(struct PyP
   __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);
 
-  /* "PETSc/TAO.pyx":516
+  /* "PETSc/TAO.pyx":500
  *         """
  *         """
  *         cdef PetscInt its=0             # <<<<<<<<<<<<<<
@@ -192452,16 +194773,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_108getIterationNumber(struct PyP
  */
   __pyx_v_its = 0;
 
-  /* "PETSc/TAO.pyx":517
+  /* "PETSc/TAO.pyx":501
  *         """
  *         cdef PetscInt its=0
  *         CHKERR( TaoGetSolutionStatus(self.tao, &its, NULL, NULL, NULL, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         return toInt(its)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, (&__pyx_v_its), NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, (&__pyx_v_its), NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 501, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":518
+  /* "PETSc/TAO.pyx":502
  *         cdef PetscInt its=0
  *         CHKERR( TaoGetSolutionStatus(self.tao, &its, NULL, NULL, NULL, NULL, NULL) )
  *         return toInt(its)             # <<<<<<<<<<<<<<
@@ -192469,13 +194790,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_108getIterationNumber(struct PyP
  *     def getObjectiveValue(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 502, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":513
+  /* "PETSc/TAO.pyx":497
  *         return (xl, xu)
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
@@ -192494,7 +194815,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_108getIterationNumber(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":520
+/* "PETSc/TAO.pyx":504
  *         return toInt(its)
  * 
  *     def getObjectiveValue(self):             # <<<<<<<<<<<<<<
@@ -192525,12 +194846,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_110getObjectiveValue(struct PyPe
   __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("getObjectiveValue", 0);
 
-  /* "PETSc/TAO.pyx":523
+  /* "PETSc/TAO.pyx":507
  *         """
  *         """
  *         cdef PetscReal fval=0             # <<<<<<<<<<<<<<
@@ -192539,120 +194857,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_110getObjectiveValue(struct PyPe
  */
   __pyx_v_fval = 0.0;
 
-  /* "PETSc/TAO.pyx":524
+  /* "PETSc/TAO.pyx":508
  *         """
  *         cdef PetscReal fval=0
  *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, &fval, NULL, NULL, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         return toReal(fval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, NULL, (&__pyx_v_fval), NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/TAO.pyx":525
- *         cdef PetscReal fval=0
- *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, &fval, NULL, NULL, NULL, NULL) )
- *         return toReal(fval)             # <<<<<<<<<<<<<<
- * 
- *     getFunctionValue = getObjectiveValue
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_fval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
-
-  /* "PETSc/TAO.pyx":520
- *         return toInt(its)
- * 
- *     def getObjectiveValue(self):             # <<<<<<<<<<<<<<
- *         """
- *         """
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getObjectiveValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TAO.pyx":529
- *     getFunctionValue = getObjectiveValue
- * 
- *     def getGradientNorm(self):             # <<<<<<<<<<<<<<
- *         """
- *         """
- */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, NULL, (&__pyx_v_fval), NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 508, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_113getGradientNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_112getGradientNorm[] = "TAO.getGradientNorm(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_113getGradientNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getGradientNorm (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getGradientNorm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getGradientNorm", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_112getGradientNorm(((struct PyPetscTAOObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_112getGradientNorm(struct PyPetscTAOObject *__pyx_v_self) {
-  PetscReal __pyx_v_gnorm;
-  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("getGradientNorm", 0);
-
-  /* "PETSc/TAO.pyx":532
- *         """
- *         """
- *         cdef PetscReal gnorm=0             # <<<<<<<<<<<<<<
- *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, NULL, &gnorm, NULL, NULL, NULL) )
- *         return toReal(gnorm)
- */
-  __pyx_v_gnorm = 0.0;
-
-  /* "PETSc/TAO.pyx":533
- *         """
- *         cdef PetscReal gnorm=0
- *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, NULL, &gnorm, NULL, NULL, NULL) )             # <<<<<<<<<<<<<<
- *         return toReal(gnorm)
- * 
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, NULL, NULL, (&__pyx_v_gnorm), NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/TAO.pyx":534
- *         cdef PetscReal gnorm=0
- *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, NULL, &gnorm, NULL, NULL, NULL) )
- *         return toReal(gnorm)             # <<<<<<<<<<<<<<
+  /* "PETSc/TAO.pyx":509
+ *         cdef PetscReal fval=0
+ *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, &fval, NULL, NULL, NULL, NULL) )
+ *         return toReal(fval)             # <<<<<<<<<<<<<<
  * 
- *     def getConstraintsNorm(self):
+ *     getFunctionValue = getObjectiveValue
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gnorm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_fval); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":529
- *     getFunctionValue = getObjectiveValue
+  /* "PETSc/TAO.pyx":504
+ *         return toInt(its)
  * 
- *     def getGradientNorm(self):             # <<<<<<<<<<<<<<
+ *     def getObjectiveValue(self):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192660,7 +194891,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_112getGradientNorm(struct PyPets
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getGradientNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getObjectiveValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -192668,78 +194899,75 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_112getGradientNorm(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":536
- *         return toReal(gnorm)
+/* "PETSc/TAO.pyx":513
+ *     getFunctionValue = getObjectiveValue
  * 
- *     def getConstraintsNorm(self):             # <<<<<<<<<<<<<<
+ *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_115getConstraintsNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_114getConstraintsNorm[] = "TAO.getConstraintsNorm(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_115getConstraintsNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_113getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_112getConvergedReason[] = "TAO.getConvergedReason(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_113getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConstraintsNorm (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConstraintsNorm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConstraintsNorm", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_114getConstraintsNorm(((struct PyPetscTAOObject *)__pyx_v_self));
+    __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_8petsc4py_5PETSc_3TAO_112getConvergedReason(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_114getConstraintsNorm(struct PyPetscTAOObject *__pyx_v_self) {
-  PetscReal __pyx_v_cnorm;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_112getConvergedReason(struct PyPetscTAOObject *__pyx_v_self) {
+  TaoConvergedReason __pyx_v_reason;
   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("getConstraintsNorm", 0);
+  __Pyx_RefNannySetupContext("getConvergedReason", 0);
 
-  /* "PETSc/TAO.pyx":539
+  /* "PETSc/TAO.pyx":516
  *         """
  *         """
- *         cdef PetscReal cnorm=0             # <<<<<<<<<<<<<<
- *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, NULL, NULL, &cnorm, NULL, NULL) )
- *         return toReal(cnorm)
+ *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING             # <<<<<<<<<<<<<<
+ *         CHKERR( TaoGetConvergedReason(self.tao, &reason) )
+ *         return reason
  */
-  __pyx_v_cnorm = 0.0;
+  __pyx_v_reason = TAO_CONTINUE_ITERATING;
 
-  /* "PETSc/TAO.pyx":540
+  /* "PETSc/TAO.pyx":517
  *         """
- *         cdef PetscReal cnorm=0
- *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, NULL, NULL, &cnorm, NULL, NULL) )             # <<<<<<<<<<<<<<
- *         return toReal(cnorm)
+ *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING
+ *         CHKERR( TaoGetConvergedReason(self.tao, &reason) )             # <<<<<<<<<<<<<<
+ *         return reason
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, NULL, NULL, NULL, (&__pyx_v_cnorm), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetConvergedReason(__pyx_v_self->tao, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 517, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":541
- *         cdef PetscReal cnorm=0
- *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, NULL, NULL, &cnorm, NULL, NULL) )
- *         return toReal(cnorm)             # <<<<<<<<<<<<<<
+  /* "PETSc/TAO.pyx":518
+ *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING
+ *         CHKERR( TaoGetConvergedReason(self.tao, &reason) )
+ *         return reason             # <<<<<<<<<<<<<<
  * 
- *     def getConvergedReason(self):
+ *     def getSolutionNorm(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cnorm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_TaoConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":536
- *         return toReal(gnorm)
+  /* "PETSc/TAO.pyx":513
+ *     getFunctionValue = getObjectiveValue
  * 
- *     def getConstraintsNorm(self):             # <<<<<<<<<<<<<<
+ *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192747,7 +194975,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_114getConstraintsNorm(struct PyP
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getConstraintsNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -192755,78 +194983,113 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_114getConstraintsNorm(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":543
- *         return toReal(cnorm)
+/* "PETSc/TAO.pyx":520
+ *         return reason
  * 
- *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
+ *     def getSolutionNorm(self):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_117getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_116getConvergedReason[] = "TAO.getConvergedReason(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_117getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_115getSolutionNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_114getSolutionNorm[] = "TAO.getSolutionNorm(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_115getSolutionNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getSolutionNorm (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_8petsc4py_5PETSc_3TAO_116getConvergedReason(((struct PyPetscTAOObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getSolutionNorm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSolutionNorm", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_114getSolutionNorm(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_116getConvergedReason(struct PyPetscTAOObject *__pyx_v_self) {
-  TaoConvergedReason __pyx_v_reason;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_114getSolutionNorm(struct PyPetscTAOObject *__pyx_v_self) {
+  PetscReal __pyx_v_gnorm;
+  PetscReal __pyx_v_cnorm;
+  PetscReal __pyx_v_fval;
   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);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getSolutionNorm", 0);
 
-  /* "PETSc/TAO.pyx":546
+  /* "PETSc/TAO.pyx":523
  *         """
  *         """
- *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING             # <<<<<<<<<<<<<<
- *         CHKERR( TaoGetConvergedReason(self.tao, &reason) )
- *         return reason
+ *         cdef PetscReal gnorm=0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal cnorm=0
+ *         cdef PetscReal fval=0
  */
-  __pyx_v_reason = TAO_CONTINUE_ITERATING;
+  __pyx_v_gnorm = 0.0;
 
-  /* "PETSc/TAO.pyx":547
+  /* "PETSc/TAO.pyx":524
  *         """
- *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING
- *         CHKERR( TaoGetConvergedReason(self.tao, &reason) )             # <<<<<<<<<<<<<<
- *         return reason
+ *         cdef PetscReal gnorm=0
+ *         cdef PetscReal cnorm=0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal fval=0
+ *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, &fval, &gnorm, &cnorm, NULL, NULL) )
+ */
+  __pyx_v_cnorm = 0.0;
+
+  /* "PETSc/TAO.pyx":525
+ *         cdef PetscReal gnorm=0
+ *         cdef PetscReal cnorm=0
+ *         cdef PetscReal fval=0             # <<<<<<<<<<<<<<
+ *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, &fval, &gnorm, &cnorm, NULL, NULL) )
+ *         return (toReal(fval), toReal(gnorm), toReal(cnorm))
+ */
+  __pyx_v_fval = 0.0;
+
+  /* "PETSc/TAO.pyx":526
+ *         cdef PetscReal cnorm=0
+ *         cdef PetscReal fval=0
+ *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, &fval, &gnorm, &cnorm, NULL, NULL) )             # <<<<<<<<<<<<<<
+ *         return (toReal(fval), toReal(gnorm), toReal(cnorm))
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetConvergedReason(__pyx_v_self->tao, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, NULL, (&__pyx_v_fval), (&__pyx_v_gnorm), (&__pyx_v_cnorm), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 526, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":548
- *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING
- *         CHKERR( TaoGetConvergedReason(self.tao, &reason) )
- *         return reason             # <<<<<<<<<<<<<<
+  /* "PETSc/TAO.pyx":527
+ *         cdef PetscReal fval=0
+ *         CHKERR( TaoGetSolutionStatus(self.tao, NULL, &fval, &gnorm, &cnorm, NULL, NULL) )
+ *         return (toReal(fval), toReal(gnorm), toReal(cnorm))             # <<<<<<<<<<<<<<
  * 
  *     def getSolutionStatus(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_fval); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gnorm); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 527, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cnorm); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 527, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 527, __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;
 
-  /* "PETSc/TAO.pyx":543
- *         return toReal(cnorm)
+  /* "PETSc/TAO.pyx":520
+ *         return reason
  * 
- *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
+ *     def getSolutionNorm(self):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192834,7 +195097,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_116getConvergedReason(struct PyP
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.getSolutionNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -192842,8 +195108,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_116getConvergedReason(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":550
- *         return reason
+/* "PETSc/TAO.pyx":529
+ *         return (toReal(fval), toReal(gnorm), toReal(cnorm))
  * 
  *     def getSolutionStatus(self):             # <<<<<<<<<<<<<<
  *         """
@@ -192851,23 +195117,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_116getConvergedReason(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_119getSolutionStatus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_118getSolutionStatus[] = "TAO.getSolutionStatus(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_119getSolutionStatus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_117getSolutionStatus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_116getSolutionStatus[] = "TAO.getSolutionStatus(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_117getSolutionStatus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSolutionStatus (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSolutionStatus", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSolutionStatus", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_116getSolutionStatus(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_116getSolutionStatus(struct PyPetscTAOObject *__pyx_v_self) {
   PetscInt __pyx_v_its;
   PetscReal __pyx_v_fval;
   PetscReal __pyx_v_gnorm;
@@ -192884,12 +195150,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPe
   PyObject *__pyx_t_6 = NULL;
   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("getSolutionStatus", 0);
 
-  /* "PETSc/TAO.pyx":553
+  /* "PETSc/TAO.pyx":532
  *         """
  *         """
  *         cdef PetscInt its=0             # <<<<<<<<<<<<<<
@@ -192898,7 +195161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPe
  */
   __pyx_v_its = 0;
 
-  /* "PETSc/TAO.pyx":554
+  /* "PETSc/TAO.pyx":533
  *         """
  *         cdef PetscInt its=0
  *         cdef PetscReal fval=0, gnorm=0, cnorm=0, xdiff=0             # <<<<<<<<<<<<<<
@@ -192910,7 +195173,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPe
   __pyx_v_cnorm = 0.0;
   __pyx_v_xdiff = 0.0;
 
-  /* "PETSc/TAO.pyx":555
+  /* "PETSc/TAO.pyx":534
  *         cdef PetscInt its=0
  *         cdef PetscReal fval=0, gnorm=0, cnorm=0, xdiff=0
  *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING             # <<<<<<<<<<<<<<
@@ -192919,16 +195182,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPe
  */
   __pyx_v_reason = TAO_CONTINUE_ITERATING;
 
-  /* "PETSc/TAO.pyx":556
+  /* "PETSc/TAO.pyx":535
  *         cdef PetscReal fval=0, gnorm=0, cnorm=0, xdiff=0
  *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING
  *         CHKERR( TaoGetSolutionStatus(self.tao, &its,             # <<<<<<<<<<<<<<
  *                                      &fval, &gnorm, &cnorm, &xdiff,
  *                                      &reason) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, (&__pyx_v_its), (&__pyx_v_fval), (&__pyx_v_gnorm), (&__pyx_v_cnorm), (&__pyx_v_xdiff), (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetSolutionStatus(__pyx_v_self->tao, (&__pyx_v_its), (&__pyx_v_fval), (&__pyx_v_gnorm), (&__pyx_v_cnorm), (&__pyx_v_xdiff), (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(38, 535, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":559
+  /* "PETSc/TAO.pyx":538
  *                                      &fval, &gnorm, &cnorm, &xdiff,
  *                                      &reason) )
  *         return (toInt(its), toReal(fval),             # <<<<<<<<<<<<<<
@@ -192936,43 +195199,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPe
  *                 toReal(xdiff), reason)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 538, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_fval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_fval); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 538, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/TAO.pyx":560
+  /* "PETSc/TAO.pyx":539
  *                                      &reason) )
  *         return (toInt(its), toReal(fval),
  *                 toReal(gnorm), toReal(cnorm),             # <<<<<<<<<<<<<<
  *                 toReal(xdiff), reason)
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gnorm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gnorm); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cnorm); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cnorm); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "PETSc/TAO.pyx":561
+  /* "PETSc/TAO.pyx":540
  *         return (toInt(its), toReal(fval),
  *                 toReal(gnorm), toReal(cnorm),
  *                 toReal(xdiff), reason)             # <<<<<<<<<<<<<<
  * 
  *     def getKSP(self):
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_xdiff); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_xdiff); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyInt_From_TaoConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_7)) __PYX_ERR(38, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
 
-  /* "PETSc/TAO.pyx":559
+  /* "PETSc/TAO.pyx":538
  *                                      &fval, &gnorm, &cnorm, &xdiff,
  *                                      &reason) )
  *         return (toInt(its), toReal(fval),             # <<<<<<<<<<<<<<
  *                 toReal(gnorm), toReal(cnorm),
  *                 toReal(xdiff), reason)
  */
-  __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(38, 538, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
@@ -192996,8 +195259,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPe
   __pyx_t_8 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":550
- *         return reason
+  /* "PETSc/TAO.pyx":529
+ *         return (toReal(fval), toReal(gnorm), toReal(cnorm))
  * 
  *     def getSolutionStatus(self):             # <<<<<<<<<<<<<<
  *         """
@@ -193021,7 +195284,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":563
+/* "PETSc/TAO.pyx":542
  *                 toReal(xdiff), reason)
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -193030,55 +195293,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getSolutionStatus(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_121getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3TAO_120getKSP[] = "TAO.getKSP(self)\n\n        ";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_121getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_119getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3TAO_118getKSP[] = "TAO.getKSP(self)\n\n        ";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_119getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getKSP (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getKSP", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKSP", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_120getKSP(((struct PyPetscTAOObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_118getKSP(((struct PyPetscTAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_120getKSP(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getKSP(struct PyPetscTAOObject *__pyx_v_self) {
   struct PyPetscKSPObject *__pyx_v_ksp = 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("getKSP", 0);
 
-  /* "PETSc/TAO.pyx":566
+  /* "PETSc/TAO.pyx":545
  *         """
  *         """
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( TaoGetKSP(self.tao, &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[38]; __pyx_lineno = 566; __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(38, 545, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TAO.pyx":567
+  /* "PETSc/TAO.pyx":546
  *         """
  *         cdef KSP ksp = KSP()
  *         CHKERR( TaoGetKSP(self.tao, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetKSP(__pyx_v_self->tao, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetKSP(__pyx_v_self->tao, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(38, 546, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":568
+  /* "PETSc/TAO.pyx":547
  *         cdef KSP ksp = KSP()
  *         CHKERR( TaoGetKSP(self.tao, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -193087,7 +195347,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_120getKSP(struct PyPetscTAOObjec
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/TAO.pyx":569
+  /* "PETSc/TAO.pyx":548
  *         CHKERR( TaoGetKSP(self.tao, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -193099,7 +195359,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_120getKSP(struct PyPetscTAOObjec
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":563
+  /* "PETSc/TAO.pyx":542
  *                 toReal(xdiff), reason)
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -193119,7 +195379,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_120getKSP(struct PyPetscTAOObjec
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":574
+/* "PETSc/TAO.pyx":553
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193146,12 +195406,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6appctx___get__(struct PyPetscTA
   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);
 
-  /* "PETSc/TAO.pyx":575
+  /* "PETSc/TAO.pyx":554
  *     property appctx:
  *         def __get__(self):
  *             return self.getAppCtx()             # <<<<<<<<<<<<<<
@@ -193159,7 +195416,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6appctx___get__(struct PyPetscTA
  *             self.setAppCtx(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getAppCtx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getAppCtx); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -193172,10 +195429,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6appctx___get__(struct PyPetscTA
     }
   }
   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[38]; __pyx_lineno = 575; __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(38, 554, __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[38]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 554, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -193183,7 +195440,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6appctx___get__(struct PyPetscTA
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":574
+  /* "PETSc/TAO.pyx":553
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193204,7 +195461,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6appctx___get__(struct PyPetscTA
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":576
+/* "PETSc/TAO.pyx":555
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -193232,19 +195489,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_6appctx_2__set__(struct PyPetscTAOObje
   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);
 
-  /* "PETSc/TAO.pyx":577
+  /* "PETSc/TAO.pyx":556
  *             return self.getAppCtx()
  *         def __set__(self, value):
  *             self.setAppCtx(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- linear solver ---
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setAppCtx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setAppCtx); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 556, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -193257,23 +195511,23 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_6appctx_2__set__(struct PyPetscTAOObje
     }
   }
   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[38]; __pyx_lineno = 577; __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(38, 556, __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[38]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 556, __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[38]; __pyx_lineno = 577; __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(38, 556, __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;
 
-  /* "PETSc/TAO.pyx":576
+  /* "PETSc/TAO.pyx":555
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -193296,7 +195550,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_6appctx_2__set__(struct PyPetscTAOObje
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":582
+/* "PETSc/TAO.pyx":561
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193323,12 +195577,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3ksp___get__(struct PyPetscTAOOb
   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);
 
-  /* "PETSc/TAO.pyx":583
+  /* "PETSc/TAO.pyx":562
  *     property ksp:
  *         def __get__(self):
  *             return self.getKSP()             # <<<<<<<<<<<<<<
@@ -193336,7 +195587,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3ksp___get__(struct PyPetscTAOOb
  *     # --- tolerances ---
  */
   __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[38]; __pyx_lineno = 583; __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(38, 562, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -193349,10 +195600,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3ksp___get__(struct PyPetscTAOOb
     }
   }
   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[38]; __pyx_lineno = 583; __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(38, 562, __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[38]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 562, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -193360,7 +195611,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3ksp___get__(struct PyPetscTAOOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":582
+  /* "PETSc/TAO.pyx":561
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193381,7 +195632,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3ksp___get__(struct PyPetscTAOOb
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":588
+/* "PETSc/TAO.pyx":567
  * 
  *     property ftol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193408,12 +195659,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ftol___get__(struct PyPetscTAOO
   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);
 
-  /* "PETSc/TAO.pyx":589
+  /* "PETSc/TAO.pyx":568
  *     property ftol:
  *         def __get__(self):
  *             return self.getFunctionTolerances()             # <<<<<<<<<<<<<<
@@ -193421,7 +195669,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ftol___get__(struct PyPetscTAOO
  *             if isinstance(value, (tuple, list)):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getFunctionTolerances); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getFunctionTolerances); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 568, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -193434,10 +195682,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ftol___get__(struct PyPetscTAOO
     }
   }
   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[38]; __pyx_lineno = 589; __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(38, 568, __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[38]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 568, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -193445,7 +195693,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ftol___get__(struct PyPetscTAOO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":588
+  /* "PETSc/TAO.pyx":567
  * 
  *     property ftol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193466,7 +195714,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ftol___get__(struct PyPetscTAOO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":590
+/* "PETSc/TAO.pyx":569
  *         def __get__(self):
  *             return self.getFunctionTolerances()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -193496,12 +195744,9 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ftol_2__set__(struct PyPetscTAOObject
   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("__set__", 0);
 
-  /* "PETSc/TAO.pyx":591
+  /* "PETSc/TAO.pyx":570
  *             return self.getFunctionTolerances()
  *         def __set__(self, value):
  *             if isinstance(value, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -193522,26 +195767,34 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ftol_2__set__(struct PyPetscTAOObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TAO.pyx":592
+    /* "PETSc/TAO.pyx":571
  *         def __set__(self, value):
  *             if isinstance(value, (tuple, list)):
  *                 self.setFunctionTolerances(*value)             # <<<<<<<<<<<<<<
  *             elif isinstance(value, dict):
  *                 self.setFunctionTolerances(**value)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setFunctionTolerances); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setFunctionTolerances); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 571, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 571, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 571, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __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;
+
+    /* "PETSc/TAO.pyx":570
+ *             return self.getFunctionTolerances()
+ *         def __set__(self, value):
+ *             if isinstance(value, (tuple, list)):             # <<<<<<<<<<<<<<
+ *                 self.setFunctionTolerances(*value)
+ *             elif isinstance(value, dict):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/TAO.pyx":593
+  /* "PETSc/TAO.pyx":572
  *             if isinstance(value, (tuple, list)):
  *                 self.setFunctionTolerances(*value)
  *             elif isinstance(value, dict):             # <<<<<<<<<<<<<<
@@ -193552,51 +195805,59 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ftol_2__set__(struct PyPetscTAOObject
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TAO.pyx":594
+    /* "PETSc/TAO.pyx":573
  *                 self.setFunctionTolerances(*value)
  *             elif isinstance(value, dict):
  *                 self.setFunctionTolerances(**value)             # <<<<<<<<<<<<<<
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setFunctionTolerances); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setFunctionTolerances); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 573, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     if (unlikely(__pyx_v_value == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-      {__pyx_filename = __pyx_f[38]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(38, 573, __pyx_L1_error)
     }
-    if (likely(PyDict_Check(__pyx_v_value))) {
-      __pyx_t_5 = __pyx_v_value;
-      __Pyx_INCREF(__pyx_t_5);
+    if (likely(PyDict_CheckExact(__pyx_v_value))) {
+      __pyx_t_5 = PyDict_Copy(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 573, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_value, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_value, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 573, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     }
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 573, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+    /* "PETSc/TAO.pyx":572
+ *             if isinstance(value, (tuple, list)):
+ *                 self.setFunctionTolerances(*value)
+ *             elif isinstance(value, dict):             # <<<<<<<<<<<<<<
+ *                 self.setFunctionTolerances(**value)
+ *             else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/TAO.pyx":596
+  /* "PETSc/TAO.pyx":575
  *                 self.setFunctionTolerances(**value)
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")             # <<<<<<<<<<<<<<
  * 
  *     property gtol:
  */
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__57, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__60, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 575, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[38]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(38, 575, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":590
+  /* "PETSc/TAO.pyx":569
  *         def __get__(self):
  *             return self.getFunctionTolerances()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -193618,7 +195879,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ftol_2__set__(struct PyPetscTAOObject
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":599
+/* "PETSc/TAO.pyx":578
  * 
  *     property gtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193645,12 +195906,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4gtol___get__(struct PyPetscTAOO
   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);
 
-  /* "PETSc/TAO.pyx":600
+  /* "PETSc/TAO.pyx":579
  *     property gtol:
  *         def __get__(self):
  *             return self.getGradientTolerances()             # <<<<<<<<<<<<<<
@@ -193658,7 +195916,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4gtol___get__(struct PyPetscTAOO
  *             if isinstance(value, (tuple, list)):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradientTolerances); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradientTolerances); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 579, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -193671,10 +195929,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4gtol___get__(struct PyPetscTAOO
     }
   }
   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[38]; __pyx_lineno = 600; __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(38, 579, __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[38]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 579, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -193682,7 +195940,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4gtol___get__(struct PyPetscTAOO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":599
+  /* "PETSc/TAO.pyx":578
  * 
  *     property gtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193703,7 +195961,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4gtol___get__(struct PyPetscTAOO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":601
+/* "PETSc/TAO.pyx":580
  *         def __get__(self):
  *             return self.getGradientTolerances()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -193733,12 +195991,9 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4gtol_2__set__(struct PyPetscTAOObject
   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("__set__", 0);
 
-  /* "PETSc/TAO.pyx":602
+  /* "PETSc/TAO.pyx":581
  *             return self.getGradientTolerances()
  *         def __set__(self, value):
  *             if isinstance(value, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -193759,26 +196014,34 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4gtol_2__set__(struct PyPetscTAOObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TAO.pyx":603
+    /* "PETSc/TAO.pyx":582
  *         def __set__(self, value):
  *             if isinstance(value, (tuple, list)):
  *                 self.getGradientTolerances(*value)             # <<<<<<<<<<<<<<
  *             elif isinstance(value, dict):
  *                 self.getGradientTolerances(**value)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradientTolerances); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradientTolerances); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 582, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 582, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 582, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __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;
+
+    /* "PETSc/TAO.pyx":581
+ *             return self.getGradientTolerances()
+ *         def __set__(self, value):
+ *             if isinstance(value, (tuple, list)):             # <<<<<<<<<<<<<<
+ *                 self.getGradientTolerances(*value)
+ *             elif isinstance(value, dict):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/TAO.pyx":604
+  /* "PETSc/TAO.pyx":583
  *             if isinstance(value, (tuple, list)):
  *                 self.getGradientTolerances(*value)
  *             elif isinstance(value, dict):             # <<<<<<<<<<<<<<
@@ -193789,51 +196052,59 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4gtol_2__set__(struct PyPetscTAOObject
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TAO.pyx":605
+    /* "PETSc/TAO.pyx":584
  *                 self.getGradientTolerances(*value)
  *             elif isinstance(value, dict):
  *                 self.getGradientTolerances(**value)             # <<<<<<<<<<<<<<
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradientTolerances); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradientTolerances); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 584, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     if (unlikely(__pyx_v_value == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-      {__pyx_filename = __pyx_f[38]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(38, 584, __pyx_L1_error)
     }
-    if (likely(PyDict_Check(__pyx_v_value))) {
-      __pyx_t_5 = __pyx_v_value;
-      __Pyx_INCREF(__pyx_t_5);
+    if (likely(PyDict_CheckExact(__pyx_v_value))) {
+      __pyx_t_5 = PyDict_Copy(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 584, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_value, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_value, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 584, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     }
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 584, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+    /* "PETSc/TAO.pyx":583
+ *             if isinstance(value, (tuple, list)):
+ *                 self.getGradientTolerances(*value)
+ *             elif isinstance(value, dict):             # <<<<<<<<<<<<<<
+ *                 self.getGradientTolerances(**value)
+ *             else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/TAO.pyx":607
+  /* "PETSc/TAO.pyx":586
  *                 self.getGradientTolerances(**value)
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")             # <<<<<<<<<<<<<<
  * 
  *     property ctol:
  */
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__61, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 586, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[38]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(38, 586, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":601
+  /* "PETSc/TAO.pyx":580
  *         def __get__(self):
  *             return self.getGradientTolerances()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -193855,7 +196126,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4gtol_2__set__(struct PyPetscTAOObject
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":610
+/* "PETSc/TAO.pyx":589
  * 
  *     property ctol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193882,12 +196153,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ctol___get__(struct PyPetscTAOO
   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);
 
-  /* "PETSc/TAO.pyx":611
+  /* "PETSc/TAO.pyx":590
  *     property ctol:
  *         def __get__(self):
  *             return self.getConstraintTolerances()             # <<<<<<<<<<<<<<
@@ -193895,7 +196163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ctol___get__(struct PyPetscTAOO
  *             if isinstance(value, (tuple, list)):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConstraintTolerances); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConstraintTolerances); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -193908,10 +196176,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ctol___get__(struct PyPetscTAOO
     }
   }
   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[38]; __pyx_lineno = 611; __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(38, 590, __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[38]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 590, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -193919,7 +196187,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ctol___get__(struct PyPetscTAOO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":610
+  /* "PETSc/TAO.pyx":589
  * 
  *     property ctol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -193940,7 +196208,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ctol___get__(struct PyPetscTAOO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":612
+/* "PETSc/TAO.pyx":591
  *         def __get__(self):
  *             return self.getConstraintTolerances()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -193970,12 +196238,9 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ctol_2__set__(struct PyPetscTAOObject
   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("__set__", 0);
 
-  /* "PETSc/TAO.pyx":613
+  /* "PETSc/TAO.pyx":592
  *             return self.getConstraintTolerances()
  *         def __set__(self, value):
  *             if isinstance(value, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -193996,26 +196261,34 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ctol_2__set__(struct PyPetscTAOObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TAO.pyx":614
+    /* "PETSc/TAO.pyx":593
  *         def __set__(self, value):
  *             if isinstance(value, (tuple, list)):
  *                 self.getConstraintTolerances(*value)             # <<<<<<<<<<<<<<
  *             elif isinstance(value, dict):
  *                 self.getConstraintTolerances(**value)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConstraintTolerances); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConstraintTolerances); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 593, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 593, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 593, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __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;
+
+    /* "PETSc/TAO.pyx":592
+ *             return self.getConstraintTolerances()
+ *         def __set__(self, value):
+ *             if isinstance(value, (tuple, list)):             # <<<<<<<<<<<<<<
+ *                 self.getConstraintTolerances(*value)
+ *             elif isinstance(value, dict):
+ */
     goto __pyx_L3;
   }
 
-  /* "PETSc/TAO.pyx":615
+  /* "PETSc/TAO.pyx":594
  *             if isinstance(value, (tuple, list)):
  *                 self.getConstraintTolerances(*value)
  *             elif isinstance(value, dict):             # <<<<<<<<<<<<<<
@@ -194026,51 +196299,59 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ctol_2__set__(struct PyPetscTAOObject
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TAO.pyx":616
+    /* "PETSc/TAO.pyx":595
  *                 self.getConstraintTolerances(*value)
  *             elif isinstance(value, dict):
  *                 self.getConstraintTolerances(**value)             # <<<<<<<<<<<<<<
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConstraintTolerances); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConstraintTolerances); if (unlikely(!__pyx_t_6)) __PYX_ERR(38, 595, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     if (unlikely(__pyx_v_value == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-      {__pyx_filename = __pyx_f[38]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(38, 595, __pyx_L1_error)
     }
-    if (likely(PyDict_Check(__pyx_v_value))) {
-      __pyx_t_5 = __pyx_v_value;
-      __Pyx_INCREF(__pyx_t_5);
+    if (likely(PyDict_CheckExact(__pyx_v_value))) {
+      __pyx_t_5 = PyDict_Copy(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 595, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_value, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_value, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(38, 595, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     }
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 595, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+    /* "PETSc/TAO.pyx":594
+ *             if isinstance(value, (tuple, list)):
+ *                 self.getConstraintTolerances(*value)
+ *             elif isinstance(value, dict):             # <<<<<<<<<<<<<<
+ *                 self.getConstraintTolerances(**value)
+ *             else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/TAO.pyx":618
+  /* "PETSc/TAO.pyx":597
  *                 self.getConstraintTolerances(**value)
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")             # <<<<<<<<<<<<<<
  * 
  *     # --- iteration ---
  */
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__59, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__62, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(38, 597, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[38]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(38, 597, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/TAO.pyx":612
+  /* "PETSc/TAO.pyx":591
  *         def __get__(self):
  *             return self.getConstraintTolerances()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -194092,7 +196373,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ctol_2__set__(struct PyPetscTAOObject
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":623
+/* "PETSc/TAO.pyx":602
  * 
  *     property its:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -194119,12 +196400,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3its___get__(struct PyPetscTAOOb
   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);
 
-  /* "PETSc/TAO.pyx":624
+  /* "PETSc/TAO.pyx":603
  *     property its:
  *         def __get__(self):
  *             return self.getIterationNumber()             # <<<<<<<<<<<<<<
@@ -194132,7 +196410,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3its___get__(struct PyPetscTAOOb
  *     property gnorm:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIterationNumber); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getIterationNumber); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 603, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -194145,10 +196423,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3its___get__(struct PyPetscTAOOb
     }
   }
   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[38]; __pyx_lineno = 624; __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(38, 603, __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[38]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 603, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -194156,7 +196434,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3its___get__(struct PyPetscTAOOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":623
+  /* "PETSc/TAO.pyx":602
  * 
  *     property its:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -194177,11 +196455,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3its___get__(struct PyPetscTAOOb
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":627
+/* "PETSc/TAO.pyx":606
  * 
  *     property gnorm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getGradientNorm()
+ *             return self.getSolutionNorm()[1]
  * 
  */
 
@@ -194198,63 +196476,942 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5gnorm_1__get__(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5gnorm___get__(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5gnorm___get__(struct PyPetscTAOObject *__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);
+
+  /* "PETSc/TAO.pyx":607
+ *     property gnorm:
+ *         def __get__(self):
+ *             return self.getSolutionNorm()[1]             # <<<<<<<<<<<<<<
+ * 
+ *     property cnorm:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolutionNorm); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 607, __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(38, 607, __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(38, 607, __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(38, 607, __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;
+
+  /* "PETSc/TAO.pyx":606
+ * 
+ *     property gnorm:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getSolutionNorm()[1]
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.gnorm.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":610
+ * 
+ *     property cnorm:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getSolutionNorm()[2]
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5cnorm_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5cnorm_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_5cnorm___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5cnorm___get__(struct PyPetscTAOObject *__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);
+
+  /* "PETSc/TAO.pyx":611
+ *     property cnorm:
+ *         def __get__(self):
+ *             return self.getSolutionNorm()[2]             # <<<<<<<<<<<<<<
+ * 
+ *     property solution:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolutionNorm); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 611, __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(38, 611, __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(38, 611, __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, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 611, __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;
+
+  /* "PETSc/TAO.pyx":610
+ * 
+ *     property cnorm:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getSolutionNorm()[2]
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.cnorm.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":614
+ * 
+ *     property solution:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getSolution()
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8solution_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8solution_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8solution___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8solution___get__(struct PyPetscTAOObject *__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);
+
+  /* "PETSc/TAO.pyx":615
+ *     property solution:
+ *         def __get__(self):
+ *             return self.getSolution()             # <<<<<<<<<<<<<<
+ * 
+ *     property objective:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolution); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 615, __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(38, 615, __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(38, 615, __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;
+
+  /* "PETSc/TAO.pyx":614
+ * 
+ *     property solution:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getSolution()
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.solution.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":618
+ * 
+ *     property objective:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getObjectiveValue()
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9objective_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9objective_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_9objective___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9objective___get__(struct PyPetscTAOObject *__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);
+
+  /* "PETSc/TAO.pyx":619
+ *     property objective:
+ *         def __get__(self):
+ *             return self.getObjectiveValue()             # <<<<<<<<<<<<<<
+ * 
+ *     property function:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getObjectiveValue); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 619, __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(38, 619, __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(38, 619, __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;
+
+  /* "PETSc/TAO.pyx":618
+ * 
+ *     property objective:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getObjectiveValue()
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.objective.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":622
+ * 
+ *     property function:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getFunctionValue()
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8function_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8function_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8function___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8function___get__(struct PyPetscTAOObject *__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);
+
+  /* "PETSc/TAO.pyx":623
+ *     property function:
+ *         def __get__(self):
+ *             return self.getFunctionValue()             # <<<<<<<<<<<<<<
+ * 
+ *     property gradient:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getFunctionValue); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 623, __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(38, 623, __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(38, 623, __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;
+
+  /* "PETSc/TAO.pyx":622
+ * 
+ *     property function:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getFunctionValue()
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.function.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":626
+ * 
+ *     property gradient:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getGradient()
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8gradient_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8gradient_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8gradient___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8gradient___get__(struct PyPetscTAOObject *__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);
+
+  /* "PETSc/TAO.pyx":627
+ *     property gradient:
+ *         def __get__(self):
+ *             return self.getGradient()             # <<<<<<<<<<<<<<
+ * 
+ *     # --- convergence ---
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradient); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 627, __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(38, 627, __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(38, 627, __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;
+
+  /* "PETSc/TAO.pyx":626
+ * 
+ *     property gradient:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getGradient()
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.gradient.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":632
+ * 
+ *     property reason:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getConvergedReason()
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_6reason_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_6reason_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_6reason___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6reason___get__(struct PyPetscTAOObject *__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);
+
+  /* "PETSc/TAO.pyx":633
+ *     property reason:
+ *         def __get__(self):
+ *             return self.getConvergedReason()             # <<<<<<<<<<<<<<
+ * 
+ *     property iterating:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 633, __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(38, 633, __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(38, 633, __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;
+
+  /* "PETSc/TAO.pyx":632
+ * 
+ *     property reason:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getConvergedReason()
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.reason.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":636
+ * 
+ *     property iterating:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.reason == 0
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9iterating_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9iterating_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_9iterating___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9iterating___get__(struct PyPetscTAOObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "PETSc/TAO.pyx":637
+ *     property iterating:
+ *         def __get__(self):
+ *             return self.reason == 0             # <<<<<<<<<<<<<<
+ * 
+ *     property converged:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 637, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 637, __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;
+
+  /* "PETSc/TAO.pyx":636
+ * 
+ *     property iterating:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.reason == 0
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.iterating.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":640
+ * 
+ *     property converged:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.reason > 0
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9converged_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9converged_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_9converged___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9converged___get__(struct PyPetscTAOObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "PETSc/TAO.pyx":641
+ *     property converged:
+ *         def __get__(self):
+ *             return self.reason > 0             # <<<<<<<<<<<<<<
+ * 
+ *     property diverged:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 641, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 641, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TAO.pyx":640
+ * 
+ *     property converged:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.reason > 0
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.converged.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TAO.pyx":644
+ * 
+ *     property diverged:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.reason < 0
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8diverged_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8diverged_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8diverged___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8diverged___get__(struct PyPetscTAOObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "PETSc/TAO.pyx":645
+ *     property diverged:
+ *         def __get__(self):
+ *             return self.reason < 0             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 645, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 645, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TAO.pyx":644
+ * 
+ *     property diverged:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.reason < 0
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TAO.diverged.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/AO.pyx":15
+ *     Type = AOType
+ * 
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.ao
+ *         self.ao = NULL
+ */
+
+/* Python wrapper */
+static int __pyx_pw_8petsc4py_5PETSc_2AO_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8petsc4py_5PETSc_2AO_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_8petsc4py_5PETSc_2AO___cinit__(((struct PyPetscAOObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_8petsc4py_5PETSc_2AO___cinit__(struct PyPetscAOObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__", 0);
+
+  /* "PETSc/AO.pyx":16
+ * 
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.ao             # <<<<<<<<<<<<<<
+ *         self.ao = NULL
+ * 
+ */
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->ao));
+
+  /* "PETSc/AO.pyx":17
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.ao
+ *         self.ao = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     def view(self, Viewer viewer=None):
+ */
+  __pyx_v_self->ao = NULL;
+
+  /* "PETSc/AO.pyx":15
+ *     Type = AOType
+ * 
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.ao
+ *         self.ao = NULL
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/AO.pyx":19
+ *         self.ao = NULL
+ * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer cviewer = NULL
+ *         if viewer is not None: cviewer = viewer.vwr
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2AO_2view[] = "AO.view(self, Viewer viewer=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_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("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(39, 19, __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(39, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.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(39, 19, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_2view(((struct PyPetscAOObject *)__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_8petsc4py_5PETSc_2AO_2view(struct PyPetscAOObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_cviewer;
   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;
+  PetscViewer __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/TAO.pyx":628
- *     property gnorm:
- *         def __get__(self):
- *             return self.getGradientNorm()             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":20
  * 
- *     property cnorm:
+ *     def view(self, Viewer viewer=None):
+ *         cdef PetscViewer cviewer = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: cviewer = viewer.vwr
+ *         CHKERR( AOView(self.ao, cviewer) )
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradientNorm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 628; __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[38]; __pyx_lineno = 628; __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[38]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_cviewer = NULL;
+
+  /* "PETSc/AO.pyx":21
+ *     def view(self, Viewer viewer=None):
+ *         cdef PetscViewer cviewer = NULL
+ *         if viewer is not None: cviewer = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( AOView(self.ao, cviewer) )
+ * 
+ */
+  __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_cviewer = __pyx_t_3;
   }
-  __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;
 
-  /* "PETSc/TAO.pyx":627
+  /* "PETSc/AO.pyx":22
+ *         cdef PetscViewer cviewer = NULL
+ *         if viewer is not None: cviewer = viewer.vwr
+ *         CHKERR( AOView(self.ao, cviewer) )             # <<<<<<<<<<<<<<
  * 
- *     property gnorm:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getGradientNorm()
+ *     def destroy(self):
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOView(__pyx_v_self->ao, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(39, 22, __pyx_L1_error)
+
+  /* "PETSc/AO.pyx":19
+ *         self.ao = NULL
  * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer cviewer = NULL
+ *         if viewer is not None: cviewer = viewer.vwr
  */
 
   /* 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("petsc4py.PETSc.TAO.gnorm.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -194262,84 +197419,69 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5gnorm___get__(struct PyPetscTAO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":631
- * 
- *     property cnorm:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getConstraintNorm()
+/* "PETSc/AO.pyx":24
+ *         CHKERR( AOView(self.ao, cviewer) )
  * 
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( AODestroy(&self.ao) )
+ *         return self
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5cnorm_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_5cnorm_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2AO_4destroy[] = "AO.destroy(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_5destroy(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_8petsc4py_5PETSc_3TAO_5cnorm___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+  __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_8petsc4py_5PETSc_2AO_4destroy(((struct PyPetscAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5cnorm___get__(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_4destroy(struct PyPetscAOObject *__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("destroy", 0);
 
-  /* "PETSc/TAO.pyx":632
- *     property cnorm:
- *         def __get__(self):
- *             return self.getConstraintNorm()             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":25
  * 
- *     property solution:
+ *     def destroy(self):
+ *         CHKERR( AODestroy(&self.ao) )             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(AODestroy((&__pyx_v_self->ao))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(39, 25, __pyx_L1_error)
+
+  /* "PETSc/AO.pyx":26
+ *     def destroy(self):
+ *         CHKERR( AODestroy(&self.ao) )
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def createBasic(self, app, petsc=None, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConstraintNorm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 632; __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[38]; __pyx_lineno = 632; __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[38]; __pyx_lineno = 632; __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_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":631
- * 
- *     property cnorm:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getConstraintNorm()
+  /* "PETSc/AO.pyx":24
+ *         CHKERR( AOView(self.ao, cviewer) )
  * 
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( AODestroy(&self.ao) )
+ *         return self
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.cnorm.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -194347,558 +197489,1091 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5cnorm___get__(struct PyPetscTAO
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":635
- * 
- *     property solution:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getSolution()
+/* "PETSc/AO.pyx":28
+ *         return self
  * 
+ *     def createBasic(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8solution_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8solution_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_7createBasic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2AO_6createBasic[] = "AO.createBasic(self, app, petsc=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_7createBasic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_app = 0;
+  PyObject *__pyx_v_petsc = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8solution___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("createBasic (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_app,&__pyx_n_s_petsc,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    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 (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_app)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBasic") < 0)) __PYX_ERR(39, 28, __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_app = values[0];
+    __pyx_v_petsc = values[1];
+    __pyx_v_comm = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("createBasic", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(39, 28, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.createBasic", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_6createBasic(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_app, __pyx_v_petsc, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8solution___get__(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_6createBasic(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm) {
+  IS __pyx_v_isapp;
+  IS __pyx_v_ispetsc;
+  PetscInt __pyx_v_napp;
+  PetscInt *__pyx_v_idxapp;
+  PetscInt __pyx_v_npetsc;
+  PetscInt *__pyx_v_idxpetsc;
+  MPI_Comm __pyx_v_ccomm;
+  AO __pyx_v_newao;
   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);
+  MPI_Comm __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  IS __pyx_t_4;
+  int __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("createBasic", 0);
+  __Pyx_INCREF(__pyx_v_app);
+  __Pyx_INCREF(__pyx_v_petsc);
 
-  /* "PETSc/TAO.pyx":636
- *     property solution:
- *         def __get__(self):
- *             return self.getSolution()             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":29
  * 
- *     property objective:
+ *     def createBasic(self, app, petsc=None, comm=None):
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ */
+  __pyx_v_isapp = NULL;
+  __pyx_v_ispetsc = NULL;
+
+  /* "PETSc/AO.pyx":30
+ *     def createBasic(self, app, petsc=None, comm=None):
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,             # <<<<<<<<<<<<<<
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ */
+  __pyx_v_napp = 0;
+  __pyx_v_idxapp = NULL;
+
+  /* "PETSc/AO.pyx":31
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ */
+  __pyx_v_npetsc = 0;
+  __pyx_v_idxpetsc = NULL;
+
+  /* "PETSc/AO.pyx":32
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(39, 32, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
+
+  /* "PETSc/AO.pyx":33
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL             # <<<<<<<<<<<<<<
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ */
+  __pyx_v_newao = NULL;
+
+  /* "PETSc/AO.pyx":34
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ */
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_app, __pyx_ptype_8petsc4py_5PETSc_IS); 
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+
+    /* "PETSc/AO.pyx":35
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset             # <<<<<<<<<<<<<<
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset
+ */
+    __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_app)->iset;
+    __pyx_v_isapp = __pyx_t_4;
+
+    /* "PETSc/AO.pyx":36
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )
+ */
+    __pyx_t_3 = (__pyx_v_petsc != Py_None);
+    __pyx_t_2 = (__pyx_t_3 != 0);
+    if (__pyx_t_2) {
+
+      /* "PETSc/AO.pyx":37
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset             # <<<<<<<<<<<<<<
+ *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )
+ *         else:
+ */
+      if (!(likely(__Pyx_TypeTest(__pyx_v_petsc, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(39, 37, __pyx_L1_error)
+      __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_petsc)->iset;
+      __pyx_v_ispetsc = __pyx_t_4;
+
+      /* "PETSc/AO.pyx":36
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSolution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 636; __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);
     }
+
+    /* "PETSc/AO.pyx":38
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
+ */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateBasicIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(39, 38, __pyx_L1_error)
+
+    /* "PETSc/AO.pyx":34
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ */
+    goto __pyx_L3;
   }
-  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[38]; __pyx_lineno = 636; __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[38]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "PETSc/AO.pyx":40
+ *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)             # <<<<<<<<<<<<<<
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ */
+  /*else*/ {
+    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_app, (&__pyx_v_napp), (&__pyx_v_idxapp))); if (unlikely(!__pyx_t_6)) __PYX_ERR(39, 40, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF_SET(__pyx_v_app, __pyx_t_6);
+    __pyx_t_6 = 0;
+
+    /* "PETSc/AO.pyx":41
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
+ */
+    __pyx_t_2 = (__pyx_v_petsc != Py_None);
+    __pyx_t_3 = (__pyx_t_2 != 0);
+    if (__pyx_t_3) {
+
+      /* "PETSc/AO.pyx":42
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)             # <<<<<<<<<<<<<<
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )
+ */
+      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_petsc, (&__pyx_v_npetsc), (&__pyx_v_idxpetsc))); if (unlikely(!__pyx_t_6)) __PYX_ERR(39, 42, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF_SET(__pyx_v_petsc, __pyx_t_6);
+      __pyx_t_6 = 0;
+
+      /* "PETSc/AO.pyx":43
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"             # <<<<<<<<<<<<<<
+ *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao
+ */
+      #ifndef CYTHON_WITHOUT_ASSERTIONS
+      if (unlikely(!Py_OptimizeFlag)) {
+        if (unlikely(!((__pyx_v_napp == __pyx_v_npetsc) != 0))) {
+          PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_incompatible_array_sizes);
+          __PYX_ERR(39, 43, __pyx_L1_error)
+        }
+      }
+      #endif
+
+      /* "PETSc/AO.pyx":41
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
+ */
+    }
+
+    /* "PETSc/AO.pyx":44
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.ao = newao
+ *         return self
+ */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateBasic(__pyx_v_ccomm, __pyx_v_napp, __pyx_v_idxapp, __pyx_v_idxpetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(39, 44, __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_L3:;
 
-  /* "PETSc/TAO.pyx":635
+  /* "PETSc/AO.pyx":45
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao             # <<<<<<<<<<<<<<
+ *         return self
  * 
- *     property solution:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getSolution()
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->ao = __pyx_v_newao;
+
+  /* "PETSc/AO.pyx":46
+ *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def createMemoryScalable(self, app, petsc=None, comm=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
+
+  /* "PETSc/AO.pyx":28
+ *         return self
  * 
+ *     def createBasic(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.solution.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.createBasic", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_app);
+  __Pyx_XDECREF(__pyx_v_petsc);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":639
- * 
- *     property objective:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getObjectiveValue()
+/* "PETSc/AO.pyx":48
+ *         return self
  * 
+ *     def createMemoryScalable(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9objective_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9objective_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_9createMemoryScalable(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2AO_8createMemoryScalable[] = "AO.createMemoryScalable(self, app, petsc=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_9createMemoryScalable(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_app = 0;
+  PyObject *__pyx_v_petsc = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_9objective___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("createMemoryScalable (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_app,&__pyx_n_s_petsc,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    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 (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_app)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMemoryScalable") < 0)) __PYX_ERR(39, 48, __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_app = values[0];
+    __pyx_v_petsc = values[1];
+    __pyx_v_comm = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("createMemoryScalable", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(39, 48, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.createMemoryScalable", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_8createMemoryScalable(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_app, __pyx_v_petsc, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9objective___get__(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_8createMemoryScalable(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm) {
+  IS __pyx_v_isapp;
+  IS __pyx_v_ispetsc;
+  PetscInt __pyx_v_napp;
+  PetscInt *__pyx_v_idxapp;
+  PetscInt __pyx_v_npetsc;
+  PetscInt *__pyx_v_idxpetsc;
+  MPI_Comm __pyx_v_ccomm;
+  AO __pyx_v_newao;
   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);
+  MPI_Comm __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  IS __pyx_t_4;
+  int __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("createMemoryScalable", 0);
+  __Pyx_INCREF(__pyx_v_app);
+  __Pyx_INCREF(__pyx_v_petsc);
 
-  /* "PETSc/TAO.pyx":640
- *     property objective:
- *         def __get__(self):
- *             return self.getObjectiveValue()             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":49
  * 
- *     property function:
+ *     def createMemoryScalable(self, app, petsc=None, comm=None):
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ */
+  __pyx_v_isapp = NULL;
+  __pyx_v_ispetsc = NULL;
+
+  /* "PETSc/AO.pyx":50
+ *     def createMemoryScalable(self, app, petsc=None, comm=None):
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,             # <<<<<<<<<<<<<<
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ */
+  __pyx_v_napp = 0;
+  __pyx_v_idxapp = NULL;
+
+  /* "PETSc/AO.pyx":51
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ */
+  __pyx_v_npetsc = 0;
+  __pyx_v_idxpetsc = NULL;
+
+  /* "PETSc/AO.pyx":52
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(39, 52, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
+
+  /* "PETSc/AO.pyx":53
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL             # <<<<<<<<<<<<<<
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ */
+  __pyx_v_newao = NULL;
+
+  /* "PETSc/AO.pyx":54
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ */
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_app, __pyx_ptype_8petsc4py_5PETSc_IS); 
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+
+    /* "PETSc/AO.pyx":55
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset             # <<<<<<<<<<<<<<
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset
+ */
+    __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_app)->iset;
+    __pyx_v_isapp = __pyx_t_4;
+
+    /* "PETSc/AO.pyx":56
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )
+ */
+    __pyx_t_3 = (__pyx_v_petsc != Py_None);
+    __pyx_t_2 = (__pyx_t_3 != 0);
+    if (__pyx_t_2) {
+
+      /* "PETSc/AO.pyx":57
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset             # <<<<<<<<<<<<<<
+ *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )
+ *         else:
+ */
+      if (!(likely(__Pyx_TypeTest(__pyx_v_petsc, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(39, 57, __pyx_L1_error)
+      __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_petsc)->iset;
+      __pyx_v_ispetsc = __pyx_t_4;
+
+      /* "PETSc/AO.pyx":56
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getObjectiveValue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 640; __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);
     }
+
+    /* "PETSc/AO.pyx":58
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
+ */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMemoryScalableIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(39, 58, __pyx_L1_error)
+
+    /* "PETSc/AO.pyx":54
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ */
+    goto __pyx_L3;
   }
-  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[38]; __pyx_lineno = 640; __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[38]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "PETSc/AO.pyx":60
+ *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)             # <<<<<<<<<<<<<<
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ */
+  /*else*/ {
+    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_app, (&__pyx_v_napp), (&__pyx_v_idxapp))); if (unlikely(!__pyx_t_6)) __PYX_ERR(39, 60, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF_SET(__pyx_v_app, __pyx_t_6);
+    __pyx_t_6 = 0;
+
+    /* "PETSc/AO.pyx":61
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
+ */
+    __pyx_t_2 = (__pyx_v_petsc != Py_None);
+    __pyx_t_3 = (__pyx_t_2 != 0);
+    if (__pyx_t_3) {
+
+      /* "PETSc/AO.pyx":62
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)             # <<<<<<<<<<<<<<
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )
+ */
+      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_petsc, (&__pyx_v_npetsc), (&__pyx_v_idxpetsc))); if (unlikely(!__pyx_t_6)) __PYX_ERR(39, 62, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF_SET(__pyx_v_petsc, __pyx_t_6);
+      __pyx_t_6 = 0;
+
+      /* "PETSc/AO.pyx":63
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"             # <<<<<<<<<<<<<<
+ *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao
+ */
+      #ifndef CYTHON_WITHOUT_ASSERTIONS
+      if (unlikely(!Py_OptimizeFlag)) {
+        if (unlikely(!((__pyx_v_napp == __pyx_v_npetsc) != 0))) {
+          PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_incompatible_array_sizes);
+          __PYX_ERR(39, 63, __pyx_L1_error)
+        }
+      }
+      #endif
+
+      /* "PETSc/AO.pyx":61
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
+ */
+    }
+
+    /* "PETSc/AO.pyx":64
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.ao = newao
+ *         return self
+ */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMemoryScalable(__pyx_v_ccomm, __pyx_v_napp, __pyx_v_idxapp, __pyx_v_idxpetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(39, 64, __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_L3:;
 
-  /* "PETSc/TAO.pyx":639
+  /* "PETSc/AO.pyx":65
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao             # <<<<<<<<<<<<<<
+ *         return self
  * 
- *     property objective:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getObjectiveValue()
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->ao = __pyx_v_newao;
+
+  /* "PETSc/AO.pyx":66
+ *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def createMapping(self, app, petsc=None, comm=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
+
+  /* "PETSc/AO.pyx":48
+ *         return self
  * 
+ *     def createMemoryScalable(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.objective.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.createMemoryScalable", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_app);
+  __Pyx_XDECREF(__pyx_v_petsc);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":643
- * 
- *     property function:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getFunctionValue()
+/* "PETSc/AO.pyx":68
+ *         return self
  * 
+ *     def createMapping(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8function_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8function_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_11createMapping(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2AO_10createMapping[] = "AO.createMapping(self, app, petsc=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_11createMapping(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_app = 0;
+  PyObject *__pyx_v_petsc = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8function___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("createMapping (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_app,&__pyx_n_s_petsc,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    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 (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_app)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMapping") < 0)) __PYX_ERR(39, 68, __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_app = values[0];
+    __pyx_v_petsc = values[1];
+    __pyx_v_comm = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("createMapping", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(39, 68, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.createMapping", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_10createMapping(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_app, __pyx_v_petsc, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8function___get__(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_10createMapping(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm) {
+  IS __pyx_v_isapp;
+  IS __pyx_v_ispetsc;
+  PetscInt __pyx_v_napp;
+  PetscInt *__pyx_v_idxapp;
+  PetscInt __pyx_v_npetsc;
+  PetscInt *__pyx_v_idxpetsc;
+  MPI_Comm __pyx_v_ccomm;
+  AO __pyx_v_newao;
   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);
+  MPI_Comm __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  IS __pyx_t_4;
+  int __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("createMapping", 0);
+  __Pyx_INCREF(__pyx_v_app);
+  __Pyx_INCREF(__pyx_v_petsc);
+
+  /* "PETSc/AO.pyx":69
+ * 
+ *     def createMapping(self, app, petsc=None, comm=None):
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ */
+  __pyx_v_isapp = NULL;
+  __pyx_v_ispetsc = NULL;
+
+  /* "PETSc/AO.pyx":70
+ *     def createMapping(self, app, petsc=None, comm=None):
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,             # <<<<<<<<<<<<<<
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ */
+  __pyx_v_napp = 0;
+  __pyx_v_idxapp = NULL;
+
+  /* "PETSc/AO.pyx":71
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ */
+  __pyx_v_npetsc = 0;
+  __pyx_v_idxpetsc = NULL;
+
+  /* "PETSc/AO.pyx":72
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(39, 72, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
+
+  /* "PETSc/AO.pyx":73
+ *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL             # <<<<<<<<<<<<<<
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ */
+  __pyx_v_newao = NULL;
+
+  /* "PETSc/AO.pyx":74
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ */
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_app, __pyx_ptype_8petsc4py_5PETSc_IS); 
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+
+    /* "PETSc/AO.pyx":75
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset             # <<<<<<<<<<<<<<
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset
+ */
+    __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_app)->iset;
+    __pyx_v_isapp = __pyx_t_4;
+
+    /* "PETSc/AO.pyx":76
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )
+ */
+    __pyx_t_3 = (__pyx_v_petsc != Py_None);
+    __pyx_t_2 = (__pyx_t_3 != 0);
+    if (__pyx_t_2) {
+
+      /* "PETSc/AO.pyx":77
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset             # <<<<<<<<<<<<<<
+ *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )
+ *         else:
+ */
+      if (!(likely(__Pyx_TypeTest(__pyx_v_petsc, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(39, 77, __pyx_L1_error)
+      __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_petsc)->iset;
+      __pyx_v_ispetsc = __pyx_t_4;
 
-  /* "PETSc/TAO.pyx":644
- *     property function:
- *         def __get__(self):
- *             return self.getFunctionValue()             # <<<<<<<<<<<<<<
- * 
- *     property gradient:
+      /* "PETSc/AO.pyx":76
+ *         if isinstance(app, IS):
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getFunctionValue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 644; __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[38]; __pyx_lineno = 644; __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[38]; __pyx_lineno = 644; __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;
 
-  /* "PETSc/TAO.pyx":643
- * 
- *     property function:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getFunctionValue()
- * 
+    /* "PETSc/AO.pyx":78
+ *             if petsc is not None:
+ *                 ispetsc = (<IS?>petsc).iset
+ *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
  */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMappingIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(39, 78, __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("petsc4py.PETSc.TAO.function.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "PETSc/AO.pyx":74
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscAO newao = NULL
+ *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
+ *             isapp = (<IS>app).iset
+ *             if petsc is not None:
+ */
+    goto __pyx_L3;
+  }
 
-/* "PETSc/TAO.pyx":647
- * 
- *     property gradient:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getGradient()
- * 
+  /* "PETSc/AO.pyx":80
+ *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)             # <<<<<<<<<<<<<<
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
  */
+  /*else*/ {
+    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_app, (&__pyx_v_napp), (&__pyx_v_idxapp))); if (unlikely(!__pyx_t_6)) __PYX_ERR(39, 80, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF_SET(__pyx_v_app, __pyx_t_6);
+    __pyx_t_6 = 0;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8gradient_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8gradient_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8gradient___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+    /* "PETSc/AO.pyx":81
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
+ */
+    __pyx_t_2 = (__pyx_v_petsc != Py_None);
+    __pyx_t_3 = (__pyx_t_2 != 0);
+    if (__pyx_t_3) {
 
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "PETSc/AO.pyx":82
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)             # <<<<<<<<<<<<<<
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )
+ */
+      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_petsc, (&__pyx_v_npetsc), (&__pyx_v_idxpetsc))); if (unlikely(!__pyx_t_6)) __PYX_ERR(39, 82, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF_SET(__pyx_v_petsc, __pyx_t_6);
+      __pyx_t_6 = 0;
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8gradient___get__(struct PyPetscTAOObject *__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);
+      /* "PETSc/AO.pyx":83
+ *             if petsc is not None:
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"             # <<<<<<<<<<<<<<
+ *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao
+ */
+      #ifndef CYTHON_WITHOUT_ASSERTIONS
+      if (unlikely(!Py_OptimizeFlag)) {
+        if (unlikely(!((__pyx_v_napp == __pyx_v_npetsc) != 0))) {
+          PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_incompatible_array_sizes);
+          __PYX_ERR(39, 83, __pyx_L1_error)
+        }
+      }
+      #endif
 
-  /* "PETSc/TAO.pyx":648
- *     property gradient:
- *         def __get__(self):
- *             return self.getGradient()             # <<<<<<<<<<<<<<
- * 
- *     # --- convergence ---
+      /* "PETSc/AO.pyx":81
+ *         else:
+ *             app = iarray_i(app, &napp, &idxapp)
+ *             if petsc is not None:             # <<<<<<<<<<<<<<
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGradient); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 648; __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[38]; __pyx_lineno = 648; __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[38]; __pyx_lineno = 648; __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;
 
-  /* "PETSc/TAO.pyx":647
- * 
- *     property gradient:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getGradient()
- * 
+    /* "PETSc/AO.pyx":84
+ *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.ao = newao
+ *         return self
  */
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMapping(__pyx_v_ccomm, __pyx_v_napp, __pyx_v_idxapp, __pyx_v_idxpetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(39, 84, __pyx_L1_error)
+  }
+  __pyx_L3:;
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.gradient.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TAO.pyx":653
- * 
- *     property reason:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getConvergedReason()
+  /* "PETSc/AO.pyx":85
+ *                 assert napp == npetsc, "incompatible array sizes"
+ *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->ao = __pyx_v_newao;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_6reason_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_6reason_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_6reason___get__(((struct PyPetscTAOObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6reason___get__(struct PyPetscTAOObject *__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);
-
-  /* "PETSc/TAO.pyx":654
- *     property reason:
- *         def __get__(self):
- *             return self.getConvergedReason()             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":86
+ *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )
+ *         PetscCLEAR(self.obj); self.ao = newao
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     property iterating:
+ *     def getType(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 654; __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[38]; __pyx_lineno = 654; __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[38]; __pyx_lineno = 654; __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_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":653
- * 
- *     property reason:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getConvergedReason()
+  /* "PETSc/AO.pyx":68
+ *         return self
  * 
+ *     def createMapping(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS isapp = NULL, ispetsc = NULL
+ *         cdef PetscInt napp = 0, *idxapp = NULL,
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.reason.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.createMapping", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_app);
+  __Pyx_XDECREF(__pyx_v_petsc);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":657
- * 
- *     property iterating:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.reason == 0
+/* "PETSc/AO.pyx":88
+ *         return self
  * 
+ *     def getType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscAOType cval = NULL
+ *         CHKERR( AOGetType(self.ao, &cval) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9iterating_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9iterating_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2AO_12getType[] = "AO.getType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_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_8petsc4py_5PETSc_3TAO_9iterating___get__(((struct PyPetscTAOObject *)__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_8petsc4py_5PETSc_2AO_12getType(((struct PyPetscAOObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9iterating___get__(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_12getType(struct PyPetscAOObject *__pyx_v_self) {
+  const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
-
-  /* "PETSc/TAO.pyx":658
- *     property iterating:
- *         def __get__(self):
- *             return self.reason == 0             # <<<<<<<<<<<<<<
- * 
- *     property converged:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "PETSc/TAO.pyx":657
- * 
- *     property iterating:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.reason == 0
+  /* "PETSc/AO.pyx":89
  * 
+ *     def getType(self):
+ *         cdef PetscAOType cval = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( AOGetType(self.ao, &cval) )
+ *         return bytes2str(cval)
  */
+  __pyx_v_cval = NULL;
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.iterating.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TAO.pyx":661
- * 
- *     property converged:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.reason > 0
+  /* "PETSc/AO.pyx":90
+ *     def getType(self):
+ *         cdef PetscAOType cval = NULL
+ *         CHKERR( AOGetType(self.ao, &cval) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(cval)
  * 
  */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOGetType(__pyx_v_self->ao, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(39, 90, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9converged_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9converged_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_9converged___get__(((struct PyPetscTAOObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9converged___get__(struct PyPetscTAOObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __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("__get__", 0);
-
-  /* "PETSc/TAO.pyx":662
- *     property converged:
- *         def __get__(self):
- *             return self.reason > 0             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":91
+ *         cdef PetscAOType cval = NULL
+ *         CHKERR( AOGetType(self.ao, &cval) )
+ *         return bytes2str(cval)             # <<<<<<<<<<<<<<
  * 
- *     property diverged:
+ *     def app2petsc(self, indices):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(39, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TAO.pyx":661
- * 
- *     property converged:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.reason > 0
+  /* "PETSc/AO.pyx":88
+ *         return self
  * 
+ *     def getType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscAOType cval = NULL
+ *         CHKERR( AOGetType(self.ao, &cval) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.converged.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -194906,157 +198581,212 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9converged___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TAO.pyx":665
- * 
- *     property diverged:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.reason < 0
+/* "PETSc/AO.pyx":93
+ *         return bytes2str(cval)
  * 
+ *     def app2petsc(self, indices):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8diverged_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_8diverged_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_15app2petsc(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2AO_14app2petsc[] = "AO.app2petsc(self, indices)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_15app2petsc(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3TAO_8diverged___get__(((struct PyPetscTAOObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("app2petsc (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,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_indices)) != 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, "app2petsc") < 0)) __PYX_ERR(39, 93, __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_indices = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("app2petsc", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(39, 93, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.app2petsc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_14app2petsc(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_indices);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8diverged___get__(struct PyPetscTAOObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_14app2petsc(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_indices) {
+  IS __pyx_v_iset;
+  PetscInt __pyx_v_nidx;
+  PetscInt *__pyx_v_idx;
   PyObject *__pyx_r = NULL;
   __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("__get__", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  IS __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("app2petsc", 0);
+  __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/TAO.pyx":666
- *     property diverged:
- *         def __get__(self):
- *             return self.reason < 0             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":94
  * 
- * # --------------------------------------------------------------------
+ *     def app2petsc(self, indices):
+ *         cdef PetscIS iset = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt nidx = 0, *idx = NULL
+ *         if isinstance(indices, IS):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reason); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_v_iset = NULL;
 
-  /* "PETSc/TAO.pyx":665
- * 
- *     property diverged:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.reason < 0
- * 
+  /* "PETSc/AO.pyx":95
+ *     def app2petsc(self, indices):
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
+ *         if isinstance(indices, IS):
+ *             iset = (<IS>indices).iset
  */
+  __pyx_v_nidx = 0;
+  __pyx_v_idx = NULL;
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TAO.diverged.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "PETSc/AO.pyx":96
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL
+ *         if isinstance(indices, IS):             # <<<<<<<<<<<<<<
+ *             iset = (<IS>indices).iset
+ *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_indices, __pyx_ptype_8petsc4py_5PETSc_IS); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
 
-/* "PETSc/AO.pyx":15
- *     Type = AOType
- * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.ao
- *         self.ao = NULL
+    /* "PETSc/AO.pyx":97
+ *         cdef PetscInt nidx = 0, *idx = NULL
+ *         if isinstance(indices, IS):
+ *             iset = (<IS>indices).iset             # <<<<<<<<<<<<<<
+ *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )
+ *         else:
  */
+    __pyx_t_3 = ((struct PyPetscISObject *)__pyx_v_indices)->iset;
+    __pyx_v_iset = __pyx_t_3;
 
-/* Python wrapper */
-static int __pyx_pw_8petsc4py_5PETSc_2AO_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8petsc4py_5PETSc_2AO_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_8petsc4py_5PETSc_2AO___cinit__(((struct PyPetscAOObject *)__pyx_v_self));
+    /* "PETSc/AO.pyx":98
+ *         if isinstance(indices, IS):
+ *             iset = (<IS>indices).iset
+ *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             indices = oarray_i(indices, &nidx, &idx)
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOApplicationToPetscIS(__pyx_v_self->ao, __pyx_v_iset)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(39, 98, __pyx_L1_error)
 
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "PETSc/AO.pyx":96
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL
+ *         if isinstance(indices, IS):             # <<<<<<<<<<<<<<
+ *             iset = (<IS>indices).iset
+ *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )
+ */
+    goto __pyx_L3;
+  }
 
-static int __pyx_pf_8petsc4py_5PETSc_2AO___cinit__(struct PyPetscAOObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  /* "PETSc/AO.pyx":100
+ *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )
+ *         else:
+ *             indices = oarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
+ *             CHKERR( AOApplicationToPetsc(self.ao, nidx, idx) )
+ *         return indices
+ */
+  /*else*/ {
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_5)) __PYX_ERR(39, 100, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_5);
+    __pyx_t_5 = 0;
 
-  /* "PETSc/AO.pyx":16
- * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.ao             # <<<<<<<<<<<<<<
- *         self.ao = NULL
+    /* "PETSc/AO.pyx":101
+ *         else:
+ *             indices = oarray_i(indices, &nidx, &idx)
+ *             CHKERR( AOApplicationToPetsc(self.ao, nidx, idx) )             # <<<<<<<<<<<<<<
+ *         return indices
  * 
  */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->ao));
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOApplicationToPetsc(__pyx_v_self->ao, __pyx_v_nidx, __pyx_v_idx)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(39, 101, __pyx_L1_error)
+  }
+  __pyx_L3:;
 
-  /* "PETSc/AO.pyx":17
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.ao
- *         self.ao = NULL             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":102
+ *             indices = oarray_i(indices, &nidx, &idx)
+ *             CHKERR( AOApplicationToPetsc(self.ao, nidx, idx) )
+ *         return indices             # <<<<<<<<<<<<<<
  * 
- *     def view(self, Viewer viewer=None):
+ *     def petsc2app(self, indices):
  */
-  __pyx_v_self->ao = NULL;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_indices);
+  __pyx_r = __pyx_v_indices;
+  goto __pyx_L0;
 
-  /* "PETSc/AO.pyx":15
- *     Type = AOType
+  /* "PETSc/AO.pyx":93
+ *         return bytes2str(cval)
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.ao
- *         self.ao = NULL
+ *     def app2petsc(self, indices):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.app2petsc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_indices);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/AO.pyx":19
- *         self.ao = NULL
+/* "PETSc/AO.pyx":104
+ *         return indices
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
- *         cdef PetscViewer cviewer = NULL
- *         if viewer is not None: cviewer = viewer.vwr
+ *     def petsc2app(self, indices):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2AO_2view[] = "AO.view(self, Viewer viewer=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_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_8petsc4py_5PETSc_2AO_17petsc2app(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2AO_16petsc2app[] = "AO.petsc2app(self, indices)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_17petsc2app(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  __Pyx_RefNannySetupContext("petsc2app (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,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);
@@ -195068,215 +198798,248 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_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_indices)) != 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[39]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "petsc2app") < 0)) __PYX_ERR(39, 104, __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_indices = 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[39]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("petsc2app", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(39, 104, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.petsc2app", __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[39]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_2view(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_viewer);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_16petsc2app(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_indices);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_2view(struct PyPetscAOObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_cviewer;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_16petsc2app(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_indices) {
+  IS __pyx_v_iset;
+  PetscInt __pyx_v_nidx;
+  PetscInt *__pyx_v_idx;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  PetscViewer __pyx_t_3;
+  IS __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("view", 0);
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("petsc2app", 0);
+  __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/AO.pyx":20
+  /* "PETSc/AO.pyx":105
  * 
- *     def view(self, Viewer viewer=None):
- *         cdef PetscViewer cviewer = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: cviewer = viewer.vwr
- *         CHKERR( AOView(self.ao, cviewer) )
+ *     def petsc2app(self, indices):
+ *         cdef PetscIS iset = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt nidx = 0, *idx = NULL
+ *         if isinstance(indices, IS):
  */
-  __pyx_v_cviewer = NULL;
+  __pyx_v_iset = NULL;
 
-  /* "PETSc/AO.pyx":21
- *     def view(self, Viewer viewer=None):
- *         cdef PetscViewer cviewer = NULL
- *         if viewer is not None: cviewer = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( AOView(self.ao, cviewer) )
- * 
+  /* "PETSc/AO.pyx":106
+ *     def petsc2app(self, indices):
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
+ *         if isinstance(indices, IS):
+ *             iset = (<IS>indices).iset
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_v_nidx = 0;
+  __pyx_v_idx = NULL;
+
+  /* "PETSc/AO.pyx":107
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL
+ *         if isinstance(indices, IS):             # <<<<<<<<<<<<<<
+ *             iset = (<IS>indices).iset
+ *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_indices, __pyx_ptype_8petsc4py_5PETSc_IS); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_viewer->vwr;
-    __pyx_v_cviewer = __pyx_t_3;
+
+    /* "PETSc/AO.pyx":108
+ *         cdef PetscInt nidx = 0, *idx = NULL
+ *         if isinstance(indices, IS):
+ *             iset = (<IS>indices).iset             # <<<<<<<<<<<<<<
+ *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )
+ *         else:
+ */
+    __pyx_t_3 = ((struct PyPetscISObject *)__pyx_v_indices)->iset;
+    __pyx_v_iset = __pyx_t_3;
+
+    /* "PETSc/AO.pyx":109
+ *         if isinstance(indices, IS):
+ *             iset = (<IS>indices).iset
+ *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             indices = oarray_i(indices, &nidx, &idx)
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOPetscToApplicationIS(__pyx_v_self->ao, __pyx_v_iset)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(39, 109, __pyx_L1_error)
+
+    /* "PETSc/AO.pyx":107
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL
+ *         if isinstance(indices, IS):             # <<<<<<<<<<<<<<
+ *             iset = (<IS>indices).iset
+ *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )
+ */
     goto __pyx_L3;
   }
+
+  /* "PETSc/AO.pyx":111
+ *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )
+ *         else:
+ *             indices = oarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
+ *             CHKERR( AOPetscToApplication(self.ao, nidx, idx) )
+ *         return indices
+ */
+  /*else*/ {
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_5)) __PYX_ERR(39, 111, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_5);
+    __pyx_t_5 = 0;
+
+    /* "PETSc/AO.pyx":112
+ *         else:
+ *             indices = oarray_i(indices, &nidx, &idx)
+ *             CHKERR( AOPetscToApplication(self.ao, nidx, idx) )             # <<<<<<<<<<<<<<
+ *         return indices
+ * 
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOPetscToApplication(__pyx_v_self->ao, __pyx_v_nidx, __pyx_v_idx)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(39, 112, __pyx_L1_error)
+  }
   __pyx_L3:;
 
-  /* "PETSc/AO.pyx":22
- *         cdef PetscViewer cviewer = NULL
- *         if viewer is not None: cviewer = viewer.vwr
- *         CHKERR( AOView(self.ao, cviewer) )             # <<<<<<<<<<<<<<
+  /* "PETSc/AO.pyx":113
+ *             indices = oarray_i(indices, &nidx, &idx)
+ *             CHKERR( AOPetscToApplication(self.ao, nidx, idx) )
+ *         return indices             # <<<<<<<<<<<<<<
  * 
- *     def destroy(self):
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOView(__pyx_v_self->ao, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_indices);
+  __pyx_r = __pyx_v_indices;
+  goto __pyx_L0;
 
-  /* "PETSc/AO.pyx":19
- *         self.ao = NULL
+  /* "PETSc/AO.pyx":104
+ *         return indices
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
- *         cdef PetscViewer cviewer = NULL
- *         if viewer is not None: cviewer = viewer.vwr
+ *     def petsc2app(self, indices):             # <<<<<<<<<<<<<<
+ *         cdef PetscIS iset = NULL
+ *         cdef PetscInt nidx = 0, *idx = NULL
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.AO.petsc2app", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_indices);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/AO.pyx":24
- *         CHKERR( AOView(self.ao, cviewer) )
+/* "PETSc/DM.pyx":31
+ *     #
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
- *         CHKERR( AODestroy(&self.ao) )
- *         return self
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.dm
+ *         self.dm  = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2AO_4destroy[] = "AO.destroy(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8petsc4py_5PETSc_2DM_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8petsc4py_5PETSc_2DM_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("__cinit__ (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_8petsc4py_5PETSc_2AO_4destroy(((struct PyPetscAOObject *)__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_8petsc4py_5PETSc_2DM___cinit__(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_4destroy(struct PyPetscAOObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8petsc4py_5PETSc_2DM___cinit__(struct PyPetscDMObject *__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("destroy", 0);
+  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/AO.pyx":25
+  /* "PETSc/DM.pyx":32
  * 
- *     def destroy(self):
- *         CHKERR( AODestroy(&self.ao) )             # <<<<<<<<<<<<<<
- *         return self
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.dm             # <<<<<<<<<<<<<<
+ *         self.dm  = NULL
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(AODestroy((&__pyx_v_self->ao))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->dm));
 
-  /* "PETSc/AO.pyx":26
- *     def destroy(self):
- *         CHKERR( AODestroy(&self.ao) )
- *         return self             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":33
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.dm
+ *         self.dm  = NULL             # <<<<<<<<<<<<<<
  * 
- *     def createBasic(self, app, petsc=None, comm=None):
+ *     def view(self, Viewer viewer=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
+  __pyx_v_self->dm = NULL;
 
-  /* "PETSc/AO.pyx":24
- *         CHKERR( AOView(self.ao, cviewer) )
+  /* "PETSc/DM.pyx":31
+ *     #
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
- *         CHKERR( AODestroy(&self.ao) )
- *         return self
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.dm
+ *         self.dm  = NULL
  */
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
+  __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/AO.pyx":28
- *         return self
+/* "PETSc/DM.pyx":35
+ *         self.dm  = NULL
  * 
- *     def createBasic(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_7createBasic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2AO_6createBasic[] = "AO.createBasic(self, app, petsc=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_7createBasic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_app = 0;
-  PyObject *__pyx_v_petsc = 0;
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_2view[] = "DM.view(self, Viewer viewer=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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("createBasic (wrapper)", 0);
+  __Pyx_RefNannySetupContext("view (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_app,&__pyx_n_s_petsc,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)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;
@@ -195284,321 +199047,199 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_7createBasic(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_app)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          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, "createBasic") < 0)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(40, 35, __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_app = values[0];
-    __pyx_v_petsc = values[1];
-    __pyx_v_comm = values[2];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createBasic", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[39]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 35, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.createBasic", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_6createBasic(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_app, __pyx_v_petsc, __pyx_v_comm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(40, 35, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_2view(((struct PyPetscDMObject *)__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_8petsc4py_5PETSc_2AO_6createBasic(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm) {
-  IS __pyx_v_isapp;
-  IS __pyx_v_ispetsc;
-  PetscInt __pyx_v_napp;
-  PetscInt *__pyx_v_idxapp;
-  PetscInt __pyx_v_npetsc;
-  PetscInt *__pyx_v_idxpetsc;
-  MPI_Comm __pyx_v_ccomm;
-  AO __pyx_v_newao;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_2view(struct PyPetscDMObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  IS __pyx_t_4;
-  int __pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createBasic", 0);
-  __Pyx_INCREF(__pyx_v_app);
-  __Pyx_INCREF(__pyx_v_petsc);
-
-  /* "PETSc/AO.pyx":29
- * 
- *     def createBasic(self, app, petsc=None, comm=None):
- *         cdef PetscIS isapp = NULL, ispetsc = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- */
-  __pyx_v_isapp = NULL;
-  __pyx_v_ispetsc = NULL;
-
-  /* "PETSc/AO.pyx":30
- *     def createBasic(self, app, petsc=None, comm=None):
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,             # <<<<<<<<<<<<<<
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- */
-  __pyx_v_napp = 0;
-  __pyx_v_idxapp = NULL;
-
-  /* "PETSc/AO.pyx":31
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL
- */
-  __pyx_v_npetsc = 0;
-  __pyx_v_idxpetsc = NULL;
-
-  /* "PETSc/AO.pyx":32
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
-
-  /* "PETSc/AO.pyx":33
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL             # <<<<<<<<<<<<<<
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset
- */
-  __pyx_v_newao = NULL;
-
-  /* "PETSc/AO.pyx":34
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
- *             isapp = (<IS>app).iset
- *             if petsc is not None:
- */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_app, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); 
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
-
-    /* "PETSc/AO.pyx":35
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset             # <<<<<<<<<<<<<<
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset
- */
-    __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_app)->iset;
-    __pyx_v_isapp = __pyx_t_4;
-
-    /* "PETSc/AO.pyx":36
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset
- *             if petsc is not None:             # <<<<<<<<<<<<<<
- *                 ispetsc = (<IS?>petsc).iset
- *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )
- */
-    __pyx_t_3 = (__pyx_v_petsc != Py_None);
-    __pyx_t_2 = (__pyx_t_3 != 0);
-    if (__pyx_t_2) {
-
-      /* "PETSc/AO.pyx":37
- *             isapp = (<IS>app).iset
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset             # <<<<<<<<<<<<<<
- *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )
- *         else:
- */
-      if (!(likely(__Pyx_TypeTest(__pyx_v_petsc, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_petsc)->iset;
-      __pyx_v_ispetsc = __pyx_t_4;
-      goto __pyx_L4;
-    }
-    __pyx_L4:;
-
-    /* "PETSc/AO.pyx":38
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset
- *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )             # <<<<<<<<<<<<<<
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)
- */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateBasicIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  /*else*/ {
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PetscViewer __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("view", 0);
 
-    /* "PETSc/AO.pyx":40
- *             CHKERR( AOCreateBasicIS(isapp, ispetsc, &newao) )
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)             # <<<<<<<<<<<<<<
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+  /* "PETSc/DM.pyx":36
+ * 
+ *     def view(self, Viewer viewer=None):
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( DMView(self.dm, vwr) )
  */
-    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_app, (&__pyx_v_napp), (&__pyx_v_idxapp))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_DECREF_SET(__pyx_v_app, __pyx_t_6);
-    __pyx_t_6 = 0;
+  __pyx_v_vwr = NULL;
 
-    /* "PETSc/AO.pyx":41
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)
- *             if petsc is not None:             # <<<<<<<<<<<<<<
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"
+  /* "PETSc/DM.pyx":37
+ *     def view(self, Viewer viewer=None):
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( DMView(self.dm, vwr) )
+ * 
  */
-    __pyx_t_2 = (__pyx_v_petsc != Py_None);
-    __pyx_t_3 = (__pyx_t_2 != 0);
-    if (__pyx_t_3) {
+  __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;
+  }
 
-      /* "PETSc/AO.pyx":42
- *             app = iarray_i(app, &napp, &idxapp)
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)             # <<<<<<<<<<<<<<
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )
+  /* "PETSc/DM.pyx":38
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( DMView(self.dm, vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def destroy(self):
  */
-      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_petsc, (&__pyx_v_npetsc), (&__pyx_v_idxpetsc))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF_SET(__pyx_v_petsc, __pyx_t_6);
-      __pyx_t_6 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMView(__pyx_v_self->dm, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(40, 38, __pyx_L1_error)
 
-      /* "PETSc/AO.pyx":43
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"             # <<<<<<<<<<<<<<
- *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao
+  /* "PETSc/DM.pyx":35
+ *         self.dm  = NULL
+ * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
  */
-      #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
-        if (unlikely(!((__pyx_v_napp == __pyx_v_npetsc) != 0))) {
-          PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_incompatible_array_sizes);
-          {__pyx_filename = __pyx_f[39]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-      }
-      #endif
-      goto __pyx_L5;
-    }
-    __pyx_L5:;
 
-    /* "PETSc/AO.pyx":44
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.ao = newao
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":40
+ *         CHKERR( DMView(self.dm, vwr) )
+ * 
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMDestroy(&self.dm) )
  *         return self
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateBasic(__pyx_v_ccomm, __pyx_v_napp, __pyx_v_idxapp, __pyx_v_idxpetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_L3:;
 
-  /* "PETSc/AO.pyx":45
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao             # <<<<<<<<<<<<<<
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_4destroy[] = "DM.destroy(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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_8petsc4py_5PETSc_2DM_4destroy(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_4destroy(struct PyPetscDMObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("destroy", 0);
+
+  /* "PETSc/DM.pyx":41
+ * 
+ *     def destroy(self):
+ *         CHKERR( DMDestroy(&self.dm) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->ao = __pyx_v_newao;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDestroy((&__pyx_v_self->dm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 41, __pyx_L1_error)
 
-  /* "PETSc/AO.pyx":46
- *             CHKERR( AOCreateBasic(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao
+  /* "PETSc/DM.pyx":42
+ *     def destroy(self):
+ *         CHKERR( DMDestroy(&self.dm) )
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createMemoryScalable(self, app, petsc=None, comm=None):
+ *     def create(self, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/AO.pyx":28
- *         return self
+  /* "PETSc/DM.pyx":40
+ *         CHKERR( DMView(self.dm, vwr) )
  * 
- *     def createBasic(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMDestroy(&self.dm) )
+ *         return self
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.createBasic", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_app);
-  __Pyx_XDECREF(__pyx_v_petsc);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/AO.pyx":48
+/* "PETSc/DM.pyx":44
  *         return self
  * 
- *     def createMemoryScalable(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM newdm = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_9createMemoryScalable(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2AO_8createMemoryScalable[] = "AO.createMemoryScalable(self, app, petsc=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_9createMemoryScalable(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_app = 0;
-  PyObject *__pyx_v_petsc = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_6create[] = "DM.create(self, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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("createMemoryScalable (wrapper)", 0);
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_app,&__pyx_n_s_petsc,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((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  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;
@@ -195606,321 +199247,246 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_9createMemoryScalable(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_app)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[2] = value; kw_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, "createMemoryScalable") < 0)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(40, 44, __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_app = values[0];
-    __pyx_v_petsc = values[1];
-    __pyx_v_comm = values[2];
+    __pyx_v_comm = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createMemoryScalable", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[39]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 44, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.createMemoryScalable", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_8createMemoryScalable(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_app, __pyx_v_petsc, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_6create(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_8createMemoryScalable(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm) {
-  IS __pyx_v_isapp;
-  IS __pyx_v_ispetsc;
-  PetscInt __pyx_v_napp;
-  PetscInt *__pyx_v_idxapp;
-  PetscInt __pyx_v_npetsc;
-  PetscInt *__pyx_v_idxpetsc;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_6create(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
-  AO __pyx_v_newao;
+  DM __pyx_v_newdm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_t_3;
-  IS __pyx_t_4;
-  int __pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createMemoryScalable", 0);
-  __Pyx_INCREF(__pyx_v_app);
-  __Pyx_INCREF(__pyx_v_petsc);
+  __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/AO.pyx":49
+  /* "PETSc/DM.pyx":45
  * 
- *     def createMemoryScalable(self, app, petsc=None, comm=None):
- *         cdef PetscIS isapp = NULL, ispetsc = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- */
-  __pyx_v_isapp = NULL;
-  __pyx_v_ispetsc = NULL;
-
-  /* "PETSc/AO.pyx":50
- *     def createMemoryScalable(self, app, petsc=None, comm=None):
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,             # <<<<<<<<<<<<<<
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- */
-  __pyx_v_napp = 0;
-  __pyx_v_idxapp = NULL;
-
-  /* "PETSc/AO.pyx":51
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL
- */
-  __pyx_v_npetsc = 0;
-  __pyx_v_idxpetsc = NULL;
-
-  /* "PETSc/AO.pyx":52
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+ *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMCreate(ccomm, &newdm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(40, 45, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/AO.pyx":53
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
+  /* "PETSc/DM.pyx":46
+ *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL             # <<<<<<<<<<<<<<
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset
+ *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreate(ccomm, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
  */
-  __pyx_v_newao = NULL;
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/AO.pyx":54
+  /* "PETSc/DM.pyx":47
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
- *             isapp = (<IS>app).iset
- *             if petsc is not None:
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMCreate(ccomm, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_app, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); 
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 47, __pyx_L1_error)
 
-    /* "PETSc/AO.pyx":55
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset             # <<<<<<<<<<<<<<
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset
+  /* "PETSc/DM.pyx":48
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMCreate(ccomm, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ *         return self
+ * 
  */
-    __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_app)->iset;
-    __pyx_v_isapp = __pyx_t_4;
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->dm = __pyx_v_newdm;
 
-    /* "PETSc/AO.pyx":56
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset
- *             if petsc is not None:             # <<<<<<<<<<<<<<
- *                 ispetsc = (<IS?>petsc).iset
- *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )
+  /* "PETSc/DM.pyx":49
+ *         CHKERR( DMCreate(ccomm, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def clone(self):
  */
-    __pyx_t_3 = (__pyx_v_petsc != Py_None);
-    __pyx_t_2 = (__pyx_t_3 != 0);
-    if (__pyx_t_2) {
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
 
-      /* "PETSc/AO.pyx":57
- *             isapp = (<IS>app).iset
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset             # <<<<<<<<<<<<<<
- *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )
- *         else:
+  /* "PETSc/DM.pyx":44
+ *         return self
+ * 
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM newdm = NULL
  */
-      if (!(likely(__Pyx_TypeTest(__pyx_v_petsc, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_petsc)->iset;
-      __pyx_v_ispetsc = __pyx_t_4;
-      goto __pyx_L4;
-    }
-    __pyx_L4:;
 
-    /* "PETSc/AO.pyx":58
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset
- *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )             # <<<<<<<<<<<<<<
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)
- */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMemoryScalableIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  /*else*/ {
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-    /* "PETSc/AO.pyx":60
- *             CHKERR( AOCreateMemoryScalableIS(isapp, ispetsc, &newao) )
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)             # <<<<<<<<<<<<<<
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+/* "PETSc/DM.pyx":51
+ *         return self
+ * 
+ *     def clone(self):             # <<<<<<<<<<<<<<
+ *         cdef DM dm = type(self)()
+ *         CHKERR( DMClone(self.dm, &dm.dm) )
  */
-    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_app, (&__pyx_v_napp), (&__pyx_v_idxapp))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_DECREF_SET(__pyx_v_app, __pyx_t_6);
-    __pyx_t_6 = 0;
 
-    /* "PETSc/AO.pyx":61
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)
- *             if petsc is not None:             # <<<<<<<<<<<<<<
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"
- */
-    __pyx_t_2 = (__pyx_v_petsc != Py_None);
-    __pyx_t_3 = (__pyx_t_2 != 0);
-    if (__pyx_t_3) {
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_9clone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_8clone[] = "DM.clone(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_9clone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("clone (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("clone", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "clone", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_8clone(((struct PyPetscDMObject *)__pyx_v_self));
 
-      /* "PETSc/AO.pyx":62
- *             app = iarray_i(app, &napp, &idxapp)
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)             # <<<<<<<<<<<<<<
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )
- */
-      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_petsc, (&__pyx_v_npetsc), (&__pyx_v_idxpetsc))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF_SET(__pyx_v_petsc, __pyx_t_6);
-      __pyx_t_6 = 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-      /* "PETSc/AO.pyx":63
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"             # <<<<<<<<<<<<<<
- *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao
- */
-      #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
-        if (unlikely(!((__pyx_v_napp == __pyx_v_npetsc) != 0))) {
-          PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_incompatible_array_sizes);
-          {__pyx_filename = __pyx_f[39]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-      }
-      #endif
-      goto __pyx_L5;
-    }
-    __pyx_L5:;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_8clone(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscDMObject *__pyx_v_dm = 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("clone", 0);
 
-    /* "PETSc/AO.pyx":64
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.ao = newao
- *         return self
+  /* "PETSc/DM.pyx":52
+ * 
+ *     def clone(self):
+ *         cdef DM dm = type(self)()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMClone(self.dm, &dm.dm) )
+ *         return dm
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMemoryScalable(__pyx_v_ccomm, __pyx_v_napp, __pyx_v_idxapp, __pyx_v_idxpetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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);
+    }
   }
-  __pyx_L3:;
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 52, __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(40, 52, __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_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 52, __pyx_L1_error)
+  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/AO.pyx":65
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao             # <<<<<<<<<<<<<<
- *         return self
+  /* "PETSc/DM.pyx":53
+ *     def clone(self):
+ *         cdef DM dm = type(self)()
+ *         CHKERR( DMClone(self.dm, &dm.dm) )             # <<<<<<<<<<<<<<
+ *         return dm
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->ao = __pyx_v_newao;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMClone(__pyx_v_self->dm, (&__pyx_v_dm->dm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(40, 53, __pyx_L1_error)
 
-  /* "PETSc/AO.pyx":66
- *             CHKERR( AOCreateMemoryScalable(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao
- *         return self             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":54
+ *         cdef DM dm = type(self)()
+ *         CHKERR( DMClone(self.dm, &dm.dm) )
+ *         return dm             # <<<<<<<<<<<<<<
  * 
- *     def createMapping(self, app, petsc=None, comm=None):
+ *     def setType(self, dm_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
+  __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/AO.pyx":48
+  /* "PETSc/DM.pyx":51
  *         return self
  * 
- *     def createMemoryScalable(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *     def clone(self):             # <<<<<<<<<<<<<<
+ *         cdef DM dm = type(self)()
+ *         CHKERR( DMClone(self.dm, &dm.dm) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.createMemoryScalable", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.clone", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_app);
-  __Pyx_XDECREF(__pyx_v_petsc);
+  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/AO.pyx":68
- *         return self
+/* "PETSc/DM.pyx":56
+ *         return dm
  * 
- *     def createMapping(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *     def setType(self, dm_type):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         dm_type = str2bytes(dm_type, &cval)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_11createMapping(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2AO_10createMapping[] = "AO.createMapping(self, app, petsc=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_11createMapping(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_app = 0;
-  PyObject *__pyx_v_petsc = 0;
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_10setType[] = "DM.setType(self, dm_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_dm_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createMapping (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_app,&__pyx_n_s_petsc,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm_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;
@@ -195928,369 +199494,361 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_11createMapping(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_app)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dm_type)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[2] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMapping") < 0)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(40, 56, __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_app = values[0];
-    __pyx_v_petsc = values[1];
-    __pyx_v_comm = values[2];
+    __pyx_v_dm_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createMapping", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[39]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 56, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.createMapping", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_10createMapping(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_app, __pyx_v_petsc, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_10setType(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_10createMapping(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_app, PyObject *__pyx_v_petsc, PyObject *__pyx_v_comm) {
-  IS __pyx_v_isapp;
-  IS __pyx_v_ispetsc;
-  PetscInt __pyx_v_napp;
-  PetscInt *__pyx_v_idxapp;
-  PetscInt __pyx_v_npetsc;
-  PetscInt *__pyx_v_idxpetsc;
-  MPI_Comm __pyx_v_ccomm;
-  AO __pyx_v_newao;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_10setType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_t_3;
-  IS __pyx_t_4;
-  int __pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createMapping", 0);
-  __Pyx_INCREF(__pyx_v_app);
-  __Pyx_INCREF(__pyx_v_petsc);
+  __Pyx_RefNannySetupContext("setType", 0);
+  __Pyx_INCREF(__pyx_v_dm_type);
 
-  /* "PETSc/AO.pyx":69
+  /* "PETSc/DM.pyx":57
  * 
- *     def createMapping(self, app, petsc=None, comm=None):
- *         cdef PetscIS isapp = NULL, ispetsc = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- */
-  __pyx_v_isapp = NULL;
-  __pyx_v_ispetsc = NULL;
-
-  /* "PETSc/AO.pyx":70
- *     def createMapping(self, app, petsc=None, comm=None):
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,             # <<<<<<<<<<<<<<
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- */
-  __pyx_v_napp = 0;
-  __pyx_v_idxapp = NULL;
-
-  /* "PETSc/AO.pyx":71
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL
- */
-  __pyx_v_npetsc = 0;
-  __pyx_v_idxpetsc = NULL;
-
-  /* "PETSc/AO.pyx":72
- *         cdef PetscInt napp = 0, *idxapp = NULL,
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
-
-  /* "PETSc/AO.pyx":73
- *         cdef PetscInt npetsc = 0, *idxpetsc = NULL
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL             # <<<<<<<<<<<<<<
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset
- */
-  __pyx_v_newao = NULL;
-
-  /* "PETSc/AO.pyx":74
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):             # <<<<<<<<<<<<<<
- *             isapp = (<IS>app).iset
- *             if petsc is not None:
+ *     def setType(self, dm_type):
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         dm_type = str2bytes(dm_type, &cval)
+ *         CHKERR( DMSetType(self.dm, cval) )
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_app, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); 
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
+  __pyx_v_cval = NULL;
 
-    /* "PETSc/AO.pyx":75
- *         cdef PetscAO newao = NULL
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset             # <<<<<<<<<<<<<<
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset
+  /* "PETSc/DM.pyx":58
+ *     def setType(self, dm_type):
+ *         cdef const_char *cval = NULL
+ *         dm_type = str2bytes(dm_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetType(self.dm, cval) )
+ * 
  */
-    __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_app)->iset;
-    __pyx_v_isapp = __pyx_t_4;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_dm_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_dm_type, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-    /* "PETSc/AO.pyx":76
- *         if isinstance(app, IS):
- *             isapp = (<IS>app).iset
- *             if petsc is not None:             # <<<<<<<<<<<<<<
- *                 ispetsc = (<IS?>petsc).iset
- *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )
+  /* "PETSc/DM.pyx":59
+ *         cdef const_char *cval = NULL
+ *         dm_type = str2bytes(dm_type, &cval)
+ *         CHKERR( DMSetType(self.dm, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getType(self):
  */
-    __pyx_t_3 = (__pyx_v_petsc != Py_None);
-    __pyx_t_2 = (__pyx_t_3 != 0);
-    if (__pyx_t_2) {
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetType(__pyx_v_self->dm, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 59, __pyx_L1_error)
 
-      /* "PETSc/AO.pyx":77
- *             isapp = (<IS>app).iset
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset             # <<<<<<<<<<<<<<
- *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )
- *         else:
+  /* "PETSc/DM.pyx":56
+ *         return dm
+ * 
+ *     def setType(self, dm_type):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         dm_type = str2bytes(dm_type, &cval)
  */
-      if (!(likely(__Pyx_TypeTest(__pyx_v_petsc, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = ((struct PyPetscISObject *)__pyx_v_petsc)->iset;
-      __pyx_v_ispetsc = __pyx_t_4;
-      goto __pyx_L4;
-    }
-    __pyx_L4:;
 
-    /* "PETSc/AO.pyx":78
- *             if petsc is not None:
- *                 ispetsc = (<IS?>petsc).iset
- *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )             # <<<<<<<<<<<<<<
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)
- */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMappingIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  /*else*/ {
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_dm_type);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-    /* "PETSc/AO.pyx":80
- *             CHKERR( AOCreateMappingIS(isapp, ispetsc, &newao) )
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)             # <<<<<<<<<<<<<<
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
+/* "PETSc/DM.pyx":61
+ *         CHKERR( DMSetType(self.dm, cval) )
+ * 
+ *     def getType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscDMType cval = NULL
+ *         CHKERR( DMGetType(self.dm, &cval) )
  */
-    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_app, (&__pyx_v_napp), (&__pyx_v_idxapp))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_DECREF_SET(__pyx_v_app, __pyx_t_6);
-    __pyx_t_6 = 0;
 
-    /* "PETSc/AO.pyx":81
- *         else:
- *             app = iarray_i(app, &napp, &idxapp)
- *             if petsc is not None:             # <<<<<<<<<<<<<<
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"
- */
-    __pyx_t_2 = (__pyx_v_petsc != Py_None);
-    __pyx_t_3 = (__pyx_t_2 != 0);
-    if (__pyx_t_3) {
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_12getType[] = "DM.getType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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_8petsc4py_5PETSc_2DM_12getType(((struct PyPetscDMObject *)__pyx_v_self));
 
-      /* "PETSc/AO.pyx":82
- *             app = iarray_i(app, &napp, &idxapp)
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)             # <<<<<<<<<<<<<<
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )
- */
-      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_petsc, (&__pyx_v_npetsc), (&__pyx_v_idxpetsc))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF_SET(__pyx_v_petsc, __pyx_t_6);
-      __pyx_t_6 = 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-      /* "PETSc/AO.pyx":83
- *             if petsc is not None:
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"             # <<<<<<<<<<<<<<
- *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao
- */
-      #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
-        if (unlikely(!((__pyx_v_napp == __pyx_v_npetsc) != 0))) {
-          PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_incompatible_array_sizes);
-          {__pyx_filename = __pyx_f[39]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-      }
-      #endif
-      goto __pyx_L5;
-    }
-    __pyx_L5:;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_12getType(struct PyPetscDMObject *__pyx_v_self) {
+  const char* __pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getType", 0);
 
-    /* "PETSc/AO.pyx":84
- *                 petsc = iarray_i(petsc, &npetsc, &idxpetsc)
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.ao = newao
- *         return self
+  /* "PETSc/DM.pyx":62
+ * 
+ *     def getType(self):
+ *         cdef PetscDMType cval = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetType(self.dm, &cval) )
+ *         return bytes2str(cval)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMapping(__pyx_v_ccomm, __pyx_v_napp, __pyx_v_idxapp, __pyx_v_idxpetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_L3:;
+  __pyx_v_cval = NULL;
 
-  /* "PETSc/AO.pyx":85
- *                 assert napp == npetsc, "incompatible array sizes"
- *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao             # <<<<<<<<<<<<<<
- *         return self
+  /* "PETSc/DM.pyx":63
+ *     def getType(self):
+ *         cdef PetscDMType cval = NULL
+ *         CHKERR( DMGetType(self.dm, &cval) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(cval)
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->ao = __pyx_v_newao;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetType(__pyx_v_self->dm, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 63, __pyx_L1_error)
 
-  /* "PETSc/AO.pyx":86
- *             CHKERR( AOCreateMapping(ccomm, napp, idxapp, idxpetsc, &newao) )
- *         PetscCLEAR(self.obj); self.ao = newao
- *         return self             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":64
+ *         cdef PetscDMType cval = NULL
+ *         CHKERR( DMGetType(self.dm, &cval) )
+ *         return bytes2str(cval)             # <<<<<<<<<<<<<<
  * 
- *     def getType(self):
+ *     def getDimension(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/AO.pyx":68
- *         return self
+  /* "PETSc/DM.pyx":61
+ *         CHKERR( DMSetType(self.dm, cval) )
  * 
- *     def createMapping(self, app, petsc=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscIS isapp = NULL, ispetsc = NULL
- *         cdef PetscInt napp = 0, *idxapp = NULL,
+ *     def getType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscDMType cval = NULL
+ *         CHKERR( DMGetType(self.dm, &cval) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.createMapping", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_app);
-  __Pyx_XDECREF(__pyx_v_petsc);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/AO.pyx":88
- *         return self
+/* "PETSc/DM.pyx":66
+ *         return bytes2str(cval)
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
- *         cdef PetscAOType cval = NULL
- *         CHKERR( AOGetType(self.ao, &cval) )
+ *     def getDimension(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt dim = 0
+ *         CHKERR( DMGetDimension(self.dm, &dim) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2AO_12getType[] = "AO.getType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_15getDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_14getDimension[] = "DM.getDimension(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_15getDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDimension (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_8petsc4py_5PETSc_2AO_12getType(((struct PyPetscAOObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getDimension", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimension", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_14getDimension(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_12getType(struct PyPetscAOObject *__pyx_v_self) {
-  const char* __pyx_v_cval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_14getDimension(struct PyPetscDMObject *__pyx_v_self) {
+  PetscInt __pyx_v_dim;
   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("getDimension", 0);
 
-  /* "PETSc/AO.pyx":89
+  /* "PETSc/DM.pyx":67
  * 
- *     def getType(self):
- *         cdef PetscAOType cval = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( AOGetType(self.ao, &cval) )
- *         return bytes2str(cval)
+ *     def getDimension(self):
+ *         cdef PetscInt dim = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetDimension(self.dm, &dim) )
+ *         return toInt(dim)
  */
-  __pyx_v_cval = NULL;
+  __pyx_v_dim = 0;
 
-  /* "PETSc/AO.pyx":90
- *     def getType(self):
- *         cdef PetscAOType cval = NULL
- *         CHKERR( AOGetType(self.ao, &cval) )             # <<<<<<<<<<<<<<
- *         return bytes2str(cval)
+  /* "PETSc/DM.pyx":68
+ *     def getDimension(self):
+ *         cdef PetscInt dim = 0
+ *         CHKERR( DMGetDimension(self.dm, &dim) )             # <<<<<<<<<<<<<<
+ *         return toInt(dim)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOGetType(__pyx_v_self->ao, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDimension(__pyx_v_self->dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 68, __pyx_L1_error)
 
-  /* "PETSc/AO.pyx":91
- *         cdef PetscAOType cval = NULL
- *         CHKERR( AOGetType(self.ao, &cval) )
- *         return bytes2str(cval)             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":69
+ *         cdef PetscInt dim = 0
+ *         CHKERR( DMGetDimension(self.dm, &dim) )
+ *         return toInt(dim)             # <<<<<<<<<<<<<<
  * 
- *     def app2petsc(self, indices):
+ *     def setDimension(self, dim):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/AO.pyx":88
- *         return self
+  /* "PETSc/DM.pyx":66
+ *         return bytes2str(cval)
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
- *         cdef PetscAOType cval = NULL
- *         CHKERR( AOGetType(self.ao, &cval) )
+ *     def getDimension(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt dim = 0
+ *         CHKERR( DMGetDimension(self.dm, &dim) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getDimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":71
+ *         return toInt(dim)
+ * 
+ *     def setDimension(self, dim):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cdim = asInt(dim)
+ *         CHKERR( DMSetDimension(self.dm, cdim) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_17setDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_16setDimension[] = "DM.setDimension(self, dim)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_17setDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_dim = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setDimension (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dim,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_dim)) != 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, "setDimension") < 0)) __PYX_ERR(40, 71, __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_dim = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setDimension", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 71, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_16setDimension(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dim);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_16setDimension(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dim) {
+  PetscInt __pyx_v_cdim;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setDimension", 0);
+
+  /* "PETSc/DM.pyx":72
+ * 
+ *     def setDimension(self, dim):
+ *         cdef PetscInt cdim = asInt(dim)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetDimension(self.dm, cdim) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 72, __pyx_L1_error)
+  __pyx_v_cdim = __pyx_t_1;
+
+  /* "PETSc/DM.pyx":73
+ *     def setDimension(self, dim):
+ *         cdef PetscInt cdim = asInt(dim)
+ *         CHKERR( DMSetDimension(self.dm, cdim) )             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->dm, __pyx_v_cdim)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 73, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":71
+ *         return toInt(dim)
+ * 
+ *     def setDimension(self, dim):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cdim = asInt(dim)
+ *         CHKERR( DMSetDimension(self.dm, cdim) )
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -196298,27 +199856,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_12getType(struct PyPetscAOObject
   return __pyx_r;
 }
 
-/* "PETSc/AO.pyx":93
- *         return bytes2str(cval)
+/* "PETSc/DM.pyx":76
  * 
- *     def app2petsc(self, indices):             # <<<<<<<<<<<<<<
- *         cdef PetscIS iset = NULL
- *         cdef PetscInt nidx = 0, *idx = NULL
+ * 
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_15app2petsc(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2AO_14app2petsc[] = "AO.app2petsc(self, indices)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_15app2petsc(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_indices = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_19setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_18setOptionsPrefix[] = "DM.setOptionsPrefix(self, prefix)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_19setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("app2petsc (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -196331,179 +199886,243 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_15app2petsc(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_indices)) != 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, "app2petsc") < 0)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(40, 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);
     }
-    __pyx_v_indices = values[0];
+    __pyx_v_prefix = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("app2petsc", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[39]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 76, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.app2petsc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_14app2petsc(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_indices);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_18setOptionsPrefix(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_14app2petsc(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_indices) {
-  IS __pyx_v_iset;
-  PetscInt __pyx_v_nidx;
-  PetscInt *__pyx_v_idx;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_18setOptionsPrefix(struct PyPetscDMObject *__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;
-  IS __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("app2petsc", 0);
-  __Pyx_INCREF(__pyx_v_indices);
+  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "PETSc/AO.pyx":94
+  /* "PETSc/DM.pyx":77
  * 
- *     def app2petsc(self, indices):
- *         cdef PetscIS iset = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt nidx = 0, *idx = NULL
- *         if isinstance(indices, IS):
+ *     def setOptionsPrefix(self, prefix):
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
  */
-  __pyx_v_iset = NULL;
+  __pyx_v_cval = NULL;
 
-  /* "PETSc/AO.pyx":95
- *     def app2petsc(self, indices):
- *         cdef PetscIS iset = NULL
- *         cdef PetscInt nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
- *         if isinstance(indices, IS):
- *             iset = (<IS>indices).iset
+  /* "PETSc/DM.pyx":78
+ *     def setOptionsPrefix(self, prefix):
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
+ * 
  */
-  __pyx_v_nidx = 0;
-  __pyx_v_idx = NULL;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/AO.pyx":96
- *         cdef PetscIS iset = NULL
- *         cdef PetscInt nidx = 0, *idx = NULL
- *         if isinstance(indices, IS):             # <<<<<<<<<<<<<<
- *             iset = (<IS>indices).iset
- *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )
+  /* "PETSc/DM.pyx":79
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setFromOptions(self):
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_indices, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); 
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetOptionsPrefix(__pyx_v_self->dm, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 79, __pyx_L1_error)
 
-    /* "PETSc/AO.pyx":97
- *         cdef PetscInt nidx = 0, *idx = NULL
- *         if isinstance(indices, IS):
- *             iset = (<IS>indices).iset             # <<<<<<<<<<<<<<
- *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )
- *         else:
+  /* "PETSc/DM.pyx":76
+ * 
+ * 
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
  */
-    __pyx_t_3 = ((struct PyPetscISObject *)__pyx_v_indices)->iset;
-    __pyx_v_iset = __pyx_t_3;
 
-    /* "PETSc/AO.pyx":98
- *         if isinstance(indices, IS):
- *             iset = (<IS>indices).iset
- *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )             # <<<<<<<<<<<<<<
- *         else:
- *             indices = oarray_i(indices, &nidx, &idx)
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.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;
+}
+
+/* "PETSc/DM.pyx":81
+ *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
+ * 
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetFromOptions(self.dm) )
+ * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOApplicationToPetscIS(__pyx_v_self->ao, __pyx_v_iset)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  /*else*/ {
 
-    /* "PETSc/AO.pyx":100
- *             CHKERR( AOApplicationToPetscIS(self.ao, iset) )
- *         else:
- *             indices = oarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
- *             CHKERR( AOApplicationToPetsc(self.ao, nidx, idx) )
- *         return indices
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_20setFromOptions[] = "DM.setFromOptions(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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_8petsc4py_5PETSc_2DM_20setFromOptions(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_20setFromOptions(struct PyPetscDMObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setFromOptions", 0);
+
+  /* "PETSc/DM.pyx":82
+ * 
+ *     def setFromOptions(self):
+ *         CHKERR( DMSetFromOptions(self.dm) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setUp(self):
  */
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_5);
-    __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetFromOptions(__pyx_v_self->dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 82, __pyx_L1_error)
 
-    /* "PETSc/AO.pyx":101
- *         else:
- *             indices = oarray_i(indices, &nidx, &idx)
- *             CHKERR( AOApplicationToPetsc(self.ao, nidx, idx) )             # <<<<<<<<<<<<<<
- *         return indices
+  /* "PETSc/DM.pyx":81
+ *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
+ * 
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetFromOptions(self.dm) )
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOApplicationToPetsc(__pyx_v_self->ao, __pyx_v_nidx, __pyx_v_idx)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_L3:;
 
-  /* "PETSc/AO.pyx":102
- *             indices = oarray_i(indices, &nidx, &idx)
- *             CHKERR( AOApplicationToPetsc(self.ao, nidx, idx) )
- *         return indices             # <<<<<<<<<<<<<<
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":84
+ *         CHKERR( DMSetFromOptions(self.dm) )
  * 
- *     def petsc2app(self, indices):
+ *     def setUp(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetUp(self.dm) )
+ *         return self
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_23setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_22setUp[] = "DM.setUp(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_23setUp(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_8petsc4py_5PETSc_2DM_22setUp(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_22setUp(struct PyPetscDMObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setUp", 0);
+
+  /* "PETSc/DM.pyx":85
+ * 
+ *     def setUp(self):
+ *         CHKERR( DMSetUp(self.dm) )             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_self->dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 85, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":86
+ *     def setUp(self):
+ *         CHKERR( DMSetUp(self.dm) )
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     # --- application context ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_indices);
-  __pyx_r = __pyx_v_indices;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/AO.pyx":93
- *         return bytes2str(cval)
+  /* "PETSc/DM.pyx":84
+ *         CHKERR( DMSetFromOptions(self.dm) )
  * 
- *     def app2petsc(self, indices):             # <<<<<<<<<<<<<<
- *         cdef PetscIS iset = NULL
- *         cdef PetscInt nidx = 0, *idx = NULL
+ *     def setUp(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetUp(self.dm) )
+ *         return self
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.app2petsc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_indices);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/AO.pyx":104
- *         return indices
+/* "PETSc/DM.pyx":90
+ *     # --- application context ---
+ * 
+ *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
+ *         self.set_attr('__appctx__', appctx)
  * 
- *     def petsc2app(self, indices):             # <<<<<<<<<<<<<<
- *         cdef PetscIS iset = NULL
- *         cdef PetscInt nidx = 0, *idx = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_17petsc2app(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2AO_16petsc2app[] = "AO.petsc2app(self, indices)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_17petsc2app(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_indices = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_25setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_24setAppCtx[] = "DM.setAppCtx(self, appctx)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_25setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_appctx = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("petsc2app (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setAppCtx (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_appctx,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -196516,242 +200135,239 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_17petsc2app(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_indices)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_appctx)) != 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, "petsc2app") < 0)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) __PYX_ERR(40, 90, __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_indices = values[0];
+    __pyx_v_appctx = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("petsc2app", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[39]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 90, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.petsc2app", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2AO_16petsc2app(((struct PyPetscAOObject *)__pyx_v_self), __pyx_v_indices);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_24setAppCtx(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_appctx);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_16petsc2app(struct PyPetscAOObject *__pyx_v_self, PyObject *__pyx_v_indices) {
-  IS __pyx_v_iset;
-  PetscInt __pyx_v_nidx;
-  PetscInt *__pyx_v_idx;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_24setAppCtx(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_appctx) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  IS __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("petsc2app", 0);
-  __Pyx_INCREF(__pyx_v_indices);
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("setAppCtx", 0);
 
-  /* "PETSc/AO.pyx":105
+  /* "PETSc/DM.pyx":91
  * 
- *     def petsc2app(self, indices):
- *         cdef PetscIS iset = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt nidx = 0, *idx = NULL
- *         if isinstance(indices, IS):
+ *     def setAppCtx(self, appctx):
+ *         self.set_attr('__appctx__', appctx)             # <<<<<<<<<<<<<<
+ * 
+ *     def getAppCtx(self):
  */
-  __pyx_v_iset = NULL;
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__"), __pyx_v_appctx); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/AO.pyx":106
- *     def petsc2app(self, indices):
- *         cdef PetscIS iset = NULL
- *         cdef PetscInt nidx = 0, *idx = NULL             # <<<<<<<<<<<<<<
- *         if isinstance(indices, IS):
- *             iset = (<IS>indices).iset
+  /* "PETSc/DM.pyx":90
+ *     # --- application context ---
+ * 
+ *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
+ *         self.set_attr('__appctx__', appctx)
+ * 
  */
-  __pyx_v_nidx = 0;
-  __pyx_v_idx = NULL;
 
-  /* "PETSc/AO.pyx":107
- *         cdef PetscIS iset = NULL
- *         cdef PetscInt nidx = 0, *idx = NULL
- *         if isinstance(indices, IS):             # <<<<<<<<<<<<<<
- *             iset = (<IS>indices).iset
- *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )
- */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_indices, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); 
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-    /* "PETSc/AO.pyx":108
- *         cdef PetscInt nidx = 0, *idx = NULL
- *         if isinstance(indices, IS):
- *             iset = (<IS>indices).iset             # <<<<<<<<<<<<<<
- *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )
- *         else:
+/* "PETSc/DM.pyx":93
+ *         self.set_attr('__appctx__', appctx)
+ * 
+ *     def getAppCtx(self):             # <<<<<<<<<<<<<<
+ *         return self.get_attr('__appctx__')
+ * 
  */
-    __pyx_t_3 = ((struct PyPetscISObject *)__pyx_v_indices)->iset;
-    __pyx_v_iset = __pyx_t_3;
 
-    /* "PETSc/AO.pyx":109
- *         if isinstance(indices, IS):
- *             iset = (<IS>indices).iset
- *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )             # <<<<<<<<<<<<<<
- *         else:
- *             indices = oarray_i(indices, &nidx, &idx)
- */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOPetscToApplicationIS(__pyx_v_self->ao, __pyx_v_iset)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  /*else*/ {
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_27getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_26getAppCtx[] = "DM.getAppCtx(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_27getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getAppCtx (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getAppCtx", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAppCtx", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_26getAppCtx(((struct PyPetscDMObject *)__pyx_v_self));
 
-    /* "PETSc/AO.pyx":111
- *             CHKERR( AOPetscToApplicationIS(self.ao, iset) )
- *         else:
- *             indices = oarray_i(indices, &nidx, &idx)             # <<<<<<<<<<<<<<
- *             CHKERR( AOPetscToApplication(self.ao, nidx, idx) )
- *         return indices
- */
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_i(__pyx_v_indices, (&__pyx_v_nidx), (&__pyx_v_idx))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_5);
-    __pyx_t_5 = 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-    /* "PETSc/AO.pyx":112
- *         else:
- *             indices = oarray_i(indices, &nidx, &idx)
- *             CHKERR( AOPetscToApplication(self.ao, nidx, idx) )             # <<<<<<<<<<<<<<
- *         return indices
- * 
- */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOPetscToApplication(__pyx_v_self->ao, __pyx_v_nidx, __pyx_v_idx)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_L3:;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_26getAppCtx(struct PyPetscDMObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("getAppCtx", 0);
 
-  /* "PETSc/AO.pyx":113
- *             indices = oarray_i(indices, &nidx, &idx)
- *             CHKERR( AOPetscToApplication(self.ao, nidx, idx) )
- *         return indices             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":94
  * 
- * # --------------------------------------------------------------------
+ *     def getAppCtx(self):
+ *         return self.get_attr('__appctx__')             # <<<<<<<<<<<<<<
+ * 
+ *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_indices);
-  __pyx_r = __pyx_v_indices;
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__appctx__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 94, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/AO.pyx":104
- *         return indices
+  /* "PETSc/DM.pyx":93
+ *         self.set_attr('__appctx__', appctx)
+ * 
+ *     def getAppCtx(self):             # <<<<<<<<<<<<<<
+ *         return self.get_attr('__appctx__')
  * 
- *     def petsc2app(self, indices):             # <<<<<<<<<<<<<<
- *         cdef PetscIS iset = NULL
- *         cdef PetscInt nidx = 0, *idx = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.AO.petsc2app", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_indices);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":31
+/* "PETSc/DM.pyx":98
  *     #
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.dm
- *         self.dm  = NULL
+ *     def getBlockSize(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt bs = 1
+ *         CHKERR( DMGetBlockSize(self.dm, &bs) )
  */
 
 /* Python wrapper */
-static int __pyx_pw_8petsc4py_5PETSc_2DM_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8petsc4py_5PETSc_2DM_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_29getBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_28getBlockSize[] = "DM.getBlockSize(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_29getBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getBlockSize (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_8petsc4py_5PETSc_2DM___cinit__(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getBlockSize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBlockSize", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_28getBlockSize(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8petsc4py_5PETSc_2DM___cinit__(struct PyPetscDMObject *__pyx_v_self) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_28getBlockSize(struct PyPetscDMObject *__pyx_v_self) {
+  PetscInt __pyx_v_bs;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getBlockSize", 0);
 
-  /* "PETSc/DM.pyx":32
+  /* "PETSc/DM.pyx":99
  * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.dm             # <<<<<<<<<<<<<<
- *         self.dm  = NULL
+ *     def getBlockSize(self):
+ *         cdef PetscInt bs = 1             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetBlockSize(self.dm, &bs) )
+ *         return toInt(bs)
+ */
+  __pyx_v_bs = 1;
+
+  /* "PETSc/DM.pyx":100
+ *     def getBlockSize(self):
+ *         cdef PetscInt bs = 1
+ *         CHKERR( DMGetBlockSize(self.dm, &bs) )             # <<<<<<<<<<<<<<
+ *         return toInt(bs)
  * 
  */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->dm));
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetBlockSize(__pyx_v_self->dm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 100, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":33
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.dm
- *         self.dm  = NULL             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":101
+ *         cdef PetscInt bs = 1
+ *         CHKERR( DMGetBlockSize(self.dm, &bs) )
+ *         return toInt(bs)             # <<<<<<<<<<<<<<
  * 
- *     def view(self, Viewer viewer=None):
+ *     def setVecType(self, vec_type):
  */
-  __pyx_v_self->dm = NULL;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 101, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":31
+  /* "PETSc/DM.pyx":98
  *     #
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.dm
- *         self.dm  = NULL
+ *     def getBlockSize(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt bs = 1
+ *         CHKERR( DMGetBlockSize(self.dm, &bs) )
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getBlockSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":35
- *         self.dm  = NULL
+/* "PETSc/DM.pyx":103
+ *         return toInt(bs)
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
+ *     def setVecType(self, vec_type):             # <<<<<<<<<<<<<<
+ *         cdef PetscVecType vtype = NULL
+ *         vec_type = str2bytes(vec_type, &vtype)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_2view[] = "DM.view(self, Viewer viewer=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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_8petsc4py_5PETSc_2DM_31setVecType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_30setVecType[] = "DM.setVecType(self, vec_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_31setVecType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_vec_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setVecType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vec_type,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);
@@ -196763,210 +200379,295 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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_vec_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, "view") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVecType") < 0)) __PYX_ERR(40, 103, __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_vec_type = 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[40]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setVecType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 103, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setVecType", __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[40]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_2view(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_viewer);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_30setVecType(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vec_type);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_30setVecType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_vec_type) {
+  const char* __pyx_v_vtype;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setVecType", 0);
+  __Pyx_INCREF(__pyx_v_vec_type);
+
+  /* "PETSc/DM.pyx":104
+ * 
+ *     def setVecType(self, vec_type):
+ *         cdef PetscVecType vtype = NULL             # <<<<<<<<<<<<<<
+ *         vec_type = str2bytes(vec_type, &vtype)
+ *         CHKERR( DMSetVecType(self.dm, vtype) )
+ */
+  __pyx_v_vtype = NULL;
+
+  /* "PETSc/DM.pyx":105
+ *     def setVecType(self, vec_type):
+ *         cdef PetscVecType vtype = NULL
+ *         vec_type = str2bytes(vec_type, &vtype)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetVecType(self.dm, vtype) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_vec_type, (&__pyx_v_vtype)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_vec_type, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":106
+ *         cdef PetscVecType vtype = NULL
+ *         vec_type = str2bytes(vec_type, &vtype)
+ *         CHKERR( DMSetVecType(self.dm, vtype) )             # <<<<<<<<<<<<<<
+ * 
+ *     def createGlobalVec(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetVecType(__pyx_v_self->dm, __pyx_v_vtype)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 106, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":103
+ *         return toInt(bs)
+ * 
+ *     def setVecType(self, vec_type):             # <<<<<<<<<<<<<<
+ *         cdef PetscVecType vtype = NULL
+ *         vec_type = str2bytes(vec_type, &vtype)
+ */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setVecType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_vec_type);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_2view(struct PyPetscDMObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_vwr;
+/* "PETSc/DM.pyx":108
+ *         CHKERR( DMSetVecType(self.dm, vtype) )
+ * 
+ *     def createGlobalVec(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec vg = Vec()
+ *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_33createGlobalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_32createGlobalVec[] = "DM.createGlobalVec(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_33createGlobalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("createGlobalVec (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("createGlobalVec", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createGlobalVec", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_32createGlobalVec(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_32createGlobalVec(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_vg = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   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("createGlobalVec", 0);
 
-  /* "PETSc/DM.pyx":36
+  /* "PETSc/DM.pyx":109
  * 
- *     def view(self, Viewer viewer=None):
- *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( DMView(self.dm, vwr) )
+ *     def createGlobalVec(self):
+ *         cdef Vec vg = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )
+ *         return vg
  */
-  __pyx_v_vwr = NULL;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 109, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_vg = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":37
- *     def view(self, Viewer viewer=None):
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( DMView(self.dm, vwr) )
+  /* "PETSc/DM.pyx":110
+ *     def createGlobalVec(self):
+ *         cdef Vec vg = Vec()
+ *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )             # <<<<<<<<<<<<<<
+ *         return vg
  * 
  */
-  __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_8petsc4py_5PETSc_CHKERR(DMCreateGlobalVector(__pyx_v_self->dm, (&__pyx_v_vg->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 110, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":38
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( DMView(self.dm, vwr) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":111
+ *         cdef Vec vg = Vec()
+ *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )
+ *         return vg             # <<<<<<<<<<<<<<
  * 
- *     def destroy(self):
+ *     def createLocalVec(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMView(__pyx_v_self->dm, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_vg));
+  __pyx_r = ((PyObject *)__pyx_v_vg);
+  goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":35
- *         self.dm  = NULL
+  /* "PETSc/DM.pyx":108
+ *         CHKERR( DMSetVecType(self.dm, vtype) )
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
+ *     def createGlobalVec(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec vg = Vec()
+ *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createGlobalVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_vg);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":40
- *         CHKERR( DMView(self.dm, vwr) )
+/* "PETSc/DM.pyx":113
+ *         return vg
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMDestroy(&self.dm) )
- *         return self
+ *     def createLocalVec(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec vl = Vec()
+ *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_4destroy[] = "DM.destroy(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_35createLocalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_34createLocalVec[] = "DM.createLocalVec(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_35createLocalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createLocalVec (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_8petsc4py_5PETSc_2DM_4destroy(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("createLocalVec", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createLocalVec", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_34createLocalVec(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_4destroy(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_34createLocalVec(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_vl = 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("destroy", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("createLocalVec", 0);
 
-  /* "PETSc/DM.pyx":41
+  /* "PETSc/DM.pyx":114
  * 
- *     def destroy(self):
- *         CHKERR( DMDestroy(&self.dm) )             # <<<<<<<<<<<<<<
- *         return self
+ *     def createLocalVec(self):
+ *         cdef Vec vl = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
+ *         return vl
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 114, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_vl = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":115
+ *     def createLocalVec(self):
+ *         cdef Vec vl = Vec()
+ *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )             # <<<<<<<<<<<<<<
+ *         return vl
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDestroy((&__pyx_v_self->dm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateLocalVector(__pyx_v_self->dm, (&__pyx_v_vl->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 115, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":42
- *     def destroy(self):
- *         CHKERR( DMDestroy(&self.dm) )
- *         return self             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":116
+ *         cdef Vec vl = Vec()
+ *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
+ *         return vl             # <<<<<<<<<<<<<<
  * 
- *     def create(self, comm=None):
+ *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(((PyObject *)__pyx_v_vl));
+  __pyx_r = ((PyObject *)__pyx_v_vl);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":40
- *         CHKERR( DMView(self.dm, vwr) )
+  /* "PETSc/DM.pyx":113
+ *         return vg
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMDestroy(&self.dm) )
- *         return self
+ *     def createLocalVec(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec vl = Vec()
+ *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createLocalVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_vl);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":44
- *         return self
+/* "PETSc/DM.pyx":118
+ *         return vl
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM newdm = NULL
+ *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_6create[] = "DM.create(self, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_36globalToLocal[] = "DM.globalToLocal(self, Vec vg, Vec vl, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_vg = 0;
+  struct PyPetscVecObject *__pyx_v_vl = 0;
+  PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  __Pyx_RefNannySetupContext("globalToLocal (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_vg,&__pyx_n_s_vl,&__pyx_n_s_addv,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;
@@ -196974,111 +200675,105 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_7create(PyObject *__pyx_v_self, P
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vg)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vl)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("globalToLocal", 0, 2, 3, 1); __PYX_ERR(40, 118, __pyx_L3_error)
+        }
+        case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[0] = value; kw_args--; }
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
+          if (value) { values[2] = 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[40]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "globalToLocal") < 0)) __PYX_ERR(40, 118, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
+        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_comm = values[0];
+    __pyx_v_vg = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_vl = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_addv = values[2];
   }
   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[40]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("globalToLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 118, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.globalToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_6create(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_comm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) __PYX_ERR(40, 118, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) __PYX_ERR(40, 118, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_36globalToLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vg, __pyx_v_vl, __pyx_v_addv);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_6create(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_ccomm;
-  DM __pyx_v_newdm;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_36globalToLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg, struct PyPetscVecObject *__pyx_v_vl, PyObject *__pyx_v_addv) {
+  InsertMode __pyx_v_im;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
+  InsertMode __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("globalToLocal", 0);
 
-  /* "PETSc/DM.pyx":45
+  /* "PETSc/DM.pyx":119
  * 
- *     def create(self, comm=None):
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMCreate(ccomm, &newdm) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
-
-  /* "PETSc/DM.pyx":46
- *     def create(self, comm=None):
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreate(ccomm, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DM.pyx":47
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMCreate(ccomm, &newdm) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self
+ *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
+ *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
+ *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(40, 119, __pyx_L1_error)
+  __pyx_v_im = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":48
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMCreate(ccomm, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
- *         return self
+  /* "PETSc/DM.pyx":120
+ *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->dm = __pyx_v_newdm;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGlobalToLocalBegin(__pyx_v_self->dm, __pyx_v_vg->vec, __pyx_v_im, __pyx_v_vl->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 120, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":49
- *         CHKERR( DMCreate(ccomm, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":121
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
+ *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def clone(self):
+ *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=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_8petsc4py_5PETSc_CHKERR(DMGlobalToLocalEnd(__pyx_v_self->dm, __pyx_v_vg->vec, __pyx_v_im, __pyx_v_vl->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 121, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":44
- *         return self
+  /* "PETSc/DM.pyx":118
+ *         return vl
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM newdm = NULL
+ *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.globalToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -197086,143 +200781,175 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_6create(struct PyPetscDMObject *_
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":51
- *         return self
+/* "PETSc/DM.pyx":123
+ *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
  * 
- *     def clone(self):             # <<<<<<<<<<<<<<
- *         cdef DM dm = type(self)()
- *         CHKERR( DMClone(self.dm, &dm.dm) )
+ *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_9clone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_8clone[] = "DM.clone(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_9clone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_38localToGlobal[] = "DM.localToGlobal(self, Vec vl, Vec vg, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_vl = 0;
+  struct PyPetscVecObject *__pyx_v_vg = 0;
+  PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("clone (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("clone", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "clone", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_8clone(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("localToGlobal (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vl,&__pyx_n_s_vg,&__pyx_n_s_addv,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_vl)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vg)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("localToGlobal", 0, 2, 3, 1); __PYX_ERR(40, 123, __pyx_L3_error)
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "localToGlobal") < 0)) __PYX_ERR(40, 123, __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_vl = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_vg = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_addv = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("localToGlobal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 123, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.localToGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) __PYX_ERR(40, 123, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) __PYX_ERR(40, 123, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_38localToGlobal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vl, __pyx_v_vg, __pyx_v_addv);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_8clone(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscDMObject *__pyx_v_dm = 0;
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_38localToGlobal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl, struct PyPetscVecObject *__pyx_v_vg, PyObject *__pyx_v_addv) {
+  InsertMode __pyx_v_im;
   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;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("clone", 0);
+  InsertMode __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("localToGlobal", 0);
 
-  /* "PETSc/DM.pyx":52
+  /* "PETSc/DM.pyx":124
  * 
- *     def clone(self):
- *         cdef DM dm = type(self)()             # <<<<<<<<<<<<<<
- *         CHKERR( DMClone(self.dm, &dm.dm) )
- *         return dm
+ *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
+ *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
+ *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
  */
-  __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_filename = __pyx_f[40]; __pyx_lineno = 52; __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[40]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __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_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(40, 124, __pyx_L1_error)
+  __pyx_v_im = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":53
- *     def clone(self):
- *         cdef DM dm = type(self)()
- *         CHKERR( DMClone(self.dm, &dm.dm) )             # <<<<<<<<<<<<<<
- *         return dm
+  /* "PETSc/DM.pyx":125
+ *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMClone(__pyx_v_self->dm, (&__pyx_v_dm->dm))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMLocalToGlobalBegin(__pyx_v_self->dm, __pyx_v_vl->vec, __pyx_v_im, __pyx_v_vg->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 125, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":54
- *         cdef DM dm = type(self)()
- *         CHKERR( DMClone(self.dm, &dm.dm) )
- *         return dm             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":126
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
+ *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def setType(self, dm_type):
+ *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
-  __pyx_r = ((PyObject *)__pyx_v_dm);
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMLocalToGlobalEnd(__pyx_v_self->dm, __pyx_v_vl->vec, __pyx_v_im, __pyx_v_vg->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 126, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":51
- *         return self
+  /* "PETSc/DM.pyx":123
+ *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
  * 
- *     def clone(self):             # <<<<<<<<<<<<<<
- *         cdef DM dm = type(self)()
- *         CHKERR( DMClone(self.dm, &dm.dm) )
+ *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
  */
 
   /* 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("petsc4py.PETSc.DM.clone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.localToGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":56
- *         return dm
+/* "PETSc/DM.pyx":128
+ *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
  * 
- *     def setType(self, dm_type):             # <<<<<<<<<<<<<<
- *         cdef const_char *cval = NULL
- *         dm_type = str2bytes(dm_type, &cval)
+ *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_10setType[] = "DM.setType(self, dm_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_dm_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_40localToLocal[] = "DM.localToLocal(self, Vec vl, Vec vlg, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_vl = 0;
+  struct PyPetscVecObject *__pyx_v_vlg = 0;
+  PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("localToLocal (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm_type,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vl,&__pyx_n_s_vlg,&__pyx_n_s_addv,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;
@@ -197230,404 +200957,437 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_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_dm_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vl)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vlg)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("localToLocal", 0, 2, 3, 1); __PYX_ERR(40, 128, __pyx_L3_error)
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
+          if (value) { values[2] = 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[40]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "localToLocal") < 0)) __PYX_ERR(40, 128, __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);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_dm_type = values[0];
+    __pyx_v_vl = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_vlg = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_addv = values[2];
   }
   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[40]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("localToLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 128, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.localToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_10setType(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm_type);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) __PYX_ERR(40, 128, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vlg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vlg", 0))) __PYX_ERR(40, 128, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vl, __pyx_v_vlg, __pyx_v_addv);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_10setType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl, struct PyPetscVecObject *__pyx_v_vlg, PyObject *__pyx_v_addv) {
+  InsertMode __pyx_v_im;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  InsertMode __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_dm_type);
+  __Pyx_RefNannySetupContext("localToLocal", 0);
 
-  /* "PETSc/DM.pyx":57
+  /* "PETSc/DM.pyx":129
  * 
- *     def setType(self, dm_type):
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         dm_type = str2bytes(dm_type, &cval)
- *         CHKERR( DMSetType(self.dm, cval) )
+ *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
+ *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
+ *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
  */
-  __pyx_v_cval = NULL;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(40, 129, __pyx_L1_error)
+  __pyx_v_im = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":58
- *     def setType(self, dm_type):
- *         cdef const_char *cval = NULL
- *         dm_type = str2bytes(dm_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetType(self.dm, cval) )
+  /* "PETSc/DM.pyx":130
+ *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_dm_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_dm_type, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMLocalToLocalBegin(__pyx_v_self->dm, __pyx_v_vl->vec, __pyx_v_im, __pyx_v_vlg->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 130, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":59
- *         cdef const_char *cval = NULL
- *         dm_type = str2bytes(dm_type, &cval)
- *         CHKERR( DMSetType(self.dm, cval) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":131
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
+ *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def getType(self):
+ *     def getLGMap(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetType(__pyx_v_self->dm, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMLocalToLocalEnd(__pyx_v_self->dm, __pyx_v_vl->vec, __pyx_v_im, __pyx_v_vlg->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 131, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":56
- *         return dm
+  /* "PETSc/DM.pyx":128
+ *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
  * 
- *     def setType(self, dm_type):             # <<<<<<<<<<<<<<
- *         cdef const_char *cval = NULL
- *         dm_type = str2bytes(dm_type, &cval)
+ *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.localToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_dm_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":61
- *         CHKERR( DMSetType(self.dm, cval) )
+/* "PETSc/DM.pyx":133
+ *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
- *         cdef PetscDMType cval = NULL
- *         CHKERR( DMGetType(self.dm, &cval) )
+ *     def getLGMap(self):             # <<<<<<<<<<<<<<
+ *         cdef LGMap lgm = LGMap()
+ *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_12getType[] = "DM.getType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_43getLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_42getLGMap[] = "DM.getLGMap(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_43getLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getLGMap (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_8petsc4py_5PETSc_2DM_12getType(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getLGMap", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLGMap", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_12getType(struct PyPetscDMObject *__pyx_v_self) {
-  const char* __pyx_v_cval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscLGMapObject *__pyx_v_lgm = 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("getType", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLGMap", 0);
 
-  /* "PETSc/DM.pyx":62
+  /* "PETSc/DM.pyx":134
  * 
- *     def getType(self):
- *         cdef PetscDMType cval = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetType(self.dm, &cval) )
- *         return bytes2str(cval)
+ *     def getLGMap(self):
+ *         cdef LGMap lgm = LGMap()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
+ *         PetscINCREF(lgm.obj)
  */
-  __pyx_v_cval = NULL;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 134, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_lgm = ((struct PyPetscLGMapObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":63
- *     def getType(self):
- *         cdef PetscDMType cval = NULL
- *         CHKERR( DMGetType(self.dm, &cval) )             # <<<<<<<<<<<<<<
- *         return bytes2str(cval)
+  /* "PETSc/DM.pyx":135
+ *     def getLGMap(self):
+ *         cdef LGMap lgm = LGMap()
+ *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(lgm.obj)
+ *         return lgm
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLocalToGlobalMapping(__pyx_v_self->dm, (&__pyx_v_lgm->lgm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 135, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":136
+ *         cdef LGMap lgm = LGMap()
+ *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
+ *         PetscINCREF(lgm.obj)             # <<<<<<<<<<<<<<
+ *         return lgm
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetType(__pyx_v_self->dm, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_lgm->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":64
- *         cdef PetscDMType cval = NULL
- *         CHKERR( DMGetType(self.dm, &cval) )
- *         return bytes2str(cval)             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":137
+ *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
+ *         PetscINCREF(lgm.obj)
+ *         return lgm             # <<<<<<<<<<<<<<
  * 
- *     def getDimension(self):
+ *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 64; __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_lgm));
+  __pyx_r = ((PyObject *)__pyx_v_lgm);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":61
- *         CHKERR( DMSetType(self.dm, cval) )
+  /* "PETSc/DM.pyx":133
+ *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
- *         cdef PetscDMType cval = NULL
- *         CHKERR( DMGetType(self.dm, &cval) )
+ *     def getLGMap(self):             # <<<<<<<<<<<<<<
+ *         cdef LGMap lgm = LGMap()
+ *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLGMap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_lgm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":66
- *         return bytes2str(cval)
+/* "PETSc/DM.pyx":141
+ *     #
  * 
- *     def getDimension(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt dim = 0
- *         CHKERR( DMGetDimension(self.dm, &dim) )
+ *     def getCoordinateDM(self):             # <<<<<<<<<<<<<<
+ *         cdef DM cdm = type(self)()
+ *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_15getDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_14getDimension[] = "DM.getDimension(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_15getDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_45getCoordinateDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_44getCoordinateDM[] = "DM.getCoordinateDM(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_45getCoordinateDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDimension (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getCoordinateDM (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDimension", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimension", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_14getDimension(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getCoordinateDM", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoordinateDM", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_14getDimension(struct PyPetscDMObject *__pyx_v_self) {
-  PetscInt __pyx_v_dim;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscDMObject *__pyx_v_cdm = 0;
   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("getDimension", 0);
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("getCoordinateDM", 0);
 
-  /* "PETSc/DM.pyx":67
+  /* "PETSc/DM.pyx":142
  * 
- *     def getDimension(self):
- *         cdef PetscInt dim = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetDimension(self.dm, &dim) )
- *         return toInt(dim)
+ *     def getCoordinateDM(self):
+ *         cdef DM cdm = type(self)()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
+ *         PetscINCREF(cdm.obj)
  */
-  __pyx_v_dim = 0;
+  __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(40, 142, __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(40, 142, __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_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 142, __pyx_L1_error)
+  __pyx_v_cdm = ((struct PyPetscDMObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":68
- *     def getDimension(self):
- *         cdef PetscInt dim = 0
- *         CHKERR( DMGetDimension(self.dm, &dim) )             # <<<<<<<<<<<<<<
- *         return toInt(dim)
+  /* "PETSc/DM.pyx":143
+ *     def getCoordinateDM(self):
+ *         cdef DM cdm = type(self)()
+ *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(cdm.obj)
+ *         return cdm
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinateDM(__pyx_v_self->dm, (&__pyx_v_cdm->dm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(40, 143, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":144
+ *         cdef DM cdm = type(self)()
+ *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
+ *         PetscINCREF(cdm.obj)             # <<<<<<<<<<<<<<
+ *         return cdm
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDimension(__pyx_v_self->dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_cdm->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":69
- *         cdef PetscInt dim = 0
- *         CHKERR( DMGetDimension(self.dm, &dim) )
- *         return toInt(dim)             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":145
+ *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
+ *         PetscINCREF(cdm.obj)
+ *         return cdm             # <<<<<<<<<<<<<<
  * 
- *     def setDimension(self, dim):
+ *     def getCoordinateSection(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_dim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 69; __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_cdm));
+  __pyx_r = ((PyObject *)__pyx_v_cdm);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":66
- *         return bytes2str(cval)
+  /* "PETSc/DM.pyx":141
+ *     #
  * 
- *     def getDimension(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt dim = 0
- *         CHKERR( DMGetDimension(self.dm, &dim) )
+ *     def getCoordinateDM(self):             # <<<<<<<<<<<<<<
+ *         cdef DM cdm = type(self)()
+ *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getDimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoordinateDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_cdm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":71
- *         return toInt(dim)
+/* "PETSc/DM.pyx":147
+ *         return cdm
  * 
- *     def setDimension(self, dim):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cdim = asInt(dim)
- *         CHKERR( DMSetDimension(self.dm, cdim) )
+ *     def getCoordinateSection(self):             # <<<<<<<<<<<<<<
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_17setDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_16setDimension[] = "DM.setDimension(self, dim)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_17setDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_dim = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_47getCoordinateSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_46getCoordinateSection[] = "DM.getCoordinateSection(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_47getCoordinateSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDimension (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dim,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_dim)) != 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, "setDimension") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 71; __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_dim = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDimension", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_16setDimension(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dim);
+  __Pyx_RefNannySetupContext("getCoordinateSection (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getCoordinateSection", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoordinateSection", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_16setDimension(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dim) {
-  PetscInt __pyx_v_cdim;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscSectionObject *__pyx_v_sec = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __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("setDimension", 0);
+  __Pyx_RefNannySetupContext("getCoordinateSection", 0);
 
-  /* "PETSc/DM.pyx":72
- * 
- *     def setDimension(self, dim):
- *         cdef PetscInt cdim = asInt(dim)             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetDimension(self.dm, cdim) )
+  /* "PETSc/DM.pyx":148
  * 
+ *     def getCoordinateSection(self):
+ *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cdim = __pyx_t_1;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 148, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":73
- *     def setDimension(self, dim):
- *         cdef PetscInt cdim = asInt(dim)
- *         CHKERR( DMSetDimension(self.dm, cdim) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":149
+ *     def getCoordinateSection(self):
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(sec.obj)
+ *         return sec
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinateSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 149, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":150
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
+ *         return sec
  * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
+
+  /* "PETSc/DM.pyx":151
+ *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)
+ *         return sec             # <<<<<<<<<<<<<<
  * 
+ *     def setCoordinates(self, Vec c not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->dm, __pyx_v_cdim)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_sec));
+  __pyx_r = ((PyObject *)__pyx_v_sec);
+  goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":71
- *         return toInt(dim)
+  /* "PETSc/DM.pyx":147
+ *         return cdm
  * 
- *     def setDimension(self, dim):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cdim = asInt(dim)
- *         CHKERR( DMSetDimension(self.dm, cdim) )
+ *     def getCoordinateSection(self):             # <<<<<<<<<<<<<<
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoordinateSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_sec);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":76
+/* "PETSc/DM.pyx":153
+ *         return sec
  * 
+ *     def setCoordinates(self, Vec c not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_19setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_18setOptionsPrefix[] = "DM.setOptionsPrefix(self, prefix)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_19setOptionsPrefix(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_8petsc4py_5PETSc_2DM_49setCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_48setCoordinates[] = "DM.setCoordinates(self, Vec c)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_c = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setCoordinates (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_c,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -197640,146 +201400,252 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_19setOptionsPrefix(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_c)) != 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[40]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCoordinates") < 0)) __PYX_ERR(40, 153, __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_c = ((struct PyPetscVecObject *)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[40]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCoordinates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 153, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_18setOptionsPrefix(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_prefix);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "c", 0))) __PYX_ERR(40, 153, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_c);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_18setOptionsPrefix(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c) {
   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;
+  __Pyx_RefNannySetupContext("setCoordinates", 0);
 
-  /* "PETSc/DM.pyx":77
+  /* "PETSc/DM.pyx":154
  * 
- *     def setOptionsPrefix(self, prefix):
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
+ *     def setCoordinates(self, Vec c not None):
+ *         CHKERR( DMSetCoordinates(self.dm, c.vec) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getCoordinates(self):
  */
-  __pyx_v_cval = NULL;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetCoordinates(__pyx_v_self->dm, __pyx_v_c->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 154, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":78
- *     def setOptionsPrefix(self, prefix):
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
+  /* "PETSc/DM.pyx":153
+ *         return sec
+ * 
+ *     def setCoordinates(self, Vec c not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":156
+ *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
+ * 
+ *     def getCoordinates(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec c = Vec()
+ *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_51getCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_50getCoordinates[] = "DM.getCoordinates(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_51getCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getCoordinates (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getCoordinates", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoordinates", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_c = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getCoordinates", 0);
+
+  /* "PETSc/DM.pyx":157
  * 
+ *     def getCoordinates(self):
+ *         cdef Vec c = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
+ *         PetscINCREF(c.obj)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 157, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_v_c = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":79
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":158
+ *     def getCoordinates(self):
+ *         cdef Vec c = Vec()
+ *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(c.obj)
+ *         return c
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinates(__pyx_v_self->dm, (&__pyx_v_c->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 158, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":159
+ *         cdef Vec c = Vec()
+ *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
+ *         PetscINCREF(c.obj)             # <<<<<<<<<<<<<<
+ *         return c
  * 
- *     def setFromOptions(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetOptionsPrefix(__pyx_v_self->dm, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_c->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":76
+  /* "PETSc/DM.pyx":160
+ *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
+ *         PetscINCREF(c.obj)
+ *         return c             # <<<<<<<<<<<<<<
  * 
+ *     def setCoordinatesLocal(self, Vec c not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_c));
+  __pyx_r = ((PyObject *)__pyx_v_c);
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":156
+ *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
+ *     def getCoordinates(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec c = Vec()
+ *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
+  __Pyx_XDECREF((PyObject *)__pyx_v_c);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":81
- *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
+/* "PETSc/DM.pyx":162
+ *         return c
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetFromOptions(self.dm) )
+ *     def setCoordinatesLocal(self, Vec c not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_20setFromOptions[] = "DM.setFromOptions(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_52setCoordinatesLocal[] = "DM.setCoordinatesLocal(self, Vec c)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_c = 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_8petsc4py_5PETSc_2DM_20setFromOptions(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setCoordinatesLocal (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_c,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_c)) != 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, "setCoordinatesLocal") < 0)) __PYX_ERR(40, 162, __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_c = ((struct PyPetscVecObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setCoordinatesLocal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 162, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinatesLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "c", 0))) __PYX_ERR(40, 162, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_c);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_20setFromOptions(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c) {
   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);
+  __Pyx_RefNannySetupContext("setCoordinatesLocal", 0);
 
-  /* "PETSc/DM.pyx":82
+  /* "PETSc/DM.pyx":163
  * 
- *     def setFromOptions(self):
- *         CHKERR( DMSetFromOptions(self.dm) )             # <<<<<<<<<<<<<<
+ *     def setCoordinatesLocal(self, Vec c not None):
+ *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def setUp(self):
+ *     def getCoordinatesLocal(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetFromOptions(__pyx_v_self->dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetCoordinatesLocal(__pyx_v_self->dm, __pyx_v_c->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 163, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":81
- *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
+  /* "PETSc/DM.pyx":162
+ *         return c
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetFromOptions(self.dm) )
+ *     def setCoordinatesLocal(self, Vec c not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
  * 
  */
 
@@ -197787,7 +201653,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_20setFromOptions(struct PyPetscDM
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinatesLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -197795,100 +201661,119 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_20setFromOptions(struct PyPetscDM
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":84
- *         CHKERR( DMSetFromOptions(self.dm) )
+/* "PETSc/DM.pyx":165
+ *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetUp(self.dm) )
- *         return self
+ *     def getCoordinatesLocal(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec c = Vec()
+ *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_23setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_22setUp[] = "DM.setUp(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_23setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_55getCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_54getCoordinatesLocal[] = "DM.getCoordinatesLocal(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_55getCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getCoordinatesLocal (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_8petsc4py_5PETSc_2DM_22setUp(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getCoordinatesLocal", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoordinatesLocal", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_22setUp(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_c = 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("setUp", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getCoordinatesLocal", 0);
 
-  /* "PETSc/DM.pyx":85
+  /* "PETSc/DM.pyx":166
  * 
- *     def setUp(self):
- *         CHKERR( DMSetUp(self.dm) )             # <<<<<<<<<<<<<<
- *         return self
+ *     def getCoordinatesLocal(self):
+ *         cdef Vec c = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
+ *         PetscINCREF(c.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 166, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_c = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":167
+ *     def getCoordinatesLocal(self):
+ *         cdef Vec c = Vec()
+ *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(c.obj)
+ *         return c
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinatesLocal(__pyx_v_self->dm, (&__pyx_v_c->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 167, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":168
+ *         cdef Vec c = Vec()
+ *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
+ *         PetscINCREF(c.obj)             # <<<<<<<<<<<<<<
+ *         return c
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_self->dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_c->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":86
- *     def setUp(self):
- *         CHKERR( DMSetUp(self.dm) )
- *         return self             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":169
+ *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
+ *         PetscINCREF(c.obj)
+ *         return c             # <<<<<<<<<<<<<<
  * 
- *     # --- application context ---
+ *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(((PyObject *)__pyx_v_c));
+  __pyx_r = ((PyObject *)__pyx_v_c);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":84
- *         CHKERR( DMSetFromOptions(self.dm) )
+  /* "PETSc/DM.pyx":165
+ *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetUp(self.dm) )
- *         return self
+ *     def getCoordinatesLocal(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec c = Vec()
+ *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoordinatesLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_c);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":90
- *     # --- application context ---
- * 
- *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
- *         self.set_attr('__appctx__', appctx)
+/* "PETSc/DM.pyx":173
+ *     #
  * 
+ *     def setMatType(self, mat_type):             # <<<<<<<<<<<<<<
+ *         """Set matrix type to be used by DM.createMat"""
+ *         cdef PetscMatType mtype = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_25setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_24setAppCtx[] = "DM.setAppCtx(self, appctx)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_25setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_appctx = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_56setMatType[] = "DM.setMatType(self, mat_type)\nSet matrix type to be used by DM.createMat";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_mat_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setAppCtx (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setMatType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_appctx,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat_type,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -197901,60 +201786,79 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_25setAppCtx(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_appctx)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat_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, "setAppCtx") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatType") < 0)) __PYX_ERR(40, 173, __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_appctx = values[0];
+    __pyx_v_mat_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMatType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 173, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setMatType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_24setAppCtx(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_appctx);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_mat_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_24setAppCtx(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_appctx) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_mat_type) {
+  const char* __pyx_v_mtype;
   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("setAppCtx", 0);
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setMatType", 0);
+  __Pyx_INCREF(__pyx_v_mat_type);
 
-  /* "PETSc/DM.pyx":91
- * 
- *     def setAppCtx(self, appctx):
- *         self.set_attr('__appctx__', appctx)             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":175
+ *     def setMatType(self, mat_type):
+ *         """Set matrix type to be used by DM.createMat"""
+ *         cdef PetscMatType mtype = NULL             # <<<<<<<<<<<<<<
+ *         mat_type = str2bytes(mat_type, &mtype)
+ *         CHKERR( DMSetMatType(self.dm, mtype) )
+ */
+  __pyx_v_mtype = NULL;
+
+  /* "PETSc/DM.pyx":176
+ *         """Set matrix type to be used by DM.createMat"""
+ *         cdef PetscMatType mtype = NULL
+ *         mat_type = str2bytes(mat_type, &mtype)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetMatType(self.dm, mtype) )
  * 
- *     def getAppCtx(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2, __pyx_v_appctx); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mat_type, (&__pyx_v_mtype)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 176, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_mat_type, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":90
- *     # --- application context ---
+  /* "PETSc/DM.pyx":177
+ *         cdef PetscMatType mtype = NULL
+ *         mat_type = str2bytes(mat_type, &mtype)
+ *         CHKERR( DMSetMatType(self.dm, mtype) )             # <<<<<<<<<<<<<<
  * 
- *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
- *         self.set_attr('__appctx__', appctx)
+ *     def createMat(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetMatType(__pyx_v_self->dm, __pyx_v_mtype)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 177, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":173
+ *     #
  * 
+ *     def setMatType(self, mat_type):             # <<<<<<<<<<<<<<
+ *         """Set matrix type to be used by DM.createMat"""
+ *         cdef PetscMatType mtype = NULL
  */
 
   /* function exit code */
@@ -197962,189 +201866,265 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_24setAppCtx(struct PyPetscDMObjec
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setMatType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_mat_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":93
- *         self.set_attr('__appctx__', appctx)
- * 
- *     def getAppCtx(self):             # <<<<<<<<<<<<<<
- *         return self.get_attr('__appctx__')
+/* "PETSc/DM.pyx":179
+ *         CHKERR( DMSetMatType(self.dm, mtype) )
  * 
+ *     def createMat(self):             # <<<<<<<<<<<<<<
+ *         cdef Mat mat = Mat()
+ *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_27getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_26getAppCtx[] = "DM.getAppCtx(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_27getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_59createMat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_58createMat[] = "DM.createMat(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_59createMat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getAppCtx (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createMat (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getAppCtx", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAppCtx", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_26getAppCtx(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("createMat", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createMat", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_58createMat(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_26getAppCtx(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_58createMat(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
   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("getAppCtx", 0);
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("createMat", 0);
 
-  /* "PETSc/DM.pyx":94
- * 
- *     def getAppCtx(self):
- *         return self.get_attr('__appctx__')             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":180
  * 
- *     #
+ *     def createMat(self):
+ *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
+ *         return mat
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_appctx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 94; __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(40, 180, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
+  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
-  goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":93
- *         self.set_attr('__appctx__', appctx)
+  /* "PETSc/DM.pyx":181
+ *     def createMat(self):
+ *         cdef Mat mat = Mat()
+ *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )             # <<<<<<<<<<<<<<
+ *         return mat
  * 
- *     def getAppCtx(self):             # <<<<<<<<<<<<<<
- *         return self.get_attr('__appctx__')
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateMatrix(__pyx_v_self->dm, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 181, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":182
+ *         cdef Mat mat = Mat()
+ *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
+ *         return mat             # <<<<<<<<<<<<<<
+ * 
+ *     def createInterpolation(self, DM dm not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_mat));
+  __pyx_r = ((PyObject *)__pyx_v_mat);
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":179
+ *         CHKERR( DMSetMatType(self.dm, mtype) )
  * 
+ *     def createMat(self):             # <<<<<<<<<<<<<<
+ *         cdef Mat mat = Mat()
+ *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createMat", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":98
- *     #
+/* "PETSc/DM.pyx":184
+ *         return mat
  * 
- *     def getBlockSize(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt bs = 1
- *         CHKERR( DMGetBlockSize(self.dm, &bs) )
+ *     def createInterpolation(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *         cdef Mat A = Mat()
+ *         cdef Vec scale = Vec()
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_29getBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_28getBlockSize[] = "DM.getBlockSize(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_29getBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_60createInterpolation[] = "DM.createInterpolation(self, DM dm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getBlockSize (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getBlockSize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBlockSize", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_28getBlockSize(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("createInterpolation (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm,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_dm)) != 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, "createInterpolation") < 0)) __PYX_ERR(40, 184, __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_dm = ((struct PyPetscDMObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("createInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 184, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createInterpolation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(40, 184, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_28getBlockSize(struct PyPetscDMObject *__pyx_v_self) {
-  PetscInt __pyx_v_bs;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  struct PyPetscVecObject *__pyx_v_scale = 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("getBlockSize", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("createInterpolation", 0);
 
-  /* "PETSc/DM.pyx":99
+  /* "PETSc/DM.pyx":185
  * 
- *     def getBlockSize(self):
- *         cdef PetscInt bs = 1             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetBlockSize(self.dm, &bs) )
- *         return toInt(bs)
+ *     def createInterpolation(self, DM dm not None):
+ *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
+ *         cdef Vec scale = Vec()
+ *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
  */
-  __pyx_v_bs = 1;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 185, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":100
- *     def getBlockSize(self):
- *         cdef PetscInt bs = 1
- *         CHKERR( DMGetBlockSize(self.dm, &bs) )             # <<<<<<<<<<<<<<
- *         return toInt(bs)
- * 
+  /* "PETSc/DM.pyx":186
+ *     def createInterpolation(self, DM dm not None):
+ *         cdef Mat A = Mat()
+ *         cdef Vec scale = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
+ *                                    &A.mat, &scale.vec))
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 186, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_scale = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":187
+ *         cdef Mat A = Mat()
+ *         cdef Vec scale = Vec()
+ *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,             # <<<<<<<<<<<<<<
+ *                                    &A.mat, &scale.vec))
+ *         return(A, scale)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetBlockSize(__pyx_v_self->dm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateInterpolation(__pyx_v_self->dm, __pyx_v_dm->dm, (&__pyx_v_A->mat), (&__pyx_v_scale->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 187, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":101
- *         cdef PetscInt bs = 1
- *         CHKERR( DMGetBlockSize(self.dm, &bs) )
- *         return toInt(bs)             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":189
+ *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
+ *                                    &A.mat, &scale.vec))
+ *         return(A, scale)             # <<<<<<<<<<<<<<
  * 
- *     def setVecType(self, vec_type):
+ *     def createInjection(self, DM dm not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 101; __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(40, 189, __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_scale));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_scale));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_scale));
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":98
- *     #
+  /* "PETSc/DM.pyx":184
+ *         return mat
  * 
- *     def getBlockSize(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt bs = 1
- *         CHKERR( DMGetBlockSize(self.dm, &bs) )
+ *     def createInterpolation(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *         cdef Mat A = Mat()
+ *         cdef Vec scale = Vec()
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getBlockSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createInterpolation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_A);
+  __Pyx_XDECREF((PyObject *)__pyx_v_scale);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":103
- *         return toInt(bs)
+/* "PETSc/DM.pyx":191
+ *         return(A, scale)
  * 
- *     def setVecType(self, vec_type):             # <<<<<<<<<<<<<<
- *         cdef PetscVecType vtype = NULL
- *         vec_type = str2bytes(vec_type, &vtype)
+ *     def createInjection(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *         cdef Mat inject = Mat()
+ *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_31setVecType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_30setVecType[] = "DM.setVecType(self, vec_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_31setVecType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_vec_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_62createInjection[] = "DM.createInjection(self, DM dm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setVecType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createInjection (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vec_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -198157,307 +202137,418 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_31setVecType(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_vec_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dm)) != 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, "setVecType") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createInjection") < 0)) __PYX_ERR(40, 191, __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_vec_type = values[0];
+    __pyx_v_dm = ((struct PyPetscDMObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setVecType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createInjection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 191, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setVecType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createInjection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_30setVecType(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vec_type);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(40, 191, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_62createInjection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_30setVecType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_vec_type) {
-  const char* __pyx_v_vtype;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_62createInjection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
+  struct PyPetscMatObject *__pyx_v_inject = 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("setVecType", 0);
-  __Pyx_INCREF(__pyx_v_vec_type);
+  __Pyx_RefNannySetupContext("createInjection", 0);
 
-  /* "PETSc/DM.pyx":104
+  /* "PETSc/DM.pyx":192
  * 
- *     def setVecType(self, vec_type):
- *         cdef PetscVecType vtype = NULL             # <<<<<<<<<<<<<<
- *         vec_type = str2bytes(vec_type, &vtype)
- *         CHKERR( DMSetVecType(self.dm, vtype) )
+ *     def createInjection(self, DM dm not None):
+ *         cdef Mat inject = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
+ *         return inject
  */
-  __pyx_v_vtype = NULL;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 192, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_inject = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":105
- *     def setVecType(self, vec_type):
- *         cdef PetscVecType vtype = NULL
- *         vec_type = str2bytes(vec_type, &vtype)             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetVecType(self.dm, vtype) )
+  /* "PETSc/DM.pyx":193
+ *     def createInjection(self, DM dm not None):
+ *         cdef Mat inject = Mat()
+ *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )             # <<<<<<<<<<<<<<
+ *         return inject
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_vec_type, (&__pyx_v_vtype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_vec_type, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateInjection(__pyx_v_self->dm, __pyx_v_dm->dm, (&__pyx_v_inject->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 193, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":106
- *         cdef PetscVecType vtype = NULL
- *         vec_type = str2bytes(vec_type, &vtype)
- *         CHKERR( DMSetVecType(self.dm, vtype) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":194
+ *         cdef Mat inject = Mat()
+ *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
+ *         return inject             # <<<<<<<<<<<<<<
  * 
- *     def createGlobalVec(self):
+ *     def createAggregates(self, DM dm not None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetVecType(__pyx_v_self->dm, __pyx_v_vtype)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_inject));
+  __pyx_r = ((PyObject *)__pyx_v_inject);
+  goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":103
- *         return toInt(bs)
+  /* "PETSc/DM.pyx":191
+ *         return(A, scale)
  * 
- *     def setVecType(self, vec_type):             # <<<<<<<<<<<<<<
- *         cdef PetscVecType vtype = NULL
- *         vec_type = str2bytes(vec_type, &vtype)
+ *     def createInjection(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *         cdef Mat inject = Mat()
+ *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setVecType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createInjection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_vec_type);
+  __Pyx_XDECREF((PyObject *)__pyx_v_inject);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":108
- *         CHKERR( DMSetVecType(self.dm, vtype) )
+/* "PETSc/DM.pyx":196
+ *         return inject
  * 
- *     def createGlobalVec(self):             # <<<<<<<<<<<<<<
- *         cdef Vec vg = Vec()
- *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )
+ *     def createAggregates(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *         cdef Mat mat = Mat()
+ *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_33createGlobalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_32createGlobalVec[] = "DM.createGlobalVec(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_33createGlobalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_64createAggregates[] = "DM.createAggregates(self, DM dm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createGlobalVec (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("createGlobalVec", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createGlobalVec", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_32createGlobalVec(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("createAggregates (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm,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_dm)) != 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, "createAggregates") < 0)) __PYX_ERR(40, 196, __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_dm = ((struct PyPetscDMObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("createAggregates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 196, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createAggregates", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(40, 196, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_32createGlobalVec(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscVecObject *__pyx_v_vg = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
+  struct PyPetscMatObject *__pyx_v_mat = 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("createGlobalVec", 0);
+  __Pyx_RefNannySetupContext("createAggregates", 0);
 
-  /* "PETSc/DM.pyx":109
+  /* "PETSc/DM.pyx":197
  * 
- *     def createGlobalVec(self):
- *         cdef Vec vg = Vec()             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )
- *         return vg
+ *     def createAggregates(self, DM dm not None):
+ *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
+ *         return mat
  */
-  __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[40]; __pyx_lineno = 109; __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(40, 197, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_vg = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":110
- *     def createGlobalVec(self):
- *         cdef Vec vg = Vec()
- *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )             # <<<<<<<<<<<<<<
- *         return vg
+  /* "PETSc/DM.pyx":198
+ *     def createAggregates(self, DM dm not None):
+ *         cdef Mat mat = Mat()
+ *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )             # <<<<<<<<<<<<<<
+ *         return mat
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateGlobalVector(__pyx_v_self->dm, (&__pyx_v_vg->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateAggregates(__pyx_v_self->dm, __pyx_v_dm->dm, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 198, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":111
- *         cdef Vec vg = Vec()
- *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )
- *         return vg             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":199
+ *         cdef Mat mat = Mat()
+ *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
+ *         return mat             # <<<<<<<<<<<<<<
  * 
- *     def createLocalVec(self):
+ *     def convert(self, dm_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_vg));
-  __pyx_r = ((PyObject *)__pyx_v_vg);
+  __Pyx_INCREF(((PyObject *)__pyx_v_mat));
+  __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":108
- *         CHKERR( DMSetVecType(self.dm, vtype) )
+  /* "PETSc/DM.pyx":196
+ *         return inject
  * 
- *     def createGlobalVec(self):             # <<<<<<<<<<<<<<
- *         cdef Vec vg = Vec()
- *         CHKERR( DMCreateGlobalVector(self.dm, &vg.vec) )
+ *     def createAggregates(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *         cdef Mat mat = Mat()
+ *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createGlobalVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createAggregates", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_vg);
+  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":113
- *         return vg
+/* "PETSc/DM.pyx":201
+ *         return mat
  * 
- *     def createLocalVec(self):             # <<<<<<<<<<<<<<
- *         cdef Vec vl = Vec()
- *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
+ *     def convert(self, dm_type):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         dm_type = str2bytes(dm_type, &cval)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_35createLocalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_34createLocalVec[] = "DM.createLocalVec(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_35createLocalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_66convert[] = "DM.convert(self, dm_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_dm_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createLocalVec (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("createLocalVec", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createLocalVec", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_34createLocalVec(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("convert (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm_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_dm_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, "convert") < 0)) __PYX_ERR(40, 201, __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_dm_type = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("convert", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 201, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_66convert(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_34createLocalVec(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscVecObject *__pyx_v_vl = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type) {
+  const char *__pyx_v_cval;
+  DM __pyx_v_newdm;
+  struct PyPetscDMObject *__pyx_v_dm = 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("createLocalVec", 0);
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("convert", 0);
+  __Pyx_INCREF(__pyx_v_dm_type);
 
-  /* "PETSc/DM.pyx":114
+  /* "PETSc/DM.pyx":202
  * 
- *     def createLocalVec(self):
- *         cdef Vec vl = Vec()             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
- *         return vl
+ *     def convert(self, dm_type):
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         dm_type = str2bytes(dm_type, &cval)
+ *         cdef PetscDM newdm = NULL
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/DM.pyx":203
+ *     def convert(self, dm_type):
+ *         cdef const_char *cval = NULL
+ *         dm_type = str2bytes(dm_type, &cval)             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMConvert(self.dm, cval, &newdm) )
  */
-  __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[40]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_dm_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 203, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_vl = ((struct PyPetscVecObject *)__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_dm_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":115
- *     def createLocalVec(self):
- *         cdef Vec vl = Vec()
- *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )             # <<<<<<<<<<<<<<
- *         return vl
+  /* "PETSc/DM.pyx":204
+ *         cdef const_char *cval = NULL
+ *         dm_type = str2bytes(dm_type, &cval)
+ *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMConvert(self.dm, cval, &newdm) )
+ *         cdef DM dm = <DM>subtype_DM(newdm)()
+ */
+  __pyx_v_newdm = NULL;
+
+  /* "PETSc/DM.pyx":205
+ *         dm_type = str2bytes(dm_type, &cval)
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMConvert(self.dm, cval, &newdm) )             # <<<<<<<<<<<<<<
+ *         cdef DM dm = <DM>subtype_DM(newdm)()
+ *         dm.dm = newdm
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMConvert(__pyx_v_self->dm, __pyx_v_cval, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 205, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":206
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMConvert(self.dm, cval, &newdm) )
+ *         cdef DM dm = <DM>subtype_DM(newdm)()             # <<<<<<<<<<<<<<
+ *         dm.dm = newdm
+ *         return dm
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 206, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 206, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_t_3;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":207
+ *         CHKERR( DMConvert(self.dm, cval, &newdm) )
+ *         cdef DM dm = <DM>subtype_DM(newdm)()
+ *         dm.dm = newdm             # <<<<<<<<<<<<<<
+ *         return dm
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateLocalVector(__pyx_v_self->dm, (&__pyx_v_vl->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/DM.pyx":116
- *         cdef Vec vl = Vec()
- *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
- *         return vl             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":208
+ *         cdef DM dm = <DM>subtype_DM(newdm)()
+ *         dm.dm = newdm
+ *         return dm             # <<<<<<<<<<<<<<
  * 
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
+ *     def refine(self, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_vl));
-  __pyx_r = ((PyObject *)__pyx_v_vl);
+  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
+  __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":113
- *         return vg
+  /* "PETSc/DM.pyx":201
+ *         return mat
  * 
- *     def createLocalVec(self):             # <<<<<<<<<<<<<<
- *         cdef Vec vl = Vec()
- *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
+ *     def convert(self, dm_type):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         dm_type = str2bytes(dm_type, &cval)
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createLocalVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_vl);
+  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
+  __Pyx_XDECREF(__pyx_v_dm_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":118
- *         return vl
+/* "PETSc/DM.pyx":210
+ *         return dm
  * 
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
+ *     def refine(self, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_36globalToLocal[] = "DM.globalToLocal(self, Vec vg, Vec vl, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_vg = 0;
-  struct PyPetscVecObject *__pyx_v_vl = 0;
-  PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69refine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_68refine[] = "DM.refine(self, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69refine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("globalToLocal (wrapper)", 0);
+  __Pyx_RefNannySetupContext("refine (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vg,&__pyx_n_s_vl,&__pyx_n_s_addv,0};
-    PyObject* values[3] = {0,0,0};
-    values[2] = ((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  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;
@@ -198465,146 +202556,178 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(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_vg)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vl)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("globalToLocal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
-          if (value) { values[2] = 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, "globalToLocal") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "refine") < 0)) __PYX_ERR(40, 210, __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_vg = ((struct PyPetscVecObject *)values[0]);
-    __pyx_v_vl = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_addv = values[2];
+    __pyx_v_comm = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("globalToLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("refine", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 210, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.globalToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.refine", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_36globalToLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vg, __pyx_v_vl, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_68refine(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_36globalToLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg, struct PyPetscVecObject *__pyx_v_vl, PyObject *__pyx_v_addv) {
-  InsertMode __pyx_v_im;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_dmcomm;
+  DM __pyx_v_newdm;
+  struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  InsertMode __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("globalToLocal", 0);
+  int __pyx_t_1;
+  MPI_Comm __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("refine", 0);
 
-  /* "PETSc/DM.pyx":119
+  /* "PETSc/DM.pyx":211
  * 
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
- *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
- *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
- *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
+ *     def refine(self, comm=None):
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *         dmcomm = def_Comm(comm, dmcomm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_im = __pyx_t_1;
+  __pyx_v_dmcomm = MPI_COMM_NULL;
 
-  /* "PETSc/DM.pyx":120
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )             # <<<<<<<<<<<<<<
- *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
+  /* "PETSc/DM.pyx":212
+ *     def refine(self, comm=None):
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )             # <<<<<<<<<<<<<<
+ *         dmcomm = def_Comm(comm, dmcomm)
+ *         cdef PetscDM newdm = NULL
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->dm), (&__pyx_v_dmcomm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 212, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":213
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *         dmcomm = def_Comm(comm, dmcomm)             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_dmcomm); if (unlikely(PyErr_Occurred())) __PYX_ERR(40, 213, __pyx_L1_error)
+  __pyx_v_dmcomm = __pyx_t_2;
+
+  /* "PETSc/DM.pyx":214
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *         dmcomm = def_Comm(comm, dmcomm)
+ *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
+ *         cdef DM dm = subtype_DM(newdm)()
+ */
+  __pyx_v_newdm = NULL;
+
+  /* "PETSc/DM.pyx":215
+ *         dmcomm = def_Comm(comm, dmcomm)
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )             # <<<<<<<<<<<<<<
+ *         cdef DM dm = subtype_DM(newdm)()
+ *         dm.dm = newdm
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRefine(__pyx_v_self->dm, __pyx_v_dmcomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 215, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":216
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
+ *         cdef DM dm = subtype_DM(newdm)()             # <<<<<<<<<<<<<<
+ *         dm.dm = newdm
+ *         return dm
+ */
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 216, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 216, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 216, __pyx_L1_error)
+  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_4);
+  __pyx_t_4 = 0;
+
+  /* "PETSc/DM.pyx":217
+ *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
+ *         cdef DM dm = subtype_DM(newdm)()
+ *         dm.dm = newdm             # <<<<<<<<<<<<<<
+ *         return dm
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGlobalToLocalBegin(__pyx_v_self->dm, __pyx_v_vg->vec, __pyx_v_im, __pyx_v_vl->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/DM.pyx":121
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
- *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":218
+ *         cdef DM dm = subtype_DM(newdm)()
+ *         dm.dm = newdm
+ *         return dm             # <<<<<<<<<<<<<<
  * 
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
+ *     def coarsen(self, comm=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGlobalToLocalEnd(__pyx_v_self->dm, __pyx_v_vg->vec, __pyx_v_im, __pyx_v_vl->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
+  __pyx_r = ((PyObject *)__pyx_v_dm);
+  goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":118
- *         return vl
+  /* "PETSc/DM.pyx":210
+ *         return dm
  * 
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
+ *     def refine(self, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.globalToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.refine", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":123
- *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
+/* "PETSc/DM.pyx":220
+ *         return dm
  * 
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
+ *     def coarsen(self, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_38localToGlobal[] = "DM.localToGlobal(self, Vec vl, Vec vg, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_vl = 0;
-  struct PyPetscVecObject *__pyx_v_vg = 0;
-  PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_70coarsen[] = "DM.coarsen(self, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("localToGlobal (wrapper)", 0);
+  __Pyx_RefNannySetupContext("coarsen (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vl,&__pyx_n_s_vg,&__pyx_n_s_addv,0};
-    PyObject* values[3] = {0,0,0};
-    values[2] = ((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  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;
@@ -198612,146 +202735,177 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(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_vl)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vg)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("localToGlobal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
-          if (value) { values[2] = 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, "localToGlobal") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "coarsen") < 0)) __PYX_ERR(40, 220, __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_vl = ((struct PyPetscVecObject *)values[0]);
-    __pyx_v_vg = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_addv = values[2];
+    __pyx_v_comm = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("localToGlobal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("coarsen", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 220, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.localToGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.coarsen", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_38localToGlobal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vl, __pyx_v_vg, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_38localToGlobal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl, struct PyPetscVecObject *__pyx_v_vg, PyObject *__pyx_v_addv) {
-  InsertMode __pyx_v_im;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_dmcomm;
+  DM __pyx_v_newdm;
+  struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  InsertMode __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("localToGlobal", 0);
+  int __pyx_t_1;
+  MPI_Comm __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("coarsen", 0);
 
-  /* "PETSc/DM.pyx":124
+  /* "PETSc/DM.pyx":221
  * 
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
- *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
- *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
- *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
+ *     def coarsen(self, comm=None):
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *         dmcomm = def_Comm(comm, dmcomm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_im = __pyx_t_1;
+  __pyx_v_dmcomm = MPI_COMM_NULL;
 
-  /* "PETSc/DM.pyx":125
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )             # <<<<<<<<<<<<<<
- *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
+  /* "PETSc/DM.pyx":222
+ *     def coarsen(self, comm=None):
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )             # <<<<<<<<<<<<<<
+ *         dmcomm = def_Comm(comm, dmcomm)
+ *         cdef PetscDM newdm = NULL
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->dm), (&__pyx_v_dmcomm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 222, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":223
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *         dmcomm = def_Comm(comm, dmcomm)             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_dmcomm); if (unlikely(PyErr_Occurred())) __PYX_ERR(40, 223, __pyx_L1_error)
+  __pyx_v_dmcomm = __pyx_t_2;
+
+  /* "PETSc/DM.pyx":224
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *         dmcomm = def_Comm(comm, dmcomm)
+ *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
+ *         cdef DM dm = subtype_DM(newdm)()
+ */
+  __pyx_v_newdm = NULL;
+
+  /* "PETSc/DM.pyx":225
+ *         dmcomm = def_Comm(comm, dmcomm)
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )             # <<<<<<<<<<<<<<
+ *         cdef DM dm = subtype_DM(newdm)()
+ *         dm.dm = newdm
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCoarsen(__pyx_v_self->dm, __pyx_v_dmcomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 225, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":226
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
+ *         cdef DM dm = subtype_DM(newdm)()             # <<<<<<<<<<<<<<
+ *         dm.dm = newdm
+ *         return dm
+ */
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 226, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 226, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 226, __pyx_L1_error)
+  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_4);
+  __pyx_t_4 = 0;
+
+  /* "PETSc/DM.pyx":227
+ *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
+ *         cdef DM dm = subtype_DM(newdm)()
+ *         dm.dm = newdm             # <<<<<<<<<<<<<<
+ *         return dm
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMLocalToGlobalBegin(__pyx_v_self->dm, __pyx_v_vl->vec, __pyx_v_im, __pyx_v_vg->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/DM.pyx":126
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
- *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":228
+ *         cdef DM dm = subtype_DM(newdm)()
+ *         dm.dm = newdm
+ *         return dm             # <<<<<<<<<<<<<<
  * 
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
+ *     def refineHierarchy(self, nlevels):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMLocalToGlobalEnd(__pyx_v_self->dm, __pyx_v_vl->vec, __pyx_v_im, __pyx_v_vg->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
+  __pyx_r = ((PyObject *)__pyx_v_dm);
+  goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":123
- *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
+  /* "PETSc/DM.pyx":220
+ *         return dm
  * 
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
+ *     def coarsen(self, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.localToGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.coarsen", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":128
- *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
+/* "PETSc/DM.pyx":230
+ *         return dm
  * 
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
+ *     def refineHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt i, n = asInt(nlevels)
+ *         cdef PetscDM *newdmf = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_40localToLocal[] = "DM.localToLocal(self, Vec vl, Vec vlg, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_vl = 0;
-  struct PyPetscVecObject *__pyx_v_vlg = 0;
-  PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_72refineHierarchy[] = "DM.refineHierarchy(self, nlevels)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nlevels = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("localToLocal (wrapper)", 0);
+  __Pyx_RefNannySetupContext("refineHierarchy (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vl,&__pyx_n_s_vlg,&__pyx_n_s_addv,0};
-    PyObject* values[3] = {0,0,0};
-    values[2] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nlevels,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;
@@ -198759,452 +202913,432 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(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_vl)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nlevels)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vlg)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("localToLocal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
-          if (value) { values[2] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "localToLocal") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "refineHierarchy") < 0)) __PYX_ERR(40, 230, __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_vl = ((struct PyPetscVecObject *)values[0]);
-    __pyx_v_vlg = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_addv = values[2];
+    __pyx_v_nlevels = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("localToLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("refineHierarchy", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 230, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.localToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.refineHierarchy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vlg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vlg", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vl, __pyx_v_vlg, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_nlevels);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl, struct PyPetscVecObject *__pyx_v_vlg, PyObject *__pyx_v_addv) {
-  InsertMode __pyx_v_im;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels) {
+  PetscInt __pyx_v_i;
+  PetscInt __pyx_v_n;
+  DM *__pyx_v_newdmf;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  struct PyPetscDMObject *__pyx_v_dmf = 0;
+  PyObject *__pyx_v_hierarchy = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  InsertMode __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("localToLocal", 0);
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("refineHierarchy", 0);
 
-  /* "PETSc/DM.pyx":129
+  /* "PETSc/DM.pyx":231
  * 
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
- *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
- *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
- *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
+ *     def refineHierarchy(self, nlevels):
+ *         cdef PetscInt i, n = asInt(nlevels)             # <<<<<<<<<<<<<<
+ *         cdef PetscDM *newdmf = NULL
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_im = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlevels); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 231, __pyx_L1_error)
+  __pyx_v_n = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":130
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )             # <<<<<<<<<<<<<<
- *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
- * 
+  /* "PETSc/DM.pyx":232
+ *     def refineHierarchy(self, nlevels):
+ *         cdef PetscInt i, n = asInt(nlevels)
+ *         cdef PetscDM *newdmf = NULL             # <<<<<<<<<<<<<<
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
+ *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMLocalToLocalBegin(__pyx_v_self->dm, __pyx_v_vl->vec, __pyx_v_im, __pyx_v_vlg->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_newdmf = NULL;
 
-  /* "PETSc/DM.pyx":131
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
- *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )             # <<<<<<<<<<<<<<
- * 
- *     def getLGMap(self):
+  /* "PETSc/DM.pyx":233
+ *         cdef PetscInt i, n = asInt(nlevels)
+ *         cdef PetscDM *newdmf = NULL
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
+ *         cdef DM dmf = None
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMLocalToLocalEnd(__pyx_v_self->dm, __pyx_v_vl->vec, __pyx_v_im, __pyx_v_vlg->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 233, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_newdmf)))); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 233, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_tmp = __pyx_t_3;
+  __pyx_t_3 = 0;
 
-  /* "PETSc/DM.pyx":128
- *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
- * 
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode im = insertmode(addv)
- *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
+  /* "PETSc/DM.pyx":234
+ *         cdef PetscDM *newdmf = NULL
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
+ *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )             # <<<<<<<<<<<<<<
+ *         cdef DM dmf = None
+ *         cdef list hierarchy = []
  */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRefineHierarchy(__pyx_v_self->dm, __pyx_v_n, __pyx_v_newdmf)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(40, 234, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.localToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DM.pyx":133
- *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
- * 
- *     def getLGMap(self):             # <<<<<<<<<<<<<<
- *         cdef LGMap lgm = LGMap()
- *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
+  /* "PETSc/DM.pyx":235
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
+ *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
+ *         cdef DM dmf = None             # <<<<<<<<<<<<<<
+ *         cdef list hierarchy = []
+ *         for i from 0 <= i < n:
  */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_dmf = ((struct PyPetscDMObject *)Py_None);
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_43getLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_42getLGMap[] = "DM.getLGMap(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_43getLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLGMap (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getLGMap", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLGMap", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(((struct PyPetscDMObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "PETSc/DM.pyx":236
+ *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
+ *         cdef DM dmf = None
+ *         cdef list hierarchy = []             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < n:
+ *             dmf = subtype_DM(newdmf[i])()
+ */
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 236, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_hierarchy = ((PyObject*)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscLGMapObject *__pyx_v_lgm = 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("getLGMap", 0);
+  /* "PETSc/DM.pyx":237
+ *         cdef DM dmf = None
+ *         cdef list hierarchy = []
+ *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
+ *             dmf = subtype_DM(newdmf[i])()
+ *             dmf.dm = newdmf[i]
+ */
+  __pyx_t_1 = __pyx_v_n;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-  /* "PETSc/DM.pyx":134
- * 
- *     def getLGMap(self):
- *         cdef LGMap lgm = LGMap()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
- *         PetscINCREF(lgm.obj)
+    /* "PETSc/DM.pyx":238
+ *         cdef list hierarchy = []
+ *         for i from 0 <= i < n:
+ *             dmf = subtype_DM(newdmf[i])()             # <<<<<<<<<<<<<<
+ *             dmf.dm = newdmf[i]
+ *             hierarchy.append(dmf)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_LGMap)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_lgm = ((struct PyPetscLGMapObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_newdmf[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 238, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 238, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 238, __pyx_L1_error)
+    __Pyx_DECREF_SET(__pyx_v_dmf, ((struct PyPetscDMObject *)__pyx_t_2));
+    __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":135
- *     def getLGMap(self):
- *         cdef LGMap lgm = LGMap()
- *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(lgm.obj)
- *         return lgm
+    /* "PETSc/DM.pyx":239
+ *         for i from 0 <= i < n:
+ *             dmf = subtype_DM(newdmf[i])()
+ *             dmf.dm = newdmf[i]             # <<<<<<<<<<<<<<
+ *             hierarchy.append(dmf)
+ *         return hierarchy
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLocalToGlobalMapping(__pyx_v_self->dm, (&__pyx_v_lgm->lgm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_dmf->dm = (__pyx_v_newdmf[__pyx_v_i]);
 
-  /* "PETSc/DM.pyx":136
- *         cdef LGMap lgm = LGMap()
- *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
- *         PetscINCREF(lgm.obj)             # <<<<<<<<<<<<<<
- *         return lgm
+    /* "PETSc/DM.pyx":240
+ *             dmf = subtype_DM(newdmf[i])()
+ *             dmf.dm = newdmf[i]
+ *             hierarchy.append(dmf)             # <<<<<<<<<<<<<<
+ *         return hierarchy
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_lgm->__pyx_base.obj);
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_hierarchy, ((PyObject *)__pyx_v_dmf)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(40, 240, __pyx_L1_error)
+  }
 
-  /* "PETSc/DM.pyx":137
- *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
- *         PetscINCREF(lgm.obj)
- *         return lgm             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":241
+ *             dmf.dm = newdmf[i]
+ *             hierarchy.append(dmf)
+ *         return hierarchy             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def coarsenHierarchy(self, nlevels):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_lgm));
-  __pyx_r = ((PyObject *)__pyx_v_lgm);
+  __Pyx_INCREF(__pyx_v_hierarchy);
+  __pyx_r = __pyx_v_hierarchy;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":133
- *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
+  /* "PETSc/DM.pyx":230
+ *         return dm
  * 
- *     def getLGMap(self):             # <<<<<<<<<<<<<<
- *         cdef LGMap lgm = LGMap()
- *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
+ *     def refineHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt i, n = asInt(nlevels)
+ *         cdef PetscDM *newdmf = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLGMap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.refineHierarchy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_lgm);
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF((PyObject *)__pyx_v_dmf);
+  __Pyx_XDECREF(__pyx_v_hierarchy);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":141
- *     #
+/* "PETSc/DM.pyx":243
+ *         return hierarchy
  * 
- *     def getCoordinateDM(self):             # <<<<<<<<<<<<<<
- *         cdef DM cdm = type(self)()
- *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
+ *     def coarsenHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt i, n = asInt(nlevels)
+ *         cdef PetscDM *newdmc = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_45getCoordinateDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_44getCoordinateDM[] = "DM.getCoordinateDM(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_45getCoordinateDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_74coarsenHierarchy[] = "DM.coarsenHierarchy(self, nlevels)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nlevels = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCoordinateDM (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCoordinateDM", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoordinateDM", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("coarsenHierarchy (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nlevels,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_nlevels)) != 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, "coarsenHierarchy") < 0)) __PYX_ERR(40, 243, __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_nlevels = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("coarsenHierarchy", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 243, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.coarsenHierarchy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_nlevels);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscDMObject *__pyx_v_cdm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels) {
+  PetscInt __pyx_v_i;
+  PetscInt __pyx_v_n;
+  DM *__pyx_v_newdmc;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  struct PyPetscDMObject *__pyx_v_dmc = 0;
+  PyObject *__pyx_v_hierarchy = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  PetscInt __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getCoordinateDM", 0);
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("coarsenHierarchy", 0);
 
-  /* "PETSc/DM.pyx":142
+  /* "PETSc/DM.pyx":244
  * 
- *     def getCoordinateDM(self):
- *         cdef DM cdm = type(self)()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
- *         PetscINCREF(cdm.obj)
+ *     def coarsenHierarchy(self, nlevels):
+ *         cdef PetscInt i, n = asInt(nlevels)             # <<<<<<<<<<<<<<
+ *         cdef PetscDM *newdmc = NULL
+ *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
  */
-  __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_filename = __pyx_f[40]; __pyx_lineno = 142; __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[40]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __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_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cdm = ((struct PyPetscDMObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlevels); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 244, __pyx_L1_error)
+  __pyx_v_n = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":143
- *     def getCoordinateDM(self):
- *         cdef DM cdm = type(self)()
- *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(cdm.obj)
- *         return cdm
+  /* "PETSc/DM.pyx":245
+ *     def coarsenHierarchy(self, nlevels):
+ *         cdef PetscInt i, n = asInt(nlevels)
+ *         cdef PetscDM *newdmc = NULL             # <<<<<<<<<<<<<<
+ *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
+ *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinateDM(__pyx_v_self->dm, (&__pyx_v_cdm->dm))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_newdmc = NULL;
 
-  /* "PETSc/DM.pyx":144
- *         cdef DM cdm = type(self)()
- *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
- *         PetscINCREF(cdm.obj)             # <<<<<<<<<<<<<<
- *         return cdm
- * 
+  /* "PETSc/DM.pyx":246
+ *         cdef PetscInt i, n = asInt(nlevels)
+ *         cdef PetscDM *newdmc = NULL
+ *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
+ *         cdef DM dmc = None
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_cdm->__pyx_base.obj);
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 246, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_newdmc)))); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 246, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_tmp = __pyx_t_3;
+  __pyx_t_3 = 0;
 
-  /* "PETSc/DM.pyx":145
- *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
- *         PetscINCREF(cdm.obj)
- *         return cdm             # <<<<<<<<<<<<<<
- * 
- *     def getCoordinateSection(self):
+  /* "PETSc/DM.pyx":247
+ *         cdef PetscDM *newdmc = NULL
+ *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
+ *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )             # <<<<<<<<<<<<<<
+ *         cdef DM dmc = None
+ *         cdef list hierarchy = []
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_cdm));
-  __pyx_r = ((PyObject *)__pyx_v_cdm);
-  goto __pyx_L0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCoarsenHierarchy(__pyx_v_self->dm, __pyx_v_n, __pyx_v_newdmc)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(40, 247, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":141
- *     #
- * 
- *     def getCoordinateDM(self):             # <<<<<<<<<<<<<<
- *         cdef DM cdm = type(self)()
- *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
+  /* "PETSc/DM.pyx":248
+ *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
+ *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
+ *         cdef DM dmc = None             # <<<<<<<<<<<<<<
+ *         cdef list hierarchy = []
+ *         for i from 0 <= i < n:
  */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_dmc = ((struct PyPetscDMObject *)Py_None);
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoordinateDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_cdm);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DM.pyx":147
- *         return cdm
- * 
- *     def getCoordinateSection(self):             # <<<<<<<<<<<<<<
- *         cdef Section sec = Section()
- *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
+  /* "PETSc/DM.pyx":249
+ *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
+ *         cdef DM dmc = None
+ *         cdef list hierarchy = []             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < n:
+ *             dmc = subtype_DM(newdmc[i])()
  */
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 249, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_hierarchy = ((PyObject*)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_47getCoordinateSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_46getCoordinateSection[] = "DM.getCoordinateSection(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_47getCoordinateSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCoordinateSection (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCoordinateSection", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoordinateSection", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(((struct PyPetscDMObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscSectionObject *__pyx_v_sec = 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("getCoordinateSection", 0);
+  /* "PETSc/DM.pyx":250
+ *         cdef DM dmc = None
+ *         cdef list hierarchy = []
+ *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
+ *             dmc = subtype_DM(newdmc[i])()
+ *             dmc.dm = newdmc[i]
+ */
+  __pyx_t_1 = __pyx_v_n;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-  /* "PETSc/DM.pyx":148
- * 
- *     def getCoordinateSection(self):
- *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)
+    /* "PETSc/DM.pyx":251
+ *         cdef list hierarchy = []
+ *         for i from 0 <= i < n:
+ *             dmc = subtype_DM(newdmc[i])()             # <<<<<<<<<<<<<<
+ *             dmc.dm = newdmc[i]
+ *             hierarchy.append(dmc)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Section)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_newdmc[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 251, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 251, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 251, __pyx_L1_error)
+    __Pyx_DECREF_SET(__pyx_v_dmc, ((struct PyPetscDMObject *)__pyx_t_2));
+    __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":149
- *     def getCoordinateSection(self):
- *         cdef Section sec = Section()
- *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(sec.obj)
- *         return sec
+    /* "PETSc/DM.pyx":252
+ *         for i from 0 <= i < n:
+ *             dmc = subtype_DM(newdmc[i])()
+ *             dmc.dm = newdmc[i]             # <<<<<<<<<<<<<<
+ *             hierarchy.append(dmc)
+ *         return hierarchy
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinateSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_dmc->dm = (__pyx_v_newdmc[__pyx_v_i]);
 
-  /* "PETSc/DM.pyx":150
- *         cdef Section sec = Section()
- *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
- *         return sec
+    /* "PETSc/DM.pyx":253
+ *             dmc = subtype_DM(newdmc[i])()
+ *             dmc.dm = newdmc[i]
+ *             hierarchy.append(dmc)             # <<<<<<<<<<<<<<
+ *         return hierarchy
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_hierarchy, ((PyObject *)__pyx_v_dmc)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(40, 253, __pyx_L1_error)
+  }
 
-  /* "PETSc/DM.pyx":151
- *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)
- *         return sec             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":254
+ *             dmc.dm = newdmc[i]
+ *             hierarchy.append(dmc)
+ *         return hierarchy             # <<<<<<<<<<<<<<
  * 
- *     def setCoordinates(self, Vec c not None):
+ *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_sec));
-  __pyx_r = ((PyObject *)__pyx_v_sec);
+  __Pyx_INCREF(__pyx_v_hierarchy);
+  __pyx_r = __pyx_v_hierarchy;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":147
- *         return cdm
+  /* "PETSc/DM.pyx":243
+ *         return hierarchy
  * 
- *     def getCoordinateSection(self):             # <<<<<<<<<<<<<<
- *         cdef Section sec = Section()
- *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
+ *     def coarsenHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt i, n = asInt(nlevels)
+ *         cdef PetscDM *newdmc = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoordinateSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.coarsenHierarchy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_sec);
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF((PyObject *)__pyx_v_dmc);
+  __Pyx_XDECREF(__pyx_v_hierarchy);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":153
- *         return sec
+/* "PETSc/DM.pyx":258
+ *     #
  * 
- *     def setCoordinates(self, Vec c not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
+ *     def setDefaultSection(self, Section sec not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_48setCoordinates[] = "DM.setCoordinates(self, Vec c)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_c = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_76setDefaultSection[] = "DM.setDefaultSection(self, Section sec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscSectionObject *__pyx_v_sec = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setCoordinates (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setDefaultSection (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_c,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -199217,29 +203351,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sec)) != 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, "setCoordinates") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDefaultSection") < 0)) __PYX_ERR(40, 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_c = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_sec = ((struct PyPetscSectionObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCoordinates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDefaultSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 258, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDefaultSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "c", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_c);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "sec", 0))) __PYX_ERR(40, 258, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_76setDefaultSection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -199250,29 +203384,26 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_76setDefaultSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec) {
   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("setCoordinates", 0);
+  __Pyx_RefNannySetupContext("setDefaultSection", 0);
 
-  /* "PETSc/DM.pyx":154
+  /* "PETSc/DM.pyx":259
  * 
- *     def setCoordinates(self, Vec c not None):
- *         CHKERR( DMSetCoordinates(self.dm, c.vec) )             # <<<<<<<<<<<<<<
+ *     def setDefaultSection(self, Section sec not None):
+ *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )             # <<<<<<<<<<<<<<
  * 
- *     def getCoordinates(self):
+ *     def getDefaultSection(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetCoordinates(__pyx_v_self->dm, __pyx_v_c->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDefaultSection(__pyx_v_self->dm, __pyx_v_sec->sec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 259, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":153
- *         return sec
+  /* "PETSc/DM.pyx":258
+ *     #
  * 
- *     def setCoordinates(self, Vec c not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
+ *     def setDefaultSection(self, Section sec not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
  * 
  */
 
@@ -199280,7 +203411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(struct PyPetscDM
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDefaultSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -199288,125 +203419,119 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(struct PyPetscDM
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":156
- *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
+/* "PETSc/DM.pyx":261
+ *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
  * 
- *     def getCoordinates(self):             # <<<<<<<<<<<<<<
- *         cdef Vec c = Vec()
- *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
+ *     def getDefaultSection(self):             # <<<<<<<<<<<<<<
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_51getCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_50getCoordinates[] = "DM.getCoordinates(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_51getCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_79getDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_78getDefaultSection[] = "DM.getDefaultSection(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_79getDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCoordinates (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDefaultSection (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCoordinates", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoordinates", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getDefaultSection", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDefaultSection", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscVecObject *__pyx_v_c = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscSectionObject *__pyx_v_sec = 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("getCoordinates", 0);
+  __Pyx_RefNannySetupContext("getDefaultSection", 0);
 
-  /* "PETSc/DM.pyx":157
+  /* "PETSc/DM.pyx":262
  * 
- *     def getCoordinates(self):
- *         cdef Vec c = Vec()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
- *         PetscINCREF(c.obj)
+ *     def getDefaultSection(self):
+ *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)
  */
-  __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[40]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 262, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_c = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":158
- *     def getCoordinates(self):
- *         cdef Vec c = Vec()
- *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(c.obj)
- *         return c
+  /* "PETSc/DM.pyx":263
+ *     def getDefaultSection(self):
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(sec.obj)
+ *         return sec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinates(__pyx_v_self->dm, (&__pyx_v_c->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDefaultSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 263, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":159
- *         cdef Vec c = Vec()
- *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
- *         PetscINCREF(c.obj)             # <<<<<<<<<<<<<<
- *         return c
+  /* "PETSc/DM.pyx":264
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
+ *         return sec
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_c->__pyx_base.obj);
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":160
- *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
- *         PetscINCREF(c.obj)
- *         return c             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":265
+ *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)
+ *         return sec             # <<<<<<<<<<<<<<
  * 
- *     def setCoordinatesLocal(self, Vec c not None):
+ *     def setDefaultGlobalSection(self, Section sec not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_c));
-  __pyx_r = ((PyObject *)__pyx_v_c);
+  __Pyx_INCREF(((PyObject *)__pyx_v_sec));
+  __pyx_r = ((PyObject *)__pyx_v_sec);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":156
- *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
+  /* "PETSc/DM.pyx":261
+ *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
  * 
- *     def getCoordinates(self):             # <<<<<<<<<<<<<<
- *         cdef Vec c = Vec()
- *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
+ *     def getDefaultSection(self):             # <<<<<<<<<<<<<<
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getDefaultSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_c);
+  __Pyx_XDECREF((PyObject *)__pyx_v_sec);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":162
- *         return c
+/* "PETSc/DM.pyx":267
+ *         return sec
  * 
- *     def setCoordinatesLocal(self, Vec c not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
+ *     def setDefaultGlobalSection(self, Section sec not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_52setCoordinatesLocal[] = "DM.setCoordinatesLocal(self, Vec c)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_c = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection[] = "DM.setDefaultGlobalSection(self, Section sec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscSectionObject *__pyx_v_sec = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setCoordinatesLocal (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setDefaultGlobalSection (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_c,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -199419,29 +203544,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sec)) != 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, "setCoordinatesLocal") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDefaultGlobalSection") < 0)) __PYX_ERR(40, 267, __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_c = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_sec = ((struct PyPetscSectionObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCoordinatesLocal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDefaultGlobalSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 267, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinatesLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDefaultGlobalSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "c", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_c);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "sec", 0))) __PYX_ERR(40, 267, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -199452,29 +203577,26 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec) {
   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("setCoordinatesLocal", 0);
+  __Pyx_RefNannySetupContext("setDefaultGlobalSection", 0);
 
-  /* "PETSc/DM.pyx":163
+  /* "PETSc/DM.pyx":268
  * 
- *     def setCoordinatesLocal(self, Vec c not None):
- *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )             # <<<<<<<<<<<<<<
+ *     def setDefaultGlobalSection(self, Section sec not None):
+ *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )             # <<<<<<<<<<<<<<
  * 
- *     def getCoordinatesLocal(self):
+ *     def getDefaultGlobalSection(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetCoordinatesLocal(__pyx_v_self->dm, __pyx_v_c->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDefaultGlobalSection(__pyx_v_self->dm, __pyx_v_sec->sec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 268, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":162
- *         return c
+  /* "PETSc/DM.pyx":267
+ *         return sec
  * 
- *     def setCoordinatesLocal(self, Vec c not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
+ *     def setDefaultGlobalSection(self, Section sec not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
  * 
  */
 
@@ -199482,7 +203604,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(struct PyPe
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinatesLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDefaultGlobalSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -199490,130 +203612,126 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":165
- *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
+/* "PETSc/DM.pyx":270
+ *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
  * 
- *     def getCoordinatesLocal(self):             # <<<<<<<<<<<<<<
- *         cdef Vec c = Vec()
- *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
+ *     def getDefaultGlobalSection(self):             # <<<<<<<<<<<<<<
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_55getCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_54getCoordinatesLocal[] = "DM.getCoordinatesLocal(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_55getCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_83getDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection[] = "DM.getDefaultGlobalSection(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_83getDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCoordinatesLocal (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDefaultGlobalSection (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCoordinatesLocal", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoordinatesLocal", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getDefaultGlobalSection", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDefaultGlobalSection", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscVecObject *__pyx_v_c = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscSectionObject *__pyx_v_sec = 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("getCoordinatesLocal", 0);
+  __Pyx_RefNannySetupContext("getDefaultGlobalSection", 0);
 
-  /* "PETSc/DM.pyx":166
+  /* "PETSc/DM.pyx":271
  * 
- *     def getCoordinatesLocal(self):
- *         cdef Vec c = Vec()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
- *         PetscINCREF(c.obj)
+ *     def getDefaultGlobalSection(self):
+ *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)
  */
-  __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[40]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 271, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_c = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":167
- *     def getCoordinatesLocal(self):
- *         cdef Vec c = Vec()
- *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(c.obj)
- *         return c
+  /* "PETSc/DM.pyx":272
+ *     def getDefaultGlobalSection(self):
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(sec.obj)
+ *         return sec
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinatesLocal(__pyx_v_self->dm, (&__pyx_v_c->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDefaultGlobalSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 272, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":168
- *         cdef Vec c = Vec()
- *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
- *         PetscINCREF(c.obj)             # <<<<<<<<<<<<<<
- *         return c
+  /* "PETSc/DM.pyx":273
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
+ *         return sec
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_c->__pyx_base.obj);
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":169
- *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
- *         PetscINCREF(c.obj)
- *         return c             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":274
+ *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
+ *         PetscINCREF(sec.obj)
+ *         return sec             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_c));
-  __pyx_r = ((PyObject *)__pyx_v_c);
+  __Pyx_INCREF(((PyObject *)__pyx_v_sec));
+  __pyx_r = ((PyObject *)__pyx_v_sec);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":165
- *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
+  /* "PETSc/DM.pyx":270
+ *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
  * 
- *     def getCoordinatesLocal(self):             # <<<<<<<<<<<<<<
- *         cdef Vec c = Vec()
- *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
+ *     def getDefaultGlobalSection(self):             # <<<<<<<<<<<<<<
+ *         cdef Section sec = Section()
+ *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoordinatesLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getDefaultGlobalSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_c);
+  __Pyx_XDECREF((PyObject *)__pyx_v_sec);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":173
- *     #
+/* "PETSc/DM.pyx":276
+ *         return sec
+ * 
+ *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
  * 
- *     def setMatType(self, mat_type):             # <<<<<<<<<<<<<<
- *         """Set matrix type to be used by DM.createMat"""
- *         cdef PetscMatType mtype = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_56setMatType[] = "DM.setMatType(self, mat_type)\nSet matrix type to be used by DM.createMat";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_mat_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_84createDefaultSF[] = "DM.createDefaultSF(self, Section localsec, Section globalsec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscSectionObject *__pyx_v_localsec = 0;
+  struct PyPetscSectionObject *__pyx_v_globalsec = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setMatType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createDefaultSF (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat_type,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_localsec,&__pyx_n_s_globalsec,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;
@@ -199621,360 +203739,290 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType(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_mat_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_localsec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_globalsec)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("createDefaultSF", 1, 2, 2, 1); __PYX_ERR(40, 276, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatType") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDefaultSF") < 0)) __PYX_ERR(40, 276, __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_mat_type = values[0];
+    __pyx_v_localsec = ((struct PyPetscSectionObject *)values[0]);
+    __pyx_v_globalsec = ((struct PyPetscSectionObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMatType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createDefaultSF", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 276, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setMatType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createDefaultSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_mat_type);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localsec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "localsec", 0))) __PYX_ERR(40, 276, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_globalsec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "globalsec", 0))) __PYX_ERR(40, 276, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_84createDefaultSF(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_localsec, __pyx_v_globalsec);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_mat_type) {
-  const char* __pyx_v_mtype;
-  CYTHON_UNUSED PyObject *__pyx_v_vec_type = NULL;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_84createDefaultSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_localsec, struct PyPetscSectionObject *__pyx_v_globalsec) {
   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("setMatType", 0);
-
-  /* "PETSc/DM.pyx":175
- *     def setMatType(self, mat_type):
- *         """Set matrix type to be used by DM.createMat"""
- *         cdef PetscMatType mtype = NULL             # <<<<<<<<<<<<<<
- *         vec_type = str2bytes(mat_type, &mtype)
- *         CHKERR( DMSetMatType(self.dm, mtype) )
- */
-  __pyx_v_mtype = NULL;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("createDefaultSF", 0);
 
-  /* "PETSc/DM.pyx":176
- *         """Set matrix type to be used by DM.createMat"""
- *         cdef PetscMatType mtype = NULL
- *         vec_type = str2bytes(mat_type, &mtype)             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetMatType(self.dm, mtype) )
+  /* "PETSc/DM.pyx":277
  * 
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mat_type, (&__pyx_v_mtype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_vec_type = __pyx_t_1;
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DM.pyx":177
- *         cdef PetscMatType mtype = NULL
- *         vec_type = str2bytes(mat_type, &mtype)
- *         CHKERR( DMSetMatType(self.dm, mtype) )             # <<<<<<<<<<<<<<
+ *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):
+ *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )             # <<<<<<<<<<<<<<
  * 
- *     def createMat(self):
+ *     def getDefaultSF(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetMatType(__pyx_v_self->dm, __pyx_v_mtype)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateDefaultSF(__pyx_v_self->dm, __pyx_v_localsec->sec, __pyx_v_globalsec->sec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 277, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":173
- *     #
+  /* "PETSc/DM.pyx":276
+ *         return sec
+ * 
+ *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
  * 
- *     def setMatType(self, mat_type):             # <<<<<<<<<<<<<<
- *         """Set matrix type to be used by DM.createMat"""
- *         cdef PetscMatType mtype = NULL
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setMatType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createDefaultSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_vec_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":179
- *         CHKERR( DMSetMatType(self.dm, mtype) )
+/* "PETSc/DM.pyx":279
+ *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
  * 
- *     def createMat(self):             # <<<<<<<<<<<<<<
- *         cdef Mat mat = Mat()
- *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
+ *     def getDefaultSF(self):             # <<<<<<<<<<<<<<
+ *         cdef SF sf = SF()
+ *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_59createMat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_58createMat[] = "DM.createMat(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_59createMat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_87getDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_86getDefaultSF[] = "DM.getDefaultSF(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_87getDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createMat (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDefaultSF (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("createMat", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createMat", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_58createMat(((struct PyPetscDMObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getDefaultSF", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDefaultSF", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_58createMat(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscMatObject *__pyx_v_mat = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscSFObject *__pyx_v_sf = 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("createMat", 0);
+  __Pyx_RefNannySetupContext("getDefaultSF", 0);
 
-  /* "PETSc/DM.pyx":180
+  /* "PETSc/DM.pyx":280
  * 
- *     def createMat(self):
- *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
- *         return mat
+ *     def getDefaultSF(self):
+ *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
+ *         PetscINCREF(sf.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[40]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":181
- *     def createMat(self):
- *         cdef Mat mat = Mat()
- *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )             # <<<<<<<<<<<<<<
- *         return mat
+  /* "PETSc/DM.pyx":281
+ *     def getDefaultSF(self):
+ *         cdef SF sf = SF()
+ *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(sf.obj)
+ *         return sf
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDefaultSF(__pyx_v_self->dm, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 281, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":282
+ *         cdef SF sf = SF()
+ *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
+ *         PetscINCREF(sf.obj)             # <<<<<<<<<<<<<<
+ *         return sf
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateMatrix(__pyx_v_self->dm, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sf->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":182
- *         cdef Mat mat = Mat()
- *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
- *         return mat             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":283
+ *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
+ *         PetscINCREF(sf.obj)
+ *         return sf             # <<<<<<<<<<<<<<
  * 
- *     def createInterpolation(self, DM dm not None):
+ *     def getPointSF(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_mat));
-  __pyx_r = ((PyObject *)__pyx_v_mat);
+  __Pyx_INCREF(((PyObject *)__pyx_v_sf));
+  __pyx_r = ((PyObject *)__pyx_v_sf);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":179
- *         CHKERR( DMSetMatType(self.dm, mtype) )
+  /* "PETSc/DM.pyx":279
+ *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
  * 
- *     def createMat(self):             # <<<<<<<<<<<<<<
- *         cdef Mat mat = Mat()
- *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
+ *     def getDefaultSF(self):             # <<<<<<<<<<<<<<
+ *         cdef SF sf = SF()
+ *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createMat", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getDefaultSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
+  __Pyx_XDECREF((PyObject *)__pyx_v_sf);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":184
- *         return mat
+/* "PETSc/DM.pyx":285
+ *         return sf
  * 
- *     def createInterpolation(self, DM dm not None):             # <<<<<<<<<<<<<<
- *         cdef Mat A = Mat()
- *         cdef Vec scale = Vec()
+ *     def getPointSF(self):             # <<<<<<<<<<<<<<
+ *         cdef SF sf = SF()
+ *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_60createInterpolation[] = "DM.createInterpolation(self, DM dm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscDMObject *__pyx_v_dm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_89getPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_88getPointSF[] = "DM.getPointSF(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_89getPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createInterpolation (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm,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_dm)) != 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, "createInterpolation") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 184; __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_dm = ((struct PyPetscDMObject *)values[0]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createInterpolation", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
+  __Pyx_RefNannySetupContext("getPointSF (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getPointSF", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPointSF", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(((struct PyPetscDMObject *)__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_8petsc4py_5PETSc_2DM_60createInterpolation(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
-  struct PyPetscMatObject *__pyx_v_A = 0;
-  struct PyPetscVecObject *__pyx_v_scale = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscSFObject *__pyx_v_sf = 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("createInterpolation", 0);
+  __Pyx_RefNannySetupContext("getPointSF", 0);
 
-  /* "PETSc/DM.pyx":185
+  /* "PETSc/DM.pyx":286
  * 
- *     def createInterpolation(self, DM dm not None):
- *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
- *         cdef Vec scale = Vec()
- *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
+ *     def getPointSF(self):
+ *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
+ *         PetscINCREF(sf.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[40]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":186
- *     def createInterpolation(self, DM dm not None):
- *         cdef Mat A = Mat()
- *         cdef Vec scale = Vec()             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
- *                                    &A.mat, &scale.vec))
+  /* "PETSc/DM.pyx":287
+ *     def getPointSF(self):
+ *         cdef SF sf = SF()
+ *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(sf.obj)
+ *         return sf
  */
-  __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[40]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_scale = ((struct PyPetscVecObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetPointSF(__pyx_v_self->dm, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 287, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":187
- *         cdef Mat A = Mat()
- *         cdef Vec scale = Vec()
- *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,             # <<<<<<<<<<<<<<
- *                                    &A.mat, &scale.vec))
- *         return(A, scale)
+  /* "PETSc/DM.pyx":288
+ *         cdef SF sf = SF()
+ *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
+ *         PetscINCREF(sf.obj)             # <<<<<<<<<<<<<<
+ *         return sf
+ * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateInterpolation(__pyx_v_self->dm, __pyx_v_dm->dm, (&__pyx_v_A->mat), (&__pyx_v_scale->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sf->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":189
- *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
- *                                    &A.mat, &scale.vec))
- *         return(A, scale)             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":289
+ *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
+ *         PetscINCREF(sf.obj)
+ *         return sf             # <<<<<<<<<<<<<<
  * 
- *     def createInjection(self, DM dm not None):
+ *     def setPointSF(self, SF sf not None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 189; __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_scale));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_scale));
-  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_scale));
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_sf));
+  __pyx_r = ((PyObject *)__pyx_v_sf);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":184
- *         return mat
+  /* "PETSc/DM.pyx":285
+ *         return sf
  * 
- *     def createInterpolation(self, DM dm not None):             # <<<<<<<<<<<<<<
- *         cdef Mat A = Mat()
- *         cdef Vec scale = Vec()
+ *     def getPointSF(self):             # <<<<<<<<<<<<<<
+ *         cdef SF sf = SF()
+ *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createInterpolation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getPointSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_A);
-  __Pyx_XDECREF((PyObject *)__pyx_v_scale);
+  __Pyx_XDECREF((PyObject *)__pyx_v_sf);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":191
- *         return(A, scale)
+/* "PETSc/DM.pyx":291
+ *         return sf
+ * 
+ *     def setPointSF(self, SF sf not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
  * 
- *     def createInjection(self, DM dm not None):             # <<<<<<<<<<<<<<
- *         cdef Mat inject = Mat()
- *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_62createInjection[] = "DM.createInjection(self, DM dm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscDMObject *__pyx_v_dm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_90setPointSF[] = "DM.setPointSF(self, SF sf)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscSFObject *__pyx_v_sf = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createInjection (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setPointSF (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sf,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -199987,29 +204035,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dm)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sf)) != 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, "createInjection") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPointSF") < 0)) __PYX_ERR(40, 291, __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_dm = ((struct PyPetscDMObject *)values[0]);
+    __pyx_v_sf = ((struct PyPetscSFObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createInjection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setPointSF", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 291, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createInjection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setPointSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_62createInjection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) __PYX_ERR(40, 291, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_90setPointSF(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sf);
 
   /* function exit code */
   goto __pyx_L0;
@@ -200020,91 +204068,143 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_62createInjection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
-  struct PyPetscMatObject *__pyx_v_inject = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_90setPointSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf) {
   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("createInjection", 0);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setPointSF", 0);
 
-  /* "PETSc/DM.pyx":192
+  /* "PETSc/DM.pyx":292
  * 
- *     def createInjection(self, DM dm not None):
- *         cdef Mat inject = Mat()             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
- *         return inject
+ *     def setPointSF(self, SF sf not None):
+ *         CHKERR( DMSetPointSF(self.dm, sf.sf) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getNumLabels(self):
  */
-  __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[40]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_inject = ((struct PyPetscMatObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetPointSF(__pyx_v_self->dm, __pyx_v_sf->sf)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 292, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":193
- *     def createInjection(self, DM dm not None):
- *         cdef Mat inject = Mat()
- *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )             # <<<<<<<<<<<<<<
- *         return inject
+  /* "PETSc/DM.pyx":291
+ *         return sf
+ * 
+ *     def setPointSF(self, SF sf not None):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateInjection(__pyx_v_self->dm, __pyx_v_dm->dm, (&__pyx_v_inject->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "PETSc/DM.pyx":194
- *         cdef Mat inject = Mat()
- *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
- *         return inject             # <<<<<<<<<<<<<<
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setPointSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":294
+ *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
  * 
- *     def createAggregates(self, DM dm not None):
+ *     def getNumLabels(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt nLabels = 0
+ *         CHKERR( DMGetNumLabels(self.dm, &nLabels) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_93getNumLabels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_92getNumLabels[] = "DM.getNumLabels(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_93getNumLabels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getNumLabels (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getNumLabels", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNumLabels", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_92getNumLabels(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_92getNumLabels(struct PyPetscDMObject *__pyx_v_self) {
+  PetscInt __pyx_v_nLabels;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getNumLabels", 0);
+
+  /* "PETSc/DM.pyx":295
+ * 
+ *     def getNumLabels(self):
+ *         cdef PetscInt nLabels = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetNumLabels(self.dm, &nLabels) )
+ *         return toInt(nLabels)
+ */
+  __pyx_v_nLabels = 0;
+
+  /* "PETSc/DM.pyx":296
+ *     def getNumLabels(self):
+ *         cdef PetscInt nLabels = 0
+ *         CHKERR( DMGetNumLabels(self.dm, &nLabels) )             # <<<<<<<<<<<<<<
+ *         return toInt(nLabels)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetNumLabels(__pyx_v_self->dm, (&__pyx_v_nLabels))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(40, 296, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":297
+ *         cdef PetscInt nLabels = 0
+ *         CHKERR( DMGetNumLabels(self.dm, &nLabels) )
+ *         return toInt(nLabels)             # <<<<<<<<<<<<<<
+ * 
+ *     def getLabelName(self, index):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_inject));
-  __pyx_r = ((PyObject *)__pyx_v_inject);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nLabels); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 297, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":191
- *         return(A, scale)
+  /* "PETSc/DM.pyx":294
+ *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
  * 
- *     def createInjection(self, DM dm not None):             # <<<<<<<<<<<<<<
- *         cdef Mat inject = Mat()
- *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
+ *     def getNumLabels(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt nLabels = 0
+ *         CHKERR( DMGetNumLabels(self.dm, &nLabels) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createInjection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getNumLabels", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_inject);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":196
- *         return inject
+/* "PETSc/DM.pyx":299
+ *         return toInt(nLabels)
  * 
- *     def createAggregates(self, DM dm not None):             # <<<<<<<<<<<<<<
- *         cdef Mat mat = Mat()
- *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
+ *     def getLabelName(self, index):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cindex = asInt(index)
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_64createAggregates[] = "DM.createAggregates(self, DM dm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscDMObject *__pyx_v_dm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_95getLabelName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_94getLabelName[] = "DM.getLabelName(self, index)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_95getLabelName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_index = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createAggregates (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getLabelName (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -200117,124 +204217,123 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dm)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_index)) != 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, "createAggregates") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelName") < 0)) __PYX_ERR(40, 299, __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_dm = ((struct PyPetscDMObject *)values[0]);
+    __pyx_v_index = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createAggregates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getLabelName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 299, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createAggregates", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_index);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
-  struct PyPetscMatObject *__pyx_v_mat = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_index) {
+  PetscInt __pyx_v_cindex;
+  const char *__pyx_v_cname;
   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("createAggregates", 0);
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getLabelName", 0);
 
-  /* "PETSc/DM.pyx":197
+  /* "PETSc/DM.pyx":300
  * 
- *     def createAggregates(self, DM dm not None):
- *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
- *         return mat
+ *     def getLabelName(self, index):
+ *         cdef PetscInt cindex = asInt(index)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         CHKERR( DMGetLabelName(self.dm, cindex, &cname) )
  */
-  __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[40]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 300, __pyx_L1_error)
+  __pyx_v_cindex = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":198
- *     def createAggregates(self, DM dm not None):
- *         cdef Mat mat = Mat()
- *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )             # <<<<<<<<<<<<<<
- *         return mat
+  /* "PETSc/DM.pyx":301
+ *     def getLabelName(self, index):
+ *         cdef PetscInt cindex = asInt(index)
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLabelName(self.dm, cindex, &cname) )
+ *         return bytes2str(cname)
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/DM.pyx":302
+ *         cdef PetscInt cindex = asInt(index)
+ *         cdef const_char *cname = NULL
+ *         CHKERR( DMGetLabelName(self.dm, cindex, &cname) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(cname)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateAggregates(__pyx_v_self->dm, __pyx_v_dm->dm, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabelName(__pyx_v_self->dm, __pyx_v_cindex, (&__pyx_v_cname))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 302, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":199
- *         cdef Mat mat = Mat()
- *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
- *         return mat             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":303
+ *         cdef const_char *cname = NULL
+ *         CHKERR( DMGetLabelName(self.dm, cindex, &cname) )
+ *         return bytes2str(cname)             # <<<<<<<<<<<<<<
  * 
- *     def convert(self, dm_type):
+ *     def hasLabel(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_mat));
-  __pyx_r = ((PyObject *)__pyx_v_mat);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cname); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 303, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":196
- *         return inject
+  /* "PETSc/DM.pyx":299
+ *         return toInt(nLabels)
  * 
- *     def createAggregates(self, DM dm not None):             # <<<<<<<<<<<<<<
- *         cdef Mat mat = Mat()
- *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
+ *     def getLabelName(self, index):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cindex = asInt(index)
+ *         cdef const_char *cname = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createAggregates", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":201
- *         return mat
+/* "PETSc/DM.pyx":305
+ *         return bytes2str(cname)
  * 
- *     def convert(self, dm_type):             # <<<<<<<<<<<<<<
- *         cdef const_char *cval = NULL
- *         dm_type = str2bytes(dm_type, &cval)
+ *     def hasLabel(self, name):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_66convert[] = "DM.convert(self, dm_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_dm_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_97hasLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_96hasLabel[] = "DM.hasLabel(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_97hasLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("convert (wrapper)", 0);
+  __Pyx_RefNannySetupContext("hasLabel (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -200247,172 +204346,136 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67convert(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_dm_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 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, "convert") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hasLabel") < 0)) __PYX_ERR(40, 305, __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_dm_type = values[0];
+    __pyx_v_name = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convert", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("hasLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 305, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.hasLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_66convert(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type) {
-  const char *__pyx_v_cval;
-  DM __pyx_v_newdm;
-  struct PyPetscDMObject *__pyx_v_dm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+  PetscBool __pyx_v_flag;
+  const char *__pyx_v_cname;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   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("convert", 0);
-  __Pyx_INCREF(__pyx_v_dm_type);
+  __Pyx_RefNannySetupContext("hasLabel", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":202
+  /* "PETSc/DM.pyx":306
  * 
- *     def convert(self, dm_type):
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         dm_type = str2bytes(dm_type, &cval)
- *         cdef PetscDM newdm = NULL
- */
-  __pyx_v_cval = NULL;
-
-  /* "PETSc/DM.pyx":203
- *     def convert(self, dm_type):
- *         cdef const_char *cval = NULL
- *         dm_type = str2bytes(dm_type, &cval)             # <<<<<<<<<<<<<<
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMConvert(self.dm, cval, &newdm) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_dm_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_dm_type, __pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DM.pyx":204
- *         cdef const_char *cval = NULL
- *         dm_type = str2bytes(dm_type, &cval)
- *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMConvert(self.dm, cval, &newdm) )
- *         cdef DM dm = <DM>subtype_DM(newdm)()
+ *     def hasLabel(self, name):
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
-  __pyx_v_newdm = NULL;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/DM.pyx":205
- *         dm_type = str2bytes(dm_type, &cval)
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMConvert(self.dm, cval, &newdm) )             # <<<<<<<<<<<<<<
- *         cdef DM dm = <DM>subtype_DM(newdm)()
- *         dm.dm = newdm
+  /* "PETSc/DM.pyx":307
+ *     def hasLabel(self, name):
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMHasLabel(self.dm, cname, &flag) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMConvert(__pyx_v_self->dm, __pyx_v_cval, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":206
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMConvert(self.dm, cval, &newdm) )
- *         cdef DM dm = <DM>subtype_DM(newdm)()             # <<<<<<<<<<<<<<
- *         dm.dm = newdm
- *         return dm
+  /* "PETSc/DM.pyx":308
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMHasLabel(self.dm, cname, &flag) )
+ *         return <bint> flag
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 308, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __pyx_t_3;
-  __Pyx_INCREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":207
- *         CHKERR( DMConvert(self.dm, cval, &newdm) )
- *         cdef DM dm = <DM>subtype_DM(newdm)()
- *         dm.dm = newdm             # <<<<<<<<<<<<<<
- *         return dm
+  /* "PETSc/DM.pyx":309
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMHasLabel(self.dm, cname, &flag) )             # <<<<<<<<<<<<<<
+ *         return <bint> flag
  * 
  */
-  __pyx_v_dm->dm = __pyx_v_newdm;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMHasLabel(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_flag))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 309, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":208
- *         cdef DM dm = <DM>subtype_DM(newdm)()
- *         dm.dm = newdm
- *         return dm             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":310
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMHasLabel(self.dm, cname, &flag) )
+ *         return <bint> flag             # <<<<<<<<<<<<<<
  * 
- *     def refine(self, comm=None):
+ *     def createLabel(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
-  __pyx_r = ((PyObject *)__pyx_v_dm);
+  __pyx_t_1 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 310, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":201
- *         return mat
+  /* "PETSc/DM.pyx":305
+ *         return bytes2str(cname)
  * 
- *     def convert(self, dm_type):             # <<<<<<<<<<<<<<
- *         cdef const_char *cval = NULL
- *         dm_type = str2bytes(dm_type, &cval)
+ *     def hasLabel(self, name):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         cdef const_char *cname = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.convert", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.hasLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
-  __Pyx_XDECREF(__pyx_v_dm_type);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":210
- *         return dm
+/* "PETSc/DM.pyx":312
+ *         return <bint> flag
  * 
- *     def refine(self, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *     def createLabel(self, name):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69refine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_68refine[] = "DM.refine(self, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69refine(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_8petsc4py_5PETSc_2DM_99createLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_98createLabel[] = "DM.createLabel(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_99createLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("refine (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createLabel (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,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);
@@ -200424,180 +204487,114 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69refine(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_name)) != 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, "refine") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createLabel") < 0)) __PYX_ERR(40, 312, __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_name = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("refine", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 312, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.refine", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_68refine(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_98createLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_dmcomm;
-  DM __pyx_v_newdm;
-  struct PyPetscDMObject *__pyx_v_dm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_98createLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+  const char *__pyx_v_cname;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  MPI_Comm __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("refine", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("createLabel", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":211
+  /* "PETSc/DM.pyx":313
  * 
- *     def refine(self, comm=None):
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
- *         dmcomm = def_Comm(comm, dmcomm)
- */
-  __pyx_v_dmcomm = MPI_COMM_NULL;
-
-  /* "PETSc/DM.pyx":212
- *     def refine(self, comm=None):
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )             # <<<<<<<<<<<<<<
- *         dmcomm = def_Comm(comm, dmcomm)
- *         cdef PetscDM newdm = NULL
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->dm), (&__pyx_v_dmcomm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DM.pyx":213
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
- *         dmcomm = def_Comm(comm, dmcomm)             # <<<<<<<<<<<<<<
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_dmcomm); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_dmcomm = __pyx_t_2;
-
-  /* "PETSc/DM.pyx":214
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
- *         dmcomm = def_Comm(comm, dmcomm)
- *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
- *         cdef DM dm = subtype_DM(newdm)()
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DM.pyx":215
- *         dmcomm = def_Comm(comm, dmcomm)
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )             # <<<<<<<<<<<<<<
- *         cdef DM dm = subtype_DM(newdm)()
- *         dm.dm = newdm
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRefine(__pyx_v_self->dm, __pyx_v_dmcomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DM.pyx":216
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
- *         cdef DM dm = subtype_DM(newdm)()             # <<<<<<<<<<<<<<
- *         dm.dm = newdm
- *         return dm
+ *     def createLabel(self, name):
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMCreateLabel(self.dm, cname) )
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_4);
-  __pyx_t_4 = 0;
+  __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":217
- *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
- *         cdef DM dm = subtype_DM(newdm)()
- *         dm.dm = newdm             # <<<<<<<<<<<<<<
- *         return dm
+  /* "PETSc/DM.pyx":314
+ *     def createLabel(self, name):
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCreateLabel(self.dm, cname) )
  * 
  */
-  __pyx_v_dm->dm = __pyx_v_newdm;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 314, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":218
- *         cdef DM dm = subtype_DM(newdm)()
- *         dm.dm = newdm
- *         return dm             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":315
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMCreateLabel(self.dm, cname) )             # <<<<<<<<<<<<<<
  * 
- *     def coarsen(self, comm=None):
+ *     def removeLabel(self, name):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
-  __pyx_r = ((PyObject *)__pyx_v_dm);
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateLabel(__pyx_v_self->dm, __pyx_v_cname)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 315, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":210
- *         return dm
+  /* "PETSc/DM.pyx":312
+ *         return <bint> flag
  * 
- *     def refine(self, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *     def createLabel(self, name):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
 
   /* 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_AddTraceback("petsc4py.PETSc.DM.refine", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":220
- *         return dm
+/* "PETSc/DM.pyx":317
+ *         CHKERR( DMCreateLabel(self.dm, cname) )
  * 
- *     def coarsen(self, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *     def removeLabel(self, name):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         cdef PetscDMLabel clbl = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_70coarsen[] = "DM.coarsen(self, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen(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_8petsc4py_5PETSc_2DM_101removeLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_100removeLabel[] = "DM.removeLabel(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_101removeLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("coarsen (wrapper)", 0);
+  __Pyx_RefNannySetupContext("removeLabel (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,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);
@@ -200609,183 +204606,130 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen(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_name)) != 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, "coarsen") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "removeLabel") < 0)) __PYX_ERR(40, 317, __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_name = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("coarsen", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("removeLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 317, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.coarsen", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.removeLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_dmcomm;
-  DM __pyx_v_newdm;
-  struct PyPetscDMObject *__pyx_v_dm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+  const char *__pyx_v_cname;
+  DMLabel __pyx_v_clbl;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  MPI_Comm __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("coarsen", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("removeLabel", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":221
+  /* "PETSc/DM.pyx":318
  * 
- *     def coarsen(self, comm=None):
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
- *         dmcomm = def_Comm(comm, dmcomm)
- */
-  __pyx_v_dmcomm = MPI_COMM_NULL;
-
-  /* "PETSc/DM.pyx":222
- *     def coarsen(self, comm=None):
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )             # <<<<<<<<<<<<<<
- *         dmcomm = def_Comm(comm, dmcomm)
- *         cdef PetscDM newdm = NULL
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->dm), (&__pyx_v_dmcomm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DM.pyx":223
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
- *         dmcomm = def_Comm(comm, dmcomm)             # <<<<<<<<<<<<<<
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_dmcomm); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_dmcomm = __pyx_t_2;
-
-  /* "PETSc/DM.pyx":224
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
- *         dmcomm = def_Comm(comm, dmcomm)
- *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
- *         cdef DM dm = subtype_DM(newdm)()
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DM.pyx":225
- *         dmcomm = def_Comm(comm, dmcomm)
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )             # <<<<<<<<<<<<<<
- *         cdef DM dm = subtype_DM(newdm)()
- *         dm.dm = newdm
+ *     def removeLabel(self, name):
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscDMLabel clbl = NULL
+ *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCoarsen(__pyx_v_self->dm, __pyx_v_dmcomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":226
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
- *         cdef DM dm = subtype_DM(newdm)()             # <<<<<<<<<<<<<<
- *         dm.dm = newdm
- *         return dm
+  /* "PETSc/DM.pyx":319
+ *     def removeLabel(self, name):
+ *         cdef const_char *cname = NULL
+ *         cdef PetscDMLabel clbl = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMRemoveLabel(self.dm, cname, &clbl) )
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_4);
-  __pyx_t_4 = 0;
+  __pyx_v_clbl = NULL;
 
-  /* "PETSc/DM.pyx":227
- *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
- *         cdef DM dm = subtype_DM(newdm)()
- *         dm.dm = newdm             # <<<<<<<<<<<<<<
- *         return dm
- * 
+  /* "PETSc/DM.pyx":320
+ *         cdef const_char *cname = NULL
+ *         cdef PetscDMLabel clbl = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMRemoveLabel(self.dm, cname, &clbl) )
+ *         # CHKERR( DMLabelDestroy(&clbl) )
  */
-  __pyx_v_dm->dm = __pyx_v_newdm;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 320, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":228
- *         cdef DM dm = subtype_DM(newdm)()
- *         dm.dm = newdm
- *         return dm             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":321
+ *         cdef PetscDMLabel clbl = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMRemoveLabel(self.dm, cname, &clbl) )             # <<<<<<<<<<<<<<
+ *         # CHKERR( DMLabelDestroy(&clbl) )
  * 
- *     def refineHierarchy(self, nlevels):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
-  __pyx_r = ((PyObject *)__pyx_v_dm);
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRemoveLabel(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_clbl))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 321, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":220
- *         return dm
+  /* "PETSc/DM.pyx":317
+ *         CHKERR( DMCreateLabel(self.dm, cname) )
  * 
- *     def coarsen(self, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm dmcomm = MPI_COMM_NULL
- *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
+ *     def removeLabel(self, name):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         cdef PetscDMLabel clbl = NULL
  */
 
   /* 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_AddTraceback("petsc4py.PETSc.DM.coarsen", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.removeLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":230
- *         return dm
+/* "PETSc/DM.pyx":324
+ *         # CHKERR( DMLabelDestroy(&clbl) )
  * 
- *     def refineHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
- *         cdef PetscInt i, n = asInt(nlevels)
- *         cdef PetscDM *newdmf = NULL
+ *     def getLabelValue(self, name, point):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point), value = 0
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_72refineHierarchy[] = "DM.refineHierarchy(self, nlevels)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nlevels = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_103getLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_102getLabelValue[] = "DM.getLabelValue(self, name, point)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_103getLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_point = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("refineHierarchy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getLabelValue (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nlevels,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_point,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;
@@ -200793,224 +204737,155 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nlevels)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getLabelValue", 1, 2, 2, 1); __PYX_ERR(40, 324, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "refineHierarchy") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelValue") < 0)) __PYX_ERR(40, 324, __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_nlevels = values[0];
+    __pyx_v_name = values[0];
+    __pyx_v_point = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("refineHierarchy", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getLabelValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 324, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.refineHierarchy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_nlevels);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_102getLabelValue(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_point);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels) {
-  PetscInt __pyx_v_i;
-  PetscInt __pyx_v_n;
-  DM *__pyx_v_newdmf;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
-  struct PyPetscDMObject *__pyx_v_dmf = 0;
-  PyObject *__pyx_v_hierarchy = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_102getLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point) {
+  PetscInt __pyx_v_cpoint;
+  PetscInt __pyx_v_value;
+  const char *__pyx_v_cname;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("refineHierarchy", 0);
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("getLabelValue", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":231
+  /* "PETSc/DM.pyx":325
  * 
- *     def refineHierarchy(self, nlevels):
- *         cdef PetscInt i, n = asInt(nlevels)             # <<<<<<<<<<<<<<
- *         cdef PetscDM *newdmf = NULL
- *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
+ *     def getLabelValue(self, name, point):
+ *         cdef PetscInt cpoint = asInt(point), value = 0             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlevels); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_n = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 325, __pyx_L1_error)
+  __pyx_v_cpoint = __pyx_t_1;
+  __pyx_v_value = 0;
 
-  /* "PETSc/DM.pyx":232
- *     def refineHierarchy(self, nlevels):
- *         cdef PetscInt i, n = asInt(nlevels)
- *         cdef PetscDM *newdmf = NULL             # <<<<<<<<<<<<<<
- *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
- *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
+  /* "PETSc/DM.pyx":326
+ *     def getLabelValue(self, name, point):
+ *         cdef PetscInt cpoint = asInt(point), value = 0
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetLabelValue(self.dm, cname, cpoint, &value) )
  */
-  __pyx_v_newdmf = NULL;
+  __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":233
- *         cdef PetscInt i, n = asInt(nlevels)
- *         cdef PetscDM *newdmf = NULL
- *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)             # <<<<<<<<<<<<<<
- *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
- *         cdef DM dmf = None
+  /* "PETSc/DM.pyx":327
+ *         cdef PetscInt cpoint = asInt(point), value = 0
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLabelValue(self.dm, cname, cpoint, &value) )
+ *         return toInt(value)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_newdmf)))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v_tmp = __pyx_t_3;
-  __pyx_t_3 = 0;
-
-  /* "PETSc/DM.pyx":234
- *         cdef PetscDM *newdmf = NULL
- *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
- *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )             # <<<<<<<<<<<<<<
- *         cdef DM dmf = None
- *         cdef list hierarchy = []
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRefineHierarchy(__pyx_v_self->dm, __pyx_v_n, __pyx_v_newdmf)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DM.pyx":235
- *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
- *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
- *         cdef DM dmf = None             # <<<<<<<<<<<<<<
- *         cdef list hierarchy = []
- *         for i from 0 <= i < n:
- */
-  __Pyx_INCREF(Py_None);
-  __pyx_v_dmf = ((struct PyPetscDMObject *)Py_None);
-
-  /* "PETSc/DM.pyx":236
- *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
- *         cdef DM dmf = None
- *         cdef list hierarchy = []             # <<<<<<<<<<<<<<
- *         for i from 0 <= i < n:
- *             dmf = subtype_DM(newdmf[i])()
- */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_hierarchy = ((PyObject*)__pyx_t_3);
-  __pyx_t_3 = 0;
-
-  /* "PETSc/DM.pyx":237
- *         cdef DM dmf = None
- *         cdef list hierarchy = []
- *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
- *             dmf = subtype_DM(newdmf[i])()
- *             dmf.dm = newdmf[i]
- */
-  __pyx_t_1 = __pyx_v_n;
-  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
-
-    /* "PETSc/DM.pyx":238
- *         cdef list hierarchy = []
- *         for i from 0 <= i < n:
- *             dmf = subtype_DM(newdmf[i])()             # <<<<<<<<<<<<<<
- *             dmf.dm = newdmf[i]
- *             hierarchy.append(dmf)
- */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_newdmf[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF_SET(__pyx_v_dmf, ((struct PyPetscDMObject *)__pyx_t_2));
-    __pyx_t_2 = 0;
-
-    /* "PETSc/DM.pyx":239
- *         for i from 0 <= i < n:
- *             dmf = subtype_DM(newdmf[i])()
- *             dmf.dm = newdmf[i]             # <<<<<<<<<<<<<<
- *             hierarchy.append(dmf)
- *         return hierarchy
- */
-    __pyx_v_dmf->dm = (__pyx_v_newdmf[__pyx_v_i]);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
+  __pyx_t_2 = 0;
 
-    /* "PETSc/DM.pyx":240
- *             dmf = subtype_DM(newdmf[i])()
- *             dmf.dm = newdmf[i]
- *             hierarchy.append(dmf)             # <<<<<<<<<<<<<<
- *         return hierarchy
+  /* "PETSc/DM.pyx":328
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetLabelValue(self.dm, cname, cpoint, &value) )             # <<<<<<<<<<<<<<
+ *         return toInt(value)
  * 
  */
-    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_hierarchy, ((PyObject *)__pyx_v_dmf)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabelValue(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_cpoint, (&__pyx_v_value))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(40, 328, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":241
- *             dmf.dm = newdmf[i]
- *             hierarchy.append(dmf)
- *         return hierarchy             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":329
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetLabelValue(self.dm, cname, cpoint, &value) )
+ *         return toInt(value)             # <<<<<<<<<<<<<<
  * 
- *     def coarsenHierarchy(self, nlevels):
+ *     def setLabelValue(self, name, point, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_hierarchy);
-  __pyx_r = __pyx_v_hierarchy;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 329, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":230
- *         return dm
+  /* "PETSc/DM.pyx":324
+ *         # CHKERR( DMLabelDestroy(&clbl) )
  * 
- *     def refineHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
- *         cdef PetscInt i, n = asInt(nlevels)
- *         cdef PetscDM *newdmf = NULL
+ *     def getLabelValue(self, name, point):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point), value = 0
+ *         cdef const_char *cname = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.refineHierarchy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp);
-  __Pyx_XDECREF((PyObject *)__pyx_v_dmf);
-  __Pyx_XDECREF(__pyx_v_hierarchy);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":243
- *         return hierarchy
+/* "PETSc/DM.pyx":331
+ *         return toInt(value)
  * 
- *     def coarsenHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
- *         cdef PetscInt i, n = asInt(nlevels)
- *         cdef PetscDM *newdmc = NULL
+ *     def setLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_74coarsenHierarchy[] = "DM.coarsenHierarchy(self, nlevels)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nlevels = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_105setLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_104setLabelValue[] = "DM.setLabelValue(self, name, point, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_105setLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_point = 0;
+  PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("coarsenHierarchy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setLabelValue (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nlevels,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_point,&__pyx_n_s_value,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;
@@ -201018,224 +204893,151 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nlevels)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, 1); __PYX_ERR(40, 331, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, 2); __PYX_ERR(40, 331, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "coarsenHierarchy") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLabelValue") < 0)) __PYX_ERR(40, 331, __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_nlevels = values[0];
+    __pyx_v_name = values[0];
+    __pyx_v_point = values[1];
+    __pyx_v_value = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("coarsenHierarchy", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 331, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.coarsenHierarchy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_nlevels);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_104setLabelValue(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_point, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels) {
-  PetscInt __pyx_v_i;
-  PetscInt __pyx_v_n;
-  DM *__pyx_v_newdmc;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
-  struct PyPetscDMObject *__pyx_v_dmc = 0;
-  PyObject *__pyx_v_hierarchy = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_104setLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value) {
+  PetscInt __pyx_v_cpoint;
+  PetscInt __pyx_v_cvalue;
+  const char *__pyx_v_cname;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("coarsenHierarchy", 0);
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("setLabelValue", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":244
+  /* "PETSc/DM.pyx":332
  * 
- *     def coarsenHierarchy(self, nlevels):
- *         cdef PetscInt i, n = asInt(nlevels)             # <<<<<<<<<<<<<<
- *         cdef PetscDM *newdmc = NULL
- *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlevels); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_n = __pyx_t_1;
-
-  /* "PETSc/DM.pyx":245
- *     def coarsenHierarchy(self, nlevels):
- *         cdef PetscInt i, n = asInt(nlevels)
- *         cdef PetscDM *newdmc = NULL             # <<<<<<<<<<<<<<
- *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
- *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
- */
-  __pyx_v_newdmc = NULL;
-
-  /* "PETSc/DM.pyx":246
- *         cdef PetscInt i, n = asInt(nlevels)
- *         cdef PetscDM *newdmc = NULL
- *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)             # <<<<<<<<<<<<<<
- *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
- *         cdef DM dmc = None
- */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_newdmc)))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v_tmp = __pyx_t_3;
-  __pyx_t_3 = 0;
-
-  /* "PETSc/DM.pyx":247
- *         cdef PetscDM *newdmc = NULL
- *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
- *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )             # <<<<<<<<<<<<<<
- *         cdef DM dmc = None
- *         cdef list hierarchy = []
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCoarsenHierarchy(__pyx_v_self->dm, __pyx_v_n, __pyx_v_newdmc)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DM.pyx":248
- *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
- *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
- *         cdef DM dmc = None             # <<<<<<<<<<<<<<
- *         cdef list hierarchy = []
- *         for i from 0 <= i < n:
- */
-  __Pyx_INCREF(Py_None);
-  __pyx_v_dmc = ((struct PyPetscDMObject *)Py_None);
-
-  /* "PETSc/DM.pyx":249
- *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
- *         cdef DM dmc = None
- *         cdef list hierarchy = []             # <<<<<<<<<<<<<<
- *         for i from 0 <= i < n:
- *             dmc = subtype_DM(newdmc[i])()
- */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_hierarchy = ((PyObject*)__pyx_t_3);
-  __pyx_t_3 = 0;
-
-  /* "PETSc/DM.pyx":250
- *         cdef DM dmc = None
- *         cdef list hierarchy = []
- *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
- *             dmc = subtype_DM(newdmc[i])()
- *             dmc.dm = newdmc[i]
- */
-  __pyx_t_1 = __pyx_v_n;
-  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
-
-    /* "PETSc/DM.pyx":251
- *         cdef list hierarchy = []
- *         for i from 0 <= i < n:
- *             dmc = subtype_DM(newdmc[i])()             # <<<<<<<<<<<<<<
- *             dmc.dm = newdmc[i]
- *             hierarchy.append(dmc)
+ *     def setLabelValue(self, name, point, value):
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_newdmc[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF_SET(__pyx_v_dmc, ((struct PyPetscDMObject *)__pyx_t_2));
-    __pyx_t_2 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 332, __pyx_L1_error)
+  __pyx_v_cpoint = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 332, __pyx_L1_error)
+  __pyx_v_cvalue = __pyx_t_1;
 
-    /* "PETSc/DM.pyx":252
- *         for i from 0 <= i < n:
- *             dmc = subtype_DM(newdmc[i])()
- *             dmc.dm = newdmc[i]             # <<<<<<<<<<<<<<
- *             hierarchy.append(dmc)
- *         return hierarchy
+  /* "PETSc/DM.pyx":333
+ *     def setLabelValue(self, name, point, value):
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )
  */
-    __pyx_v_dmc->dm = (__pyx_v_newdmc[__pyx_v_i]);
+  __pyx_v_cname = NULL;
 
-    /* "PETSc/DM.pyx":253
- *             dmc = subtype_DM(newdmc[i])()
- *             dmc.dm = newdmc[i]
- *             hierarchy.append(dmc)             # <<<<<<<<<<<<<<
- *         return hierarchy
+  /* "PETSc/DM.pyx":334
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
  */
-    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_hierarchy, ((PyObject *)__pyx_v_dmc)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 334, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":254
- *             dmc.dm = newdmc[i]
- *             hierarchy.append(dmc)
- *         return hierarchy             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":335
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def clearLabelValue(self, name, point, value):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_hierarchy);
-  __pyx_r = __pyx_v_hierarchy;
-  goto __pyx_L0;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetLabelValue(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_cpoint, __pyx_v_cvalue)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(40, 335, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":243
- *         return hierarchy
+  /* "PETSc/DM.pyx":331
+ *         return toInt(value)
  * 
- *     def coarsenHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
- *         cdef PetscInt i, n = asInt(nlevels)
- *         cdef PetscDM *newdmc = NULL
+ *     def setLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
 
   /* 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_AddTraceback("petsc4py.PETSc.DM.coarsenHierarchy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp);
-  __Pyx_XDECREF((PyObject *)__pyx_v_dmc);
-  __Pyx_XDECREF(__pyx_v_hierarchy);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":258
- *     #
- * 
- *     def setDefaultSection(self, Section sec not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
+/* "PETSc/DM.pyx":337
+ *         CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
+ *     def clearLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_76setDefaultSection[] = "DM.setDefaultSection(self, Section sec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscSectionObject *__pyx_v_sec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_107clearLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_106clearLabelValue[] = "DM.clearLabelValue(self, name, point, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_107clearLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_point = 0;
+  PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDefaultSection (wrapper)", 0);
+  __Pyx_RefNannySetupContext("clearLabelValue (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_point,&__pyx_n_s_value,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;
@@ -201243,196 +205045,283 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(PyObject *__p
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sec)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, 1); __PYX_ERR(40, 337, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, 2); __PYX_ERR(40, 337, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDefaultSection") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clearLabelValue") < 0)) __PYX_ERR(40, 337, __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_sec = ((struct PyPetscSectionObject *)values[0]);
+    __pyx_v_name = values[0];
+    __pyx_v_point = values[1];
+    __pyx_v_value = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDefaultSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 337, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDefaultSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.clearLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "sec", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_76setDefaultSection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sec);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_106clearLabelValue(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_point, __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_8petsc4py_5PETSc_2DM_76setDefaultSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_106clearLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value) {
+  PetscInt __pyx_v_cpoint;
+  PetscInt __pyx_v_cvalue;
+  const char *__pyx_v_cname;
   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("setDefaultSection", 0);
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("clearLabelValue", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":259
+  /* "PETSc/DM.pyx":338
  * 
- *     def setDefaultSection(self, Section sec not None):
- *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )             # <<<<<<<<<<<<<<
+ *     def clearLabelValue(self, name, point, value):
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 338, __pyx_L1_error)
+  __pyx_v_cpoint = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 338, __pyx_L1_error)
+  __pyx_v_cvalue = __pyx_t_1;
+
+  /* "PETSc/DM.pyx":339
+ *     def clearLabelValue(self, name, point, value):
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/DM.pyx":340
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
- *     def getDefaultSection(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDefaultSection(__pyx_v_self->dm, __pyx_v_sec->sec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 340, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":258
- *     #
+  /* "PETSc/DM.pyx":341
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )             # <<<<<<<<<<<<<<
  * 
- *     def setDefaultSection(self, Section sec not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
+ *     def getLabelSize(self, name):
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMClearLabelValue(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_cpoint, __pyx_v_cvalue)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(40, 341, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":337
+ *         CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
+ *     def clearLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDefaultSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.clearLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":261
- *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
+/* "PETSc/DM.pyx":343
+ *         CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
- *     def getDefaultSection(self):             # <<<<<<<<<<<<<<
- *         cdef Section sec = Section()
- *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
+ *     def getLabelSize(self, name):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt size = 0
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_79getDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_78getDefaultSection[] = "DM.getDefaultSection(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_79getDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_109getLabelSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_108getLabelSize[] = "DM.getLabelSize(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_109getLabelSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDefaultSection (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDefaultSection", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDefaultSection", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getLabelSize (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,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_name)) != 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, "getLabelSize") < 0)) __PYX_ERR(40, 343, __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_name = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getLabelSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 343, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscSectionObject *__pyx_v_sec = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+  PetscInt __pyx_v_size;
+  const char *__pyx_v_cname;
   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("getDefaultSection", 0);
+  __Pyx_RefNannySetupContext("getLabelSize", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":262
+  /* "PETSc/DM.pyx":344
  * 
- *     def getDefaultSection(self):
- *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)
+ *     def getLabelSize(self, name):
+ *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Section)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_size = 0;
 
-  /* "PETSc/DM.pyx":263
- *     def getDefaultSection(self):
- *         cdef Section sec = Section()
- *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(sec.obj)
- *         return sec
+  /* "PETSc/DM.pyx":345
+ *     def getLabelSize(self, name):
+ *         cdef PetscInt size = 0
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetLabelSize(self.dm, cname, &size) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDefaultSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":264
- *         cdef Section sec = Section()
- *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
- *         return sec
+  /* "PETSc/DM.pyx":346
+ *         cdef PetscInt size = 0
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLabelSize(self.dm, cname, &size) )
+ *         return toInt(size)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 346, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":347
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetLabelSize(self.dm, cname, &size) )             # <<<<<<<<<<<<<<
+ *         return toInt(size)
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabelSize(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 347, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":265
- *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)
- *         return sec             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":348
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetLabelSize(self.dm, cname, &size) )
+ *         return toInt(size)             # <<<<<<<<<<<<<<
  * 
- *     def setDefaultGlobalSection(self, Section sec not None):
+ *     def getLabelIdIS(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_sec));
-  __pyx_r = ((PyObject *)__pyx_v_sec);
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":261
- *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
+  /* "PETSc/DM.pyx":343
+ *         CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
- *     def getDefaultSection(self):             # <<<<<<<<<<<<<<
- *         cdef Section sec = Section()
- *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
+ *     def getLabelSize(self, name):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt size = 0
+ *         cdef const_char *cname = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getDefaultSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_sec);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":267
- *         return sec
- * 
- *     def setDefaultGlobalSection(self, Section sec not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
+/* "PETSc/DM.pyx":350
+ *         return toInt(size)
  * 
+ *     def getLabelIdIS(self, name):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection[] = "DM.setDefaultGlobalSection(self, Section sec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscSectionObject *__pyx_v_sec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_111getLabelIdIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_110getLabelIdIS[] = "DM.getLabelIdIS(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_111getLabelIdIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDefaultGlobalSection (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getLabelIdIS (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -201445,197 +205334,300 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObjec
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sec)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 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, "setDefaultGlobalSection") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelIdIS") < 0)) __PYX_ERR(40, 350, __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_sec = ((struct PyPetscSectionObject *)values[0]);
+    __pyx_v_name = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDefaultGlobalSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getLabelIdIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 350, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDefaultGlobalSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelIdIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "sec", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sec);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+  const char *__pyx_v_cname;
+  struct PyPetscISObject *__pyx_v_lis = 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("setDefaultGlobalSection", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLabelIdIS", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":268
+  /* "PETSc/DM.pyx":351
  * 
- *     def setDefaultGlobalSection(self, Section sec not None):
- *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )             # <<<<<<<<<<<<<<
+ *     def getLabelIdIS(self, name):
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         cdef IS lis = IS()
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/DM.pyx":352
+ *     def getLabelIdIS(self, name):
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         cdef IS lis = IS()
+ *         CHKERR( DMGetLabelIdIS(self.dm, cname, &lis.iset) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":353
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         cdef IS lis = IS()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLabelIdIS(self.dm, cname, &lis.iset) )
+ *         return lis
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 353, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_lis = ((struct PyPetscISObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":354
+ *         name = str2bytes(name, &cname)
+ *         cdef IS lis = IS()
+ *         CHKERR( DMGetLabelIdIS(self.dm, cname, &lis.iset) )             # <<<<<<<<<<<<<<
+ *         return lis
  * 
- *     def getDefaultGlobalSection(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDefaultGlobalSection(__pyx_v_self->dm, __pyx_v_sec->sec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabelIdIS(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_lis->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 354, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":267
- *         return sec
+  /* "PETSc/DM.pyx":355
+ *         cdef IS lis = IS()
+ *         CHKERR( DMGetLabelIdIS(self.dm, cname, &lis.iset) )
+ *         return lis             # <<<<<<<<<<<<<<
  * 
- *     def setDefaultGlobalSection(self, Section sec not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
+ *     def getStratumSize(self, name, value):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_lis));
+  __pyx_r = ((PyObject *)__pyx_v_lis);
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":350
+ *         return toInt(size)
  * 
+ *     def getLabelIdIS(self, name):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setDefaultGlobalSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelIdIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_lis);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":270
- *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
+/* "PETSc/DM.pyx":357
+ *         return lis
  * 
- *     def getDefaultGlobalSection(self):             # <<<<<<<<<<<<<<
- *         cdef Section sec = Section()
- *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
+ *     def getStratumSize(self, name, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt size = 0
+ *         cdef PetscInt cvalue = asInt(value)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_83getDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection[] = "DM.getDefaultGlobalSection(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_83getDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_113getStratumSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_112getStratumSize[] = "DM.getStratumSize(self, name, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_113getStratumSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDefaultGlobalSection (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDefaultGlobalSection", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDefaultGlobalSection", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getStratumSize (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,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_name)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getStratumSize", 1, 2, 2, 1); __PYX_ERR(40, 357, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getStratumSize") < 0)) __PYX_ERR(40, 357, __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_name = values[0];
+    __pyx_v_value = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getStratumSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 357, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getStratumSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscSectionObject *__pyx_v_sec = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
+  PetscInt __pyx_v_size;
+  PetscInt __pyx_v_cvalue;
+  const char *__pyx_v_cname;
   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("getDefaultGlobalSection", 0);
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("getStratumSize", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":271
+  /* "PETSc/DM.pyx":358
  * 
- *     def getDefaultGlobalSection(self):
- *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)
+ *     def getStratumSize(self, name, value):
+ *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Section)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_size = 0;
 
-  /* "PETSc/DM.pyx":272
- *     def getDefaultGlobalSection(self):
- *         cdef Section sec = Section()
- *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(sec.obj)
- *         return sec
+  /* "PETSc/DM.pyx":359
+ *     def getStratumSize(self, name, value):
+ *         cdef PetscInt size = 0
+ *         cdef PetscInt cvalue = asInt(value)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDefaultGlobalSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 359, __pyx_L1_error)
+  __pyx_v_cvalue = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":273
- *         cdef Section sec = Section()
- *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
- *         return sec
+  /* "PETSc/DM.pyx":360
+ *         cdef PetscInt size = 0
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetStratumSize(self.dm, cname, cvalue, &size) )
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/DM.pyx":361
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetStratumSize(self.dm, cname, cvalue, &size) )
+ *         return toInt(size)
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 361, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DM.pyx":362
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetStratumSize(self.dm, cname, cvalue, &size) )             # <<<<<<<<<<<<<<
+ *         return toInt(size)
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetStratumSize(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_cvalue, (&__pyx_v_size))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(40, 362, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":274
- *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
- *         PetscINCREF(sec.obj)
- *         return sec             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":363
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMGetStratumSize(self.dm, cname, cvalue, &size) )
+ *         return toInt(size)             # <<<<<<<<<<<<<<
  * 
- *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):
+ *     def getStratumIS(self, name, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_sec));
-  __pyx_r = ((PyObject *)__pyx_v_sec);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 363, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":270
- *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
+  /* "PETSc/DM.pyx":357
+ *         return lis
  * 
- *     def getDefaultGlobalSection(self):             # <<<<<<<<<<<<<<
- *         cdef Section sec = Section()
- *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
+ *     def getStratumSize(self, name, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt size = 0
+ *         cdef PetscInt cvalue = asInt(value)
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getDefaultGlobalSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getStratumSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_sec);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":276
- *         return sec
- * 
- *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
+/* "PETSc/DM.pyx":365
+ *         return toInt(size)
  * 
+ *     def getStratumIS(self, name, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_84createDefaultSF[] = "DM.createDefaultSF(self, Section localsec, Section globalsec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscSectionObject *__pyx_v_localsec = 0;
-  struct PyPetscSectionObject *__pyx_v_globalsec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_115getStratumIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_114getStratumIS[] = "DM.getStratumIS(self, name, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_115getStratumIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createDefaultSF (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getStratumIS (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_localsec,&__pyx_n_s_globalsec,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -201649,16 +205641,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_localsec)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_globalsec)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createDefaultSF", 1, 2, 2, 1); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("getStratumIS", 1, 2, 2, 1); __PYX_ERR(40, 365, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDefaultSF") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getStratumIS") < 0)) __PYX_ERR(40, 365, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -201666,285 +205658,419 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_localsec = ((struct PyPetscSectionObject *)values[0]);
-    __pyx_v_globalsec = ((struct PyPetscSectionObject *)values[1]);
+    __pyx_v_name = values[0];
+    __pyx_v_value = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createDefaultSF", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getStratumIS", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 365, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createDefaultSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getStratumIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localsec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "localsec", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_globalsec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "globalsec", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_84createDefaultSF(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_localsec, __pyx_v_globalsec);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __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_8petsc4py_5PETSc_2DM_84createDefaultSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_localsec, struct PyPetscSectionObject *__pyx_v_globalsec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
+  PetscInt __pyx_v_cvalue;
+  const char *__pyx_v_cname;
+  struct PyPetscISObject *__pyx_v_sis = 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("createDefaultSF", 0);
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("getStratumIS", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":277
+  /* "PETSc/DM.pyx":366
  * 
- *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):
- *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )             # <<<<<<<<<<<<<<
+ *     def getStratumIS(self, name, value):
+ *         cdef PetscInt cvalue = asInt(value)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 366, __pyx_L1_error)
+  __pyx_v_cvalue = __pyx_t_1;
+
+  /* "PETSc/DM.pyx":367
+ *     def getStratumIS(self, name, value):
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         cdef IS sis = IS()
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/DM.pyx":368
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         cdef IS sis = IS()
+ *         CHKERR( DMGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 368, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DM.pyx":369
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         cdef IS sis = IS()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
+ *         return sis
+ */
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 369, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_sis = ((struct PyPetscISObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DM.pyx":370
+ *         name = str2bytes(name, &cname)
+ *         cdef IS sis = IS()
+ *         CHKERR( DMGetStratumIS(self.dm, cname, cvalue, &sis.iset) )             # <<<<<<<<<<<<<<
+ *         return sis
  * 
- *     def getDefaultSF(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateDefaultSF(__pyx_v_self->dm, __pyx_v_localsec->sec, __pyx_v_globalsec->sec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetStratumIS(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_cvalue, (&__pyx_v_sis->iset))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(40, 370, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":276
- *         return sec
+  /* "PETSc/DM.pyx":371
+ *         cdef IS sis = IS()
+ *         CHKERR( DMGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
+ *         return sis             # <<<<<<<<<<<<<<
  * 
- *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
+ *     def clearLabelStratum(self, name, value):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_sis));
+  __pyx_r = ((PyObject *)__pyx_v_sis);
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":365
+ *         return toInt(size)
  * 
+ *     def getStratumIS(self, name, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.createDefaultSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getStratumIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_sis);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":279
- *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
+/* "PETSc/DM.pyx":373
+ *         return sis
  * 
- *     def getDefaultSF(self):             # <<<<<<<<<<<<<<
- *         cdef SF sf = SF()
- *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
+ *     def clearLabelStratum(self, name, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_87getDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_86getDefaultSF[] = "DM.getDefaultSF(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_87getDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_117clearLabelStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_116clearLabelStratum[] = "DM.clearLabelStratum(self, name, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_117clearLabelStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDefaultSF (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDefaultSF", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDefaultSF", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("clearLabelStratum (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,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_name)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("clearLabelStratum", 1, 2, 2, 1); __PYX_ERR(40, 373, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clearLabelStratum") < 0)) __PYX_ERR(40, 373, __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_name = values[0];
+    __pyx_v_value = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("clearLabelStratum", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 373, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.clearLabelStratum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_116clearLabelStratum(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscSFObject *__pyx_v_sf = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_116clearLabelStratum(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
+  PetscInt __pyx_v_cvalue;
+  const char *__pyx_v_cname;
   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("getDefaultSF", 0);
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("clearLabelStratum", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":280
+  /* "PETSc/DM.pyx":374
  * 
- *     def getDefaultSF(self):
- *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
- *         PetscINCREF(sf.obj)
+ *     def clearLabelStratum(self, name, value):
+ *         cdef PetscInt cvalue = asInt(value)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SF)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 374, __pyx_L1_error)
+  __pyx_v_cvalue = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":281
- *     def getDefaultSF(self):
- *         cdef SF sf = SF()
- *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(sf.obj)
- *         return sf
+  /* "PETSc/DM.pyx":375
+ *     def clearLabelStratum(self, name, value):
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDefaultSF(__pyx_v_self->dm, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":282
- *         cdef SF sf = SF()
- *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
- *         PetscINCREF(sf.obj)             # <<<<<<<<<<<<<<
- *         return sf
+  /* "PETSc/DM.pyx":376
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sf->__pyx_base.obj);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 376, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":283
- *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
- *         PetscINCREF(sf.obj)
- *         return sf             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":377
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )             # <<<<<<<<<<<<<<
  * 
- *     def getPointSF(self):
+ *     def setLabelOutput(self, name, output):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_sf));
-  __pyx_r = ((PyObject *)__pyx_v_sf);
-  goto __pyx_L0;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMClearLabelStratum(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_cvalue)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(40, 377, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":279
- *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
+  /* "PETSc/DM.pyx":373
+ *         return sis
  * 
- *     def getDefaultSF(self):             # <<<<<<<<<<<<<<
- *         cdef SF sf = SF()
- *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
+ *     def clearLabelStratum(self, name, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef const_char *cname = NULL
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getDefaultSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.clearLabelStratum", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_sf);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":285
- *         return sf
+/* "PETSc/DM.pyx":379
+ *         CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )
  * 
- *     def getPointSF(self):             # <<<<<<<<<<<<<<
- *         cdef SF sf = SF()
- *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
+ *     def setLabelOutput(self, name, output):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_89getPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_88getPointSF[] = "DM.getPointSF(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_89getPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_119setLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_118setLabelOutput[] = "DM.setLabelOutput(self, name, output)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_119setLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_output = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getPointSF (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getPointSF", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPointSF", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(((struct PyPetscDMObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setLabelOutput (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_output,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_name)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_output)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setLabelOutput", 1, 2, 2, 1); __PYX_ERR(40, 379, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLabelOutput") < 0)) __PYX_ERR(40, 379, __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_name = values[0];
+    __pyx_v_output = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setLabelOutput", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 379, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_118setLabelOutput(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_output);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(struct PyPetscDMObject *__pyx_v_self) {
-  struct PyPetscSFObject *__pyx_v_sf = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_118setLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_output) {
+  const char *__pyx_v_cname;
+  PetscBool __pyx_v_coutput;
   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("getPointSF", 0);
+  PetscBool __pyx_t_2;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("setLabelOutput", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":286
+  /* "PETSc/DM.pyx":380
  * 
- *     def getPointSF(self):
- *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
- *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
- *         PetscINCREF(sf.obj)
+ *     def setLabelOutput(self, name, output):
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         cdef PetscBool coutput = output
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SF)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":287
- *     def getPointSF(self):
- *         cdef SF sf = SF()
- *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(sf.obj)
- *         return sf
+  /* "PETSc/DM.pyx":381
+ *     def setLabelOutput(self, name, output):
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool coutput = output
+ *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetPointSF(__pyx_v_self->dm, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 381, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":288
- *         cdef SF sf = SF()
- *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
- *         PetscINCREF(sf.obj)             # <<<<<<<<<<<<<<
- *         return sf
+  /* "PETSc/DM.pyx":382
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         cdef PetscBool coutput = output             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )
  * 
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sf->__pyx_base.obj);
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_output)); if (unlikely(PyErr_Occurred())) __PYX_ERR(40, 382, __pyx_L1_error)
+  __pyx_v_coutput = __pyx_t_2;
 
-  /* "PETSc/DM.pyx":289
- *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
- *         PetscINCREF(sf.obj)
- *         return sf             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":383
+ *         name = str2bytes(name, &cname)
+ *         cdef PetscBool coutput = output
+ *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )             # <<<<<<<<<<<<<<
  * 
- *     def setPointSF(self, SF sf not None):
+ *     def getLabelOutput(self, name):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_sf));
-  __pyx_r = ((PyObject *)__pyx_v_sf);
-  goto __pyx_L0;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetLabelOutput(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_coutput)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(40, 383, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":285
- *         return sf
+  /* "PETSc/DM.pyx":379
+ *         CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )
  * 
- *     def getPointSF(self):             # <<<<<<<<<<<<<<
- *         cdef SF sf = SF()
- *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
+ *     def setLabelOutput(self, name, output):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.getPointSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_sf);
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":291
- *         return sf
- * 
- *     def setPointSF(self, SF sf not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
+/* "PETSc/DM.pyx":385
+ *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )
  * 
+ *     def getLabelOutput(self, name):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_2DM_90setPointSF[] = "DM.setPointSF(self, SF sf)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscSFObject *__pyx_v_sf = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_120getLabelOutput[] = "DM.getLabelOutput(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setPointSF (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getLabelOutput (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sf,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -201957,72 +206083,112 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(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_sf)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 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, "setPointSF") < 0)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelOutput") < 0)) __PYX_ERR(40, 385, __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_sf = ((struct PyPetscSFObject *)values[0]);
+    __pyx_v_name = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPointSF", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[40]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getLabelOutput", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 385, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setPointSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_90setPointSF(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sf);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_90setPointSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+  const char *__pyx_v_cname;
+  PetscBool __pyx_v_coutput;
   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("setPointSF", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLabelOutput", 0);
+  __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":292
+  /* "PETSc/DM.pyx":386
  * 
- *     def setPointSF(self, SF sf not None):
- *         CHKERR( DMSetPointSF(self.dm, sf.sf) )             # <<<<<<<<<<<<<<
+ *     def getLabelOutput(self, name):
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cname)
+ *         cdef PetscBool coutput = PETSC_FALSE
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/DM.pyx":387
+ *     def getLabelOutput(self, name):
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool coutput = PETSC_FALSE
+ *         CHKERR( DMGetLabelOutput(self.dm, cname, &coutput) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 387, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":388
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
+ *         cdef PetscBool coutput = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLabelOutput(self.dm, cname, &coutput) )
+ *         return coutput
+ */
+  __pyx_v_coutput = PETSC_FALSE;
+
+  /* "PETSc/DM.pyx":389
+ *         name = str2bytes(name, &cname)
+ *         cdef PetscBool coutput = PETSC_FALSE
+ *         CHKERR( DMGetLabelOutput(self.dm, cname, &coutput) )             # <<<<<<<<<<<<<<
+ *         return coutput
  * 
- *     # backward compatibility
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetPointSF(__pyx_v_self->dm, __pyx_v_sf->sf)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabelOutput(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_coutput))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 389, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":291
- *         return sf
+  /* "PETSc/DM.pyx":390
+ *         cdef PetscBool coutput = PETSC_FALSE
+ *         CHKERR( DMGetLabelOutput(self.dm, cname, &coutput) )
+ *         return coutput             # <<<<<<<<<<<<<<
  * 
- *     def setPointSF(self, SF sf not None):             # <<<<<<<<<<<<<<
- *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
+ *     # backward compatibility
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_From_PetscBool(__pyx_v_coutput); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 390, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":385
+ *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )
  * 
+ *     def getLabelOutput(self, name):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         name = str2bytes(name, &cname)
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DM.setPointSF", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -202050,9 +206216,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_1create(PyObject *__pyx_v_self,
   int __pyx_v_setup;
   PyObject *__pyx_v_ownership_ranges = 0;
   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);
@@ -202163,7 +206326,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_1create(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[41]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(41, 25, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -202189,7 +206352,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_1create(PyObject *__pyx_v_self,
     __pyx_v_stencil_type = values[5];
     __pyx_v_stencil_width = values[6];
     if (values[7]) {
-      __pyx_v_setup = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_setup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_setup = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_setup == (int)-1) && PyErr_Occurred())) __PYX_ERR(41, 28, __pyx_L3_error)
     } else {
       __pyx_v_setup = ((int)1);
     }
@@ -202198,7 +206361,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_1create(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 10, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 25, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -202241,7 +206404,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   PyObject *__pyx_v_psizes = 0;
   PetscInt __pyx_v_gdim;
   PetscInt __pyx_v_pdim;
-  CYTHON_UNUSED PyObject *__pyx_v_oranges = NULL;
   MPI_Comm __pyx_v_ccomm;
   DM __pyx_v_newda;
   PyObject *__pyx_r = NULL;
@@ -202257,12 +206419,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   PetscInt __pyx_t_9;
   DMDAStencilType __pyx_t_10;
   MPI_Comm __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
   __Pyx_INCREF(__pyx_v_dim);
   __Pyx_INCREF(__pyx_v_sizes);
+  __Pyx_INCREF(__pyx_v_ownership_ranges);
 
   /* "PETSc/DMDA.pyx":30
  *                bint setup=True, ownership_ranges=None, comm=None):
@@ -202282,25 +206442,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         else: dim, sizes = None, arg
  */
   {
+    __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:*/ {
-      __pyx_t_4 = PySequence_Tuple(__pyx_v_dim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_4 = PySequence_Tuple(__pyx_v_dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 31, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_4);
       __pyx_t_4 = 0;
     }
-    /*else:*/ {
 
-      /* "PETSc/DMDA.pyx":33
+    /* "PETSc/DMDA.pyx":33
  *         try: arg = tuple(dim)
  *         except TypeError: pass
  *         else: dim, sizes = None, arg             # <<<<<<<<<<<<<<
  *         #
  *         cdef PetscInt ndim = PETSC_DECIDE
  */
+    /*else:*/ {
       __pyx_t_4 = Py_None;
       __Pyx_INCREF(__pyx_t_4);
       __pyx_t_5 = __pyx_v_arg;
@@ -202315,6 +206477,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L10_try_end;
     __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "PETSc/DMDA.pyx":32
@@ -202324,19 +206487,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         else: dim, sizes = None, arg
  *         #
  */
-    __pyx_t_6 = PyErr_ExceptionMatches(__pyx_builtin_TypeError);
+    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
     if (__pyx_t_6) {
-      PyErr_Restore(0,0,0);
+      __Pyx_ErrRestore(0,0,0);
       goto __pyx_L4_exception_handled;
     }
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
+
+    /* "PETSc/DMDA.pyx":31
+ *         #
+ *         cdef object arg = None
+ *         try: arg = tuple(dim)             # <<<<<<<<<<<<<<
+ *         except TypeError: pass
+ *         else: dim, sizes = None, arg
+ */
+    __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);
@@ -202496,11 +206669,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         if psizes is not None:
  *             pdim = asDims(psizes, &m, &n, &p)
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_gsizes, (&__pyx_v_M), (&__pyx_v_N), (&__pyx_v_P)); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_gsizes, (&__pyx_v_M), (&__pyx_v_N), (&__pyx_v_P)); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(41, 51, __pyx_L1_error)
     __pyx_v_gdim = __pyx_t_9;
-    goto __pyx_L11;
+
+    /* "PETSc/DMDA.pyx":50
+ *         cdef PetscInt gdim = PETSC_DECIDE
+ *         cdef PetscInt pdim = PETSC_DECIDE
+ *         if sizes is not None:             # <<<<<<<<<<<<<<
+ *             gdim = asDims(gsizes, &M, &N, &P)
+ *         if psizes is not None:
+ */
   }
-  __pyx_L11:;
 
   /* "PETSc/DMDA.pyx":52
  *         if sizes is not None:
@@ -202520,11 +206699,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         if gdim>=0 and pdim>=0:
  *             assert gdim == pdim
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_psizes, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p)); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_psizes, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p)); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(41, 53, __pyx_L1_error)
     __pyx_v_pdim = __pyx_t_9;
-    goto __pyx_L12;
+
+    /* "PETSc/DMDA.pyx":52
+ *         if sizes is not None:
+ *             gdim = asDims(gsizes, &M, &N, &P)
+ *         if psizes is not None:             # <<<<<<<<<<<<<<
+ *             pdim = asDims(psizes, &m, &n, &p)
+ *         if gdim>=0 and pdim>=0:
+ */
   }
-  __pyx_L12:;
 
   /* "PETSc/DMDA.pyx":54
  *         if psizes is not None:
@@ -202555,13 +206740,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
     if (unlikely(!Py_OptimizeFlag)) {
       if (unlikely(!((__pyx_v_gdim == __pyx_v_pdim) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[41]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(41, 55, __pyx_L1_error)
       }
     }
     #endif
-    goto __pyx_L13;
+
+    /* "PETSc/DMDA.pyx":54
+ *         if psizes is not None:
+ *             pdim = asDims(psizes, &m, &n, &p)
+ *         if gdim>=0 and pdim>=0:             # <<<<<<<<<<<<<<
+ *             assert gdim == pdim
+ *         # dim and dof
+ */
   }
-  __pyx_L13:;
 
   /* "PETSc/DMDA.pyx":57
  *             assert gdim == pdim
@@ -202573,11 +206764,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   __pyx_t_7 = (__pyx_v_dim != Py_None);
   __pyx_t_8 = (__pyx_t_7 != 0);
   if (__pyx_t_8) {
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(41, 57, __pyx_L1_error)
     __pyx_v_ndim = __pyx_t_9;
-    goto __pyx_L16;
   }
-  __pyx_L16:;
 
   /* "PETSc/DMDA.pyx":58
  *         # dim and dof
@@ -202589,11 +206778,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   __pyx_t_8 = (__pyx_v_dof != Py_None);
   __pyx_t_7 = (__pyx_t_8 != 0);
   if (__pyx_t_7) {
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(41, 58, __pyx_L1_error)
     __pyx_v_ndof = __pyx_t_9;
-    goto __pyx_L17;
   }
-  __pyx_L17:;
 
   /* "PETSc/DMDA.pyx":59
  *         if dim is not None: ndim = asInt(dim)
@@ -202605,9 +206792,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   __pyx_t_7 = ((__pyx_v_ndim == PETSC_DECIDE) != 0);
   if (__pyx_t_7) {
     __pyx_v_ndim = __pyx_v_gdim;
-    goto __pyx_L18;
   }
-  __pyx_L18:;
 
   /* "PETSc/DMDA.pyx":60
  *         if dof is not None: ndof = asInt(dof)
@@ -202619,16 +206804,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   __pyx_t_7 = ((__pyx_v_ndof == PETSC_DECIDE) != 0);
   if (__pyx_t_7) {
     __pyx_v_ndof = 1;
-    goto __pyx_L19;
   }
-  __pyx_L19:;
 
   /* "PETSc/DMDA.pyx":62
  *         if ndof==PETSC_DECIDE: ndof = 1
  *         # vertex distribution
  *         if ownership_ranges is not None:             # <<<<<<<<<<<<<<
- *             oranges = asOwnershipRanges(ownership_ranges,
- *                                         ndim, &m, &n, &p,
+ *             ownership_ranges = asOwnershipRanges(ownership_ranges,
+ *                                                  ndim, &m, &n, &p,
  */
   __pyx_t_7 = (__pyx_v_ownership_ranges != Py_None);
   __pyx_t_8 = (__pyx_t_7 != 0);
@@ -202637,20 +206820,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
     /* "PETSc/DMDA.pyx":63
  *         # vertex distribution
  *         if ownership_ranges is not None:
- *             oranges = asOwnershipRanges(ownership_ranges,             # <<<<<<<<<<<<<<
- *                                         ndim, &m, &n, &p,
- *                                         &lx, &ly, &lz)
+ *             ownership_ranges = asOwnershipRanges(ownership_ranges,             # <<<<<<<<<<<<<<
+ *                                                  ndim, &m, &n, &p,
+ *                                                  &lx, &ly, &lz)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asOwnershipRanges(__pyx_v_ownership_ranges, __pyx_v_ndim, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p), (&__pyx_v_lx), (&__pyx_v_ly), (&__pyx_v_lz)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asOwnershipRanges(__pyx_v_ownership_ranges, __pyx_v_ndim, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p), (&__pyx_v_lx), (&__pyx_v_ly), (&__pyx_v_lz)); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 63, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_v_oranges = ((PyObject*)__pyx_t_5);
+    __Pyx_DECREF_SET(__pyx_v_ownership_ranges, __pyx_t_5);
     __pyx_t_5 = 0;
-    goto __pyx_L20;
+
+    /* "PETSc/DMDA.pyx":62
+ *         if ndof==PETSC_DECIDE: ndof = 1
+ *         # vertex distribution
+ *         if ownership_ranges is not None:             # <<<<<<<<<<<<<<
+ *             ownership_ranges = asOwnershipRanges(ownership_ranges,
+ *                                                  ndim, &m, &n, &p,
+ */
   }
-  __pyx_L20:;
 
   /* "PETSc/DMDA.pyx":67
- *                                         &lx, &ly, &lz)
+ *                                                  &lx, &ly, &lz)
  *         # periodicity, stencil type & width
  *         if boundary_type is not None:             # <<<<<<<<<<<<<<
  *             asBoundary(boundary_type, &btx, &bty, &btz)
@@ -202667,10 +206856,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         if stencil_type is not None:
  *             stype = asStencil(stencil_type)
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asBoundary(__pyx_v_boundary_type, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz)); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L21;
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asBoundary(__pyx_v_boundary_type, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz)); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(41, 68, __pyx_L1_error)
+
+    /* "PETSc/DMDA.pyx":67
+ *                                                  &lx, &ly, &lz)
+ *         # periodicity, stencil type & width
+ *         if boundary_type is not None:             # <<<<<<<<<<<<<<
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
+ *         if stencil_type is not None:
+ */
   }
-  __pyx_L21:;
 
   /* "PETSc/DMDA.pyx":69
  *         if boundary_type is not None:
@@ -202690,11 +206885,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         if stencil_width is not None:
  *             swidth = asInt(stencil_width)
  */
-    __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_10 == ((DMDAStencilType)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_10 == ((DMDAStencilType)-1L))) __PYX_ERR(41, 70, __pyx_L1_error)
     __pyx_v_stype = __pyx_t_10;
-    goto __pyx_L22;
+
+    /* "PETSc/DMDA.pyx":69
+ *         if boundary_type is not None:
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
+ *         if stencil_type is not None:             # <<<<<<<<<<<<<<
+ *             stype = asStencil(stencil_type)
+ *         if stencil_width is not None:
+ */
   }
-  __pyx_L22:;
 
   /* "PETSc/DMDA.pyx":71
  *         if stencil_type is not None:
@@ -202714,11 +206915,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         if setup and swidth == PETSC_DECIDE: swidth = 0
  *         # create the DMDA object
  */
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_9 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_9 == -1L && PyErr_Occurred())) __PYX_ERR(41, 72, __pyx_L1_error)
     __pyx_v_swidth = __pyx_t_9;
-    goto __pyx_L23;
+
+    /* "PETSc/DMDA.pyx":71
+ *         if stencil_type is not None:
+ *             stype = asStencil(stencil_type)
+ *         if stencil_width is not None:             # <<<<<<<<<<<<<<
+ *             swidth = asInt(stencil_width)
+ *         if setup and swidth == PETSC_DECIDE: swidth = 0
+ */
   }
-  __pyx_L23:;
 
   /* "PETSc/DMDA.pyx":73
  *         if stencil_width is not None:
@@ -202738,9 +206945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   __pyx_L25_bool_binop_done:;
   if (__pyx_t_7) {
     __pyx_v_swidth = 0;
-    goto __pyx_L24;
   }
-  __pyx_L24:;
 
   /* "PETSc/DMDA.pyx":75
  *         if setup and swidth == PETSC_DECIDE: swidth = 0
@@ -202749,7 +206954,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         cdef PetscDM newda = NULL
  *         CHKERR( DMDACreateND(ccomm, ndim, ndof,
  */
-  __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(41, 75, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_11;
 
   /* "PETSc/DMDA.pyx":76
@@ -202768,7 +206973,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *                              M, N, P, m, n, p, lx, ly, lz,
  *                              btx, bty, btz, stype, swidth,
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDACreateND(__pyx_v_ccomm, __pyx_v_ndim, __pyx_v_ndof, __pyx_v_M, __pyx_v_N, __pyx_v_P, __pyx_v_m, __pyx_v_n, __pyx_v_p, __pyx_v_lx, __pyx_v_ly, __pyx_v_lz, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz, __pyx_v_stype, __pyx_v_swidth, (&__pyx_v_newda))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDACreateND(__pyx_v_ccomm, __pyx_v_ndim, __pyx_v_ndof, __pyx_v_M, __pyx_v_N, __pyx_v_P, __pyx_v_m, __pyx_v_n, __pyx_v_p, __pyx_v_lx, __pyx_v_ly, __pyx_v_lz, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz, __pyx_v_stype, __pyx_v_swidth, (&__pyx_v_newda))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(41, 77, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":81
  *                              btx, bty, btz, stype, swidth,
@@ -202787,10 +206992,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   __pyx_t_7 = __pyx_t_8;
   __pyx_L28_bool_binop_done:;
   if (__pyx_t_7) {
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_newda)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L27;
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_newda)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(41, 81, __pyx_L1_error)
   }
-  __pyx_L27:;
 
   /* "PETSc/DMDA.pyx":82
  *                              &newda) )
@@ -202832,9 +207035,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   __Pyx_XDECREF(__pyx_v_arg);
   __Pyx_XDECREF(__pyx_v_gsizes);
   __Pyx_XDECREF(__pyx_v_psizes);
-  __Pyx_XDECREF(__pyx_v_oranges);
   __Pyx_XDECREF(__pyx_v_dim);
   __Pyx_XDECREF(__pyx_v_sizes);
+  __Pyx_XDECREF(__pyx_v_ownership_ranges);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -202856,9 +207059,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_3duplicate(PyObject *__pyx_v_se
   PyObject *__pyx_v_boundary_type = 0;
   PyObject *__pyx_v_stencil_type = 0;
   PyObject *__pyx_v_stencil_width = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("duplicate (wrapper)", 0);
@@ -202912,7 +207112,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_3duplicate(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "duplicate") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "duplicate") < 0)) __PYX_ERR(41, 85, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -202931,7 +207131,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_3duplicate(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("duplicate", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("duplicate", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 85, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.duplicate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -202979,9 +207179,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
   PetscInt __pyx_t_4;
   DMDAStencilType __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("duplicate", 0);
 
   /* "PETSc/DMDA.pyx":87
@@ -203068,7 +207265,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *                           &ndim,
  *                           &M, &N, &P,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_ndim), (&__pyx_v_M), (&__pyx_v_N), (&__pyx_v_P), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p), (&__pyx_v_ndof), (&__pyx_v_swidth), (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz), (&__pyx_v_stype))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_ndim), (&__pyx_v_M), (&__pyx_v_N), (&__pyx_v_P), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p), (&__pyx_v_ndof), (&__pyx_v_swidth), (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz), (&__pyx_v_stype))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 95, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":102
  *                           &btx, &bty, &btz,
@@ -203088,7 +207285,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &comm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetOwnershipRanges(__pyx_v_self->__pyx_base.dm, (&__pyx_v_lx), (&__pyx_v_ly), (&__pyx_v_lz))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetOwnershipRanges(__pyx_v_self->__pyx_base.dm, (&__pyx_v_lx), (&__pyx_v_ly), (&__pyx_v_lz))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 103, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":104
  *         cdef const_PetscInt *lx = NULL, *ly = NULL, *lz = NULL
@@ -203106,7 +207303,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *         #
  *         if dof is not None:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->__pyx_base.dm), (&__pyx_v_comm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->__pyx_base.dm), (&__pyx_v_comm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 105, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":107
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &comm) )
@@ -203126,11 +207323,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *         if boundary_type is not None:
  *             asBoundary(boundary_type, &btx, &bty, &btz)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(41, 108, __pyx_L1_error)
     __pyx_v_ndof = __pyx_t_4;
-    goto __pyx_L3;
+
+    /* "PETSc/DMDA.pyx":107
+ *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &comm) )
+ *         #
+ *         if dof is not None:             # <<<<<<<<<<<<<<
+ *             ndof = asInt(dof)
+ *         if boundary_type is not None:
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/DMDA.pyx":109
  *         if dof is not None:
@@ -203150,10 +207353,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *         if stencil_type  is not None:
  *             stype = asStencil(stencil_type)
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundary(__pyx_v_boundary_type, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz)); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundary(__pyx_v_boundary_type, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz)); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(41, 110, __pyx_L1_error)
+
+    /* "PETSc/DMDA.pyx":109
+ *         if dof is not None:
+ *             ndof = asInt(dof)
+ *         if boundary_type is not None:             # <<<<<<<<<<<<<<
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
+ *         if stencil_type  is not None:
+ */
   }
-  __pyx_L4:;
 
   /* "PETSc/DMDA.pyx":111
  *         if boundary_type is not None:
@@ -203173,11 +207382,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *         if stencil_width is not None:
  *             swidth = asInt(stencil_width)
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_5 == ((DMDAStencilType)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_5 == ((DMDAStencilType)-1L))) __PYX_ERR(41, 112, __pyx_L1_error)
     __pyx_v_stype = __pyx_t_5;
-    goto __pyx_L5;
+
+    /* "PETSc/DMDA.pyx":111
+ *         if boundary_type is not None:
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
+ *         if stencil_type  is not None:             # <<<<<<<<<<<<<<
+ *             stype = asStencil(stencil_type)
+ *         if stencil_width is not None:
+ */
   }
-  __pyx_L5:;
 
   /* "PETSc/DMDA.pyx":113
  *         if stencil_type  is not None:
@@ -203197,11 +207412,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *         #
  *         cdef DMDA da = DMDA()
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(41, 114, __pyx_L1_error)
     __pyx_v_swidth = __pyx_t_4;
-    goto __pyx_L6;
+
+    /* "PETSc/DMDA.pyx":113
+ *         if stencil_type  is not None:
+ *             stype = asStencil(stencil_type)
+ *         if stencil_width is not None:             # <<<<<<<<<<<<<<
+ *             swidth = asInt(stencil_width)
+ *         #
+ */
   }
-  __pyx_L6:;
 
   /* "PETSc/DMDA.pyx":116
  *             swidth = asInt(stencil_width)
@@ -203210,7 +207431,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *         CHKERR( DMDACreateND(comm, ndim, ndof,
  *                              M, N, P, m, n, p, lx, ly, lz,
  */
-  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMDA)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_v_da = ((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_t_6);
   __pyx_t_6 = 0;
@@ -203222,7 +207443,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *                              M, N, P, m, n, p, lx, ly, lz,
  *                              btx, bty, btz, stype, swidth,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDACreateND(__pyx_v_comm, __pyx_v_ndim, __pyx_v_ndof, __pyx_v_M, __pyx_v_N, __pyx_v_P, __pyx_v_m, __pyx_v_n, __pyx_v_p, __pyx_v_lx, __pyx_v_ly, __pyx_v_lz, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz, __pyx_v_stype, __pyx_v_swidth, (&__pyx_v_da->__pyx_base.dm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDACreateND(__pyx_v_comm, __pyx_v_ndim, __pyx_v_ndof, __pyx_v_M, __pyx_v_N, __pyx_v_P, __pyx_v_m, __pyx_v_n, __pyx_v_p, __pyx_v_lx, __pyx_v_ly, __pyx_v_lz, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz, __pyx_v_stype, __pyx_v_swidth, (&__pyx_v_da->__pyx_base.dm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 117, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":121
  *                              btx, bty, btz, stype, swidth,
@@ -203231,7 +207452,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_2duplicate(struct __pyx_obj_8pe
  *         return da
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_da->__pyx_base.dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_da->__pyx_base.dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 121, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":122
  *                              &da.dm) )
@@ -203278,9 +207499,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_5setDim(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_4DMDA_4setDim[] = "DMDA.setDim(self, dim)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_5setDim(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_dim = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDim (wrapper)", 0);
@@ -203302,7 +207520,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_5setDim(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, "setDim") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDim") < 0)) __PYX_ERR(41, 126, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -203313,7 +207531,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_5setDim(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDim", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDim", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 126, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setDim", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -203333,9 +207551,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_4setDim(struct __pyx_obj_8petsc
   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("setDim", 0);
 
   /* "PETSc/DMDA.pyx":127
@@ -203346,7 +207561,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_4setDim(struct __pyx_obj_8petsc
  *     def getDim(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDimension); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDimension); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -203359,16 +207574,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_4setDim(struct __pyx_obj_8petsc
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_dim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 127, __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[41]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 127, __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_dim);
     __Pyx_GIVEREF(__pyx_v_dim);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_dim);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 127; __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(41, 127, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
@@ -203430,9 +207645,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6getDim(struct __pyx_obj_8petsc
   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("getDim", 0);
 
   /* "PETSc/DMDA.pyx":130
@@ -203443,7 +207655,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6getDim(struct __pyx_obj_8petsc
  *     def setDof(self, dof):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDimension); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDimension); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -203456,10 +207668,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6getDim(struct __pyx_obj_8petsc
     }
   }
   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[41]; __pyx_lineno = 130; __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(41, 130, __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[41]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 130, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -203501,9 +207713,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_9setDof(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_4DMDA_8setDof[] = "DMDA.setDof(self, dof)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_9setDof(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_dof = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setDof (wrapper)", 0);
@@ -203525,7 +207734,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_9setDof(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, "setDof") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDof") < 0)) __PYX_ERR(41, 132, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -203536,7 +207745,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_9setDof(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 132, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setDof", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -203555,9 +207764,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_8setDof(struct __pyx_obj_8petsc
   __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("setDof", 0);
 
   /* "PETSc/DMDA.pyx":133
@@ -203567,7 +207773,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_8setDof(struct __pyx_obj_8petsc
  *         CHKERR( DMDASetDof(self.dm, ndof) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 133, __pyx_L1_error)
   __pyx_v_ndof = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":134
@@ -203577,7 +207783,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_8setDof(struct __pyx_obj_8petsc
  * 
  *     def getDof(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetDof(__pyx_v_self->__pyx_base.dm, __pyx_v_ndof)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetDof(__pyx_v_self->__pyx_base.dm, __pyx_v_ndof)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 134, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":132
  *         return self.getDimension()
@@ -203630,9 +207836,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10getDof(struct __pyx_obj_8pets
   __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("getDof", 0);
 
   /* "PETSc/DMDA.pyx":137
@@ -203651,7 +207854,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10getDof(struct __pyx_obj_8pets
  *                             NULL,
  *                             NULL, NULL, NULL,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_dof), NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_dof), NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 138, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":145
  *                             NULL, NULL, NULL,
@@ -203661,7 +207864,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10getDof(struct __pyx_obj_8pets
  *     def setSizes(self, sizes):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_dof); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_dof); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -203699,9 +207902,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13setSizes(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_4DMDA_12setSizes[] = "DMDA.setSizes(self, sizes)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13setSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_sizes = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setSizes (wrapper)", 0);
@@ -203723,7 +207923,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13setSizes(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, "setSizes") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSizes") < 0)) __PYX_ERR(41, 147, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -203734,7 +207934,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13setSizes(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSizes", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSizes", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 147, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -203760,9 +207960,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12setSizes(struct __pyx_obj_8pe
   PetscInt __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("setSizes", 0);
 
   /* "PETSc/DMDA.pyx":148
@@ -203772,7 +207969,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12setSizes(struct __pyx_obj_8pe
  *         cdef PetscInt gdim = PETSC_DECIDE
  *         cdef PetscInt M = 1
  */
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_sizes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_sizes); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 148, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_gsizes = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -203820,7 +208017,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12setSizes(struct __pyx_obj_8pe
  *         cdef PetscInt dim = PETSC_DECIDE
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_gsizes, (&__pyx_v_M), (&__pyx_v_N), (&__pyx_v_P)); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_gsizes, (&__pyx_v_M), (&__pyx_v_N), (&__pyx_v_P)); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(41, 153, __pyx_L1_error)
   __pyx_v_gdim = __pyx_t_2;
 
   /* "PETSc/DMDA.pyx":154
@@ -203839,7 +208036,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12setSizes(struct __pyx_obj_8pe
  *         if dim == PETSC_DECIDE:
  *             CHKERR( DMSetDimension(self.dm, gdim) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 155, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":156
  *         cdef PetscInt dim = PETSC_DECIDE
@@ -203858,10 +208055,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12setSizes(struct __pyx_obj_8pe
  *         CHKERR( DMDASetSizes(self.dm, M, N, P) )
  * 
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->__pyx_base.dm, __pyx_v_gdim)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->__pyx_base.dm, __pyx_v_gdim)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 157, __pyx_L1_error)
+
+    /* "PETSc/DMDA.pyx":156
+ *         cdef PetscInt dim = PETSC_DECIDE
+ *         CHKERR( DMDAGetDim(self.dm, &dim) )
+ *         if dim == PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *             CHKERR( DMSetDimension(self.dm, gdim) )
+ *         CHKERR( DMDASetSizes(self.dm, M, N, P) )
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/DMDA.pyx":158
  *         if dim == PETSC_DECIDE:
@@ -203870,7 +208073,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12setSizes(struct __pyx_obj_8pe
  * 
  *     def getSizes(self):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetSizes(__pyx_v_self->__pyx_base.dm, __pyx_v_M, __pyx_v_N, __pyx_v_P)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetSizes(__pyx_v_self->__pyx_base.dm, __pyx_v_M, __pyx_v_N, __pyx_v_P)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 158, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":147
  *         return toInt(dof)
@@ -203928,9 +208131,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_14getSizes(struct __pyx_obj_8pe
   __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("getSizes", 0);
 
   /* "PETSc/DMDA.pyx":161
@@ -203976,7 +208176,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_14getSizes(struct __pyx_obj_8pe
  *                             &dim,
  *                             &M, &N, &P,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim), (&__pyx_v_M), (&__pyx_v_N), (&__pyx_v_P), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim), (&__pyx_v_M), (&__pyx_v_N), (&__pyx_v_P), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 165, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":172
  *                             NULL, NULL, NULL,
@@ -203986,7 +208186,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_14getSizes(struct __pyx_obj_8pe
  *     def setProcSizes(self, proc_sizes):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_M, __pyx_v_N, __pyx_v_P); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_M, __pyx_v_N, __pyx_v_P); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 172, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -204024,9 +208224,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_17setProcSizes(PyObject *__pyx_
 static char __pyx_doc_8petsc4py_5PETSc_4DMDA_16setProcSizes[] = "DMDA.setProcSizes(self, proc_sizes)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_17setProcSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_proc_sizes = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setProcSizes (wrapper)", 0);
@@ -204048,7 +208245,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_17setProcSizes(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, "setProcSizes") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setProcSizes") < 0)) __PYX_ERR(41, 174, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204059,7 +208256,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_17setProcSizes(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setProcSizes", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setProcSizes", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 174, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setProcSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -204085,9 +208282,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_16setProcSizes(struct __pyx_obj
   PetscInt __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("setProcSizes", 0);
 
   /* "PETSc/DMDA.pyx":175
@@ -204097,7 +208291,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_16setProcSizes(struct __pyx_obj
  *         cdef PetscInt pdim = PETSC_DECIDE
  *         cdef PetscInt m = PETSC_DECIDE
  */
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_proc_sizes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_proc_sizes); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_psizes = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -204145,7 +208339,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_16setProcSizes(struct __pyx_obj
  *         cdef PetscInt dim = PETSC_DECIDE
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_psizes, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p)); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asDims(__pyx_v_psizes, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p)); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(41, 180, __pyx_L1_error)
   __pyx_v_pdim = __pyx_t_2;
 
   /* "PETSc/DMDA.pyx":181
@@ -204164,7 +208358,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_16setProcSizes(struct __pyx_obj
  *         if dim == PETSC_DECIDE:
  *             CHKERR( DMSetDimension(self.dm, pdim) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 182, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":183
  *         cdef PetscInt dim = PETSC_DECIDE
@@ -204183,10 +208377,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_16setProcSizes(struct __pyx_obj
  *         CHKERR( DMDASetNumProcs(self.dm, m, n, p) )
  * 
  */
-    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->__pyx_base.dm, __pyx_v_pdim)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->__pyx_base.dm, __pyx_v_pdim)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 184, __pyx_L1_error)
+
+    /* "PETSc/DMDA.pyx":183
+ *         cdef PetscInt dim = PETSC_DECIDE
+ *         CHKERR( DMDAGetDim(self.dm, &dim) )
+ *         if dim == PETSC_DECIDE:             # <<<<<<<<<<<<<<
+ *             CHKERR( DMSetDimension(self.dm, pdim) )
+ *         CHKERR( DMDASetNumProcs(self.dm, m, n, p) )
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/DMDA.pyx":185
  *         if dim == PETSC_DECIDE:
@@ -204195,7 +208395,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_16setProcSizes(struct __pyx_obj
  * 
  *     def getProcSizes(self):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetNumProcs(__pyx_v_self->__pyx_base.dm, __pyx_v_m, __pyx_v_n, __pyx_v_p)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetNumProcs(__pyx_v_self->__pyx_base.dm, __pyx_v_m, __pyx_v_n, __pyx_v_p)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 185, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":174
  *         return toDims(dim, M, N, P)
@@ -204253,9 +208453,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_18getProcSizes(struct __pyx_obj
   __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("getProcSizes", 0);
 
   /* "PETSc/DMDA.pyx":188
@@ -204301,7 +208498,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_18getProcSizes(struct __pyx_obj
  *                             &dim,
  *                             NULL, NULL, NULL,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim), NULL, NULL, NULL, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p), NULL, NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim), NULL, NULL, NULL, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p), NULL, NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 192, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":199
  *                             NULL, NULL, NULL,
@@ -204311,7 +208508,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_18getProcSizes(struct __pyx_obj
  *     def setBoundaryType(self, boundary_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_m, __pyx_v_n, __pyx_v_p); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_m, __pyx_v_n, __pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 199, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -204349,9 +208546,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_21setBoundaryType(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_4DMDA_20setBoundaryType[] = "DMDA.setBoundaryType(self, boundary_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_21setBoundaryType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_boundary_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setBoundaryType (wrapper)", 0);
@@ -204373,7 +208567,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_21setBoundaryType(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, "setBoundaryType") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBoundaryType") < 0)) __PYX_ERR(41, 201, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204384,7 +208578,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_21setBoundaryType(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBoundaryType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBoundaryType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 201, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setBoundaryType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -204405,9 +208599,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_20setBoundaryType(struct __pyx_
   __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("setBoundaryType", 0);
 
   /* "PETSc/DMDA.pyx":202
@@ -204444,7 +208635,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_20setBoundaryType(struct __pyx_
  *         CHKERR( DMDASetBoundaryType(self.dm, btx, bty, btz) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asBoundary(__pyx_v_boundary_type, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz)); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asBoundary(__pyx_v_boundary_type, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz)); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 205, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":206
  *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
@@ -204453,7 +208644,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_20setBoundaryType(struct __pyx_
  * 
  *     def getBoundaryType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetBoundaryType(__pyx_v_self->__pyx_base.dm, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetBoundaryType(__pyx_v_self->__pyx_base.dm, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 206, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":201
  *         return toDims(dim, m, n, p)
@@ -204509,9 +208700,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_22getBoundaryType(struct __pyx_
   __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("getBoundaryType", 0);
 
   /* "PETSc/DMDA.pyx":209
@@ -204557,7 +208745,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_22getBoundaryType(struct __pyx_
  *                           &dim,
  *                           NULL, NULL, NULL,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz), NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz), NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 213, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":220
  *                           &btx, &bty, &btz,
@@ -204567,7 +208755,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_22getBoundaryType(struct __pyx_
  *     def setStencilType(self, stencil_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toDims(__pyx_v_dim, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 220, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -204605,9 +208793,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_25setStencilType(PyObject *__py
 static char __pyx_doc_8petsc4py_5PETSc_4DMDA_24setStencilType[] = "DMDA.setStencilType(self, stencil_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_25setStencilType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_stencil_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setStencilType (wrapper)", 0);
@@ -204629,7 +208814,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_25setStencilType(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, "setStencilType") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStencilType") < 0)) __PYX_ERR(41, 222, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204640,7 +208825,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_25setStencilType(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setStencilType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setStencilType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 222, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setStencilType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -204659,9 +208844,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_24setStencilType(struct __pyx_o
   __Pyx_RefNannyDeclarations
   DMDAStencilType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setStencilType", 0);
 
   /* "PETSc/DMDA.pyx":223
@@ -204671,7 +208853,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_24setStencilType(struct __pyx_o
  *         CHKERR( DMDASetStencilType(self.dm, stype) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_1 == ((DMDAStencilType)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_1 == ((DMDAStencilType)-1L))) __PYX_ERR(41, 223, __pyx_L1_error)
   __pyx_v_stype = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":224
@@ -204681,7 +208863,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_24setStencilType(struct __pyx_o
  * 
  *     def getStencilType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetStencilType(__pyx_v_self->__pyx_base.dm, __pyx_v_stype)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetStencilType(__pyx_v_self->__pyx_base.dm, __pyx_v_stype)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 224, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":222
  *         return toDims(dim, btx, bty, btz)
@@ -204734,9 +208916,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_26getStencilType(struct __pyx_o
   __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("getStencilType", 0);
 
   /* "PETSc/DMDA.pyx":227
@@ -204755,7 +208934,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_26getStencilType(struct __pyx_o
  *                           NULL,
  *                           NULL, NULL, NULL,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_stype))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_stype))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 228, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":235
  *                           NULL, NULL, NULL,
@@ -204765,7 +208944,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_26getStencilType(struct __pyx_o
  *     def setStencilWidth(self, stencil_width):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_stype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_DMDAStencilType(__pyx_v_stype); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -204803,9 +208982,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_29setStencilWidth(PyObject *__p
 static char __pyx_doc_8petsc4py_5PETSc_4DMDA_28setStencilWidth[] = "DMDA.setStencilWidth(self, stencil_width)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_29setStencilWidth(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_stencil_width = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setStencilWidth (wrapper)", 0);
@@ -204827,7 +209003,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_29setStencilWidth(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, "setStencilWidth") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStencilWidth") < 0)) __PYX_ERR(41, 237, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204838,7 +209014,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_29setStencilWidth(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setStencilWidth", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setStencilWidth", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 237, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setStencilWidth", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -204857,9 +209033,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_28setStencilWidth(struct __pyx_
   __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("setStencilWidth", 0);
 
   /* "PETSc/DMDA.pyx":238
@@ -204869,7 +209042,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_28setStencilWidth(struct __pyx_
  *         CHKERR( DMDASetStencilWidth(self.dm, swidth) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 238, __pyx_L1_error)
   __pyx_v_swidth = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":239
@@ -204879,7 +209052,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_28setStencilWidth(struct __pyx_
  * 
  *     def getStencilWidth(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetStencilWidth(__pyx_v_self->__pyx_base.dm, __pyx_v_swidth)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetStencilWidth(__pyx_v_self->__pyx_base.dm, __pyx_v_swidth)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 239, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":237
  *         return stype
@@ -204932,9 +209105,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_30getStencilWidth(struct __pyx_
   __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("getStencilWidth", 0);
 
   /* "PETSc/DMDA.pyx":242
@@ -204953,7 +209123,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_30getStencilWidth(struct __pyx_
  *                             NULL,
  *                             NULL, NULL, NULL,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_swidth), NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_swidth), NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 243, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":250
  *                             NULL, NULL, NULL,
@@ -204963,7 +209133,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_30getStencilWidth(struct __pyx_
  *     def setStencil(self, stencil_type, stencil_width):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_swidth); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_swidth); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 250, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -205002,9 +209172,6 @@ static char __pyx_doc_8petsc4py_5PETSc_4DMDA_32setStencil[] = "DMDA.setStencil(s
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_33setStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_stencil_type = 0;
   PyObject *__pyx_v_stencil_width = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setStencil (wrapper)", 0);
@@ -205028,11 +209195,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_33setStencil(PyObject *__pyx_v_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stencil_width)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setStencil", 1, 2, 2, 1); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setStencil", 1, 2, 2, 1); __PYX_ERR(41, 252, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStencil") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStencil") < 0)) __PYX_ERR(41, 252, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -205045,7 +209212,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_33setStencil(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setStencil", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setStencil", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 252, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setStencil", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -205066,9 +209233,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_32setStencil(struct __pyx_obj_8
   DMDAStencilType __pyx_t_1;
   PetscInt __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setStencil", 0);
 
   /* "PETSc/DMDA.pyx":253
@@ -205078,7 +209242,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_32setStencil(struct __pyx_obj_8
  *         cdef PetscInt swidth = asInt(stencil_width)
  *         CHKERR( DMDASetStencilType(self.dm, stype) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_1 == ((DMDAStencilType)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_1 == ((DMDAStencilType)-1L))) __PYX_ERR(41, 253, __pyx_L1_error)
   __pyx_v_stype = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":254
@@ -205088,7 +209252,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_32setStencil(struct __pyx_obj_8
  *         CHKERR( DMDASetStencilType(self.dm, stype) )
  *         CHKERR( DMDASetStencilWidth(self.dm, swidth) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(41, 254, __pyx_L1_error)
   __pyx_v_swidth = __pyx_t_2;
 
   /* "PETSc/DMDA.pyx":255
@@ -205098,7 +209262,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_32setStencil(struct __pyx_obj_8
  *         CHKERR( DMDASetStencilWidth(self.dm, swidth) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetStencilType(__pyx_v_self->__pyx_base.dm, __pyx_v_stype)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetStencilType(__pyx_v_self->__pyx_base.dm, __pyx_v_stype)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 255, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":256
  *         cdef PetscInt swidth = asInt(stencil_width)
@@ -205107,7 +209271,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_32setStencil(struct __pyx_obj_8
  * 
  *     def getStencil(self):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetStencilWidth(__pyx_v_self->__pyx_base.dm, __pyx_v_swidth)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetStencilWidth(__pyx_v_self->__pyx_base.dm, __pyx_v_swidth)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 256, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":252
  *         return toInt(swidth)
@@ -205163,9 +209327,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_34getStencil(struct __pyx_obj_8
   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("getStencil", 0);
 
   /* "PETSc/DMDA.pyx":259
@@ -205193,7 +209354,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_34getStencil(struct __pyx_obj_8
  *                             NULL,
  *                             NULL, NULL, NULL,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_swidth), NULL, NULL, NULL, (&__pyx_v_stype))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (&__pyx_v_swidth), NULL, NULL, NULL, (&__pyx_v_stype))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 261, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":268
  *                             NULL, NULL, NULL,
@@ -205203,11 +209364,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_34getStencil(struct __pyx_obj_8
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toStencil(__pyx_v_stype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toStencil(__pyx_v_stype); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_swidth); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_swidth); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -205281,9 +209442,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8p
   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("getRanges", 0);
 
   /* "PETSc/DMDA.pyx":273
@@ -205308,7 +209466,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8p
  *         CHKERR( DMDAGetCorners(self.dm,
  *                                &x, &y, &z,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 274, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":275
  *         cdef PetscInt dim=0, x=0, y=0, z=0, m=0, n=0, p=0
@@ -205317,7 +209475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8p
  *                                &x, &y, &z,
  *                                &m, &n, &p) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetCorners(__pyx_v_self->__pyx_base.dm, (&__pyx_v_x), (&__pyx_v_y), (&__pyx_v_z), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetCorners(__pyx_v_self->__pyx_base.dm, (&__pyx_v_x), (&__pyx_v_y), (&__pyx_v_z), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 275, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":278
  *                                &x, &y, &z,
@@ -205327,11 +209485,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8p
  *                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_x + __pyx_v_m)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_x + __pyx_v_m)); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -205347,11 +209505,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8p
  *                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_y); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_y + __pyx_v_n)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_y + __pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -205367,11 +209525,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8p
  * 
  *     def getGhostRanges(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_z); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_z); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_z + __pyx_v_p)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_z + __pyx_v_p)); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -205387,7 +209545,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8p
  *                 (toInt(y), toInt(y+n)),
  *                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
@@ -205406,7 +209564,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_36getRanges(struct __pyx_obj_8p
  * 
  *     def getGhostRanges(self):
  */
-  __pyx_t_6 = __Pyx_PyTuple_GetSlice(__pyx_t_3, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyTuple_GetSlice(__pyx_t_3, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_6;
@@ -205477,9 +209635,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
   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("getGhostRanges", 0);
 
   /* "PETSc/DMDA.pyx":283
@@ -205504,7 +209659,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
  *         CHKERR( DMDAGetGhostCorners(self.dm,
  *                                     &x, &y, &z,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 284, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":285
  *         cdef PetscInt dim=0, x=0, y=0, z=0, m=0, n=0, p=0
@@ -205513,7 +209668,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
  *                                     &x, &y, &z,
  *                                     &m, &n, &p) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetGhostCorners(__pyx_v_self->__pyx_base.dm, (&__pyx_v_x), (&__pyx_v_y), (&__pyx_v_z), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetGhostCorners(__pyx_v_self->__pyx_base.dm, (&__pyx_v_x), (&__pyx_v_y), (&__pyx_v_z), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 285, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":288
  *                                     &x, &y, &z,
@@ -205523,11 +209678,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
  *                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_x + __pyx_v_m)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_x + __pyx_v_m)); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -205543,11 +209698,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
  *                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_y); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_y + __pyx_v_n)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_y + __pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -205563,11 +209718,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
  * 
  *     def getOwnershipRanges(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_z); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_z); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_z + __pyx_v_p)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_z + __pyx_v_p)); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -205583,7 +209738,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
  *                 (toInt(y), toInt(y+n)),
  *                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
@@ -205602,7 +209757,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
  * 
  *     def getOwnershipRanges(self):
  */
-  __pyx_t_6 = __Pyx_PyTuple_GetSlice(__pyx_t_3, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyTuple_GetSlice(__pyx_t_3, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_6;
@@ -205636,7 +209791,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_38getGhostRanges(struct __pyx_o
  *                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
  * 
  *     def getOwnershipRanges(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt dim=0, m, n, p
+ *         cdef PetscInt dim=0, m=0, n=0, p=0
  *         cdef const_PetscInt *lx = NULL, *ly = NULL, *lz = NULL
  */
 
@@ -205669,23 +209824,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges(struct __p
   __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("getOwnershipRanges", 0);
 
   /* "PETSc/DMDA.pyx":293
  * 
  *     def getOwnershipRanges(self):
- *         cdef PetscInt dim=0, m, n, p             # <<<<<<<<<<<<<<
+ *         cdef PetscInt dim=0, m=0, n=0, p=0             # <<<<<<<<<<<<<<
  *         cdef const_PetscInt *lx = NULL, *ly = NULL, *lz = NULL
  *         CHKERR( DMDAGetInfo(self.dm,
  */
   __pyx_v_dim = 0;
+  __pyx_v_m = 0;
+  __pyx_v_n = 0;
+  __pyx_v_p = 0;
 
   /* "PETSc/DMDA.pyx":294
  *     def getOwnershipRanges(self):
- *         cdef PetscInt dim=0, m, n, p
+ *         cdef PetscInt dim=0, m=0, n=0, p=0
  *         cdef const_PetscInt *lx = NULL, *ly = NULL, *lz = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( DMDAGetInfo(self.dm,
  *                             &dim,
@@ -205695,13 +209850,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges(struct __p
   __pyx_v_lz = NULL;
 
   /* "PETSc/DMDA.pyx":295
- *         cdef PetscInt dim=0, m, n, p
+ *         cdef PetscInt dim=0, m=0, n=0, p=0
  *         cdef const_PetscInt *lx = NULL, *ly = NULL, *lz = NULL
  *         CHKERR( DMDAGetInfo(self.dm,             # <<<<<<<<<<<<<<
  *                             &dim,
  *                             NULL, NULL, NULL,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim), NULL, NULL, NULL, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p), NULL, NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInfo(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim), NULL, NULL, NULL, (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p), NULL, NULL, NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 295, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":302
  *                             NULL, NULL, NULL,
@@ -205710,7 +209865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges(struct __p
  *         return toOwnershipRanges(dim, m, n, p, lx, ly, lz)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetOwnershipRanges(__pyx_v_self->__pyx_base.dm, (&__pyx_v_lx), (&__pyx_v_ly), (&__pyx_v_lz))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetOwnershipRanges(__pyx_v_self->__pyx_base.dm, (&__pyx_v_lx), (&__pyx_v_ly), (&__pyx_v_lz))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 302, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":303
  *                             NULL) )
@@ -205720,7 +209875,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges(struct __p
  *     def getCorners(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toOwnershipRanges(__pyx_v_dim, __pyx_v_m, __pyx_v_n, __pyx_v_p, __pyx_v_lx, __pyx_v_ly, __pyx_v_lz); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toOwnershipRanges(__pyx_v_dim, __pyx_v_m, __pyx_v_n, __pyx_v_p, __pyx_v_lx, __pyx_v_ly, __pyx_v_lz); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -205730,7 +209885,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges(struct __p
  *                 (toInt(z), toInt(z+p)))[:<Py_ssize_t>dim]
  * 
  *     def getOwnershipRanges(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt dim=0, m, n, p
+ *         cdef PetscInt dim=0, m=0, n=0, p=0
  *         cdef const_PetscInt *lx = NULL, *ly = NULL, *lz = NULL
  */
 
@@ -205786,9 +209941,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8
   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("getCorners", 0);
 
   /* "PETSc/DMDA.pyx":306
@@ -205813,7 +209965,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8
  *         CHKERR( DMDAGetCorners(self.dm,
  *                                &x, &y, &z,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 307, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":308
  *         cdef PetscInt dim=0, x=0, y=0, z=0, m=0, n=0, p=0
@@ -205822,7 +209974,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8
  *                                &x, &y, &z,
  *                                &m, &n, &p) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetCorners(__pyx_v_self->__pyx_base.dm, (&__pyx_v_x), (&__pyx_v_y), (&__pyx_v_z), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetCorners(__pyx_v_self->__pyx_base.dm, (&__pyx_v_x), (&__pyx_v_y), (&__pyx_v_z), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 308, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":311
  *                                &x, &y, &z,
@@ -205832,13 +209984,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_y); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_z); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -205849,7 +210001,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyTuple_GetSlice(__pyx_t_5, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyTuple_GetSlice(__pyx_t_5, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
@@ -205860,13 +210012,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8
  * 
  *     def getGhostCorners(self):
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 312, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 312, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_p); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 312, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 312, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_5);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
@@ -205877,7 +210029,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8
   __pyx_t_5 = 0;
   __pyx_t_3 = 0;
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyTuple_GetSlice(__pyx_t_6, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyTuple_GetSlice(__pyx_t_6, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 312, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
@@ -205888,7 +210040,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_42getCorners(struct __pyx_obj_8
  *                 (toInt(m), toInt(n), toInt(p))[:<Py_ssize_t>dim])
  * 
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -205964,9 +210116,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
   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("getGhostCorners", 0);
 
   /* "PETSc/DMDA.pyx":315
@@ -205991,7 +210140,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
  *         CHKERR( DMDAGetGhostCorners(self.dm,
  *                                     &x, &y, &z,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 316, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":317
  *         cdef PetscInt dim=0, x=0, y=0, z=0, m=0, n=0, p=0
@@ -206000,7 +210149,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
  *                                     &x, &y, &z,
  *                                     &m, &n, &p) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetGhostCorners(__pyx_v_self->__pyx_base.dm, (&__pyx_v_x), (&__pyx_v_y), (&__pyx_v_z), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetGhostCorners(__pyx_v_self->__pyx_base.dm, (&__pyx_v_x), (&__pyx_v_y), (&__pyx_v_z), (&__pyx_v_m), (&__pyx_v_n), (&__pyx_v_p))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 317, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":320
  *                                     &x, &y, &z,
@@ -206010,13 +210159,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_y); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_z); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -206027,7 +210176,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyTuple_GetSlice(__pyx_t_5, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyTuple_GetSlice(__pyx_t_5, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
@@ -206038,13 +210187,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
  * 
  *     #
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_p); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_5);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
@@ -206055,7 +210204,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
   __pyx_t_5 = 0;
   __pyx_t_3 = 0;
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyTuple_GetSlice(__pyx_t_6, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyTuple_GetSlice(__pyx_t_6, 0, ((Py_ssize_t)__pyx_v_dim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
@@ -206066,7 +210215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
  *                 (toInt(m), toInt(n), toInt(p))[:<Py_ssize_t>dim])
  * 
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -206104,19 +210253,285 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_44getGhostCorners(struct __pyx_
 /* "PETSc/DMDA.pyx":325
  *     #
  * 
+ *     def setFieldName(self, field, name):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(field)
+ *         cdef const_char *cval = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47setFieldName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_46setFieldName[] = "DMDA.setFieldName(self, field, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47setFieldName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_field = 0;
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setFieldName (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_field,&__pyx_n_s_name,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_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setFieldName", 1, 2, 2, 1); __PYX_ERR(41, 325, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldName") < 0)) __PYX_ERR(41, 325, __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_field = values[0];
+    __pyx_v_name = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setFieldName", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 325, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setFieldName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_46setFieldName(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_field, __pyx_v_name);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46setFieldName(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_name) {
+  PetscInt __pyx_v_ival;
+  const char *__pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("setFieldName", 0);
+  __Pyx_INCREF(__pyx_v_name);
+
+  /* "PETSc/DMDA.pyx":326
+ * 
+ *     def setFieldName(self, field, name):
+ *         cdef PetscInt ival = asInt(field)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         name = str2bytes(name, &cval)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 326, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
+
+  /* "PETSc/DMDA.pyx":327
+ *     def setFieldName(self, field, name):
+ *         cdef PetscInt ival = asInt(field)
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cval)
+ *         CHKERR( DMDASetFieldName(self.dm, ival, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/DMDA.pyx":328
+ *         cdef PetscInt ival = asInt(field)
+ *         cdef const_char *cval = NULL
+ *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMDASetFieldName(self.dm, ival, cval) )
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 328, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DMDA.pyx":329
+ *         cdef const_char *cval = NULL
+ *         name = str2bytes(name, &cval)
+ *         CHKERR( DMDASetFieldName(self.dm, ival, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getFieldName(self, field):
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetFieldName(__pyx_v_self->__pyx_base.dm, __pyx_v_ival, __pyx_v_cval)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 329, __pyx_L1_error)
+
+  /* "PETSc/DMDA.pyx":325
+ *     #
+ * 
+ *     def setFieldName(self, field, name):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(field)
+ *         cdef const_char *cval = NULL
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setFieldName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMDA.pyx":331
+ *         CHKERR( DMDASetFieldName(self.dm, ival, cval) )
+ * 
+ *     def getFieldName(self, field):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(field)
+ *         cdef const_char *cval = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_49getFieldName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_48getFieldName[] = "DMDA.getFieldName(self, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_49getFieldName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_field = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getFieldName (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_field,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_field)) != 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, "getFieldName") < 0)) __PYX_ERR(41, 331, __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_field = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getFieldName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 331, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.getFieldName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_48getFieldName(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_field);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48getFieldName(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_field) {
+  PetscInt __pyx_v_ival;
+  const char *__pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getFieldName", 0);
+
+  /* "PETSc/DMDA.pyx":332
+ * 
+ *     def getFieldName(self, field):
+ *         cdef PetscInt ival = asInt(field)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         CHKERR( DMDAGetFieldName(self.dm, ival, &cval) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 332, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
+
+  /* "PETSc/DMDA.pyx":333
+ *     def getFieldName(self, field):
+ *         cdef PetscInt ival = asInt(field)
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMDAGetFieldName(self.dm, ival, &cval) )
+ *         return bytes2str(cval)
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/DMDA.pyx":334
+ *         cdef PetscInt ival = asInt(field)
+ *         cdef const_char *cval = NULL
+ *         CHKERR( DMDAGetFieldName(self.dm, ival, &cval) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(cval)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetFieldName(__pyx_v_self->__pyx_base.dm, __pyx_v_ival, (&__pyx_v_cval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 334, __pyx_L1_error)
+
+  /* "PETSc/DMDA.pyx":335
+ *         cdef const_char *cval = NULL
+ *         CHKERR( DMDAGetFieldName(self.dm, ival, &cval) )
+ *         return bytes2str(cval)             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 335, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMDA.pyx":331
+ *         CHKERR( DMDASetFieldName(self.dm, ival, cval) )
+ * 
+ *     def getFieldName(self, field):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(field)
+ *         cdef const_char *cval = NULL
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.getFieldName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMDA.pyx":339
+ *     #
+ * 
  *     def getVecArray(self, Vec vec not None):             # <<<<<<<<<<<<<<
  *         return _DMDA_Vec_array(self, vec)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47getVecArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_46getVecArray[] = "DMDA.getVecArray(self, Vec vec)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47getVecArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_51getVecArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_50getVecArray[] = "DMDA.getVecArray(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_51getVecArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getVecArray (wrapper)", 0);
@@ -206138,7 +210553,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47getVecArray(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, "getVecArray") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getVecArray") < 0)) __PYX_ERR(41, 339, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -206149,14 +210564,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47getVecArray(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getVecArray", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getVecArray", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 339, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.getVecArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_46getVecArray(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(41, 339, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_50getVecArray(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -206167,17 +210582,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47getVecArray(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46getVecArray(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getVecArray(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   PyObject *__pyx_r = NULL;
   __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("getVecArray", 0);
 
-  /* "PETSc/DMDA.pyx":326
+  /* "PETSc/DMDA.pyx":340
  * 
  *     def getVecArray(self, Vec vec not None):
  *         return _DMDA_Vec_array(self, vec)             # <<<<<<<<<<<<<<
@@ -206185,7 +210597,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46getVecArray(struct __pyx_obj_
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -206193,14 +210605,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46getVecArray(struct __pyx_obj_
   __Pyx_INCREF(((PyObject *)__pyx_v_vec));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_vec));
   PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_vec));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__DMDA_Vec_array)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__DMDA_Vec_array), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 340, __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;
 
-  /* "PETSc/DMDA.pyx":325
+  /* "PETSc/DMDA.pyx":339
  *     #
  * 
  *     def getVecArray(self, Vec vec not None):             # <<<<<<<<<<<<<<
@@ -206220,7 +210632,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46getVecArray(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":330
+/* "PETSc/DMDA.pyx":344
  *     #
  * 
  *     def setUniformCoordinates(self,             # <<<<<<<<<<<<<<
@@ -206229,18 +210641,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46getVecArray(struct __pyx_obj_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_49setUniformCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_48setUniformCoordinates[] = "DMDA.setUniformCoordinates(self, xmin=0, xmax=1, ymin=0, ymax=1, zmin=0, zmax=1)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_49setUniformCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_53setUniformCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates[] = "DMDA.setUniformCoordinates(self, xmin=0, xmax=1, ymin=0, ymax=1, zmin=0, zmax=1)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_53setUniformCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_xmin = 0;
   PyObject *__pyx_v_xmax = 0;
   PyObject *__pyx_v_ymin = 0;
   PyObject *__pyx_v_ymax = 0;
   PyObject *__pyx_v_zmin = 0;
   PyObject *__pyx_v_zmax = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setUniformCoordinates (wrapper)", 0);
@@ -206300,7 +210709,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_49setUniformCoordinates(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUniformCoordinates") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUniformCoordinates") < 0)) __PYX_ERR(41, 344, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -206323,20 +210732,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_49setUniformCoordinates(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setUniformCoordinates", 0, 0, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setUniformCoordinates", 0, 0, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 344, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setUniformCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_48setUniformCoordinates(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_xmin, __pyx_v_xmax, __pyx_v_ymin, __pyx_v_ymax, __pyx_v_zmin, __pyx_v_zmax);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_xmin, __pyx_v_xmax, __pyx_v_ymin, __pyx_v_ymax, __pyx_v_zmin, __pyx_v_zmax);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48setUniformCoordinates(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_xmin, PyObject *__pyx_v_xmax, PyObject *__pyx_v_ymin, PyObject *__pyx_v_ymax, PyObject *__pyx_v_zmin, PyObject *__pyx_v_zmax) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_xmin, PyObject *__pyx_v_xmax, PyObject *__pyx_v_ymin, PyObject *__pyx_v_ymax, PyObject *__pyx_v_zmin, PyObject *__pyx_v_zmax) {
   PetscReal __pyx_v__xmin;
   PetscReal __pyx_v__xmax;
   PetscReal __pyx_v__ymin;
@@ -206347,57 +210756,54 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48setUniformCoordinates(struct
   __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("setUniformCoordinates", 0);
 
-  /* "PETSc/DMDA.pyx":334
+  /* "PETSc/DMDA.pyx":348
  *                               ymin=0, ymax=1,
  *                               zmin=0, zmax=1):
  *         cdef PetscReal _xmin = asReal(xmin), _xmax = asReal(xmax)             # <<<<<<<<<<<<<<
  *         cdef PetscReal _ymin = asReal(ymin), _ymax = asReal(ymax)
  *         cdef PetscReal _zmin = asReal(zmin), _zmax = asReal(zmax)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xmin); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xmin); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(41, 348, __pyx_L1_error)
   __pyx_v__xmin = __pyx_t_1;
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xmax); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xmax); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(41, 348, __pyx_L1_error)
   __pyx_v__xmax = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":335
+  /* "PETSc/DMDA.pyx":349
  *                               zmin=0, zmax=1):
  *         cdef PetscReal _xmin = asReal(xmin), _xmax = asReal(xmax)
  *         cdef PetscReal _ymin = asReal(ymin), _ymax = asReal(ymax)             # <<<<<<<<<<<<<<
  *         cdef PetscReal _zmin = asReal(zmin), _zmax = asReal(zmax)
  *         CHKERR( DMDASetUniformCoordinates(self.dm,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ymin); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ymin); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(41, 349, __pyx_L1_error)
   __pyx_v__ymin = __pyx_t_1;
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ymax); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ymax); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(41, 349, __pyx_L1_error)
   __pyx_v__ymax = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":336
+  /* "PETSc/DMDA.pyx":350
  *         cdef PetscReal _xmin = asReal(xmin), _xmax = asReal(xmax)
  *         cdef PetscReal _ymin = asReal(ymin), _ymax = asReal(ymax)
  *         cdef PetscReal _zmin = asReal(zmin), _zmax = asReal(zmax)             # <<<<<<<<<<<<<<
  *         CHKERR( DMDASetUniformCoordinates(self.dm,
  *                                           _xmin, _xmax,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zmin); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zmin); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(41, 350, __pyx_L1_error)
   __pyx_v__zmin = __pyx_t_1;
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zmax); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zmax); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(41, 350, __pyx_L1_error)
   __pyx_v__zmax = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":337
+  /* "PETSc/DMDA.pyx":351
  *         cdef PetscReal _ymin = asReal(ymin), _ymax = asReal(ymax)
  *         cdef PetscReal _zmin = asReal(zmin), _zmax = asReal(zmax)
  *         CHKERR( DMDASetUniformCoordinates(self.dm,             # <<<<<<<<<<<<<<
  *                                           _xmin, _xmax,
  *                                           _ymin, _ymax,
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetUniformCoordinates(__pyx_v_self->__pyx_base.dm, __pyx_v__xmin, __pyx_v__xmax, __pyx_v__ymin, __pyx_v__ymax, __pyx_v__zmin, __pyx_v__zmax)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetUniformCoordinates(__pyx_v_self->__pyx_base.dm, __pyx_v__xmin, __pyx_v__xmax, __pyx_v__ymin, __pyx_v__ymax, __pyx_v__zmin, __pyx_v__zmax)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 351, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":330
+  /* "PETSc/DMDA.pyx":344
  *     #
  * 
  *     def setUniformCoordinates(self,             # <<<<<<<<<<<<<<
@@ -206417,32 +210823,301 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48setUniformCoordinates(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":342
+/* "PETSc/DMDA.pyx":356
+ *                                           _zmin, _zmax) )
+ * 
+ *     def setCoordinateName(self, index, name):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(index)
+ *         cdef const_char *cval = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_55setCoordinateName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_54setCoordinateName[] = "DMDA.setCoordinateName(self, index, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_55setCoordinateName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_index = 0;
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setCoordinateName (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,&__pyx_n_s_name,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_index)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setCoordinateName", 1, 2, 2, 1); __PYX_ERR(41, 356, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCoordinateName") < 0)) __PYX_ERR(41, 356, __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_index = values[0];
+    __pyx_v_name = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setCoordinateName", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 356, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setCoordinateName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_54setCoordinateName(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_index, __pyx_v_name);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54setCoordinateName(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_name) {
+  PetscInt __pyx_v_ival;
+  const char *__pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("setCoordinateName", 0);
+  __Pyx_INCREF(__pyx_v_name);
+
+  /* "PETSc/DMDA.pyx":357
+ * 
+ *     def setCoordinateName(self, index, name):
+ *         cdef PetscInt ival = asInt(index)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         name = str2bytes(name, &cval)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 357, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
+
+  /* "PETSc/DMDA.pyx":358
+ *     def setCoordinateName(self, index, name):
+ *         cdef PetscInt ival = asInt(index)
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cval)
+ *         CHKERR( DMDASetCoordinateName(self.dm, ival, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/DMDA.pyx":359
+ *         cdef PetscInt ival = asInt(index)
+ *         cdef const_char *cval = NULL
+ *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMDASetCoordinateName(self.dm, ival, cval) )
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 359, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DMDA.pyx":360
+ *         cdef const_char *cval = NULL
+ *         name = str2bytes(name, &cval)
+ *         CHKERR( DMDASetCoordinateName(self.dm, ival, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getCoordinateName(self, index):
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetCoordinateName(__pyx_v_self->__pyx_base.dm, __pyx_v_ival, __pyx_v_cval)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(41, 360, __pyx_L1_error)
+
+  /* "PETSc/DMDA.pyx":356
  *                                           _zmin, _zmax) )
  * 
+ *     def setCoordinateName(self, index, name):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(index)
+ *         cdef const_char *cval = NULL
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setCoordinateName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMDA.pyx":362
+ *         CHKERR( DMDASetCoordinateName(self.dm, ival, cval) )
+ * 
+ *     def getCoordinateName(self, index):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(index)
+ *         cdef const_char *cval = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57getCoordinateName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_56getCoordinateName[] = "DMDA.getCoordinateName(self, index)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57getCoordinateName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_index = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getCoordinateName (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,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_index)) != 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, "getCoordinateName") < 0)) __PYX_ERR(41, 362, __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_index = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getCoordinateName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 362, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.getCoordinateName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_56getCoordinateName(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_index);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_56getCoordinateName(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_index) {
+  PetscInt __pyx_v_ival;
+  const char *__pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getCoordinateName", 0);
+
+  /* "PETSc/DMDA.pyx":363
+ * 
+ *     def getCoordinateName(self, index):
+ *         cdef PetscInt ival = asInt(index)             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         CHKERR( DMDAGetCoordinateName(self.dm, ival, &cval) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 363, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
+
+  /* "PETSc/DMDA.pyx":364
+ *     def getCoordinateName(self, index):
+ *         cdef PetscInt ival = asInt(index)
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMDAGetCoordinateName(self.dm, ival, &cval) )
+ *         return bytes2str(cval)
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/DMDA.pyx":365
+ *         cdef PetscInt ival = asInt(index)
+ *         cdef const_char *cval = NULL
+ *         CHKERR( DMDAGetCoordinateName(self.dm, ival, &cval) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(cval)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetCoordinateName(__pyx_v_self->__pyx_base.dm, __pyx_v_ival, (&__pyx_v_cval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 365, __pyx_L1_error)
+
+  /* "PETSc/DMDA.pyx":366
+ *         cdef const_char *cval = NULL
+ *         CHKERR( DMDAGetCoordinateName(self.dm, ival, &cval) )
+ *         return bytes2str(cval)             # <<<<<<<<<<<<<<
+ * 
+ *     def getBoundingBox(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 366, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMDA.pyx":362
+ *         CHKERR( DMDASetCoordinateName(self.dm, ival, cval) )
+ * 
+ *     def getCoordinateName(self, index):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(index)
+ *         cdef const_char *cval = NULL
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.getCoordinateName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMDA.pyx":368
+ *         return bytes2str(cval)
+ * 
  *     def getBoundingBox(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt i,dim=0
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_51getBoundingBox(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_50getBoundingBox[] = "DMDA.getBoundingBox(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_51getBoundingBox(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_59getBoundingBox(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_58getBoundingBox[] = "DMDA.getBoundingBox(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_59getBoundingBox(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getBoundingBox (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getBoundingBox", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBoundingBox", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_58getBoundingBox(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_58getBoundingBox(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_dim;
   PetscReal __pyx_v_gmin[3];
@@ -206455,12 +211130,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_o
   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("getBoundingBox", 0);
 
-  /* "PETSc/DMDA.pyx":343
+  /* "PETSc/DMDA.pyx":369
  * 
  *     def getBoundingBox(self):
  *         cdef PetscInt i,dim=0             # <<<<<<<<<<<<<<
@@ -206469,25 +211141,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_o
  */
   __pyx_v_dim = 0;
 
-  /* "PETSc/DMDA.pyx":344
+  /* "PETSc/DMDA.pyx":370
  *     def getBoundingBox(self):
  *         cdef PetscInt i,dim=0
  *         CHKERR( DMDAGetDim(self.dm, &dim) )             # <<<<<<<<<<<<<<
  *         cdef PetscReal gmin[3], gmax[3]
  *         CHKERR( DMDAGetBoundingBox(self.dm, gmin, gmax) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 370, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":346
+  /* "PETSc/DMDA.pyx":372
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
  *         cdef PetscReal gmin[3], gmax[3]
  *         CHKERR( DMDAGetBoundingBox(self.dm, gmin, gmax) )             # <<<<<<<<<<<<<<
  *         return tuple([(toReal(gmin[i]), toReal(gmax[i]))
  *                       for i from 0 <= i < dim])
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetBoundingBox(__pyx_v_self->__pyx_base.dm, __pyx_v_gmin, __pyx_v_gmax)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetBoundingBox(__pyx_v_self->__pyx_base.dm, __pyx_v_gmin, __pyx_v_gmax)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 372, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":347
+  /* "PETSc/DMDA.pyx":373
  *         cdef PetscReal gmin[3], gmax[3]
  *         CHKERR( DMDAGetBoundingBox(self.dm, gmin, gmax) )
  *         return tuple([(toReal(gmin[i]), toReal(gmax[i]))             # <<<<<<<<<<<<<<
@@ -206495,10 +211167,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_o
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 373, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "PETSc/DMDA.pyx":348
+  /* "PETSc/DMDA.pyx":374
  *         CHKERR( DMDAGetBoundingBox(self.dm, gmin, gmax) )
  *         return tuple([(toReal(gmin[i]), toReal(gmax[i]))
  *                       for i from 0 <= i < dim])             # <<<<<<<<<<<<<<
@@ -206508,18 +211180,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_o
   __pyx_t_3 = __pyx_v_dim;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "PETSc/DMDA.pyx":347
+    /* "PETSc/DMDA.pyx":373
  *         cdef PetscReal gmin[3], gmax[3]
  *         CHKERR( DMDAGetBoundingBox(self.dm, gmin, gmax) )
  *         return tuple([(toReal(gmin[i]), toReal(gmax[i]))             # <<<<<<<<<<<<<<
  *                       for i from 0 <= i < dim])
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_gmin[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_gmin[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 373, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_gmax[__pyx_v_i])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_gmax[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 373, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 373, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -206527,18 +211199,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_o
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
     __pyx_t_4 = 0;
     __pyx_t_5 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(41, 373, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
-  __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 373, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_6;
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":342
- *                                           _zmin, _zmax) )
+  /* "PETSc/DMDA.pyx":368
+ *         return bytes2str(cval)
  * 
  *     def getBoundingBox(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt i,dim=0
@@ -206559,7 +211231,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":350
+/* "PETSc/DMDA.pyx":376
  *                       for i from 0 <= i < dim])
  * 
  *     def getLocalBoundingBox(self):             # <<<<<<<<<<<<<<
@@ -206568,23 +211240,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getBoundingBox(struct __pyx_o
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_53getLocalBoundingBox(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox[] = "DMDA.getLocalBoundingBox(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_53getLocalBoundingBox(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_61getLocalBoundingBox(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_60getLocalBoundingBox[] = "DMDA.getLocalBoundingBox(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_61getLocalBoundingBox(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getLocalBoundingBox (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getLocalBoundingBox", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLocalBoundingBox", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_60getLocalBoundingBox(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getLocalBoundingBox(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_dim;
   PetscReal __pyx_v_lmin[3];
@@ -206597,12 +211269,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __
   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("getLocalBoundingBox", 0);
 
-  /* "PETSc/DMDA.pyx":351
+  /* "PETSc/DMDA.pyx":377
  * 
  *     def getLocalBoundingBox(self):
  *         cdef PetscInt i,dim=0             # <<<<<<<<<<<<<<
@@ -206611,25 +211280,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __
  */
   __pyx_v_dim = 0;
 
-  /* "PETSc/DMDA.pyx":352
+  /* "PETSc/DMDA.pyx":378
  *     def getLocalBoundingBox(self):
  *         cdef PetscInt i,dim=0
  *         CHKERR( DMDAGetDim(self.dm, &dim) )             # <<<<<<<<<<<<<<
  *         cdef PetscReal lmin[3], lmax[3]
  *         CHKERR( DMDAGetLocalBoundingBox(self.dm, lmin, lmax) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 378, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":354
+  /* "PETSc/DMDA.pyx":380
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
  *         cdef PetscReal lmin[3], lmax[3]
  *         CHKERR( DMDAGetLocalBoundingBox(self.dm, lmin, lmax) )             # <<<<<<<<<<<<<<
  *         return tuple([(toReal(lmin[i]), toReal(lmax[i]))
  *                       for i from 0 <= i < dim])
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetLocalBoundingBox(__pyx_v_self->__pyx_base.dm, __pyx_v_lmin, __pyx_v_lmax)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetLocalBoundingBox(__pyx_v_self->__pyx_base.dm, __pyx_v_lmin, __pyx_v_lmax)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 380, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":355
+  /* "PETSc/DMDA.pyx":381
  *         cdef PetscReal lmin[3], lmax[3]
  *         CHKERR( DMDAGetLocalBoundingBox(self.dm, lmin, lmax) )
  *         return tuple([(toReal(lmin[i]), toReal(lmax[i]))             # <<<<<<<<<<<<<<
@@ -206637,10 +211306,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 381, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "PETSc/DMDA.pyx":356
+  /* "PETSc/DMDA.pyx":382
  *         CHKERR( DMDAGetLocalBoundingBox(self.dm, lmin, lmax) )
  *         return tuple([(toReal(lmin[i]), toReal(lmax[i]))
  *                       for i from 0 <= i < dim])             # <<<<<<<<<<<<<<
@@ -206650,18 +211319,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __
   __pyx_t_3 = __pyx_v_dim;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-    /* "PETSc/DMDA.pyx":355
+    /* "PETSc/DMDA.pyx":381
  *         cdef PetscReal lmin[3], lmax[3]
  *         CHKERR( DMDAGetLocalBoundingBox(self.dm, lmin, lmax) )
  *         return tuple([(toReal(lmin[i]), toReal(lmax[i]))             # <<<<<<<<<<<<<<
  *                       for i from 0 <= i < dim])
  * 
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_lmin[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_lmin[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 381, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_lmax[__pyx_v_i])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_lmax[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 381, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 381, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -206669,17 +211338,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
     __pyx_t_4 = 0;
     __pyx_t_5 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(41, 381, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
-  __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 381, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_6;
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":350
+  /* "PETSc/DMDA.pyx":376
  *                       for i from 0 <= i < dim])
  * 
  *     def getLocalBoundingBox(self):             # <<<<<<<<<<<<<<
@@ -206701,7 +211370,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":360
+/* "PETSc/DMDA.pyx":386
  *     #
  * 
  *     def createNaturalVec(self):             # <<<<<<<<<<<<<<
@@ -206710,55 +211379,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox(struct __
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_55createNaturalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_54createNaturalVec[] = "DMDA.createNaturalVec(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_55createNaturalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_63createNaturalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_62createNaturalVec[] = "DMDA.createNaturalVec(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_63createNaturalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createNaturalVec (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("createNaturalVec", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createNaturalVec", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_54createNaturalVec(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_62createNaturalVec(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54createNaturalVec(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62createNaturalVec(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vn = 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("createNaturalVec", 0);
 
-  /* "PETSc/DMDA.pyx":361
+  /* "PETSc/DMDA.pyx":387
  * 
  *     def createNaturalVec(self):
  *         cdef Vec vn = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( DMDACreateNaturalVector(self.dm, &vn.vec) )
  *         return vn
  */
-  __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[41]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 387, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vn = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMDA.pyx":362
+  /* "PETSc/DMDA.pyx":388
  *     def createNaturalVec(self):
  *         cdef Vec vn = Vec()
  *         CHKERR( DMDACreateNaturalVector(self.dm, &vn.vec) )             # <<<<<<<<<<<<<<
  *         return vn
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDACreateNaturalVector(__pyx_v_self->__pyx_base.dm, (&__pyx_v_vn->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDACreateNaturalVector(__pyx_v_self->__pyx_base.dm, (&__pyx_v_vn->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 388, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":363
+  /* "PETSc/DMDA.pyx":389
  *         cdef Vec vn = Vec()
  *         CHKERR( DMDACreateNaturalVector(self.dm, &vn.vec) )
  *         return vn             # <<<<<<<<<<<<<<
@@ -206770,7 +211436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54createNaturalVec(struct __pyx
   __pyx_r = ((PyObject *)__pyx_v_vn);
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":360
+  /* "PETSc/DMDA.pyx":386
  *     #
  * 
  *     def createNaturalVec(self):             # <<<<<<<<<<<<<<
@@ -206790,7 +211456,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54createNaturalVec(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":365
+/* "PETSc/DMDA.pyx":391
  *         return vn
  * 
  *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):             # <<<<<<<<<<<<<<
@@ -206799,15 +211465,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54createNaturalVec(struct __pyx
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57globalToNatural(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_56globalToNatural[] = "DMDA.globalToNatural(self, Vec vg, Vec vn, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57globalToNatural(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65globalToNatural(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_64globalToNatural[] = "DMDA.globalToNatural(self, Vec vg, Vec vn, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65globalToNatural(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vg = 0;
   struct PyPetscVecObject *__pyx_v_vn = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("globalToNatural (wrapper)", 0);
@@ -206833,7 +211496,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57globalToNatural(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vn)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("globalToNatural", 0, 2, 3, 1); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("globalToNatural", 0, 2, 3, 1); __PYX_ERR(41, 391, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -206842,7 +211505,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57globalToNatural(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "globalToNatural") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "globalToNatural") < 0)) __PYX_ERR(41, 391, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -206859,15 +211522,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57globalToNatural(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("globalToNatural", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("globalToNatural", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 391, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.globalToNatural", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vn), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vn", 0))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_56globalToNatural(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_vg, __pyx_v_vn, __pyx_v_addv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) __PYX_ERR(41, 391, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vn), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vn", 0))) __PYX_ERR(41, 391, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_64globalToNatural(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_vg, __pyx_v_vn, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -206878,46 +211541,43 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57globalToNatural(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_56globalToNatural(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg, struct PyPetscVecObject *__pyx_v_vn, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_64globalToNatural(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg, struct PyPetscVecObject *__pyx_v_vn, PyObject *__pyx_v_addv) {
   InsertMode __pyx_v_im;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   InsertMode __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("globalToNatural", 0);
 
-  /* "PETSc/DMDA.pyx":366
+  /* "PETSc/DMDA.pyx":392
  * 
  *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):
  *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( DMDAGlobalToNaturalBegin(self.dm, vg.vec, im, vn.vec) )
  *         CHKERR( DMDAGlobalToNaturalEnd  (self.dm, vg.vec, im, vn.vec) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(41, 392, __pyx_L1_error)
   __pyx_v_im = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":367
+  /* "PETSc/DMDA.pyx":393
  *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMDAGlobalToNaturalBegin(self.dm, vg.vec, im, vn.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( DMDAGlobalToNaturalEnd  (self.dm, vg.vec, im, vn.vec) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGlobalToNaturalBegin(__pyx_v_self->__pyx_base.dm, __pyx_v_vg->vec, __pyx_v_im, __pyx_v_vn->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGlobalToNaturalBegin(__pyx_v_self->__pyx_base.dm, __pyx_v_vg->vec, __pyx_v_im, __pyx_v_vn->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 393, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":368
+  /* "PETSc/DMDA.pyx":394
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMDAGlobalToNaturalBegin(self.dm, vg.vec, im, vn.vec) )
  *         CHKERR( DMDAGlobalToNaturalEnd  (self.dm, vg.vec, im, vn.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def naturalToGlobal(self, Vec vn not None, Vec vg not None, addv=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGlobalToNaturalEnd(__pyx_v_self->__pyx_base.dm, __pyx_v_vg->vec, __pyx_v_im, __pyx_v_vn->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGlobalToNaturalEnd(__pyx_v_self->__pyx_base.dm, __pyx_v_vg->vec, __pyx_v_im, __pyx_v_vn->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 394, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":365
+  /* "PETSc/DMDA.pyx":391
  *         return vn
  * 
  *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):             # <<<<<<<<<<<<<<
@@ -206937,7 +211597,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_56globalToNatural(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":370
+/* "PETSc/DMDA.pyx":396
  *         CHKERR( DMDAGlobalToNaturalEnd  (self.dm, vg.vec, im, vn.vec) )
  * 
  *     def naturalToGlobal(self, Vec vn not None, Vec vg not None, addv=None):             # <<<<<<<<<<<<<<
@@ -206946,15 +211606,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_56globalToNatural(struct __pyx_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_59naturalToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_58naturalToGlobal[] = "DMDA.naturalToGlobal(self, Vec vn, Vec vg, addv=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_59naturalToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_67naturalToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_66naturalToGlobal[] = "DMDA.naturalToGlobal(self, Vec vn, Vec vg, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_67naturalToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vn = 0;
   struct PyPetscVecObject *__pyx_v_vg = 0;
   PyObject *__pyx_v_addv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("naturalToGlobal (wrapper)", 0);
@@ -206980,7 +211637,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_59naturalToGlobal(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vg)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("naturalToGlobal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("naturalToGlobal", 0, 2, 3, 1); __PYX_ERR(41, 396, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -206989,7 +211646,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_59naturalToGlobal(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "naturalToGlobal") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "naturalToGlobal") < 0)) __PYX_ERR(41, 396, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -207006,15 +211663,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_59naturalToGlobal(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("naturalToGlobal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("naturalToGlobal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 396, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.naturalToGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vn), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vn", 0))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_58naturalToGlobal(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_vn, __pyx_v_vg, __pyx_v_addv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vn), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vn", 0))) __PYX_ERR(41, 396, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) __PYX_ERR(41, 396, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_66naturalToGlobal(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_vn, __pyx_v_vg, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -207025,46 +211682,43 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_59naturalToGlobal(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_58naturalToGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vn, struct PyPetscVecObject *__pyx_v_vg, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66naturalToGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vn, struct PyPetscVecObject *__pyx_v_vg, PyObject *__pyx_v_addv) {
   InsertMode __pyx_v_im;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   InsertMode __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("naturalToGlobal", 0);
 
-  /* "PETSc/DMDA.pyx":371
+  /* "PETSc/DMDA.pyx":397
  * 
  *     def naturalToGlobal(self, Vec vn not None, Vec vg not None, addv=None):
  *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
  *         CHKERR( DMDANaturalToGlobalBegin(self.dm, vn.vec, im, vg.vec) )
  *         CHKERR( DMDANaturalToGlobalEnd  (self.dm, vn.vec, im, vg.vec) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(41, 397, __pyx_L1_error)
   __pyx_v_im = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":372
+  /* "PETSc/DMDA.pyx":398
  *     def naturalToGlobal(self, Vec vn not None, Vec vg not None, addv=None):
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMDANaturalToGlobalBegin(self.dm, vn.vec, im, vg.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( DMDANaturalToGlobalEnd  (self.dm, vn.vec, im, vg.vec) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDANaturalToGlobalBegin(__pyx_v_self->__pyx_base.dm, __pyx_v_vn->vec, __pyx_v_im, __pyx_v_vg->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDANaturalToGlobalBegin(__pyx_v_self->__pyx_base.dm, __pyx_v_vn->vec, __pyx_v_im, __pyx_v_vg->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 398, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":373
+  /* "PETSc/DMDA.pyx":399
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMDANaturalToGlobalBegin(self.dm, vn.vec, im, vg.vec) )
  *         CHKERR( DMDANaturalToGlobalEnd  (self.dm, vn.vec, im, vg.vec) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDANaturalToGlobalEnd(__pyx_v_self->__pyx_base.dm, __pyx_v_vn->vec, __pyx_v_im, __pyx_v_vg->vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDANaturalToGlobalEnd(__pyx_v_self->__pyx_base.dm, __pyx_v_vn->vec, __pyx_v_im, __pyx_v_vg->vec)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 399, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":370
+  /* "PETSc/DMDA.pyx":396
  *         CHKERR( DMDAGlobalToNaturalEnd  (self.dm, vg.vec, im, vn.vec) )
  * 
  *     def naturalToGlobal(self, Vec vn not None, Vec vg not None, addv=None):             # <<<<<<<<<<<<<<
@@ -207084,7 +211738,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_58naturalToGlobal(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":377
+/* "PETSc/DMDA.pyx":403
  *     #
  * 
  *     def getAO(self):             # <<<<<<<<<<<<<<
@@ -207093,55 +211747,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_58naturalToGlobal(struct __pyx_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_61getAO(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_60getAO[] = "DMDA.getAO(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_61getAO(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_69getAO(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_68getAO[] = "DMDA.getAO(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_69getAO(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getAO (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getAO", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAO", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_60getAO(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_68getAO(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getAO(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_68getAO(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   struct PyPetscAOObject *__pyx_v_ao = 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("getAO", 0);
 
-  /* "PETSc/DMDA.pyx":378
+  /* "PETSc/DMDA.pyx":404
  * 
  *     def getAO(self):
  *         cdef AO ao = AO()             # <<<<<<<<<<<<<<
  *         CHKERR( DMDAGetAO(self.dm, &ao.ao) )
  *         PetscINCREF(ao.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_AO)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_AO), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 404, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ao = ((struct PyPetscAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMDA.pyx":379
+  /* "PETSc/DMDA.pyx":405
  *     def getAO(self):
  *         cdef AO ao = AO()
  *         CHKERR( DMDAGetAO(self.dm, &ao.ao) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ao.obj)
  *         return ao
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetAO(__pyx_v_self->__pyx_base.dm, (&__pyx_v_ao->ao))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetAO(__pyx_v_self->__pyx_base.dm, (&__pyx_v_ao->ao))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 405, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":380
+  /* "PETSc/DMDA.pyx":406
  *         cdef AO ao = AO()
  *         CHKERR( DMDAGetAO(self.dm, &ao.ao) )
  *         PetscINCREF(ao.obj)             # <<<<<<<<<<<<<<
@@ -207150,7 +211801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getAO(struct __pyx_obj_8petsc
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ao->__pyx_base.obj);
 
-  /* "PETSc/DMDA.pyx":381
+  /* "PETSc/DMDA.pyx":407
  *         CHKERR( DMDAGetAO(self.dm, &ao.ao) )
  *         PetscINCREF(ao.obj)
  *         return ao             # <<<<<<<<<<<<<<
@@ -207162,7 +211813,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getAO(struct __pyx_obj_8petsc
   __pyx_r = ((PyObject *)__pyx_v_ao);
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":377
+  /* "PETSc/DMDA.pyx":403
  *     #
  * 
  *     def getAO(self):             # <<<<<<<<<<<<<<
@@ -207182,7 +211833,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getAO(struct __pyx_obj_8petsc
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":383
+/* "PETSc/DMDA.pyx":409
  *         return ao
  * 
  *     def getScatter(self):             # <<<<<<<<<<<<<<
@@ -207191,68 +211842,65 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getAO(struct __pyx_obj_8petsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_63getScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_62getScatter[] = "DMDA.getScatter(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_63getScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_71getScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_70getScatter[] = "DMDA.getScatter(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_71getScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getScatter (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getScatter", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getScatter", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_70getScatter(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getScatter(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   struct PyPetscScatterObject *__pyx_v_l2g = 0;
   struct PyPetscScatterObject *__pyx_v_g2l = 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("getScatter", 0);
 
-  /* "PETSc/DMDA.pyx":384
+  /* "PETSc/DMDA.pyx":410
  * 
  *     def getScatter(self):
  *         cdef Scatter l2g = Scatter()             # <<<<<<<<<<<<<<
  *         cdef Scatter g2l = Scatter()
  *         CHKERR( DMDAGetScatter(self.dm, &l2g.sct, &g2l.sct) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Scatter)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_l2g = ((struct PyPetscScatterObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMDA.pyx":385
+  /* "PETSc/DMDA.pyx":411
  *     def getScatter(self):
  *         cdef Scatter l2g = Scatter()
  *         cdef Scatter g2l = Scatter()             # <<<<<<<<<<<<<<
  *         CHKERR( DMDAGetScatter(self.dm, &l2g.sct, &g2l.sct) )
  *         PetscINCREF(l2g.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Scatter)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_g2l = ((struct PyPetscScatterObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMDA.pyx":386
+  /* "PETSc/DMDA.pyx":412
  *         cdef Scatter l2g = Scatter()
  *         cdef Scatter g2l = Scatter()
  *         CHKERR( DMDAGetScatter(self.dm, &l2g.sct, &g2l.sct) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(l2g.obj)
  *         PetscINCREF(g2l.obj)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetScatter(__pyx_v_self->__pyx_base.dm, (&__pyx_v_l2g->sct), (&__pyx_v_g2l->sct))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetScatter(__pyx_v_self->__pyx_base.dm, (&__pyx_v_l2g->sct), (&__pyx_v_g2l->sct))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 412, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":387
+  /* "PETSc/DMDA.pyx":413
  *         cdef Scatter g2l = Scatter()
  *         CHKERR( DMDAGetScatter(self.dm, &l2g.sct, &g2l.sct) )
  *         PetscINCREF(l2g.obj)             # <<<<<<<<<<<<<<
@@ -207261,7 +211909,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(struct __pyx_obj_8
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_l2g->__pyx_base.obj);
 
-  /* "PETSc/DMDA.pyx":388
+  /* "PETSc/DMDA.pyx":414
  *         CHKERR( DMDAGetScatter(self.dm, &l2g.sct, &g2l.sct) )
  *         PetscINCREF(l2g.obj)
  *         PetscINCREF(g2l.obj)             # <<<<<<<<<<<<<<
@@ -207270,7 +211918,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(struct __pyx_obj_8
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_g2l->__pyx_base.obj);
 
-  /* "PETSc/DMDA.pyx":389
+  /* "PETSc/DMDA.pyx":415
  *         PetscINCREF(l2g.obj)
  *         PetscINCREF(g2l.obj)
  *         return (l2g, g2l)             # <<<<<<<<<<<<<<
@@ -207278,7 +211926,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(struct __pyx_obj_8
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 415, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_l2g));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_l2g));
@@ -207290,7 +211938,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(struct __pyx_obj_8
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":383
+  /* "PETSc/DMDA.pyx":409
  *         return ao
  * 
  *     def getScatter(self):             # <<<<<<<<<<<<<<
@@ -207311,7 +211959,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":393
+/* "PETSc/DMDA.pyx":419
  *     #
  * 
  *     def setRefinementFactor(self,             # <<<<<<<<<<<<<<
@@ -207320,15 +211968,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62getScatter(struct __pyx_obj_8
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65setRefinementFactor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_64setRefinementFactor[] = "DMDA.setRefinementFactor(self, refine_x=2, refine_y=2, refine_z=2)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65setRefinementFactor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setRefinementFactor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_72setRefinementFactor[] = "DMDA.setRefinementFactor(self, refine_x=2, refine_y=2, refine_z=2)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setRefinementFactor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_refine_x = 0;
   PyObject *__pyx_v_refine_y = 0;
   PyObject *__pyx_v_refine_z = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setRefinementFactor (wrapper)", 0);
@@ -207367,7 +212012,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65setRefinementFactor(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementFactor") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementFactor") < 0)) __PYX_ERR(41, 419, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -207384,70 +212029,67 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65setRefinementFactor(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRefinementFactor", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRefinementFactor", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 419, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setRefinementFactor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_64setRefinementFactor(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_refine_x, __pyx_v_refine_y, __pyx_v_refine_z);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_72setRefinementFactor(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_refine_x, __pyx_v_refine_y, __pyx_v_refine_z);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_64setRefinementFactor(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_refine_x, PyObject *__pyx_v_refine_y, PyObject *__pyx_v_refine_z) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setRefinementFactor(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_refine_x, PyObject *__pyx_v_refine_y, PyObject *__pyx_v_refine_z) {
   PetscInt __pyx_v_refine[3];
   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("setRefinementFactor", 0);
 
-  /* "PETSc/DMDA.pyx":398
+  /* "PETSc/DMDA.pyx":424
  *                             refine_z=2):
  *         cdef PetscInt refine[3]
  *         refine[0] = asInt(refine_x)             # <<<<<<<<<<<<<<
  *         refine[1] = asInt(refine_y)
  *         refine[2] = asInt(refine_z)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_x); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_x); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 424, __pyx_L1_error)
   (__pyx_v_refine[0]) = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":399
+  /* "PETSc/DMDA.pyx":425
  *         cdef PetscInt refine[3]
  *         refine[0] = asInt(refine_x)
  *         refine[1] = asInt(refine_y)             # <<<<<<<<<<<<<<
  *         refine[2] = asInt(refine_z)
  *         CHKERR( DMDASetRefinementFactor(self.dm,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_y); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_y); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 425, __pyx_L1_error)
   (__pyx_v_refine[1]) = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":400
+  /* "PETSc/DMDA.pyx":426
  *         refine[0] = asInt(refine_x)
  *         refine[1] = asInt(refine_y)
  *         refine[2] = asInt(refine_z)             # <<<<<<<<<<<<<<
  *         CHKERR( DMDASetRefinementFactor(self.dm,
  *                                       refine[0],
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_z); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_z); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(41, 426, __pyx_L1_error)
   (__pyx_v_refine[2]) = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":401
+  /* "PETSc/DMDA.pyx":427
  *         refine[1] = asInt(refine_y)
  *         refine[2] = asInt(refine_z)
  *         CHKERR( DMDASetRefinementFactor(self.dm,             # <<<<<<<<<<<<<<
  *                                       refine[0],
  *                                       refine[1],
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetRefinementFactor(__pyx_v_self->__pyx_base.dm, (__pyx_v_refine[0]), (__pyx_v_refine[1]), (__pyx_v_refine[2]))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetRefinementFactor(__pyx_v_self->__pyx_base.dm, (__pyx_v_refine[0]), (__pyx_v_refine[1]), (__pyx_v_refine[2]))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 427, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":393
+  /* "PETSc/DMDA.pyx":419
  *     #
  * 
  *     def setRefinementFactor(self,             # <<<<<<<<<<<<<<
@@ -207467,7 +212109,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_64setRefinementFactor(struct __
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":406
+/* "PETSc/DMDA.pyx":432
  *                                       refine[2]) )
  * 
  *     def getRefinementFactor(self):             # <<<<<<<<<<<<<<
@@ -207476,23 +212118,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_64setRefinementFactor(struct __
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_67getRefinementFactor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_66getRefinementFactor[] = "DMDA.getRefinementFactor(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_67getRefinementFactor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_75getRefinementFactor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_74getRefinementFactor[] = "DMDA.getRefinementFactor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_75getRefinementFactor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRefinementFactor (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getRefinementFactor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefinementFactor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_66getRefinementFactor(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_74getRefinementFactor(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66getRefinementFactor(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getRefinementFactor(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_dim;
   PetscInt __pyx_v_refine[3];
@@ -207502,12 +212144,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66getRefinementFactor(struct __
   PyObject *__pyx_t_2 = NULL;
   PetscInt __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getRefinementFactor", 0);
 
-  /* "PETSc/DMDA.pyx":407
+  /* "PETSc/DMDA.pyx":433
  * 
  *     def getRefinementFactor(self):
  *         cdef PetscInt i, dim = 0, refine[3]             # <<<<<<<<<<<<<<
@@ -207516,25 +212155,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66getRefinementFactor(struct __
  */
   __pyx_v_dim = 0;
 
-  /* "PETSc/DMDA.pyx":408
+  /* "PETSc/DMDA.pyx":434
  *     def getRefinementFactor(self):
  *         cdef PetscInt i, dim = 0, refine[3]
  *         CHKERR( DMDAGetDim(self.dm, &dim) )             # <<<<<<<<<<<<<<
  *         CHKERR( DMDAGetRefinementFactor(self.dm,
  *                                       &refine[0],
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 434, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":409
+  /* "PETSc/DMDA.pyx":435
  *         cdef PetscInt i, dim = 0, refine[3]
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
  *         CHKERR( DMDAGetRefinementFactor(self.dm,             # <<<<<<<<<<<<<<
  *                                       &refine[0],
  *                                       &refine[1],
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetRefinementFactor(__pyx_v_self->__pyx_base.dm, (&(__pyx_v_refine[0])), (&(__pyx_v_refine[1])), (&(__pyx_v_refine[2])))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetRefinementFactor(__pyx_v_self->__pyx_base.dm, (&(__pyx_v_refine[0])), (&(__pyx_v_refine[1])), (&(__pyx_v_refine[2])))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 435, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":413
+  /* "PETSc/DMDA.pyx":439
  *                                       &refine[1],
  *                                       &refine[2]) )
  *         return tuple([toInt(refine[i]) for 0 <= i < dim])             # <<<<<<<<<<<<<<
@@ -207542,23 +212181,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66getRefinementFactor(struct __
  *     def setInterpolationType(self, interp_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 439, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = __pyx_v_dim;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_refine[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_refine[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 439, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(41, 439, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
-  __pyx_t_4 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 439, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":406
+  /* "PETSc/DMDA.pyx":432
  *                                       refine[2]) )
  * 
  *     def getRefinementFactor(self):             # <<<<<<<<<<<<<<
@@ -207578,7 +212217,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66getRefinementFactor(struct __
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":415
+/* "PETSc/DMDA.pyx":441
  *         return tuple([toInt(refine[i]) for 0 <= i < dim])
  * 
  *     def setInterpolationType(self, interp_type):             # <<<<<<<<<<<<<<
@@ -207587,13 +212226,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66getRefinementFactor(struct __
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_69setInterpolationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_68setInterpolationType[] = "DMDA.setInterpolationType(self, interp_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_69setInterpolationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_77setInterpolationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_76setInterpolationType[] = "DMDA.setInterpolationType(self, interp_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_77setInterpolationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_interp_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setInterpolationType (wrapper)", 0);
@@ -207615,7 +212251,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_69setInterpolationType(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInterpolationType") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInterpolationType") < 0)) __PYX_ERR(41, 441, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -207626,50 +212262,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_69setInterpolationType(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInterpolationType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInterpolationType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 441, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setInterpolationType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_68setInterpolationType(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_interp_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_76setInterpolationType(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_interp_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_68setInterpolationType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_interp_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76setInterpolationType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_interp_type) {
   DMDAInterpolationType __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   DMDAInterpolationType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setInterpolationType", 0);
 
-  /* "PETSc/DMDA.pyx":416
+  /* "PETSc/DMDA.pyx":442
  * 
  *     def setInterpolationType(self, interp_type):
  *         cdef PetscDMDAInterpolationType ival = dainterpolationtype(interp_type)             # <<<<<<<<<<<<<<
  *         CHKERR( DMDASetInterpolationType(self.dm, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_dainterpolationtype(__pyx_v_interp_type); if (unlikely(__pyx_t_1 == ((DMDAInterpolationType)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_dainterpolationtype(__pyx_v_interp_type); if (unlikely(__pyx_t_1 == ((DMDAInterpolationType)-1L))) __PYX_ERR(41, 442, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":417
+  /* "PETSc/DMDA.pyx":443
  *     def setInterpolationType(self, interp_type):
  *         cdef PetscDMDAInterpolationType ival = dainterpolationtype(interp_type)
  *         CHKERR( DMDASetInterpolationType(self.dm, ival) )             # <<<<<<<<<<<<<<
  * 
  *     def getInterpolationType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetInterpolationType(__pyx_v_self->__pyx_base.dm, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetInterpolationType(__pyx_v_self->__pyx_base.dm, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 443, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":415
+  /* "PETSc/DMDA.pyx":441
  *         return tuple([toInt(refine[i]) for 0 <= i < dim])
  * 
  *     def setInterpolationType(self, interp_type):             # <<<<<<<<<<<<<<
@@ -207689,7 +212322,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_68setInterpolationType(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":419
+/* "PETSc/DMDA.pyx":445
  *         CHKERR( DMDASetInterpolationType(self.dm, ival) )
  * 
  *     def getInterpolationType(self):             # <<<<<<<<<<<<<<
@@ -207698,34 +212331,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_68setInterpolationType(struct _
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_71getInterpolationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_70getInterpolationType[] = "DMDA.getInterpolationType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_71getInterpolationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_79getInterpolationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_78getInterpolationType[] = "DMDA.getInterpolationType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_79getInterpolationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getInterpolationType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getInterpolationType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInterpolationType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_70getInterpolationType(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_78getInterpolationType(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getInterpolationType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_78getInterpolationType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   DMDAInterpolationType __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("getInterpolationType", 0);
 
-  /* "PETSc/DMDA.pyx":420
+  /* "PETSc/DMDA.pyx":446
  * 
  *     def getInterpolationType(self):
  *         cdef PetscDMDAInterpolationType ival = DMDA_INTERPOLATION_Q0             # <<<<<<<<<<<<<<
@@ -207734,16 +212364,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getInterpolationType(struct _
  */
   __pyx_v_ival = DMDA_Q0;
 
-  /* "PETSc/DMDA.pyx":421
+  /* "PETSc/DMDA.pyx":447
  *     def getInterpolationType(self):
  *         cdef PetscDMDAInterpolationType ival = DMDA_INTERPOLATION_Q0
  *         CHKERR( DMDAGetInterpolationType(self.dm, &ival) )             # <<<<<<<<<<<<<<
  *         return <long>ival
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInterpolationType(__pyx_v_self->__pyx_base.dm, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetInterpolationType(__pyx_v_self->__pyx_base.dm, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 447, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":422
+  /* "PETSc/DMDA.pyx":448
  *         cdef PetscDMDAInterpolationType ival = DMDA_INTERPOLATION_Q0
  *         CHKERR( DMDAGetInterpolationType(self.dm, &ival) )
  *         return <long>ival             # <<<<<<<<<<<<<<
@@ -207751,13 +212381,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getInterpolationType(struct _
  *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_ival)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_ival)); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 448, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":419
+  /* "PETSc/DMDA.pyx":445
  *         CHKERR( DMDASetInterpolationType(self.dm, ival) )
  * 
  *     def getInterpolationType(self):             # <<<<<<<<<<<<<<
@@ -207776,7 +212406,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getInterpolationType(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":426
+/* "PETSc/DMDA.pyx":452
  *     #
  * 
  *     def setElementType(self, elem_type):             # <<<<<<<<<<<<<<
@@ -207785,13 +212415,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getInterpolationType(struct _
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setElementType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_72setElementType[] = "DMDA.setElementType(self, elem_type)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setElementType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_81setElementType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_80setElementType[] = "DMDA.setElementType(self, elem_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_81setElementType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_elem_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setElementType (wrapper)", 0);
@@ -207813,7 +212440,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setElementType(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, "setElementType") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setElementType") < 0)) __PYX_ERR(41, 452, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -207824,50 +212451,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setElementType(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setElementType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setElementType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 452, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.setElementType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_72setElementType(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_elem_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_80setElementType(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_elem_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setElementType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_elem_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_80setElementType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_elem_type) {
   DMDAElementType __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   DMDAElementType __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setElementType", 0);
 
-  /* "PETSc/DMDA.pyx":427
+  /* "PETSc/DMDA.pyx":453
  * 
  *     def setElementType(self, elem_type):
  *         cdef PetscDMDAElementType ival = daelementtype(elem_type)             # <<<<<<<<<<<<<<
  *         CHKERR( DMDASetElementType(self.dm, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_daelementtype(__pyx_v_elem_type); if (unlikely(__pyx_t_1 == ((DMDAElementType)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_daelementtype(__pyx_v_elem_type); if (unlikely(__pyx_t_1 == ((DMDAElementType)-1L))) __PYX_ERR(41, 453, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/DMDA.pyx":428
+  /* "PETSc/DMDA.pyx":454
  *     def setElementType(self, elem_type):
  *         cdef PetscDMDAElementType ival = daelementtype(elem_type)
  *         CHKERR( DMDASetElementType(self.dm, ival) )             # <<<<<<<<<<<<<<
  * 
  *     def getElementType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetElementType(__pyx_v_self->__pyx_base.dm, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetElementType(__pyx_v_self->__pyx_base.dm, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(41, 454, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":426
+  /* "PETSc/DMDA.pyx":452
  *     #
  * 
  *     def setElementType(self, elem_type):             # <<<<<<<<<<<<<<
@@ -207887,7 +212511,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setElementType(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":430
+/* "PETSc/DMDA.pyx":456
  *         CHKERR( DMDASetElementType(self.dm, ival) )
  * 
  *     def getElementType(self):             # <<<<<<<<<<<<<<
@@ -207896,34 +212520,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setElementType(struct __pyx_o
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_75getElementType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_74getElementType[] = "DMDA.getElementType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_75getElementType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_83getElementType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_82getElementType[] = "DMDA.getElementType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_83getElementType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getElementType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getElementType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getElementType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_74getElementType(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_82getElementType(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getElementType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_82getElementType(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   DMDAElementType __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("getElementType", 0);
 
-  /* "PETSc/DMDA.pyx":431
+  /* "PETSc/DMDA.pyx":457
  * 
  *     def getElementType(self):
  *         cdef PetscDMDAElementType ival = DMDA_ELEMENT_Q1             # <<<<<<<<<<<<<<
@@ -207932,16 +212553,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getElementType(struct __pyx_o
  */
   __pyx_v_ival = DMDA_ELEMENT_Q1;
 
-  /* "PETSc/DMDA.pyx":432
+  /* "PETSc/DMDA.pyx":458
  *     def getElementType(self):
  *         cdef PetscDMDAElementType ival = DMDA_ELEMENT_Q1
  *         CHKERR( DMDAGetElementType(self.dm, &ival) )             # <<<<<<<<<<<<<<
  *         return <long>ival
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetElementType(__pyx_v_self->__pyx_base.dm, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetElementType(__pyx_v_self->__pyx_base.dm, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 458, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":433
+  /* "PETSc/DMDA.pyx":459
  *         cdef PetscDMDAElementType ival = DMDA_ELEMENT_Q1
  *         CHKERR( DMDAGetElementType(self.dm, &ival) )
  *         return <long>ival             # <<<<<<<<<<<<<<
@@ -207949,13 +212570,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getElementType(struct __pyx_o
  *     def getElements(self, elem_type=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_ival)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_ival)); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 459, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":430
+  /* "PETSc/DMDA.pyx":456
  *         CHKERR( DMDASetElementType(self.dm, ival) )
  * 
  *     def getElementType(self):             # <<<<<<<<<<<<<<
@@ -207974,7 +212595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getElementType(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":435
+/* "PETSc/DMDA.pyx":461
  *         return <long>ival
  * 
  *     def getElements(self, elem_type=None):             # <<<<<<<<<<<<<<
@@ -207983,13 +212604,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getElementType(struct __pyx_o
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_77getElements(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4DMDA_76getElements[] = "DMDA.getElements(self, elem_type=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_77getElements(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_85getElements(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4DMDA_84getElements[] = "DMDA.getElements(self, elem_type=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_85getElements(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_elem_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getElements (wrapper)", 0);
@@ -208014,7 +212632,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_77getElements(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getElements") < 0)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getElements") < 0)) __PYX_ERR(41, 461, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -208027,20 +212645,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_77getElements(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getElements", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[41]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getElements", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(41, 461, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMDA.getElements", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_elem_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self), __pyx_v_elem_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_elem_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self, PyObject *__pyx_v_elem_type) {
   PetscInt __pyx_v_dim;
   DMDAElementType __pyx_v_etype;
   PetscInt __pyx_v_nel;
@@ -208065,12 +212683,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
   PyObject *__pyx_t_14 = NULL;
   PyObject *__pyx_t_15 = NULL;
   int __pyx_t_16;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getElements", 0);
 
-  /* "PETSc/DMDA.pyx":436
+  /* "PETSc/DMDA.pyx":462
  * 
  *     def getElements(self, elem_type=None):
  *         cdef PetscInt dim=0             # <<<<<<<<<<<<<<
@@ -208079,7 +212694,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
  */
   __pyx_v_dim = 0;
 
-  /* "PETSc/DMDA.pyx":438
+  /* "PETSc/DMDA.pyx":464
  *         cdef PetscInt dim=0
  *         cdef PetscDMDAElementType etype
  *         cdef PetscInt nel=0, nen=0             # <<<<<<<<<<<<<<
@@ -208089,7 +212704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
   __pyx_v_nel = 0;
   __pyx_v_nen = 0;
 
-  /* "PETSc/DMDA.pyx":439
+  /* "PETSc/DMDA.pyx":465
  *         cdef PetscDMDAElementType etype
  *         cdef PetscInt nel=0, nen=0
  *         cdef const_PetscInt *elems=NULL             # <<<<<<<<<<<<<<
@@ -208098,16 +212713,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
  */
   __pyx_v_elems = NULL;
 
-  /* "PETSc/DMDA.pyx":441
+  /* "PETSc/DMDA.pyx":467
  *         cdef const_PetscInt *elems=NULL
  *         cdef object elements
  *         CHKERR( DMDAGetDim(self.dm, &dim) )             # <<<<<<<<<<<<<<
  *         if elem_type is not None:
  *             etype = daelementtype(elem_type)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_DMDAGetDim(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 467, __pyx_L1_error)
 
-  /* "PETSc/DMDA.pyx":442
+  /* "PETSc/DMDA.pyx":468
  *         cdef object elements
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
  *         if elem_type is not None:             # <<<<<<<<<<<<<<
@@ -208118,29 +212733,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/DMDA.pyx":443
+    /* "PETSc/DMDA.pyx":469
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
  *         if elem_type is not None:
  *             etype = daelementtype(elem_type)             # <<<<<<<<<<<<<<
  *             CHKERR( DMDASetElementType(self.dm, etype) )
  *         try:
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_daelementtype(__pyx_v_elem_type); if (unlikely(__pyx_t_4 == ((DMDAElementType)-1))) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_daelementtype(__pyx_v_elem_type); if (unlikely(__pyx_t_4 == ((DMDAElementType)-1L))) __PYX_ERR(41, 469, __pyx_L1_error)
     __pyx_v_etype = __pyx_t_4;
 
-    /* "PETSc/DMDA.pyx":444
+    /* "PETSc/DMDA.pyx":470
  *         if elem_type is not None:
  *             etype = daelementtype(elem_type)
  *             CHKERR( DMDASetElementType(self.dm, etype) )             # <<<<<<<<<<<<<<
  *         try:
  *             CHKERR( DMDAGetElements(self.dm, &nel, &nen, &elems) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetElementType(__pyx_v_self->__pyx_base.dm, __pyx_v_etype)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetElementType(__pyx_v_self->__pyx_base.dm, __pyx_v_etype)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 470, __pyx_L1_error)
+
+    /* "PETSc/DMDA.pyx":468
+ *         cdef object elements
+ *         CHKERR( DMDAGetDim(self.dm, &dim) )
+ *         if elem_type is not None:             # <<<<<<<<<<<<<<
+ *             etype = daelementtype(elem_type)
+ *             CHKERR( DMDASetElementType(self.dm, etype) )
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/DMDA.pyx":445
+  /* "PETSc/DMDA.pyx":471
  *             etype = daelementtype(elem_type)
  *             CHKERR( DMDASetElementType(self.dm, etype) )
  *         try:             # <<<<<<<<<<<<<<
@@ -208149,39 +212770,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
  */
   /*try:*/ {
 
-    /* "PETSc/DMDA.pyx":446
+    /* "PETSc/DMDA.pyx":472
  *             CHKERR( DMDASetElementType(self.dm, etype) )
  *         try:
  *             CHKERR( DMDAGetElements(self.dm, &nel, &nen, &elems) )             # <<<<<<<<<<<<<<
  *             elements = array_i(nel*nen, elems)
  *             elements.shape = (toInt(nel), toInt(nen))
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetElements(__pyx_v_self->__pyx_base.dm, (&__pyx_v_nel), (&__pyx_v_nen), (&__pyx_v_elems))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDAGetElements(__pyx_v_self->__pyx_base.dm, (&__pyx_v_nel), (&__pyx_v_nen), (&__pyx_v_elems))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 472, __pyx_L5_error)
 
-    /* "PETSc/DMDA.pyx":447
+    /* "PETSc/DMDA.pyx":473
  *         try:
  *             CHKERR( DMDAGetElements(self.dm, &nel, &nen, &elems) )
  *             elements = array_i(nel*nen, elems)             # <<<<<<<<<<<<<<
  *             elements.shape = (toInt(nel), toInt(nen))
  *         finally:
  */
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_nel * __pyx_v_nen), __pyx_v_elems)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((__pyx_v_nel * __pyx_v_nen), __pyx_v_elems)); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 473, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_v_elements = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "PETSc/DMDA.pyx":448
+    /* "PETSc/DMDA.pyx":474
  *             CHKERR( DMDAGetElements(self.dm, &nel, &nen, &elems) )
  *             elements = array_i(nel*nen, elems)
  *             elements.shape = (toInt(nel), toInt(nen))             # <<<<<<<<<<<<<<
  *         finally:
  *             CHKERR( DMDARestoreElements(self.dm, &nel, &nen, &elems) )
  */
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nel); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nel); if (unlikely(!__pyx_t_5)) __PYX_ERR(41, 474, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nen); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nen); if (unlikely(!__pyx_t_6)) __PYX_ERR(41, 474, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 474, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
@@ -208189,11 +212810,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
     PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
     __pyx_t_5 = 0;
     __pyx_t_6 = 0;
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_elements, __pyx_n_s_shape, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_elements, __pyx_n_s_shape, __pyx_t_7) < 0) __PYX_ERR(41, 474, __pyx_L5_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
 
-  /* "PETSc/DMDA.pyx":450
+  /* "PETSc/DMDA.pyx":476
  *             elements.shape = (toInt(nel), toInt(nen))
  *         finally:
  *             CHKERR( DMDARestoreElements(self.dm, &nel, &nen, &elems) )             # <<<<<<<<<<<<<<
@@ -208202,12 +212823,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDARestoreElements(__pyx_v_self->__pyx_base.dm, (&__pyx_v_nel), (&__pyx_v_nen), (&__pyx_v_elems))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDARestoreElements(__pyx_v_self->__pyx_base.dm, (&__pyx_v_nel), (&__pyx_v_nen), (&__pyx_v_elems))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(41, 476, __pyx_L1_error)
       goto __pyx_L6;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L5_error:;
       __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -208221,8 +212844,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
       __Pyx_XGOTREF(__pyx_t_15);
       __pyx_t_1 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
-        __pyx_t_16 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDARestoreElements(__pyx_v_self->__pyx_base.dm, (&__pyx_v_nel), (&__pyx_v_nen), (&__pyx_v_elems))); if (unlikely(__pyx_t_16 == -1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+        __pyx_t_16 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDARestoreElements(__pyx_v_self->__pyx_base.dm, (&__pyx_v_nel), (&__pyx_v_nen), (&__pyx_v_elems))); if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(41, 476, __pyx_L8_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
         __Pyx_XGIVEREF(__pyx_t_14);
@@ -208237,6 +212861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
       __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9;
       goto __pyx_L1_error;
       __pyx_L8_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
         __Pyx_XGIVEREF(__pyx_t_14);
@@ -208252,7 +212877,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
     __pyx_L6:;
   }
 
-  /* "PETSc/DMDA.pyx":451
+  /* "PETSc/DMDA.pyx":477
  *         finally:
  *             CHKERR( DMDARestoreElements(self.dm, &nel, &nen, &elems) )
  *         return elements             # <<<<<<<<<<<<<<
@@ -208264,7 +212889,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
   __pyx_r = __pyx_v_elements;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":435
+  /* "PETSc/DMDA.pyx":461
  *         return <long>ival
  * 
  *     def getElements(self, elem_type=None):             # <<<<<<<<<<<<<<
@@ -208286,7 +212911,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76getElements(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":456
+/* "PETSc/DMDA.pyx":482
  * 
  *     property dim:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -208313,12 +212938,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dim___get__(struct __pyx_obj_8
   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);
 
-  /* "PETSc/DMDA.pyx":457
+  /* "PETSc/DMDA.pyx":483
  *     property dim:
  *         def __get__(self):
  *             return self.getDim()             # <<<<<<<<<<<<<<
@@ -208326,7 +212948,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dim___get__(struct __pyx_obj_8
  *     property dof:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDim); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -208339,10 +212961,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dim___get__(struct __pyx_obj_8
     }
   }
   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[41]; __pyx_lineno = 457; __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(41, 483, __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[41]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 483, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -208350,7 +212972,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dim___get__(struct __pyx_obj_8
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":456
+  /* "PETSc/DMDA.pyx":482
  * 
  *     property dim:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -208371,7 +212993,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dim___get__(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":460
+/* "PETSc/DMDA.pyx":486
  * 
  *     property dof:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -208398,12 +213020,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dof___get__(struct __pyx_obj_8
   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);
 
-  /* "PETSc/DMDA.pyx":461
+  /* "PETSc/DMDA.pyx":487
  *     property dof:
  *         def __get__(self):
  *             return self.getDof()             # <<<<<<<<<<<<<<
@@ -208411,7 +213030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dof___get__(struct __pyx_obj_8
  *     property sizes:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDof); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getDof); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 487, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -208424,10 +213043,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dof___get__(struct __pyx_obj_8
     }
   }
   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[41]; __pyx_lineno = 461; __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(41, 487, __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[41]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 487, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -208435,7 +213054,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dof___get__(struct __pyx_obj_8
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":460
+  /* "PETSc/DMDA.pyx":486
  * 
  *     property dof:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -208456,7 +213075,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dof___get__(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":464
+/* "PETSc/DMDA.pyx":490
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -208483,12 +213102,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_5sizes___get__(struct __pyx_obj
   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);
 
-  /* "PETSc/DMDA.pyx":465
+  /* "PETSc/DMDA.pyx":491
  *     property sizes:
  *         def __get__(self):
  *             return self.getSizes()             # <<<<<<<<<<<<<<
@@ -208496,7 +213112,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_5sizes___get__(struct __pyx_obj
  *     property proc_sizes:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSizes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getSizes); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 491, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -208509,10 +213125,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_5sizes___get__(struct __pyx_obj
     }
   }
   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[41]; __pyx_lineno = 465; __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(41, 491, __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[41]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 491, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -208520,7 +213136,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_5sizes___get__(struct __pyx_obj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":464
+  /* "PETSc/DMDA.pyx":490
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -208541,7 +213157,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_5sizes___get__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":468
+/* "PETSc/DMDA.pyx":494
  * 
  *     property proc_sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -208568,360 +213184,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10proc_sizes___get__(struct __p
   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);
 
-  /* "PETSc/DMDA.pyx":469
+  /* "PETSc/DMDA.pyx":495
  *     property proc_sizes:
  *         def __get__(self):
  *             return self.getProcSizes()             # <<<<<<<<<<<<<<
  * 
- *     property boundary_type:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getProcSizes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 469; __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[41]; __pyx_lineno = 469; __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[41]; __pyx_lineno = 469; __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;
-
-  /* "PETSc/DMDA.pyx":468
- * 
- *     property proc_sizes:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getProcSizes()
- * 
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.proc_sizes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMDA.pyx":472
- * 
- *     property boundary_type:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getBoundaryType()
- * 
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13boundary_type_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13boundary_type_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_13boundary_type___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13boundary_type___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__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);
-
-  /* "PETSc/DMDA.pyx":473
- *     property boundary_type:
- *         def __get__(self):
- *             return self.getBoundaryType()             # <<<<<<<<<<<<<<
- * 
- *     property stencil:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBoundaryType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 473; __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[41]; __pyx_lineno = 473; __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[41]; __pyx_lineno = 473; __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;
-
-  /* "PETSc/DMDA.pyx":472
- * 
- *     property boundary_type:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getBoundaryType()
- * 
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.boundary_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMDA.pyx":476
- * 
- *     property stencil:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getStencil()
- * 
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_7stencil_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_7stencil_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_7stencil___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7stencil___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__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);
-
-  /* "PETSc/DMDA.pyx":477
- *     property stencil:
- *         def __get__(self):
- *             return self.getStencil()             # <<<<<<<<<<<<<<
- * 
- *     property stencil_type:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getStencil); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 477; __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[41]; __pyx_lineno = 477; __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[41]; __pyx_lineno = 477; __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;
-
-  /* "PETSc/DMDA.pyx":476
- * 
- *     property stencil:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getStencil()
- * 
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.stencil.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMDA.pyx":480
- * 
- *     property stencil_type:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getStencilType()
- * 
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_12stencil_type_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_12stencil_type_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_12stencil_type___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12stencil_type___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__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);
-
-  /* "PETSc/DMDA.pyx":481
- *     property stencil_type:
- *         def __get__(self):
- *             return self.getStencilType()             # <<<<<<<<<<<<<<
- * 
- *     property stencil_width:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getStencilType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 481; __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[41]; __pyx_lineno = 481; __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[41]; __pyx_lineno = 481; __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;
-
-  /* "PETSc/DMDA.pyx":480
- * 
- *     property stencil_type:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getStencilType()
- * 
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.stencil_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMDA.pyx":484
- * 
- *     property stencil_width:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getStencilWidth()
- * 
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13stencil_width_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13stencil_width_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__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);
-
-  /* "PETSc/DMDA.pyx":485
- *     property stencil_width:
- *         def __get__(self):
- *             return self.getStencilWidth()             # <<<<<<<<<<<<<<
- * 
- *     property ranges:
+ *     property boundary_type:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getStencilWidth); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getProcSizes); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 495, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -208934,10 +213207,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct
     }
   }
   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[41]; __pyx_lineno = 485; __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(41, 495, __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[41]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 495, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -208945,11 +213218,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":484
+  /* "PETSc/DMDA.pyx":494
  * 
- *     property stencil_width:
+ *     property proc_sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getStencilWidth()
+ *             return self.getProcSizes()
  * 
  */
 
@@ -208958,7 +213231,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.stencil_width.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.proc_sizes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -208966,47 +213239,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":488
+/* "PETSc/DMDA.pyx":498
  * 
- *     property ranges:
+ *     property boundary_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getRanges()
+ *             return self.getBoundaryType()
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_6ranges_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_6ranges_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13boundary_type_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13boundary_type_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_13boundary_type___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13boundary_type___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__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);
 
-  /* "PETSc/DMDA.pyx":489
- *     property ranges:
+  /* "PETSc/DMDA.pyx":499
+ *     property boundary_type:
  *         def __get__(self):
- *             return self.getRanges()             # <<<<<<<<<<<<<<
+ *             return self.getBoundaryType()             # <<<<<<<<<<<<<<
  * 
- *     property ghost_ranges:
+ *     property stencil:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRanges); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBoundaryType); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 499, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -209019,10 +213289,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_ob
     }
   }
   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[41]; __pyx_lineno = 489; __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(41, 499, __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[41]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 499, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -209030,11 +213300,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_ob
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":488
+  /* "PETSc/DMDA.pyx":498
  * 
- *     property ranges:
+ *     property boundary_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getRanges()
+ *             return self.getBoundaryType()
  * 
  */
 
@@ -209043,7 +213313,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_ob
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.ranges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.boundary_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -209051,47 +213321,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":492
+/* "PETSc/DMDA.pyx":502
  * 
- *     property ghost_ranges:
+ *     property stencil:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getGhostRanges()
+ *             return self.getStencil()
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_12ghost_ranges_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_12ghost_ranges_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_7stencil_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_7stencil_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_7stencil___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7stencil___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__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);
 
-  /* "PETSc/DMDA.pyx":493
- *     property ghost_ranges:
+  /* "PETSc/DMDA.pyx":503
+ *     property stencil:
  *         def __get__(self):
- *             return self.getGhostRanges()             # <<<<<<<<<<<<<<
+ *             return self.getStencil()             # <<<<<<<<<<<<<<
  * 
- *     property corners:
+ *     property stencil_type:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGhostRanges); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getStencil); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 503, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -209104,10 +213371,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct _
     }
   }
   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[41]; __pyx_lineno = 493; __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(41, 503, __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[41]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 503, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -209115,11 +213382,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct _
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":492
+  /* "PETSc/DMDA.pyx":502
  * 
- *     property ghost_ranges:
+ *     property stencil:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getGhostRanges()
+ *             return self.getStencil()
  * 
  */
 
@@ -209128,7 +213395,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct _
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.ghost_ranges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.stencil.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -209136,47 +213403,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":496
+/* "PETSc/DMDA.pyx":506
  * 
- *     property corners:
+ *     property stencil_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getCorners()
+ *             return self.getStencilType()
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_7corners_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_7corners_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_12stencil_type_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_12stencil_type_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_12stencil_type___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12stencil_type___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__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);
 
-  /* "PETSc/DMDA.pyx":497
- *     property corners:
+  /* "PETSc/DMDA.pyx":507
+ *     property stencil_type:
  *         def __get__(self):
- *             return self.getCorners()             # <<<<<<<<<<<<<<
+ *             return self.getStencilType()             # <<<<<<<<<<<<<<
  * 
- *     property ghost_corners:
+ *     property stencil_width:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getCorners); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getStencilType); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 507, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -209189,10 +213453,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_o
     }
   }
   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[41]; __pyx_lineno = 497; __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(41, 507, __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[41]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 507, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -209200,11 +213464,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_o
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":496
+  /* "PETSc/DMDA.pyx":506
  * 
- *     property corners:
+ *     property stencil_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getCorners()
+ *             return self.getStencilType()
  * 
  */
 
@@ -209213,7 +213477,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_o
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.corners.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.stencil_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -209221,47 +213485,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMDA.pyx":500
+/* "PETSc/DMDA.pyx":510
  * 
- *     property ghost_corners:
+ *     property stencil_width:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getGhostCorners()
+ *             return self.getStencilWidth()
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13ghost_corners_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13ghost_corners_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13stencil_width_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13stencil_width_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__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);
 
-  /* "PETSc/DMDA.pyx":501
- *     property ghost_corners:
+  /* "PETSc/DMDA.pyx":511
+ *     property stencil_width:
  *         def __get__(self):
- *             return self.getGhostCorners()             # <<<<<<<<<<<<<<
+ *             return self.getStencilWidth()             # <<<<<<<<<<<<<<
  * 
- *     # backward compatibility
+ *     property ranges:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGhostCorners); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getStencilWidth); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 511, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -209274,10 +213535,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct
     }
   }
   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[41]; __pyx_lineno = 501; __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(41, 511, __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[41]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 511, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -209285,11 +213546,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMDA.pyx":500
+  /* "PETSc/DMDA.pyx":510
  * 
- *     property ghost_corners:
+ *     property stencil_width:
  *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getGhostCorners()
+ *             return self.getStencilWidth()
  * 
  */
 
@@ -209298,7 +213559,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.ghost_corners.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.stencil_width.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -209306,293 +213567,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":5
- * cdef class DMPlex(DM):
- * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM newdm = NULL
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_1create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_create[] = "DMPlex.create(self, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_1create(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);
-  {
-    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[42]; __pyx_lineno = 5; __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[42]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_create(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_comm);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_create(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_ccomm;
-  DM __pyx_v_newdm;
-  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);
-
-  /* "PETSc/DMPlex.pyx":6
- * 
- *     def create(self, comm=None):
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMPlexCreate(ccomm, &newdm) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":7
- *     def create(self, comm=None):
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreate(ccomm, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DMPlex.pyx":8
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMPlexCreate(ccomm, &newdm) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":9
- *         cdef PetscDM newdm = NULL
- *         CHKERR( DMPlexCreate(ccomm, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
-  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
-
-  /* "PETSc/DMPlex.pyx":10
- *         CHKERR( DMPlexCreate(ccomm, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
-
-  /* "PETSc/DMPlex.pyx":5
- * cdef class DMPlex(DM):
+/* "PETSc/DMDA.pyx":514
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM newdm = NULL
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":12
- *         return self
+ *     property ranges:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getRanges()
  * 
- *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_3createFromCellList(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_2createFromCellList[] = "DMPlex.createFromCellList(self, dim, cells, coords, interpolate=True, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_3createFromCellList(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_dim = 0;
-  PyObject *__pyx_v_cells = 0;
-  PyObject *__pyx_v_coords = 0;
-  PyObject *__pyx_v_interpolate = 0;
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_6ranges_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_6ranges_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createFromCellList (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dim,&__pyx_n_s_cells,&__pyx_n_s_coords,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
-    PyObject* values[5] = {0,0,0,0,0};
-    values[3] = ((PyObject *)Py_True);
-    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_dim)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cells)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("createFromCellList", 0, 3, 5, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coords)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("createFromCellList", 0, 3, 5, 2); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  3:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
-          if (value) { values[3] = value; kw_args--; }
-        }
-        case  4:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[4] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createFromCellList") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __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);
-        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_dim = values[0];
-    __pyx_v_cells = values[1];
-    __pyx_v_coords = values[2];
-    __pyx_v_interpolate = values[3];
-    __pyx_v_comm = values[4];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createFromCellList", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createFromCellList", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_dim, __pyx_v_cells, __pyx_v_coords, __pyx_v_interpolate, __pyx_v_comm);
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_cells, PyObject *__pyx_v_coords, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
-  MPI_Comm __pyx_v_ccomm;
-  PetscBool __pyx_v_interp;
-  DM __pyx_v_newdm;
-  PetscInt __pyx_v_cdim;
-  PetscInt __pyx_v_numCells;
-  PetscInt __pyx_v_numCorners;
-  int *__pyx_v_cellVertices;
-  PetscInt __pyx_v_numVertices;
-  PetscInt __pyx_v_spaceDim;
-  double *__pyx_v_vertexCoords;
-  int __pyx_v_npy_flags;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  MPI_Comm __pyx_t_4;
-  PetscBool __pyx_t_5;
-  PetscInt __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_t_8;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createFromCellList", 0);
-  __Pyx_INCREF(__pyx_v_cells);
-  __Pyx_INCREF(__pyx_v_coords);
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/DMPlex.pyx":13
+  /* "PETSc/DMDA.pyx":515
+ *     property ranges:
+ *         def __get__(self):
+ *             return self.getRanges()             # <<<<<<<<<<<<<<
  * 
- *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
+ *     property ghost_ranges:
  */
-  __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_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getRanges); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 515, __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);
@@ -209602,332 +213617,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __
     }
   }
   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[42]; __pyx_lineno = 13; __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(41, 515, __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[42]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 515, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __pyx_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":14
- *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_4;
-
-  /* "PETSc/DMPlex.pyx":15
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
- *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  cdim = asInt(dim)
- */
-  __pyx_t_5 = ((PetscBool)PyInt_AsLong(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_interp = __pyx_t_5;
-
-  /* "PETSc/DMPlex.pyx":16
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscInt  numCells = 0
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DMPlex.pyx":17
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  cdim = asInt(dim)             # <<<<<<<<<<<<<<
- *         cdef PetscInt  numCells = 0
- *         cdef PetscInt  numCorners = 0
- */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_6 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cdim = __pyx_t_6;
-
-  /* "PETSc/DMPlex.pyx":18
- *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscInt  numCells = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt  numCorners = 0
- *         cdef int       *cellVertices = NULL
- */
-  __pyx_v_numCells = 0;
-
-  /* "PETSc/DMPlex.pyx":19
- *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscInt  numCells = 0
- *         cdef PetscInt  numCorners = 0             # <<<<<<<<<<<<<<
- *         cdef int       *cellVertices = NULL
- *         cdef PetscInt  numVertices = 0
- */
-  __pyx_v_numCorners = 0;
-
-  /* "PETSc/DMPlex.pyx":20
- *         cdef PetscInt  numCells = 0
- *         cdef PetscInt  numCorners = 0
- *         cdef int       *cellVertices = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt  numVertices = 0
- *         cdef PetscInt  spaceDim= 0
- */
-  __pyx_v_cellVertices = NULL;
-
-  /* "PETSc/DMPlex.pyx":21
- *         cdef PetscInt  numCorners = 0
- *         cdef int       *cellVertices = NULL
- *         cdef PetscInt  numVertices = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt  spaceDim= 0
- *         cdef double    *vertexCoords = NULL
- */
-  __pyx_v_numVertices = 0;
-
-  /* "PETSc/DMPlex.pyx":22
- *         cdef int       *cellVertices = NULL
- *         cdef PetscInt  numVertices = 0
- *         cdef PetscInt  spaceDim= 0             # <<<<<<<<<<<<<<
- *         cdef double    *vertexCoords = NULL
- *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY
- */
-  __pyx_v_spaceDim = 0;
-
-  /* "PETSc/DMPlex.pyx":23
- *         cdef PetscInt  numVertices = 0
- *         cdef PetscInt  spaceDim= 0
- *         cdef double    *vertexCoords = NULL             # <<<<<<<<<<<<<<
- *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY
- *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
- */
-  __pyx_v_vertexCoords = NULL;
-
-  /* "PETSc/DMPlex.pyx":24
- *         cdef PetscInt  spaceDim= 0
- *         cdef double    *vertexCoords = NULL
- *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY             # <<<<<<<<<<<<<<
- *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
- *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)
- */
-  __pyx_v_npy_flags = ((NPY_ARRAY_ALIGNED | NPY_ARRAY_NOTSWAPPED) | NPY_ARRAY_CARRAY);
-
-  /* "PETSc/DMPlex.pyx":25
- *         cdef double    *vertexCoords = NULL
- *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY
- *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)             # <<<<<<<<<<<<<<
- *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)
- *         if PyArray_NDIM(cells) != 2: raise ValueError(
- */
-  __pyx_t_2 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_cells, NPY_INT, __pyx_v_npy_flags)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_cells, __pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":26
- *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY
- *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
- *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)             # <<<<<<<<<<<<<<
- *         if PyArray_NDIM(cells) != 2: raise ValueError(
- *                 ("cell indices must have two dimensions: "
- */
-  __pyx_t_2 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_coords, NPY_DOUBLE, __pyx_v_npy_flags)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_coords, __pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":27
- *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
- *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)
- *         if PyArray_NDIM(cells) != 2: raise ValueError(             # <<<<<<<<<<<<<<
- *                 ("cell indices must have two dimensions: "
- *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )
- */
-  if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_7 = ((PyArray_NDIM(((PyArrayObject *)__pyx_v_cells)) != 2) != 0);
-  if (__pyx_t_7) {
-
-    /* "PETSc/DMPlex.pyx":29
- *         if PyArray_NDIM(cells) != 2: raise ValueError(
- *                 ("cell indices must have two dimensions: "
- *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )             # <<<<<<<<<<<<<<
- *         if PyArray_NDIM(coords) != 2: raise ValueError(
- *                 ("coords vertices must have two dimensions: "
- */
-    if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_2 = __Pyx_PyInt_From_int(PyArray_NDIM(((PyArrayObject *)__pyx_v_cells))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_cell_indices_must_have_two_dimen, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-    /* "PETSc/DMPlex.pyx":27
- *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
- *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)
- *         if PyArray_NDIM(cells) != 2: raise ValueError(             # <<<<<<<<<<<<<<
- *                 ("cell indices must have two dimensions: "
- *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )
- */
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
-    __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    {__pyx_filename = __pyx_f[42]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-
-  /* "PETSc/DMPlex.pyx":30
- *                 ("cell indices must have two dimensions: "
- *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )
- *         if PyArray_NDIM(coords) != 2: raise ValueError(             # <<<<<<<<<<<<<<
- *                 ("coords vertices must have two dimensions: "
- *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )
- */
-  if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_7 = ((PyArray_NDIM(((PyArrayObject *)__pyx_v_coords)) != 2) != 0);
-  if (__pyx_t_7) {
-
-    /* "PETSc/DMPlex.pyx":32
- *         if PyArray_NDIM(coords) != 2: raise ValueError(
- *                 ("coords vertices must have two dimensions: "
- *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )             # <<<<<<<<<<<<<<
- *         numCells     = <PetscInt> PyArray_DIM(cells,  0)
- *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)
- */
-    if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_1 = __Pyx_PyInt_From_int(PyArray_NDIM(((PyArrayObject *)__pyx_v_coords))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_coords_vertices_must_have_two_di, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-    /* "PETSc/DMPlex.pyx":30
- *                 ("cell indices must have two dimensions: "
- *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )
- *         if PyArray_NDIM(coords) != 2: raise ValueError(             # <<<<<<<<<<<<<<
- *                 ("coords vertices must have two dimensions: "
- *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )
- */
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_2);
-    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
-    __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[42]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-
-  /* "PETSc/DMPlex.pyx":33
- *                 ("coords vertices must have two dimensions: "
- *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )
- *         numCells     = <PetscInt> PyArray_DIM(cells,  0)             # <<<<<<<<<<<<<<
- *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)
- *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)
- */
-  if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_numCells = ((PetscInt)PyArray_DIM(((PyArrayObject *)__pyx_v_cells), 0));
-
-  /* "PETSc/DMPlex.pyx":34
- *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )
- *         numCells     = <PetscInt> PyArray_DIM(cells,  0)
- *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)             # <<<<<<<<<<<<<<
- *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)
- *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)
- */
-  if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_numCorners = ((PetscInt)PyArray_DIM(((PyArrayObject *)__pyx_v_cells), 1));
-
-  /* "PETSc/DMPlex.pyx":35
- *         numCells     = <PetscInt> PyArray_DIM(cells,  0)
- *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)
- *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)             # <<<<<<<<<<<<<<
- *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)
- *         cellVertices = <int*>     PyArray_DATA(cells)
- */
-  if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_numVertices = ((PetscInt)PyArray_DIM(((PyArrayObject *)__pyx_v_coords), 0));
-
-  /* "PETSc/DMPlex.pyx":36
- *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)
- *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)
- *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)             # <<<<<<<<<<<<<<
- *         cellVertices = <int*>     PyArray_DATA(cells)
- *         vertexCoords = <double*>  PyArray_DATA(coords)
- */
-  if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_spaceDim = ((PetscInt)PyArray_DIM(((PyArrayObject *)__pyx_v_coords), 1));
-
-  /* "PETSc/DMPlex.pyx":37
- *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)
- *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)
- *         cellVertices = <int*>     PyArray_DATA(cells)             # <<<<<<<<<<<<<<
- *         vertexCoords = <double*>  PyArray_DATA(coords)
- *         CHKERR( DMPlexCreateFromCellList(ccomm, cdim, numCells, numVertices,
- */
-  if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cellVertices = ((int *)PyArray_DATA(((PyArrayObject *)__pyx_v_cells)));
-
-  /* "PETSc/DMPlex.pyx":38
- *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)
- *         cellVertices = <int*>     PyArray_DATA(cells)
- *         vertexCoords = <double*>  PyArray_DATA(coords)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateFromCellList(ccomm, cdim, numCells, numVertices,
- *                                          numCorners, interp, cellVertices,
- */
-  if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_vertexCoords = ((double *)PyArray_DATA(((PyArrayObject *)__pyx_v_coords)));
-
-  /* "PETSc/DMPlex.pyx":39
- *         cellVertices = <int*>     PyArray_DATA(cells)
- *         vertexCoords = <double*>  PyArray_DATA(coords)
- *         CHKERR( DMPlexCreateFromCellList(ccomm, cdim, numCells, numVertices,             # <<<<<<<<<<<<<<
- *                                          numCorners, interp, cellVertices,
- *                                          spaceDim, vertexCoords, &newdm) )
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateFromCellList(__pyx_v_ccomm, __pyx_v_cdim, __pyx_v_numCells, __pyx_v_numVertices, __pyx_v_numCorners, __pyx_v_interp, __pyx_v_cellVertices, __pyx_v_spaceDim, __pyx_v_vertexCoords, (&__pyx_v_newdm))); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":42
- *                                          numCorners, interp, cellVertices,
- *                                          spaceDim, vertexCoords, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
-  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
-
-  /* "PETSc/DMPlex.pyx":43
- *                                          spaceDim, vertexCoords, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":12
- *         return self
+  /* "PETSc/DMDA.pyx":514
+ * 
+ *     property ranges:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getRanges()
  * 
- *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
 
   /* function exit code */
@@ -209935,564 +213641,137 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createFromCellList", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.ranges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
-  __Pyx_XDECREF(__pyx_v_cells);
-  __Pyx_XDECREF(__pyx_v_coords);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":45
- *         return self
- * 
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscBool interp = interpolate
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_5createBoxMesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_4createBoxMesh[] = "DMPlex.createBoxMesh(self, dim, interpolate=True, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_5createBoxMesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_dim = 0;
-  PyObject *__pyx_v_interpolate = 0;
-  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("createBoxMesh (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dim,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = ((PyObject *)Py_True);
-    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_dim)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[2] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBoxMesh") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 45; __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_dim = values[0];
-    __pyx_v_interpolate = values[1];
-    __pyx_v_comm = values[2];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createBoxMesh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createBoxMesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_dim, __pyx_v_interpolate, __pyx_v_comm);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
-  PetscInt __pyx_v_cdim;
-  PetscBool __pyx_v_interp;
-  MPI_Comm __pyx_v_ccomm;
-  DM __pyx_v_newdm;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  PetscBool __pyx_t_2;
-  MPI_Comm __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createBoxMesh", 0);
-
-  /* "PETSc/DMPlex.pyx":46
- * 
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):
- *         cdef PetscInt  cdim = asInt(dim)             # <<<<<<<<<<<<<<
- *         cdef PetscBool interp = interpolate
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cdim = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":47
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):
- *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM   newdm = NULL
- */
-  __pyx_t_2 = ((PetscBool)PyInt_AsLong(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_interp = __pyx_t_2;
-
-  /* "PETSc/DMPlex.pyx":48
- *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscBool interp = interpolate
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
- */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_3;
-
-  /* "PETSc/DMPlex.pyx":49
- *         cdef PetscBool interp = interpolate
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DMPlex.pyx":50
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateBoxMesh(__pyx_v_ccomm, __pyx_v_cdim, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":51
- *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
-  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
-
-  /* "PETSc/DMPlex.pyx":52
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
-
-  /* "PETSc/DMPlex.pyx":45
- *         return self
+/* "PETSc/DMDA.pyx":518
  * 
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscBool interp = interpolate
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createBoxMesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":54
- *         return self
+ *     property ghost_ranges:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getGhostRanges()
  * 
- *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt dim = 0, *icells = NULL
- *         cells = iarray_i(numcells, &dim, &icells)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh[] = "DMPlex.createHexBoxMesh(self, numcells, boundary_type=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_numcells = 0;
-  PyObject *__pyx_v_boundary_type = 0;
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_12ghost_ranges_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_12ghost_ranges_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createHexBoxMesh (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_numcells,&__pyx_n_s_boundary_type,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    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 (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numcells)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_boundary_type);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[2] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createHexBoxMesh") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 54; __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_numcells = values[0];
-    __pyx_v_boundary_type = values[1];
-    __pyx_v_comm = values[2];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createHexBoxMesh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createHexBoxMesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_numcells, __pyx_v_boundary_type, __pyx_v_comm);
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_numcells, PyObject *__pyx_v_boundary_type, PyObject *__pyx_v_comm) {
-  PetscInt __pyx_v_dim;
-  PetscInt *__pyx_v_icells;
-  CYTHON_UNUSED PyArrayObject *__pyx_v_cells = NULL;
-  DMBoundaryType __pyx_v_btx;
-  DMBoundaryType __pyx_v_bty;
-  DMBoundaryType __pyx_v_btz;
-  MPI_Comm __pyx_v_ccomm;
-  DM __pyx_v_newdm;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  PetscInt __pyx_t_4;
-  MPI_Comm __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createHexBoxMesh", 0);
-
-  /* "PETSc/DMPlex.pyx":55
- * 
- *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):
- *         cdef PetscInt dim = 0, *icells = NULL             # <<<<<<<<<<<<<<
- *         cells = iarray_i(numcells, &dim, &icells)
- *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
- */
-  __pyx_v_dim = 0;
-  __pyx_v_icells = NULL;
-
-  /* "PETSc/DMPlex.pyx":56
- *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):
- *         cdef PetscInt dim = 0, *icells = NULL
- *         cells = iarray_i(numcells, &dim, &icells)             # <<<<<<<<<<<<<<
- *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
- *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
- */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_numcells, (&__pyx_v_dim), (&__pyx_v_icells))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_cells = ((PyArrayObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DMPlex.pyx":57
- *         cdef PetscInt dim = 0, *icells = NULL
- *         cells = iarray_i(numcells, &dim, &icells)
- *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
- *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
- *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
- */
-  __pyx_v_btx = DM_BOUNDARY_NONE;
-
-  /* "PETSc/DMPlex.pyx":58
- *         cells = iarray_i(numcells, &dim, &icells)
- *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
- *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
- *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
- *         if boundary_type is not None:
- */
-  __pyx_v_bty = DM_BOUNDARY_NONE;
-
-  /* "PETSc/DMPlex.pyx":59
- *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
- *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
- *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
- *         if boundary_type is not None:
- *             asBoundary(boundary_type, &btx, &bty, &btz)
- */
-  __pyx_v_btz = DM_BOUNDARY_NONE;
-
-  /* "PETSc/DMPlex.pyx":60
- *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
- *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
- *         if boundary_type is not None:             # <<<<<<<<<<<<<<
- *             asBoundary(boundary_type, &btx, &bty, &btz)
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- */
-  __pyx_t_2 = (__pyx_v_boundary_type != Py_None);
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
-
-    /* "PETSc/DMPlex.pyx":61
- *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
- *         if boundary_type is not None:
- *             asBoundary(boundary_type, &btx, &bty, &btz)             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM  newdm = NULL
- */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundary(__pyx_v_boundary_type, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz)); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "PETSc/DMPlex.pyx":62
- *         if boundary_type is not None:
- *             asBoundary(boundary_type, &btx, &bty, &btz)
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscDM  newdm = NULL
- *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
- */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_5;
-
-  /* "PETSc/DMPlex.pyx":63
- *             asBoundary(boundary_type, &btx, &bty, &btz)
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM  newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DMPlex.pyx":64
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscDM  newdm = NULL
- *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self
- */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateHexBoxMesh(__pyx_v_ccomm, __pyx_v_dim, __pyx_v_icells, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz, (&__pyx_v_newdm))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":65
- *         cdef PetscDM  newdm = NULL
- *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
-  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/DMPlex.pyx":66
- *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self             # <<<<<<<<<<<<<<
+  /* "PETSc/DMDA.pyx":519
+ *     property ghost_ranges:
+ *         def __get__(self):
+ *             return self.getGhostRanges()             # <<<<<<<<<<<<<<
  * 
- *     def createCGNS(self, cgid, interpolate=True, comm=None):
+ *     property corners:
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGhostRanges); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 519, __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(41, 519, __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(41, 519, __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;
 
-  /* "PETSc/DMPlex.pyx":54
- *         return self
+  /* "PETSc/DMDA.pyx":518
+ * 
+ *     property ghost_ranges:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getGhostRanges()
  * 
- *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt dim = 0, *icells = NULL
- *         cells = iarray_i(numcells, &dim, &icells)
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createHexBoxMesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.ghost_ranges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_cells);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":68
- *         return self
+/* "PETSc/DMDA.pyx":522
+ * 
+ *     property corners:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getCorners()
  * 
- *     def createCGNS(self, cgid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_8createCGNS[] = "DMPlex.createCGNS(self, cgid, interpolate=True, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_cgid = 0;
-  PyObject *__pyx_v_interpolate = 0;
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_7corners_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_7corners_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createCGNS (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cgid,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = ((PyObject *)Py_True);
-    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_cgid)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[2] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCGNS") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 68; __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_cgid = values[0];
-    __pyx_v_interpolate = values[1];
-    __pyx_v_comm = values[2];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createCGNS", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCGNS", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_cgid, __pyx_v_interpolate, __pyx_v_comm);
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cgid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
-  MPI_Comm __pyx_v_ccomm;
-  PetscBool __pyx_v_interp;
-  DM __pyx_v_newdm;
-  PetscInt __pyx_v_ccgid;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  MPI_Comm __pyx_t_4;
-  PetscBool __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("createCGNS", 0);
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/DMPlex.pyx":69
+  /* "PETSc/DMDA.pyx":523
+ *     property corners:
+ *         def __get__(self):
+ *             return self.getCorners()             # <<<<<<<<<<<<<<
  * 
- *     def createCGNS(self, cgid, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
+ *     property ghost_corners:
  */
-  __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_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getCorners); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 523, __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);
@@ -210502,95 +213781,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_
     }
   }
   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[42]; __pyx_lineno = 69; __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(41, 523, __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[42]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 523, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __pyx_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":70
- *     def createCGNS(self, cgid, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_4;
-
-  /* "PETSc/DMPlex.pyx":71
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
- *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  ccgid = asInt(cgid)
- */
-  __pyx_t_5 = ((PetscBool)PyInt_AsLong(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_interp = __pyx_t_5;
-
-  /* "PETSc/DMPlex.pyx":72
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ccgid = asInt(cgid)
- *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DMPlex.pyx":73
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  ccgid = asInt(cgid)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_cgid); if (unlikely(__pyx_t_6 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccgid = __pyx_t_6;
-
-  /* "PETSc/DMPlex.pyx":74
- *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  ccgid = asInt(cgid)
- *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self
- */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCGNS(__pyx_v_ccomm, __pyx_v_ccgid, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":75
- *         cdef PetscInt  ccgid = asInt(cgid)
- *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
-  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
-
-  /* "PETSc/DMPlex.pyx":76
- *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":68
- *         return self
+  /* "PETSc/DMDA.pyx":522
+ * 
+ *     property corners:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getCorners()
  * 
- *     def createCGNS(self, cgid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
 
   /* function exit code */
@@ -210598,128 +213805,55 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCGNS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.corners.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":78
- *         return self
+/* "PETSc/DMDA.pyx":526
+ * 
+ *     property ghost_corners:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getGhostCorners()
  * 
- *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile[] = "DMPlex.createCGNSFromFile(self, filename, interpolate=True, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_filename = 0;
-  PyObject *__pyx_v_interpolate = 0;
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13ghost_corners_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13ghost_corners_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createCGNSFromFile (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = ((PyObject *)Py_True);
-    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_filename)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[2] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCGNSFromFile") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 78; __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_filename = values[0];
-    __pyx_v_interpolate = values[1];
-    __pyx_v_comm = values[2];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createCGNSFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCGNSFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_filename, __pyx_v_interpolate, __pyx_v_comm);
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(((struct __pyx_obj_8petsc4py_5PETSc_DMDA *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
-  MPI_Comm __pyx_v_ccomm;
-  PetscBool __pyx_v_interp;
-  DM __pyx_v_newdm;
-  const char *__pyx_v_cfile;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct __pyx_obj_8petsc4py_5PETSc_DMDA *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  MPI_Comm __pyx_t_4;
-  PetscBool __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createCGNSFromFile", 0);
-  __Pyx_INCREF(__pyx_v_filename);
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/DMPlex.pyx":79
+  /* "PETSc/DMDA.pyx":527
+ *     property ghost_corners:
+ *         def __get__(self):
+ *             return self.getGhostCorners()             # <<<<<<<<<<<<<<
  * 
- *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
+ *     # backward compatibility
  */
-  __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_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getGhostCorners); if (unlikely(!__pyx_t_2)) __PYX_ERR(41, 527, __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);
@@ -210729,106 +213863,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct _
     }
   }
   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[42]; __pyx_lineno = 79; __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(41, 527, __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[42]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 527, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __pyx_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":80
- *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_4;
-
-  /* "PETSc/DMPlex.pyx":81
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
- *         cdef PetscDM   newdm = NULL
- *         cdef const_char *cfile = NULL
- */
-  __pyx_t_5 = ((PetscBool)PyInt_AsLong(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_interp = __pyx_t_5;
-
-  /* "PETSc/DMPlex.pyx":82
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
- *         cdef const_char *cfile = NULL
- *         filename = str2bytes(filename, &cfile)
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DMPlex.pyx":83
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL
- *         cdef const_char *cfile = NULL             # <<<<<<<<<<<<<<
- *         filename = str2bytes(filename, &cfile)
- *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
- */
-  __pyx_v_cfile = NULL;
-
-  /* "PETSc/DMPlex.pyx":84
- *         cdef PetscDM   newdm = NULL
- *         cdef const_char *cfile = NULL
- *         filename = str2bytes(filename, &cfile)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_filename, (&__pyx_v_cfile)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":85
- *         cdef const_char *cfile = NULL
- *         filename = str2bytes(filename, &cfile)
- *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self
- */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCGNSFromFile(__pyx_v_ccomm, __pyx_v_cfile, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":86
- *         filename = str2bytes(filename, &cfile)
- *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
-  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
-
-  /* "PETSc/DMPlex.pyx":87
- *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def createExodusFromFile(self, filename, interpolate=True, comm=None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":78
- *         return self
+  /* "PETSc/DMDA.pyx":526
+ * 
+ *     property ghost_corners:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getGhostCorners()
  * 
- *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
 
   /* function exit code */
@@ -210836,48 +213887,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct _
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCGNSFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMDA.ghost_corners.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
-  __Pyx_XDECREF(__pyx_v_filename);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":89
- *         return self
+/* "PETSc/DMPlex.pyx":5
+ * cdef class DMPlex(DM):
  * 
- *     def createExodusFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM newdm = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile[] = "DMPlex.createExodusFromFile(self, filename, interpolate=True, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_filename = 0;
-  PyObject *__pyx_v_interpolate = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_1create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_create[] = "DMPlex.create(self, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_1create(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("createExodusFromFile (wrapper)", 0);
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = ((PyObject *)Py_True);
-    values[2] = ((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  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;
@@ -210885,164 +213926,78 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObje
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filename)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[2] = value; kw_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, "createExodusFromFile") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(42, 5, __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_filename = values[0];
-    __pyx_v_interpolate = values[1];
-    __pyx_v_comm = values[2];
+    __pyx_v_comm = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createExodusFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 5, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createExodusFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_filename, __pyx_v_interpolate, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_create(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_create(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
-  PetscBool __pyx_v_interp;
   DM __pyx_v_newdm;
-  const char *__pyx_v_cfile;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  MPI_Comm __pyx_t_4;
-  PetscBool __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createExodusFromFile", 0);
-  __Pyx_INCREF(__pyx_v_filename);
+  MPI_Comm __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/DMPlex.pyx":90
+  /* "PETSc/DMPlex.pyx":6
  * 
- *     def createExodusFromFile(self, filename, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
- */
-  __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_filename = __pyx_f[42]; __pyx_lineno = 90; __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[42]; __pyx_lineno = 90; __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_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":91
- *     def createExodusFromFile(self, filename, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL
- */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_4;
-
-  /* "PETSc/DMPlex.pyx":92
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
- *         cdef PetscDM   newdm = NULL
- *         cdef const_char *cfile = NULL
- */
-  __pyx_t_5 = ((PetscBool)PyInt_AsLong(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_interp = __pyx_t_5;
-
-  /* "PETSc/DMPlex.pyx":93
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
- *         cdef const_char *cfile = NULL
- *         filename = str2bytes(filename, &cfile)
- */
-  __pyx_v_newdm = NULL;
-
-  /* "PETSc/DMPlex.pyx":94
- *         cdef PetscBool interp = interpolate
- *         cdef PetscDM   newdm = NULL
- *         cdef const_char *cfile = NULL             # <<<<<<<<<<<<<<
- *         filename = str2bytes(filename, &cfile)
- *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
+ *     def create(self, comm=None):
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexCreate(ccomm, &newdm) )
  */
-  __pyx_v_cfile = NULL;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 6, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":95
- *         cdef PetscDM   newdm = NULL
- *         cdef const_char *cfile = NULL
- *         filename = str2bytes(filename, &cfile)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
+  /* "PETSc/DMPlex.pyx":7
+ *     def create(self, comm=None):
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreate(ccomm, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_filename, (&__pyx_v_cfile)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":96
- *         cdef const_char *cfile = NULL
- *         filename = str2bytes(filename, &cfile)
- *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":8
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexCreate(ccomm, &newdm) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateExodusFromFile(__pyx_v_ccomm, __pyx_v_cfile, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 8, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":97
- *         filename = str2bytes(filename, &cfile)
- *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
+  /* "PETSc/DMPlex.pyx":9
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexCreate(ccomm, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
  *         return self
  * 
@@ -211050,71 +214005,67 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
   __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":98
- *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
+  /* "PETSc/DMPlex.pyx":10
+ *         CHKERR( DMPlexCreate(ccomm, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createExodus(self, exoid, interpolate=True, comm=None):
+ *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":89
- *         return self
+  /* "PETSc/DMPlex.pyx":5
+ * cdef class DMPlex(DM):
  * 
- *     def createExodusFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM newdm = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createExodusFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
-  __Pyx_XDECREF(__pyx_v_filename);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":100
+/* "PETSc/DMPlex.pyx":12
  *         return self
  * 
- *     def createExodus(self, exoid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
+ *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_14createExodus[] = "DMPlex.createExodus(self, exoid, interpolate=True, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_exoid = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_3createFromCellList(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_2createFromCellList[] = "DMPlex.createFromCellList(self, dim, cells, coords, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_3createFromCellList(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_dim = 0;
+  PyObject *__pyx_v_cells = 0;
+  PyObject *__pyx_v_coords = 0;
   PyObject *__pyx_v_interpolate = 0;
   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("createExodus (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createFromCellList (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_exoid,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = ((PyObject *)Py_True);
-    values[2] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dim,&__pyx_n_s_cells,&__pyx_n_s_coords,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    values[3] = ((PyObject *)Py_True);
+    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);
@@ -211124,153 +214075,377 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exoid)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dim)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cells)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("createFromCellList", 0, 3, 5, 1); __PYX_ERR(42, 12, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coords)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("createFromCellList", 0, 3, 5, 2); __PYX_ERR(42, 12, __pyx_L3_error)
+        }
+        case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
-          if (value) { values[1] = value; kw_args--; }
+          if (value) { values[3] = value; kw_args--; }
         }
-        case  2:
+        case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[2] = value; kw_args--; }
+          if (value) { values[4] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createExodus") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createFromCellList") < 0)) __PYX_ERR(42, 12, __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);
+        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_exoid = values[0];
-    __pyx_v_interpolate = values[1];
-    __pyx_v_comm = values[2];
+    __pyx_v_dim = values[0];
+    __pyx_v_cells = values[1];
+    __pyx_v_coords = values[2];
+    __pyx_v_interpolate = values[3];
+    __pyx_v_comm = values[4];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createExodus", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createFromCellList", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 12, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createExodus", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createFromCellList", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_exoid, __pyx_v_interpolate, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_dim, __pyx_v_cells, __pyx_v_coords, __pyx_v_interpolate, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_exoid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_cells, PyObject *__pyx_v_coords, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   PetscBool __pyx_v_interp;
   DM __pyx_v_newdm;
-  PetscInt __pyx_v_cexoid;
+  PetscInt __pyx_v_cdim;
+  PetscInt __pyx_v_numCells;
+  PetscInt __pyx_v_numCorners;
+  int *__pyx_v_cellVertices;
+  PetscInt __pyx_v_numVertices;
+  PetscInt __pyx_v_spaceDim;
+  double *__pyx_v_vertexCoords;
+  int __pyx_v_npy_flags;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  MPI_Comm __pyx_t_4;
-  PetscBool __pyx_t_5;
-  PetscInt __pyx_t_6;
+  MPI_Comm __pyx_t_1;
+  PetscBool __pyx_t_2;
+  PetscInt __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createExodus", 0);
+  __Pyx_RefNannySetupContext("createFromCellList", 0);
+  __Pyx_INCREF(__pyx_v_cells);
+  __Pyx_INCREF(__pyx_v_coords);
 
-  /* "PETSc/DMPlex.pyx":101
+  /* "PETSc/DMPlex.pyx":13
  * 
- *     def createExodus(self, exoid, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate
- */
-  __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_filename = __pyx_f[42]; __pyx_lineno = 101; __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[42]; __pyx_lineno = 101; __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_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":102
- *     def createExodus(self, exoid, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()
+ *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_4;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 13, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":103
- *         cdef DMPlex    dm = <DMPlex>type(self)()
+  /* "PETSc/DMPlex.pyx":14
+ *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
  *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  cexoid = asInt(exoid)
+ *         cdef PetscInt  cdim = asInt(dim)
  */
-  __pyx_t_5 = ((PetscBool)PyInt_AsLong(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_interp = __pyx_t_5;
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 14, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":104
+  /* "PETSc/DMPlex.pyx":15
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt  cexoid = asInt(exoid)
- *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
+ *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscInt  numCells = 0
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":105
+  /* "PETSc/DMPlex.pyx":16
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  cexoid = asInt(exoid)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
- *         PetscCLEAR(self.obj); self.dm = newdm
+ *         cdef PetscInt  cdim = asInt(dim)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  numCells = 0
+ *         cdef PetscInt  numCorners = 0
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_exoid); if (unlikely(__pyx_t_6 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cexoid = __pyx_t_6;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(42, 16, __pyx_L1_error)
+  __pyx_v_cdim = __pyx_t_3;
 
-  /* "PETSc/DMPlex.pyx":106
+  /* "PETSc/DMPlex.pyx":17
  *         cdef PetscDM   newdm = NULL
- *         cdef PetscInt  cexoid = asInt(exoid)
- *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )             # <<<<<<<<<<<<<<
- *         PetscCLEAR(self.obj); self.dm = newdm
- *         return self
+ *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscInt  numCells = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  numCorners = 0
+ *         cdef int       *cellVertices = NULL
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateExodus(__pyx_v_ccomm, __pyx_v_cexoid, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_numCells = 0;
 
-  /* "PETSc/DMPlex.pyx":107
- *         cdef PetscInt  cexoid = asInt(exoid)
- *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
+  /* "PETSc/DMPlex.pyx":18
+ *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscInt  numCells = 0
+ *         cdef PetscInt  numCorners = 0             # <<<<<<<<<<<<<<
+ *         cdef int       *cellVertices = NULL
+ *         cdef PetscInt  numVertices = 0
+ */
+  __pyx_v_numCorners = 0;
+
+  /* "PETSc/DMPlex.pyx":19
+ *         cdef PetscInt  numCells = 0
+ *         cdef PetscInt  numCorners = 0
+ *         cdef int       *cellVertices = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  numVertices = 0
+ *         cdef PetscInt  spaceDim= 0
+ */
+  __pyx_v_cellVertices = NULL;
+
+  /* "PETSc/DMPlex.pyx":20
+ *         cdef PetscInt  numCorners = 0
+ *         cdef int       *cellVertices = NULL
+ *         cdef PetscInt  numVertices = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  spaceDim= 0
+ *         cdef double    *vertexCoords = NULL
+ */
+  __pyx_v_numVertices = 0;
+
+  /* "PETSc/DMPlex.pyx":21
+ *         cdef int       *cellVertices = NULL
+ *         cdef PetscInt  numVertices = 0
+ *         cdef PetscInt  spaceDim= 0             # <<<<<<<<<<<<<<
+ *         cdef double    *vertexCoords = NULL
+ *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY
+ */
+  __pyx_v_spaceDim = 0;
+
+  /* "PETSc/DMPlex.pyx":22
+ *         cdef PetscInt  numVertices = 0
+ *         cdef PetscInt  spaceDim= 0
+ *         cdef double    *vertexCoords = NULL             # <<<<<<<<<<<<<<
+ *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY
+ *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
+ */
+  __pyx_v_vertexCoords = NULL;
+
+  /* "PETSc/DMPlex.pyx":23
+ *         cdef PetscInt  spaceDim= 0
+ *         cdef double    *vertexCoords = NULL
+ *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY             # <<<<<<<<<<<<<<
+ *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
+ *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)
+ */
+  __pyx_v_npy_flags = ((NPY_ARRAY_ALIGNED | NPY_ARRAY_NOTSWAPPED) | NPY_ARRAY_CARRAY);
+
+  /* "PETSc/DMPlex.pyx":24
+ *         cdef double    *vertexCoords = NULL
+ *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY
+ *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)             # <<<<<<<<<<<<<<
+ *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)
+ *         if PyArray_NDIM(cells) != 2: raise ValueError(
+ */
+  __pyx_t_4 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_cells, NPY_INT, __pyx_v_npy_flags)); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF_SET(__pyx_v_cells, __pyx_t_4);
+  __pyx_t_4 = 0;
+
+  /* "PETSc/DMPlex.pyx":25
+ *         cdef int npy_flags = NPY_ARRAY_ALIGNED|NPY_ARRAY_NOTSWAPPED|NPY_ARRAY_CARRAY
+ *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
+ *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)             # <<<<<<<<<<<<<<
+ *         if PyArray_NDIM(cells) != 2: raise ValueError(
+ *                 ("cell indices must have two dimensions: "
+ */
+  __pyx_t_4 = ((PyObject *)PyArray_FROM_OTF(__pyx_v_coords, NPY_DOUBLE, __pyx_v_npy_flags)); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF_SET(__pyx_v_coords, __pyx_t_4);
+  __pyx_t_4 = 0;
+
+  /* "PETSc/DMPlex.pyx":26
+ *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
+ *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)
+ *         if PyArray_NDIM(cells) != 2: raise ValueError(             # <<<<<<<<<<<<<<
+ *                 ("cell indices must have two dimensions: "
+ *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )
+ */
+  if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 26, __pyx_L1_error)
+  __pyx_t_5 = ((PyArray_NDIM(((PyArrayObject *)__pyx_v_cells)) != 2) != 0);
+  if (__pyx_t_5) {
+
+    /* "PETSc/DMPlex.pyx":28
+ *         if PyArray_NDIM(cells) != 2: raise ValueError(
+ *                 ("cell indices must have two dimensions: "
+ *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )             # <<<<<<<<<<<<<<
+ *         if PyArray_NDIM(coords) != 2: raise ValueError(
+ *                 ("coords vertices must have two dimensions: "
+ */
+    if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 28, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_From_int(PyArray_NDIM(((PyArrayObject *)__pyx_v_cells))); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 28, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_cell_indices_must_have_two_dimen, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 28, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+    /* "PETSc/DMPlex.pyx":26
+ *         cells  = PyArray_FROM_OTF(cells,  NPY_INT,    npy_flags)
+ *         coords = PyArray_FROM_OTF(coords, NPY_DOUBLE, npy_flags)
+ *         if PyArray_NDIM(cells) != 2: raise ValueError(             # <<<<<<<<<<<<<<
+ *                 ("cell indices must have two dimensions: "
+ *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )
+ */
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 26, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
+    __pyx_t_6 = 0;
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 26, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(42, 26, __pyx_L1_error)
+  }
+
+  /* "PETSc/DMPlex.pyx":29
+ *                 ("cell indices must have two dimensions: "
+ *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )
+ *         if PyArray_NDIM(coords) != 2: raise ValueError(             # <<<<<<<<<<<<<<
+ *                 ("coords vertices must have two dimensions: "
+ *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )
+ */
+  if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 29, __pyx_L1_error)
+  __pyx_t_5 = ((PyArray_NDIM(((PyArrayObject *)__pyx_v_coords)) != 2) != 0);
+  if (__pyx_t_5) {
+
+    /* "PETSc/DMPlex.pyx":31
+ *         if PyArray_NDIM(coords) != 2: raise ValueError(
+ *                 ("coords vertices must have two dimensions: "
+ *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )             # <<<<<<<<<<<<<<
+ *         numCells     = <PetscInt> PyArray_DIM(cells,  0)
+ *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)
+ */
+    if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 31, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyInt_From_int(PyArray_NDIM(((PyArrayObject *)__pyx_v_coords))); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 31, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_coords_vertices_must_have_two_di, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 31, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+
+    /* "PETSc/DMPlex.pyx":29
+ *                 ("cell indices must have two dimensions: "
+ *                  "cells.ndim=%d") % (PyArray_NDIM(cells)) )
+ *         if PyArray_NDIM(coords) != 2: raise ValueError(             # <<<<<<<<<<<<<<
+ *                 ("coords vertices must have two dimensions: "
+ *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )
+ */
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 29, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
+    __pyx_t_4 = 0;
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 29, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __PYX_ERR(42, 29, __pyx_L1_error)
+  }
+
+  /* "PETSc/DMPlex.pyx":32
+ *                 ("coords vertices must have two dimensions: "
+ *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )
+ *         numCells     = <PetscInt> PyArray_DIM(cells,  0)             # <<<<<<<<<<<<<<
+ *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)
+ *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)
+ */
+  if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 32, __pyx_L1_error)
+  __pyx_v_numCells = ((PetscInt)PyArray_DIM(((PyArrayObject *)__pyx_v_cells), 0));
+
+  /* "PETSc/DMPlex.pyx":33
+ *                  "coords.ndim=%d") % (PyArray_NDIM(coords)) )
+ *         numCells     = <PetscInt> PyArray_DIM(cells,  0)
+ *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)             # <<<<<<<<<<<<<<
+ *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)
+ *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)
+ */
+  if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 33, __pyx_L1_error)
+  __pyx_v_numCorners = ((PetscInt)PyArray_DIM(((PyArrayObject *)__pyx_v_cells), 1));
+
+  /* "PETSc/DMPlex.pyx":34
+ *         numCells     = <PetscInt> PyArray_DIM(cells,  0)
+ *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)
+ *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)             # <<<<<<<<<<<<<<
+ *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)
+ *         cellVertices = <int*>     PyArray_DATA(cells)
+ */
+  if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 34, __pyx_L1_error)
+  __pyx_v_numVertices = ((PetscInt)PyArray_DIM(((PyArrayObject *)__pyx_v_coords), 0));
+
+  /* "PETSc/DMPlex.pyx":35
+ *         numCorners   = <PetscInt> PyArray_DIM(cells,  1)
+ *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)
+ *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)             # <<<<<<<<<<<<<<
+ *         cellVertices = <int*>     PyArray_DATA(cells)
+ *         vertexCoords = <double*>  PyArray_DATA(coords)
+ */
+  if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 35, __pyx_L1_error)
+  __pyx_v_spaceDim = ((PetscInt)PyArray_DIM(((PyArrayObject *)__pyx_v_coords), 1));
+
+  /* "PETSc/DMPlex.pyx":36
+ *         numVertices  = <PetscInt> PyArray_DIM(coords, 0)
+ *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)
+ *         cellVertices = <int*>     PyArray_DATA(cells)             # <<<<<<<<<<<<<<
+ *         vertexCoords = <double*>  PyArray_DATA(coords)
+ *         CHKERR( DMPlexCreateFromCellList(ccomm, cdim, numCells, numVertices,
+ */
+  if (!(likely(((__pyx_v_cells) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_cells, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 36, __pyx_L1_error)
+  __pyx_v_cellVertices = ((int *)PyArray_DATA(((PyArrayObject *)__pyx_v_cells)));
+
+  /* "PETSc/DMPlex.pyx":37
+ *         spaceDim     = <PetscInt> PyArray_DIM(coords, 1)
+ *         cellVertices = <int*>     PyArray_DATA(cells)
+ *         vertexCoords = <double*>  PyArray_DATA(coords)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateFromCellList(ccomm, cdim, numCells, numVertices,
+ *                                          numCorners, interp, cellVertices,
+ */
+  if (!(likely(((__pyx_v_coords) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coords, __pyx_ptype_8petsc4py_5PETSc_ndarray))))) __PYX_ERR(42, 37, __pyx_L1_error)
+  __pyx_v_vertexCoords = ((double *)PyArray_DATA(((PyArrayObject *)__pyx_v_coords)));
+
+  /* "PETSc/DMPlex.pyx":38
+ *         cellVertices = <int*>     PyArray_DATA(cells)
+ *         vertexCoords = <double*>  PyArray_DATA(coords)
+ *         CHKERR( DMPlexCreateFromCellList(ccomm, cdim, numCells, numVertices,             # <<<<<<<<<<<<<<
+ *                                          numCorners, interp, cellVertices,
+ *                                          spaceDim, vertexCoords, &newdm) )
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateFromCellList(__pyx_v_ccomm, __pyx_v_cdim, __pyx_v_numCells, __pyx_v_numVertices, __pyx_v_numCorners, __pyx_v_interp, __pyx_v_cellVertices, __pyx_v_spaceDim, __pyx_v_vertexCoords, (&__pyx_v_newdm))); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(42, 38, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":41
+ *                                          numCorners, interp, cellVertices,
+ *                                          spaceDim, vertexCoords, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
  *         return self
  * 
@@ -211278,63 +214453,60 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_o
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
   __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":108
- *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
+  /* "PETSc/DMPlex.pyx":42
+ *                                          spaceDim, vertexCoords, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):
+ *     def createBoxMesh(self, dim, interpolate=True, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":100
+  /* "PETSc/DMPlex.pyx":12
  *         return self
  * 
- *     def createExodus(self, exoid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
+ *     def createFromCellList(self, dim, cells, coords, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createExodus", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createFromCellList", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
+  __Pyx_XDECREF(__pyx_v_cells);
+  __Pyx_XDECREF(__pyx_v_coords);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":110
+/* "PETSc/DMPlex.pyx":44
  *         return self
  * 
- *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *     def createBoxMesh(self, dim, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscBool interp = interpolate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_16createGmsh[] = "DMPlex.createGmsh(self, Viewer viewer, interpolate=True, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscViewerObject *__pyx_v_viewer = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_5createBoxMesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_4createBoxMesh[] = "DMPlex.createBoxMesh(self, dim, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_5createBoxMesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_dim = 0;
   PyObject *__pyx_v_interpolate = 0;
   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("createGmsh (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createBoxMesh (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dim,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_True);
     values[2] = ((PyObject *)Py_None);
@@ -211351,7 +214523,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dim)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -211365,7 +214537,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGmsh") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBoxMesh") < 0)) __PYX_ERR(42, 44, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -211376,121 +214548,89 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+    __pyx_v_dim = values[0];
     __pyx_v_interpolate = values[1];
     __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createGmsh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createBoxMesh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 44, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createGmsh", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createBoxMesh", __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[42]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_viewer, __pyx_v_interpolate, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_dim, __pyx_v_interpolate, __pyx_v_comm);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
-  MPI_Comm __pyx_v_ccomm;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+  PetscInt __pyx_v_cdim;
   PetscBool __pyx_v_interp;
+  MPI_Comm __pyx_v_ccomm;
   DM __pyx_v_newdm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  MPI_Comm __pyx_t_4;
-  PetscBool __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createGmsh", 0);
+  PetscInt __pyx_t_1;
+  PetscBool __pyx_t_2;
+  MPI_Comm __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("createBoxMesh", 0);
 
-  /* "PETSc/DMPlex.pyx":111
+  /* "PETSc/DMPlex.pyx":45
  * 
- *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *     def createBoxMesh(self, dim, interpolate=True, comm=None):
+ *         cdef PetscInt  cdim = asInt(dim)             # <<<<<<<<<<<<<<
  *         cdef PetscBool interp = interpolate
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __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_filename = __pyx_f[42]; __pyx_lineno = 111; __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[42]; __pyx_lineno = 111; __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_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 45, __pyx_L1_error)
+  __pyx_v_cdim = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":112
- *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
- *         cdef PetscBool interp = interpolate
+  /* "PETSc/DMPlex.pyx":46
+ *     def createBoxMesh(self, dim, interpolate=True, comm=None):
+ *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscDM   newdm = NULL
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_4;
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 46, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":113
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":47
+ *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscBool interp = interpolate
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
  */
-  __pyx_t_5 = ((PetscBool)PyInt_AsLong(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_interp = __pyx_t_5;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 47, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_3;
 
-  /* "PETSc/DMPlex.pyx":114
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+  /* "PETSc/DMPlex.pyx":48
  *         cdef PetscBool interp = interpolate
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":115
- *         cdef PetscBool interp = interpolate
+  /* "PETSc/DMPlex.pyx":49
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateGmsh(__pyx_v_ccomm, __pyx_v_viewer->vwr, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateBoxMesh(__pyx_v_ccomm, __pyx_v_cdim, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 49, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":116
+  /* "PETSc/DMPlex.pyx":50
  *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
  *         return self
  * 
@@ -211498,67 +214638,64 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
   __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":117
- *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
+  /* "PETSc/DMPlex.pyx":51
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createCohesiveSubmesh(self, hasLagrange, value):
+ *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":110
+  /* "PETSc/DMPlex.pyx":44
  *         return self
  * 
- *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
- *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *     def createBoxMesh(self, dim, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscBool interp = interpolate
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createGmsh", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createBoxMesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":119
+/* "PETSc/DMPlex.pyx":53
  *         return self
  * 
- *     def createCohesiveSubmesh(self, hasLagrange, value):             # <<<<<<<<<<<<<<
- *         cdef PetscBool flag = hasLagrange
- *         cdef PetscInt cvalue = asInt(value)
+ *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt dim = 0, *icells = NULL
+ *         cdef object tmp = iarray_i(numcells, &dim, &icells)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh[] = "DMPlex.createCohesiveSubmesh(self, hasLagrange, value)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_hasLagrange = 0;
-  PyObject *__pyx_v_value = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh[] = "DMPlex.createHexBoxMesh(self, numcells, boundary_type=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_numcells = 0;
+  PyObject *__pyx_v_boundary_type = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createCohesiveSubmesh (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createHexBoxMesh (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_hasLagrange,&__pyx_n_s_value,0};
-    PyObject* values[2] = {0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_numcells,&__pyx_n_s_boundary_type,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    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;
@@ -211567,259 +214704,245 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh(PyObj
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_hasLagrange)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numcells)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("createCohesiveSubmesh", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_boundary_type);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCohesiveSubmesh") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createHexBoxMesh") < 0)) __PYX_ERR(42, 53, __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);
+      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_hasLagrange = values[0];
-    __pyx_v_value = values[1];
+    __pyx_v_numcells = values[0];
+    __pyx_v_boundary_type = values[1];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createCohesiveSubmesh", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createHexBoxMesh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 53, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCohesiveSubmesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createHexBoxMesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_hasLagrange, __pyx_v_value);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_numcells, __pyx_v_boundary_type, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_hasLagrange, PyObject *__pyx_v_value) {
-  PetscBool __pyx_v_flag;
-  PetscInt __pyx_v_cvalue;
-  struct PyPetscDMObject *__pyx_v_subdm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_numcells, PyObject *__pyx_v_boundary_type, PyObject *__pyx_v_comm) {
+  PetscInt __pyx_v_dim;
+  PetscInt *__pyx_v_icells;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  DMBoundaryType __pyx_v_btx;
+  DMBoundaryType __pyx_v_bty;
+  DMBoundaryType __pyx_v_btz;
+  MPI_Comm __pyx_v_ccomm;
+  DM __pyx_v_newdm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
-  PetscInt __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("createCohesiveSubmesh", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PetscInt __pyx_t_4;
+  MPI_Comm __pyx_t_5;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("createHexBoxMesh", 0);
 
-  /* "PETSc/DMPlex.pyx":120
+  /* "PETSc/DMPlex.pyx":54
  * 
- *     def createCohesiveSubmesh(self, hasLagrange, value):
- *         cdef PetscBool flag = hasLagrange             # <<<<<<<<<<<<<<
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef DM subdm = DMPlex()
+ *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):
+ *         cdef PetscInt dim = 0, *icells = NULL             # <<<<<<<<<<<<<<
+ *         cdef object tmp = iarray_i(numcells, &dim, &icells)
+ *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_hasLagrange)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_flag = __pyx_t_1;
+  __pyx_v_dim = 0;
+  __pyx_v_icells = NULL;
 
-  /* "PETSc/DMPlex.pyx":121
- *     def createCohesiveSubmesh(self, hasLagrange, value):
- *         cdef PetscBool flag = hasLagrange
- *         cdef PetscInt cvalue = asInt(value)             # <<<<<<<<<<<<<<
- *         cdef DM subdm = DMPlex()
- *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )
+  /* "PETSc/DMPlex.pyx":55
+ *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):
+ *         cdef PetscInt dim = 0, *icells = NULL
+ *         cdef object tmp = iarray_i(numcells, &dim, &icells)             # <<<<<<<<<<<<<<
+ *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
+ *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_2 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cvalue = __pyx_t_2;
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_numcells, (&__pyx_v_dim), (&__pyx_v_icells))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_tmp = __pyx_t_1;
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":122
- *         cdef PetscBool flag = hasLagrange
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef DM subdm = DMPlex()             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )
- *         return subdm
+  /* "PETSc/DMPlex.pyx":56
+ *         cdef PetscInt dim = 0, *icells = NULL
+ *         cdef object tmp = iarray_i(numcells, &dim, &icells)
+ *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
+ *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
+ *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
  */
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMPlex)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_subdm = ((struct PyPetscDMObject *)__pyx_t_3);
-  __pyx_t_3 = 0;
+  __pyx_v_btx = DM_BOUNDARY_NONE;
 
-  /* "PETSc/DMPlex.pyx":123
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef DM subdm = DMPlex()
- *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )             # <<<<<<<<<<<<<<
- *         return subdm
- * 
+  /* "PETSc/DMPlex.pyx":57
+ *         cdef object tmp = iarray_i(numcells, &dim, &icells)
+ *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
+ *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
+ *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
+ *         if boundary_type is not None:
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCohesiveSubmesh(__pyx_v_self->__pyx_base.dm, __pyx_v_flag, NULL, __pyx_v_cvalue, (&__pyx_v_subdm->dm))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_bty = DM_BOUNDARY_NONE;
 
-  /* "PETSc/DMPlex.pyx":124
- *         cdef DM subdm = DMPlex()
- *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )
- *         return subdm             # <<<<<<<<<<<<<<
- * 
- *     def getChart(self):
+  /* "PETSc/DMPlex.pyx":58
+ *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
+ *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
+ *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
+ *         if boundary_type is not None:
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_subdm));
-  __pyx_r = ((PyObject *)__pyx_v_subdm);
-  goto __pyx_L0;
+  __pyx_v_btz = DM_BOUNDARY_NONE;
 
-  /* "PETSc/DMPlex.pyx":119
- *         return self
- * 
- *     def createCohesiveSubmesh(self, hasLagrange, value):             # <<<<<<<<<<<<<<
- *         cdef PetscBool flag = hasLagrange
- *         cdef PetscInt cvalue = asInt(value)
+  /* "PETSc/DMPlex.pyx":59
+ *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
+ *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
+ *         if boundary_type is not None:             # <<<<<<<<<<<<<<
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
+  __pyx_t_2 = (__pyx_v_boundary_type != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCohesiveSubmesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_subdm);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":126
- *         return subdm
- * 
- *     def getChart(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+    /* "PETSc/DMPlex.pyx":60
+ *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
+ *         if boundary_type is not None:
+ *             asBoundary(boundary_type, &btx, &bty, &btz)             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM  newdm = NULL
  */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundary(__pyx_v_boundary_type, (&__pyx_v_btx), (&__pyx_v_bty), (&__pyx_v_btz)); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(42, 60, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_21getChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_20getChart[] = "DMPlex.getChart(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_21getChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getChart (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getChart", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getChart", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+    /* "PETSc/DMPlex.pyx":59
+ *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
+ *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
+ *         if boundary_type is not None:             # <<<<<<<<<<<<<<
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ */
+  }
 
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "PETSc/DMPlex.pyx":61
+ *         if boundary_type is not None:
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscDM  newdm = NULL
+ *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
+ */
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 61, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_5;
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
-  PetscInt __pyx_v_pStart;
-  PetscInt __pyx_v_pEnd;
-  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("getChart", 0);
+  /* "PETSc/DMPlex.pyx":62
+ *             asBoundary(boundary_type, &btx, &bty, &btz)
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM  newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ */
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":127
- * 
- *     def getChart(self):
- *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         return toInt(pStart), toInt(pEnd)
+  /* "PETSc/DMPlex.pyx":63
+ *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscDM  newdm = NULL
+ *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self
  */
-  __pyx_v_pStart = 0;
-  __pyx_v_pEnd = 0;
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateHexBoxMesh(__pyx_v_ccomm, __pyx_v_dim, __pyx_v_icells, __pyx_v_btx, __pyx_v_bty, __pyx_v_btz, (&__pyx_v_newdm))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(42, 63, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":128
- *     def getChart(self):
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
- *         return toInt(pStart), toInt(pEnd)
+  /* "PETSc/DMPlex.pyx":64
+ *         cdef PetscDM  newdm = NULL
+ *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
+  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":129
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         return toInt(pStart), toInt(pEnd)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":65
+ *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setChart(self, pStart, pEnd):
+ *     def createCGNS(self, cgid, interpolate=True, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pStart); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pEnd); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 129; __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[42]; __pyx_lineno = 129; __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;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":126
- *         return subdm
+  /* "PETSc/DMPlex.pyx":53
+ *         return self
  * 
- *     def getChart(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt dim = 0, *icells = NULL
+ *         cdef object tmp = iarray_i(numcells, &dim, &icells)
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getChart", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createHexBoxMesh", __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;
 }
 
-/* "PETSc/DMPlex.pyx":131
- *         return toInt(pStart), toInt(pEnd)
+/* "PETSc/DMPlex.pyx":67
+ *         return self
  * 
- *     def setChart(self, pStart, pEnd):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cStart = asInt(pStart)
- *         cdef PetscInt cEnd   = asInt(pEnd)
+ *     def createCGNS(self, cgid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_22setChart[] = "DMPlex.setChart(self, pStart, pEnd)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_pStart = 0;
-  PyObject *__pyx_v_pEnd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_8createCGNS[] = "DMPlex.createCGNS(self, cgid, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_cgid = 0;
+  PyObject *__pyx_v_interpolate = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setChart (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createCGNS (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pStart,&__pyx_n_s_pEnd,0};
-    PyObject* values[2] = {0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cgid,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    values[1] = ((PyObject *)Py_True);
+    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;
@@ -211828,278 +214951,144 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart(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_pStart)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cgid)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pEnd)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setChart") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCGNS") < 0)) __PYX_ERR(42, 67, __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_pStart = values[0];
-    __pyx_v_pEnd = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setChart", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_pStart, __pyx_v_pEnd);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_pStart, PyObject *__pyx_v_pEnd) {
-  PetscInt __pyx_v_cStart;
-  PetscInt __pyx_v_cEnd;
-  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("setChart", 0);
-
-  /* "PETSc/DMPlex.pyx":132
- * 
- *     def setChart(self, pStart, pEnd):
- *         cdef PetscInt cStart = asInt(pStart)             # <<<<<<<<<<<<<<
- *         cdef PetscInt cEnd   = asInt(pEnd)
- *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pStart); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cStart = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":133
- *     def setChart(self, pStart, pEnd):
- *         cdef PetscInt cStart = asInt(pStart)
- *         cdef PetscInt cEnd   = asInt(pEnd)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
- * 
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pEnd); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cEnd = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":134
- *         cdef PetscInt cStart = asInt(pStart)
- *         cdef PetscInt cEnd   = asInt(pEnd)
- *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )             # <<<<<<<<<<<<<<
- * 
- *     def getConeSize(self, p):
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetChart(__pyx_v_self->__pyx_base.dm, __pyx_v_cStart, __pyx_v_cEnd)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":131
- *         return toInt(pStart), toInt(pEnd)
- * 
- *     def setChart(self, pStart, pEnd):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cStart = asInt(pStart)
- *         cdef PetscInt cEnd   = asInt(pEnd)
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setChart", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":136
- *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
- * 
- *     def getConeSize(self, p):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25getConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_24getConeSize[] = "DMPlex.getConeSize(self, p)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25getConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_p = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConeSize (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,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) {
+      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;
+        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_p)) != 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, "getConeSize") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 136; __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_p = values[0];
+    __pyx_v_cgid = values[0];
+    __pyx_v_interpolate = values[1];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getConeSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createCGNS", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 67, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getConeSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCGNS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_cgid, __pyx_v_interpolate, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
-  PetscInt __pyx_v_cp;
-  PetscInt __pyx_v_pStart;
-  PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_csize;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cgid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  PetscBool __pyx_v_interp;
+  DM __pyx_v_newdm;
+  PetscInt __pyx_v_ccgid;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  MPI_Comm __pyx_t_1;
+  PetscBool __pyx_t_2;
+  PetscInt __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("getConeSize", 0);
+  __Pyx_RefNannySetupContext("createCGNS", 0);
 
-  /* "PETSc/DMPlex.pyx":137
+  /* "PETSc/DMPlex.pyx":68
  * 
- *     def getConeSize(self, p):
- *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *     def createCGNS(self, cgid, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cp = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 68, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":138
- *     def getConeSize(self, p):
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
+  /* "PETSc/DMPlex.pyx":69
+ *     def createCGNS(self, cgid, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
+ *         cdef PetscDM   newdm = NULL
+ *         cdef PetscInt  ccgid = asInt(cgid)
  */
-  __pyx_v_pStart = 0;
-  __pyx_v_pEnd = 0;
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 69, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":139
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt csize = 0
+  /* "PETSc/DMPlex.pyx":70
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ccgid = asInt(cgid)
+ *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":140
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt csize = 0
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )
+  /* "PETSc/DMPlex.pyx":71
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
+ *         cdef PetscInt  ccgid = asInt(cgid)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
-    if (__pyx_t_4) {
-    } else {
-      __pyx_t_3 = __pyx_t_4;
-      goto __pyx_L3_bool_binop_done;
-    }
-    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
-    __pyx_t_3 = __pyx_t_4;
-    __pyx_L3_bool_binop_done:;
-    if (unlikely(!__pyx_t_3)) {
-      PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_cgid); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(42, 71, __pyx_L1_error)
+  __pyx_v_ccgid = __pyx_t_3;
 
-  /* "PETSc/DMPlex.pyx":141
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt csize = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )
- *         return toInt(csize)
+  /* "PETSc/DMPlex.pyx":72
+ *         cdef PetscDM   newdm = NULL
+ *         cdef PetscInt  ccgid = asInt(cgid)
+ *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self
  */
-  __pyx_v_csize = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCGNS(__pyx_v_ccomm, __pyx_v_ccgid, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 72, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":142
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt csize = 0
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )             # <<<<<<<<<<<<<<
- *         return toInt(csize)
+  /* "PETSc/DMPlex.pyx":73
+ *         cdef PetscInt  ccgid = asInt(cgid)
+ *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_csize))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
+  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":143
- *         cdef PetscInt csize = 0
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )
- *         return toInt(csize)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":74
+ *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setConeSize(self, p, size):
+ *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_csize); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 143; __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;
 
-  /* "PETSc/DMPlex.pyx":136
- *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
+  /* "PETSc/DMPlex.pyx":67
+ *         return self
  * 
- *     def getConeSize(self, p):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def createCGNS(self, cgid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getConeSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCGNS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -212107,33 +215096,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":145
- *         return toInt(csize)
+/* "PETSc/DMPlex.pyx":76
+ *         return self
  * 
- *     def setConeSize(self, p, size):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_26setConeSize[] = "DMPlex.setConeSize(self, p, size)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_p = 0;
-  PyObject *__pyx_v_size = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile[] = "DMPlex.createCGNSFromFile(self, filename, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_filename = 0;
+  PyObject *__pyx_v_interpolate = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setConeSize (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createCGNSFromFile (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_size,0};
-    PyObject* values[2] = {0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    values[1] = ((PyObject *)Py_True);
+    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;
@@ -212142,176 +215132,194 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filename)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setConeSize", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConeSize") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCGNSFromFile") < 0)) __PYX_ERR(42, 76, __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);
+      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_p = values[0];
-    __pyx_v_size = values[1];
+    __pyx_v_filename = values[0];
+    __pyx_v_interpolate = values[1];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConeSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createCGNSFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 76, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setConeSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCGNSFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_size);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_filename, __pyx_v_interpolate, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
-  PetscInt __pyx_v_cp;
-  PetscInt __pyx_v_pStart;
-  PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_csize;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  PetscBool __pyx_v_interp;
+  DM __pyx_v_newdm;
+  const char *__pyx_v_cfile;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  MPI_Comm __pyx_t_1;
+  PetscBool __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setConeSize", 0);
+  __Pyx_RefNannySetupContext("createCGNSFromFile", 0);
+  __Pyx_INCREF(__pyx_v_filename);
 
-  /* "PETSc/DMPlex.pyx":146
+  /* "PETSc/DMPlex.pyx":77
  * 
- *     def setConeSize(self, p, size):
- *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cp = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 77, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":147
- *     def setConeSize(self, p, size):
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
+  /* "PETSc/DMPlex.pyx":78
+ *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
+ *         cdef PetscDM   newdm = NULL
+ *         cdef const_char *cfile = NULL
  */
-  __pyx_v_pStart = 0;
-  __pyx_v_pEnd = 0;
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 78, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":148
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt csize = asInt(size)
+  /* "PETSc/DMPlex.pyx":79
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
+ *         cdef const_char *cfile = NULL
+ *         filename = str2bytes(filename, &cfile)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":149
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt csize = asInt(size)
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
+  /* "PETSc/DMPlex.pyx":80
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
+ *         cdef const_char *cfile = NULL             # <<<<<<<<<<<<<<
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
-    if (__pyx_t_4) {
-    } else {
-      __pyx_t_3 = __pyx_t_4;
-      goto __pyx_L3_bool_binop_done;
-    }
-    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
-    __pyx_t_3 = __pyx_t_4;
-    __pyx_L3_bool_binop_done:;
-    if (unlikely(!__pyx_t_3)) {
-      PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
+  __pyx_v_cfile = NULL;
 
-  /* "PETSc/DMPlex.pyx":150
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt csize = asInt(size)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
+  /* "PETSc/DMPlex.pyx":81
+ *         cdef PetscDM   newdm = NULL
+ *         cdef const_char *cfile = NULL
+ *         filename = str2bytes(filename, &cfile)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_filename, (&__pyx_v_cfile)); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/DMPlex.pyx":82
+ *         cdef const_char *cfile = NULL
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCGNSFromFile(__pyx_v_ccomm, __pyx_v_cfile, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 82, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":83
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_csize = __pyx_t_1;
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
+  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":151
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt csize = asInt(size)
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":84
+ *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def getCone(self, p):
+ *     def createExodusFromFile(self, filename, interpolate=True, comm=None):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_csize)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 151; __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;
 
-  /* "PETSc/DMPlex.pyx":145
- *         return toInt(csize)
+  /* "PETSc/DMPlex.pyx":76
+ *         return self
  * 
- *     def setConeSize(self, p, size):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setConeSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCGNSFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_filename);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":153
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
+/* "PETSc/DMPlex.pyx":86
+ *         return self
  * 
- *     def getCone(self, p):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def createExodusFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_28getCone[] = "DMPlex.getCone(self, p)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_p = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile[] = "DMPlex.createExodusFromFile(self, filename, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_filename = 0;
+  PyObject *__pyx_v_interpolate = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCone (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createExodusFromFile (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    values[1] = ((PyObject *)Py_True);
+    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;
@@ -212319,199 +215327,187 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone(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_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filename)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCone") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createExodusFromFile") < 0)) __PYX_ERR(42, 86, __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);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_p = values[0];
+    __pyx_v_filename = values[0];
+    __pyx_v_interpolate = values[1];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getCone", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createExodusFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 86, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createExodusFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_filename, __pyx_v_interpolate, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
-  PetscInt __pyx_v_cp;
-  PetscInt __pyx_v_pStart;
-  PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_ncone;
-  const PetscInt *__pyx_v_icone;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  PetscBool __pyx_v_interp;
+  DM __pyx_v_newdm;
+  const char *__pyx_v_cfile;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  MPI_Comm __pyx_t_1;
+  PetscBool __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getCone", 0);
+  __Pyx_RefNannySetupContext("createExodusFromFile", 0);
+  __Pyx_INCREF(__pyx_v_filename);
 
-  /* "PETSc/DMPlex.pyx":154
+  /* "PETSc/DMPlex.pyx":87
  * 
- *     def getCone(self, p):
- *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cp = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":155
- *     def getCone(self, p):
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
+ *     def createExodusFromFile(self, filename, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
  */
-  __pyx_v_pStart = 0;
-  __pyx_v_pEnd = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 87, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":156
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        ncone = 0
+  /* "PETSc/DMPlex.pyx":88
+ *     def createExodusFromFile(self, filename, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
+ *         cdef PetscDM   newdm = NULL
+ *         cdef const_char *cfile = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 88, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":157
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt        ncone = 0
- *         cdef const_PetscInt *icone = NULL
+  /* "PETSc/DMPlex.pyx":89
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
+ *         cdef const_char *cfile = NULL
+ *         filename = str2bytes(filename, &cfile)
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
-    if (__pyx_t_4) {
-    } else {
-      __pyx_t_3 = __pyx_t_4;
-      goto __pyx_L3_bool_binop_done;
-    }
-    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
-    __pyx_t_3 = __pyx_t_4;
-    __pyx_L3_bool_binop_done:;
-    if (unlikely(!__pyx_t_3)) {
-      PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":158
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        ncone = 0             # <<<<<<<<<<<<<<
- *         cdef const_PetscInt *icone = NULL
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
+  /* "PETSc/DMPlex.pyx":90
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
+ *         cdef const_char *cfile = NULL             # <<<<<<<<<<<<<<
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
  */
-  __pyx_v_ncone = 0;
+  __pyx_v_cfile = NULL;
 
-  /* "PETSc/DMPlex.pyx":159
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        ncone = 0
- *         cdef const_PetscInt *icone = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
- *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )
+  /* "PETSc/DMPlex.pyx":91
+ *         cdef PetscDM   newdm = NULL
+ *         cdef const_char *cfile = NULL
+ *         filename = str2bytes(filename, &cfile)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
  */
-  __pyx_v_icone = NULL;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_filename, (&__pyx_v_cfile)); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "PETSc/DMPlex.pyx":160
- *         cdef PetscInt        ncone = 0
- *         cdef const_PetscInt *icone = NULL
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )
- *         return array_i(ncone, icone)
+  /* "PETSc/DMPlex.pyx":92
+ *         cdef const_char *cfile = NULL
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_ncone))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateExodusFromFile(__pyx_v_ccomm, __pyx_v_cfile, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 92, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":161
- *         cdef const_PetscInt *icone = NULL
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
- *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )             # <<<<<<<<<<<<<<
- *         return array_i(ncone, icone)
+  /* "PETSc/DMPlex.pyx":93
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetCone(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_icone))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
+  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":162
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
- *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )
- *         return array_i(ncone, icone)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":94
+ *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setCone(self, p, cone, orientation=None):
+ *     def createExodus(self, exoid, interpolate=True, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_ncone, __pyx_v_icone)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 162; __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;
 
-  /* "PETSc/DMPlex.pyx":153
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
+  /* "PETSc/DMPlex.pyx":86
+ *         return self
  * 
- *     def getCone(self, p):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def createExodusFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createExodusFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_filename);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":164
- *         return array_i(ncone, icone)
+/* "PETSc/DMPlex.pyx":96
+ *         return self
  * 
- *     def setCone(self, p, cone, orientation=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def createExodus(self, exoid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_30setCone[] = "DMPlex.setCone(self, p, cone, orientation=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_p = 0;
-  PyObject *__pyx_v_cone = 0;
-  PyObject *__pyx_v_orientation = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_14createExodus[] = "DMPlex.createExodus(self, exoid, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_exoid = 0;
+  PyObject *__pyx_v_interpolate = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setCone (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createExodus (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_cone,&__pyx_n_s_orientation,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_exoid,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
     PyObject* values[3] = {0,0,0};
+    values[1] = ((PyObject *)Py_True);
     values[2] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -212526,290 +215522,174 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(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_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exoid)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cone)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setCone", 0, 2, 3, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
+          if (value) { values[1] = value; kw_args--; }
         }
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_orientation);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCone") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createExodus") < 0)) __PYX_ERR(42, 96, __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);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_p = values[0];
-    __pyx_v_cone = values[1];
-    __pyx_v_orientation = values[2];
+    __pyx_v_exoid = values[0];
+    __pyx_v_interpolate = values[1];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCone", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createExodus", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 96, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createExodus", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_cone, __pyx_v_orientation);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_exoid, __pyx_v_interpolate, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_cone, PyObject *__pyx_v_orientation) {
-  PetscInt __pyx_v_cp;
-  PetscInt __pyx_v_pStart;
-  PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_ncone;
-  PetscInt *__pyx_v_icone;
-  PetscInt __pyx_v_norie;
-  PetscInt *__pyx_v_iorie;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_exoid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  PetscBool __pyx_v_interp;
+  DM __pyx_v_newdm;
+  PetscInt __pyx_v_cexoid;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  MPI_Comm __pyx_t_1;
+  PetscBool __pyx_t_2;
+  PetscInt __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("setCone", 0);
-  __Pyx_INCREF(__pyx_v_cone);
-  __Pyx_INCREF(__pyx_v_orientation);
+  __Pyx_RefNannySetupContext("createExodus", 0);
 
-  /* "PETSc/DMPlex.pyx":165
+  /* "PETSc/DMPlex.pyx":97
  * 
- *     def setCone(self, p, cone, orientation=None):
- *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cp = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":166
- *     def setCone(self, p, cone, orientation=None):
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
- */
-  __pyx_v_pStart = 0;
-  __pyx_v_pEnd = 0;
-
-  /* "PETSc/DMPlex.pyx":167
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
- *         assert cp>=pStart and cp<pEnd
- *         #
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":168
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         #
- *         cdef PetscInt  ncone = 0
- */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
-    if (__pyx_t_4) {
-    } else {
-      __pyx_t_3 = __pyx_t_4;
-      goto __pyx_L3_bool_binop_done;
-    }
-    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
-    __pyx_t_3 = __pyx_t_4;
-    __pyx_L3_bool_binop_done:;
-    if (unlikely(!__pyx_t_3)) {
-      PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
-
-  /* "PETSc/DMPlex.pyx":170
- *         assert cp>=pStart and cp<pEnd
- *         #
- *         cdef PetscInt  ncone = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt *icone = NULL
- *         cone = iarray_i(cone, &ncone, &icone)
- */
-  __pyx_v_ncone = 0;
-
-  /* "PETSc/DMPlex.pyx":171
- *         #
- *         cdef PetscInt  ncone = 0
- *         cdef PetscInt *icone = NULL             # <<<<<<<<<<<<<<
- *         cone = iarray_i(cone, &ncone, &icone)
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, ncone) )
- */
-  __pyx_v_icone = NULL;
-
-  /* "PETSc/DMPlex.pyx":172
- *         cdef PetscInt  ncone = 0
- *         cdef PetscInt *icone = NULL
- *         cone = iarray_i(cone, &ncone, &icone)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, ncone) )
- *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )
- */
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_cone, (&__pyx_v_ncone), (&__pyx_v_icone))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF_SET(__pyx_v_cone, __pyx_t_5);
-  __pyx_t_5 = 0;
-
-  /* "PETSc/DMPlex.pyx":173
- *         cdef PetscInt *icone = NULL
- *         cone = iarray_i(cone, &ncone, &icone)
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, ncone) )             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )
- *         #
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_ncone)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":174
- *         cone = iarray_i(cone, &ncone, &icone)
- *         CHKERR( DMPlexSetConeSize(self.dm, cp, ncone) )
- *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )             # <<<<<<<<<<<<<<
- *         #
- *         cdef PetscInt  norie = 0
+ *     def createExodus(self, exoid, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetCone(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_icone)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 97, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":176
- *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )
- *         #
- *         cdef PetscInt  norie = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt *iorie = NULL
- *         if orientation is not None:
+  /* "PETSc/DMPlex.pyx":98
+ *     def createExodus(self, exoid, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
+ *         cdef PetscDM   newdm = NULL
+ *         cdef PetscInt  cexoid = asInt(exoid)
  */
-  __pyx_v_norie = 0;
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 98, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":177
- *         #
- *         cdef PetscInt  norie = 0
- *         cdef PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
- *         if orientation is not None:
- *             orientation = iarray_i(orientation, &norie, &iorie)
+  /* "PETSc/DMPlex.pyx":99
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  cexoid = asInt(exoid)
+ *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
  */
-  __pyx_v_iorie = NULL;
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":178
- *         cdef PetscInt  norie = 0
- *         cdef PetscInt *iorie = NULL
- *         if orientation is not None:             # <<<<<<<<<<<<<<
- *             orientation = iarray_i(orientation, &norie, &iorie)
- *             assert norie == ncone
+  /* "PETSc/DMPlex.pyx":100
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
+ *         cdef PetscInt  cexoid = asInt(exoid)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
  */
-  __pyx_t_3 = (__pyx_v_orientation != Py_None);
-  __pyx_t_4 = (__pyx_t_3 != 0);
-  if (__pyx_t_4) {
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_exoid); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(42, 100, __pyx_L1_error)
+  __pyx_v_cexoid = __pyx_t_3;
 
-    /* "PETSc/DMPlex.pyx":179
- *         cdef PetscInt *iorie = NULL
- *         if orientation is not None:
- *             orientation = iarray_i(orientation, &norie, &iorie)             # <<<<<<<<<<<<<<
- *             assert norie == ncone
- *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+  /* "PETSc/DMPlex.pyx":101
+ *         cdef PetscDM   newdm = NULL
+ *         cdef PetscInt  cexoid = asInt(exoid)
+ *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self
  */
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_orientation, (&__pyx_v_norie), (&__pyx_v_iorie))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF_SET(__pyx_v_orientation, __pyx_t_5);
-    __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateExodus(__pyx_v_ccomm, __pyx_v_cexoid, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 101, __pyx_L1_error)
 
-    /* "PETSc/DMPlex.pyx":180
- *         if orientation is not None:
- *             orientation = iarray_i(orientation, &norie, &iorie)
- *             assert norie == ncone             # <<<<<<<<<<<<<<
- *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+  /* "PETSc/DMPlex.pyx":102
+ *         cdef PetscInt  cexoid = asInt(exoid)
+ *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-    #ifndef CYTHON_WITHOUT_ASSERTIONS
-    if (unlikely(!Py_OptimizeFlag)) {
-      if (unlikely(!((__pyx_v_norie == __pyx_v_ncone) != 0))) {
-        PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[42]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-    }
-    #endif
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
+  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-    /* "PETSc/DMPlex.pyx":181
- *             orientation = iarray_i(orientation, &norie, &iorie)
- *             assert norie == ncone
- *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":103
+ *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def insertCone(self, p, conePos, conePoint):
+ *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):
  */
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetConeOrientation(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_iorie)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":164
- *         return array_i(ncone, icone)
+  /* "PETSc/DMPlex.pyx":96
+ *         return self
  * 
- *     def setCone(self, p, cone, orientation=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def createExodus(self, exoid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createExodus", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_cone);
-  __Pyx_XDECREF(__pyx_v_orientation);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":183
- *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+/* "PETSc/DMPlex.pyx":105
+ *         return self
  * 
- *     def insertCone(self, p, conePos, conePoint):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt cconePos = asInt(conePos)
+ *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_32insertCone[] = "DMPlex.insertCone(self, p, conePos, conePoint)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_p = 0;
-  PyObject *__pyx_v_conePos = 0;
-  PyObject *__pyx_v_conePoint = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_16createGmsh[] = "DMPlex.createGmsh(self, Viewer viewer, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
+  PyObject *__pyx_v_interpolate = 0;
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("insertCone (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createGmsh (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_conePos,&__pyx_n_s_conePoint,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
     PyObject* values[3] = {0,0,0};
+    values[1] = ((PyObject *)Py_True);
+    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);
@@ -212823,113 +215703,137 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conePos)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("insertCone", 1, 3, 3, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
+          if (value) { values[1] = value; kw_args--; }
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conePoint)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("insertCone", 1, 3, 3, 2); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertCone") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGmsh") < 0)) __PYX_ERR(42, 105, __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);
+      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_p = values[0];
-    __pyx_v_conePos = values[1];
-    __pyx_v_conePoint = values[2];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+    __pyx_v_interpolate = values[1];
+    __pyx_v_comm = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("insertCone", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createGmsh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 105, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createGmsh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_conePos, __pyx_v_conePoint);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(42, 105, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_viewer, __pyx_v_interpolate, __pyx_v_comm);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_conePoint) {
-  PetscInt __pyx_v_cp;
-  PetscInt __pyx_v_cconePos;
-  PetscInt __pyx_v_cconePoint;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  PetscBool __pyx_v_interp;
+  DM __pyx_v_newdm;
   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("insertCone", 0);
+  MPI_Comm __pyx_t_1;
+  PetscBool __pyx_t_2;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("createGmsh", 0);
 
-  /* "PETSc/DMPlex.pyx":184
+  /* "PETSc/DMPlex.pyx":106
  * 
- *     def insertCone(self, p, conePos, conePoint):
- *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
- *         cdef PetscInt cconePos = asInt(conePos)
- *         cdef PetscInt cconePoint = asInt(conePoint)
+ *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cp = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 106, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":185
- *     def insertCone(self, p, conePos, conePoint):
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt cconePos = asInt(conePos)             # <<<<<<<<<<<<<<
- *         cdef PetscInt cconePoint = asInt(conePoint)
- *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
+  /* "PETSc/DMPlex.pyx":107
+ *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
+ *         cdef PetscDM   newdm = NULL
+ *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePos); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cconePos = __pyx_t_1;
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 107, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":186
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt cconePos = asInt(conePos)
- *         cdef PetscInt cconePoint = asInt(conePoint)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
+  /* "PETSc/DMPlex.pyx":108
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ */
+  __pyx_v_newdm = NULL;
+
+  /* "PETSc/DMPlex.pyx":109
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
+ *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateGmsh(__pyx_v_ccomm, __pyx_v_viewer->vwr, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(42, 109, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":110
+ *         cdef PetscDM   newdm = NULL
+ *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePoint); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cconePoint = __pyx_t_1;
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
+  __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":187
- *         cdef PetscInt cconePos = asInt(conePos)
- *         cdef PetscInt cconePoint = asInt(conePoint)
- *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":111
+ *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def insertConeOrientation(self, p, conePos, coneOrientation):
+ *     def createCohesiveSubmesh(self, hasLagrange, value):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexInsertCone(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cconePos, __pyx_v_cconePoint)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 187; __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;
 
-  /* "PETSc/DMPlex.pyx":183
- *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+  /* "PETSc/DMPlex.pyx":105
+ *         return self
  * 
- *     def insertCone(self, p, conePos, conePoint):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt cconePos = asInt(conePos)
+ *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ *         cdef PetscBool interp = interpolate
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createGmsh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -212937,35 +215841,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":189
- *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
+/* "PETSc/DMPlex.pyx":113
+ *         return self
  * 
- *     def insertConeOrientation(self, p, conePos, coneOrientation):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt cconePos = asInt(conePos)
+ *     def createCohesiveSubmesh(self, hasLagrange, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = hasLagrange
+ *         cdef PetscInt cvalue = asInt(value)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation[] = "DMPlex.insertConeOrientation(self, p, conePos, coneOrientation)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_p = 0;
-  PyObject *__pyx_v_conePos = 0;
-  PyObject *__pyx_v_coneOrientation = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh[] = "DMPlex.createCohesiveSubmesh(self, hasLagrange, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_hasLagrange = 0;
+  PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("insertConeOrientation (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createCohesiveSubmesh (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_conePos,&__pyx_n_s_coneOrientation,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_hasLagrange,&__pyx_n_s_value,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  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;
@@ -212974,315 +215873,219 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation(PyObj
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_hasLagrange)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conePos)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coneOrientation)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, 2); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createCohesiveSubmesh", 1, 2, 2, 1); __PYX_ERR(42, 113, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertConeOrientation") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCohesiveSubmesh") < 0)) __PYX_ERR(42, 113, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+    } 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);
-      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_p = values[0];
-    __pyx_v_conePos = values[1];
-    __pyx_v_coneOrientation = values[2];
+    __pyx_v_hasLagrange = values[0];
+    __pyx_v_value = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createCohesiveSubmesh", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 113, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCohesiveSubmesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_conePos, __pyx_v_coneOrientation);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_hasLagrange, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_coneOrientation) {
-  PetscInt __pyx_v_cp;
-  PetscInt __pyx_v_cconePos;
-  PetscInt __pyx_v_cconeOrientation;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_hasLagrange, PyObject *__pyx_v_value) {
+  PetscBool __pyx_v_flag;
+  PetscInt __pyx_v_cvalue;
+  struct PyPetscDMObject *__pyx_v_subdm = 0;
   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("insertConeOrientation", 0);
+  PetscBool __pyx_t_1;
+  PetscInt __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("createCohesiveSubmesh", 0);
 
-  /* "PETSc/DMPlex.pyx":190
+  /* "PETSc/DMPlex.pyx":114
  * 
- *     def insertConeOrientation(self, p, conePos, coneOrientation):
- *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
- *         cdef PetscInt cconePos = asInt(conePos)
- *         cdef PetscInt cconeOrientation = asInt(coneOrientation)
+ *     def createCohesiveSubmesh(self, hasLagrange, value):
+ *         cdef PetscBool flag = hasLagrange             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef DM subdm = DMPlex()
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cp = __pyx_t_1;
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_hasLagrange)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 114, __pyx_L1_error)
+  __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":191
- *     def insertConeOrientation(self, p, conePos, coneOrientation):
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt cconePos = asInt(conePos)             # <<<<<<<<<<<<<<
- *         cdef PetscInt cconeOrientation = asInt(coneOrientation)
- *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
+  /* "PETSc/DMPlex.pyx":115
+ *     def createCohesiveSubmesh(self, hasLagrange, value):
+ *         cdef PetscBool flag = hasLagrange
+ *         cdef PetscInt cvalue = asInt(value)             # <<<<<<<<<<<<<<
+ *         cdef DM subdm = DMPlex()
+ *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePos); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cconePos = __pyx_t_1;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_2 == -1L && PyErr_Occurred())) __PYX_ERR(42, 115, __pyx_L1_error)
+  __pyx_v_cvalue = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":192
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt cconePos = asInt(conePos)
- *         cdef PetscInt cconeOrientation = asInt(coneOrientation)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
+  /* "PETSc/DMPlex.pyx":116
+ *         cdef PetscBool flag = hasLagrange
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef DM subdm = DMPlex()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )
+ *         return subdm
+ */
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMPlex), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_subdm = ((struct PyPetscDMObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/DMPlex.pyx":117
+ *         cdef PetscInt cvalue = asInt(value)
+ *         cdef DM subdm = DMPlex()
+ *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )             # <<<<<<<<<<<<<<
+ *         return subdm
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_coneOrientation); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cconeOrientation = __pyx_t_1;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCohesiveSubmesh(__pyx_v_self->__pyx_base.dm, __pyx_v_flag, NULL, __pyx_v_cvalue, (&__pyx_v_subdm->dm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 117, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":193
- *         cdef PetscInt cconePos = asInt(conePos)
- *         cdef PetscInt cconeOrientation = asInt(coneOrientation)
- *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":118
+ *         cdef DM subdm = DMPlex()
+ *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )
+ *         return subdm             # <<<<<<<<<<<<<<
  * 
- *     def getConeOrientation(self, p):
+ *     def getChart(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexInsertConeOrientation(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cconePos, __pyx_v_cconeOrientation)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_subdm));
+  __pyx_r = ((PyObject *)__pyx_v_subdm);
+  goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":189
- *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
+  /* "PETSc/DMPlex.pyx":113
+ *         return self
  * 
- *     def insertConeOrientation(self, p, conePos, coneOrientation):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt cconePos = asInt(conePos)
+ *     def createCohesiveSubmesh(self, hasLagrange, value):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = hasLagrange
+ *         cdef PetscInt cvalue = asInt(value)
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCohesiveSubmesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_subdm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":195
- *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
+/* "PETSc/DMPlex.pyx":120
+ *         return subdm
  * 
- *     def getConeOrientation(self, p):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
+ *     def getChart(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37getConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_36getConeOrientation[] = "DMPlex.getConeOrientation(self, p)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37getConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_p = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_21getChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_20getChart[] = "DMPlex.getChart(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_21getChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConeOrientation (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,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_p)) != 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, "getConeOrientation") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 195; __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_p = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getConeOrientation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __Pyx_RefNannySetupContext("getChart (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getChart", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getChart", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
-  PetscInt __pyx_v_cp;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PetscInt __pyx_v_pStart;
   PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_norie;
-  const PetscInt *__pyx_v_iorie;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __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("getConeOrientation", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getChart", 0);
 
-  /* "PETSc/DMPlex.pyx":196
+  /* "PETSc/DMPlex.pyx":121
  * 
- *     def getConeOrientation(self, p):
- *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cp = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":197
- *     def getConeOrientation(self, p):
- *         cdef PetscInt cp = asInt(p)
+ *     def getChart(self):
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
+ *         return toInt(pStart), toInt(pEnd)
  */
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":198
- *         cdef PetscInt cp = asInt(p)
+  /* "PETSc/DMPlex.pyx":122
+ *     def getChart(self):
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        norie = 0
+ *         return toInt(pStart), toInt(pEnd)
+ * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 122, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":199
+  /* "PETSc/DMPlex.pyx":123
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt        norie = 0
- *         cdef const_PetscInt *iorie = NULL
- */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
-    if (__pyx_t_4) {
-    } else {
-      __pyx_t_3 = __pyx_t_4;
-      goto __pyx_L3_bool_binop_done;
-    }
-    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
-    __pyx_t_3 = __pyx_t_4;
-    __pyx_L3_bool_binop_done:;
-    if (unlikely(!__pyx_t_3)) {
-      PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
-
-  /* "PETSc/DMPlex.pyx":200
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        norie = 0             # <<<<<<<<<<<<<<
- *         cdef const_PetscInt *iorie = NULL
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
- */
-  __pyx_v_norie = 0;
-
-  /* "PETSc/DMPlex.pyx":201
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        norie = 0
- *         cdef const_PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
- *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )
- */
-  __pyx_v_iorie = NULL;
-
-  /* "PETSc/DMPlex.pyx":202
- *         cdef PetscInt        norie = 0
- *         cdef const_PetscInt *iorie = NULL
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )
- *         return array_i(norie, iorie)
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_norie))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":203
- *         cdef const_PetscInt *iorie = NULL
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
- *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )             # <<<<<<<<<<<<<<
- *         return array_i(norie, iorie)
- * 
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeOrientation(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_iorie))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":204
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
- *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )
- *         return array_i(norie, iorie)             # <<<<<<<<<<<<<<
+ *         return toInt(pStart), toInt(pEnd)             # <<<<<<<<<<<<<<
  * 
- *     def setConeOrientation(self, p, orientation):
+ *     def setChart(self, pStart, pEnd):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_norie, __pyx_v_iorie)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 204; __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_f_8petsc4py_5PETSc_toInt(__pyx_v_pStart); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 123, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pEnd); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 123, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 123, __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;
 
-  /* "PETSc/DMPlex.pyx":195
- *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
+  /* "PETSc/DMPlex.pyx":120
+ *         return subdm
  * 
- *     def getConeOrientation(self, p):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
+ *     def getChart(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getChart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -213290,28 +216093,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":206
- *         return array_i(norie, iorie)
+/* "PETSc/DMPlex.pyx":125
+ *         return toInt(pStart), toInt(pEnd)
  * 
- *     def setConeOrientation(self, p, orientation):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def setChart(self, pStart, pEnd):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cStart = asInt(pStart)
+ *         cdef PetscInt cEnd   = asInt(pEnd)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_38setConeOrientation[] = "DMPlex.setConeOrientation(self, p, orientation)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_p = 0;
-  PyObject *__pyx_v_orientation = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_22setChart[] = "DMPlex.setChart(self, pStart, pEnd)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_pStart = 0;
+  PyObject *__pyx_v_pEnd = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setConeOrientation (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setChart (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_orientation,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pStart,&__pyx_n_s_pEnd,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -213325,16 +216125,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pStart)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_orientation)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pEnd)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setConeOrientation", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, 1); __PYX_ERR(42, 125, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConeOrientation") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setChart") < 0)) __PYX_ERR(42, 125, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -213342,212 +216142,98 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_p = values[0];
-    __pyx_v_orientation = values[1];
+    __pyx_v_pStart = values[0];
+    __pyx_v_pEnd = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConeOrientation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 125, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setChart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_orientation);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_pStart, __pyx_v_pEnd);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_orientation) {
-  PetscInt __pyx_v_cp;
-  PetscInt __pyx_v_pStart;
-  PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_ncone;
-  PetscInt __pyx_v_norie;
-  PetscInt *__pyx_v_iorie;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_pStart, PyObject *__pyx_v_pEnd) {
+  PetscInt __pyx_v_cStart;
+  PetscInt __pyx_v_cEnd;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
   int __pyx_t_2;
-  int __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("setConeOrientation", 0);
-  __Pyx_INCREF(__pyx_v_orientation);
+  __Pyx_RefNannySetupContext("setChart", 0);
 
-  /* "PETSc/DMPlex.pyx":207
+  /* "PETSc/DMPlex.pyx":126
  * 
- *     def setConeOrientation(self, p, orientation):
- *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cp = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":208
- *     def setConeOrientation(self, p, orientation):
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
- */
-  __pyx_v_pStart = 0;
-  __pyx_v_pEnd = 0;
-
-  /* "PETSc/DMPlex.pyx":209
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ncone = 0
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":210
- *         cdef PetscInt pStart = 0, pEnd = 0
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt ncone = 0
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
- */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
-    if (__pyx_t_4) {
-    } else {
-      __pyx_t_3 = __pyx_t_4;
-      goto __pyx_L3_bool_binop_done;
-    }
-    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
-    __pyx_t_3 = __pyx_t_4;
-    __pyx_L3_bool_binop_done:;
-    if (unlikely(!__pyx_t_3)) {
-      PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
-
-  /* "PETSc/DMPlex.pyx":211
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ncone = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
- *         cdef PetscInt  norie = 0
- */
-  __pyx_v_ncone = 0;
-
-  /* "PETSc/DMPlex.pyx":212
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ncone = 0
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )             # <<<<<<<<<<<<<<
- *         cdef PetscInt  norie = 0
- *         cdef PetscInt *iorie = NULL
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_ncone))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":213
- *         cdef PetscInt ncone = 0
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
- *         cdef PetscInt  norie = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt *iorie = NULL
- *         orientation = iarray_i(orientation, &norie, &iorie)
- */
-  __pyx_v_norie = 0;
-
-  /* "PETSc/DMPlex.pyx":214
- *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
- *         cdef PetscInt  norie = 0
- *         cdef PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
- *         orientation = iarray_i(orientation, &norie, &iorie)
- *         assert norie == ncone
- */
-  __pyx_v_iorie = NULL;
-
-  /* "PETSc/DMPlex.pyx":215
- *         cdef PetscInt  norie = 0
- *         cdef PetscInt *iorie = NULL
- *         orientation = iarray_i(orientation, &norie, &iorie)             # <<<<<<<<<<<<<<
- *         assert norie == ncone
- *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+ *     def setChart(self, pStart, pEnd):
+ *         cdef PetscInt cStart = asInt(pStart)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cEnd   = asInt(pEnd)
+ *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
  */
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_orientation, (&__pyx_v_norie), (&__pyx_v_iorie))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF_SET(__pyx_v_orientation, __pyx_t_5);
-  __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pStart); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 126, __pyx_L1_error)
+  __pyx_v_cStart = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":216
- *         cdef PetscInt *iorie = NULL
- *         orientation = iarray_i(orientation, &norie, &iorie)
- *         assert norie == ncone             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+  /* "PETSc/DMPlex.pyx":127
+ *     def setChart(self, pStart, pEnd):
+ *         cdef PetscInt cStart = asInt(pStart)
+ *         cdef PetscInt cEnd   = asInt(pEnd)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
  * 
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    if (unlikely(!((__pyx_v_norie == __pyx_v_ncone) != 0))) {
-      PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pEnd); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 127, __pyx_L1_error)
+  __pyx_v_cEnd = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":217
- *         orientation = iarray_i(orientation, &norie, &iorie)
- *         assert norie == ncone
- *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":128
+ *         cdef PetscInt cStart = asInt(pStart)
+ *         cdef PetscInt cEnd   = asInt(pEnd)
+ *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )             # <<<<<<<<<<<<<<
  * 
- *     def getSupportSize(self, p):
+ *     def getConeSize(self, p):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetConeOrientation(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_iorie)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetChart(__pyx_v_self->__pyx_base.dm, __pyx_v_cStart, __pyx_v_cEnd)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 128, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":206
- *         return array_i(norie, iorie)
+  /* "PETSc/DMPlex.pyx":125
+ *         return toInt(pStart), toInt(pEnd)
  * 
- *     def setConeOrientation(self, p, orientation):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def setChart(self, pStart, pEnd):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cStart = asInt(pStart)
+ *         cdef PetscInt cEnd   = asInt(pEnd)
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setChart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_orientation);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":219
- *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+/* "PETSc/DMPlex.pyx":130
+ *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
  * 
- *     def getSupportSize(self, p):             # <<<<<<<<<<<<<<
+ *     def getConeSize(self, p):             # <<<<<<<<<<<<<<
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41getSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_40getSupportSize[] = "DMPlex.getSupportSize(self, p)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41getSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25getConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_24getConeSize[] = "DMPlex.getConeSize(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25getConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSupportSize (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getConeSize (wrapper)", 0);
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,0};
     PyObject* values[1] = {0};
@@ -213566,7 +216252,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41getSupportSize(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSupportSize") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConeSize") < 0)) __PYX_ERR(42, 130, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -213577,24 +216263,24 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41getSupportSize(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getSupportSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getConeSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 130, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getSupportSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getConeSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
   PetscInt __pyx_v_cp;
   PetscInt __pyx_v_pStart;
   PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_ssize;
+  PetscInt __pyx_v_csize;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
@@ -213602,23 +216288,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
   int __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("getSupportSize", 0);
+  __Pyx_RefNannySetupContext("getConeSize", 0);
 
-  /* "PETSc/DMPlex.pyx":220
+  /* "PETSc/DMPlex.pyx":131
  * 
- *     def getSupportSize(self, p):
+ *     def getConeSize(self, p):
  *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 131, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":221
- *     def getSupportSize(self, p):
+  /* "PETSc/DMPlex.pyx":132
+ *     def getConeSize(self, p):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
@@ -213627,21 +216310,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":222
+  /* "PETSc/DMPlex.pyx":133
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ssize = 0
+ *         cdef PetscInt csize = 0
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 133, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":223
+  /* "PETSc/DMPlex.pyx":134
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt ssize = 0
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )
+ *         cdef PetscInt csize = 0
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
@@ -213656,47 +216339,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(42, 134, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":224
+  /* "PETSc/DMPlex.pyx":135
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ssize = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )
- *         return toInt(ssize)
+ *         cdef PetscInt csize = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )
+ *         return toInt(csize)
  */
-  __pyx_v_ssize = 0;
+  __pyx_v_csize = 0;
 
-  /* "PETSc/DMPlex.pyx":225
+  /* "PETSc/DMPlex.pyx":136
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ssize = 0
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )             # <<<<<<<<<<<<<<
- *         return toInt(ssize)
+ *         cdef PetscInt csize = 0
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )             # <<<<<<<<<<<<<<
+ *         return toInt(csize)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetSupportSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_ssize))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_csize))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 136, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":226
- *         cdef PetscInt ssize = 0
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )
- *         return toInt(ssize)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":137
+ *         cdef PetscInt csize = 0
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )
+ *         return toInt(csize)             # <<<<<<<<<<<<<<
  * 
- *     def setSupportSize(self, p, size):
+ *     def setConeSize(self, p, size):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ssize); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_csize); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":219
- *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+  /* "PETSc/DMPlex.pyx":130
+ *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
  * 
- *     def getSupportSize(self, p):             # <<<<<<<<<<<<<<
+ *     def getConeSize(self, p):             # <<<<<<<<<<<<<<
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  */
@@ -213704,7 +216387,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getSupportSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getConeSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -213712,26 +216395,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":228
- *         return toInt(ssize)
+/* "PETSc/DMPlex.pyx":139
+ *         return toInt(csize)
  * 
- *     def setSupportSize(self, p, size):             # <<<<<<<<<<<<<<
+ *     def setConeSize(self, p, size):             # <<<<<<<<<<<<<<
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_42setSupportSize[] = "DMPlex.setSupportSize(self, p, size)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_26setConeSize[] = "DMPlex.setConeSize(self, p, size)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_v_size = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setSupportSize (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setConeSize (wrapper)", 0);
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_size,0};
     PyObject* values[2] = {0,0};
@@ -213752,11 +216432,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setSupportSize", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setConeSize", 1, 2, 2, 1); __PYX_ERR(42, 139, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSupportSize") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConeSize") < 0)) __PYX_ERR(42, 139, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -213769,47 +216449,44 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSupportSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConeSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 139, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setSupportSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setConeSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_size);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_size);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
   PetscInt __pyx_v_cp;
   PetscInt __pyx_v_pStart;
   PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_ssize;
+  PetscInt __pyx_v_csize;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __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("setSupportSize", 0);
+  __Pyx_RefNannySetupContext("setConeSize", 0);
 
-  /* "PETSc/DMPlex.pyx":229
+  /* "PETSc/DMPlex.pyx":140
  * 
- *     def setSupportSize(self, p, size):
+ *     def setConeSize(self, p, size):
  *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 140, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":230
- *     def setSupportSize(self, p, size):
+  /* "PETSc/DMPlex.pyx":141
+ *     def setConeSize(self, p, size):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
@@ -213818,21 +216495,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":231
+  /* "PETSc/DMPlex.pyx":142
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ssize = asInt(size)
+ *         cdef PetscInt csize = asInt(size)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 142, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":232
+  /* "PETSc/DMPlex.pyx":143
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt ssize = asInt(size)
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
+ *         cdef PetscInt csize = asInt(size)
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
@@ -213847,34 +216524,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(42, 143, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":233
+  /* "PETSc/DMPlex.pyx":144
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ssize = asInt(size)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
+ *         cdef PetscInt csize = asInt(size)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ssize = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 144, __pyx_L1_error)
+  __pyx_v_csize = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":234
+  /* "PETSc/DMPlex.pyx":145
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt ssize = asInt(size)
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )             # <<<<<<<<<<<<<<
+ *         cdef PetscInt csize = asInt(size)
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )             # <<<<<<<<<<<<<<
  * 
- *     def getSupport(self, p):
+ *     def getCone(self, p):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetSupportSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_ssize)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_csize)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 145, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":228
- *         return toInt(ssize)
+  /* "PETSc/DMPlex.pyx":139
+ *         return toInt(csize)
  * 
- *     def setSupportSize(self, p, size):             # <<<<<<<<<<<<<<
+ *     def setConeSize(self, p, size):             # <<<<<<<<<<<<<<
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  */
@@ -213883,7 +216560,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setSupportSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setConeSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -213891,25 +216568,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":236
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
+/* "PETSc/DMPlex.pyx":147
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
  * 
- *     def getSupport(self, p):             # <<<<<<<<<<<<<<
+ *     def getCone(self, p):             # <<<<<<<<<<<<<<
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_45getSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_44getSupport[] = "DMPlex.getSupport(self, p)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_45getSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_28getCone[] = "DMPlex.getCone(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSupport (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getCone (wrapper)", 0);
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,0};
     PyObject* values[1] = {0};
@@ -213928,7 +216602,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_45getSupport(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, "getSupport") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCone") < 0)) __PYX_ERR(42, 147, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -213939,25 +216613,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_45getSupport(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getSupport", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getCone", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 147, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getSupport", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
   PetscInt __pyx_v_cp;
   PetscInt __pyx_v_pStart;
   PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_nsupp;
-  const PetscInt *__pyx_v_isupp;
+  PetscInt __pyx_v_ncone;
+  const PetscInt *__pyx_v_icone;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
@@ -213965,23 +216639,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
   int __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("getSupport", 0);
+  __Pyx_RefNannySetupContext("getCone", 0);
 
-  /* "PETSc/DMPlex.pyx":237
+  /* "PETSc/DMPlex.pyx":148
  * 
- *     def getSupport(self, p):
+ *     def getCone(self, p):
  *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 148, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":238
- *     def getSupport(self, p):
+  /* "PETSc/DMPlex.pyx":149
+ *     def getCone(self, p):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
@@ -213990,21 +216661,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":239
+  /* "PETSc/DMPlex.pyx":150
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        nsupp = 0
+ *         cdef PetscInt        ncone = 0
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 150, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":240
+  /* "PETSc/DMPlex.pyx":151
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt        nsupp = 0
- *         cdef const_PetscInt *isupp = NULL
+ *         cdef PetscInt        ncone = 0
+ *         cdef const_PetscInt *icone = NULL
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
@@ -214019,65 +216690,65 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(42, 151, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":241
+  /* "PETSc/DMPlex.pyx":152
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        nsupp = 0             # <<<<<<<<<<<<<<
- *         cdef const_PetscInt *isupp = NULL
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
+ *         cdef PetscInt        ncone = 0             # <<<<<<<<<<<<<<
+ *         cdef const_PetscInt *icone = NULL
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
  */
-  __pyx_v_nsupp = 0;
+  __pyx_v_ncone = 0;
 
-  /* "PETSc/DMPlex.pyx":242
+  /* "PETSc/DMPlex.pyx":153
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt        nsupp = 0
- *         cdef const_PetscInt *isupp = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
- *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )
+ *         cdef PetscInt        ncone = 0
+ *         cdef const_PetscInt *icone = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
+ *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )
  */
-  __pyx_v_isupp = NULL;
+  __pyx_v_icone = NULL;
 
-  /* "PETSc/DMPlex.pyx":243
- *         cdef PetscInt        nsupp = 0
- *         cdef const_PetscInt *isupp = NULL
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )
- *         return array_i(nsupp, isupp)
+  /* "PETSc/DMPlex.pyx":154
+ *         cdef PetscInt        ncone = 0
+ *         cdef const_PetscInt *icone = NULL
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )
+ *         return array_i(ncone, icone)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetSupportSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_nsupp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_ncone))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 154, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":244
- *         cdef const_PetscInt *isupp = NULL
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
- *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )             # <<<<<<<<<<<<<<
- *         return array_i(nsupp, isupp)
+  /* "PETSc/DMPlex.pyx":155
+ *         cdef const_PetscInt *icone = NULL
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
+ *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )             # <<<<<<<<<<<<<<
+ *         return array_i(ncone, icone)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetSupport(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_isupp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetCone(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_icone))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 155, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":245
- *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
- *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )
- *         return array_i(nsupp, isupp)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":156
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
+ *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )
+ *         return array_i(ncone, icone)             # <<<<<<<<<<<<<<
  * 
- *     def setSupport(self, p, supp):
+ *     def setCone(self, p, cone, orientation=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nsupp, __pyx_v_isupp)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_ncone, __pyx_v_icone)); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":236
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
+  /* "PETSc/DMPlex.pyx":147
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
  * 
- *     def getSupport(self, p):             # <<<<<<<<<<<<<<
+ *     def getCone(self, p):             # <<<<<<<<<<<<<<
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  */
@@ -214085,7 +216756,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getSupport", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -214093,33 +216764,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":247
- *         return array_i(nsupp, isupp)
+/* "PETSc/DMPlex.pyx":158
+ *         return array_i(ncone, icone)
  * 
- *     def setSupport(self, p, supp):             # <<<<<<<<<<<<<<
+ *     def setCone(self, p, cone, orientation=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_46setSupport[] = "DMPlex.setSupport(self, p, supp)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_30setCone[] = "DMPlex.setCone(self, p, cone, orientation=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
-  PyObject *__pyx_v_supp = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  PyObject *__pyx_v_cone = 0;
+  PyObject *__pyx_v_orientation = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setSupport (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setCone (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_supp,0};
-    PyObject* values[2] = {0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_cone,&__pyx_n_s_orientation,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;
@@ -214131,44 +216802,55 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport(PyObject *__pyx_
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_supp)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cone)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setSupport", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setCone", 0, 2, 3, 1); __PYX_ERR(42, 158, __pyx_L3_error)
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_orientation);
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSupport") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCone") < 0)) __PYX_ERR(42, 158, __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);
+      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_p = values[0];
-    __pyx_v_supp = values[1];
+    __pyx_v_cone = values[1];
+    __pyx_v_orientation = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSupport", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCone", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 158, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setSupport", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_supp);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_cone, __pyx_v_orientation);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_supp) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_cone, PyObject *__pyx_v_orientation) {
   PetscInt __pyx_v_cp;
   PetscInt __pyx_v_pStart;
   PetscInt __pyx_v_pEnd;
-  PetscInt __pyx_v_nsupp;
-  PetscInt *__pyx_v_isupp;
+  PetscInt __pyx_v_ncone;
+  PetscInt *__pyx_v_icone;
+  PetscInt __pyx_v_norie;
+  PetscInt *__pyx_v_iorie;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
@@ -214176,24 +216858,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
   int __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("setSupport", 0);
-  __Pyx_INCREF(__pyx_v_supp);
+  __Pyx_RefNannySetupContext("setCone", 0);
+  __Pyx_INCREF(__pyx_v_cone);
+  __Pyx_INCREF(__pyx_v_orientation);
 
-  /* "PETSc/DMPlex.pyx":248
+  /* "PETSc/DMPlex.pyx":159
  * 
- *     def setSupport(self, p, supp):
+ *     def setCone(self, p, cone, orientation=None):
  *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 159, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":249
- *     def setSupport(self, p, supp):
+  /* "PETSc/DMPlex.pyx":160
+ *     def setCone(self, p, cone, orientation=None):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
@@ -214202,21 +216882,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":250
+  /* "PETSc/DMPlex.pyx":161
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt  nsupp = 0
+ *         #
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 161, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":251
+  /* "PETSc/DMPlex.pyx":162
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
- *         cdef PetscInt  nsupp = 0
- *         cdef PetscInt *isupp = NULL
+ *         #
+ *         cdef PetscInt  ncone = 0
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
@@ -214231,649 +216911,295 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(42, 162, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":252
- *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+  /* "PETSc/DMPlex.pyx":164
  *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt  nsupp = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt *isupp = NULL
- *         supp = iarray_i(supp, &nsupp, &isupp)
+ *         #
+ *         cdef PetscInt  ncone = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt *icone = NULL
+ *         cone = iarray_i(cone, &ncone, &icone)
  */
-  __pyx_v_nsupp = 0;
+  __pyx_v_ncone = 0;
 
-  /* "PETSc/DMPlex.pyx":253
- *         assert cp>=pStart and cp<pEnd
- *         cdef PetscInt  nsupp = 0
- *         cdef PetscInt *isupp = NULL             # <<<<<<<<<<<<<<
- *         supp = iarray_i(supp, &nsupp, &isupp)
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, nsupp) )
+  /* "PETSc/DMPlex.pyx":165
+ *         #
+ *         cdef PetscInt  ncone = 0
+ *         cdef PetscInt *icone = NULL             # <<<<<<<<<<<<<<
+ *         cone = iarray_i(cone, &ncone, &icone)
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, ncone) )
  */
-  __pyx_v_isupp = NULL;
+  __pyx_v_icone = NULL;
 
-  /* "PETSc/DMPlex.pyx":254
- *         cdef PetscInt  nsupp = 0
- *         cdef PetscInt *isupp = NULL
- *         supp = iarray_i(supp, &nsupp, &isupp)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, nsupp) )
- *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
+  /* "PETSc/DMPlex.pyx":166
+ *         cdef PetscInt  ncone = 0
+ *         cdef PetscInt *icone = NULL
+ *         cone = iarray_i(cone, &ncone, &icone)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, ncone) )
+ *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )
  */
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_supp, (&__pyx_v_nsupp), (&__pyx_v_isupp))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_cone, (&__pyx_v_ncone), (&__pyx_v_icone))); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 166, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF_SET(__pyx_v_supp, __pyx_t_5);
+  __Pyx_DECREF_SET(__pyx_v_cone, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/DMPlex.pyx":255
- *         cdef PetscInt *isupp = NULL
- *         supp = iarray_i(supp, &nsupp, &isupp)
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, nsupp) )             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
- * 
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetSupportSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_nsupp)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":256
- *         supp = iarray_i(supp, &nsupp, &isupp)
- *         CHKERR( DMPlexSetSupportSize(self.dm, cp, nsupp) )
- *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )             # <<<<<<<<<<<<<<
- * 
- *     def getMaxSizes(self):
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetSupport(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_isupp)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":247
- *         return array_i(nsupp, isupp)
- * 
- *     def setSupport(self, p, supp):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setSupport", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_supp);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":258
- *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
- * 
- *     def getMaxSizes(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
- *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_49getMaxSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_48getMaxSizes[] = "DMPlex.getMaxSizes(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_49getMaxSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getMaxSizes (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getMaxSizes", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMaxSizes", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
-  PetscInt __pyx_v_maxConeSize;
-  PetscInt __pyx_v_maxSupportSize;
-  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("getMaxSizes", 0);
-
-  /* "PETSc/DMPlex.pyx":259
- * 
- *     def getMaxSizes(self):
- *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
- *         return toInt(maxConeSize), toInt(maxSupportSize)
- */
-  __pyx_v_maxConeSize = 0;
-  __pyx_v_maxSupportSize = 0;
-
-  /* "PETSc/DMPlex.pyx":260
- *     def getMaxSizes(self):
- *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
- *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )             # <<<<<<<<<<<<<<
- *         return toInt(maxConeSize), toInt(maxSupportSize)
- * 
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetMaxSizes(__pyx_v_self->__pyx_base.dm, (&__pyx_v_maxConeSize), (&__pyx_v_maxSupportSize))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":261
- *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
- *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
- *         return toInt(maxConeSize), toInt(maxSupportSize)             # <<<<<<<<<<<<<<
- * 
- *     def symmetrize(self):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxConeSize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxSupportSize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 261; __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[42]; __pyx_lineno = 261; __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;
-
-  /* "PETSc/DMPlex.pyx":258
- *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
- * 
- *     def getMaxSizes(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
- *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
+  /* "PETSc/DMPlex.pyx":167
+ *         cdef PetscInt *icone = NULL
+ *         cone = iarray_i(cone, &ncone, &icone)
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, ncone) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )
+ *         #
  */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_ncone)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 167, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getMaxSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":263
- *         return toInt(maxConeSize), toInt(maxSupportSize)
- * 
- *     def symmetrize(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSymmetrize(self.dm) )
- * 
+  /* "PETSc/DMPlex.pyx":168
+ *         cone = iarray_i(cone, &ncone, &icone)
+ *         CHKERR( DMPlexSetConeSize(self.dm, cp, ncone) )
+ *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )             # <<<<<<<<<<<<<<
+ *         #
+ *         cdef PetscInt  norie = 0
  */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetCone(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_icone)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 168, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_51symmetrize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_50symmetrize[] = "DMPlex.symmetrize(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_51symmetrize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("symmetrize (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("symmetrize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "symmetrize", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_50symmetrize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_50symmetrize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__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("symmetrize", 0);
-
-  /* "PETSc/DMPlex.pyx":264
- * 
- *     def symmetrize(self):
- *         CHKERR( DMPlexSymmetrize(self.dm) )             # <<<<<<<<<<<<<<
- * 
- *     def stratify(self):
+  /* "PETSc/DMPlex.pyx":170
+ *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )
+ *         #
+ *         cdef PetscInt  norie = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt *iorie = NULL
+ *         if orientation is not None:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSymmetrize(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_norie = 0;
 
-  /* "PETSc/DMPlex.pyx":263
- *         return toInt(maxConeSize), toInt(maxSupportSize)
- * 
- *     def symmetrize(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSymmetrize(self.dm) )
- * 
+  /* "PETSc/DMPlex.pyx":171
+ *         #
+ *         cdef PetscInt  norie = 0
+ *         cdef PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
+ *         if orientation is not None:
+ *             orientation = iarray_i(orientation, &norie, &iorie)
  */
+  __pyx_v_iorie = NULL;
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.symmetrize", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":266
- *         CHKERR( DMPlexSymmetrize(self.dm) )
- * 
- *     def stratify(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexStratify(self.dm) )
- * 
+  /* "PETSc/DMPlex.pyx":172
+ *         cdef PetscInt  norie = 0
+ *         cdef PetscInt *iorie = NULL
+ *         if orientation is not None:             # <<<<<<<<<<<<<<
+ *             orientation = iarray_i(orientation, &norie, &iorie)
+ *             assert norie == ncone
  */
+  __pyx_t_3 = (__pyx_v_orientation != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_53stratify(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_52stratify[] = "DMPlex.stratify(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_53stratify(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("stratify (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("stratify", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "stratify", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_52stratify(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_52stratify(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__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("stratify", 0);
-
-  /* "PETSc/DMPlex.pyx":267
- * 
- *     def stratify(self):
- *         CHKERR( DMPlexStratify(self.dm) )             # <<<<<<<<<<<<<<
- * 
- *     def orient(self):
+    /* "PETSc/DMPlex.pyx":173
+ *         cdef PetscInt *iorie = NULL
+ *         if orientation is not None:
+ *             orientation = iarray_i(orientation, &norie, &iorie)             # <<<<<<<<<<<<<<
+ *             assert norie == ncone
+ *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexStratify(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_orientation, (&__pyx_v_norie), (&__pyx_v_iorie))); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 173, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF_SET(__pyx_v_orientation, __pyx_t_5);
+    __pyx_t_5 = 0;
 
-  /* "PETSc/DMPlex.pyx":266
- *         CHKERR( DMPlexSymmetrize(self.dm) )
- * 
- *     def stratify(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexStratify(self.dm) )
+    /* "PETSc/DMPlex.pyx":174
+ *         if orientation is not None:
+ *             orientation = iarray_i(orientation, &norie, &iorie)
+ *             assert norie == ncone             # <<<<<<<<<<<<<<
+ *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
  */
+    #ifndef CYTHON_WITHOUT_ASSERTIONS
+    if (unlikely(!Py_OptimizeFlag)) {
+      if (unlikely(!((__pyx_v_norie == __pyx_v_ncone) != 0))) {
+        PyErr_SetNone(PyExc_AssertionError);
+        __PYX_ERR(42, 174, __pyx_L1_error)
+      }
+    }
+    #endif
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.stratify", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":269
- *         CHKERR( DMPlexStratify(self.dm) )
- * 
- *     def orient(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexOrient(self.dm) )
+    /* "PETSc/DMPlex.pyx":175
+ *             orientation = iarray_i(orientation, &norie, &iorie)
+ *             assert norie == ncone
+ *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )             # <<<<<<<<<<<<<<
  * 
+ *     def insertCone(self, p, conePos, conePoint):
  */
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetConeOrientation(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_iorie)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 175, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_55orient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_54orient[] = "DMPlex.orient(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_55orient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("orient (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("orient", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "orient", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_54orient(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_54orient(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__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("orient", 0);
-
-  /* "PETSc/DMPlex.pyx":270
- * 
- *     def orient(self):
- *         CHKERR( DMPlexOrient(self.dm) )             # <<<<<<<<<<<<<<
- * 
- *     def getCellNumbering(self):
+    /* "PETSc/DMPlex.pyx":172
+ *         cdef PetscInt  norie = 0
+ *         cdef PetscInt *iorie = NULL
+ *         if orientation is not None:             # <<<<<<<<<<<<<<
+ *             orientation = iarray_i(orientation, &norie, &iorie)
+ *             assert norie == ncone
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexOrient(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
 
-  /* "PETSc/DMPlex.pyx":269
- *         CHKERR( DMPlexStratify(self.dm) )
- * 
- *     def orient(self):             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexOrient(self.dm) )
+  /* "PETSc/DMPlex.pyx":158
+ *         return array_i(ncone, icone)
  * 
+ *     def setCone(self, p, cone, orientation=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.orient", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_cone);
+  __Pyx_XDECREF(__pyx_v_orientation);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":272
- *         CHKERR( DMPlexOrient(self.dm) )
+/* "PETSc/DMPlex.pyx":177
+ *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
- *     def getCellNumbering(self):             # <<<<<<<<<<<<<<
- *         cdef IS iset = IS()
- *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
+ *     def insertCone(self, p, conePos, conePoint):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt cconePos = asInt(conePos)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_57getCellNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_56getCellNumbering[] = "DMPlex.getCellNumbering(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_57getCellNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_32insertCone[] = "DMPlex.insertCone(self, p, conePos, conePoint)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
+  PyObject *__pyx_v_conePos = 0;
+  PyObject *__pyx_v_conePoint = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCellNumbering (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCellNumbering", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCellNumbering", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
-  struct PyPetscISObject *__pyx_v_iset = 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("getCellNumbering", 0);
-
-  /* "PETSc/DMPlex.pyx":273
- * 
- *     def getCellNumbering(self):
- *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
- *         PetscINCREF(iset.obj)
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DMPlex.pyx":274
- *     def getCellNumbering(self):
- *         cdef IS iset = IS()
- *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(iset.obj)
- *         return iset
- */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetCellNumbering(__pyx_v_self->__pyx_base.dm, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":275
- *         cdef IS iset = IS()
- *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
- *         PetscINCREF(iset.obj)             # <<<<<<<<<<<<<<
- *         return iset
- * 
- */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_iset->__pyx_base.obj);
-
-  /* "PETSc/DMPlex.pyx":276
- *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
- *         PetscINCREF(iset.obj)
- *         return iset             # <<<<<<<<<<<<<<
- * 
- *     def getVertexNumbering(self):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_iset));
-  __pyx_r = ((PyObject *)__pyx_v_iset);
-  goto __pyx_L0;
-
-  /* "PETSc/DMPlex.pyx":272
- *         CHKERR( DMPlexOrient(self.dm) )
- * 
- *     def getCellNumbering(self):             # <<<<<<<<<<<<<<
- *         cdef IS iset = IS()
- *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getCellNumbering", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_iset);
-  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannySetupContext("insertCone (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_conePos,&__pyx_n_s_conePoint,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_p)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conePos)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("insertCone", 1, 3, 3, 1); __PYX_ERR(42, 177, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conePoint)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("insertCone", 1, 3, 3, 2); __PYX_ERR(42, 177, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertCone") < 0)) __PYX_ERR(42, 177, __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_p = values[0];
+    __pyx_v_conePos = values[1];
+    __pyx_v_conePoint = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("insertCone", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 177, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":278
- *         return iset
- * 
- *     def getVertexNumbering(self):             # <<<<<<<<<<<<<<
- *         cdef IS iset = IS()
- *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_59getVertexNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering[] = "DMPlex.getVertexNumbering(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_59getVertexNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getVertexNumbering (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getVertexNumbering", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getVertexNumbering", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_conePos, __pyx_v_conePoint);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
-  struct PyPetscISObject *__pyx_v_iset = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_conePoint) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_cconePos;
+  PetscInt __pyx_v_cconePoint;
   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("getVertexNumbering", 0);
+  __Pyx_RefNannySetupContext("insertCone", 0);
 
-  /* "PETSc/DMPlex.pyx":279
+  /* "PETSc/DMPlex.pyx":178
  * 
- *     def getVertexNumbering(self):
- *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
- *         PetscINCREF(iset.obj)
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DMPlex.pyx":280
- *     def getVertexNumbering(self):
- *         cdef IS iset = IS()
- *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(iset.obj)
- *         return iset
+ *     def insertCone(self, p, conePos, conePoint):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cconePos = asInt(conePos)
+ *         cdef PetscInt cconePoint = asInt(conePoint)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetVertexNumbering(__pyx_v_self->__pyx_base.dm, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 178, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":281
- *         cdef IS iset = IS()
- *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
- *         PetscINCREF(iset.obj)             # <<<<<<<<<<<<<<
- *         return iset
- * 
+  /* "PETSc/DMPlex.pyx":179
+ *     def insertCone(self, p, conePos, conePoint):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt cconePos = asInt(conePos)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cconePoint = asInt(conePoint)
+ *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_iset->__pyx_base.obj);
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePos); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 179, __pyx_L1_error)
+  __pyx_v_cconePos = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":282
- *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
- *         PetscINCREF(iset.obj)
- *         return iset             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":180
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt cconePos = asInt(conePos)
+ *         cdef PetscInt cconePoint = asInt(conePoint)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
  * 
- *     def getNumLabels(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_iset));
-  __pyx_r = ((PyObject *)__pyx_v_iset);
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePoint); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 180, __pyx_L1_error)
+  __pyx_v_cconePoint = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":278
- *         return iset
+  /* "PETSc/DMPlex.pyx":181
+ *         cdef PetscInt cconePos = asInt(conePos)
+ *         cdef PetscInt cconePoint = asInt(conePoint)
+ *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )             # <<<<<<<<<<<<<<
  * 
- *     def getVertexNumbering(self):             # <<<<<<<<<<<<<<
- *         cdef IS iset = IS()
- *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
+ *     def insertConeOrientation(self, p, conePos, coneOrientation):
  */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexInsertCone(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cconePos, __pyx_v_cconePoint)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 181, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getVertexNumbering", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_iset);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/DMPlex.pyx":284
- *         return iset
+  /* "PETSc/DMPlex.pyx":177
+ *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
- *     def getNumLabels(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt nLabels = 0
- *         CHKERR( DMPlexGetNumLabels(self.dm, &nLabels) )
+ *     def insertCone(self, p, conePos, conePoint):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt cconePos = asInt(conePos)
  */
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_61getNumLabels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_60getNumLabels[] = "DMPlex.getNumLabels(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_61getNumLabels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getNumLabels (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getNumLabels", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNumLabels", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_60getNumLabels(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
-
   /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60getNumLabels(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
-  PetscInt __pyx_v_nLabels;
-  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("getNumLabels", 0);
-
-  /* "PETSc/DMPlex.pyx":285
- * 
- *     def getNumLabels(self):
- *         cdef PetscInt nLabels = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetNumLabels(self.dm, &nLabels) )
- *         return toInt(nLabels)
- */
-  __pyx_v_nLabels = 0;
-
-  /* "PETSc/DMPlex.pyx":286
- *     def getNumLabels(self):
- *         cdef PetscInt nLabels = 0
- *         CHKERR( DMPlexGetNumLabels(self.dm, &nLabels) )             # <<<<<<<<<<<<<<
- *         return toInt(nLabels)
- * 
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetNumLabels(__pyx_v_self->__pyx_base.dm, (&__pyx_v_nLabels))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":287
- *         cdef PetscInt nLabels = 0
- *         CHKERR( DMPlexGetNumLabels(self.dm, &nLabels) )
- *         return toInt(nLabels)             # <<<<<<<<<<<<<<
- * 
- *     def getLabelName(self, index):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nLabels); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
-
-  /* "PETSc/DMPlex.pyx":284
- *         return iset
- * 
- *     def getNumLabels(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt nLabels = 0
- *         CHKERR( DMPlexGetNumLabels(self.dm, &nLabels) )
- */
-
-  /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getNumLabels", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -214881,32 +217207,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60getNumLabels(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":289
- *         return toInt(nLabels)
+/* "PETSc/DMPlex.pyx":183
+ *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
  * 
- *     def getLabelName(self, index):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cindex = asInt(index)
- *         cdef const_char *cname = NULL
+ *     def insertConeOrientation(self, p, conePos, coneOrientation):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt cconePos = asInt(conePos)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_63getLabelName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_62getLabelName[] = "DMPlex.getLabelName(self, index)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_63getLabelName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_index = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation[] = "DMPlex.insertConeOrientation(self, p, conePos, coneOrientation)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
+  PyObject *__pyx_v_conePos = 0;
+  PyObject *__pyx_v_coneOrientation = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLabelName (wrapper)", 0);
+  __Pyx_RefNannySetupContext("insertConeOrientation (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_conePos,&__pyx_n_s_coneOrientation,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;
@@ -214914,101 +217241,110 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_63getLabelName(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_index)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conePos)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, 1); __PYX_ERR(42, 183, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coneOrientation)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, 2); __PYX_ERR(42, 183, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelName") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertConeOrientation") < 0)) __PYX_ERR(42, 183, __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_index = values[0];
+    __pyx_v_p = values[0];
+    __pyx_v_conePos = values[1];
+    __pyx_v_coneOrientation = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 183, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_62getLabelName(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_index);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_conePos, __pyx_v_coneOrientation);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getLabelName(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_index) {
-  PetscInt __pyx_v_cindex;
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_coneOrientation) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_cconePos;
+  PetscInt __pyx_v_cconeOrientation;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   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("getLabelName", 0);
+  __Pyx_RefNannySetupContext("insertConeOrientation", 0);
 
-  /* "PETSc/DMPlex.pyx":290
+  /* "PETSc/DMPlex.pyx":184
  * 
- *     def getLabelName(self, index):
- *         cdef PetscInt cindex = asInt(index)             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         CHKERR( DMPlexGetLabelName(self.dm, cindex, &cname) )
+ *     def insertConeOrientation(self, p, conePos, coneOrientation):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cconePos = asInt(conePos)
+ *         cdef PetscInt cconeOrientation = asInt(coneOrientation)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cindex = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 184, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":291
- *     def getLabelName(self, index):
- *         cdef PetscInt cindex = asInt(index)
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetLabelName(self.dm, cindex, &cname) )
- *         return bytes2str(cname)
+  /* "PETSc/DMPlex.pyx":185
+ *     def insertConeOrientation(self, p, conePos, coneOrientation):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt cconePos = asInt(conePos)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cconeOrientation = asInt(coneOrientation)
+ *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
  */
-  __pyx_v_cname = NULL;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePos); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 185, __pyx_L1_error)
+  __pyx_v_cconePos = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":292
- *         cdef PetscInt cindex = asInt(index)
- *         cdef const_char *cname = NULL
- *         CHKERR( DMPlexGetLabelName(self.dm, cindex, &cname) )             # <<<<<<<<<<<<<<
- *         return bytes2str(cname)
+  /* "PETSc/DMPlex.pyx":186
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt cconePos = asInt(conePos)
+ *         cdef PetscInt cconeOrientation = asInt(coneOrientation)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetLabelName(__pyx_v_self->__pyx_base.dm, __pyx_v_cindex, (&__pyx_v_cname))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_coneOrientation); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 186, __pyx_L1_error)
+  __pyx_v_cconeOrientation = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":293
- *         cdef const_char *cname = NULL
- *         CHKERR( DMPlexGetLabelName(self.dm, cindex, &cname) )
- *         return bytes2str(cname)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":187
+ *         cdef PetscInt cconePos = asInt(conePos)
+ *         cdef PetscInt cconeOrientation = asInt(coneOrientation)
+ *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )             # <<<<<<<<<<<<<<
  * 
- *     def hasLabel(self, name):
+ *     def getConeOrientation(self, p):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cname); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 293; __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_8petsc4py_5PETSc_CHKERR(DMPlexInsertConeOrientation(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cconePos, __pyx_v_cconeOrientation)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 187, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":289
- *         return toInt(nLabels)
+  /* "PETSc/DMPlex.pyx":183
+ *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
  * 
- *     def getLabelName(self, index):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cindex = asInt(index)
- *         cdef const_char *cname = NULL
+ *     def insertConeOrientation(self, p, conePos, coneOrientation):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt cconePos = asInt(conePos)
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelName", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -215016,27 +217352,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getLabelName(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":295
- *         return bytes2str(cname)
+/* "PETSc/DMPlex.pyx":189
+ *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
  * 
- *     def hasLabel(self, name):             # <<<<<<<<<<<<<<
- *         cdef PetscBool flag = PETSC_FALSE
- *         cdef const_char *cname = NULL
+ *     def getConeOrientation(self, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65hasLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_64hasLabel[] = "DMPlex.hasLabel(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65hasLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37getConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_36getConeOrientation[] = "DMPlex.getConeOrientation(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37getConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("hasLabel (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getConeOrientation (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -215049,146 +217382,197 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65hasLabel(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_name)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 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, "hasLabel") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConeOrientation") < 0)) __PYX_ERR(42, 189, __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_name = values[0];
+    __pyx_v_p = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("hasLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getConeOrientation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 189, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.hasLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_64hasLabel(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64hasLabel(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name) {
-  PetscBool __pyx_v_flag;
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_pStart;
+  PetscInt __pyx_v_pEnd;
+  PetscInt __pyx_v_norie;
+  const PetscInt *__pyx_v_iorie;
   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("hasLabel", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getConeOrientation", 0);
 
-  /* "PETSc/DMPlex.pyx":296
+  /* "PETSc/DMPlex.pyx":190
  * 
- *     def hasLabel(self, name):
- *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
+ *     def getConeOrientation(self, p):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_v_flag = PETSC_FALSE;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 190, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":297
- *     def hasLabel(self, name):
- *         cdef PetscBool flag = PETSC_FALSE
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexHasLabel(self.dm, cname, &flag) )
+  /* "PETSc/DMPlex.pyx":191
+ *     def getConeOrientation(self, p):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
  */
-  __pyx_v_cname = NULL;
+  __pyx_v_pStart = 0;
+  __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":298
- *         cdef PetscBool flag = PETSC_FALSE
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexHasLabel(self.dm, cname, &flag) )
- *         return <bint> flag
+  /* "PETSc/DMPlex.pyx":192
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt        norie = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 192, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":299
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexHasLabel(self.dm, cname, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+  /* "PETSc/DMPlex.pyx":193
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
+ *         cdef PetscInt        norie = 0
+ *         cdef const_PetscInt *iorie = NULL
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
+    if (__pyx_t_4) {
+    } else {
+      __pyx_t_3 = __pyx_t_4;
+      goto __pyx_L3_bool_binop_done;
+    }
+    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_L3_bool_binop_done:;
+    if (unlikely(!__pyx_t_3)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(42, 193, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/DMPlex.pyx":194
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt        norie = 0             # <<<<<<<<<<<<<<
+ *         cdef const_PetscInt *iorie = NULL
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
+ */
+  __pyx_v_norie = 0;
+
+  /* "PETSc/DMPlex.pyx":195
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt        norie = 0
+ *         cdef const_PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
+ *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )
+ */
+  __pyx_v_iorie = NULL;
+
+  /* "PETSc/DMPlex.pyx":196
+ *         cdef PetscInt        norie = 0
+ *         cdef const_PetscInt *iorie = NULL
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )
+ *         return array_i(norie, iorie)
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_norie))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 196, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":197
+ *         cdef const_PetscInt *iorie = NULL
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
+ *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )             # <<<<<<<<<<<<<<
+ *         return array_i(norie, iorie)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexHasLabel(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, (&__pyx_v_flag))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeOrientation(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_iorie))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 197, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":300
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexHasLabel(self.dm, cname, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":198
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
+ *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )
+ *         return array_i(norie, iorie)             # <<<<<<<<<<<<<<
  * 
- *     def createLabel(self, name):
+ *     def setConeOrientation(self, p, orientation):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_norie, __pyx_v_iorie)); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 198, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":295
- *         return bytes2str(cname)
+  /* "PETSc/DMPlex.pyx":189
+ *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
  * 
- *     def hasLabel(self, name):             # <<<<<<<<<<<<<<
- *         cdef PetscBool flag = PETSC_FALSE
- *         cdef const_char *cname = NULL
+ *     def getConeOrientation(self, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.hasLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":302
- *         return <bint> flag
+/* "PETSc/DMPlex.pyx":200
+ *         return array_i(norie, iorie)
  * 
- *     def createLabel(self, name):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
+ *     def setConeOrientation(self, p, orientation):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67createLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_66createLabel[] = "DMPlex.createLabel(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67createLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_38setConeOrientation[] = "DMPlex.setConeOrientation(self, p, orientation)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
+  PyObject *__pyx_v_orientation = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createLabel (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setConeOrientation (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_orientation,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;
@@ -215196,119 +217580,225 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67createLabel(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_orientation)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setConeOrientation", 1, 2, 2, 1); __PYX_ERR(42, 200, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createLabel") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConeOrientation") < 0)) __PYX_ERR(42, 200, __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_name = values[0];
+    __pyx_v_p = values[0];
+    __pyx_v_orientation = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConeOrientation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 200, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_66createLabel(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_orientation);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66createLabel(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name) {
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_orientation) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_pStart;
+  PetscInt __pyx_v_pEnd;
+  PetscInt __pyx_v_ncone;
+  PetscInt __pyx_v_norie;
+  PetscInt *__pyx_v_iorie;
   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("createLabel", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("setConeOrientation", 0);
+  __Pyx_INCREF(__pyx_v_orientation);
 
-  /* "PETSc/DMPlex.pyx":303
+  /* "PETSc/DMPlex.pyx":201
  * 
- *     def createLabel(self, name):
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexCreateLabel(self.dm, cname) )
+ *     def setConeOrientation(self, p, orientation):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_v_cname = NULL;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 201, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":304
- *     def createLabel(self, name):
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexCreateLabel(self.dm, cname) )
+  /* "PETSc/DMPlex.pyx":202
+ *     def setConeOrientation(self, p, orientation):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
+ */
+  __pyx_v_pStart = 0;
+  __pyx_v_pEnd = 0;
+
+  /* "PETSc/DMPlex.pyx":203
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ncone = 0
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 203, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":204
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ncone = 0
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
+    if (__pyx_t_4) {
+    } else {
+      __pyx_t_3 = __pyx_t_4;
+      goto __pyx_L3_bool_binop_done;
+    }
+    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_L3_bool_binop_done:;
+    if (unlikely(!__pyx_t_3)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(42, 204, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/DMPlex.pyx":205
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ncone = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
+ *         cdef PetscInt  norie = 0
+ */
+  __pyx_v_ncone = 0;
+
+  /* "PETSc/DMPlex.pyx":206
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ncone = 0
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  norie = 0
+ *         cdef PetscInt *iorie = NULL
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetConeSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_ncone))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 206, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":207
+ *         cdef PetscInt ncone = 0
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
+ *         cdef PetscInt  norie = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt *iorie = NULL
+ *         orientation = iarray_i(orientation, &norie, &iorie)
+ */
+  __pyx_v_norie = 0;
+
+  /* "PETSc/DMPlex.pyx":208
+ *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
+ *         cdef PetscInt  norie = 0
+ *         cdef PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
+ *         orientation = iarray_i(orientation, &norie, &iorie)
+ *         assert norie == ncone
+ */
+  __pyx_v_iorie = NULL;
+
+  /* "PETSc/DMPlex.pyx":209
+ *         cdef PetscInt  norie = 0
+ *         cdef PetscInt *iorie = NULL
+ *         orientation = iarray_i(orientation, &norie, &iorie)             # <<<<<<<<<<<<<<
+ *         assert norie == ncone
+ *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
+ */
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_orientation, (&__pyx_v_norie), (&__pyx_v_iorie))); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 209, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF_SET(__pyx_v_orientation, __pyx_t_5);
+  __pyx_t_5 = 0;
+
+  /* "PETSc/DMPlex.pyx":210
+ *         cdef PetscInt *iorie = NULL
+ *         orientation = iarray_i(orientation, &norie, &iorie)
+ *         assert norie == ncone             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
-  __pyx_t_1 = 0;
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(!((__pyx_v_norie == __pyx_v_ncone) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(42, 210, __pyx_L1_error)
+    }
+  }
+  #endif
 
-  /* "PETSc/DMPlex.pyx":305
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexCreateLabel(self.dm, cname) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":211
+ *         orientation = iarray_i(orientation, &norie, &iorie)
+ *         assert norie == ncone
+ *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )             # <<<<<<<<<<<<<<
  * 
- *     def removeLabel(self, name):
+ *     def getSupportSize(self, p):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateLabel(__pyx_v_self->__pyx_base.dm, __pyx_v_cname)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetConeOrientation(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_iorie)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 211, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":302
- *         return <bint> flag
+  /* "PETSc/DMPlex.pyx":200
+ *         return array_i(norie, iorie)
  * 
- *     def createLabel(self, name):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
+ *     def setConeOrientation(self, p, orientation):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 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("petsc4py.PETSc.DMPlex.createLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setConeOrientation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XDECREF(__pyx_v_orientation);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":307
- *         CHKERR( DMPlexCreateLabel(self.dm, cname) )
+/* "PETSc/DMPlex.pyx":213
+ *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
- *     def removeLabel(self, name):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         cdef PetscDMLabel clbl = NULL
+ *     def getSupportSize(self, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69removeLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_68removeLabel[] = "DMPlex.removeLabel(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69removeLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41getSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_40getSupportSize[] = "DMPlex.getSupportSize(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41getSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("removeLabel (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getSupportSize (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -215321,130 +217811,172 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69removeLabel(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 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, "removeLabel") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSupportSize") < 0)) __PYX_ERR(42, 213, __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_name = values[0];
+    __pyx_v_p = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("removeLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getSupportSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 213, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.removeLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getSupportSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_68removeLabel(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68removeLabel(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name) {
-  const char *__pyx_v_cname;
-  DMLabel __pyx_v_clbl;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_pStart;
+  PetscInt __pyx_v_pEnd;
+  PetscInt __pyx_v_ssize;
   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("removeLabel", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getSupportSize", 0);
 
-  /* "PETSc/DMPlex.pyx":308
+  /* "PETSc/DMPlex.pyx":214
  * 
- *     def removeLabel(self, name):
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscDMLabel clbl = NULL
- *         name = str2bytes(name, &cname)
+ *     def getSupportSize(self, p):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_v_cname = NULL;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 214, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":309
- *     def removeLabel(self, name):
- *         cdef const_char *cname = NULL
- *         cdef PetscDMLabel clbl = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexRemoveLabel(self.dm, cname, &clbl) )
+  /* "PETSc/DMPlex.pyx":215
+ *     def getSupportSize(self, p):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
  */
-  __pyx_v_clbl = NULL;
+  __pyx_v_pStart = 0;
+  __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":310
- *         cdef const_char *cname = NULL
- *         cdef PetscDMLabel clbl = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexRemoveLabel(self.dm, cname, &clbl) )
+  /* "PETSc/DMPlex.pyx":216
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ssize = 0
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 216, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":217
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ssize = 0
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
+    if (__pyx_t_4) {
+    } else {
+      __pyx_t_3 = __pyx_t_4;
+      goto __pyx_L3_bool_binop_done;
+    }
+    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_L3_bool_binop_done:;
+    if (unlikely(!__pyx_t_3)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(42, 217, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/DMPlex.pyx":218
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ssize = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )
+ *         return toInt(ssize)
+ */
+  __pyx_v_ssize = 0;
+
+  /* "PETSc/DMPlex.pyx":219
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ssize = 0
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )             # <<<<<<<<<<<<<<
+ *         return toInt(ssize)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetSupportSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_ssize))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 219, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":311
- *         cdef PetscDMLabel clbl = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexRemoveLabel(self.dm, cname, &clbl) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":220
+ *         cdef PetscInt ssize = 0
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )
+ *         return toInt(ssize)             # <<<<<<<<<<<<<<
  * 
- *     def getLabelValue(self, name, point):
+ *     def setSupportSize(self, p, size):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRemoveLabel(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, (&__pyx_v_clbl))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ssize); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 220, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":307
- *         CHKERR( DMPlexCreateLabel(self.dm, cname) )
+  /* "PETSc/DMPlex.pyx":213
+ *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
- *     def removeLabel(self, name):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         cdef PetscDMLabel clbl = NULL
+ *     def getSupportSize(self, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 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("petsc4py.PETSc.DMPlex.removeLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getSupportSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":313
- *         CHKERR( DMPlexRemoveLabel(self.dm, cname, &clbl) )
+/* "PETSc/DMPlex.pyx":222
+ *         return toInt(ssize)
  * 
- *     def getLabelValue(self, name, point):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cpoint = asInt(point), value = 0
- *         cdef const_char *cname = NULL
+ *     def setSupportSize(self, p, size):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_70getLabelValue[] = "DMPlex.getLabelValue(self, name, point)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  PyObject *__pyx_v_point = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_42setSupportSize[] = "DMPlex.setSupportSize(self, p, size)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
+  PyObject *__pyx_v_size = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLabelValue (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setSupportSize (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_point,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_size,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -215458,16 +217990,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getLabelValue(PyObject *__p
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("getLabelValue", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setSupportSize", 1, 2, 2, 1); __PYX_ERR(42, 222, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelValue") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSupportSize") < 0)) __PYX_ERR(42, 222, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -215475,144 +218007,153 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getLabelValue(PyObject *__p
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_name = values[0];
-    __pyx_v_point = values[1];
+    __pyx_v_p = values[0];
+    __pyx_v_size = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSupportSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 222, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setSupportSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_70getLabelValue(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name, __pyx_v_point);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_size);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getLabelValue(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point) {
-  PetscInt __pyx_v_cpoint;
-  PetscInt __pyx_v_value;
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_pStart;
+  PetscInt __pyx_v_pEnd;
+  PetscInt __pyx_v_ssize;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getLabelValue", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setSupportSize", 0);
 
-  /* "PETSc/DMPlex.pyx":314
+  /* "PETSc/DMPlex.pyx":223
  * 
- *     def getLabelValue(self, name, point):
- *         cdef PetscInt cpoint = asInt(point), value = 0             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
+ *     def setSupportSize(self, p, size):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cpoint = __pyx_t_1;
-  __pyx_v_value = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 223, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":315
- *     def getLabelValue(self, name, point):
- *         cdef PetscInt cpoint = asInt(point), value = 0
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetLabelValue(self.dm, cname, cpoint, &value) )
+  /* "PETSc/DMPlex.pyx":224
+ *     def setSupportSize(self, p, size):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
  */
-  __pyx_v_cname = NULL;
+  __pyx_v_pStart = 0;
+  __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":316
- *         cdef PetscInt cpoint = asInt(point), value = 0
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetLabelValue(self.dm, cname, cpoint, &value) )
- *         return toInt(value)
+  /* "PETSc/DMPlex.pyx":225
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ssize = asInt(size)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 225, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":317
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetLabelValue(self.dm, cname, cpoint, &value) )             # <<<<<<<<<<<<<<
- *         return toInt(value)
+  /* "PETSc/DMPlex.pyx":226
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ssize = asInt(size)
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
+    if (__pyx_t_4) {
+    } else {
+      __pyx_t_3 = __pyx_t_4;
+      goto __pyx_L3_bool_binop_done;
+    }
+    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_L3_bool_binop_done:;
+    if (unlikely(!__pyx_t_3)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(42, 226, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/DMPlex.pyx":227
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ssize = asInt(size)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetLabelValue(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, __pyx_v_cpoint, (&__pyx_v_value))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 227, __pyx_L1_error)
+  __pyx_v_ssize = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":318
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetLabelValue(self.dm, cname, cpoint, &value) )
- *         return toInt(value)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":228
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt ssize = asInt(size)
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )             # <<<<<<<<<<<<<<
  * 
- *     def setLabelValue(self, name, point, value):
+ *     def getSupport(self, p):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __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;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetSupportSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_ssize)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 228, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":313
- *         CHKERR( DMPlexRemoveLabel(self.dm, cname, &clbl) )
+  /* "PETSc/DMPlex.pyx":222
+ *         return toInt(ssize)
  * 
- *     def getLabelValue(self, name, point):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cpoint = asInt(point), value = 0
- *         cdef const_char *cname = NULL
+ *     def setSupportSize(self, p, size):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setSupportSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":320
- *         return toInt(value)
+/* "PETSc/DMPlex.pyx":230
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
  * 
- *     def setLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
- *         cdef const_char *cname = NULL
+ *     def getSupport(self, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73setLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_72setLabelValue[] = "DMPlex.setLabelValue(self, name, point, value)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73setLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  PyObject *__pyx_v_point = 0;
-  PyObject *__pyx_v_value = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_45getSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_44getSupport[] = "DMPlex.getSupport(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_45getSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setLabelValue (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getSupport (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_point,&__pyx_n_s_value,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,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;
@@ -215620,156 +218161,196 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73setLabelValue(PyObject *__p
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, 2); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLabelValue") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSupport") < 0)) __PYX_ERR(42, 230, __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_name = values[0];
-    __pyx_v_point = values[1];
-    __pyx_v_value = values[2];
+    __pyx_v_p = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getSupport", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 230, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getSupport", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_72setLabelValue(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name, __pyx_v_point, __pyx_v_value);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72setLabelValue(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value) {
-  PetscInt __pyx_v_cpoint;
-  PetscInt __pyx_v_cvalue;
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_pStart;
+  PetscInt __pyx_v_pEnd;
+  PetscInt __pyx_v_nsupp;
+  const PetscInt *__pyx_v_isupp;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setLabelValue", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getSupport", 0);
 
-  /* "PETSc/DMPlex.pyx":321
+  /* "PETSc/DMPlex.pyx":231
  * 
- *     def setLabelValue(self, name, point, value):
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
+ *     def getSupport(self, p):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cpoint = __pyx_t_1;
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cvalue = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 231, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":322
- *     def setLabelValue(self, name, point, value):
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexSetLabelValue(self.dm, cname, cpoint, cvalue) )
+  /* "PETSc/DMPlex.pyx":232
+ *     def getSupport(self, p):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
  */
-  __pyx_v_cname = NULL;
+  __pyx_v_pStart = 0;
+  __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":323
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetLabelValue(self.dm, cname, cpoint, cvalue) )
+  /* "PETSc/DMPlex.pyx":233
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt        nsupp = 0
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 233, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":234
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
+ *         cdef PetscInt        nsupp = 0
+ *         cdef const_PetscInt *isupp = NULL
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
+    if (__pyx_t_4) {
+    } else {
+      __pyx_t_3 = __pyx_t_4;
+      goto __pyx_L3_bool_binop_done;
+    }
+    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_L3_bool_binop_done:;
+    if (unlikely(!__pyx_t_3)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(42, 234, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/DMPlex.pyx":235
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt        nsupp = 0             # <<<<<<<<<<<<<<
+ *         cdef const_PetscInt *isupp = NULL
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
+ */
+  __pyx_v_nsupp = 0;
+
+  /* "PETSc/DMPlex.pyx":236
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt        nsupp = 0
+ *         cdef const_PetscInt *isupp = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
+ *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )
+ */
+  __pyx_v_isupp = NULL;
+
+  /* "PETSc/DMPlex.pyx":237
+ *         cdef PetscInt        nsupp = 0
+ *         cdef const_PetscInt *isupp = NULL
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )
+ *         return array_i(nsupp, isupp)
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetSupportSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_nsupp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 237, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":238
+ *         cdef const_PetscInt *isupp = NULL
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
+ *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )             # <<<<<<<<<<<<<<
+ *         return array_i(nsupp, isupp)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetSupport(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_isupp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 238, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":324
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexSetLabelValue(self.dm, cname, cpoint, cvalue) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":239
+ *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
+ *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )
+ *         return array_i(nsupp, isupp)             # <<<<<<<<<<<<<<
  * 
- *     def clearLabelValue(self, name, point, value):
+ *     def setSupport(self, p, supp):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetLabelValue(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, __pyx_v_cpoint, __pyx_v_cvalue)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nsupp, __pyx_v_isupp)); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 239, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":320
- *         return toInt(value)
+  /* "PETSc/DMPlex.pyx":230
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
  * 
- *     def setLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
- *         cdef const_char *cname = NULL
+ *     def getSupport(self, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getSupport", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":326
- *         CHKERR( DMPlexSetLabelValue(self.dm, cname, cpoint, cvalue) )
+/* "PETSc/DMPlex.pyx":241
+ *         return array_i(nsupp, isupp)
  * 
- *     def clearLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
- *         cdef const_char *cname = NULL
+ *     def setSupport(self, p, supp):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75clearLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_74clearLabelValue[] = "DMPlex.clearLabelValue(self, name, point, value)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75clearLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  PyObject *__pyx_v_point = 0;
-  PyObject *__pyx_v_value = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_46setSupport[] = "DMPlex.setSupport(self, p, supp)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
+  PyObject *__pyx_v_supp = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("clearLabelValue (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setSupport (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_point,&__pyx_n_s_value,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_supp,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  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;
@@ -215778,1202 +218359,739 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75clearLabelValue(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_supp)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, 2); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setSupport", 1, 2, 2, 1); __PYX_ERR(42, 241, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clearLabelValue") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSupport") < 0)) __PYX_ERR(42, 241, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+    } 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);
-      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_name = values[0];
-    __pyx_v_point = values[1];
-    __pyx_v_value = values[2];
+    __pyx_v_p = values[0];
+    __pyx_v_supp = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setSupport", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 241, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.clearLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setSupport", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_74clearLabelValue(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name, __pyx_v_point, __pyx_v_value);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_supp);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_74clearLabelValue(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value) {
-  PetscInt __pyx_v_cpoint;
-  PetscInt __pyx_v_cvalue;
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_supp) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_pStart;
+  PetscInt __pyx_v_pEnd;
+  PetscInt __pyx_v_nsupp;
+  PetscInt *__pyx_v_isupp;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("clearLabelValue", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("setSupport", 0);
+  __Pyx_INCREF(__pyx_v_supp);
 
-  /* "PETSc/DMPlex.pyx":327
+  /* "PETSc/DMPlex.pyx":242
  * 
- *     def clearLabelValue(self, name, point, value):
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
+ *     def setSupport(self, p, supp):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 242, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":243
+ *     def setSupport(self, p, supp):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
+ */
+  __pyx_v_pStart = 0;
+  __pyx_v_pEnd = 0;
+
+  /* "PETSc/DMPlex.pyx":244
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt  nsupp = 0
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 244, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":245
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  nsupp = 0
+ *         cdef PetscInt *isupp = NULL
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = ((__pyx_v_cp >= __pyx_v_pStart) != 0);
+    if (__pyx_t_4) {
+    } else {
+      __pyx_t_3 = __pyx_t_4;
+      goto __pyx_L3_bool_binop_done;
+    }
+    __pyx_t_4 = ((__pyx_v_cp < __pyx_v_pEnd) != 0);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_L3_bool_binop_done:;
+    if (unlikely(!__pyx_t_3)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(42, 245, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/DMPlex.pyx":246
+ *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt  nsupp = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt *isupp = NULL
+ *         supp = iarray_i(supp, &nsupp, &isupp)
+ */
+  __pyx_v_nsupp = 0;
+
+  /* "PETSc/DMPlex.pyx":247
+ *         assert cp>=pStart and cp<pEnd
+ *         cdef PetscInt  nsupp = 0
+ *         cdef PetscInt *isupp = NULL             # <<<<<<<<<<<<<<
+ *         supp = iarray_i(supp, &nsupp, &isupp)
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, nsupp) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cpoint = __pyx_t_1;
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cvalue = __pyx_t_1;
+  __pyx_v_isupp = NULL;
 
-  /* "PETSc/DMPlex.pyx":328
- *     def clearLabelValue(self, name, point, value):
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexClearLabelValue(self.dm, cname, cpoint, cvalue) )
+  /* "PETSc/DMPlex.pyx":248
+ *         cdef PetscInt  nsupp = 0
+ *         cdef PetscInt *isupp = NULL
+ *         supp = iarray_i(supp, &nsupp, &isupp)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, nsupp) )
+ *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
  */
-  __pyx_v_cname = NULL;
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_supp, (&__pyx_v_nsupp), (&__pyx_v_isupp))); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 248, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF_SET(__pyx_v_supp, __pyx_t_5);
+  __pyx_t_5 = 0;
 
-  /* "PETSc/DMPlex.pyx":329
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexClearLabelValue(self.dm, cname, cpoint, cvalue) )
+  /* "PETSc/DMPlex.pyx":249
+ *         cdef PetscInt *isupp = NULL
+ *         supp = iarray_i(supp, &nsupp, &isupp)
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, nsupp) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetSupportSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_nsupp)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 249, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":330
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexClearLabelValue(self.dm, cname, cpoint, cvalue) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":250
+ *         supp = iarray_i(supp, &nsupp, &isupp)
+ *         CHKERR( DMPlexSetSupportSize(self.dm, cp, nsupp) )
+ *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )             # <<<<<<<<<<<<<<
  * 
- *     def getLabelSize(self, name):
+ *     def getMaxSizes(self):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexClearLabelValue(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, __pyx_v_cpoint, __pyx_v_cvalue)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetSupport(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_isupp)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 250, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":326
- *         CHKERR( DMPlexSetLabelValue(self.dm, cname, cpoint, cvalue) )
+  /* "PETSc/DMPlex.pyx":241
+ *         return array_i(nsupp, isupp)
  * 
- *     def clearLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
- *         cdef const_char *cname = NULL
+ *     def setSupport(self, p, supp):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.clearLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setSupport", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XDECREF(__pyx_v_supp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":332
- *         CHKERR( DMPlexClearLabelValue(self.dm, cname, cpoint, cvalue) )
+/* "PETSc/DMPlex.pyx":252
+ *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
  * 
- *     def getLabelSize(self, name):             # <<<<<<<<<<<<<<
- *         cdef PetscInt size = 0
- *         cdef const_char *cname = NULL
+ *     def getMaxSizes(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
+ *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77getLabelSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_76getLabelSize[] = "DMPlex.getLabelSize(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77getLabelSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_49getMaxSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_48getMaxSizes[] = "DMPlex.getMaxSizes(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_49getMaxSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLabelSize (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,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_name)) != 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, "getLabelSize") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 332; __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_name = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_76getLabelSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name);
+  __Pyx_RefNannySetupContext("getMaxSizes (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getMaxSizes", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMaxSizes", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76getLabelSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name) {
-  PetscInt __pyx_v_size;
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+  PetscInt __pyx_v_maxConeSize;
+  PetscInt __pyx_v_maxSupportSize;
   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("getLabelSize", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getMaxSizes", 0);
 
-  /* "PETSc/DMPlex.pyx":333
+  /* "PETSc/DMPlex.pyx":253
  * 
- *     def getLabelSize(self, name):
- *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- */
-  __pyx_v_size = 0;
-
-  /* "PETSc/DMPlex.pyx":334
- *     def getLabelSize(self, name):
- *         cdef PetscInt size = 0
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetLabelSize(self.dm, cname, &size) )
- */
-  __pyx_v_cname = NULL;
-
-  /* "PETSc/DMPlex.pyx":335
- *         cdef PetscInt size = 0
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetLabelSize(self.dm, cname, &size) )
- *         return toInt(size)
+ *     def getMaxSizes(self):
+ *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
+ *         return toInt(maxConeSize), toInt(maxSupportSize)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_maxConeSize = 0;
+  __pyx_v_maxSupportSize = 0;
 
-  /* "PETSc/DMPlex.pyx":336
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetLabelSize(self.dm, cname, &size) )             # <<<<<<<<<<<<<<
- *         return toInt(size)
+  /* "PETSc/DMPlex.pyx":254
+ *     def getMaxSizes(self):
+ *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
+ *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )             # <<<<<<<<<<<<<<
+ *         return toInt(maxConeSize), toInt(maxSupportSize)
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetLabelSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetMaxSizes(__pyx_v_self->__pyx_base.dm, (&__pyx_v_maxConeSize), (&__pyx_v_maxSupportSize))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 254, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":337
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetLabelSize(self.dm, cname, &size) )
- *         return toInt(size)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":255
+ *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
+ *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
+ *         return toInt(maxConeSize), toInt(maxSupportSize)             # <<<<<<<<<<<<<<
  * 
- *     def getLabelIdIS(self, name):
+ *     def symmetrize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxConeSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 255, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxSupportSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 255, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 255, __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;
 
-  /* "PETSc/DMPlex.pyx":332
- *         CHKERR( DMPlexClearLabelValue(self.dm, cname, cpoint, cvalue) )
+  /* "PETSc/DMPlex.pyx":252
+ *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
  * 
- *     def getLabelSize(self, name):             # <<<<<<<<<<<<<<
- *         cdef PetscInt size = 0
- *         cdef const_char *cname = NULL
+ *     def getMaxSizes(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
+ *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getMaxSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":339
- *         return toInt(size)
+/* "PETSc/DMPlex.pyx":257
+ *         return toInt(maxConeSize), toInt(maxSupportSize)
+ * 
+ *     def symmetrize(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSymmetrize(self.dm) )
  * 
- *     def getLabelIdIS(self, name):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79getLabelIdIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_78getLabelIdIS[] = "DMPlex.getLabelIdIS(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79getLabelIdIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_51symmetrize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_50symmetrize[] = "DMPlex.symmetrize(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_51symmetrize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLabelIdIS (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,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_name)) != 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, "getLabelIdIS") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 339; __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_name = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelIdIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelIdIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_78getLabelIdIS(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name);
+  __Pyx_RefNannySetupContext("symmetrize (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("symmetrize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "symmetrize", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_50symmetrize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_78getLabelIdIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name) {
-  const char *__pyx_v_cname;
-  struct PyPetscISObject *__pyx_v_lis = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_50symmetrize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__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("getLabelIdIS", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("symmetrize", 0);
 
-  /* "PETSc/DMPlex.pyx":340
+  /* "PETSc/DMPlex.pyx":258
  * 
- *     def getLabelIdIS(self, name):
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         cdef IS lis = IS()
- */
-  __pyx_v_cname = NULL;
-
-  /* "PETSc/DMPlex.pyx":341
- *     def getLabelIdIS(self, name):
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         cdef IS lis = IS()
- *         CHKERR( DMPlexGetLabelIdIS(self.dm, cname, &lis.iset) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DMPlex.pyx":342
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         cdef IS lis = IS()             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetLabelIdIS(self.dm, cname, &lis.iset) )
- *         return lis
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_lis = ((struct PyPetscISObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DMPlex.pyx":343
- *         name = str2bytes(name, &cname)
- *         cdef IS lis = IS()
- *         CHKERR( DMPlexGetLabelIdIS(self.dm, cname, &lis.iset) )             # <<<<<<<<<<<<<<
- *         return lis
+ *     def symmetrize(self):
+ *         CHKERR( DMPlexSymmetrize(self.dm) )             # <<<<<<<<<<<<<<
  * 
+ *     def stratify(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetLabelIdIS(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, (&__pyx_v_lis->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSymmetrize(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 258, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":344
- *         cdef IS lis = IS()
- *         CHKERR( DMPlexGetLabelIdIS(self.dm, cname, &lis.iset) )
- *         return lis             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":257
+ *         return toInt(maxConeSize), toInt(maxSupportSize)
  * 
- *     def setLabelOutput(self, name, output):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_lis));
-  __pyx_r = ((PyObject *)__pyx_v_lis);
-  goto __pyx_L0;
-
-  /* "PETSc/DMPlex.pyx":339
- *         return toInt(size)
+ *     def symmetrize(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSymmetrize(self.dm) )
  * 
- *     def getLabelIdIS(self, name):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelIdIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.symmetrize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_lis);
-  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":346
- *         return lis
+/* "PETSc/DMPlex.pyx":260
+ *         CHKERR( DMPlexSymmetrize(self.dm) )
+ * 
+ *     def stratify(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexStratify(self.dm) )
  * 
- *     def setLabelOutput(self, name, output):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_80setLabelOutput[] = "DMPlex.setLabelOutput(self, name, output)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  PyObject *__pyx_v_output = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_53stratify(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_52stratify[] = "DMPlex.stratify(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_53stratify(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setLabelOutput (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_output,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_name)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_output)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setLabelOutput", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLabelOutput") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 346; __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_name = values[0];
-    __pyx_v_output = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLabelOutput", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_80setLabelOutput(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name, __pyx_v_output);
+  __Pyx_RefNannySetupContext("stratify (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("stratify", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "stratify", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_52stratify(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setLabelOutput(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_output) {
-  const char *__pyx_v_cname;
-  PetscBool __pyx_v_coutput;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_52stratify(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PetscBool __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setLabelOutput", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("stratify", 0);
 
-  /* "PETSc/DMPlex.pyx":347
+  /* "PETSc/DMPlex.pyx":261
  * 
- *     def setLabelOutput(self, name, output):
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         cdef PetscBool coutput = output
- */
-  __pyx_v_cname = NULL;
-
-  /* "PETSc/DMPlex.pyx":348
- *     def setLabelOutput(self, name, output):
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         cdef PetscBool coutput = output
- *         CHKERR( DMPlexSetLabelOutput(self.dm, cname, coutput) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DMPlex.pyx":349
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         cdef PetscBool coutput = output             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexSetLabelOutput(self.dm, cname, coutput) )
+ *     def stratify(self):
+ *         CHKERR( DMPlexStratify(self.dm) )             # <<<<<<<<<<<<<<
  * 
+ *     def orient(self):
  */
-  __pyx_t_2 = ((PetscBool)PyInt_AsLong(__pyx_v_output)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_coutput = __pyx_t_2;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexStratify(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 261, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":350
- *         name = str2bytes(name, &cname)
- *         cdef PetscBool coutput = output
- *         CHKERR( DMPlexSetLabelOutput(self.dm, cname, coutput) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":260
+ *         CHKERR( DMPlexSymmetrize(self.dm) )
  * 
- *     def getLabelOutput(self, name):
- */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetLabelOutput(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, __pyx_v_coutput)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/DMPlex.pyx":346
- *         return lis
+ *     def stratify(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexStratify(self.dm) )
  * 
- *     def setLabelOutput(self, name, output):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.stratify", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":352
- *         CHKERR( DMPlexSetLabelOutput(self.dm, cname, coutput) )
+/* "PETSc/DMPlex.pyx":263
+ *         CHKERR( DMPlexStratify(self.dm) )
+ * 
+ *     def orient(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexOrient(self.dm) )
  * 
- *     def getLabelOutput(self, name):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83getLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_82getLabelOutput[] = "DMPlex.getLabelOutput(self, name)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83getLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_55orient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_54orient[] = "DMPlex.orient(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_55orient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLabelOutput (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,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_name)) != 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, "getLabelOutput") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 352; __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_name = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelOutput", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_82getLabelOutput(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name);
+  __Pyx_RefNannySetupContext("orient (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("orient", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "orient", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_54orient(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82getLabelOutput(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name) {
-  const char *__pyx_v_cname;
-  PetscBool __pyx_v_coutput;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_54orient(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__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("getLabelOutput", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("orient", 0);
 
-  /* "PETSc/DMPlex.pyx":353
+  /* "PETSc/DMPlex.pyx":264
  * 
- *     def getLabelOutput(self, name):
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         cdef PetscBool coutput = PETSC_FALSE
- */
-  __pyx_v_cname = NULL;
-
-  /* "PETSc/DMPlex.pyx":354
- *     def getLabelOutput(self, name):
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         cdef PetscBool coutput = PETSC_FALSE
- *         CHKERR( DMPlexGetLabelOutput(self.dm, cname, &coutput) )
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/DMPlex.pyx":355
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         cdef PetscBool coutput = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetLabelOutput(self.dm, cname, &coutput) )
- *         return coutput
- */
-  __pyx_v_coutput = PETSC_FALSE;
-
-  /* "PETSc/DMPlex.pyx":356
- *         name = str2bytes(name, &cname)
- *         cdef PetscBool coutput = PETSC_FALSE
- *         CHKERR( DMPlexGetLabelOutput(self.dm, cname, &coutput) )             # <<<<<<<<<<<<<<
- *         return coutput
+ *     def orient(self):
+ *         CHKERR( DMPlexOrient(self.dm) )             # <<<<<<<<<<<<<<
  * 
+ *     def getCellNumbering(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetLabelOutput(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, (&__pyx_v_coutput))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexOrient(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 264, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":357
- *         cdef PetscBool coutput = PETSC_FALSE
- *         CHKERR( DMPlexGetLabelOutput(self.dm, cname, &coutput) )
- *         return coutput             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":263
+ *         CHKERR( DMPlexStratify(self.dm) )
  * 
- *     def getStratumSize(self, name, value):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_coutput); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  /* "PETSc/DMPlex.pyx":352
- *         CHKERR( DMPlexSetLabelOutput(self.dm, cname, coutput) )
+ *     def orient(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexOrient(self.dm) )
  * 
- *     def getLabelOutput(self, name):             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.orient", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":359
- *         return coutput
+/* "PETSc/DMPlex.pyx":266
+ *         CHKERR( DMPlexOrient(self.dm) )
  * 
- *     def getStratumSize(self, name, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt size = 0
- *         cdef PetscInt cvalue = asInt(value)
+ *     def getCellNumbering(self):             # <<<<<<<<<<<<<<
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85getStratumSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_84getStratumSize[] = "DMPlex.getStratumSize(self, name, value)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85getStratumSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  PyObject *__pyx_v_value = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_57getCellNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_56getCellNumbering[] = "DMPlex.getCellNumbering(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_57getCellNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getStratumSize (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,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_name)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("getStratumSize", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getStratumSize") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 359; __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_name = values[0];
-    __pyx_v_value = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getStratumSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getStratumSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_84getStratumSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
+  __Pyx_RefNannySetupContext("getCellNumbering (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getCellNumbering", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCellNumbering", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84getStratumSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
-  PetscInt __pyx_v_size;
-  PetscInt __pyx_v_cvalue;
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+  struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __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("getStratumSize", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getCellNumbering", 0);
 
-  /* "PETSc/DMPlex.pyx":360
+  /* "PETSc/DMPlex.pyx":267
  * 
- *     def getStratumSize(self, name, value):
- *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL
- */
-  __pyx_v_size = 0;
-
-  /* "PETSc/DMPlex.pyx":361
- *     def getStratumSize(self, name, value):
- *         cdef PetscInt size = 0
- *         cdef PetscInt cvalue = asInt(value)             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cvalue = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":362
- *         cdef PetscInt size = 0
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetStratumSize(self.dm, cname, cvalue, &size) )
+ *     def getCellNumbering(self):
+ *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
+ *         PetscINCREF(iset.obj)
  */
-  __pyx_v_cname = NULL;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 267, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":363
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetStratumSize(self.dm, cname, cvalue, &size) )
- *         return toInt(size)
+  /* "PETSc/DMPlex.pyx":268
+ *     def getCellNumbering(self):
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(iset.obj)
+ *         return iset
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetCellNumbering(__pyx_v_self->__pyx_base.dm, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 268, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":364
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetStratumSize(self.dm, cname, cvalue, &size) )             # <<<<<<<<<<<<<<
- *         return toInt(size)
+  /* "PETSc/DMPlex.pyx":269
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
+ *         PetscINCREF(iset.obj)             # <<<<<<<<<<<<<<
+ *         return iset
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetStratumSize(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, __pyx_v_cvalue, (&__pyx_v_size))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_iset->__pyx_base.obj);
 
-  /* "PETSc/DMPlex.pyx":365
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexGetStratumSize(self.dm, cname, cvalue, &size) )
- *         return toInt(size)             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":270
+ *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
+ *         PetscINCREF(iset.obj)
+ *         return iset             # <<<<<<<<<<<<<<
  * 
- *     def getStratumIS(self, name, value):
+ *     def getVertexNumbering(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 365; __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_iset));
+  __pyx_r = ((PyObject *)__pyx_v_iset);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":359
- *         return coutput
+  /* "PETSc/DMPlex.pyx":266
+ *         CHKERR( DMPlexOrient(self.dm) )
  * 
- *     def getStratumSize(self, name, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt size = 0
- *         cdef PetscInt cvalue = asInt(value)
+ *     def getCellNumbering(self):             # <<<<<<<<<<<<<<
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getStratumSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getCellNumbering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XDECREF((PyObject *)__pyx_v_iset);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":367
- *         return toInt(size)
+/* "PETSc/DMPlex.pyx":272
+ *         return iset
  * 
- *     def getStratumIS(self, name, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL
+ *     def getVertexNumbering(self):             # <<<<<<<<<<<<<<
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87getStratumIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_86getStratumIS[] = "DMPlex.getStratumIS(self, name, value)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87getStratumIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  PyObject *__pyx_v_value = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_59getVertexNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering[] = "DMPlex.getVertexNumbering(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_59getVertexNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getStratumIS (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,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_name)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("getStratumIS", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getStratumIS") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 367; __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_name = values[0];
-    __pyx_v_value = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getStratumIS", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getStratumIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_86getStratumIS(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
+  __Pyx_RefNannySetupContext("getVertexNumbering (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getVertexNumbering", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getVertexNumbering", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86getStratumIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
-  PetscInt __pyx_v_cvalue;
-  const char *__pyx_v_cname;
-  struct PyPetscISObject *__pyx_v_sis = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+  struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __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("getStratumIS", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getVertexNumbering", 0);
 
-  /* "PETSc/DMPlex.pyx":368
+  /* "PETSc/DMPlex.pyx":273
  * 
- *     def getStratumIS(self, name, value):
- *         cdef PetscInt cvalue = asInt(value)             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cvalue = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":369
- *     def getStratumIS(self, name, value):
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         cdef IS sis = IS()
- */
-  __pyx_v_cname = NULL;
-
-  /* "PETSc/DMPlex.pyx":370
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         cdef IS sis = IS()
- *         CHKERR( DMPlexGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
+ *     def getVertexNumbering(self):
+ *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
+ *         PetscINCREF(iset.obj)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 273, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":371
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         cdef IS sis = IS()             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
- *         return sis
+  /* "PETSc/DMPlex.pyx":274
+ *     def getVertexNumbering(self):
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(iset.obj)
+ *         return iset
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_v_sis = ((struct PyPetscISObject *)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetVertexNumbering(__pyx_v_self->__pyx_base.dm, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 274, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":372
- *         name = str2bytes(name, &cname)
- *         cdef IS sis = IS()
- *         CHKERR( DMPlexGetStratumIS(self.dm, cname, cvalue, &sis.iset) )             # <<<<<<<<<<<<<<
- *         return sis
+  /* "PETSc/DMPlex.pyx":275
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
+ *         PetscINCREF(iset.obj)             # <<<<<<<<<<<<<<
+ *         return iset
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetStratumIS(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, __pyx_v_cvalue, (&__pyx_v_sis->iset))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_iset->__pyx_base.obj);
 
-  /* "PETSc/DMPlex.pyx":373
- *         cdef IS sis = IS()
- *         CHKERR( DMPlexGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
- *         return sis             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":276
+ *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
+ *         PetscINCREF(iset.obj)
+ *         return iset             # <<<<<<<<<<<<<<
  * 
- *     def clearLabelStratum(self, name, value):
+ *     def createPointNumbering(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_sis));
-  __pyx_r = ((PyObject *)__pyx_v_sis);
+  __Pyx_INCREF(((PyObject *)__pyx_v_iset));
+  __pyx_r = ((PyObject *)__pyx_v_iset);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":367
- *         return toInt(size)
+  /* "PETSc/DMPlex.pyx":272
+ *         return iset
  * 
- *     def getStratumIS(self, name, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL
+ *     def getVertexNumbering(self):             # <<<<<<<<<<<<<<
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getStratumIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getVertexNumbering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_sis);
-  __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XDECREF((PyObject *)__pyx_v_iset);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":375
- *         return sis
+/* "PETSc/DMPlex.pyx":278
+ *         return iset
  * 
- *     def clearLabelStratum(self, name, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL
+ *     def createPointNumbering(self):             # <<<<<<<<<<<<<<
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89clearLabelStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_88clearLabelStratum[] = "DMPlex.clearLabelStratum(self, name, value)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89clearLabelStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  PyObject *__pyx_v_value = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_61createPointNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_60createPointNumbering[] = "DMPlex.createPointNumbering(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_61createPointNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("clearLabelStratum (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,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_name)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("clearLabelStratum", 1, 2, 2, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clearLabelStratum") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 375; __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_name = values[0];
-    __pyx_v_value = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("clearLabelStratum", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.clearLabelStratum", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_88clearLabelStratum(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
+  __Pyx_RefNannySetupContext("createPointNumbering (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("createPointNumbering", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createPointNumbering", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_60createPointNumbering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88clearLabelStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
-  PetscInt __pyx_v_cvalue;
-  const char *__pyx_v_cname;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60createPointNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+  struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __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("clearLabelStratum", 0);
-  __Pyx_INCREF(__pyx_v_name);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("createPointNumbering", 0);
 
-  /* "PETSc/DMPlex.pyx":376
+  /* "PETSc/DMPlex.pyx":279
  * 
- *     def clearLabelStratum(self, name, value):
- *         cdef PetscInt cvalue = asInt(value)             # <<<<<<<<<<<<<<
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_cvalue = __pyx_t_1;
-
-  /* "PETSc/DMPlex.pyx":377
- *     def clearLabelStratum(self, name, value):
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexClearLabelStratum(self.dm, cname, cvalue) )
+ *     def createPointNumbering(self):
+ *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )
+ *         return iset
  */
-  __pyx_v_cname = NULL;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 279, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":378
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexClearLabelStratum(self.dm, cname, cvalue) )
+  /* "PETSc/DMPlex.pyx":280
+ *     def createPointNumbering(self):
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )             # <<<<<<<<<<<<<<
+ *         return iset
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreatePointNumbering(__pyx_v_self->__pyx_base.dm, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 280, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":379
- *         cdef const_char *cname = NULL
- *         name = str2bytes(name, &cname)
- *         CHKERR( DMPlexClearLabelStratum(self.dm, cname, cvalue) )             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":281
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )
+ *         return iset             # <<<<<<<<<<<<<<
  * 
  *     def getDepth(self):
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexClearLabelStratum(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, __pyx_v_cvalue)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_iset));
+  __pyx_r = ((PyObject *)__pyx_v_iset);
+  goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":375
- *         return sis
+  /* "PETSc/DMPlex.pyx":278
+ *         return iset
  * 
- *     def clearLabelStratum(self, name, value):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cvalue = asInt(value)
- *         cdef const_char *cname = NULL
+ *     def createPointNumbering(self):             # <<<<<<<<<<<<<<
+ *         cdef IS iset = IS()
+ *         CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.clearLabelStratum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createPointNumbering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XDECREF((PyObject *)__pyx_v_iset);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":381
- *         CHKERR( DMPlexClearLabelStratum(self.dm, cname, cvalue) )
+/* "PETSc/DMPlex.pyx":283
+ *         return iset
  * 
  *     def getDepth(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt depth = 0
@@ -216981,34 +219099,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88clearLabelStratum(struct __
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91getDepth(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_90getDepth[] = "DMPlex.getDepth(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91getDepth(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_63getDepth(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_62getDepth[] = "DMPlex.getDepth(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_63getDepth(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDepth (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getDepth", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDepth", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_90getDepth(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90getDepth(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PetscInt __pyx_v_depth;
   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("getDepth", 0);
 
-  /* "PETSc/DMPlex.pyx":382
+  /* "PETSc/DMPlex.pyx":284
  * 
  *     def getDepth(self):
  *         cdef PetscInt depth = 0             # <<<<<<<<<<<<<<
@@ -217017,16 +219132,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90getDepth(struct __pyx_obj_8
  */
   __pyx_v_depth = 0;
 
-  /* "PETSc/DMPlex.pyx":383
+  /* "PETSc/DMPlex.pyx":285
  *     def getDepth(self):
  *         cdef PetscInt depth = 0
  *         CHKERR( DMPlexGetDepth(self.dm,&depth) )             # <<<<<<<<<<<<<<
  *         return toInt(depth)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetDepth(__pyx_v_self->__pyx_base.dm, (&__pyx_v_depth))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetDepth(__pyx_v_self->__pyx_base.dm, (&__pyx_v_depth))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 285, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":384
+  /* "PETSc/DMPlex.pyx":286
  *         cdef PetscInt depth = 0
  *         CHKERR( DMPlexGetDepth(self.dm,&depth) )
  *         return toInt(depth)             # <<<<<<<<<<<<<<
@@ -217034,14 +219149,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90getDepth(struct __pyx_obj_8
  *     def getDepthStratum(self, svalue):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_depth); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_depth); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":381
- *         CHKERR( DMPlexClearLabelStratum(self.dm, cname, cvalue) )
+  /* "PETSc/DMPlex.pyx":283
+ *         return iset
  * 
  *     def getDepth(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt depth = 0
@@ -217059,7 +219174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90getDepth(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":386
+/* "PETSc/DMPlex.pyx":288
  *         return toInt(depth)
  * 
  *     def getDepthStratum(self, svalue):             # <<<<<<<<<<<<<<
@@ -217068,13 +219183,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90getDepth(struct __pyx_obj_8
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_93getDepthStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_92getDepthStratum[] = "DMPlex.getDepthStratum(self, svalue)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_93getDepthStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepthStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_64getDepthStratum[] = "DMPlex.getDepthStratum(self, svalue)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepthStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_svalue = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDepthStratum (wrapper)", 0);
@@ -217096,7 +219208,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_93getDepthStratum(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDepthStratum") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDepthStratum") < 0)) __PYX_ERR(42, 288, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -217107,20 +219219,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_93getDepthStratum(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getDepthStratum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getDepthStratum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 288, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getDepthStratum", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_92getDepthStratum(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_svalue);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepthStratum(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_svalue);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getDepthStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepthStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue) {
   PetscInt __pyx_v_csvalue;
   PetscInt __pyx_v_sStart;
   PetscInt __pyx_v_sEnd;
@@ -217131,33 +219243,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getDepthStratum(struct __py
   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("getDepthStratum", 0);
 
-  /* "PETSc/DMPlex.pyx":387
+  /* "PETSc/DMPlex.pyx":289
  * 
  *     def getDepthStratum(self, svalue):
  *         cdef PetscInt csvalue = asInt(svalue), sStart = 0, sEnd = 0             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetDepthStratum(self.dm, csvalue, &sStart, &sEnd) )
  *         return (toInt(sStart), toInt(sEnd))
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_svalue); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_svalue); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 289, __pyx_L1_error)
   __pyx_v_csvalue = __pyx_t_1;
   __pyx_v_sStart = 0;
   __pyx_v_sEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":388
+  /* "PETSc/DMPlex.pyx":290
  *     def getDepthStratum(self, svalue):
  *         cdef PetscInt csvalue = asInt(svalue), sStart = 0, sEnd = 0
  *         CHKERR( DMPlexGetDepthStratum(self.dm, csvalue, &sStart, &sEnd) )             # <<<<<<<<<<<<<<
  *         return (toInt(sStart), toInt(sEnd))
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetDepthStratum(__pyx_v_self->__pyx_base.dm, __pyx_v_csvalue, (&__pyx_v_sStart), (&__pyx_v_sEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetDepthStratum(__pyx_v_self->__pyx_base.dm, __pyx_v_csvalue, (&__pyx_v_sStart), (&__pyx_v_sEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 290, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":389
+  /* "PETSc/DMPlex.pyx":291
  *         cdef PetscInt csvalue = asInt(svalue), sStart = 0, sEnd = 0
  *         CHKERR( DMPlexGetDepthStratum(self.dm, csvalue, &sStart, &sEnd) )
  *         return (toInt(sStart), toInt(sEnd))             # <<<<<<<<<<<<<<
@@ -217165,11 +219274,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getDepthStratum(struct __py
  *     def getHeightStratum(self, svalue):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sStart); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sStart); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sEnd); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sEnd); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -217181,7 +219290,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getDepthStratum(struct __py
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":386
+  /* "PETSc/DMPlex.pyx":288
  *         return toInt(depth)
  * 
  *     def getDepthStratum(self, svalue):             # <<<<<<<<<<<<<<
@@ -217202,7 +219311,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getDepthStratum(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":391
+/* "PETSc/DMPlex.pyx":293
  *         return (toInt(sStart), toInt(sEnd))
  * 
  *     def getHeightStratum(self, svalue):             # <<<<<<<<<<<<<<
@@ -217211,13 +219320,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getDepthStratum(struct __py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95getHeightStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_94getHeightStratum[] = "DMPlex.getHeightStratum(self, svalue)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95getHeightStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getHeightStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_66getHeightStratum[] = "DMPlex.getHeightStratum(self, svalue)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getHeightStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_svalue = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getHeightStratum (wrapper)", 0);
@@ -217239,7 +219345,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95getHeightStratum(PyObject *
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getHeightStratum") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getHeightStratum") < 0)) __PYX_ERR(42, 293, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -217250,20 +219356,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95getHeightStratum(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getHeightStratum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getHeightStratum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 293, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getHeightStratum", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_94getHeightStratum(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_svalue);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_66getHeightStratum(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_svalue);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94getHeightStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getHeightStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue) {
   PetscInt __pyx_v_csvalue;
   PetscInt __pyx_v_sStart;
   PetscInt __pyx_v_sEnd;
@@ -217274,33 +219380,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94getHeightStratum(struct __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("getHeightStratum", 0);
 
-  /* "PETSc/DMPlex.pyx":392
+  /* "PETSc/DMPlex.pyx":294
  * 
  *     def getHeightStratum(self, svalue):
  *         cdef PetscInt csvalue = asInt(svalue), sStart = 0, sEnd = 0             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetHeightStratum(self.dm, csvalue, &sStart, &sEnd) )
  *         return (toInt(sStart), toInt(sEnd))
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_svalue); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_svalue); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 294, __pyx_L1_error)
   __pyx_v_csvalue = __pyx_t_1;
   __pyx_v_sStart = 0;
   __pyx_v_sEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":393
+  /* "PETSc/DMPlex.pyx":295
  *     def getHeightStratum(self, svalue):
  *         cdef PetscInt csvalue = asInt(svalue), sStart = 0, sEnd = 0
  *         CHKERR( DMPlexGetHeightStratum(self.dm, csvalue, &sStart, &sEnd) )             # <<<<<<<<<<<<<<
  *         return (toInt(sStart), toInt(sEnd))
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetHeightStratum(__pyx_v_self->__pyx_base.dm, __pyx_v_csvalue, (&__pyx_v_sStart), (&__pyx_v_sEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetHeightStratum(__pyx_v_self->__pyx_base.dm, __pyx_v_csvalue, (&__pyx_v_sStart), (&__pyx_v_sEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 295, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":394
+  /* "PETSc/DMPlex.pyx":296
  *         cdef PetscInt csvalue = asInt(svalue), sStart = 0, sEnd = 0
  *         CHKERR( DMPlexGetHeightStratum(self.dm, csvalue, &sStart, &sEnd) )
  *         return (toInt(sStart), toInt(sEnd))             # <<<<<<<<<<<<<<
@@ -217308,11 +219411,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94getHeightStratum(struct __p
  *     def getMeet(self, points):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sStart); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sStart); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sEnd); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sEnd); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -217324,7 +219427,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94getHeightStratum(struct __p
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":391
+  /* "PETSc/DMPlex.pyx":293
  *         return (toInt(sStart), toInt(sEnd))
  * 
  *     def getHeightStratum(self, svalue):             # <<<<<<<<<<<<<<
@@ -217345,7 +219448,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94getHeightStratum(struct __p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":396
+/* "PETSc/DMPlex.pyx":298
  *         return (toInt(sStart), toInt(sEnd))
  * 
  *     def getMeet(self, points):             # <<<<<<<<<<<<<<
@@ -217354,13 +219457,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94getHeightStratum(struct __p
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_97getMeet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_96getMeet[] = "DMPlex.getMeet(self, points)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_97getMeet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getMeet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_68getMeet[] = "DMPlex.getMeet(self, points)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getMeet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_points = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMeet (wrapper)", 0);
@@ -217382,7 +219482,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_97getMeet(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMeet") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMeet") < 0)) __PYX_ERR(42, 298, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -217393,20 +219493,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_97getMeet(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMeet", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getMeet", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 298, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getMeet", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_points);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_points);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points) {
   PetscInt __pyx_v_numPoints;
   PetscInt *__pyx_v_ipoints;
   PetscInt __pyx_v_numCoveringPoints;
@@ -217424,13 +219524,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getMeet", 0);
   __Pyx_INCREF(__pyx_v_points);
 
-  /* "PETSc/DMPlex.pyx":397
+  /* "PETSc/DMPlex.pyx":299
  * 
  *     def getMeet(self, points):
  *         cdef PetscInt  numPoints = 0             # <<<<<<<<<<<<<<
@@ -217439,7 +219536,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
  */
   __pyx_v_numPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":398
+  /* "PETSc/DMPlex.pyx":300
  *     def getMeet(self, points):
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *ipoints = NULL             # <<<<<<<<<<<<<<
@@ -217448,7 +219545,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
  */
   __pyx_v_ipoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":399
+  /* "PETSc/DMPlex.pyx":301
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *ipoints = NULL
  *         cdef PetscInt  numCoveringPoints = 0             # <<<<<<<<<<<<<<
@@ -217457,7 +219554,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
  */
   __pyx_v_numCoveringPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":400
+  /* "PETSc/DMPlex.pyx":302
  *         cdef PetscInt *ipoints = NULL
  *         cdef PetscInt  numCoveringPoints = 0
  *         cdef const_PetscInt *coveringPoints = NULL             # <<<<<<<<<<<<<<
@@ -217466,28 +219563,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
  */
   __pyx_v_coveringPoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":401
+  /* "PETSc/DMPlex.pyx":303
  *         cdef PetscInt  numCoveringPoints = 0
  *         cdef const_PetscInt *coveringPoints = NULL
  *         points = iarray_i(points, &numPoints, &ipoints)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_points, (&__pyx_v_numPoints), (&__pyx_v_ipoints))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_points, (&__pyx_v_numPoints), (&__pyx_v_ipoints))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_points, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":402
+  /* "PETSc/DMPlex.pyx":304
  *         cdef const_PetscInt *coveringPoints = NULL
  *         points = iarray_i(points, &numPoints, &ipoints)
  *         CHKERR( DMPlexGetMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )             # <<<<<<<<<<<<<<
  *         try:
  *             return array_i(numCoveringPoints, coveringPoints)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetMeet(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetMeet(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 304, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":403
+  /* "PETSc/DMPlex.pyx":305
  *         points = iarray_i(points, &numPoints, &ipoints)
  *         CHKERR( DMPlexGetMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:             # <<<<<<<<<<<<<<
@@ -217496,7 +219593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
  */
   /*try:*/ {
 
-    /* "PETSc/DMPlex.pyx":404
+    /* "PETSc/DMPlex.pyx":306
  *         CHKERR( DMPlexGetMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:
  *             return array_i(numCoveringPoints, coveringPoints)             # <<<<<<<<<<<<<<
@@ -217504,14 +219601,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
  *             CHKERR( DMPlexRestoreMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_numCoveringPoints, __pyx_v_coveringPoints)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_numCoveringPoints, __pyx_v_coveringPoints)); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 306, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L3_return;
   }
 
-  /* "PETSc/DMPlex.pyx":406
+  /* "PETSc/DMPlex.pyx":308
  *             return array_i(numCoveringPoints, coveringPoints)
  *         finally:
  *             CHKERR( DMPlexRestoreMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )             # <<<<<<<<<<<<<<
@@ -217520,8 +219617,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
  */
   /*finally:*/ {
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -217533,8 +219632,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
       __Pyx_XGOTREF(__pyx_t_10);
       __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
       {
-        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreMeet(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreMeet(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(42, 308, __pyx_L7_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -217549,6 +219649,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
       __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
       goto __pyx_L1_error;
       __pyx_L7_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -217564,14 +219665,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
     __pyx_L3_return: {
       __pyx_t_10 = __pyx_r;
       __pyx_r = 0;
-      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreMeet(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreMeet(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(42, 308, __pyx_L1_error)
       __pyx_r = __pyx_t_10;
       __pyx_t_10 = 0;
       goto __pyx_L0;
     }
   }
 
-  /* "PETSc/DMPlex.pyx":396
+  /* "PETSc/DMPlex.pyx":298
  *         return (toInt(sStart), toInt(sEnd))
  * 
  *     def getMeet(self, points):             # <<<<<<<<<<<<<<
@@ -217591,7 +219692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":408
+/* "PETSc/DMPlex.pyx":310
  *             CHKERR( DMPlexRestoreMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  * 
  *     def getJoin(self, points):             # <<<<<<<<<<<<<<
@@ -217600,13 +219701,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96getMeet(struct __pyx_obj_8p
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99getJoin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_98getJoin[] = "DMPlex.getJoin(self, points)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99getJoin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getJoin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_70getJoin[] = "DMPlex.getJoin(self, points)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getJoin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_points = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getJoin (wrapper)", 0);
@@ -217628,7 +219726,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99getJoin(PyObject *__pyx_v_s
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getJoin") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getJoin") < 0)) __PYX_ERR(42, 310, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -217639,20 +219737,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99getJoin(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getJoin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getJoin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 310, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getJoin", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_points);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_points);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points) {
   PetscInt __pyx_v_numPoints;
   PetscInt *__pyx_v_ipoints;
   PetscInt __pyx_v_numCoveringPoints;
@@ -217670,13 +219768,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   int __pyx_t_11;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getJoin", 0);
   __Pyx_INCREF(__pyx_v_points);
 
-  /* "PETSc/DMPlex.pyx":409
+  /* "PETSc/DMPlex.pyx":311
  * 
  *     def getJoin(self, points):
  *         cdef PetscInt  numPoints = 0             # <<<<<<<<<<<<<<
@@ -217685,7 +219780,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
  */
   __pyx_v_numPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":410
+  /* "PETSc/DMPlex.pyx":312
  *     def getJoin(self, points):
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *ipoints = NULL             # <<<<<<<<<<<<<<
@@ -217694,7 +219789,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
  */
   __pyx_v_ipoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":411
+  /* "PETSc/DMPlex.pyx":313
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *ipoints = NULL
  *         cdef PetscInt  numCoveringPoints = 0             # <<<<<<<<<<<<<<
@@ -217703,7 +219798,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
  */
   __pyx_v_numCoveringPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":412
+  /* "PETSc/DMPlex.pyx":314
  *         cdef PetscInt *ipoints = NULL
  *         cdef PetscInt  numCoveringPoints = 0
  *         cdef const_PetscInt *coveringPoints = NULL             # <<<<<<<<<<<<<<
@@ -217712,28 +219807,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
  */
   __pyx_v_coveringPoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":413
+  /* "PETSc/DMPlex.pyx":315
  *         cdef PetscInt  numCoveringPoints = 0
  *         cdef const_PetscInt *coveringPoints = NULL
  *         points = iarray_i(points, &numPoints, &ipoints)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_points, (&__pyx_v_numPoints), (&__pyx_v_ipoints))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_points, (&__pyx_v_numPoints), (&__pyx_v_ipoints))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 315, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_points, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":414
+  /* "PETSc/DMPlex.pyx":316
  *         cdef const_PetscInt *coveringPoints = NULL
  *         points = iarray_i(points, &numPoints, &ipoints)
  *         CHKERR( DMPlexGetJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )             # <<<<<<<<<<<<<<
  *         try:
  *             return array_i(numCoveringPoints, coveringPoints)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetJoin(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetJoin(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 316, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":415
+  /* "PETSc/DMPlex.pyx":317
  *         points = iarray_i(points, &numPoints, &ipoints)
  *         CHKERR( DMPlexGetJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:             # <<<<<<<<<<<<<<
@@ -217742,7 +219837,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
  */
   /*try:*/ {
 
-    /* "PETSc/DMPlex.pyx":416
+    /* "PETSc/DMPlex.pyx":318
  *         CHKERR( DMPlexGetJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:
  *             return array_i(numCoveringPoints, coveringPoints)             # <<<<<<<<<<<<<<
@@ -217750,14 +219845,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
  *             CHKERR( DMPlexRestoreJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_numCoveringPoints, __pyx_v_coveringPoints)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_numCoveringPoints, __pyx_v_coveringPoints)); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 318, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L3_return;
   }
 
-  /* "PETSc/DMPlex.pyx":418
+  /* "PETSc/DMPlex.pyx":320
  *             return array_i(numCoveringPoints, coveringPoints)
  *         finally:
  *             CHKERR( DMPlexRestoreJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )             # <<<<<<<<<<<<<<
@@ -217766,8 +219861,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
  */
   /*finally:*/ {
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
@@ -217779,8 +219876,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
       __Pyx_XGOTREF(__pyx_t_10);
       __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
       {
-        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreJoin(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreJoin(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(42, 320, __pyx_L7_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -217795,6 +219893,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
       __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
       goto __pyx_L1_error;
       __pyx_L7_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -217810,14 +219909,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
     __pyx_L3_return: {
       __pyx_t_10 = __pyx_r;
       __pyx_r = 0;
-      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreJoin(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreJoin(__pyx_v_self->__pyx_base.dm, __pyx_v_numPoints, __pyx_v_ipoints, (&__pyx_v_numCoveringPoints), (&__pyx_v_coveringPoints))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(42, 320, __pyx_L1_error)
       __pyx_r = __pyx_t_10;
       __pyx_t_10 = 0;
       goto __pyx_L0;
     }
   }
 
-  /* "PETSc/DMPlex.pyx":408
+  /* "PETSc/DMPlex.pyx":310
  *             CHKERR( DMPlexRestoreMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  * 
  *     def getJoin(self, points):             # <<<<<<<<<<<<<<
@@ -217837,7 +219936,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":420
+/* "PETSc/DMPlex.pyx":322
  *             CHKERR( DMPlexRestoreJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  * 
  *     def getTransitiveClosure(self, p, useCone=True):             # <<<<<<<<<<<<<<
@@ -217846,14 +219945,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getJoin(struct __pyx_obj_8p
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_101getTransitiveClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure[] = "DMPlex.getTransitiveClosure(self, p, useCone=True)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_101getTransitiveClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getTransitiveClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure[] = "DMPlex.getTransitiveClosure(self, p, useCone=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getTransitiveClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_v_useCone = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getTransitiveClosure (wrapper)", 0);
@@ -217882,7 +219978,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_101getTransitiveClosure(PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getTransitiveClosure") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getTransitiveClosure") < 0)) __PYX_ERR(42, 322, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -217897,20 +219993,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_101getTransitiveClosure(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getTransitiveClosure", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getTransitiveClosure", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 322, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getTransitiveClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_useCone);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_useCone);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_useCone) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_useCone) {
   PetscInt __pyx_v_cp;
   PetscInt __pyx_v_pStart;
   PetscInt __pyx_v_pEnd;
@@ -217937,22 +220033,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
   int __pyx_t_15;
   PyObject *__pyx_t_16 = NULL;
   PyObject *__pyx_t_17 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getTransitiveClosure", 0);
 
-  /* "PETSc/DMPlex.pyx":421
+  /* "PETSc/DMPlex.pyx":323
  * 
  *     def getTransitiveClosure(self, p, useCone=True):
  *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 323, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":422
+  /* "PETSc/DMPlex.pyx":324
  *     def getTransitiveClosure(self, p, useCone=True):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -217962,16 +220055,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":423
+  /* "PETSc/DMPlex.pyx":325
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscBool cuseCone = useCone
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetChart(__pyx_v_self->__pyx_base.dm, (&__pyx_v_pStart), (&__pyx_v_pEnd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 325, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":424
+  /* "PETSc/DMPlex.pyx":326
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -217991,22 +220084,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(42, 326, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":425
+  /* "PETSc/DMPlex.pyx":327
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscBool cuseCone = useCone             # <<<<<<<<<<<<<<
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *points = NULL
  */
-  __pyx_t_5 = ((PetscBool)PyInt_AsLong(__pyx_v_useCone)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useCone)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 327, __pyx_L1_error)
   __pyx_v_cuseCone = __pyx_t_5;
 
-  /* "PETSc/DMPlex.pyx":426
+  /* "PETSc/DMPlex.pyx":328
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscBool cuseCone = useCone
  *         cdef PetscInt  numPoints = 0             # <<<<<<<<<<<<<<
@@ -218015,7 +220108,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
  */
   __pyx_v_numPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":427
+  /* "PETSc/DMPlex.pyx":329
  *         cdef PetscBool cuseCone = useCone
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *points = NULL             # <<<<<<<<<<<<<<
@@ -218024,16 +220117,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
  */
   __pyx_v_points = NULL;
 
-  /* "PETSc/DMPlex.pyx":428
+  /* "PETSc/DMPlex.pyx":330
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *points = NULL
  *         CHKERR( DMPlexGetTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )             # <<<<<<<<<<<<<<
  *         try:
  *             out = array_i(2*numPoints,points)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetTransitiveClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cuseCone, (&__pyx_v_numPoints), (&__pyx_v_points))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetTransitiveClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cuseCone, (&__pyx_v_numPoints), (&__pyx_v_points))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 330, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":429
+  /* "PETSc/DMPlex.pyx":331
  *         cdef PetscInt *points = NULL
  *         CHKERR( DMPlexGetTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )
  *         try:             # <<<<<<<<<<<<<<
@@ -218042,20 +220135,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
  */
   /*try:*/ {
 
-    /* "PETSc/DMPlex.pyx":430
+    /* "PETSc/DMPlex.pyx":332
  *         CHKERR( DMPlexGetTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )
  *         try:
  *             out = array_i(2*numPoints,points)             # <<<<<<<<<<<<<<
  *         finally:
  *             CHKERR( DMPlexRestoreTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )
  */
-    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((2 * __pyx_v_numPoints), __pyx_v_points)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+    __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i((2 * __pyx_v_numPoints), __pyx_v_points)); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 332, __pyx_L6_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_v_out = ((PyArrayObject *)__pyx_t_6);
     __pyx_t_6 = 0;
   }
 
-  /* "PETSc/DMPlex.pyx":432
+  /* "PETSc/DMPlex.pyx":334
  *             out = array_i(2*numPoints,points)
  *         finally:
  *             CHKERR( DMPlexRestoreTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )             # <<<<<<<<<<<<<<
@@ -218064,12 +220157,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreTransitiveClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cuseCone, (&__pyx_v_numPoints), (&__pyx_v_points))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreTransitiveClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cuseCone, (&__pyx_v_numPoints), (&__pyx_v_points))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 334, __pyx_L1_error)
       goto __pyx_L7;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L6_error:;
       __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
@@ -218081,8 +220176,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
       __Pyx_XGOTREF(__pyx_t_14);
       __pyx_t_2 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
       {
-        __pyx_t_15 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreTransitiveClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cuseCone, (&__pyx_v_numPoints), (&__pyx_v_points))); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+        __pyx_t_15 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexRestoreTransitiveClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, __pyx_v_cuseCone, (&__pyx_v_numPoints), (&__pyx_v_points))); if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(42, 334, __pyx_L9_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_12);
         __Pyx_XGIVEREF(__pyx_t_13);
@@ -218097,6 +220193,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
       __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
       goto __pyx_L1_error;
       __pyx_L9_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_12);
         __Pyx_XGIVEREF(__pyx_t_13);
@@ -218112,7 +220209,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
     __pyx_L7:;
   }
 
-  /* "PETSc/DMPlex.pyx":433
+  /* "PETSc/DMPlex.pyx":335
  *         finally:
  *             CHKERR( DMPlexRestoreTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )
  *         return out[::2],out[1::2]             # <<<<<<<<<<<<<<
@@ -218120,11 +220217,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
  *     def vecGetClosure(self, Section sec, Vec vec, p):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyObject_GetItem(((PyObject *)__pyx_v_out), __pyx_slice__60); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_6 = PyObject_GetItem(((PyObject *)__pyx_v_out), __pyx_slice__63); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_16 = PyObject_GetItem(((PyObject *)__pyx_v_out), __pyx_slice__61); if (unlikely(__pyx_t_16 == NULL)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_16 = PyObject_GetItem(((PyObject *)__pyx_v_out), __pyx_slice__64); if (unlikely(!__pyx_t_16)) __PYX_ERR(42, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_16);
-  __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(42, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_17);
   __Pyx_GIVEREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_6);
@@ -218136,7 +220233,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
   __pyx_t_17 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":420
+  /* "PETSc/DMPlex.pyx":322
  *             CHKERR( DMPlexRestoreJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  * 
  *     def getTransitiveClosure(self, p, useCone=True):             # <<<<<<<<<<<<<<
@@ -218158,7 +220255,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":435
+/* "PETSc/DMPlex.pyx":337
  *         return out[::2],out[1::2]
  * 
  *     def vecGetClosure(self, Section sec, Vec vec, p):             # <<<<<<<<<<<<<<
@@ -218167,15 +220264,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103vecGetClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_102vecGetClosure[] = "DMPlex.vecGetClosure(self, Section sec, Vec vec, p)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103vecGetClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75vecGetClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_74vecGetClosure[] = "DMPlex.vecGetClosure(self, Section sec, Vec vec, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75vecGetClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscSectionObject *__pyx_v_sec = 0;
   struct PyPetscVecObject *__pyx_v_vec = 0;
   PyObject *__pyx_v_p = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("vecGetClosure (wrapper)", 0);
@@ -218200,16 +220294,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103vecGetClosure(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, 1); __PYX_ERR(42, 337, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, 2); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, 2); __PYX_ERR(42, 337, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vecGetClosure") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vecGetClosure") < 0)) __PYX_ERR(42, 337, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -218224,15 +220318,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103vecGetClosure(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 337, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.vecGetClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 1, "sec", 0))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "vec", 0))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_sec, __pyx_v_vec, __pyx_v_p);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 1, "sec", 0))) __PYX_ERR(42, 337, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "vec", 0))) __PYX_ERR(42, 337, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_74vecGetClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_sec, __pyx_v_vec, __pyx_v_p);
 
   /* function exit code */
   goto __pyx_L0;
@@ -218243,7 +220337,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103vecGetClosure(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_p) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_74vecGetClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_p) {
   PetscInt __pyx_v_cp;
   PetscInt __pyx_v_csize;
   PetscScalar *__pyx_v_cvals;
@@ -218262,23 +220356,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   int __pyx_t_12;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("vecGetClosure", 0);
 
-  /* "PETSc/DMPlex.pyx":436
+  /* "PETSc/DMPlex.pyx":338
  * 
  *     def vecGetClosure(self, Section sec, Vec vec, p):
  *         cdef PetscInt cp = asInt(p), csize = 0             # <<<<<<<<<<<<<<
  *         cdef PetscScalar *cvals = NULL
  *         CHKERR( DMPlexVecGetClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 338, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
   __pyx_v_csize = 0;
 
-  /* "PETSc/DMPlex.pyx":437
+  /* "PETSc/DMPlex.pyx":339
  *     def vecGetClosure(self, Section sec, Vec vec, p):
  *         cdef PetscInt cp = asInt(p), csize = 0
  *         cdef PetscScalar *cvals = NULL             # <<<<<<<<<<<<<<
@@ -218287,16 +220378,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
  */
   __pyx_v_cvals = NULL;
 
-  /* "PETSc/DMPlex.pyx":438
+  /* "PETSc/DMPlex.pyx":340
  *         cdef PetscInt cp = asInt(p), csize = 0
  *         cdef PetscScalar *cvals = NULL
  *         CHKERR( DMPlexVecGetClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )             # <<<<<<<<<<<<<<
  *         try:
  *             closure = array_s(csize, cvals)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecGetClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_sec->sec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecGetClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_sec->sec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 340, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":439
+  /* "PETSc/DMPlex.pyx":341
  *         cdef PetscScalar *cvals = NULL
  *         CHKERR( DMPlexVecGetClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
  *         try:             # <<<<<<<<<<<<<<
@@ -218305,20 +220396,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
  */
   /*try:*/ {
 
-    /* "PETSc/DMPlex.pyx":440
+    /* "PETSc/DMPlex.pyx":342
  *         CHKERR( DMPlexVecGetClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
  *         try:
  *             closure = array_s(csize, cvals)             # <<<<<<<<<<<<<<
  *         finally:
  *             CHKERR( DMPlexVecRestoreClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_s(__pyx_v_csize, __pyx_v_cvals)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_s(__pyx_v_csize, __pyx_v_cvals)); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 342, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_closure = ((PyArrayObject *)__pyx_t_3);
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/DMPlex.pyx":442
+  /* "PETSc/DMPlex.pyx":344
  *             closure = array_s(csize, cvals)
  *         finally:
  *             CHKERR( DMPlexVecRestoreClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )             # <<<<<<<<<<<<<<
@@ -218327,12 +220418,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecRestoreClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_sec->sec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecRestoreClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_sec->sec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 344, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
+      __Pyx_PyThreadState_declare
       __pyx_L4_error:;
       __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
@@ -218344,8 +220437,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
       __Pyx_XGOTREF(__pyx_t_11);
       __pyx_t_2 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
       {
-        __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecRestoreClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_sec->sec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+        __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecRestoreClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_sec->sec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(42, 344, __pyx_L7_error)
       }
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
@@ -218360,6 +220454,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
       __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
       goto __pyx_L1_error;
       __pyx_L7_error:;
+      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
@@ -218375,7 +220470,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
     __pyx_L5:;
   }
 
-  /* "PETSc/DMPlex.pyx":443
+  /* "PETSc/DMPlex.pyx":345
  *         finally:
  *             CHKERR( DMPlexVecRestoreClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
  *         return closure             # <<<<<<<<<<<<<<
@@ -218387,7 +220482,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
   __pyx_r = ((PyObject *)__pyx_v_closure);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":435
+  /* "PETSc/DMPlex.pyx":337
  *         return out[::2],out[1::2]
  * 
  *     def vecGetClosure(self, Section sec, Vec vec, p):             # <<<<<<<<<<<<<<
@@ -218407,24 +220502,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102vecGetClosure(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":445
+/* "PETSc/DMPlex.pyx":347
  *         return closure
  * 
  *     def generate(self, DMPlex boundary, name=None, interpolate=True):             # <<<<<<<<<<<<<<
- *         cdef DMPlex dm = <DMPlex>type(self)()
  *         cdef PetscBool interp = interpolate
+ *         cdef const_char *cname = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105generate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_104generate[] = "DMPlex.generate(self, DMPlex boundary, name=None, interpolate=True)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105generate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77generate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_76generate[] = "DMPlex.generate(self, DMPlex boundary, name=None, interpolate=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77generate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_boundary = 0;
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_interpolate = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("generate (wrapper)", 0);
@@ -218460,7 +220552,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105generate(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "generate") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "generate") < 0)) __PYX_ERR(42, 347, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -218477,14 +220569,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105generate(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("generate", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("generate", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 347, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.generate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_boundary), __pyx_ptype_8petsc4py_5PETSc_DMPlex, 1, "boundary", 0))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_104generate(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_boundary, __pyx_v_name, __pyx_v_interpolate);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_boundary), __pyx_ptype_8petsc4py_5PETSc_DMPlex, 1, "boundary", 0))) __PYX_ERR(42, 347, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_boundary, __pyx_v_name, __pyx_v_interpolate);
 
   /* function exit code */
   goto __pyx_L0;
@@ -218495,69 +220587,31 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105generate(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104generate(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_boundary, PyObject *__pyx_v_name, PyObject *__pyx_v_interpolate) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_boundary, PyObject *__pyx_v_name, PyObject *__pyx_v_interpolate) {
   PetscBool __pyx_v_interp;
   const char *__pyx_v_cname;
   DM __pyx_v_newdm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
-  PetscBool __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  int __pyx_t_4;
   __Pyx_RefNannySetupContext("generate", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DMPlex.pyx":446
+  /* "PETSc/DMPlex.pyx":348
  * 
  *     def generate(self, DMPlex boundary, name=None, interpolate=True):
- *         cdef DMPlex dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef PetscBool interp = interpolate
- *         cdef const_char *cname = NULL
- */
-  __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_filename = __pyx_f[42]; __pyx_lineno = 446; __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[42]; __pyx_lineno = 446; __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_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":447
- *     def generate(self, DMPlex boundary, name=None, interpolate=True):
- *         cdef DMPlex dm = <DMPlex>type(self)()
  *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         if name: name = str2bytes(name, &cname)
  */
-  __pyx_t_4 = ((PetscBool)PyInt_AsLong(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_interp = __pyx_t_4;
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 348, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":448
- *         cdef DMPlex dm = <DMPlex>type(self)()
+  /* "PETSc/DMPlex.pyx":349
+ *     def generate(self, DMPlex boundary, name=None, interpolate=True):
  *         cdef PetscBool interp = interpolate
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
  *         if name: name = str2bytes(name, &cname)
@@ -218565,24 +220619,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104generate(struct __pyx_obj_
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DMPlex.pyx":449
+  /* "PETSc/DMPlex.pyx":350
  *         cdef PetscBool interp = interpolate
  *         cdef const_char *cname = NULL
  *         if name: name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         cdef PetscDM   newdm = NULL
  *         CHKERR( DMPlexGenerate(boundary.dm, cname, interp, &newdm) )
  */
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_5) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
-    __pyx_t_2 = 0;
-    goto __pyx_L3;
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(42, 350, __pyx_L1_error)
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 350, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
+    __pyx_t_3 = 0;
   }
-  __pyx_L3:;
 
-  /* "PETSc/DMPlex.pyx":450
+  /* "PETSc/DMPlex.pyx":351
  *         cdef const_char *cname = NULL
  *         if name: name = str2bytes(name, &cname)
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
@@ -218591,16 +220643,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104generate(struct __pyx_obj_
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":451
+  /* "PETSc/DMPlex.pyx":352
  *         if name: name = str2bytes(name, &cname)
  *         cdef PetscDM   newdm = NULL
  *         CHKERR( DMPlexGenerate(boundary.dm, cname, interp, &newdm) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGenerate(__pyx_v_boundary->__pyx_base.dm, __pyx_v_cname, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGenerate(__pyx_v_boundary->__pyx_base.dm, __pyx_v_cname, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 352, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":452
+  /* "PETSc/DMPlex.pyx":353
  *         cdef PetscDM   newdm = NULL
  *         CHKERR( DMPlexGenerate(boundary.dm, cname, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
@@ -218610,7 +220662,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104generate(struct __pyx_obj_
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
   __pyx_v_self->__pyx_base.dm = __pyx_v_newdm;
 
-  /* "PETSc/DMPlex.pyx":453
+  /* "PETSc/DMPlex.pyx":354
  *         CHKERR( DMPlexGenerate(boundary.dm, cname, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
@@ -218622,30 +220674,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104generate(struct __pyx_obj_
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":445
+  /* "PETSc/DMPlex.pyx":347
  *         return closure
  * 
  *     def generate(self, DMPlex boundary, name=None, interpolate=True):             # <<<<<<<<<<<<<<
- *         cdef DMPlex dm = <DMPlex>type(self)()
  *         cdef PetscBool interp = interpolate
+ *         cdef const_char *cname = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.generate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
   __Pyx_XDECREF(__pyx_v_name);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":455
+/* "PETSc/DMPlex.pyx":356
  *         return self
  * 
  *     def setTriangleOptions(self, opts):             # <<<<<<<<<<<<<<
@@ -218654,13 +220703,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104generate(struct __pyx_obj_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_107setTriangleOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_106setTriangleOptions[] = "DMPlex.setTriangleOptions(self, opts)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_107setTriangleOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79setTriangleOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions[] = "DMPlex.setTriangleOptions(self, opts)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79setTriangleOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_opts = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTriangleOptions (wrapper)", 0);
@@ -218682,7 +220728,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_107setTriangleOptions(PyObjec
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTriangleOptions") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTriangleOptions") < 0)) __PYX_ERR(42, 356, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -218693,32 +220739,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_107setTriangleOptions(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTriangleOptions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTriangleOptions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 356, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setTriangleOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_106setTriangleOptions(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_opts);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_opts);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106setTriangleOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts) {
   const char *__pyx_v_copts;
   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("setTriangleOptions", 0);
   __Pyx_INCREF(__pyx_v_opts);
 
-  /* "PETSc/DMPlex.pyx":456
+  /* "PETSc/DMPlex.pyx":357
  * 
  *     def setTriangleOptions(self, opts):
  *         cdef const_char *copts = NULL             # <<<<<<<<<<<<<<
@@ -218727,28 +220770,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106setTriangleOptions(struct
  */
   __pyx_v_copts = NULL;
 
-  /* "PETSc/DMPlex.pyx":457
+  /* "PETSc/DMPlex.pyx":358
  *     def setTriangleOptions(self, opts):
  *         cdef const_char *copts = NULL
  *         opts = str2bytes(opts, &copts)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexTriangleSetOptions(self.dm, copts) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_opts, (&__pyx_v_copts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_opts, (&__pyx_v_copts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 358, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_opts, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":458
+  /* "PETSc/DMPlex.pyx":359
  *         cdef const_char *copts = NULL
  *         opts = str2bytes(opts, &copts)
  *         CHKERR( DMPlexTriangleSetOptions(self.dm, copts) )             # <<<<<<<<<<<<<<
  * 
  *     def setTetGenOptions(self, opts):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexTriangleSetOptions(__pyx_v_self->__pyx_base.dm, __pyx_v_copts)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexTriangleSetOptions(__pyx_v_self->__pyx_base.dm, __pyx_v_copts)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 359, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":455
+  /* "PETSc/DMPlex.pyx":356
  *         return self
  * 
  *     def setTriangleOptions(self, opts):             # <<<<<<<<<<<<<<
@@ -218770,7 +220813,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106setTriangleOptions(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":460
+/* "PETSc/DMPlex.pyx":361
  *         CHKERR( DMPlexTriangleSetOptions(self.dm, copts) )
  * 
  *     def setTetGenOptions(self, opts):             # <<<<<<<<<<<<<<
@@ -218779,13 +220822,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106setTriangleOptions(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setTetGenOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_108setTetGenOptions[] = "DMPlex.setTetGenOptions(self, opts)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setTetGenOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setTetGenOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions[] = "DMPlex.setTetGenOptions(self, opts)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setTetGenOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_opts = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTetGenOptions (wrapper)", 0);
@@ -218807,7 +220847,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setTetGenOptions(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTetGenOptions") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTetGenOptions") < 0)) __PYX_ERR(42, 361, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -218818,32 +220858,29 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setTetGenOptions(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTetGenOptions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTetGenOptions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 361, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setTetGenOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_108setTetGenOptions(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_opts);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_opts);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setTetGenOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts) {
   const char *__pyx_v_copts;
   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("setTetGenOptions", 0);
   __Pyx_INCREF(__pyx_v_opts);
 
-  /* "PETSc/DMPlex.pyx":461
+  /* "PETSc/DMPlex.pyx":362
  * 
  *     def setTetGenOptions(self, opts):
  *         cdef const_char *copts = NULL             # <<<<<<<<<<<<<<
@@ -218852,28 +220889,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setTetGenOptions(struct __
  */
   __pyx_v_copts = NULL;
 
-  /* "PETSc/DMPlex.pyx":462
+  /* "PETSc/DMPlex.pyx":363
  *     def setTetGenOptions(self, opts):
  *         cdef const_char *copts = NULL
  *         opts = str2bytes(opts, &copts)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexTetgenSetOptions(self.dm, copts) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_opts, (&__pyx_v_copts)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_opts, (&__pyx_v_copts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_opts, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":463
+  /* "PETSc/DMPlex.pyx":364
  *         cdef const_char *copts = NULL
  *         opts = str2bytes(opts, &copts)
  *         CHKERR( DMPlexTetgenSetOptions(self.dm, copts) )             # <<<<<<<<<<<<<<
  * 
  *     def createSquareBoundary(self, lower, upper, edges):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexTetgenSetOptions(__pyx_v_self->__pyx_base.dm, __pyx_v_copts)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexTetgenSetOptions(__pyx_v_self->__pyx_base.dm, __pyx_v_copts)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 364, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":460
+  /* "PETSc/DMPlex.pyx":361
  *         CHKERR( DMPlexTriangleSetOptions(self.dm, copts) )
  * 
  *     def setTetGenOptions(self, opts):             # <<<<<<<<<<<<<<
@@ -218895,24 +220932,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setTetGenOptions(struct __
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":465
+/* "PETSc/DMPlex.pyx":366
  *         CHKERR( DMPlexTetgenSetOptions(self.dm, copts) )
  * 
  *     def createSquareBoundary(self, lower, upper, edges):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
  *         cdef PetscInt nlow = 0, nup = 0, nedg = 0
+ *         cdef PetscInt *iedg = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_111createSquareBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary[] = "DMPlex.createSquareBoundary(self, lower, upper, edges)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_111createSquareBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83createSquareBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary[] = "DMPlex.createSquareBoundary(self, lower, upper, edges)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83createSquareBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_lower = 0;
   PyObject *__pyx_v_upper = 0;
   PyObject *__pyx_v_edges = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createSquareBoundary (wrapper)", 0);
@@ -218937,16 +220971,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_111createSquareBoundary(PyObj
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_upper)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, 1); __PYX_ERR(42, 366, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_edges)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, 2); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, 2); __PYX_ERR(42, 366, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSquareBoundary") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSquareBoundary") < 0)) __PYX_ERR(42, 366, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -218961,21 +220995,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_111createSquareBoundary(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 366, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createSquareBoundary", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_lower, __pyx_v_upper, __pyx_v_edges);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_lower, __pyx_v_upper, __pyx_v_edges);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_edges) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_edges) {
   PetscInt __pyx_v_nlow;
   PetscInt __pyx_v_nup;
   PetscInt __pyx_v_nedg;
@@ -218985,52 +221018,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(struc
   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;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  int __pyx_t_2;
   __Pyx_RefNannySetupContext("createSquareBoundary", 0);
   __Pyx_INCREF(__pyx_v_lower);
   __Pyx_INCREF(__pyx_v_upper);
   __Pyx_INCREF(__pyx_v_edges);
 
-  /* "PETSc/DMPlex.pyx":466
+  /* "PETSc/DMPlex.pyx":367
  * 
  *     def createSquareBoundary(self, lower, upper, edges):
- *         cdef DMPlex    dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef PetscInt nlow = 0, nup = 0, nedg = 0
- *         cdef PetscInt *iedg = NULL
- */
-  __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_filename = __pyx_f[42]; __pyx_lineno = 466; __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[42]; __pyx_lineno = 466; __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_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":467
- *     def createSquareBoundary(self, lower, upper, edges):
- *         cdef DMPlex    dm = <DMPlex>type(self)()
  *         cdef PetscInt nlow = 0, nup = 0, nedg = 0             # <<<<<<<<<<<<<<
  *         cdef PetscInt *iedg = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL
@@ -219039,8 +221035,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(struc
   __pyx_v_nup = 0;
   __pyx_v_nedg = 0;
 
-  /* "PETSc/DMPlex.pyx":468
- *         cdef DMPlex    dm = <DMPlex>type(self)()
+  /* "PETSc/DMPlex.pyx":368
+ *     def createSquareBoundary(self, lower, upper, edges):
  *         cdef PetscInt nlow = 0, nup = 0, nedg = 0
  *         cdef PetscInt *iedg = NULL             # <<<<<<<<<<<<<<
  *         cdef PetscReal *ilow = NULL, *iup = NULL
@@ -219048,7 +221044,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(struc
  */
   __pyx_v_iedg = NULL;
 
-  /* "PETSc/DMPlex.pyx":469
+  /* "PETSc/DMPlex.pyx":369
  *         cdef PetscInt nlow = 0, nup = 0, nedg = 0
  *         cdef PetscInt *iedg = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL             # <<<<<<<<<<<<<<
@@ -219058,52 +221054,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(struc
   __pyx_v_ilow = NULL;
   __pyx_v_iup = NULL;
 
-  /* "PETSc/DMPlex.pyx":470
+  /* "PETSc/DMPlex.pyx":370
  *         cdef PetscInt *iedg = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL
  *         lower = iarray_r(lower, &nlow, &ilow)             # <<<<<<<<<<<<<<
  *         upper = iarray_r(upper, &nup,  &iup)
  *         edges = iarray_i(edges, &nedg, &iedg)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_r(__pyx_v_lower, (&__pyx_v_nlow), (&__pyx_v_ilow))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_lower, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_r(__pyx_v_lower, (&__pyx_v_nlow), (&__pyx_v_ilow))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 370, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_lower, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":471
+  /* "PETSc/DMPlex.pyx":371
  *         cdef PetscReal *ilow = NULL, *iup = NULL
  *         lower = iarray_r(lower, &nlow, &ilow)
  *         upper = iarray_r(upper, &nup,  &iup)             # <<<<<<<<<<<<<<
  *         edges = iarray_i(edges, &nedg, &iedg)
  *         CHKERR( DMPlexCreateSquareBoundary(self.dm, ilow, iup, iedg) )
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_r(__pyx_v_upper, (&__pyx_v_nup), (&__pyx_v_iup))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_upper, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_r(__pyx_v_upper, (&__pyx_v_nup), (&__pyx_v_iup))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 371, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_upper, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":472
+  /* "PETSc/DMPlex.pyx":372
  *         lower = iarray_r(lower, &nlow, &ilow)
  *         upper = iarray_r(upper, &nup,  &iup)
  *         edges = iarray_i(edges, &nedg, &iedg)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexCreateSquareBoundary(self.dm, ilow, iup, iedg) )
  *         return self
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_edges, (&__pyx_v_nedg), (&__pyx_v_iedg))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_edges, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_edges, (&__pyx_v_nedg), (&__pyx_v_iedg))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 372, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_edges, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":473
+  /* "PETSc/DMPlex.pyx":373
  *         upper = iarray_r(upper, &nup,  &iup)
  *         edges = iarray_i(edges, &nedg, &iedg)
  *         CHKERR( DMPlexCreateSquareBoundary(self.dm, ilow, iup, iedg) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateSquareBoundary(__pyx_v_self->__pyx_base.dm, __pyx_v_ilow, __pyx_v_iup, __pyx_v_iedg)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateSquareBoundary(__pyx_v_self->__pyx_base.dm, __pyx_v_ilow, __pyx_v_iup, __pyx_v_iedg)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 373, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":474
+  /* "PETSc/DMPlex.pyx":374
  *         edges = iarray_i(edges, &nedg, &iedg)
  *         CHKERR( DMPlexCreateSquareBoundary(self.dm, ilow, iup, iedg) )
  *         return self             # <<<<<<<<<<<<<<
@@ -219115,23 +221111,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(struc
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":465
+  /* "PETSc/DMPlex.pyx":366
  *         CHKERR( DMPlexTetgenSetOptions(self.dm, copts) )
  * 
  *     def createSquareBoundary(self, lower, upper, edges):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
  *         cdef PetscInt nlow = 0, nup = 0, nedg = 0
+ *         cdef PetscInt *iedg = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createSquareBoundary", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
   __Pyx_XDECREF(__pyx_v_lower);
   __Pyx_XDECREF(__pyx_v_upper);
   __Pyx_XDECREF(__pyx_v_edges);
@@ -219140,24 +221133,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary(struc
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":476
+/* "PETSc/DMPlex.pyx":376
  *         return self
  * 
  *     def createCubeBoundary(self, lower, upper, faces):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
  *         cdef PetscInt nlow = 0, nup = 0, nfac = 0
+ *         cdef PetscInt *ifac = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113createCubeBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary[] = "DMPlex.createCubeBoundary(self, lower, upper, faces)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113createCubeBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85createCubeBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary[] = "DMPlex.createCubeBoundary(self, lower, upper, faces)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85createCubeBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_lower = 0;
   PyObject *__pyx_v_upper = 0;
   PyObject *__pyx_v_faces = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createCubeBoundary (wrapper)", 0);
@@ -219182,16 +221172,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113createCubeBoundary(PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_upper)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, 1); __PYX_ERR(42, 376, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_faces)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, 2); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, 2); __PYX_ERR(42, 376, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCubeBoundary") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCubeBoundary") < 0)) __PYX_ERR(42, 376, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -219206,76 +221196,38 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113createCubeBoundary(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 376, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCubeBoundary", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_lower, __pyx_v_upper, __pyx_v_faces);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_lower, __pyx_v_upper, __pyx_v_faces);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_faces) {
-  CYTHON_UNUSED struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_faces) {
   PetscInt __pyx_v_nlow;
   PetscInt __pyx_v_nup;
   PetscInt __pyx_v_nfac;
   PetscInt *__pyx_v_ifac;
   PetscReal *__pyx_v_ilow;
   PetscReal *__pyx_v_iup;
-  CYTHON_UNUSED PyArrayObject *__pyx_v_edges = NULL;
   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;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  int __pyx_t_2;
   __Pyx_RefNannySetupContext("createCubeBoundary", 0);
   __Pyx_INCREF(__pyx_v_lower);
   __Pyx_INCREF(__pyx_v_upper);
+  __Pyx_INCREF(__pyx_v_faces);
 
-  /* "PETSc/DMPlex.pyx":477
+  /* "PETSc/DMPlex.pyx":377
  * 
  *     def createCubeBoundary(self, lower, upper, faces):
- *         cdef DMPlex    dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
- *         cdef PetscInt nlow = 0, nup = 0, nfac = 0
- *         cdef PetscInt *ifac = NULL
- */
-  __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_filename = __pyx_f[42]; __pyx_lineno = 477; __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[42]; __pyx_lineno = 477; __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_t_1;
-  __Pyx_INCREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "PETSc/DMPlex.pyx":478
- *     def createCubeBoundary(self, lower, upper, faces):
- *         cdef DMPlex    dm = <DMPlex>type(self)()
  *         cdef PetscInt nlow = 0, nup = 0, nfac = 0             # <<<<<<<<<<<<<<
  *         cdef PetscInt *ifac = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL
@@ -219284,8 +221236,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary(struct
   __pyx_v_nup = 0;
   __pyx_v_nfac = 0;
 
-  /* "PETSc/DMPlex.pyx":479
- *         cdef DMPlex    dm = <DMPlex>type(self)()
+  /* "PETSc/DMPlex.pyx":378
+ *     def createCubeBoundary(self, lower, upper, faces):
  *         cdef PetscInt nlow = 0, nup = 0, nfac = 0
  *         cdef PetscInt *ifac = NULL             # <<<<<<<<<<<<<<
  *         cdef PetscReal *ilow = NULL, *iup = NULL
@@ -219293,7 +221245,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary(struct
  */
   __pyx_v_ifac = NULL;
 
-  /* "PETSc/DMPlex.pyx":480
+  /* "PETSc/DMPlex.pyx":379
  *         cdef PetscInt nlow = 0, nup = 0, nfac = 0
  *         cdef PetscInt *ifac = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL             # <<<<<<<<<<<<<<
@@ -219303,53 +221255,53 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary(struct
   __pyx_v_ilow = NULL;
   __pyx_v_iup = NULL;
 
-  /* "PETSc/DMPlex.pyx":481
+  /* "PETSc/DMPlex.pyx":380
  *         cdef PetscInt *ifac = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL
  *         lower = iarray_r(lower, &nlow, &ilow)             # <<<<<<<<<<<<<<
  *         upper = iarray_r(upper, &nup,  &iup)
- *         edges = iarray_i(faces, &nfac, &ifac)
+ *         faces = iarray_i(faces, &nfac, &ifac)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_r(__pyx_v_lower, (&__pyx_v_nlow), (&__pyx_v_ilow))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_lower, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_r(__pyx_v_lower, (&__pyx_v_nlow), (&__pyx_v_ilow))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 380, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_lower, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":482
+  /* "PETSc/DMPlex.pyx":381
  *         cdef PetscReal *ilow = NULL, *iup = NULL
  *         lower = iarray_r(lower, &nlow, &ilow)
  *         upper = iarray_r(upper, &nup,  &iup)             # <<<<<<<<<<<<<<
- *         edges = iarray_i(faces, &nfac, &ifac)
+ *         faces = iarray_i(faces, &nfac, &ifac)
  *         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_r(__pyx_v_upper, (&__pyx_v_nup), (&__pyx_v_iup))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_upper, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_r(__pyx_v_upper, (&__pyx_v_nup), (&__pyx_v_iup))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 381, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_upper, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":483
+  /* "PETSc/DMPlex.pyx":382
  *         lower = iarray_r(lower, &nlow, &ilow)
  *         upper = iarray_r(upper, &nup,  &iup)
- *         edges = iarray_i(faces, &nfac, &ifac)             # <<<<<<<<<<<<<<
+ *         faces = iarray_i(faces, &nfac, &ifac)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )
  *         return self
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_faces, (&__pyx_v_nfac), (&__pyx_v_ifac))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_v_edges = ((PyArrayObject *)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_faces, (&__pyx_v_nfac), (&__pyx_v_ifac))); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 382, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_faces, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":484
+  /* "PETSc/DMPlex.pyx":383
  *         upper = iarray_r(upper, &nup,  &iup)
- *         edges = iarray_i(faces, &nfac, &ifac)
+ *         faces = iarray_i(faces, &nfac, &ifac)
  *         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCubeBoundary(__pyx_v_self->__pyx_base.dm, __pyx_v_ilow, __pyx_v_iup, __pyx_v_ifac)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCubeBoundary(__pyx_v_self->__pyx_base.dm, __pyx_v_ilow, __pyx_v_iup, __pyx_v_ifac)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 383, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":485
- *         edges = iarray_i(faces, &nfac, &ifac)
+  /* "PETSc/DMPlex.pyx":384
+ *         faces = iarray_i(faces, &nfac, &ifac)
  *         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )
  *         return self             # <<<<<<<<<<<<<<
  * 
@@ -219360,32 +221312,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary(struct
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":476
+  /* "PETSc/DMPlex.pyx":376
  *         return self
  * 
  *     def createCubeBoundary(self, lower, upper, faces):             # <<<<<<<<<<<<<<
- *         cdef DMPlex    dm = <DMPlex>type(self)()
  *         cdef PetscInt nlow = 0, nup = 0, nfac = 0
+ *         cdef PetscInt *ifac = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createCubeBoundary", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
-  __Pyx_XDECREF((PyObject *)__pyx_v_edges);
   __Pyx_XDECREF(__pyx_v_lower);
   __Pyx_XDECREF(__pyx_v_upper);
+  __Pyx_XDECREF(__pyx_v_faces);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":487
+/* "PETSc/DMPlex.pyx":386
  *         return self
  * 
  *     def markBoundaryFaces(self, label):             # <<<<<<<<<<<<<<
@@ -219394,13 +221343,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115markBoundaryFaces(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces[] = "DMPlex.markBoundaryFaces(self, label)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115markBoundaryFaces(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87markBoundaryFaces(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces[] = "DMPlex.markBoundaryFaces(self, label)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87markBoundaryFaces(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_label = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("markBoundaryFaces (wrapper)", 0);
@@ -219422,7 +221368,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115markBoundaryFaces(PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "markBoundaryFaces") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "markBoundaryFaces") < 0)) __PYX_ERR(42, 386, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -219433,20 +221379,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115markBoundaryFaces(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("markBoundaryFaces", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("markBoundaryFaces", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 386, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.markBoundaryFaces", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_label);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_label);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_label) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_label) {
   const char *__pyx_v_cval;
   DMLabel __pyx_v_clbl;
   PyObject *__pyx_r = NULL;
@@ -219458,20 +221404,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(struct _
   int __pyx_t_5;
   int __pyx_t_6;
   int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("markBoundaryFaces", 0);
   __Pyx_INCREF(__pyx_v_label);
 
-  /* "PETSc/DMPlex.pyx":488
+  /* "PETSc/DMPlex.pyx":387
  * 
  *     def markBoundaryFaces(self, label):
  *         if not self.hasLabel(label):             # <<<<<<<<<<<<<<
  *             self.createLabel(label)
  *         cdef const_char *cval = NULL
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_hasLabel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_hasLabel); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 387, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -219484,33 +221427,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(struct _
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_label); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_label); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 387, __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[42]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 387, __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_label);
     __Pyx_GIVEREF(__pyx_v_label);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_label);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 488; __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(42, 387, __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_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(42, 387, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_6 = ((!__pyx_t_5) != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/DMPlex.pyx":489
+    /* "PETSc/DMPlex.pyx":388
  *     def markBoundaryFaces(self, label):
  *         if not self.hasLabel(label):
  *             self.createLabel(label)             # <<<<<<<<<<<<<<
  *         cdef const_char *cval = NULL
  *         label = str2bytes(label, &cval)
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_createLabel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_createLabel); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 388, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -219523,26 +221466,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(struct _
       }
     }
     if (!__pyx_t_4) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_label); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_label); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
     } else {
-      __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL;
       __Pyx_INCREF(__pyx_v_label);
       __Pyx_GIVEREF(__pyx_v_label);
       PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_v_label);
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 388, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    goto __pyx_L3;
+
+    /* "PETSc/DMPlex.pyx":387
+ * 
+ *     def markBoundaryFaces(self, label):
+ *         if not self.hasLabel(label):             # <<<<<<<<<<<<<<
+ *             self.createLabel(label)
+ *         cdef const_char *cval = NULL
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/DMPlex.pyx":490
+  /* "PETSc/DMPlex.pyx":389
  *         if not self.hasLabel(label):
  *             self.createLabel(label)
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -219551,46 +221500,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(struct _
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/DMPlex.pyx":491
+  /* "PETSc/DMPlex.pyx":390
  *             self.createLabel(label)
  *         cdef const_char *cval = NULL
  *         label = str2bytes(label, &cval)             # <<<<<<<<<<<<<<
  *         cdef PetscDMLabel clbl = NULL
- *         CHKERR( DMPlexGetLabel(self.dm, cval, &clbl) )
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_label, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_label, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 390, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_label, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":492
+  /* "PETSc/DMPlex.pyx":391
  *         cdef const_char *cval = NULL
  *         label = str2bytes(label, &cval)
  *         cdef PetscDMLabel clbl = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetLabel(self.dm, cval, &clbl) )
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
  *         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )
  */
   __pyx_v_clbl = NULL;
 
-  /* "PETSc/DMPlex.pyx":493
+  /* "PETSc/DMPlex.pyx":392
  *         label = str2bytes(label, &cval)
  *         cdef PetscDMLabel clbl = NULL
- *         CHKERR( DMPlexGetLabel(self.dm, cval, &clbl) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )
  * 
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetLabel(__pyx_v_self->__pyx_base.dm, __pyx_v_cval, (&__pyx_v_clbl))); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabel(__pyx_v_self->__pyx_base.dm, __pyx_v_cval, (&__pyx_v_clbl))); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(42, 392, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":494
+  /* "PETSc/DMPlex.pyx":393
  *         cdef PetscDMLabel clbl = NULL
- *         CHKERR( DMPlexGetLabel(self.dm, cval, &clbl) )
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
  *         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )             # <<<<<<<<<<<<<<
  * 
  *     def setAdjacencyUseCone(self, useCone=True):
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexMarkBoundaryFaces(__pyx_v_self->__pyx_base.dm, __pyx_v_clbl)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexMarkBoundaryFaces(__pyx_v_self->__pyx_base.dm, __pyx_v_clbl)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(42, 393, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":487
+  /* "PETSc/DMPlex.pyx":386
  *         return self
  * 
  *     def markBoundaryFaces(self, label):             # <<<<<<<<<<<<<<
@@ -219615,7 +221564,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":496
+/* "PETSc/DMPlex.pyx":395
  *         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )
  * 
  *     def setAdjacencyUseCone(self, useCone=True):             # <<<<<<<<<<<<<<
@@ -219624,13 +221573,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces(struct _
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117setAdjacencyUseCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_116setAdjacencyUseCone[] = "DMPlex.setAdjacencyUseCone(self, useCone=True)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117setAdjacencyUseCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setAdjacencyUseCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_88setAdjacencyUseCone[] = "DMPlex.setAdjacencyUseCone(self, useCone=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setAdjacencyUseCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_useCone = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAdjacencyUseCone (wrapper)", 0);
@@ -219655,7 +221601,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117setAdjacencyUseCone(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseCone") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseCone") < 0)) __PYX_ERR(42, 395, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -219668,50 +221614,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117setAdjacencyUseCone(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseCone", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseCone", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 395, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setAdjacencyUseCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_116setAdjacencyUseCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_useCone);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_88setAdjacencyUseCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_useCone);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116setAdjacencyUseCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useCone) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88setAdjacencyUseCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useCone) {
   PetscBool __pyx_v_flag;
   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("setAdjacencyUseCone", 0);
 
-  /* "PETSc/DMPlex.pyx":497
+  /* "PETSc/DMPlex.pyx":396
  * 
  *     def setAdjacencyUseCone(self, useCone=True):
  *         cdef PetscBool flag = useCone             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_useCone)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useCone)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 396, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":498
+  /* "PETSc/DMPlex.pyx":397
  *     def setAdjacencyUseCone(self, useCone=True):
  *         cdef PetscBool flag = useCone
  *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def setAdjacencyUseClosure(self, useClosure=True):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetAdjacencyUseCone(__pyx_v_self->__pyx_base.dm, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetAdjacencyUseCone(__pyx_v_self->__pyx_base.dm, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 397, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":496
+  /* "PETSc/DMPlex.pyx":395
  *         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )
  * 
  *     def setAdjacencyUseCone(self, useCone=True):             # <<<<<<<<<<<<<<
@@ -219731,7 +221674,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116setAdjacencyUseCone(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":500
+/* "PETSc/DMPlex.pyx":399
  *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )
  * 
  *     def setAdjacencyUseClosure(self, useClosure=True):             # <<<<<<<<<<<<<<
@@ -219740,13 +221683,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116setAdjacencyUseCone(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_119setAdjacencyUseClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_118setAdjacencyUseClosure[] = "DMPlex.setAdjacencyUseClosure(self, useClosure=True)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_119setAdjacencyUseClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91setAdjacencyUseClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_90setAdjacencyUseClosure[] = "DMPlex.setAdjacencyUseClosure(self, useClosure=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91setAdjacencyUseClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_useClosure = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setAdjacencyUseClosure (wrapper)", 0);
@@ -219771,7 +221711,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_119setAdjacencyUseClosure(PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseClosure") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseClosure") < 0)) __PYX_ERR(42, 399, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -219784,50 +221724,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_119setAdjacencyUseClosure(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseClosure", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseClosure", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 399, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setAdjacencyUseClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_118setAdjacencyUseClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_useClosure);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_90setAdjacencyUseClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_useClosure);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_118setAdjacencyUseClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useClosure) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90setAdjacencyUseClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useClosure) {
   PetscBool __pyx_v_flag;
   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("setAdjacencyUseClosure", 0);
 
-  /* "PETSc/DMPlex.pyx":501
+  /* "PETSc/DMPlex.pyx":400
  * 
  *     def setAdjacencyUseClosure(self, useClosure=True):
  *         cdef PetscBool flag = useClosure             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_useClosure)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useClosure)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 400, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":502
+  /* "PETSc/DMPlex.pyx":401
  *     def setAdjacencyUseClosure(self, useClosure=True):
  *         cdef PetscBool flag = useClosure
  *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def getPartitioner(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetAdjacencyUseClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetAdjacencyUseClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 401, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":500
+  /* "PETSc/DMPlex.pyx":399
  *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )
  * 
  *     def setAdjacencyUseClosure(self, useClosure=True):             # <<<<<<<<<<<<<<
@@ -219847,7 +221784,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_118setAdjacencyUseClosure(str
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":504
+/* "PETSc/DMPlex.pyx":403
  *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
  * 
  *     def getPartitioner(self):             # <<<<<<<<<<<<<<
@@ -219856,55 +221793,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_118setAdjacencyUseClosure(str
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_121getPartitioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_120getPartitioner[] = "DMPlex.getPartitioner(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_121getPartitioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_93getPartitioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_92getPartitioner[] = "DMPlex.getPartitioner(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_93getPartitioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getPartitioner (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getPartitioner", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPartitioner", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_120getPartitioner(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_120getPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   struct PyPetscPartitionerObject *__pyx_v_part = 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("getPartitioner", 0);
 
-  /* "PETSc/DMPlex.pyx":505
+  /* "PETSc/DMPlex.pyx":404
  * 
  *     def getPartitioner(self):
  *         cdef Partitioner part = Partitioner()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )
  *         PetscINCREF(part.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Partitioner)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Partitioner), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 404, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_part = ((struct PyPetscPartitionerObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":506
+  /* "PETSc/DMPlex.pyx":405
  *     def getPartitioner(self):
  *         cdef Partitioner part = Partitioner()
  *         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(part.obj)
  *         return part
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetPartitioner(__pyx_v_self->__pyx_base.dm, (&__pyx_v_part->part))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetPartitioner(__pyx_v_self->__pyx_base.dm, (&__pyx_v_part->part))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 405, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":507
+  /* "PETSc/DMPlex.pyx":406
  *         cdef Partitioner part = Partitioner()
  *         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )
  *         PetscINCREF(part.obj)             # <<<<<<<<<<<<<<
@@ -219913,7 +221847,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_120getPartitioner(struct __py
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_part->__pyx_base.obj);
 
-  /* "PETSc/DMPlex.pyx":508
+  /* "PETSc/DMPlex.pyx":407
  *         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )
  *         PetscINCREF(part.obj)
  *         return part             # <<<<<<<<<<<<<<
@@ -219925,7 +221859,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_120getPartitioner(struct __py
   __pyx_r = ((PyObject *)__pyx_v_part);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":504
+  /* "PETSc/DMPlex.pyx":403
  *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
  * 
  *     def getPartitioner(self):             # <<<<<<<<<<<<<<
@@ -219945,7 +221879,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_120getPartitioner(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":510
+/* "PETSc/DMPlex.pyx":409
  *         return part
  * 
  *     def distribute(self, overlap=0):             # <<<<<<<<<<<<<<
@@ -219954,13 +221888,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_120getPartitioner(struct __py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_123distribute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_122distribute[] = "DMPlex.distribute(self, overlap=0)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_123distribute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95distribute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_94distribute[] = "DMPlex.distribute(self, overlap=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95distribute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_overlap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("distribute (wrapper)", 0);
@@ -219985,7 +221916,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_123distribute(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distribute") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distribute") < 0)) __PYX_ERR(42, 409, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -219998,20 +221929,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_123distribute(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("distribute", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("distribute", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 409, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.distribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_overlap);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_94distribute(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_overlap);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94distribute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap) {
   DM __pyx_v_dmParallel;
   PetscInt __pyx_v_coverlap;
   struct PyPetscSFObject *__pyx_v_sf = 0;
@@ -220020,12 +221951,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(struct __pyx_ob
   PetscInt __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("distribute", 0);
 
-  /* "PETSc/DMPlex.pyx":511
+  /* "PETSc/DMPlex.pyx":410
  * 
  *     def distribute(self, overlap=0):
  *         cdef PetscDM dmParallel = NULL             # <<<<<<<<<<<<<<
@@ -220034,38 +221962,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(struct __pyx_ob
  */
   __pyx_v_dmParallel = NULL;
 
-  /* "PETSc/DMPlex.pyx":512
+  /* "PETSc/DMPlex.pyx":411
  *     def distribute(self, overlap=0):
  *         cdef PetscDM dmParallel = NULL
  *         cdef PetscInt coverlap = asInt(overlap)             # <<<<<<<<<<<<<<
  *         cdef SF sf = SF()
  *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 411, __pyx_L1_error)
   __pyx_v_coverlap = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":513
+  /* "PETSc/DMPlex.pyx":412
  *         cdef PetscDM dmParallel = NULL
  *         cdef PetscInt coverlap = asInt(overlap)
  *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
  *         PetscCLEAR(self.obj); self.dm = dmParallel
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SF)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 412, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":514
+  /* "PETSc/DMPlex.pyx":413
  *         cdef PetscInt coverlap = asInt(overlap)
  *         cdef SF sf = SF()
  *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.dm = dmParallel
  *         return sf
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexDistribute(__pyx_v_self->__pyx_base.dm, __pyx_v_coverlap, (&__pyx_v_sf->sf), (&__pyx_v_dmParallel))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexDistribute(__pyx_v_self->__pyx_base.dm, __pyx_v_coverlap, (&__pyx_v_sf->sf), (&__pyx_v_dmParallel))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(42, 413, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":515
+  /* "PETSc/DMPlex.pyx":414
  *         cdef SF sf = SF()
  *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
  *         PetscCLEAR(self.obj); self.dm = dmParallel             # <<<<<<<<<<<<<<
@@ -220075,7 +222003,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(struct __pyx_ob
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
   __pyx_v_self->__pyx_base.dm = __pyx_v_dmParallel;
 
-  /* "PETSc/DMPlex.pyx":516
+  /* "PETSc/DMPlex.pyx":415
  *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
  *         PetscCLEAR(self.obj); self.dm = dmParallel
  *         return sf             # <<<<<<<<<<<<<<
@@ -220087,7 +222015,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(struct __pyx_ob
   __pyx_r = ((PyObject *)__pyx_v_sf);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":510
+  /* "PETSc/DMPlex.pyx":409
  *         return part
  * 
  *     def distribute(self, overlap=0):             # <<<<<<<<<<<<<<
@@ -220107,7 +222035,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":518
+/* "PETSc/DMPlex.pyx":417
  *         return sf
  * 
  *     def distributeOverlap(self, overlap=0):             # <<<<<<<<<<<<<<
@@ -220116,13 +222044,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distribute(struct __pyx_ob
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_125distributeOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_124distributeOverlap[] = "DMPlex.distributeOverlap(self, overlap=0)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_125distributeOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_97distributeOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_96distributeOverlap[] = "DMPlex.distributeOverlap(self, overlap=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_97distributeOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_overlap = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("distributeOverlap (wrapper)", 0);
@@ -220147,7 +222072,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_125distributeOverlap(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distributeOverlap") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distributeOverlap") < 0)) __PYX_ERR(42, 417, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -220160,20 +222085,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_125distributeOverlap(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("distributeOverlap", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("distributeOverlap", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 417, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.distributeOverlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_124distributeOverlap(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_overlap);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_96distributeOverlap(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_overlap);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_124distributeOverlap(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96distributeOverlap(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap) {
   PetscInt __pyx_v_coverlap;
   struct PyPetscSFObject *__pyx_v_sf = 0;
   DM __pyx_v_dmOverlap;
@@ -220182,34 +222107,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_124distributeOverlap(struct _
   PetscInt __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("distributeOverlap", 0);
 
-  /* "PETSc/DMPlex.pyx":519
+  /* "PETSc/DMPlex.pyx":418
  * 
  *     def distributeOverlap(self, overlap=0):
  *         cdef PetscInt coverlap = asInt(overlap)             # <<<<<<<<<<<<<<
  *         cdef SF sf = SF()
  *         cdef PetscDM dmOverlap = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 418, __pyx_L1_error)
   __pyx_v_coverlap = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":520
+  /* "PETSc/DMPlex.pyx":419
  *     def distributeOverlap(self, overlap=0):
  *         cdef PetscInt coverlap = asInt(overlap)
  *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
  *         cdef PetscDM dmOverlap = NULL
  *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SF)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 419, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":521
+  /* "PETSc/DMPlex.pyx":420
  *         cdef PetscInt coverlap = asInt(overlap)
  *         cdef SF sf = SF()
  *         cdef PetscDM dmOverlap = NULL             # <<<<<<<<<<<<<<
@@ -220218,16 +222140,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_124distributeOverlap(struct _
  */
   __pyx_v_dmOverlap = NULL;
 
-  /* "PETSc/DMPlex.pyx":522
+  /* "PETSc/DMPlex.pyx":421
  *         cdef SF sf = SF()
  *         cdef PetscDM dmOverlap = NULL
  *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,             # <<<<<<<<<<<<<<
  *                                         &sf.sf, &dmOverlap) )
  *         PetscCLEAR(self.obj); self.dm = dmOverlap
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexDistributeOverlap(__pyx_v_self->__pyx_base.dm, __pyx_v_coverlap, (&__pyx_v_sf->sf), (&__pyx_v_dmOverlap))); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexDistributeOverlap(__pyx_v_self->__pyx_base.dm, __pyx_v_coverlap, (&__pyx_v_sf->sf), (&__pyx_v_dmOverlap))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(42, 421, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":524
+  /* "PETSc/DMPlex.pyx":423
  *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,
  *                                         &sf.sf, &dmOverlap) )
  *         PetscCLEAR(self.obj); self.dm = dmOverlap             # <<<<<<<<<<<<<<
@@ -220237,19 +222159,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_124distributeOverlap(struct _
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
   __pyx_v_self->__pyx_base.dm = __pyx_v_dmOverlap;
 
-  /* "PETSc/DMPlex.pyx":525
+  /* "PETSc/DMPlex.pyx":424
  *                                         &sf.sf, &dmOverlap) )
  *         PetscCLEAR(self.obj); self.dm = dmOverlap
  *         return sf             # <<<<<<<<<<<<<<
  * 
- *     def createCoarsePointIS(self):
+ *     def distributeField(self, SF sf not None,
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_sf));
   __pyx_r = ((PyObject *)__pyx_v_sf);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":518
+  /* "PETSc/DMPlex.pyx":417
  *         return sf
  * 
  *     def distributeOverlap(self, overlap=0):             # <<<<<<<<<<<<<<
@@ -220269,64 +222191,361 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_124distributeOverlap(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":527
+/* "PETSc/DMPlex.pyx":426
  *         return sf
  * 
+ *     def distributeField(self, SF sf not None,             # <<<<<<<<<<<<<<
+ *                         Section sec not None, Vec vec not None,
+ *                         Section newsec=None, Vec newvec=None):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_98distributeField[] = "DMPlex.distributeField(self, SF sf, Section sec, Vec vec, Section newsec=None, Vec newvec=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscSFObject *__pyx_v_sf = 0;
+  struct PyPetscSectionObject *__pyx_v_sec = 0;
+  struct PyPetscVecObject *__pyx_v_vec = 0;
+  struct PyPetscSectionObject *__pyx_v_newsec = 0;
+  struct PyPetscVecObject *__pyx_v_newvec = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("distributeField (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sf,&__pyx_n_s_sec,&__pyx_n_s_vec,&__pyx_n_s_newsec,&__pyx_n_s_newvec,0};
+    PyObject* values[5] = {0,0,0,0,0};
+
+    /* "PETSc/DMPlex.pyx":428
+ *     def distributeField(self, SF sf not None,
+ *                         Section sec not None, Vec vec not None,
+ *                         Section newsec=None, Vec newvec=None):             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = MPI_COMM_NULL
+ *         if newsec is None: newsec = Section()
+ */
+    values[3] = (PyObject *)((struct PyPetscSectionObject *)Py_None);
+    values[4] = (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  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_sf)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sec)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("distributeField", 0, 3, 5, 1); __PYX_ERR(42, 426, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("distributeField", 0, 3, 5, 2); __PYX_ERR(42, 426, __pyx_L3_error)
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_newsec);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_newvec);
+          if (value) { values[4] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distributeField") < 0)) __PYX_ERR(42, 426, __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);
+        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_sf = ((struct PyPetscSFObject *)values[0]);
+    __pyx_v_sec = ((struct PyPetscSectionObject *)values[1]);
+    __pyx_v_vec = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_newsec = ((struct PyPetscSectionObject *)values[3]);
+    __pyx_v_newvec = ((struct PyPetscVecObject *)values[4]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("distributeField", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 426, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.distributeField", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) __PYX_ERR(42, 426, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "sec", 0))) __PYX_ERR(42, 427, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(42, 427, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_newsec), __pyx_ptype_8petsc4py_5PETSc_Section, 1, "newsec", 0))) __PYX_ERR(42, 428, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_newvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "newvec", 0))) __PYX_ERR(42, 428, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_sf, __pyx_v_sec, __pyx_v_vec, __pyx_v_newsec, __pyx_v_newvec);
+
+  /* "PETSc/DMPlex.pyx":426
+ *         return sf
+ * 
+ *     def distributeField(self, SF sf not None,             # <<<<<<<<<<<<<<
+ *                         Section sec not None, Vec vec not None,
+ *                         Section newsec=None, Vec newvec=None):
+ */
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, struct PyPetscSectionObject *__pyx_v_newsec, struct PyPetscVecObject *__pyx_v_newvec) {
+  MPI_Comm __pyx_v_ccomm;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("distributeField", 0);
+  __Pyx_INCREF((PyObject *)__pyx_v_newsec);
+  __Pyx_INCREF((PyObject *)__pyx_v_newvec);
+
+  /* "PETSc/DMPlex.pyx":429
+ *                         Section sec not None, Vec vec not None,
+ *                         Section newsec=None, Vec newvec=None):
+ *         cdef MPI_Comm ccomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
+ *         if newsec is None: newsec = Section()
+ *         if newvec is None: newvec = Vec()
+ */
+  __pyx_v_ccomm = MPI_COMM_NULL;
+
+  /* "PETSc/DMPlex.pyx":430
+ *                         Section newsec=None, Vec newvec=None):
+ *         cdef MPI_Comm ccomm = MPI_COMM_NULL
+ *         if newsec is None: newsec = Section()             # <<<<<<<<<<<<<<
+ *         if newvec is None: newvec = Vec()
+ *         if newsec.sec == NULL:
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_newsec) == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 430, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_newsec, ((struct PyPetscSectionObject *)__pyx_t_3));
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/DMPlex.pyx":431
+ *         cdef MPI_Comm ccomm = MPI_COMM_NULL
+ *         if newsec is None: newsec = Section()
+ *         if newvec is None: newvec = Vec()             # <<<<<<<<<<<<<<
+ *         if newsec.sec == NULL:
+ *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_newvec) == Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 431, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_newvec, ((struct PyPetscVecObject *)__pyx_t_3));
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/DMPlex.pyx":432
+ *         if newsec is None: newsec = Section()
+ *         if newvec is None: newvec = Vec()
+ *         if newsec.sec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
+ *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
+ */
+  __pyx_t_1 = ((__pyx_v_newsec->sec == NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/DMPlex.pyx":433
+ *         if newvec is None: newvec = Vec()
+ *         if newsec.sec == NULL:
+ *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
+ *         if newvec.vec == NULL:
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_sec->sec), (&__pyx_v_ccomm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 433, __pyx_L1_error)
+
+    /* "PETSc/DMPlex.pyx":434
+ *         if newsec.sec == NULL:
+ *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
+ *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )             # <<<<<<<<<<<<<<
+ *         if newvec.vec == NULL:
+ *             CHKERR( PetscObjectGetComm(<PetscObject>vec.vec, &ccomm) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionCreate(__pyx_v_ccomm, (&__pyx_v_newsec->sec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 434, __pyx_L1_error)
+
+    /* "PETSc/DMPlex.pyx":432
+ *         if newsec is None: newsec = Section()
+ *         if newvec is None: newvec = Vec()
+ *         if newsec.sec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
+ *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
+ */
+  }
+
+  /* "PETSc/DMPlex.pyx":435
+ *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
+ *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
+ *         if newvec.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectGetComm(<PetscObject>vec.vec, &ccomm) )
+ *             CHKERR( VecCreate(ccomm, &newvec.vec) )
+ */
+  __pyx_t_1 = ((__pyx_v_newvec->vec == NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/DMPlex.pyx":436
+ *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
+ *         if newvec.vec == NULL:
+ *             CHKERR( PetscObjectGetComm(<PetscObject>vec.vec, &ccomm) )             # <<<<<<<<<<<<<<
+ *             CHKERR( VecCreate(ccomm, &newvec.vec) )
+ *         CHKERR( DMPlexDistributeField(self.dm, sf.sf,
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_vec->vec), (&__pyx_v_ccomm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 436, __pyx_L1_error)
+
+    /* "PETSc/DMPlex.pyx":437
+ *         if newvec.vec == NULL:
+ *             CHKERR( PetscObjectGetComm(<PetscObject>vec.vec, &ccomm) )
+ *             CHKERR( VecCreate(ccomm, &newvec.vec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexDistributeField(self.dm, sf.sf,
+ *                                       sec.sec, vec.vec,
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec->vec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 437, __pyx_L1_error)
+
+    /* "PETSc/DMPlex.pyx":435
+ *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
+ *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
+ *         if newvec.vec == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscObjectGetComm(<PetscObject>vec.vec, &ccomm) )
+ *             CHKERR( VecCreate(ccomm, &newvec.vec) )
+ */
+  }
+
+  /* "PETSc/DMPlex.pyx":438
+ *             CHKERR( PetscObjectGetComm(<PetscObject>vec.vec, &ccomm) )
+ *             CHKERR( VecCreate(ccomm, &newvec.vec) )
+ *         CHKERR( DMPlexDistributeField(self.dm, sf.sf,             # <<<<<<<<<<<<<<
+ *                                       sec.sec, vec.vec,
+ *                                       newsec.sec, newvec.vec))
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexDistributeField(__pyx_v_self->__pyx_base.dm, __pyx_v_sf->sf, __pyx_v_sec->sec, __pyx_v_vec->vec, __pyx_v_newsec->sec, __pyx_v_newvec->vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 438, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":441
+ *                                       sec.sec, vec.vec,
+ *                                       newsec.sec, newvec.vec))
+ *         return (newsec, newvec)             # <<<<<<<<<<<<<<
+ * 
+ *     def createCoarsePointIS(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 441, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(((PyObject *)__pyx_v_newsec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_newsec));
+  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_newsec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_newvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_newvec));
+  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_newvec));
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":426
+ *         return sf
+ * 
+ *     def distributeField(self, SF sf not None,             # <<<<<<<<<<<<<<
+ *                         Section sec not None, Vec vec not None,
+ *                         Section newsec=None, Vec newvec=None):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.distributeField", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_newsec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_newvec);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":443
+ *         return (newsec, newvec)
+ * 
  *     def createCoarsePointIS(self):             # <<<<<<<<<<<<<<
  *         cdef IS fpoint = IS()
  *         CHKERR( DMPlexCreateCoarsePointIS(self.dm, &fpoint.iset) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_127createCoarsePointIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_126createCoarsePointIS[] = "DMPlex.createCoarsePointIS(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_127createCoarsePointIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_101createCoarsePointIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS[] = "DMPlex.createCoarsePointIS(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_101createCoarsePointIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createCoarsePointIS (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("createCoarsePointIS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createCoarsePointIS", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_126createCoarsePointIS(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_126createCoarsePointIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   struct PyPetscISObject *__pyx_v_fpoint = 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("createCoarsePointIS", 0);
 
-  /* "PETSc/DMPlex.pyx":528
+  /* "PETSc/DMPlex.pyx":444
  * 
  *     def createCoarsePointIS(self):
  *         cdef IS fpoint = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexCreateCoarsePointIS(self.dm, &fpoint.iset) )
  *         return fpoint
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 444, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_fpoint = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":529
+  /* "PETSc/DMPlex.pyx":445
  *     def createCoarsePointIS(self):
  *         cdef IS fpoint = IS()
  *         CHKERR( DMPlexCreateCoarsePointIS(self.dm, &fpoint.iset) )             # <<<<<<<<<<<<<<
  *         return fpoint
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCoarsePointIS(__pyx_v_self->__pyx_base.dm, (&__pyx_v_fpoint->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateCoarsePointIS(__pyx_v_self->__pyx_base.dm, (&__pyx_v_fpoint->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 445, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":530
+  /* "PETSc/DMPlex.pyx":446
  *         cdef IS fpoint = IS()
  *         CHKERR( DMPlexCreateCoarsePointIS(self.dm, &fpoint.iset) )
  *         return fpoint             # <<<<<<<<<<<<<<
@@ -220338,8 +222557,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_126createCoarsePointIS(struct
   __pyx_r = ((PyObject *)__pyx_v_fpoint);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":527
- *         return sf
+  /* "PETSc/DMPlex.pyx":443
+ *         return (newsec, newvec)
  * 
  *     def createCoarsePointIS(self):             # <<<<<<<<<<<<<<
  *         cdef IS fpoint = IS()
@@ -220358,7 +222577,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_126createCoarsePointIS(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":532
+/* "PETSc/DMPlex.pyx":448
  *         return fpoint
  * 
  *     def createSection(self, numComp, numDof,             # <<<<<<<<<<<<<<
@@ -220367,18 +222586,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_126createCoarsePointIS(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_128createSection[] = "DMPlex.createSection(self, numComp, numDof, bcField=None, bcComps=None, bcPoints=None, IS perm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_102createSection[] = "DMPlex.createSection(self, numComp, numDof, bcField=None, bcComps=None, bcPoints=None, IS perm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_numComp = 0;
   PyObject *__pyx_v_numDof = 0;
   PyObject *__pyx_v_bcField = 0;
   PyObject *__pyx_v_bcComps = 0;
   PyObject *__pyx_v_bcPoints = 0;
   struct PyPetscISObject *__pyx_v_perm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createSection (wrapper)", 0);
@@ -220386,7 +222602,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection(PyObject *__
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_numComp,&__pyx_n_s_numDof,&__pyx_n_s_bcField,&__pyx_n_s_bcComps,&__pyx_n_s_bcPoints,&__pyx_n_s_perm,0};
     PyObject* values[6] = {0,0,0,0,0,0};
 
-    /* "PETSc/DMPlex.pyx":533
+    /* "PETSc/DMPlex.pyx":449
  * 
  *     def createSection(self, numComp, numDof,
  *                       bcField=None, bcComps=None, bcPoints=None,             # <<<<<<<<<<<<<<
@@ -220397,7 +222613,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection(PyObject *__
     values[3] = ((PyObject *)Py_None);
     values[4] = ((PyObject *)Py_None);
 
-    /* "PETSc/DMPlex.pyx":534
+    /* "PETSc/DMPlex.pyx":450
  *     def createSection(self, numComp, numDof,
  *                       bcField=None, bcComps=None, bcPoints=None,
  *                       IS perm=None):             # <<<<<<<<<<<<<<
@@ -220426,7 +222642,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createSection", 0, 2, 6, 1); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("createSection", 0, 2, 6, 1); __PYX_ERR(42, 448, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -220450,7 +222666,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSection") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSection") < 0)) __PYX_ERR(42, 448, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -220473,16 +222689,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createSection", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("createSection", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 448, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createSection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_perm), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "perm", 0))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_numComp, __pyx_v_numDof, __pyx_v_bcField, __pyx_v_bcComps, __pyx_v_bcPoints, __pyx_v_perm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_perm), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "perm", 0))) __PYX_ERR(42, 450, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_numComp, __pyx_v_numDof, __pyx_v_bcField, __pyx_v_bcComps, __pyx_v_bcPoints, __pyx_v_perm);
 
-  /* "PETSc/DMPlex.pyx":532
+  /* "PETSc/DMPlex.pyx":448
  *         return fpoint
  * 
  *     def createSection(self, numComp, numDof,             # <<<<<<<<<<<<<<
@@ -220499,7 +222715,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_numComp, PyObject *__pyx_v_numDof, PyObject *__pyx_v_bcField, PyObject *__pyx_v_bcComps, PyObject *__pyx_v_bcPoints, struct PyPetscISObject *__pyx_v_perm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_numComp, PyObject *__pyx_v_numDof, PyObject *__pyx_v_bcField, PyObject *__pyx_v_bcComps, PyObject *__pyx_v_bcPoints, struct PyPetscISObject *__pyx_v_perm) {
   PetscInt __pyx_v_dim;
   PetscInt __pyx_v_ncomp;
   PetscInt __pyx_v_ndof;
@@ -220524,9 +222740,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   PyObject *__pyx_t_6 = NULL;
   PetscInt __pyx_t_7;
   IS __pyx_t_8;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("createSection", 0);
   __Pyx_INCREF(__pyx_v_numComp);
   __Pyx_INCREF(__pyx_v_numDof);
@@ -220534,7 +222747,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   __Pyx_INCREF(__pyx_v_bcComps);
   __Pyx_INCREF(__pyx_v_bcPoints);
 
-  /* "PETSc/DMPlex.pyx":536
+  /* "PETSc/DMPlex.pyx":452
  *                       IS perm=None):
  *         # topological dimension
  *         cdef PetscInt dim = 0             # <<<<<<<<<<<<<<
@@ -220543,16 +222756,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
  */
   __pyx_v_dim = 0;
 
-  /* "PETSc/DMPlex.pyx":537
+  /* "PETSc/DMPlex.pyx":453
  *         # topological dimension
  *         cdef PetscInt dim = 0
  *         CHKERR( DMGetDimension(self.dm, &dim) )             # <<<<<<<<<<<<<<
  *         # components and DOFs
  *         cdef PetscInt ncomp = 0, ndof = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDimension(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDimension(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 453, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":539
+  /* "PETSc/DMPlex.pyx":455
  *         CHKERR( DMGetDimension(self.dm, &dim) )
  *         # components and DOFs
  *         cdef PetscInt ncomp = 0, ndof = 0             # <<<<<<<<<<<<<<
@@ -220562,7 +222775,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   __pyx_v_ncomp = 0;
   __pyx_v_ndof = 0;
 
-  /* "PETSc/DMPlex.pyx":540
+  /* "PETSc/DMPlex.pyx":456
  *         # components and DOFs
  *         cdef PetscInt ncomp = 0, ndof = 0
  *         cdef PetscInt *icomp = NULL, *idof = NULL             # <<<<<<<<<<<<<<
@@ -220572,31 +222785,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   __pyx_v_icomp = NULL;
   __pyx_v_idof = NULL;
 
-  /* "PETSc/DMPlex.pyx":541
+  /* "PETSc/DMPlex.pyx":457
  *         cdef PetscInt ncomp = 0, ndof = 0
  *         cdef PetscInt *icomp = NULL, *idof = NULL
  *         numComp = iarray_i(numComp, &ncomp, &icomp)             # <<<<<<<<<<<<<<
  *         numDof  = iarray_i(numDof, &ndof, &idof)
  *         assert ndof == ncomp*(dim+1)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_numComp, (&__pyx_v_ncomp), (&__pyx_v_icomp))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_numComp, (&__pyx_v_ncomp), (&__pyx_v_icomp))); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 457, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_numComp, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":542
+  /* "PETSc/DMPlex.pyx":458
  *         cdef PetscInt *icomp = NULL, *idof = NULL
  *         numComp = iarray_i(numComp, &ncomp, &icomp)
  *         numDof  = iarray_i(numDof, &ndof, &idof)             # <<<<<<<<<<<<<<
  *         assert ndof == ncomp*(dim+1)
  *         # boundary conditions
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_numDof, (&__pyx_v_ndof), (&__pyx_v_idof))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_numDof, (&__pyx_v_ndof), (&__pyx_v_idof))); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 458, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_numDof, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":543
+  /* "PETSc/DMPlex.pyx":459
  *         numComp = iarray_i(numComp, &ncomp, &icomp)
  *         numDof  = iarray_i(numDof, &ndof, &idof)
  *         assert ndof == ncomp*(dim+1)             # <<<<<<<<<<<<<<
@@ -220607,12 +222820,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_ndof == (__pyx_v_ncomp * (__pyx_v_dim + 1))) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(42, 459, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":545
+  /* "PETSc/DMPlex.pyx":461
  *         assert ndof == ncomp*(dim+1)
  *         # boundary conditions
  *         cdef PetscInt nbc = 0, i = 0             # <<<<<<<<<<<<<<
@@ -220622,7 +222835,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   __pyx_v_nbc = 0;
   __pyx_v_i = 0;
 
-  /* "PETSc/DMPlex.pyx":546
+  /* "PETSc/DMPlex.pyx":462
  *         # boundary conditions
  *         cdef PetscInt nbc = 0, i = 0
  *         cdef PetscInt *bcfield = NULL             # <<<<<<<<<<<<<<
@@ -220631,7 +222844,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
  */
   __pyx_v_bcfield = NULL;
 
-  /* "PETSc/DMPlex.pyx":547
+  /* "PETSc/DMPlex.pyx":463
  *         cdef PetscInt nbc = 0, i = 0
  *         cdef PetscInt *bcfield = NULL
  *         cdef PetscIS *bccomps  = NULL             # <<<<<<<<<<<<<<
@@ -220640,7 +222853,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
  */
   __pyx_v_bccomps = NULL;
 
-  /* "PETSc/DMPlex.pyx":548
+  /* "PETSc/DMPlex.pyx":464
  *         cdef PetscInt *bcfield = NULL
  *         cdef PetscIS *bccomps  = NULL
  *         cdef PetscIS *bcpoints = NULL             # <<<<<<<<<<<<<<
@@ -220649,7 +222862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
  */
   __pyx_v_bcpoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":549
+  /* "PETSc/DMPlex.pyx":465
  *         cdef PetscIS *bccomps  = NULL
  *         cdef PetscIS *bcpoints = NULL
  *         if bcField is not None:             # <<<<<<<<<<<<<<
@@ -220660,19 +222873,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/DMPlex.pyx":550
+    /* "PETSc/DMPlex.pyx":466
  *         cdef PetscIS *bcpoints = NULL
  *         if bcField is not None:
  *             bcField = iarray_i(bcField, &nbc, &bcfield)             # <<<<<<<<<<<<<<
  *             if bcComps is not None:
  *                 bcComps = list(bcComps)
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_bcField, (&__pyx_v_nbc), (&__pyx_v_bcfield))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_bcField, (&__pyx_v_nbc), (&__pyx_v_bcfield))); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 466, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_bcField, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "PETSc/DMPlex.pyx":551
+    /* "PETSc/DMPlex.pyx":467
  *         if bcField is not None:
  *             bcField = iarray_i(bcField, &nbc, &bcfield)
  *             if bcComps is not None:             # <<<<<<<<<<<<<<
@@ -220683,19 +222896,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "PETSc/DMPlex.pyx":552
+      /* "PETSc/DMPlex.pyx":468
  *             bcField = iarray_i(bcField, &nbc, &bcfield)
  *             if bcComps is not None:
  *                 bcComps = list(bcComps)             # <<<<<<<<<<<<<<
  *                 assert len(bcComps) == nbc
  *                 tmp1 = oarray_p(empty_p(nbc), NULL, <void**>&bccomps)
  */
-      __pyx_t_2 = PySequence_List(__pyx_v_bcComps); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PySequence_List(__pyx_v_bcComps); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 468, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF_SET(__pyx_v_bcComps, __pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "PETSc/DMPlex.pyx":553
+      /* "PETSc/DMPlex.pyx":469
  *             if bcComps is not None:
  *                 bcComps = list(bcComps)
  *                 assert len(bcComps) == nbc             # <<<<<<<<<<<<<<
@@ -220704,30 +222917,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
       if (unlikely(!Py_OptimizeFlag)) {
-        __pyx_t_5 = PyObject_Length(__pyx_v_bcComps); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PyObject_Length(__pyx_v_bcComps); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(42, 469, __pyx_L1_error)
         if (unlikely(!((__pyx_t_5 == __pyx_v_nbc) != 0))) {
           PyErr_SetNone(PyExc_AssertionError);
-          {__pyx_filename = __pyx_f[42]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __PYX_ERR(42, 469, __pyx_L1_error)
         }
       }
       #endif
 
-      /* "PETSc/DMPlex.pyx":554
+      /* "PETSc/DMPlex.pyx":470
  *                 bcComps = list(bcComps)
  *                 assert len(bcComps) == nbc
  *                 tmp1 = oarray_p(empty_p(nbc), NULL, <void**>&bccomps)             # <<<<<<<<<<<<<<
  *                 for i from 0 <= i < nbc:
  *                     bccomps[i] = (<IS?>bcComps[<Py_ssize_t>i]).iset
  */
-      __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nbc)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nbc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 470, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_bccomps)))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_bccomps)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 470, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_v_tmp1 = ((PyArrayObject *)__pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "PETSc/DMPlex.pyx":555
+      /* "PETSc/DMPlex.pyx":471
  *                 assert len(bcComps) == nbc
  *                 tmp1 = oarray_p(empty_p(nbc), NULL, <void**>&bccomps)
  *                 for i from 0 <= i < nbc:             # <<<<<<<<<<<<<<
@@ -220737,25 +222950,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
       __pyx_t_7 = __pyx_v_nbc;
       for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_7; __pyx_v_i++) {
 
-        /* "PETSc/DMPlex.pyx":556
+        /* "PETSc/DMPlex.pyx":472
  *                 tmp1 = oarray_p(empty_p(nbc), NULL, <void**>&bccomps)
  *                 for i from 0 <= i < nbc:
  *                     bccomps[i] = (<IS?>bcComps[<Py_ssize_t>i]).iset             # <<<<<<<<<<<<<<
  *             if bcPoints is not None:
  *                 bcPoints = list(bcPoints)
  */
-        __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_bcComps, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+        __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_bcComps, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 472, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        if (!(likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (!(likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(42, 472, __pyx_L1_error)
         __pyx_t_8 = ((struct PyPetscISObject *)__pyx_t_6)->iset;
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         (__pyx_v_bccomps[__pyx_v_i]) = __pyx_t_8;
       }
-      goto __pyx_L4;
+
+      /* "PETSc/DMPlex.pyx":467
+ *         if bcField is not None:
+ *             bcField = iarray_i(bcField, &nbc, &bcfield)
+ *             if bcComps is not None:             # <<<<<<<<<<<<<<
+ *                 bcComps = list(bcComps)
+ *                 assert len(bcComps) == nbc
+ */
     }
-    __pyx_L4:;
 
-    /* "PETSc/DMPlex.pyx":557
+    /* "PETSc/DMPlex.pyx":473
  *                 for i from 0 <= i < nbc:
  *                     bccomps[i] = (<IS?>bcComps[<Py_ssize_t>i]).iset
  *             if bcPoints is not None:             # <<<<<<<<<<<<<<
@@ -220766,19 +222985,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
     __pyx_t_4 = (__pyx_t_3 != 0);
     if (__pyx_t_4) {
 
-      /* "PETSc/DMPlex.pyx":558
+      /* "PETSc/DMPlex.pyx":474
  *                     bccomps[i] = (<IS?>bcComps[<Py_ssize_t>i]).iset
  *             if bcPoints is not None:
  *                 bcPoints = list(bcPoints)             # <<<<<<<<<<<<<<
  *                 assert len(bcPoints) == nbc
  *                 tmp2 = oarray_p(empty_p(nbc), NULL, <void**>&bcpoints)
  */
-      __pyx_t_6 = PySequence_List(__pyx_v_bcPoints); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_List(__pyx_v_bcPoints); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 474, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF_SET(__pyx_v_bcPoints, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "PETSc/DMPlex.pyx":559
+      /* "PETSc/DMPlex.pyx":475
  *             if bcPoints is not None:
  *                 bcPoints = list(bcPoints)
  *                 assert len(bcPoints) == nbc             # <<<<<<<<<<<<<<
@@ -220787,30 +223006,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
       if (unlikely(!Py_OptimizeFlag)) {
-        __pyx_t_5 = PyObject_Length(__pyx_v_bcPoints); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PyObject_Length(__pyx_v_bcPoints); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(42, 475, __pyx_L1_error)
         if (unlikely(!((__pyx_t_5 == __pyx_v_nbc) != 0))) {
           PyErr_SetNone(PyExc_AssertionError);
-          {__pyx_filename = __pyx_f[42]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __PYX_ERR(42, 475, __pyx_L1_error)
         }
       }
       #endif
 
-      /* "PETSc/DMPlex.pyx":560
+      /* "PETSc/DMPlex.pyx":476
  *                 bcPoints = list(bcPoints)
  *                 assert len(bcPoints) == nbc
  *                 tmp2 = oarray_p(empty_p(nbc), NULL, <void**>&bcpoints)             # <<<<<<<<<<<<<<
  *                 for i from 0 <= i < nbc:
  *                     bcpoints[i] = (<IS?>bcPoints[<Py_ssize_t>i]).iset
  */
-      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nbc)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nbc)); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 476, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_6, NULL, ((void **)(&__pyx_v_bcpoints)))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_6, NULL, ((void **)(&__pyx_v_bcpoints)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 476, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_v_tmp2 = ((PyArrayObject *)__pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "PETSc/DMPlex.pyx":561
+      /* "PETSc/DMPlex.pyx":477
  *                 assert len(bcPoints) == nbc
  *                 tmp2 = oarray_p(empty_p(nbc), NULL, <void**>&bcpoints)
  *                 for i from 0 <= i < nbc:             # <<<<<<<<<<<<<<
@@ -220820,60 +223039,76 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
       __pyx_t_7 = __pyx_v_nbc;
       for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_7; __pyx_v_i++) {
 
-        /* "PETSc/DMPlex.pyx":562
+        /* "PETSc/DMPlex.pyx":478
  *                 tmp2 = oarray_p(empty_p(nbc), NULL, <void**>&bcpoints)
  *                 for i from 0 <= i < nbc:
  *                     bcpoints[i] = (<IS?>bcPoints[<Py_ssize_t>i]).iset             # <<<<<<<<<<<<<<
  *             else:
  *                 raise ValueError("bcPoints is a required argument")
  */
-        __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_bcPoints, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+        __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_bcPoints, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 478, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(42, 478, __pyx_L1_error)
         __pyx_t_8 = ((struct PyPetscISObject *)__pyx_t_2)->iset;
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         (__pyx_v_bcpoints[__pyx_v_i]) = __pyx_t_8;
       }
+
+      /* "PETSc/DMPlex.pyx":473
+ *                 for i from 0 <= i < nbc:
+ *                     bccomps[i] = (<IS?>bcComps[<Py_ssize_t>i]).iset
+ *             if bcPoints is not None:             # <<<<<<<<<<<<<<
+ *                 bcPoints = list(bcPoints)
+ *                 assert len(bcPoints) == nbc
+ */
       goto __pyx_L7;
     }
-    /*else*/ {
 
-      /* "PETSc/DMPlex.pyx":564
+    /* "PETSc/DMPlex.pyx":480
  *                     bcpoints[i] = (<IS?>bcPoints[<Py_ssize_t>i]).iset
  *             else:
  *                 raise ValueError("bcPoints is a required argument")             # <<<<<<<<<<<<<<
  *         else:
  *             assert bcComps  is None
  */
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__62, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    /*else*/ {
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__65, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 480, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      {__pyx_filename = __pyx_f[42]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(42, 480, __pyx_L1_error)
     }
     __pyx_L7:;
+
+    /* "PETSc/DMPlex.pyx":465
+ *         cdef PetscIS *bccomps  = NULL
+ *         cdef PetscIS *bcpoints = NULL
+ *         if bcField is not None:             # <<<<<<<<<<<<<<
+ *             bcField = iarray_i(bcField, &nbc, &bcfield)
+ *             if bcComps is not None:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMPlex.pyx":566
+  /* "PETSc/DMPlex.pyx":482
  *                 raise ValueError("bcPoints is a required argument")
  *         else:
  *             assert bcComps  is None             # <<<<<<<<<<<<<<
  *             assert bcPoints is None
  *         # optional chart permutations
  */
+  /*else*/ {
     #ifndef CYTHON_WITHOUT_ASSERTIONS
     if (unlikely(!Py_OptimizeFlag)) {
       __pyx_t_4 = (__pyx_v_bcComps == Py_None);
       if (unlikely(!(__pyx_t_4 != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[42]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(42, 482, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/DMPlex.pyx":567
+    /* "PETSc/DMPlex.pyx":483
  *         else:
  *             assert bcComps  is None
  *             assert bcPoints is None             # <<<<<<<<<<<<<<
@@ -220885,14 +223120,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
       __pyx_t_4 = (__pyx_v_bcPoints == Py_None);
       if (unlikely(!(__pyx_t_4 != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        {__pyx_filename = __pyx_f[42]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(42, 483, __pyx_L1_error)
       }
     }
     #endif
   }
   __pyx_L3:;
 
-  /* "PETSc/DMPlex.pyx":569
+  /* "PETSc/DMPlex.pyx":485
  *             assert bcPoints is None
  *         # optional chart permutations
  *         cdef PetscIS cperm = NULL             # <<<<<<<<<<<<<<
@@ -220901,7 +223136,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
  */
   __pyx_v_cperm = NULL;
 
-  /* "PETSc/DMPlex.pyx":570
+  /* "PETSc/DMPlex.pyx":486
  *         # optional chart permutations
  *         cdef PetscIS cperm = NULL
  *         if perm is not None: cperm = perm.iset             # <<<<<<<<<<<<<<
@@ -220913,32 +223148,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   if (__pyx_t_3) {
     __pyx_t_8 = __pyx_v_perm->iset;
     __pyx_v_cperm = __pyx_t_8;
-    goto __pyx_L10;
   }
-  __pyx_L10:;
 
-  /* "PETSc/DMPlex.pyx":572
+  /* "PETSc/DMPlex.pyx":488
  *         if perm is not None: cperm = perm.iset
  *         # create section
  *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexCreateSection(self.dm, dim, ncomp, icomp, idof,
  *                                     nbc, bcfield, bccomps, bcpoints,
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Section)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 488, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":573
+  /* "PETSc/DMPlex.pyx":489
  *         # create section
  *         cdef Section sec = Section()
  *         CHKERR( DMPlexCreateSection(self.dm, dim, ncomp, icomp, idof,             # <<<<<<<<<<<<<<
  *                                     nbc, bcfield, bccomps, bcpoints,
  *                                     cperm, &sec.sec) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateSection(__pyx_v_self->__pyx_base.dm, __pyx_v_dim, __pyx_v_ncomp, __pyx_v_icomp, __pyx_v_idof, __pyx_v_nbc, __pyx_v_bcfield, __pyx_v_bccomps, __pyx_v_bcpoints, __pyx_v_cperm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateSection(__pyx_v_self->__pyx_base.dm, __pyx_v_dim, __pyx_v_ncomp, __pyx_v_icomp, __pyx_v_idof, __pyx_v_nbc, __pyx_v_bcfield, __pyx_v_bccomps, __pyx_v_bcpoints, __pyx_v_cperm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 489, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":576
+  /* "PETSc/DMPlex.pyx":492
  *                                     nbc, bcfield, bccomps, bcpoints,
  *                                     cperm, &sec.sec) )
  *         return sec             # <<<<<<<<<<<<<<
@@ -220950,7 +223183,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   __pyx_r = ((PyObject *)__pyx_v_sec);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":532
+  /* "PETSc/DMPlex.pyx":448
  *         return fpoint
  * 
  *     def createSection(self, numComp, numDof,             # <<<<<<<<<<<<<<
@@ -220978,7 +223211,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":578
+/* "PETSc/DMPlex.pyx":494
  *         return sec
  * 
  *     def setRefinementUniform(self, refinementUniform=True):             # <<<<<<<<<<<<<<
@@ -220987,13 +223220,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128createSection(struct __pyx
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_131setRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_130setRefinementUniform[] = "DMPlex.setRefinementUniform(self, refinementUniform=True)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_131setRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_104setRefinementUniform[] = "DMPlex.setRefinementUniform(self, refinementUniform=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_refinementUniform = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setRefinementUniform (wrapper)", 0);
@@ -221018,7 +223248,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_131setRefinementUniform(PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementUniform") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementUniform") < 0)) __PYX_ERR(42, 494, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -221031,50 +223261,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_131setRefinementUniform(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRefinementUniform", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRefinementUniform", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 494, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setRefinementUniform", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_130setRefinementUniform(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_refinementUniform);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_104setRefinementUniform(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_refinementUniform);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_130setRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementUniform) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104setRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementUniform) {
   PetscBool __pyx_v_flag;
   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("setRefinementUniform", 0);
 
-  /* "PETSc/DMPlex.pyx":579
+  /* "PETSc/DMPlex.pyx":495
  * 
  *     def setRefinementUniform(self, refinementUniform=True):
  *         cdef PetscBool flag = refinementUniform             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_refinementUniform)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_refinementUniform)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 495, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":580
+  /* "PETSc/DMPlex.pyx":496
  *     def setRefinementUniform(self, refinementUniform=True):
  *         cdef PetscBool flag = refinementUniform
  *         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )             # <<<<<<<<<<<<<<
  * 
  *     def getRefinementUniform(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetRefinementUniform(__pyx_v_self->__pyx_base.dm, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetRefinementUniform(__pyx_v_self->__pyx_base.dm, __pyx_v_flag)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 496, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":578
+  /* "PETSc/DMPlex.pyx":494
  *         return sec
  * 
  *     def setRefinementUniform(self, refinementUniform=True):             # <<<<<<<<<<<<<<
@@ -221094,7 +223321,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_130setRefinementUniform(struc
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":582
+/* "PETSc/DMPlex.pyx":498
  *         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )
  * 
  *     def getRefinementUniform(self):             # <<<<<<<<<<<<<<
@@ -221103,34 +223330,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_130setRefinementUniform(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_133getRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform[] = "DMPlex.getRefinementUniform(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_133getRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_107getRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform[] = "DMPlex.getRefinementUniform(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_107getRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRefinementUniform (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getRefinementUniform", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefinementUniform", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PetscBool __pyx_v_flag;
   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("getRefinementUniform", 0);
 
-  /* "PETSc/DMPlex.pyx":583
+  /* "PETSc/DMPlex.pyx":499
  * 
  *     def getRefinementUniform(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -221139,16 +223363,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform(struc
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/DMPlex.pyx":584
+  /* "PETSc/DMPlex.pyx":500
  *     def getRefinementUniform(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( DMPlexGetRefinementUniform(self.dm, &flag) )             # <<<<<<<<<<<<<<
  *         return <bint> flag
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetRefinementUniform(__pyx_v_self->__pyx_base.dm, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetRefinementUniform(__pyx_v_self->__pyx_base.dm, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 500, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":585
+  /* "PETSc/DMPlex.pyx":501
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( DMPlexGetRefinementUniform(self.dm, &flag) )
  *         return <bint> flag             # <<<<<<<<<<<<<<
@@ -221156,13 +223380,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform(struc
  *     def setRefinementLimit(self, refinementLimit):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_flag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 501, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":582
+  /* "PETSc/DMPlex.pyx":498
  *         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )
  * 
  *     def getRefinementUniform(self):             # <<<<<<<<<<<<<<
@@ -221181,7 +223405,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform(struc
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":587
+/* "PETSc/DMPlex.pyx":503
  *         return <bint> flag
  * 
  *     def setRefinementLimit(self, refinementLimit):             # <<<<<<<<<<<<<<
@@ -221190,13 +223414,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_135setRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_134setRefinementLimit[] = "DMPlex.setRefinementLimit(self, refinementLimit)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_135setRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_108setRefinementLimit[] = "DMPlex.setRefinementLimit(self, refinementLimit)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_refinementLimit = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setRefinementLimit (wrapper)", 0);
@@ -221218,7 +223439,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_135setRefinementLimit(PyObjec
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementLimit") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementLimit") < 0)) __PYX_ERR(42, 503, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -221229,50 +223450,47 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_135setRefinementLimit(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRefinementLimit", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRefinementLimit", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 503, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setRefinementLimit", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_134setRefinementLimit(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_refinementLimit);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_108setRefinementLimit(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_refinementLimit);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_134setRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementLimit) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementLimit) {
   PetscReal __pyx_v_rval;
   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("setRefinementLimit", 0);
 
-  /* "PETSc/DMPlex.pyx":588
+  /* "PETSc/DMPlex.pyx":504
  * 
  *     def setRefinementLimit(self, refinementLimit):
  *         cdef PetscReal rval = asReal(refinementLimit)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexSetRefinementLimit(self.dm, rval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_refinementLimit); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_refinementLimit); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(42, 504, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":589
+  /* "PETSc/DMPlex.pyx":505
  *     def setRefinementLimit(self, refinementLimit):
  *         cdef PetscReal rval = asReal(refinementLimit)
  *         CHKERR( DMPlexSetRefinementLimit(self.dm, rval) )             # <<<<<<<<<<<<<<
  * 
  *     def getRefinementLimit(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetRefinementLimit(__pyx_v_self->__pyx_base.dm, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetRefinementLimit(__pyx_v_self->__pyx_base.dm, __pyx_v_rval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 505, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":587
+  /* "PETSc/DMPlex.pyx":503
  *         return <bint> flag
  * 
  *     def setRefinementLimit(self, refinementLimit):             # <<<<<<<<<<<<<<
@@ -221292,7 +223510,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_134setRefinementLimit(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":591
+/* "PETSc/DMPlex.pyx":507
  *         CHKERR( DMPlexSetRefinementLimit(self.dm, rval) )
  * 
  *     def getRefinementLimit(self):             # <<<<<<<<<<<<<<
@@ -221301,34 +223519,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_134setRefinementLimit(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_137getRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_136getRefinementLimit[] = "DMPlex.getRefinementLimit(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_137getRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_111getRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit[] = "DMPlex.getRefinementLimit(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_111getRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRefinementLimit (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getRefinementLimit", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefinementLimit", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_136getRefinementLimit(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_136getRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   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("getRefinementLimit", 0);
 
-  /* "PETSc/DMPlex.pyx":592
+  /* "PETSc/DMPlex.pyx":508
  * 
  *     def getRefinementLimit(self):
  *         cdef PetscReal rval = 0.0             # <<<<<<<<<<<<<<
@@ -221337,16 +223552,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_136getRefinementLimit(struct
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/DMPlex.pyx":593
+  /* "PETSc/DMPlex.pyx":509
  *     def getRefinementLimit(self):
  *         cdef PetscReal rval = 0.0
  *         CHKERR( DMPlexGetRefinementLimit(self.dm, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetRefinementLimit(__pyx_v_self->__pyx_base.dm, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetRefinementLimit(__pyx_v_self->__pyx_base.dm, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(42, 509, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":594
+  /* "PETSc/DMPlex.pyx":510
  *         cdef PetscReal rval = 0.0
  *         CHKERR( DMPlexGetRefinementLimit(self.dm, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -221354,13 +223569,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_136getRefinementLimit(struct
  *     def getOrdering(self, otype):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 510, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":591
+  /* "PETSc/DMPlex.pyx":507
  *         CHKERR( DMPlexSetRefinementLimit(self.dm, rval) )
  * 
  *     def getRefinementLimit(self):             # <<<<<<<<<<<<<<
@@ -221379,22 +223594,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_136getRefinementLimit(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":596
+/* "PETSc/DMPlex.pyx":512
  *         return toReal(rval)
  * 
  *     def getOrdering(self, otype):             # <<<<<<<<<<<<<<
  *         cdef PetscMatOrderingType cval = NULL
- *         otype = str2bytes(otype, &cval)
+ *         cdef PetscDMLabel label = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_139getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_138getOrdering[] = "DMPlex.getOrdering(self, otype)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_139getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_112getOrdering[] = "DMPlex.getOrdering(self, otype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_otype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getOrdering (wrapper)", 0);
@@ -221416,7 +223628,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_139getOrdering(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, "getOrdering") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getOrdering") < 0)) __PYX_ERR(42, 512, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -221427,77 +223639,84 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_139getOrdering(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getOrdering", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getOrdering", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 512, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getOrdering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_138getOrdering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_otype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_112getOrdering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_otype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_138getOrdering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_otype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112getOrdering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_otype) {
   const char* __pyx_v_cval;
+  DMLabel __pyx_v_label;
   struct PyPetscISObject *__pyx_v_perm = 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("getOrdering", 0);
   __Pyx_INCREF(__pyx_v_otype);
 
-  /* "PETSc/DMPlex.pyx":597
+  /* "PETSc/DMPlex.pyx":513
  * 
  *     def getOrdering(self, otype):
  *         cdef PetscMatOrderingType cval = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscDMLabel label = NULL
  *         otype = str2bytes(otype, &cval)
- *         cdef IS perm = IS()
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/DMPlex.pyx":598
+  /* "PETSc/DMPlex.pyx":514
  *     def getOrdering(self, otype):
  *         cdef PetscMatOrderingType cval = NULL
+ *         cdef PetscDMLabel label = NULL             # <<<<<<<<<<<<<<
+ *         otype = str2bytes(otype, &cval)
+ *         cdef IS perm = IS()
+ */
+  __pyx_v_label = NULL;
+
+  /* "PETSc/DMPlex.pyx":515
+ *         cdef PetscMatOrderingType cval = NULL
+ *         cdef PetscDMLabel label = NULL
  *         otype = str2bytes(otype, &cval)             # <<<<<<<<<<<<<<
  *         cdef IS perm = IS()
- *         CHKERR( DMPlexGetOrdering(self.dm, cval, &perm.iset) )
+ *         CHKERR( DMPlexGetOrdering(self.dm, cval, label, &perm.iset) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_otype, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_otype, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 515, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_otype, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":599
- *         cdef PetscMatOrderingType cval = NULL
+  /* "PETSc/DMPlex.pyx":516
+ *         cdef PetscDMLabel label = NULL
  *         otype = str2bytes(otype, &cval)
  *         cdef IS perm = IS()             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexGetOrdering(self.dm, cval, &perm.iset) )
+ *         CHKERR( DMPlexGetOrdering(self.dm, cval, label, &perm.iset) )
  *         return perm
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 516, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_perm = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":600
+  /* "PETSc/DMPlex.pyx":517
  *         otype = str2bytes(otype, &cval)
  *         cdef IS perm = IS()
- *         CHKERR( DMPlexGetOrdering(self.dm, cval, &perm.iset) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetOrdering(self.dm, cval, label, &perm.iset) )             # <<<<<<<<<<<<<<
  *         return perm
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetOrdering(__pyx_v_self->__pyx_base.dm, __pyx_v_cval, (&__pyx_v_perm->iset))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetOrdering(__pyx_v_self->__pyx_base.dm, __pyx_v_cval, __pyx_v_label, (&__pyx_v_perm->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 517, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":601
+  /* "PETSc/DMPlex.pyx":518
  *         cdef IS perm = IS()
- *         CHKERR( DMPlexGetOrdering(self.dm, cval, &perm.iset) )
+ *         CHKERR( DMPlexGetOrdering(self.dm, cval, label, &perm.iset) )
  *         return perm             # <<<<<<<<<<<<<<
  * 
  *     def permute(self, IS perm not None):
@@ -221507,12 +223726,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_138getOrdering(struct __pyx_o
   __pyx_r = ((PyObject *)__pyx_v_perm);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":596
+  /* "PETSc/DMPlex.pyx":512
  *         return toReal(rval)
  * 
  *     def getOrdering(self, otype):             # <<<<<<<<<<<<<<
  *         cdef PetscMatOrderingType cval = NULL
- *         otype = str2bytes(otype, &cval)
+ *         cdef PetscDMLabel label = NULL
  */
 
   /* function exit code */
@@ -221528,7 +223747,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_138getOrdering(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":603
+/* "PETSc/DMPlex.pyx":520
  *         return perm
  * 
  *     def permute(self, IS perm not None):             # <<<<<<<<<<<<<<
@@ -221537,13 +223756,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_138getOrdering(struct __pyx_o
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_141permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_140permute[] = "DMPlex.permute(self, IS perm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_141permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_114permute[] = "DMPlex.permute(self, IS perm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_perm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("permute (wrapper)", 0);
@@ -221565,7 +223781,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_141permute(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, "permute") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "permute") < 0)) __PYX_ERR(42, 520, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -221576,14 +223792,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_141permute(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("permute", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("permute", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 520, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.permute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_perm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "perm", 0))) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_perm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_perm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "perm", 0))) __PYX_ERR(42, 520, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_perm);
 
   /* function exit code */
   goto __pyx_L0;
@@ -221594,7 +223810,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_141permute(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscISObject *__pyx_v_perm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscISObject *__pyx_v_perm) {
   struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_dm = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -221602,12 +223818,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(struct __pyx_obj_8
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("permute", 0);
 
-  /* "PETSc/DMPlex.pyx":604
+  /* "PETSc/DMPlex.pyx":521
  * 
  *     def permute(self, IS perm not None):
  *         cdef DMPlex dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
@@ -221626,10 +223839,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(struct __pyx_obj_8
     }
   }
   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[42]; __pyx_lineno = 604; __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(42, 521, __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[42]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 521, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -221639,16 +223852,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(struct __pyx_obj_8
   __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":605
+  /* "PETSc/DMPlex.pyx":522
  *     def permute(self, IS perm not None):
  *         cdef DMPlex dm = <DMPlex>type(self)()
  *         CHKERR( DMPlexPermute(self.dm, perm.iset, &dm.dm) )             # <<<<<<<<<<<<<<
  *         return dm
  * 
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexPermute(__pyx_v_self->__pyx_base.dm, __pyx_v_perm->iset, (&__pyx_v_dm->__pyx_base.dm))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexPermute(__pyx_v_self->__pyx_base.dm, __pyx_v_perm->iset, (&__pyx_v_dm->__pyx_base.dm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(42, 522, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":606
+  /* "PETSc/DMPlex.pyx":523
  *         cdef DMPlex dm = <DMPlex>type(self)()
  *         CHKERR( DMPlexPermute(self.dm, perm.iset, &dm.dm) )
  *         return dm             # <<<<<<<<<<<<<<
@@ -221660,7 +223873,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(struct __pyx_obj_8
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":603
+  /* "PETSc/DMPlex.pyx":520
  *         return perm
  * 
  *     def permute(self, IS perm not None):             # <<<<<<<<<<<<<<
@@ -221682,7 +223895,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":610
+/* "PETSc/DMPlex.pyx":527
  *     #
  * 
  *     def computeCellGeometryFVM(self, cell):             # <<<<<<<<<<<<<<
@@ -221691,13 +223904,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140permute(struct __pyx_obj_8
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_143computeCellGeometryFVM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM[] = "DMPlex.computeCellGeometryFVM(self, cell)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_143computeCellGeometryFVM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117computeCellGeometryFVM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM[] = "DMPlex.computeCellGeometryFVM(self, cell)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117computeCellGeometryFVM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_cell = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeCellGeometryFVM (wrapper)", 0);
@@ -221719,7 +223929,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_143computeCellGeometryFVM(PyO
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeCellGeometryFVM") < 0)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeCellGeometryFVM") < 0)) __PYX_ERR(42, 527, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -221730,20 +223940,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_143computeCellGeometryFVM(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeCellGeometryFVM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[42]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeCellGeometryFVM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 527, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.computeCellGeometryFVM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_cell);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_cell);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cell) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cell) {
   PetscInt __pyx_v_dim;
   PetscInt __pyx_v_ccell;
   PetscReal __pyx_v_vol;
@@ -221757,12 +223967,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM(str
   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("computeCellGeometryFVM", 0);
 
-  /* "PETSc/DMPlex.pyx":611
+  /* "PETSc/DMPlex.pyx":528
  * 
  *     def computeCellGeometryFVM(self, cell):
  *         cdef PetscInt dim = 0             # <<<<<<<<<<<<<<
@@ -221771,26 +223978,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM(str
  */
   __pyx_v_dim = 0;
 
-  /* "PETSc/DMPlex.pyx":612
+  /* "PETSc/DMPlex.pyx":529
  *     def computeCellGeometryFVM(self, cell):
  *         cdef PetscInt dim = 0
  *         cdef PetscInt ccell = asInt(cell)             # <<<<<<<<<<<<<<
  *         CHKERR( DMGetDimension(self.dm, &dim) )
  *         cdef PetscReal vol = 0, centroid[3], normal[3]
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_cell); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_cell); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 529, __pyx_L1_error)
   __pyx_v_ccell = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":613
+  /* "PETSc/DMPlex.pyx":530
  *         cdef PetscInt dim = 0
  *         cdef PetscInt ccell = asInt(cell)
  *         CHKERR( DMGetDimension(self.dm, &dim) )             # <<<<<<<<<<<<<<
  *         cdef PetscReal vol = 0, centroid[3], normal[3]
  *         CHKERR( DMPlexComputeCellGeometryFVM(self.dm, ccell, &vol, centroid, normal) )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDimension(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDimension(__pyx_v_self->__pyx_base.dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 530, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":614
+  /* "PETSc/DMPlex.pyx":531
  *         cdef PetscInt ccell = asInt(cell)
  *         CHKERR( DMGetDimension(self.dm, &dim) )
  *         cdef PetscReal vol = 0, centroid[3], normal[3]             # <<<<<<<<<<<<<<
@@ -221799,27 +224006,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM(str
  */
   __pyx_v_vol = 0.0;
 
-  /* "PETSc/DMPlex.pyx":615
+  /* "PETSc/DMPlex.pyx":532
  *         CHKERR( DMGetDimension(self.dm, &dim) )
  *         cdef PetscReal vol = 0, centroid[3], normal[3]
  *         CHKERR( DMPlexComputeCellGeometryFVM(self.dm, ccell, &vol, centroid, normal) )             # <<<<<<<<<<<<<<
  *         return (toReal(vol), array_r(dim, centroid), array_r(dim, normal))
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexComputeCellGeometryFVM(__pyx_v_self->__pyx_base.dm, __pyx_v_ccell, (&__pyx_v_vol), __pyx_v_centroid, __pyx_v_normal)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexComputeCellGeometryFVM(__pyx_v_self->__pyx_base.dm, __pyx_v_ccell, (&__pyx_v_vol), __pyx_v_centroid, __pyx_v_normal)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 532, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":616
+  /* "PETSc/DMPlex.pyx":533
  *         cdef PetscReal vol = 0, centroid[3], normal[3]
  *         CHKERR( DMPlexComputeCellGeometryFVM(self.dm, ccell, &vol, centroid, normal) )
  *         return (toReal(vol), array_r(dim, centroid), array_r(dim, normal))             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_vol); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_vol); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_r(__pyx_v_dim, __pyx_v_centroid)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_r(__pyx_v_dim, __pyx_v_centroid)); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_r(__pyx_v_dim, __pyx_v_normal)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_r(__pyx_v_dim, __pyx_v_normal)); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -221834,7 +224041,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM(str
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":610
+  /* "PETSc/DMPlex.pyx":527
  *     #
  * 
  *     def computeCellGeometryFVM(self, cell):             # <<<<<<<<<<<<<<
@@ -221869,9 +224076,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_1create(PyObject *__pyx
 static char __pyx_doc_8petsc4py_5PETSc_11DMComposite_create[] = "DMComposite.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_1create(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);
@@ -221896,7 +224100,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_1create(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(43, 5, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -221909,7 +224113,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_1create(PyObject *__pyx
   }
   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[43]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(43, 5, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMComposite.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -221929,9 +224133,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_create(struct __pyx_obj
   __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);
 
   /* "PETSc/DMComposite.pyx":6
@@ -221941,7 +224142,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_create(struct __pyx_obj
  *         cdef PetscDM newdm = NULL
  *         CHKERR( DMCompositeCreate(ccomm, &newdm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(43, 6, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/DMComposite.pyx":7
@@ -221960,7 +224161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_create(struct __pyx_obj
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(43, 8, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":9
  *         cdef PetscDM newdm = NULL
@@ -222016,9 +224217,6 @@ static char __pyx_doc_8petsc4py_5PETSc_11DMComposite_2addDM[] = "DMComposite.add
 static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_3addDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_v_args = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addDM (wrapper)", 0);
@@ -222051,7 +224249,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_3addDM(PyObject *__pyx_
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "addDM") < 0)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "addDM") < 0)) __PYX_ERR(43, 12, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
       goto __pyx_L5_argtuple_error;
@@ -222062,14 +224260,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_3addDM(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("addDM", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[43]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("addDM", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(43, 12, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
   __Pyx_AddTraceback("petsc4py.PETSc.DMComposite.addDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(43, 12, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(((struct __pyx_obj_8petsc4py_5PETSc_DMComposite *)__pyx_v_self), __pyx_v_dm, __pyx_v_args);
 
   /* function exit code */
@@ -222090,9 +224288,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj
   PyObject *__pyx_t_2 = NULL;
   Py_ssize_t __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("addDM", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_dm);
 
@@ -222103,7 +224298,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj
  *         cdef object item
  *         for item in args:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeAddDM(__pyx_v_self->__pyx_base.dm, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeAddDM(__pyx_v_self->__pyx_base.dm, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 14, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":16
  *         CHKERR( DMCompositeAddDM(self.dm, dm.dm) )
@@ -222116,9 +224311,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj
   for (;;) {
     if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(43, 16, __pyx_L1_error)
     #else
-    __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(43, 16, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_4);
@@ -222131,7 +224326,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj
  *             CHKERR( DMCompositeAddDM(self.dm, dm.dm) )
  * 
  */
-    if (!(likely(__Pyx_TypeTest(__pyx_v_item, __pyx_ptype_8petsc4py_5PETSc_DM)))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_v_item, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(43, 17, __pyx_L1_error)
     __pyx_t_4 = __pyx_v_item;
     __Pyx_INCREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_dm, ((struct PyPetscDMObject *)__pyx_t_4));
@@ -222144,7 +224339,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj
  * 
  *     def getNumber(self):
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeAddDM(__pyx_v_self->__pyx_base.dm, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeAddDM(__pyx_v_self->__pyx_base.dm, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 18, __pyx_L1_error)
 
     /* "PETSc/DMComposite.pyx":16
  *         CHKERR( DMCompositeAddDM(self.dm, dm.dm) )
@@ -222211,9 +224406,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_4getNumber(struct __pyx
   __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("getNumber", 0);
 
   /* "PETSc/DMComposite.pyx":22
@@ -222232,7 +224424,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_4getNumber(struct __pyx
  *         return toInt(n)
  *     getNumberDM = getNumber
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 23, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":24
  *         cdef PetscInt n = 0
@@ -222242,7 +224434,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_4getNumber(struct __pyx
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -222296,7 +224488,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_n;
   DM *__pyx_v_cdms;
-  CYTHON_UNUSED PyObject *__pyx_v_cdms_mem = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
   struct PyPetscDMObject *__pyx_v_entry = 0;
   PyObject *__pyx_v_entries = 0;
   PyObject *__pyx_r = NULL;
@@ -222306,9 +224498,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
   PyObject *__pyx_t_3 = NULL;
   PetscInt __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getEntries", 0);
 
   /* "PETSc/DMComposite.pyx":29
@@ -222325,7 +224514,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *         cdef PetscInt i, n = 0
  *         cdef PetscDM *cdms = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
- *         cdef object cdms_mem = oarray_p(empty_p(n), NULL, <void**>&cdms)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&cdms)
  */
   __pyx_v_cdms = NULL;
 
@@ -222333,37 +224522,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *         cdef PetscInt i, n = 0
  *         cdef PetscDM *cdms = NULL
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )             # <<<<<<<<<<<<<<
- *         cdef object cdms_mem = oarray_p(empty_p(n), NULL, <void**>&cdms)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&cdms)
  *         CHKERR( DMCompositeGetEntriesArray(self.dm, cdms) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 31, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":32
  *         cdef PetscDM *cdms = NULL
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
- *         cdef object cdms_mem = oarray_p(empty_p(n), NULL, <void**>&cdms)             # <<<<<<<<<<<<<<
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&cdms)             # <<<<<<<<<<<<<<
  *         CHKERR( DMCompositeGetEntriesArray(self.dm, cdms) )
  *         cdef DM entry = None
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_cdms)))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_cdms)))); if (unlikely(!__pyx_t_3)) __PYX_ERR(43, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v_cdms_mem = __pyx_t_3;
+  __pyx_v_tmp = __pyx_t_3;
   __pyx_t_3 = 0;
 
   /* "PETSc/DMComposite.pyx":33
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
- *         cdef object cdms_mem = oarray_p(empty_p(n), NULL, <void**>&cdms)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&cdms)
  *         CHKERR( DMCompositeGetEntriesArray(self.dm, cdms) )             # <<<<<<<<<<<<<<
  *         cdef DM entry = None
  *         cdef list entries = []
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetEntriesArray(__pyx_v_self->__pyx_base.dm, __pyx_v_cdms)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetEntriesArray(__pyx_v_self->__pyx_base.dm, __pyx_v_cdms)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 33, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":34
- *         cdef object cdms_mem = oarray_p(empty_p(n), NULL, <void**>&cdms)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&cdms)
  *         CHKERR( DMCompositeGetEntriesArray(self.dm, cdms) )
  *         cdef DM entry = None             # <<<<<<<<<<<<<<
  *         cdef list entries = []
@@ -222379,7 +224568,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *         for i from 0 <= i < n:
  *             entry = subtype_DM(cdms[i])()
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(43, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_entries = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
@@ -222401,12 +224590,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *             entry.dm = cdms[i]
  *             PetscINCREF(entry.obj)
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_cdms[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_cdms[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(43, 37, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 37, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(43, 37, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_entry, ((struct PyPetscDMObject *)__pyx_t_2));
     __pyx_t_2 = 0;
 
@@ -222435,7 +224624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *         return tuple(entries)
  * 
  */
-    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_entries, ((PyObject *)__pyx_v_entry)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_entries, ((PyObject *)__pyx_v_entry)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(43, 40, __pyx_L1_error)
   }
 
   /* "PETSc/DMComposite.pyx":41
@@ -222446,7 +224635,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *     def scatter(self, Vec gvec not None, lvecs):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyList_AsTuple(__pyx_v_entries); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_AsTuple(__pyx_v_entries); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -222467,7 +224656,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
   __Pyx_AddTraceback("petsc4py.PETSc.DMComposite.getEntries", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_cdms_mem);
+  __Pyx_XDECREF(__pyx_v_tmp);
   __Pyx_XDECREF((PyObject *)__pyx_v_entry);
   __Pyx_XDECREF(__pyx_v_entries);
   __Pyx_XGIVEREF(__pyx_r);
@@ -222489,9 +224678,6 @@ static char __pyx_doc_8petsc4py_5PETSc_11DMComposite_8scatter[] = "DMComposite.s
 static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_9scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_gvec = 0;
   PyObject *__pyx_v_lvecs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("scatter (wrapper)", 0);
@@ -222515,11 +224701,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_9scatter(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lvecs)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("scatter", 1, 2, 2, 1); {__pyx_filename = __pyx_f[43]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("scatter", 1, 2, 2, 1); __PYX_ERR(43, 43, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter") < 0)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter") < 0)) __PYX_ERR(43, 43, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -222532,13 +224718,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_9scatter(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("scatter", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[43]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("scatter", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(43, 43, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMComposite.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) __PYX_ERR(43, 43, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(((struct __pyx_obj_8petsc4py_5PETSc_DMComposite *)__pyx_v_self), __pyx_v_gvec, __pyx_v_lvecs);
 
   /* function exit code */
@@ -222554,7 +224740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_n;
   Vec *__pyx_v_clvecs;
-  CYTHON_UNUSED PyObject *__pyx_v_clvecs_mem = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -222562,9 +224748,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
   PyObject *__pyx_t_3 = NULL;
   PetscInt __pyx_t_4;
   Vec __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("scatter", 0);
 
   /* "PETSc/DMComposite.pyx":45
@@ -222581,15 +224764,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
  *         cdef PetscInt i, n = 0
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )             # <<<<<<<<<<<<<<
  *         cdef PetscVec *clvecs = NULL
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 46, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":47
  *         cdef PetscInt i, n = 0
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
  *         cdef PetscVec *clvecs = NULL             # <<<<<<<<<<<<<<
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
  *         for i from 0 <= i < n:
  */
   __pyx_v_clvecs = NULL;
@@ -222597,21 +224780,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
   /* "PETSc/DMComposite.pyx":48
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
  *         cdef PetscVec *clvecs = NULL
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)             # <<<<<<<<<<<<<<
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < n:
  *             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 48, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_clvecs)))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_2, NULL, ((void **)(&__pyx_v_clvecs)))); if (unlikely(!__pyx_t_3)) __PYX_ERR(43, 48, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v_clvecs_mem = __pyx_t_3;
+  __pyx_v_tmp = __pyx_t_3;
   __pyx_t_3 = 0;
 
   /* "PETSc/DMComposite.pyx":49
  *         cdef PetscVec *clvecs = NULL
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
  *             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
  *         CHKERR( DMCompositeScatterArray(self.dm, gvec.vec, clvecs) )
@@ -222620,15 +224803,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
 
     /* "PETSc/DMComposite.pyx":50
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
  *         for i from 0 <= i < n:
  *             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec             # <<<<<<<<<<<<<<
  *         CHKERR( DMCompositeScatterArray(self.dm, gvec.vec, clvecs) )
  * 
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_lvecs, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_lvecs, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(43, 50, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(43, 50, __pyx_L1_error)
     __pyx_t_5 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     (__pyx_v_clvecs[__pyx_v_i]) = __pyx_t_5;
@@ -222641,7 +224824,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
  * 
  *     def gather(self, Vec gvec not None, imode, lvecs):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeScatterArray(__pyx_v_self->__pyx_base.dm, __pyx_v_gvec->vec, __pyx_v_clvecs)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeScatterArray(__pyx_v_self->__pyx_base.dm, __pyx_v_gvec->vec, __pyx_v_clvecs)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 51, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":43
  *         return tuple(entries)
@@ -222660,7 +224843,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
   __Pyx_AddTraceback("petsc4py.PETSc.DMComposite.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_clvecs_mem);
+  __Pyx_XDECREF(__pyx_v_tmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -222681,9 +224864,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_11gather(PyObject *__py
   struct PyPetscVecObject *__pyx_v_gvec = 0;
   PyObject *__pyx_v_imode = 0;
   PyObject *__pyx_v_lvecs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gather (wrapper)", 0);
@@ -222708,16 +224888,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_11gather(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_imode)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("gather", 1, 3, 3, 1); {__pyx_filename = __pyx_f[43]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("gather", 1, 3, 3, 1); __PYX_ERR(43, 53, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lvecs)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("gather", 1, 3, 3, 2); {__pyx_filename = __pyx_f[43]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("gather", 1, 3, 3, 2); __PYX_ERR(43, 53, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gather") < 0)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gather") < 0)) __PYX_ERR(43, 53, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -222732,13 +224912,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_11gather(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("gather", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[43]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("gather", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(43, 53, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMComposite.gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) __PYX_ERR(43, 53, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(((struct __pyx_obj_8petsc4py_5PETSc_DMComposite *)__pyx_v_self), __pyx_v_gvec, __pyx_v_imode, __pyx_v_lvecs);
 
   /* function exit code */
@@ -222755,7 +224935,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_n;
   Vec *__pyx_v_clvecs;
-  CYTHON_UNUSED PyObject *__pyx_v_clvecs_mem = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   InsertMode __pyx_t_1;
@@ -222764,9 +224944,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
   PyObject *__pyx_t_4 = NULL;
   PetscInt __pyx_t_5;
   Vec __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("gather", 0);
 
   /* "PETSc/DMComposite.pyx":55
@@ -222776,7 +224953,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
  *         cdef PetscInt i, n = 0
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_imode); if (unlikely(__pyx_t_1 == ((InsertMode)-1))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_imode); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(43, 55, __pyx_L1_error)
   __pyx_v_cimode = __pyx_t_1;
 
   /* "PETSc/DMComposite.pyx":56
@@ -222793,15 +224970,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
  *         cdef PetscInt i, n = 0
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )             # <<<<<<<<<<<<<<
  *         cdef PetscVec *clvecs = NULL
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(43, 57, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":58
  *         cdef PetscInt i, n = 0
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
  *         cdef PetscVec *clvecs = NULL             # <<<<<<<<<<<<<<
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
  *         for i from 0 <= i < n:
  */
   __pyx_v_clvecs = NULL;
@@ -222809,21 +224986,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
   /* "PETSc/DMComposite.pyx":59
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
  *         cdef PetscVec *clvecs = NULL
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)             # <<<<<<<<<<<<<<
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)             # <<<<<<<<<<<<<<
  *         for i from 0 <= i < n:
  *             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_3)) __PYX_ERR(43, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_3, NULL, ((void **)(&__pyx_v_clvecs)))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_3, NULL, ((void **)(&__pyx_v_clvecs)))); if (unlikely(!__pyx_t_4)) __PYX_ERR(43, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_v_clvecs_mem = __pyx_t_4;
+  __pyx_v_tmp = __pyx_t_4;
   __pyx_t_4 = 0;
 
   /* "PETSc/DMComposite.pyx":60
  *         cdef PetscVec *clvecs = NULL
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
  *             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
  *         CHKERR( DMCompositeGatherArray(self.dm, gvec.vec, cimode, clvecs) )
@@ -222832,15 +225009,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
 
     /* "PETSc/DMComposite.pyx":61
- *         cdef object clvecs_mem = oarray_p(empty_p(n), NULL, <void**>&clvecs)
+ *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&clvecs)
  *         for i from 0 <= i < n:
  *             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec             # <<<<<<<<<<<<<<
  *         CHKERR( DMCompositeGatherArray(self.dm, gvec.vec, cimode, clvecs) )
  * 
  */
-    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lvecs, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lvecs, ((Py_ssize_t)__pyx_v_i), Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(43, 61, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(43, 61, __pyx_L1_error)
     __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_4)->vec;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     (__pyx_v_clvecs[__pyx_v_i]) = __pyx_t_6;
@@ -222853,7 +225030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
  * 
  *     def getGlobalISs(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGatherArray(__pyx_v_self->__pyx_base.dm, __pyx_v_gvec->vec, __pyx_v_cimode, __pyx_v_clvecs)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGatherArray(__pyx_v_self->__pyx_base.dm, __pyx_v_gvec->vec, __pyx_v_cimode, __pyx_v_clvecs)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(43, 62, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":53
  *         CHKERR( DMCompositeScatterArray(self.dm, gvec.vec, clvecs) )
@@ -222872,7 +225049,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
   __Pyx_AddTraceback("petsc4py.PETSc.DMComposite.gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_clvecs_mem);
+  __Pyx_XDECREF(__pyx_v_tmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -222914,9 +225091,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct _
   PyObject *__pyx_t_2 = NULL;
   PetscInt __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getGlobalISs", 0);
 
   /* "PETSc/DMComposite.pyx":65
@@ -222944,7 +225118,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct _
  *         CHKERR( DMCompositeGetGlobalISs(self.dm, &cis) )
  *         cdef object isets = [ref_IS(cis[i]) for i from 0 <= i < n]
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 67, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":68
  *         cdef PetscIS *cis = NULL
@@ -222953,7 +225127,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct _
  *         cdef object isets = [ref_IS(cis[i]) for i from 0 <= i < n]
  *         for i from 0 <= i < n:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetGlobalISs(__pyx_v_self->__pyx_base.dm, (&__pyx_v_cis))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetGlobalISs(__pyx_v_self->__pyx_base.dm, (&__pyx_v_cis))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 68, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":69
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
@@ -222962,13 +225136,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct _
  *         for i from 0 <= i < n:
  *             CHKERR( ISDestroy(&cis[i]) )
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_IS((__pyx_v_cis[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_IS((__pyx_v_cis[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(43, 69, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(43, 69, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_v_isets = __pyx_t_2;
@@ -222991,7 +225165,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct _
  *         CHKERR( PetscFree(cis) )
  *         return isets
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&(__pyx_v_cis[__pyx_v_i])))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&(__pyx_v_cis[__pyx_v_i])))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 71, __pyx_L1_error)
   }
 
   /* "PETSc/DMComposite.pyx":72
@@ -223001,7 +225175,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct _
  *         return isets
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cis)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cis)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 72, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":73
  *             CHKERR( ISDestroy(&cis[i]) )
@@ -223072,9 +225246,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_14getLocalISs(struct __
   PyObject *__pyx_t_2 = NULL;
   PetscInt __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getLocalISs", 0);
 
   /* "PETSc/DMComposite.pyx":76
@@ -223102,7 +225273,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_14getLocalISs(struct __
  *         CHKERR( DMCompositeGetLocalISs(self.dm, &cis) )
  *         cdef object isets = [ref_IS(cis[i]) for i from 0 <= i < n]
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 78, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":79
  *         cdef PetscIS *cis = NULL
@@ -223111,7 +225282,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_14getLocalISs(struct __
  *         cdef object isets = [ref_IS(cis[i]) for i from 0 <= i < n]
  *         for i from 0 <= i < n:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetLocalISs(__pyx_v_self->__pyx_base.dm, (&__pyx_v_cis))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetLocalISs(__pyx_v_self->__pyx_base.dm, (&__pyx_v_cis))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 79, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":80
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
@@ -223120,13 +225291,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_14getLocalISs(struct __
  *         for i from 0 <= i < n:
  *             CHKERR( ISDestroy(&cis[i]) )
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 80, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_IS((__pyx_v_cis[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_IS((__pyx_v_cis[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(43, 80, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(43, 80, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_v_isets = __pyx_t_2;
@@ -223149,7 +225320,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_14getLocalISs(struct __
  *         CHKERR( PetscFree(cis) )
  *         return isets
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&(__pyx_v_cis[__pyx_v_i])))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&(__pyx_v_cis[__pyx_v_i])))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 82, __pyx_L1_error)
   }
 
   /* "PETSc/DMComposite.pyx":83
@@ -223159,7 +225330,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_14getLocalISs(struct __
  *         return isets
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cis)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cis)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 83, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":84
  *             CHKERR( ISDestroy(&cis[i]) )
@@ -223230,9 +225401,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __py
   PyObject *__pyx_t_2 = NULL;
   PetscInt __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getLGMaps", 0);
 
   /* "PETSc/DMComposite.pyx":87
@@ -223260,7 +225428,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __py
  *         CHKERR( DMCompositeGetISLocalToGlobalMappings(self.dm, &clgm) )
  *         cdef object lgms = [ref_LGMap(clgm[i]) for i from 0 <= i < n]
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetNumberDM(__pyx_v_self->__pyx_base.dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 89, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":90
  *         cdef PetscLGMap *clgm = NULL
@@ -223269,7 +225437,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __py
  *         cdef object lgms = [ref_LGMap(clgm[i]) for i from 0 <= i < n]
  *         for i from 0 <= i < n:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetISLocalToGlobalMappings(__pyx_v_self->__pyx_base.dm, (&__pyx_v_clgm))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGetISLocalToGlobalMappings(__pyx_v_self->__pyx_base.dm, (&__pyx_v_clgm))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 90, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":91
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
@@ -223278,13 +225446,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __py
  *         for i from 0 <= i < n:
  *             CHKERR( ISLocalToGlobalMappingDestroy(&clgm[i]) )
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 91, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_LGMap((__pyx_v_clgm[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_LGMap((__pyx_v_clgm[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(43, 91, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(43, 91, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_v_lgms = __pyx_t_2;
@@ -223307,7 +225475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __py
  *         CHKERR( PetscFree(clgm) )
  *         return lgms
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingDestroy((&(__pyx_v_clgm[__pyx_v_i])))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingDestroy((&(__pyx_v_clgm[__pyx_v_i])))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 93, __pyx_L1_error)
   }
 
   /* "PETSc/DMComposite.pyx":94
@@ -223317,7 +225485,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __py
  *         return lgms
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_clgm)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_clgm)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(43, 94, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":95
  *             CHKERR( ISLocalToGlobalMappingDestroy(&clgm[i]) )
@@ -223366,9 +225534,6 @@ static char __pyx_doc_8petsc4py_5PETSc_11DMComposite_18getAccess[] = "DMComposit
 static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_19getAccess(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_gvec = 0;
   PyObject *__pyx_v_locs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getAccess (wrapper)", 0);
@@ -223397,7 +225562,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_19getAccess(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getAccess") < 0)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getAccess") < 0)) __PYX_ERR(43, 97, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -223412,13 +225577,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_19getAccess(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getAccess", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[43]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getAccess", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(43, 97, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMComposite.getAccess", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) __PYX_ERR(43, 97, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_11DMComposite_18getAccess(((struct __pyx_obj_8petsc4py_5PETSc_DMComposite *)__pyx_v_self), __pyx_v_gvec, __pyx_v_locs);
 
   /* function exit code */
@@ -223435,9 +225600,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_18getAccess(struct __py
   __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("getAccess", 0);
 
   /* "PETSc/DMComposite.pyx":102
@@ -223446,7 +225608,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_18getAccess(struct __py
  *         return _DMComposite_access(self, gvec, locs)             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(43, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -223457,7 +225619,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_18getAccess(struct __py
   __Pyx_INCREF(__pyx_v_locs);
   __Pyx_GIVEREF(__pyx_v_locs);
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_locs);
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__DMComposite_access)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc__DMComposite_access), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -223497,9 +225659,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_1create(PyObject *__pyx_v_se
 static char __pyx_doc_8petsc4py_5PETSc_7DMShell_create[] = "DMShell.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_1create(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);
@@ -223524,7 +225683,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_1create(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(44, 3, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -223537,7 +225696,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_1create(PyObject *__pyx_v_se
   }
   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[44]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 3, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -223557,9 +225716,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_create(struct __pyx_obj_8pet
   __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);
 
   /* "PETSc/DMShell.pyx":4
@@ -223569,7 +225725,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_create(struct __pyx_obj_8pet
  *         cdef PetscDM newdm = NULL
  *         CHKERR( DMShellCreate(ccomm, &newdm) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(44, 4, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/DMShell.pyx":5
@@ -223588,7 +225744,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_create(struct __pyx_obj_8pet
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(44, 6, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":7
  *         cdef PetscDM newdm = NULL
@@ -223643,9 +225799,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_3setMatrix(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_7DMShell_2setMatrix[] = "DMShell.setMatrix(self, Mat mat)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_3setMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMatrix (wrapper)", 0);
@@ -223667,7 +225820,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_3setMatrix(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, "setMatrix") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatrix") < 0)) __PYX_ERR(44, 10, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -223678,13 +225831,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_3setMatrix(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMatrix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMatrix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 10, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.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, 0, "mat", 0))) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(44, 10, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_2setMatrix(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -223700,9 +225853,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_2setMatrix(struct __pyx_obj_
   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("setMatrix", 0);
 
   /* "PETSc/DMShell.pyx":11
@@ -223712,7 +225862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_2setMatrix(struct __pyx_obj_
  * 
  *     def setGlobalVector(self, Vec gv not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetMatrix(__pyx_v_self->__pyx_base.dm, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetMatrix(__pyx_v_self->__pyx_base.dm, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(44, 11, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":10
  *         return self
@@ -223747,9 +225897,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_5setGlobalVector(PyObject *_
 static char __pyx_doc_8petsc4py_5PETSc_7DMShell_4setGlobalVector[] = "DMShell.setGlobalVector(self, Vec gv)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_5setGlobalVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_gv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGlobalVector (wrapper)", 0);
@@ -223771,7 +225918,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_5setGlobalVector(PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGlobalVector") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGlobalVector") < 0)) __PYX_ERR(44, 13, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -223782,13 +225929,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_5setGlobalVector(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGlobalVector", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGlobalVector", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 13, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setGlobalVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gv), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gv", 0))) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gv), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gv", 0))) __PYX_ERR(44, 13, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_4setGlobalVector(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_gv);
 
   /* function exit code */
@@ -223804,9 +225951,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_4setGlobalVector(struct __py
   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("setGlobalVector", 0);
 
   /* "PETSc/DMShell.pyx":14
@@ -223816,7 +225960,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_4setGlobalVector(struct __py
  * 
  *     def setLocalVector(self, Vec lv not None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetGlobalVector(__pyx_v_self->__pyx_base.dm, __pyx_v_gv->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetGlobalVector(__pyx_v_self->__pyx_base.dm, __pyx_v_gv->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(44, 14, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":13
  *         CHKERR( DMShellSetMatrix(self.dm, mat.mat) )
@@ -223851,9 +225995,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_7setLocalVector(PyObject *__
 static char __pyx_doc_8petsc4py_5PETSc_7DMShell_6setLocalVector[] = "DMShell.setLocalVector(self, Vec lv)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_7setLocalVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_lv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setLocalVector (wrapper)", 0);
@@ -223875,7 +226016,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_7setLocalVector(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalVector") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalVector") < 0)) __PYX_ERR(44, 16, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -223886,13 +226027,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_7setLocalVector(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLocalVector", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLocalVector", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 16, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setLocalVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lv), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "lv", 0))) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lv), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "lv", 0))) __PYX_ERR(44, 16, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_6setLocalVector(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_lv);
 
   /* function exit code */
@@ -223908,9 +226049,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_6setLocalVector(struct __pyx
   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("setLocalVector", 0);
 
   /* "PETSc/DMShell.pyx":17
@@ -223920,7 +226058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_6setLocalVector(struct __pyx
  * 
  *     def setCreateGlobalVector(self, create_gvec, args=None, kargs=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalVector(__pyx_v_self->__pyx_base.dm, __pyx_v_lv->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalVector(__pyx_v_self->__pyx_base.dm, __pyx_v_lv->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(44, 17, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":16
  *         CHKERR( DMShellSetGlobalVector(self.dm, gv.vec) )
@@ -223957,9 +226095,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_9setCreateGlobalVector(PyObj
   PyObject *__pyx_v_create_gvec = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCreateGlobalVector (wrapper)", 0);
@@ -223995,7 +226130,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_9setCreateGlobalVector(PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateGlobalVector") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateGlobalVector") < 0)) __PYX_ERR(44, 19, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -224012,7 +226147,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_9setCreateGlobalVector(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCreateGlobalVector", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCreateGlobalVector", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 19, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateGlobalVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -224033,9 +226168,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struc
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCreateGlobalVector", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -224063,9 +226195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struc
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":22
  *         if create_gvec is not None:
@@ -224077,13 +226207,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struc
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 22, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":23
  *             if args  is None: args = ()
@@ -224092,7 +226220,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struc
  *             self.set_attr('__create_global_vector__', context)
  *             CHKERR( DMShellSetCreateGlobalVector(self.dm, DMSHELL_CreateGlobalVector) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 23, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_create_gvec);
     __Pyx_GIVEREF(__pyx_v_create_gvec);
@@ -224113,7 +226241,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struc
  *             CHKERR( DMShellSetCreateGlobalVector(self.dm, DMSHELL_CreateGlobalVector) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_create_global_vector, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__create_global_vector__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 24, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -224124,19 +226252,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struc
  *         else:
  *             CHKERR( DMShellSetCreateGlobalVector(self.dm, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateGlobalVector(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateGlobalVector(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 25, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":20
+ * 
+ *     def setCreateGlobalVector(self, create_gvec, args=None, kargs=None):
+ *         if create_gvec is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMShell.pyx":27
+  /* "PETSc/DMShell.pyx":27
  *             CHKERR( DMShellSetCreateGlobalVector(self.dm, DMSHELL_CreateGlobalVector) )
  *         else:
  *             CHKERR( DMShellSetCreateGlobalVector(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setCreateLocalVector(self, create_lvec, args=None, kargs=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateGlobalVector(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateGlobalVector(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 27, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -224179,9 +226315,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_11setCreateLocalVector(PyObj
   PyObject *__pyx_v_create_lvec = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCreateLocalVector (wrapper)", 0);
@@ -224217,7 +226350,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_11setCreateLocalVector(PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateLocalVector") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateLocalVector") < 0)) __PYX_ERR(44, 29, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -224234,7 +226367,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_11setCreateLocalVector(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCreateLocalVector", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCreateLocalVector", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 29, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateLocalVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -224255,9 +226388,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struc
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCreateLocalVector", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -224285,9 +226415,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struc
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":32
  *         if create_lvec is not None:
@@ -224299,13 +226427,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struc
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 32, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":33
  *             if args  is None: args = ()
@@ -224314,7 +226440,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struc
  *             self.set_attr('__create_local_vector__', context)
  *             CHKERR( DMShellSetCreateLocalVector(self.dm, DMSHELL_CreateLocalVector) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 33, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_create_lvec);
     __Pyx_GIVEREF(__pyx_v_create_lvec);
@@ -224335,7 +226461,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struc
  *             CHKERR( DMShellSetCreateLocalVector(self.dm, DMSHELL_CreateLocalVector) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_create_local_vector, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__create_local_vector__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 34, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -224346,19 +226472,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struc
  *         else:
  *             CHKERR( DMShellSetCreateLocalVector(self.dm, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateLocalVector(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateLocalVector(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 35, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":30
+ * 
+ *     def setCreateLocalVector(self, create_lvec, args=None, kargs=None):
+ *         if create_lvec is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMShell.pyx":37
+  /* "PETSc/DMShell.pyx":37
  *             CHKERR( DMShellSetCreateLocalVector(self.dm, DMSHELL_CreateLocalVector) )
  *         else:
  *             CHKERR( DMShellSetCreateLocalVector(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setGlobalToLocal(self, begin, end, begin_args=None, begin_kargs=None,
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateLocalVector(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateLocalVector(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 37, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -224404,9 +226538,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_13setGlobalToLocal(PyObject
   PyObject *__pyx_v_begin_kargs = 0;
   PyObject *__pyx_v_end_args = 0;
   PyObject *__pyx_v_end_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGlobalToLocal (wrapper)", 0);
@@ -224446,7 +226577,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_13setGlobalToLocal(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setGlobalToLocal", 0, 2, 6, 1); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setGlobalToLocal", 0, 2, 6, 1); __PYX_ERR(44, 39, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -224470,7 +226601,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_13setGlobalToLocal(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGlobalToLocal") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGlobalToLocal") < 0)) __PYX_ERR(44, 39, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -224493,7 +226624,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_13setGlobalToLocal(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGlobalToLocal", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGlobalToLocal", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 39, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setGlobalToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -224517,8 +226648,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_13setGlobalToLocal(PyObject
 static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs) {
   __pyx_t_8petsc4py_5PETSc_PetscDMShellXToYFunction __pyx_v_cbegin;
   __pyx_t_8petsc4py_5PETSc_PetscDMShellXToYFunction __pyx_v_cend;
-  PyObject *__pyx_v_args = NULL;
-  PyObject *__pyx_v_kargs = NULL;
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -224526,17 +226655,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setGlobalToLocal", 0);
+  __Pyx_INCREF(__pyx_v_begin_args);
+  __Pyx_INCREF(__pyx_v_begin_kargs);
+  __Pyx_INCREF(__pyx_v_end_args);
+  __Pyx_INCREF(__pyx_v_end_kargs);
 
   /* "PETSc/DMShell.pyx":41
  *     def setGlobalToLocal(self, begin, end, begin_args=None, begin_kargs=None,
  *                          end_args=None, end_kargs=None):
  *         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL             # <<<<<<<<<<<<<<
  *         if begin is not None:
- *             if begin_args  is None: args = ()
+ *             if begin_args  is None: begin_args = ()
  */
   __pyx_v_cbegin = NULL;
   __pyx_v_cend = NULL;
@@ -224545,8 +226675,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
  *                          end_args=None, end_kargs=None):
  *         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL
  *         if begin is not None:             # <<<<<<<<<<<<<<
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
  */
   __pyx_t_1 = (__pyx_v_begin != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
@@ -224555,89 +226685,89 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
     /* "PETSc/DMShell.pyx":43
  *         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL
  *         if begin is not None:
- *             if begin_args  is None: args = ()             # <<<<<<<<<<<<<<
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)
+ *             if begin_args  is None: begin_args = ()             # <<<<<<<<<<<<<<
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)
  */
     __pyx_t_2 = (__pyx_v_begin_args == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
-      __pyx_v_args = __pyx_empty_tuple;
-      goto __pyx_L4;
+      __Pyx_DECREF_SET(__pyx_v_begin_args, __pyx_empty_tuple);
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":44
  *         if begin is not None:
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (begin, args, kargs)
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__g2l_begin__', context)
  */
     __pyx_t_1 = (__pyx_v_begin_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 44, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_v_kargs = ((PyObject*)__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_begin_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":45
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)             # <<<<<<<<<<<<<<
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__g2l_begin__', context)
  *             cbegin = &DMSHELL_GlobalToLocalBegin
  */
-    if (unlikely(!__pyx_v_args)) { __Pyx_RaiseUnboundLocalError("args"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    if (unlikely(!__pyx_v_kargs)) { __Pyx_RaiseUnboundLocalError("kargs"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 45, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_begin);
     __Pyx_GIVEREF(__pyx_v_begin);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_begin);
-    __Pyx_INCREF(__pyx_v_args);
-    __Pyx_GIVEREF(__pyx_v_args);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
-    __Pyx_INCREF(__pyx_v_kargs);
-    __Pyx_GIVEREF(__pyx_v_kargs);
-    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+    __Pyx_INCREF(__pyx_v_begin_args);
+    __Pyx_GIVEREF(__pyx_v_begin_args);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_begin_args);
+    __Pyx_INCREF(__pyx_v_begin_kargs);
+    __Pyx_GIVEREF(__pyx_v_begin_kargs);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_begin_kargs);
     __pyx_v_context = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":46
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__g2l_begin__', context)             # <<<<<<<<<<<<<<
  *             cbegin = &DMSHELL_GlobalToLocalBegin
  *         if end is not None:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_g2l_begin, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__g2l_begin__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 46, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":47
- *             context = (begin, args, kargs)
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__g2l_begin__', context)
  *             cbegin = &DMSHELL_GlobalToLocalBegin             # <<<<<<<<<<<<<<
  *         if end is not None:
- *             if end_args  is None: args = ()
+ *             if end_args  is None: end_args = ()
  */
     __pyx_v_cbegin = (&__pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin);
-    goto __pyx_L3;
+
+    /* "PETSc/DMShell.pyx":42
+ *                          end_args=None, end_kargs=None):
+ *         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL
+ *         if begin is not None:             # <<<<<<<<<<<<<<
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/DMShell.pyx":48
  *             self.set_attr('__g2l_begin__', context)
  *             cbegin = &DMSHELL_GlobalToLocalBegin
  *         if end is not None:             # <<<<<<<<<<<<<<
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
  */
   __pyx_t_2 = (__pyx_v_end != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
@@ -224646,82 +226776,82 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
     /* "PETSc/DMShell.pyx":49
  *             cbegin = &DMSHELL_GlobalToLocalBegin
  *         if end is not None:
- *             if end_args  is None: args = ()             # <<<<<<<<<<<<<<
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)
+ *             if end_args  is None: end_args = ()             # <<<<<<<<<<<<<<
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)
  */
     __pyx_t_1 = (__pyx_v_end_args == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
       __Pyx_INCREF(__pyx_empty_tuple);
-      __Pyx_XDECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L7;
+      __Pyx_DECREF_SET(__pyx_v_end_args, __pyx_empty_tuple);
     }
-    __pyx_L7:;
 
     /* "PETSc/DMShell.pyx":50
  *         if end is not None:
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (end, args, kargs)
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__g2l_end__', context)
  */
     __pyx_t_2 = (__pyx_v_end_kargs == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 50, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_XDECREF_SET(__pyx_v_kargs, ((PyObject*)__pyx_t_3));
+      __Pyx_DECREF_SET(__pyx_v_end_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L8;
     }
-    __pyx_L8:;
 
     /* "PETSc/DMShell.pyx":51
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)             # <<<<<<<<<<<<<<
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__g2l_end__', context)
  *             cend = &DMSHELL_GlobalToLocalEnd
  */
-    if (unlikely(!__pyx_v_args)) { __Pyx_RaiseUnboundLocalError("args"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    if (unlikely(!__pyx_v_kargs)) { __Pyx_RaiseUnboundLocalError("kargs"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 51, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_end);
     __Pyx_GIVEREF(__pyx_v_end);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_end);
-    __Pyx_INCREF(__pyx_v_args);
-    __Pyx_GIVEREF(__pyx_v_args);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
-    __Pyx_INCREF(__pyx_v_kargs);
-    __Pyx_GIVEREF(__pyx_v_kargs);
-    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+    __Pyx_INCREF(__pyx_v_end_args);
+    __Pyx_GIVEREF(__pyx_v_end_args);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_end_args);
+    __Pyx_INCREF(__pyx_v_end_kargs);
+    __Pyx_GIVEREF(__pyx_v_end_kargs);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_end_kargs);
     __Pyx_XDECREF_SET(__pyx_v_context, ((PyObject*)__pyx_t_3));
     __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":52
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__g2l_end__', context)             # <<<<<<<<<<<<<<
  *             cend = &DMSHELL_GlobalToLocalEnd
  *         CHKERR( DMShellSetGlobalToLocal(self.dm, cbegin, cend) )
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_g2l_end, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__g2l_end__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 52, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":53
- *             context = (end, args, kargs)
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__g2l_end__', context)
  *             cend = &DMSHELL_GlobalToLocalEnd             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetGlobalToLocal(self.dm, cbegin, cend) )
  * 
  */
     __pyx_v_cend = (&__pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd);
-    goto __pyx_L6;
+
+    /* "PETSc/DMShell.pyx":48
+ *             self.set_attr('__g2l_begin__', context)
+ *             cbegin = &DMSHELL_GlobalToLocalBegin
+ *         if end is not None:             # <<<<<<<<<<<<<<
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
+ */
   }
-  __pyx_L6:;
 
   /* "PETSc/DMShell.pyx":54
  *             self.set_attr('__g2l_end__', context)
@@ -224730,7 +226860,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
  * 
  *     def setGlobalToLocalVecScatter(self, Scatter gtol not None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetGlobalToLocal(__pyx_v_self->__pyx_base.dm, __pyx_v_cbegin, __pyx_v_cend)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetGlobalToLocal(__pyx_v_self->__pyx_base.dm, __pyx_v_cbegin, __pyx_v_cend)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 54, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":39
  *             CHKERR( DMShellSetCreateLocalVector(self.dm, NULL) )
@@ -224748,9 +226878,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setGlobalToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_args);
-  __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_begin_args);
+  __Pyx_XDECREF(__pyx_v_begin_kargs);
+  __Pyx_XDECREF(__pyx_v_end_args);
+  __Pyx_XDECREF(__pyx_v_end_kargs);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -224769,9 +226901,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_15setGlobalToLocalVecScatter
 static char __pyx_doc_8petsc4py_5PETSc_7DMShell_14setGlobalToLocalVecScatter[] = "DMShell.setGlobalToLocalVecScatter(self, Scatter gtol)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_15setGlobalToLocalVecScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscScatterObject *__pyx_v_gtol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGlobalToLocalVecScatter (wrapper)", 0);
@@ -224793,7 +226922,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_15setGlobalToLocalVecScatter
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGlobalToLocalVecScatter") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGlobalToLocalVecScatter") < 0)) __PYX_ERR(44, 56, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -224804,13 +226933,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_15setGlobalToLocalVecScatter
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGlobalToLocalVecScatter", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGlobalToLocalVecScatter", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 56, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setGlobalToLocalVecScatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gtol), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "gtol", 0))) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gtol), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "gtol", 0))) __PYX_ERR(44, 56, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_14setGlobalToLocalVecScatter(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_gtol);
 
   /* function exit code */
@@ -224826,9 +226955,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_14setGlobalToLocalVecScatter
   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("setGlobalToLocalVecScatter", 0);
 
   /* "PETSc/DMShell.pyx":57
@@ -224838,7 +226964,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_14setGlobalToLocalVecScatter
  * 
  *     def setLocalToGlobal(self, begin, end, begin_args=None, begin_kargs=None,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetGlobalToLocalVecScatter(__pyx_v_self->__pyx_base.dm, __pyx_v_gtol->sct)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetGlobalToLocalVecScatter(__pyx_v_self->__pyx_base.dm, __pyx_v_gtol->sct)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(44, 57, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":56
  *         CHKERR( DMShellSetGlobalToLocal(self.dm, cbegin, cend) )
@@ -224878,9 +227004,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_17setLocalToGlobal(PyObject
   PyObject *__pyx_v_begin_kargs = 0;
   PyObject *__pyx_v_end_args = 0;
   PyObject *__pyx_v_end_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setLocalToGlobal (wrapper)", 0);
@@ -224920,7 +227043,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_17setLocalToGlobal(PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setLocalToGlobal", 0, 2, 6, 1); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setLocalToGlobal", 0, 2, 6, 1); __PYX_ERR(44, 59, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -224944,7 +227067,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_17setLocalToGlobal(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalToGlobal") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalToGlobal") < 0)) __PYX_ERR(44, 59, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -224967,7 +227090,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_17setLocalToGlobal(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLocalToGlobal", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLocalToGlobal", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 59, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setLocalToGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -224991,8 +227114,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_17setLocalToGlobal(PyObject
 static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs) {
   __pyx_t_8petsc4py_5PETSc_PetscDMShellXToYFunction __pyx_v_cbegin;
   __pyx_t_8petsc4py_5PETSc_PetscDMShellXToYFunction __pyx_v_cend;
-  PyObject *__pyx_v_args = NULL;
-  PyObject *__pyx_v_kargs = NULL;
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -225000,17 +227121,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setLocalToGlobal", 0);
+  __Pyx_INCREF(__pyx_v_begin_args);
+  __Pyx_INCREF(__pyx_v_begin_kargs);
+  __Pyx_INCREF(__pyx_v_end_args);
+  __Pyx_INCREF(__pyx_v_end_kargs);
 
   /* "PETSc/DMShell.pyx":61
  *     def setLocalToGlobal(self, begin, end, begin_args=None, begin_kargs=None,
  *                          end_args=None, end_kargs=None):
  *         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL             # <<<<<<<<<<<<<<
  *         if begin is not None:
- *             if begin_args  is None: args = ()
+ *             if begin_args  is None: begin_args = ()
  */
   __pyx_v_cbegin = NULL;
   __pyx_v_cend = NULL;
@@ -225019,8 +227141,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
  *                          end_args=None, end_kargs=None):
  *         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL
  *         if begin is not None:             # <<<<<<<<<<<<<<
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
  */
   __pyx_t_1 = (__pyx_v_begin != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
@@ -225029,89 +227151,89 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
     /* "PETSc/DMShell.pyx":63
  *         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL
  *         if begin is not None:
- *             if begin_args  is None: args = ()             # <<<<<<<<<<<<<<
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)
+ *             if begin_args  is None: begin_args = ()             # <<<<<<<<<<<<<<
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)
  */
     __pyx_t_2 = (__pyx_v_begin_args == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
-      __pyx_v_args = __pyx_empty_tuple;
-      goto __pyx_L4;
+      __Pyx_DECREF_SET(__pyx_v_begin_args, __pyx_empty_tuple);
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":64
  *         if begin is not None:
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (begin, args, kargs)
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__l2g_begin__', context)
  */
     __pyx_t_1 = (__pyx_v_begin_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 64, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_v_kargs = ((PyObject*)__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_begin_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":65
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)             # <<<<<<<<<<<<<<
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__l2g_begin__', context)
  *             cbegin = &DMSHELL_LocalToGlobalBegin
  */
-    if (unlikely(!__pyx_v_args)) { __Pyx_RaiseUnboundLocalError("args"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    if (unlikely(!__pyx_v_kargs)) { __Pyx_RaiseUnboundLocalError("kargs"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 65, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_begin);
     __Pyx_GIVEREF(__pyx_v_begin);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_begin);
-    __Pyx_INCREF(__pyx_v_args);
-    __Pyx_GIVEREF(__pyx_v_args);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
-    __Pyx_INCREF(__pyx_v_kargs);
-    __Pyx_GIVEREF(__pyx_v_kargs);
-    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+    __Pyx_INCREF(__pyx_v_begin_args);
+    __Pyx_GIVEREF(__pyx_v_begin_args);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_begin_args);
+    __Pyx_INCREF(__pyx_v_begin_kargs);
+    __Pyx_GIVEREF(__pyx_v_begin_kargs);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_begin_kargs);
     __pyx_v_context = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":66
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__l2g_begin__', context)             # <<<<<<<<<<<<<<
  *             cbegin = &DMSHELL_LocalToGlobalBegin
  *         if end is not None:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_l2g_begin, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__l2g_begin__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 66, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":67
- *             context = (begin, args, kargs)
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__l2g_begin__', context)
  *             cbegin = &DMSHELL_LocalToGlobalBegin             # <<<<<<<<<<<<<<
  *         if end is not None:
- *             if end_args  is None: args = ()
+ *             if end_args  is None: end_args = ()
  */
     __pyx_v_cbegin = (&__pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin);
-    goto __pyx_L3;
+
+    /* "PETSc/DMShell.pyx":62
+ *                          end_args=None, end_kargs=None):
+ *         cdef PetscDMShellXToYFunction cbegin = NULL, cend = NULL
+ *         if begin is not None:             # <<<<<<<<<<<<<<
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/DMShell.pyx":68
  *             self.set_attr('__l2g_begin__', context)
  *             cbegin = &DMSHELL_LocalToGlobalBegin
  *         if end is not None:             # <<<<<<<<<<<<<<
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
  */
   __pyx_t_2 = (__pyx_v_end != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
@@ -225120,82 +227242,82 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
     /* "PETSc/DMShell.pyx":69
  *             cbegin = &DMSHELL_LocalToGlobalBegin
  *         if end is not None:
- *             if end_args  is None: args = ()             # <<<<<<<<<<<<<<
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)
+ *             if end_args  is None: end_args = ()             # <<<<<<<<<<<<<<
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)
  */
     __pyx_t_1 = (__pyx_v_end_args == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
       __Pyx_INCREF(__pyx_empty_tuple);
-      __Pyx_XDECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L7;
+      __Pyx_DECREF_SET(__pyx_v_end_args, __pyx_empty_tuple);
     }
-    __pyx_L7:;
 
     /* "PETSc/DMShell.pyx":70
  *         if end is not None:
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (end, args, kargs)
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__l2g_end__', context)
  */
     __pyx_t_2 = (__pyx_v_end_kargs == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 70, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_XDECREF_SET(__pyx_v_kargs, ((PyObject*)__pyx_t_3));
+      __Pyx_DECREF_SET(__pyx_v_end_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L8;
     }
-    __pyx_L8:;
 
     /* "PETSc/DMShell.pyx":71
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)             # <<<<<<<<<<<<<<
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__l2g_end__', context)
  *             cend = &DMSHELL_LocalToGlobalEnd
  */
-    if (unlikely(!__pyx_v_args)) { __Pyx_RaiseUnboundLocalError("args"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    if (unlikely(!__pyx_v_kargs)) { __Pyx_RaiseUnboundLocalError("kargs"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 71, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_end);
     __Pyx_GIVEREF(__pyx_v_end);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_end);
-    __Pyx_INCREF(__pyx_v_args);
-    __Pyx_GIVEREF(__pyx_v_args);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
-    __Pyx_INCREF(__pyx_v_kargs);
-    __Pyx_GIVEREF(__pyx_v_kargs);
-    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+    __Pyx_INCREF(__pyx_v_end_args);
+    __Pyx_GIVEREF(__pyx_v_end_args);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_end_args);
+    __Pyx_INCREF(__pyx_v_end_kargs);
+    __Pyx_GIVEREF(__pyx_v_end_kargs);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_end_kargs);
     __Pyx_XDECREF_SET(__pyx_v_context, ((PyObject*)__pyx_t_3));
     __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":72
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__l2g_end__', context)             # <<<<<<<<<<<<<<
  *             cend = &DMSHELL_LocalToGlobalEnd
  *         CHKERR( DMShellSetLocalToGlobal(self.dm, cbegin, cend) )
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_l2g_end, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__l2g_end__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 72, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":73
- *             context = (end, args, kargs)
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__l2g_end__', context)
  *             cend = &DMSHELL_LocalToGlobalEnd             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetLocalToGlobal(self.dm, cbegin, cend) )
  * 
  */
     __pyx_v_cend = (&__pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd);
-    goto __pyx_L6;
+
+    /* "PETSc/DMShell.pyx":68
+ *             self.set_attr('__l2g_begin__', context)
+ *             cbegin = &DMSHELL_LocalToGlobalBegin
+ *         if end is not None:             # <<<<<<<<<<<<<<
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
+ */
   }
-  __pyx_L6:;
 
   /* "PETSc/DMShell.pyx":74
  *             self.set_attr('__l2g_end__', context)
@@ -225204,7 +227326,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
  * 
  *     def setLocalToGlobalVecScatter(self, Scatter ltog not None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalToGlobal(__pyx_v_self->__pyx_base.dm, __pyx_v_cbegin, __pyx_v_cend)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalToGlobal(__pyx_v_self->__pyx_base.dm, __pyx_v_cbegin, __pyx_v_cend)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 74, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":59
  *         CHKERR( DMShellSetGlobalToLocalVecScatter(self.dm, gtol.sct) )
@@ -225222,9 +227344,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setLocalToGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_args);
-  __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_begin_args);
+  __Pyx_XDECREF(__pyx_v_begin_kargs);
+  __Pyx_XDECREF(__pyx_v_end_args);
+  __Pyx_XDECREF(__pyx_v_end_kargs);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -225243,9 +227367,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_19setLocalToGlobalVecScatter
 static char __pyx_doc_8petsc4py_5PETSc_7DMShell_18setLocalToGlobalVecScatter[] = "DMShell.setLocalToGlobalVecScatter(self, Scatter ltog)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_19setLocalToGlobalVecScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscScatterObject *__pyx_v_ltog = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setLocalToGlobalVecScatter (wrapper)", 0);
@@ -225267,7 +227388,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_19setLocalToGlobalVecScatter
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalToGlobalVecScatter") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalToGlobalVecScatter") < 0)) __PYX_ERR(44, 76, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -225278,13 +227399,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_19setLocalToGlobalVecScatter
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLocalToGlobalVecScatter", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLocalToGlobalVecScatter", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 76, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setLocalToGlobalVecScatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ltog), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "ltog", 0))) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ltog), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "ltog", 0))) __PYX_ERR(44, 76, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_18setLocalToGlobalVecScatter(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_ltog);
 
   /* function exit code */
@@ -225300,9 +227421,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_18setLocalToGlobalVecScatter
   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("setLocalToGlobalVecScatter", 0);
 
   /* "PETSc/DMShell.pyx":77
@@ -225312,7 +227430,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_18setLocalToGlobalVecScatter
  * 
  *     def setLocalToLocal(self, begin, end, begin_args=None, begin_kargs=None,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalToGlobalVecScatter(__pyx_v_self->__pyx_base.dm, __pyx_v_ltog->sct)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalToGlobalVecScatter(__pyx_v_self->__pyx_base.dm, __pyx_v_ltog->sct)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(44, 77, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":76
  *         CHKERR( DMShellSetLocalToGlobal(self.dm, cbegin, cend) )
@@ -225352,9 +227470,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_21setLocalToLocal(PyObject *
   PyObject *__pyx_v_begin_kargs = 0;
   PyObject *__pyx_v_end_args = 0;
   PyObject *__pyx_v_end_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setLocalToLocal (wrapper)", 0);
@@ -225394,7 +227509,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_21setLocalToLocal(PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setLocalToLocal", 0, 2, 6, 1); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setLocalToLocal", 0, 2, 6, 1); __PYX_ERR(44, 79, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -225418,7 +227533,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_21setLocalToLocal(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalToLocal") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalToLocal") < 0)) __PYX_ERR(44, 79, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -225441,7 +227556,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_21setLocalToLocal(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLocalToLocal", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLocalToLocal", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 79, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setLocalToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -225465,8 +227580,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_21setLocalToLocal(PyObject *
 static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_begin, PyObject *__pyx_v_end, PyObject *__pyx_v_begin_args, PyObject *__pyx_v_begin_kargs, PyObject *__pyx_v_end_args, PyObject *__pyx_v_end_kargs) {
   __pyx_t_8petsc4py_5PETSc_PetscDMShellXToYFunction __pyx_v_cbegin;
   __pyx_t_8petsc4py_5PETSc_PetscDMShellXToYFunction __pyx_v_cend;
-  PyObject *__pyx_v_args = NULL;
-  PyObject *__pyx_v_kargs = NULL;
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -225474,10 +227587,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setLocalToLocal", 0);
+  __Pyx_INCREF(__pyx_v_begin_args);
+  __Pyx_INCREF(__pyx_v_begin_kargs);
+  __Pyx_INCREF(__pyx_v_end_args);
+  __Pyx_INCREF(__pyx_v_end_kargs);
 
   /* "PETSc/DMShell.pyx":81
  *     def setLocalToLocal(self, begin, end, begin_args=None, begin_kargs=None,
@@ -225503,7 +227617,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
  *         cbegin = NULL
  *         cend = NULL             # <<<<<<<<<<<<<<
  *         if begin is not None:
- *             if begin_args  is None: args = ()
+ *             if begin_args  is None: begin_args = ()
  */
   __pyx_v_cend = NULL;
 
@@ -225511,8 +227625,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
  *         cbegin = NULL
  *         cend = NULL
  *         if begin is not None:             # <<<<<<<<<<<<<<
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
  */
   __pyx_t_1 = (__pyx_v_begin != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
@@ -225521,89 +227635,89 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
     /* "PETSc/DMShell.pyx":85
  *         cend = NULL
  *         if begin is not None:
- *             if begin_args  is None: args = ()             # <<<<<<<<<<<<<<
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)
+ *             if begin_args  is None: begin_args = ()             # <<<<<<<<<<<<<<
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)
  */
     __pyx_t_2 = (__pyx_v_begin_args == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
-      __pyx_v_args = __pyx_empty_tuple;
-      goto __pyx_L4;
+      __Pyx_DECREF_SET(__pyx_v_begin_args, __pyx_empty_tuple);
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":86
  *         if begin is not None:
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (begin, args, kargs)
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__l2l_begin__', context)
  */
     __pyx_t_1 = (__pyx_v_begin_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 86, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_v_kargs = ((PyObject*)__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_begin_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":87
- *             if begin_args  is None: args = ()
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)             # <<<<<<<<<<<<<<
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__l2l_begin__', context)
  *             cbegin = &DMSHELL_LocalToLocalBegin
  */
-    if (unlikely(!__pyx_v_args)) { __Pyx_RaiseUnboundLocalError("args"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    if (unlikely(!__pyx_v_kargs)) { __Pyx_RaiseUnboundLocalError("kargs"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 87, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_begin);
     __Pyx_GIVEREF(__pyx_v_begin);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_begin);
-    __Pyx_INCREF(__pyx_v_args);
-    __Pyx_GIVEREF(__pyx_v_args);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
-    __Pyx_INCREF(__pyx_v_kargs);
-    __Pyx_GIVEREF(__pyx_v_kargs);
-    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+    __Pyx_INCREF(__pyx_v_begin_args);
+    __Pyx_GIVEREF(__pyx_v_begin_args);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_begin_args);
+    __Pyx_INCREF(__pyx_v_begin_kargs);
+    __Pyx_GIVEREF(__pyx_v_begin_kargs);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_begin_kargs);
     __pyx_v_context = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":88
- *             if begin_kargs is None: kargs = {}
- *             context = (begin, args, kargs)
+ *             if begin_kargs is None: begin_kargs = {}
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__l2l_begin__', context)             # <<<<<<<<<<<<<<
  *             cbegin = &DMSHELL_LocalToLocalBegin
  *         if end is not None:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_l2l_begin, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__l2l_begin__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 88, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":89
- *             context = (begin, args, kargs)
+ *             context = (begin, begin_args, begin_kargs)
  *             self.set_attr('__l2l_begin__', context)
  *             cbegin = &DMSHELL_LocalToLocalBegin             # <<<<<<<<<<<<<<
  *         if end is not None:
- *             if end_args  is None: args = ()
+ *             if end_args  is None: end_args = ()
  */
     __pyx_v_cbegin = (&__pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin);
-    goto __pyx_L3;
+
+    /* "PETSc/DMShell.pyx":84
+ *         cbegin = NULL
+ *         cend = NULL
+ *         if begin is not None:             # <<<<<<<<<<<<<<
+ *             if begin_args  is None: begin_args = ()
+ *             if begin_kargs is None: begin_kargs = {}
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/DMShell.pyx":90
  *             self.set_attr('__l2l_begin__', context)
  *             cbegin = &DMSHELL_LocalToLocalBegin
  *         if end is not None:             # <<<<<<<<<<<<<<
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
  */
   __pyx_t_2 = (__pyx_v_end != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
@@ -225612,82 +227726,82 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
     /* "PETSc/DMShell.pyx":91
  *             cbegin = &DMSHELL_LocalToLocalBegin
  *         if end is not None:
- *             if end_args  is None: args = ()             # <<<<<<<<<<<<<<
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)
+ *             if end_args  is None: end_args = ()             # <<<<<<<<<<<<<<
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)
  */
     __pyx_t_1 = (__pyx_v_end_args == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
       __Pyx_INCREF(__pyx_empty_tuple);
-      __Pyx_XDECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L7;
+      __Pyx_DECREF_SET(__pyx_v_end_args, __pyx_empty_tuple);
     }
-    __pyx_L7:;
 
     /* "PETSc/DMShell.pyx":92
  *         if end is not None:
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (end, args, kargs)
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__l2l_end__', context)
  */
     __pyx_t_2 = (__pyx_v_end_kargs == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 92, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_XDECREF_SET(__pyx_v_kargs, ((PyObject*)__pyx_t_3));
+      __Pyx_DECREF_SET(__pyx_v_end_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L8;
     }
-    __pyx_L8:;
 
     /* "PETSc/DMShell.pyx":93
- *             if end_args  is None: args = ()
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)             # <<<<<<<<<<<<<<
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)             # <<<<<<<<<<<<<<
  *             self.set_attr('__l2l_end__', context)
  *             cend = &DMSHELL_LocalToLocalEnd
  */
-    if (unlikely(!__pyx_v_args)) { __Pyx_RaiseUnboundLocalError("args"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    if (unlikely(!__pyx_v_kargs)) { __Pyx_RaiseUnboundLocalError("kargs"); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 93, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_end);
     __Pyx_GIVEREF(__pyx_v_end);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_end);
-    __Pyx_INCREF(__pyx_v_args);
-    __Pyx_GIVEREF(__pyx_v_args);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
-    __Pyx_INCREF(__pyx_v_kargs);
-    __Pyx_GIVEREF(__pyx_v_kargs);
-    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+    __Pyx_INCREF(__pyx_v_end_args);
+    __Pyx_GIVEREF(__pyx_v_end_args);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_end_args);
+    __Pyx_INCREF(__pyx_v_end_kargs);
+    __Pyx_GIVEREF(__pyx_v_end_kargs);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_end_kargs);
     __Pyx_XDECREF_SET(__pyx_v_context, ((PyObject*)__pyx_t_3));
     __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":94
- *             if end_kargs is None: kargs = {}
- *             context = (end, args, kargs)
+ *             if end_kargs is None: end_kargs = {}
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__l2l_end__', context)             # <<<<<<<<<<<<<<
  *             cend = &DMSHELL_LocalToLocalEnd
  *         CHKERR( DMShellSetLocalToLocal(self.dm, cbegin, cend) )
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_l2l_end, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__l2l_end__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 94, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
     /* "PETSc/DMShell.pyx":95
- *             context = (end, args, kargs)
+ *             context = (end, end_args, end_kargs)
  *             self.set_attr('__l2l_end__', context)
  *             cend = &DMSHELL_LocalToLocalEnd             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetLocalToLocal(self.dm, cbegin, cend) )
  * 
  */
     __pyx_v_cend = (&__pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd);
-    goto __pyx_L6;
+
+    /* "PETSc/DMShell.pyx":90
+ *             self.set_attr('__l2l_begin__', context)
+ *             cbegin = &DMSHELL_LocalToLocalBegin
+ *         if end is not None:             # <<<<<<<<<<<<<<
+ *             if end_args  is None: end_args = ()
+ *             if end_kargs is None: end_kargs = {}
+ */
   }
-  __pyx_L6:;
 
   /* "PETSc/DMShell.pyx":96
  *             self.set_attr('__l2l_end__', context)
@@ -225696,7 +227810,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
  * 
  *     def setLocalToLocalVecScatter(self, Scatter ltol not None):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalToLocal(__pyx_v_self->__pyx_base.dm, __pyx_v_cbegin, __pyx_v_cend)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalToLocal(__pyx_v_self->__pyx_base.dm, __pyx_v_cbegin, __pyx_v_cend)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 96, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":79
  *         CHKERR( DMShellSetLocalToGlobalVecScatter(self.dm, ltog.sct) )
@@ -225714,9 +227828,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setLocalToLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_args);
-  __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_begin_args);
+  __Pyx_XDECREF(__pyx_v_begin_kargs);
+  __Pyx_XDECREF(__pyx_v_end_args);
+  __Pyx_XDECREF(__pyx_v_end_kargs);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -225735,9 +227851,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_23setLocalToLocalVecScatter(
 static char __pyx_doc_8petsc4py_5PETSc_7DMShell_22setLocalToLocalVecScatter[] = "DMShell.setLocalToLocalVecScatter(self, Scatter ltol)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_23setLocalToLocalVecScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscScatterObject *__pyx_v_ltol = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setLocalToLocalVecScatter (wrapper)", 0);
@@ -225759,7 +227872,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_23setLocalToLocalVecScatter(
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalToLocalVecScatter") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLocalToLocalVecScatter") < 0)) __PYX_ERR(44, 98, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -225770,13 +227883,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_23setLocalToLocalVecScatter(
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLocalToLocalVecScatter", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLocalToLocalVecScatter", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 98, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setLocalToLocalVecScatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ltol), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "ltol", 0))) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ltol), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "ltol", 0))) __PYX_ERR(44, 98, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_22setLocalToLocalVecScatter(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_ltol);
 
   /* function exit code */
@@ -225792,9 +227905,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_22setLocalToLocalVecScatter(
   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("setLocalToLocalVecScatter", 0);
 
   /* "PETSc/DMShell.pyx":99
@@ -225804,7 +227914,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_22setLocalToLocalVecScatter(
  * 
  *     def setCreateMatrix(self, create_matrix, args=None, kargs=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalToLocalVecScatter(__pyx_v_self->__pyx_base.dm, __pyx_v_ltol->sct)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetLocalToLocalVecScatter(__pyx_v_self->__pyx_base.dm, __pyx_v_ltol->sct)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(44, 99, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":98
  *         CHKERR( DMShellSetLocalToLocal(self.dm, cbegin, cend) )
@@ -225841,14 +227951,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_25setCreateMatrix(PyObject *
   PyObject *__pyx_v_create_matrix = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCreateMatrix (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_create_matrix_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_create_matrix,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -225865,7 +227972,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_25setCreateMatrix(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_matrix_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_matrix)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -225879,7 +227986,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_25setCreateMatrix(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateMatrix") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateMatrix") < 0)) __PYX_ERR(44, 101, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -225896,7 +228003,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_25setCreateMatrix(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCreateMatrix", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCreateMatrix", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 101, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -225917,9 +228024,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __p
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCreateMatrix", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -225947,9 +228051,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __p
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":104
  *         if create_matrix is not None:
@@ -225961,13 +228063,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __p
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 104, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":105
  *             if args  is None: args  = ()
@@ -225976,7 +228076,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __p
  *             self.set_attr('__create_matrix__', context)
  *             CHKERR( DMShellSetCreateMatrix(self.dm, DMSHELL_CreateMatrix) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 105, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_create_matrix);
     __Pyx_GIVEREF(__pyx_v_create_matrix);
@@ -225997,7 +228097,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __p
  *             CHKERR( DMShellSetCreateMatrix(self.dm, DMSHELL_CreateMatrix) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_create_matrix, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__create_matrix__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 106, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -226008,19 +228108,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __p
  *         else:
  *             CHKERR( DMShellSetCreateMatrix(self.dm, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateMatrix(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateMatrix(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 107, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":102
+ * 
+ *     def setCreateMatrix(self, create_matrix, args=None, kargs=None):
+ *         if create_matrix is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMShell.pyx":109
+  /* "PETSc/DMShell.pyx":109
  *             CHKERR( DMShellSetCreateMatrix(self.dm, DMSHELL_CreateMatrix) )
  *         else:
  *             CHKERR( DMShellSetCreateMatrix(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setCoarsen(self, coarsen, args=None, kargs=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateMatrix(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateMatrix(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 109, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -226063,14 +228171,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_27setCoarsen(PyObject *__pyx
   PyObject *__pyx_v_coarsen = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCoarsen (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_coarsen_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_coarsen,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -226087,7 +228192,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_27setCoarsen(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coarsen_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coarsen)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -226101,7 +228206,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_27setCoarsen(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCoarsen") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCoarsen") < 0)) __PYX_ERR(44, 111, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -226118,7 +228223,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_27setCoarsen(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCoarsen", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCoarsen", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 111, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCoarsen", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -226139,9 +228244,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_ob
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCoarsen", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -226169,9 +228271,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_ob
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":114
  *         if coarsen is not None:
@@ -226183,13 +228283,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_ob
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 114, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":115
  *             if args  is None: args  = ()
@@ -226198,7 +228296,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_ob
  *             self.set_attr('__coarsen__', context)
  *             CHKERR( DMShellSetCoarsen(self.dm, DMSHELL_Coarsen) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 115, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_coarsen);
     __Pyx_GIVEREF(__pyx_v_coarsen);
@@ -226219,7 +228317,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_ob
  *             CHKERR( DMShellSetCoarsen(self.dm, DMSHELL_Coarsen) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_coarsen, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__coarsen__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 116, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -226230,19 +228328,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_ob
  *         else:
  *             CHKERR( DMShellSetCoarsen(self.dm, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCoarsen(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCoarsen(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 117, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":112
+ * 
+ *     def setCoarsen(self, coarsen, args=None, kargs=None):
+ *         if coarsen is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMShell.pyx":119
+  /* "PETSc/DMShell.pyx":119
  *             CHKERR( DMShellSetCoarsen(self.dm, DMSHELL_Coarsen) )
  *         else:
  *             CHKERR( DMShellSetCoarsen(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setRefine(self, refine, args=None, kargs=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCoarsen(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCoarsen(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 119, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -226285,14 +228391,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_29setRefine(PyObject *__pyx_
   PyObject *__pyx_v_refine = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setRefine (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_refine_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_refine,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -226309,7 +228412,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_29setRefine(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_refine_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_refine)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -226323,7 +228426,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_29setRefine(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefine") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefine") < 0)) __PYX_ERR(44, 121, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -226340,7 +228443,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_29setRefine(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRefine", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRefine", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 121, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setRefine", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -226361,9 +228464,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setRefine", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -226391,9 +228491,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":124
  *         if refine is not None:
@@ -226405,13 +228503,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 124, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":125
  *             if args  is None: args  = ()
@@ -226420,7 +228516,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj
  *             self.set_attr('__refine__', context)
  *             CHKERR( DMShellSetRefine(self.dm, DMSHELL_Refine) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 125, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_refine);
     __Pyx_GIVEREF(__pyx_v_refine);
@@ -226441,7 +228537,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj
  *             CHKERR( DMShellSetRefine(self.dm, DMSHELL_Refine) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_refine, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__refine__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 126, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -226452,19 +228548,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj
  *         else:
  *             CHKERR( DMShellSetRefine(self.dm, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetRefine(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetRefine(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 127, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":122
+ * 
+ *     def setRefine(self, refine, args=None, kargs=None):
+ *         if refine is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMShell.pyx":129
+  /* "PETSc/DMShell.pyx":129
  *             CHKERR( DMShellSetRefine(self.dm, DMSHELL_Refine) )
  *         else:
  *             CHKERR( DMShellSetRefine(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setCreateInterpolation(self, create_interpolation, args=None, kargs=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetRefine(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetRefine(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 129, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -226507,14 +228611,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_31setCreateInterpolation(PyO
   PyObject *__pyx_v_create_interpolation = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCreateInterpolation (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_create_interpolation_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_create_interpolation,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -226531,7 +228632,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_31setCreateInterpolation(PyO
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_interpolation_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_interpolation)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -226545,7 +228646,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_31setCreateInterpolation(PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateInterpolation") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateInterpolation") < 0)) __PYX_ERR(44, 131, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -226562,7 +228663,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_31setCreateInterpolation(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCreateInterpolation", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCreateInterpolation", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 131, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateInterpolation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -226583,9 +228684,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(str
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCreateInterpolation", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -226613,9 +228711,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(str
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":134
  *         if create_interpolation is not None:
@@ -226627,13 +228723,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(str
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 134, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":135
  *             if args  is None: args  = ()
@@ -226642,7 +228736,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(str
  *             self.set_attr('__create_interpolation__', context)
  *             CHKERR( DMShellSetCreateInterpolation(self.dm, DMSHELL_CreateInterpolation) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 135, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_create_interpolation);
     __Pyx_GIVEREF(__pyx_v_create_interpolation);
@@ -226663,7 +228757,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(str
  *             CHKERR( DMShellSetCreateInterpolation(self.dm, DMSHELL_CreateInterpolation) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_create_interpolation, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__create_interpolation__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 136, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -226674,19 +228768,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(str
  *         else:
  *             CHKERR( DMShellSetCreateInterpolation(self.dm, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInterpolation(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInterpolation(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 137, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":132
+ * 
+ *     def setCreateInterpolation(self, create_interpolation, args=None, kargs=None):
+ *         if create_interpolation is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMShell.pyx":139
+  /* "PETSc/DMShell.pyx":139
  *             CHKERR( DMShellSetCreateInterpolation(self.dm, DMSHELL_CreateInterpolation) )
  *         else:
  *             CHKERR( DMShellSetCreateInterpolation(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setCreateInjection(self, create_injection, args=None, kargs=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInterpolation(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInterpolation(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 139, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -226729,14 +228831,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_33setCreateInjection(PyObjec
   PyObject *__pyx_v_create_injection = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCreateInjection (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_create_injection_2,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_create_injection,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
     PyObject* values[3] = {0,0,0};
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
@@ -226753,7 +228852,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_33setCreateInjection(PyObjec
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_injection_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_injection)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
@@ -226767,7 +228866,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_33setCreateInjection(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateInjection") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateInjection") < 0)) __PYX_ERR(44, 141, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -226784,7 +228883,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_33setCreateInjection(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCreateInjection", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCreateInjection", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 141, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateInjection", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -226805,9 +228904,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCreateInjection", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -226835,9 +228931,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":144
  *         if create_injection is not None:
@@ -226849,13 +228943,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 144, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":145
  *             if args  is None: args  = ()
@@ -226864,7 +228956,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct
  *             self.set_attr('__create_injection__', context)
  *             CHKERR( DMShellSetCreateInjection(self.dm, DMSHELL_CreateInjection) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 145, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_create_injection);
     __Pyx_GIVEREF(__pyx_v_create_injection);
@@ -226885,7 +228977,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct
  *             CHKERR( DMShellSetCreateInjection(self.dm, DMSHELL_CreateInjection) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_create_injection, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__create_injection__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 146, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -226896,19 +228988,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct
  *         else:
  *             CHKERR( DMShellSetCreateInjection(self.dm, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInjection(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInjection(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 147, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":142
+ * 
+ *     def setCreateInjection(self, create_injection, args=None, kargs=None):
+ *         if create_injection is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMShell.pyx":149
+  /* "PETSc/DMShell.pyx":149
  *             CHKERR( DMShellSetCreateInjection(self.dm, DMSHELL_CreateInjection) )
  *         else:
  *             CHKERR( DMShellSetCreateInjection(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInjection(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInjection(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 149, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -226951,9 +229051,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateFieldDecompositio
   PyObject *__pyx_v_decomp = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCreateFieldDecomposition (wrapper)", 0);
@@ -226989,7 +229086,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateFieldDecompositio
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateFieldDecomposition") < 0)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateFieldDecomposition") < 0)) __PYX_ERR(44, 151, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -227006,7 +229103,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateFieldDecompositio
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCreateFieldDecomposition", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[44]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCreateFieldDecomposition", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 151, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateFieldDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -227027,9 +229124,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCreateFieldDecomposition", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
@@ -227057,9 +229151,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
     if (__pyx_t_1) {
       __Pyx_INCREF(__pyx_empty_tuple);
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-      goto __pyx_L4;
     }
-    __pyx_L4:;
 
     /* "PETSc/DMShell.pyx":154
  *         if decomp is not None:
@@ -227071,13 +229163,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
     __pyx_t_1 = (__pyx_v_kargs == Py_None);
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
-      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 154, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
 
     /* "PETSc/DMShell.pyx":155
  *             if args  is None: args = ()
@@ -227086,7 +229176,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
  *             self.set_attr('__create_field_decomp__', context)
  *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 155, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_decomp);
     __Pyx_GIVEREF(__pyx_v_decomp);
@@ -227107,7 +229197,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
  *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )
  *         else:
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_create_field_decomp, __pyx_v_context); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__create_field_decomp__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -227118,17 +229208,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
  *         else:
  *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateFieldDecomposition(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateFieldDecomposition(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 157, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":152
+ * 
+ *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
+ *         if decomp is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "PETSc/DMShell.pyx":159
+  /* "PETSc/DMShell.pyx":159
  *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )
  *         else:
  *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
  */
-    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateFieldDecomposition(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateFieldDecomposition(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 159, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -227156,6 +229256,224 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
   return __pyx_r;
 }
 
+/* "PETSc/DMShell.pyx":161
+ *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
+ * 
+ *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if create_subdm is not None:
+ *             if args  is None: args = ()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateSubDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7DMShell_36setCreateSubDM[] = "DMShell.setCreateSubDM(self, create_subdm, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateSubDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_create_subdm = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setCreateSubDM (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_create_subdm,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    PyObject* values[3] = {0,0,0};
+    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 (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_subdm)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateSubDM") < 0)) __PYX_ERR(44, 161, __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_create_subdm = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setCreateSubDM", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 161, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateSubDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_create_subdm, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_subdm, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+  PyObject *__pyx_v_context = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setCreateSubDM", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/DMShell.pyx":162
+ * 
+ *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
+ *         if create_subdm is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_1 = (__pyx_v_create_subdm != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/DMShell.pyx":163
+ *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
+ *         if create_subdm is not None:
+ *             if args  is None: args = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (create_subdm, args, kargs)
+ */
+    __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);
+    }
+
+    /* "PETSc/DMShell.pyx":164
+ *         if create_subdm is not None:
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (create_subdm, args, kargs)
+ *             self.set_attr('__create_subdm__', context)
+ */
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 164, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+      __pyx_t_3 = 0;
+    }
+
+    /* "PETSc/DMShell.pyx":165
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ *             context = (create_subdm, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__create_subdm__', context)
+ *             CHKERR( DMShellSetCreateSubDM(self.dm, DMSHELL_CreateSubDM) )
+ */
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 165, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_create_subdm);
+    __Pyx_GIVEREF(__pyx_v_create_subdm);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_create_subdm);
+    __Pyx_INCREF(__pyx_v_args);
+    __Pyx_GIVEREF(__pyx_v_args);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
+    __Pyx_INCREF(__pyx_v_kargs);
+    __Pyx_GIVEREF(__pyx_v_kargs);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_kargs);
+    __pyx_v_context = ((PyObject*)__pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "PETSc/DMShell.pyx":166
+ *             if kargs is None: kargs = {}
+ *             context = (create_subdm, args, kargs)
+ *             self.set_attr('__create_subdm__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( DMShellSetCreateSubDM(self.dm, DMSHELL_CreateSubDM) )
+ *         else:
+ */
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__create_subdm__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 166, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/DMShell.pyx":167
+ *             context = (create_subdm, args, kargs)
+ *             self.set_attr('__create_subdm__', context)
+ *             CHKERR( DMShellSetCreateSubDM(self.dm, DMSHELL_CreateSubDM) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             CHKERR( DMShellSetCreateSubDM(self.dm, NULL) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateSubDM(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 167, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":162
+ * 
+ *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
+ *         if create_subdm is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ */
+    goto __pyx_L3;
+  }
+
+  /* "PETSc/DMShell.pyx":169
+ *             CHKERR( DMShellSetCreateSubDM(self.dm, DMSHELL_CreateSubDM) )
+ *         else:
+ *             CHKERR( DMShellSetCreateSubDM(self.dm, NULL) )             # <<<<<<<<<<<<<<
+ */
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateSubDM(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(44, 169, __pyx_L1_error)
+  }
+  __pyx_L3:;
+
+  /* "PETSc/DMShell.pyx":161
+ *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
+ * 
+ *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if create_subdm is not None:
+ *             if args  is None: args = ()
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateSubDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
 /* "PETSc/SF.pyx":13
  *     Type = SFType
  * 
@@ -227239,9 +229557,6 @@ static void __pyx_pw_8petsc4py_5PETSc_2SF_3__dealloc__(PyObject *__pyx_v_self) {
 static void __pyx_pf_8petsc4py_5PETSc_2SF_2__dealloc__(struct PyPetscSFObject *__pyx_v_self) {
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
   /* "PETSc/SF.pyx":18
@@ -227251,7 +229566,7 @@ static void __pyx_pf_8petsc4py_5PETSc_2SF_2__dealloc__(struct PyPetscSFObject *_
  *         self.sf = NULL
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFDestroy((&__pyx_v_self->sf))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFDestroy((&__pyx_v_self->sf))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(45, 18, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":19
  *     def __dealloc__(self):
@@ -227291,9 +229606,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_5view(PyObject *__pyx_v_self, PyO
 static char __pyx_doc_8petsc4py_5PETSc_2SF_4view[] = "SF.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_5view(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);
@@ -227318,7 +229630,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_5view(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[45]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(45, 21, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -227331,13 +229643,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_5view(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[45]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(45, 21, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SF.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[45]; __pyx_lineno = 21; __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(45, 21, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2SF_4view(((struct PyPetscSFObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -227357,9 +229669,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_4view(struct PyPetscSFObject *__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);
 
   /* "PETSc/SF.pyx":22
@@ -227383,9 +229692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_4view(struct PyPetscSFObject *__p
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/SF.pyx":24
  *         cdef PetscViewer vwr = NULL
@@ -227394,7 +229701,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_4view(struct PyPetscSFObject *__p
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFView(__pyx_v_self->sf, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFView(__pyx_v_self->sf, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(45, 24, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":21
  *         self.sf = NULL
@@ -227445,9 +229752,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_6destroy(struct PyPetscSFObject *
   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);
 
   /* "PETSc/SF.pyx":27
@@ -227457,7 +229761,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_6destroy(struct PyPetscSFObject *
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFDestroy((&__pyx_v_self->sf))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFDestroy((&__pyx_v_self->sf))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(45, 27, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":28
  *     def destroy(self):
@@ -227502,9 +229806,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_9create(PyObject *__pyx_v_self, P
 static char __pyx_doc_8petsc4py_5PETSc_2SF_8create[] = "SF.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_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);
@@ -227529,7 +229830,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_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[45]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(45, 30, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -227542,7 +229843,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_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[45]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(45, 30, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SF.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -227562,9 +229863,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_8create(struct PyPetscSFObject *_
   __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);
 
   /* "PETSc/SF.pyx":31
@@ -227574,7 +229872,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_8create(struct PyPetscSFObject *_
  *         cdef PetscSF newsf = NULL
  *         CHKERR( PetscSFCreate(ccomm, &newsf) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(45, 31, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/SF.pyx":32
@@ -227593,7 +229891,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_8create(struct PyPetscSFObject *_
  *         PetscCLEAR(self.obj); self.sf = newsf
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFCreate(__pyx_v_ccomm, (&__pyx_v_newsf))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFCreate(__pyx_v_ccomm, (&__pyx_v_newsf))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(45, 33, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":34
  *         cdef PetscSF newsf = NULL
@@ -227648,9 +229946,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_11setType(PyObject *__pyx_v_self,
 static char __pyx_doc_8petsc4py_5PETSc_2SF_10setType[] = "SF.setType(self, sf_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_sf_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);
@@ -227672,7 +229967,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_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[45]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(45, 37, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -227683,7 +229978,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_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[45]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(45, 37, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SF.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -227702,9 +229997,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_10setType(struct PyPetscSFObject
   __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_sf_type);
 
@@ -227724,7 +230016,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_10setType(struct PyPetscSFObject
  *         CHKERR( PetscSFSetType(self.sf, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_sf_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_sf_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(45, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_sf_type, __pyx_t_1);
   __pyx_t_1 = 0;
@@ -227736,7 +230028,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_10setType(struct PyPetscSFObject
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetType(__pyx_v_self->sf, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetType(__pyx_v_self->sf, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(45, 40, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":37
  *         return self
@@ -227791,9 +230083,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_12getType(struct PyPetscSFObject
   __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);
 
   /* "PETSc/SF.pyx":43
@@ -227812,7 +230101,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_12getType(struct PyPetscSFObject
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetType(((PetscObject)__pyx_v_self->sf), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetType(((PetscObject)__pyx_v_self->sf), (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(45, 44, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":45
  *         cdef PetscSFType cval = NULL
@@ -227822,7 +230111,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_12getType(struct PyPetscSFObject
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -227876,9 +230165,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_14setFromOptions(struct PyPetscSF
   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);
 
   /* "PETSc/SF.pyx":48
@@ -227888,7 +230174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_14setFromOptions(struct PyPetscSF
  * 
  *     def setUp(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetFromOptions(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetFromOptions(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(45, 48, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":47
  *         return bytes2str(cval)
@@ -227939,9 +230225,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_16setUp(struct PyPetscSFObject *_
   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);
 
   /* "PETSc/SF.pyx":51
@@ -227951,7 +230234,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_16setUp(struct PyPetscSFObject *_
  * 
  *     def reset(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetUp(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetUp(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(45, 51, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":50
  *         CHKERR( PetscSFSetFromOptions(self.sf) )
@@ -228002,9 +230285,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_18reset(struct PyPetscSFObject *_
   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);
 
   /* "PETSc/SF.pyx":54
@@ -228014,7 +230294,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_18reset(struct PyPetscSFObject *_
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFReset(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFReset(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(45, 54, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":53
  *         CHKERR( PetscSFSetUp(self.sf) )
@@ -228081,9 +230361,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   int __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getGraph", 0);
 
   /* "PETSc/SF.pyx":59
@@ -228091,7 +230368,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
  *     def getGraph(self):
  *         cdef PetscInt nroots = 0, nleaves = 0             # <<<<<<<<<<<<<<
  *         cdef const_PetscInt *ilocal = NULL
- *         cdef const_PetscSFNode *iremote
+ *         cdef const_PetscSFNode *iremote = NULL
  */
   __pyx_v_nroots = 0;
   __pyx_v_nleaves = 0;
@@ -228100,28 +230377,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
  *     def getGraph(self):
  *         cdef PetscInt nroots = 0, nleaves = 0
  *         cdef const_PetscInt *ilocal = NULL             # <<<<<<<<<<<<<<
- *         cdef const_PetscSFNode *iremote
+ *         cdef const_PetscSFNode *iremote = NULL
  *         CHKERR( PetscSFGetGraph(self.sf, &nroots, &nleaves, &ilocal, &iremote) )
  */
   __pyx_v_ilocal = NULL;
 
+  /* "PETSc/SF.pyx":61
+ *         cdef PetscInt nroots = 0, nleaves = 0
+ *         cdef const_PetscInt *ilocal = NULL
+ *         cdef const_PetscSFNode *iremote = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscSFGetGraph(self.sf, &nroots, &nleaves, &ilocal, &iremote) )
+ *         local = array_i(nleaves, ilocal)
+ */
+  __pyx_v_iremote = NULL;
+
   /* "PETSc/SF.pyx":62
  *         cdef const_PetscInt *ilocal = NULL
- *         cdef const_PetscSFNode *iremote
+ *         cdef const_PetscSFNode *iremote = NULL
  *         CHKERR( PetscSFGetGraph(self.sf, &nroots, &nleaves, &ilocal, &iremote) )             # <<<<<<<<<<<<<<
  *         local = array_i(nleaves, ilocal)
  *         remote = []
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFGetGraph(__pyx_v_self->sf, (&__pyx_v_nroots), (&__pyx_v_nleaves), (&__pyx_v_ilocal), (&__pyx_v_iremote))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFGetGraph(__pyx_v_self->sf, (&__pyx_v_nroots), (&__pyx_v_nleaves), (&__pyx_v_ilocal), (&__pyx_v_iremote))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(45, 62, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":63
- *         cdef const_PetscSFNode *iremote
+ *         cdef const_PetscSFNode *iremote = NULL
  *         CHKERR( PetscSFGetGraph(self.sf, &nroots, &nleaves, &ilocal, &iremote) )
  *         local = array_i(nleaves, ilocal)             # <<<<<<<<<<<<<<
  *         remote = []
  *         for i in range(toInt(nleaves)):
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nleaves, __pyx_v_ilocal)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nleaves, __pyx_v_ilocal)); if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_local = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -228133,7 +230419,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
  *         for i in range(toInt(nleaves)):
  *             sfnode = (toInt(iremote[asInt(i)].rank), toInt(iremote[asInt(i)].index))
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_remote = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -228145,23 +230431,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
  *             sfnode = (toInt(iremote[asInt(i)].rank), toInt(iremote[asInt(i)].index))
  *             remote.append( sfnode )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nleaves); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nleaves); if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
     __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 65, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(45, 65, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
@@ -228169,17 +230455,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(45, 65, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 65, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(45, 65, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 65, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -228189,7 +230475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
         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[45]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(45, 65, __pyx_L1_error)
         }
         break;
       }
@@ -228205,13 +230491,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
  *             remote.append( sfnode )
  *         return toInt(nroots), toInt(nleaves), local, remote
  */
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_i); if (unlikely(__pyx_t_6 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_iremote[__pyx_t_6]).rank); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_i); if (unlikely(__pyx_t_6 == -1L && PyErr_Occurred())) __PYX_ERR(45, 66, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_iremote[__pyx_t_6]).rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 66, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_i); if (unlikely(__pyx_t_6 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_iremote[__pyx_t_6]).index); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_i); if (unlikely(__pyx_t_6 == -1L && PyErr_Occurred())) __PYX_ERR(45, 66, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_iremote[__pyx_t_6]).index); if (unlikely(!__pyx_t_7)) __PYX_ERR(45, 66, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(45, 66, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
@@ -228229,7 +230515,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
  *         return toInt(nroots), toInt(nleaves), local, remote
  * 
  */
-    __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_remote, __pyx_v_sfnode); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_remote, __pyx_v_sfnode); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(45, 67, __pyx_L1_error)
 
     /* "PETSc/SF.pyx":65
  *         local = array_i(nleaves, ilocal)
@@ -228249,11 +230535,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
  *     def setGraph(self, nroots, nleaves, local, remote):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nroots); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nroots); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nleaves); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nleaves); if (unlikely(!__pyx_t_8)) __PYX_ERR(45, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(45, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
@@ -228313,9 +230599,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_23setGraph(PyObject *__pyx_v_self
   PyObject *__pyx_v_nleaves = 0;
   PyObject *__pyx_v_local = 0;
   PyObject *__pyx_v_remote = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setGraph (wrapper)", 0);
@@ -228341,21 +230624,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_23setGraph(PyObject *__pyx_v_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nleaves)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setGraph", 1, 4, 4, 1); {__pyx_filename = __pyx_f[45]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setGraph", 1, 4, 4, 1); __PYX_ERR(45, 70, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_local)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setGraph", 1, 4, 4, 2); {__pyx_filename = __pyx_f[45]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setGraph", 1, 4, 4, 2); __PYX_ERR(45, 70, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_remote)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setGraph", 1, 4, 4, 3); {__pyx_filename = __pyx_f[45]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setGraph", 1, 4, 4, 3); __PYX_ERR(45, 70, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGraph") < 0)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGraph") < 0)) __PYX_ERR(45, 70, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -228372,7 +230655,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_23setGraph(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGraph", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[45]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setGraph", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(45, 70, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SF.setGraph", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -228407,9 +230690,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setGraph", 0);
   __Pyx_INCREF(__pyx_v_local);
 
@@ -228420,7 +230700,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
  *         cdef PetscInt cnleaves = asInt(nleaves)
  *         cdef PetscInt nlocal = 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nroots); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nroots); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(45, 71, __pyx_L1_error)
   __pyx_v_cnroots = __pyx_t_1;
 
   /* "PETSc/SF.pyx":72
@@ -228430,7 +230710,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
  *         cdef PetscInt nlocal = 0
  *         cdef PetscInt *ilocal = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nleaves); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nleaves); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(45, 72, __pyx_L1_error)
   __pyx_v_cnleaves = __pyx_t_1;
 
   /* "PETSc/SF.pyx":73
@@ -228458,7 +230738,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
  *         cdef PetscSFNode* iremote = NULL
  *         CHKERR( PetscMalloc(nleaves*sizeof(PetscSFNode), &iremote) )
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_local, (&__pyx_v_nlocal), (&__pyx_v_ilocal))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_local, (&__pyx_v_nlocal), (&__pyx_v_ilocal))); if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_local, __pyx_t_2);
   __pyx_t_2 = 0;
@@ -228479,14 +230759,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
  *         cdef int i = 0
  *         for rank, index in remote:
  */
-  __pyx_t_2 = __Pyx_PyInt_FromSize_t((sizeof(PetscSFNode))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_FromSize_t((sizeof(PetscSFNode))); if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Multiply(__pyx_v_nleaves, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Multiply(__pyx_v_nleaves, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(45, 77, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc(__pyx_t_4, (&__pyx_v_iremote))); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc(__pyx_t_4, (&__pyx_v_iremote))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(45, 77, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":78
  *         cdef PetscSFNode* iremote = NULL
@@ -228508,26 +230788,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
     __pyx_t_3 = __pyx_v_remote; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
   } else {
-    __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_remote); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_remote); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 79, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(45, 79, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_7)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(45, 79, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 79, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(45, 79, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(45, 79, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -228537,7 +230817,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
         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[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(45, 79, __pyx_L1_error)
         }
         break;
       }
@@ -228553,7 +230833,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __PYX_ERR(45, 79, __pyx_L1_error)
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -228566,15 +230846,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
       __Pyx_INCREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(45, 79, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(45, 79, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       #endif
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_10 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(45, 79, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -228582,7 +230862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
       __Pyx_GOTREF(__pyx_t_8);
       index = 1; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) __PYX_ERR(45, 79, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L6_unpacking_done;
@@ -228590,7 +230870,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[45]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(45, 79, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_rank, __pyx_t_8);
@@ -228605,7 +230885,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
  *             iremote[i].index = asInt(index)
  *             i += 1
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_rank); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_rank); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(45, 80, __pyx_L1_error)
     (__pyx_v_iremote[__pyx_v_i]).rank = __pyx_t_1;
 
     /* "PETSc/SF.pyx":81
@@ -228615,7 +230895,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
  *             i += 1
  *         CHKERR( PetscSFSetGraph(self.sf, cnroots, cnleaves, ilocal, PETSC_COPY_VALUES, iremote, PETSC_OWN_POINTER) )
  */
-    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(45, 81, __pyx_L1_error)
     (__pyx_v_iremote[__pyx_v_i]).index = __pyx_t_1;
 
     /* "PETSc/SF.pyx":82
@@ -228644,7 +230924,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
  * 
  *     def setRankOrder(self, flag):
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetGraph(__pyx_v_self->sf, __pyx_v_cnroots, __pyx_v_cnleaves, __pyx_v_ilocal, PETSC_COPY_VALUES, __pyx_v_iremote, PETSC_OWN_POINTER)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetGraph(__pyx_v_self->sf, __pyx_v_cnroots, __pyx_v_cnleaves, __pyx_v_ilocal, PETSC_COPY_VALUES, __pyx_v_iremote, PETSC_OWN_POINTER)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(45, 83, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":70
  *         return toInt(nroots), toInt(nleaves), local, remote
@@ -228687,9 +230967,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_25setRankOrder(PyObject *__pyx_v_
 static char __pyx_doc_8petsc4py_5PETSc_2SF_24setRankOrder[] = "SF.setRankOrder(self, flag)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_25setRankOrder(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("setRankOrder (wrapper)", 0);
@@ -228711,7 +230988,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_25setRankOrder(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, "setRankOrder") < 0)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRankOrder") < 0)) __PYX_ERR(45, 85, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -228722,7 +230999,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_25setRankOrder(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRankOrder", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[45]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRankOrder", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(45, 85, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SF.setRankOrder", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -228741,9 +231018,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_24setRankOrder(struct PyPetscSFOb
   __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("setRankOrder", 0);
 
   /* "PETSc/SF.pyx":86
@@ -228753,7 +231027,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_24setRankOrder(struct PyPetscSFOb
  *         CHKERR( PetscSFSetRankOrder(self.sf, bval) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(45, 86, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
   /* "PETSc/SF.pyx":87
@@ -228763,7 +231037,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_24setRankOrder(struct PyPetscSFOb
  * 
  *     #
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetRankOrder(__pyx_v_self->sf, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetRankOrder(__pyx_v_self->sf, __pyx_v_bval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(45, 87, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":85
  *         CHKERR( PetscSFSetGraph(self.sf, cnroots, cnleaves, ilocal, PETSC_COPY_VALUES, iremote, PETSC_OWN_POINTER) )
@@ -228816,9 +231090,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_26getMulti(struct PyPetscSFObject
   __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("getMulti", 0);
 
   /* "PETSc/SF.pyx":92
@@ -228828,7 +231099,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_26getMulti(struct PyPetscSFObject
  *         CHKERR( PetscSFGetMultiSF(self.sf, &sf.sf) )
  *         PetscINCREF(sf.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SF)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(45, 92, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -228840,7 +231111,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_26getMulti(struct PyPetscSFObject
  *         PetscINCREF(sf.obj)
  *         return sf
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFGetMultiSF(__pyx_v_self->sf, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFGetMultiSF(__pyx_v_self->sf, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(45, 93, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":94
  *         cdef SF sf = SF()
@@ -228914,9 +231185,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_28createInverse(struct PyPetscSFO
   __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("createInverse", 0);
 
   /* "PETSc/SF.pyx":98
@@ -228926,7 +231194,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_28createInverse(struct PyPetscSFO
  *         CHKERR( PetscSFCreateInverseSF(self.sf, &sf.sf) )
  *         return sf
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SF)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(45, 98, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -228938,7 +231206,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_28createInverse(struct PyPetscSFO
  *         return sf
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFCreateInverseSF(__pyx_v_self->sf, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFCreateInverseSF(__pyx_v_self->sf, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(45, 99, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":100
  *         cdef SF sf = SF()
@@ -229046,9 +231314,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_3view(PyObject *__pyx_v
 static char __pyx_doc_8petsc4py_5PETSc_11Partitioner_2view[] = "Partitioner.view(self, Viewer viewer=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_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);
@@ -229073,7 +231338,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_3view(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(46, 18, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -229086,13 +231351,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_3view(PyObject *__pyx_v
   }
   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[46]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(46, 18, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Partitioner.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[46]; __pyx_lineno = 18; __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(46, 18, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_11Partitioner_2view(((struct PyPetscPartitionerObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -229112,9 +231377,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_2view(struct PyPetscPar
   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);
 
   /* "PETSc/Partitioner.pyx":19
@@ -229138,9 +231400,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_2view(struct PyPetscPar
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "PETSc/Partitioner.pyx":21
  *         cdef PetscViewer vwr = NULL
@@ -229149,7 +231409,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_2view(struct PyPetscPar
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerView(__pyx_v_self->part, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerView(__pyx_v_self->part, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(46, 21, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":18
  *         self.part = NULL
@@ -229200,9 +231460,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_4destroy(struct PyPetsc
   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);
 
   /* "PETSc/Partitioner.pyx":24
@@ -229212,7 +231469,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_4destroy(struct PyPetsc
  *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerDestroy((&__pyx_v_self->part))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerDestroy((&__pyx_v_self->part))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(46, 24, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":25
  *     def destroy(self):
@@ -229257,9 +231514,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_7create(PyObject *__pyx
 static char __pyx_doc_8petsc4py_5PETSc_11Partitioner_6create[] = "Partitioner.create(self, comm=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_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);
@@ -229284,7 +231538,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_7create(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(46, 27, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -229297,7 +231551,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_7create(PyObject *__pyx
   }
   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[46]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(46, 27, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Partitioner.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -229317,9 +231571,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_6create(struct PyPetscP
   __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);
 
   /* "PETSc/Partitioner.pyx":28
@@ -229329,7 +231580,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_6create(struct PyPetscP
  *         cdef PetscPartitioner newpart = NULL
  *         CHKERR( PetscPartitionerCreate(ccomm, &newpart) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(46, 28, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "PETSc/Partitioner.pyx":29
@@ -229348,7 +231599,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_6create(struct PyPetscP
  *         PetscCLEAR(self.obj); self.part = newpart
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerCreate(__pyx_v_ccomm, (&__pyx_v_newpart))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerCreate(__pyx_v_ccomm, (&__pyx_v_newpart))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(46, 30, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":31
  *         cdef PetscPartitioner newpart = NULL
@@ -229403,9 +231654,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_9setType(PyObject *__py
 static char __pyx_doc_8petsc4py_5PETSc_11Partitioner_8setType[] = "Partitioner.setType(self, part_type)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_part_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);
@@ -229427,7 +231675,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_9setType(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, "setType") < 0)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(46, 34, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -229438,7 +231686,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_9setType(PyObject *__py
   }
   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[46]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(46, 34, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Partitioner.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -229457,9 +231705,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_8setType(struct PyPetsc
   __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_part_type);
 
@@ -229479,7 +231724,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_8setType(struct PyPetsc
  *         CHKERR( PetscPartitionerSetType(self.part, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_part_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_part_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(46, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_part_type, __pyx_t_1);
   __pyx_t_1 = 0;
@@ -229491,7 +231736,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_8setType(struct PyPetsc
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetType(__pyx_v_self->part, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetType(__pyx_v_self->part, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(46, 37, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":34
  *         return self
@@ -229546,9 +231791,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_10getType(struct PyPets
   __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);
 
   /* "PETSc/Partitioner.pyx":40
@@ -229567,7 +231809,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_10getType(struct PyPets
  *         return bytes2str(cval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerGetType(__pyx_v_self->part, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerGetType(__pyx_v_self->part, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(46, 41, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":42
  *         cdef PetscPartitionerType cval = NULL
@@ -229577,7 +231819,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_10getType(struct PyPets
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(46, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -229631,9 +231873,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_12setFromOptions(struct
   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);
 
   /* "PETSc/Partitioner.pyx":45
@@ -229643,7 +231882,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_12setFromOptions(struct
  * 
  *     def setUp(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetFromOptions(__pyx_v_self->part)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetFromOptions(__pyx_v_self->part)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(46, 45, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":44
  *         return bytes2str(cval)
@@ -229694,9 +231933,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_14setUp(struct PyPetscP
   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);
 
   /* "PETSc/Partitioner.pyx":48
@@ -229706,7 +231942,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_14setUp(struct PyPetscP
  * 
  *     def setShellPartition(self, numProcs, sizes=None, points=None):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetUp(__pyx_v_self->part)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetUp(__pyx_v_self->part)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(46, 48, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":47
  *         CHKERR( PetscPartitionerSetFromOptions(self.part) )
@@ -229743,9 +231979,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_17setShellPartition(PyO
   PyObject *__pyx_v_numProcs = 0;
   PyObject *__pyx_v_sizes = 0;
   PyObject *__pyx_v_points = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setShellPartition (wrapper)", 0);
@@ -229781,7 +232014,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_17setShellPartition(PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setShellPartition") < 0)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setShellPartition") < 0)) __PYX_ERR(46, 50, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -229798,7 +232031,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_17setShellPartition(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setShellPartition", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[46]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setShellPartition", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(46, 50, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Partitioner.setShellPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -229825,9 +232058,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setShellPartition", 0);
   __Pyx_INCREF(__pyx_v_sizes);
   __Pyx_INCREF(__pyx_v_points);
@@ -229839,7 +232069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
  *         cdef PetscInt *csizes = NULL
  *         cdef PetscInt *cpoints = NULL
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numProcs); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numProcs); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(46, 51, __pyx_L1_error)
   __pyx_v_cnumProcs = __pyx_t_1;
 
   /* "PETSc/Partitioner.pyx":52
@@ -229887,7 +232117,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
  *             if nsize != cnumProcs:
  *                 raise ValueError("sizes array should have %d entries (has %d)" %
  */
-    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_sizes, (&__pyx_v_nsize), (&__pyx_v_csizes))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_sizes, (&__pyx_v_nsize), (&__pyx_v_csizes))); if (unlikely(!__pyx_t_4)) __PYX_ERR(46, 56, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_sizes, __pyx_t_4);
     __pyx_t_4 = 0;
@@ -229909,7 +232139,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
  *                                  numProcs, toInt(nsize))
  *             if points is None:
  */
-      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_sizes_array_should_have_d_entrie, __pyx_v_numProcs); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_sizes_array_should_have_d_entrie, __pyx_v_numProcs); if (unlikely(!__pyx_t_4)) __PYX_ERR(46, 58, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
 
       /* "PETSc/Partitioner.pyx":59
@@ -229919,7 +232149,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
  *             if points is None:
  *                 raise ValueError("Must provide both sizes and points arrays")
  */
-      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nsize); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nsize); if (unlikely(!__pyx_t_5)) __PYX_ERR(46, 59, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
 
       /* "PETSc/Partitioner.pyx":58
@@ -229929,7 +232159,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
  *                                  numProcs, toInt(nsize))
  *             if points is None:
  */
-      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(46, 58, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -229937,12 +232167,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
       PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
       __pyx_t_4 = 0;
       __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(46, 58, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[46]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(46, 58, __pyx_L1_error)
+
+      /* "PETSc/Partitioner.pyx":57
+ *         if sizes is not None:
+ *             sizes = iarray_i(sizes, &nsize, &csizes)
+ *             if nsize != cnumProcs:             # <<<<<<<<<<<<<<
+ *                 raise ValueError("sizes array should have %d entries (has %d)" %
+ *                                  numProcs, toInt(nsize))
+ */
     }
 
     /* "PETSc/Partitioner.pyx":60
@@ -229963,15 +232201,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
  *         if points is not None:
  *             points = iarray_i(points, NULL, &cpoints)
  */
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__63, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__66, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(46, 61, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[46]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(46, 61, __pyx_L1_error)
+
+      /* "PETSc/Partitioner.pyx":60
+ *                 raise ValueError("sizes array should have %d entries (has %d)" %
+ *                                  numProcs, toInt(nsize))
+ *             if points is None:             # <<<<<<<<<<<<<<
+ *                 raise ValueError("Must provide both sizes and points arrays")
+ *         if points is not None:
+ */
     }
-    goto __pyx_L3;
+
+    /* "PETSc/Partitioner.pyx":55
+ *         cdef PetscInt *cpoints = NULL
+ *         cdef PetscInt nsize = 0
+ *         if sizes is not None:             # <<<<<<<<<<<<<<
+ *             sizes = iarray_i(sizes, &nsize, &csizes)
+ *             if nsize != cnumProcs:
+ */
   }
-  __pyx_L3:;
 
   /* "PETSc/Partitioner.pyx":62
  *             if points is None:
@@ -229991,13 +232243,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
  *         CHKERR( PetscPartitionerShellSetPartition(self.part, cnumProcs,
  *                                                   csizes, cpoints) )
  */
-    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_points, NULL, (&__pyx_v_cpoints))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_i(__pyx_v_points, NULL, (&__pyx_v_cpoints))); if (unlikely(!__pyx_t_5)) __PYX_ERR(46, 63, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_points, __pyx_t_5);
     __pyx_t_5 = 0;
-    goto __pyx_L6;
+
+    /* "PETSc/Partitioner.pyx":62
+ *             if points is None:
+ *                 raise ValueError("Must provide both sizes and points arrays")
+ *         if points is not None:             # <<<<<<<<<<<<<<
+ *             points = iarray_i(points, NULL, &cpoints)
+ *         CHKERR( PetscPartitionerShellSetPartition(self.part, cnumProcs,
+ */
   }
-  __pyx_L6:;
 
   /* "PETSc/Partitioner.pyx":64
  *         if points is not None:
@@ -230005,7 +232263,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11Partitioner_16setShellPartition(str
  *         CHKERR( PetscPartitionerShellSetPartition(self.part, cnumProcs,             # <<<<<<<<<<<<<<
  *                                                   csizes, cpoints) )
  */
-  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerShellSetPartition(__pyx_v_self->part, __pyx_v_cnumProcs, __pyx_v_csizes, __pyx_v_cpoints)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerShellSetPartition(__pyx_v_self->part, __pyx_v_cnumProcs, __pyx_v_csizes, __pyx_v_cpoints)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(46, 64, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":50
  *         CHKERR( PetscPartitionerSetUp(self.part) )
@@ -230046,9 +232304,6 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_setref(void *__pyx_v_d, void *
   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);
 
   /* "PETSc/CAPI.pyx":4
@@ -230076,7 +232331,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_setref(void *__pyx_v_d, void *
  *     dest[0] = source
  *     return 0
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF((&__pyx_v_source))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF((&__pyx_v_source))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(47, 6, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":7
  *     cdef PetscObject source = <PetscObject>  s
@@ -230164,9 +232419,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscComm_New(MPI_Comm __pyx_v_arg)
   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("PyPetscComm_New", 0);
 
   /* "PETSc/CAPI.pyx":20
@@ -230176,7 +232428,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscComm_New(MPI_Comm __pyx_v_arg)
  *     retv.comm = arg
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscCommObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -230237,9 +232489,6 @@ static MPI_Comm __pyx_f_8petsc4py_5PETSc_PyPetscComm_Get(PyObject *__pyx_v_arg)
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   MPI_Comm __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscComm_Get", 0);
 
   /* "PETSc/CAPI.pyx":25
@@ -230258,7 +232507,7 @@ static MPI_Comm __pyx_f_8petsc4py_5PETSc_PyPetscComm_Get(PyObject *__pyx_v_arg)
  *     retv = ob.comm
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Comm)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Comm)))) __PYX_ERR(47, 26, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscCommObject *)__pyx_t_1);
@@ -230317,9 +232566,6 @@ static MPI_Comm *__pyx_f_8petsc4py_5PETSc_PyPetscComm_GetPtr(PyObject *__pyx_v_a
   MPI_Comm *__pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscComm_GetPtr", 0);
 
   /* "PETSc/CAPI.pyx":31
@@ -230338,7 +232584,7 @@ static MPI_Comm *__pyx_f_8petsc4py_5PETSc_PyPetscComm_GetPtr(PyObject *__pyx_v_a
  *     retv = &ob.comm
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Comm)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Comm)))) __PYX_ERR(47, 32, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscCommObject *)__pyx_t_1);
@@ -230397,9 +232643,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscObject_New(PetscObject __pyx_v_
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscObject_New", 0);
 
   /* "PETSc/CAPI.pyx":39
@@ -230409,12 +232652,12 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscObject_New(PetscObject __pyx_v_
  *     setref(&retv.obj[0], arg)
  *     return retv
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_Object(__pyx_v_arg)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_Object(__pyx_v_arg)); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(47, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Object))))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(47, 39, __pyx_L1_error)
   __pyx_v_retv = ((struct PyPetscObjectObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
@@ -230425,7 +232668,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscObject_New(PetscObject __pyx_v_
  *     return retv
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_setref((&(__pyx_v_retv->obj[0])), __pyx_v_arg); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_setref((&(__pyx_v_retv->obj[0])), __pyx_v_arg); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(47, 40, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":41
  *     cdef Object retv = subtype_Object(arg)()
@@ -230474,9 +232717,6 @@ static PetscObject __pyx_f_8petsc4py_5PETSc_PyPetscObject_Get(PyObject *__pyx_v_
   PetscObject __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscObject_Get", 0);
 
   /* "PETSc/CAPI.pyx":44
@@ -230495,7 +232735,7 @@ static PetscObject __pyx_f_8petsc4py_5PETSc_PyPetscObject_Get(PyObject *__pyx_v_
  *     retv = ob.obj[0]
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Object)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Object)))) __PYX_ERR(47, 45, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscObjectObject *)__pyx_t_1);
@@ -230554,9 +232794,6 @@ static PetscObject *__pyx_f_8petsc4py_5PETSc_PyPetscObject_GetPtr(PyObject *__py
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PetscObject *__pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscObject_GetPtr", 0);
 
   /* "PETSc/CAPI.pyx":50
@@ -230575,7 +232812,7 @@ static PetscObject *__pyx_f_8petsc4py_5PETSc_PyPetscObject_GetPtr(PyObject *__py
  *     retv = ob.obj
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Object)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Object)))) __PYX_ERR(47, 51, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscObjectObject *)__pyx_t_1);
@@ -230634,9 +232871,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscViewer_New(PetscViewer __pyx_v_
   __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("PyPetscViewer_New", 0);
 
   /* "PETSc/CAPI.pyx":58
@@ -230646,7 +232880,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscViewer_New(PetscViewer __pyx_v_
  *     setref(&retv.vwr, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscViewerObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -230658,7 +232892,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscViewer_New(PetscViewer __pyx_v_
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->vwr), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->vwr), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 59, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":60
  *     cdef Viewer retv = Viewer()
@@ -230707,9 +232941,6 @@ static PetscViewer __pyx_f_8petsc4py_5PETSc_PyPetscViewer_Get(PyObject *__pyx_v_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PetscViewer __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscViewer_Get", 0);
 
   /* "PETSc/CAPI.pyx":63
@@ -230728,7 +232959,7 @@ static PetscViewer __pyx_f_8petsc4py_5PETSc_PyPetscViewer_Get(PyObject *__pyx_v_
  *     retv = ob.vwr
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) __PYX_ERR(47, 64, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscViewerObject *)__pyx_t_1);
@@ -230787,9 +233018,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscRandom_New(PetscRandom __pyx_v_
   __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("PyPetscRandom_New", 0);
 
   /* "PETSc/CAPI.pyx":71
@@ -230799,7 +233027,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscRandom_New(PetscRandom __pyx_v_
  *     setref(&retv.rnd, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Random)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Random), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 71, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscRandomObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -230811,7 +233039,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscRandom_New(PetscRandom __pyx_v_
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->rnd), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->rnd), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 72, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":73
  *     cdef Random retv = Random()
@@ -230860,9 +233088,6 @@ static PetscRandom __pyx_f_8petsc4py_5PETSc_PyPetscRandom_Get(PyObject *__pyx_v_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PetscRandom __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscRandom_Get", 0);
 
   /* "PETSc/CAPI.pyx":76
@@ -230881,7 +233106,7 @@ static PetscRandom __pyx_f_8petsc4py_5PETSc_PyPetscRandom_Get(PyObject *__pyx_v_
  *     retv = ob.rnd
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Random)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Random)))) __PYX_ERR(47, 77, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscRandomObject *)__pyx_t_1);
@@ -230940,9 +233165,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscIS_New(IS __pyx_v_arg) {
   __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("PyPetscIS_New", 0);
 
   /* "PETSc/CAPI.pyx":84
@@ -230952,7 +233174,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscIS_New(IS __pyx_v_arg) {
  *     setref(&retv.iset, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 84, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -230964,7 +233186,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscIS_New(IS __pyx_v_arg) {
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->iset), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->iset), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 85, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":86
  *     cdef IS retv = IS()
@@ -231013,9 +233235,6 @@ static IS __pyx_f_8petsc4py_5PETSc_PyPetscIS_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   IS __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscIS_Get", 0);
 
   /* "PETSc/CAPI.pyx":89
@@ -231034,7 +233253,7 @@ static IS __pyx_f_8petsc4py_5PETSc_PyPetscIS_Get(PyObject *__pyx_v_arg) {
  *     retv = ob.iset
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_IS)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(47, 90, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscISObject *)__pyx_t_1);
@@ -231093,9 +233312,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_New(ISLocalToGlobalMappin
   __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("PyPetscLGMap_New", 0);
 
   /* "PETSc/CAPI.pyx":97
@@ -231105,7 +233321,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_New(ISLocalToGlobalMappin
  *     setref(&retv.lgm, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_LGMap)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 97, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscLGMapObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -231117,7 +233333,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_New(ISLocalToGlobalMappin
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->lgm), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->lgm), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 98, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":99
  *     cdef LGMap retv = LGMap()
@@ -231166,9 +233382,6 @@ static ISLocalToGlobalMapping __pyx_f_8petsc4py_5PETSc_PyPetscLGMap_Get(PyObject
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   ISLocalToGlobalMapping __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscLGMap_Get", 0);
 
   /* "PETSc/CAPI.pyx":102
@@ -231187,7 +233400,7 @@ static ISLocalToGlobalMapping __pyx_f_8petsc4py_5PETSc_PyPetscLGMap_Get(PyObject
  *     retv = ob.lgm
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_LGMap)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_LGMap)))) __PYX_ERR(47, 103, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscLGMapObject *)__pyx_t_1);
@@ -231246,9 +233459,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSF_New(PetscSF __pyx_v_arg) {
   __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("PyPetscSF_New", 0);
 
   /* "PETSc/CAPI.pyx":110
@@ -231258,7 +233468,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSF_New(PetscSF __pyx_v_arg) {
  *     setref(&retv.sf, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SF)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscSFObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -231270,7 +233480,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSF_New(PetscSF __pyx_v_arg) {
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->sf), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->sf), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 111, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":112
  *     cdef SF retv = SF()
@@ -231319,9 +233529,6 @@ static PetscSF __pyx_f_8petsc4py_5PETSc_PyPetscSF_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PetscSF __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscSF_Get", 0);
 
   /* "PETSc/CAPI.pyx":115
@@ -231340,7 +233547,7 @@ static PetscSF __pyx_f_8petsc4py_5PETSc_PyPetscSF_Get(PyObject *__pyx_v_arg) {
  *     retv = ob.sf
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_SF)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_SF)))) __PYX_ERR(47, 116, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscSFObject *)__pyx_t_1);
@@ -231399,9 +233606,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscVec_New(Vec __pyx_v_arg) {
   __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("PyPetscVec_New", 0);
 
   /* "PETSc/CAPI.pyx":123
@@ -231411,7 +233615,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscVec_New(Vec __pyx_v_arg) {
  *     setref(&retv.vec, arg)
  *     return retv
  */
-  __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[47]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 123, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -231423,7 +233627,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscVec_New(Vec __pyx_v_arg) {
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->vec), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->vec), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 124, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":125
  *     cdef Vec retv = Vec()
@@ -231472,9 +233676,6 @@ static Vec __pyx_f_8petsc4py_5PETSc_PyPetscVec_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   Vec __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscVec_Get", 0);
 
   /* "PETSc/CAPI.pyx":128
@@ -231493,7 +233694,7 @@ static Vec __pyx_f_8petsc4py_5PETSc_PyPetscVec_Get(PyObject *__pyx_v_arg) {
  *     retv = ob.vec
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(47, 129, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscVecObject *)__pyx_t_1);
@@ -231552,9 +233753,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscScatter_New(VecScatter __pyx_v_
   __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("PyPetscScatter_New", 0);
 
   /* "PETSc/CAPI.pyx":136
@@ -231564,7 +233762,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscScatter_New(VecScatter __pyx_v_
  *     setref(&retv.sct, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Scatter)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 136, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscScatterObject *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -231576,7 +233774,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscScatter_New(VecScatter __pyx_v_
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->sct), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->sct), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 137, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":138
  *     cdef Scatter retv = Scatter()
@@ -231625,9 +233823,6 @@ static VecScatter __pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get(PyObject *__pyx_v_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   VecScatter __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscScatter_Get", 0);
 
   /* "PETSc/CAPI.pyx":141
@@ -231646,7 +233841,7 @@ static VecScatter __pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get(PyObject *__pyx_v_
  *     retv = ob.sct
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Scatter)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Scatter)))) __PYX_ERR(47, 142, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscScatterObject *)__pyx_t_1);
@@ -231667,7 +233862,7 @@ static VecScatter __pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get(PyObject *__pyx_v_
  *     retv = ob.sct
  *     return retv             # <<<<<<<<<<<<<<
  * 
- * # -- Mat --
+ * # -- Section --
  */
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
@@ -231692,6 +233887,153 @@ static VecScatter __pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get(PyObject *__pyx_v_
 }
 
 /* "PETSc/CAPI.pyx":148
+ * # -- Section --
+ * 
+ * cdef api object PyPetscSection_New(PetscSection arg):             # <<<<<<<<<<<<<<
+ *     cdef Section retv = Section()
+ *     setref(&retv.sec, arg)
+ */
+
+static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSection_New(PetscSection __pyx_v_arg) {
+  struct PyPetscSectionObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PyPetscSection_New", 0);
+
+  /* "PETSc/CAPI.pyx":149
+ * 
+ * cdef api object PyPetscSection_New(PetscSection arg):
+ *     cdef Section retv = Section()             # <<<<<<<<<<<<<<
+ *     setref(&retv.sec, arg)
+ *     return retv
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 149, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PyPetscSectionObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/CAPI.pyx":150
+ * cdef api object PyPetscSection_New(PetscSection arg):
+ *     cdef Section retv = Section()
+ *     setref(&retv.sec, arg)             # <<<<<<<<<<<<<<
+ *     return retv
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->sec), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 150, __pyx_L1_error)
+
+  /* "PETSc/CAPI.pyx":151
+ *     cdef Section retv = Section()
+ *     setref(&retv.sec, arg)
+ *     return retv             # <<<<<<<<<<<<<<
+ * 
+ * cdef api PetscSection PyPetscSection_Get(object arg) except ? NULL:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
+
+  /* "PETSc/CAPI.pyx":148
+ * # -- Section --
+ * 
+ * cdef api object PyPetscSection_New(PetscSection arg):             # <<<<<<<<<<<<<<
+ *     cdef Section retv = Section()
+ *     setref(&retv.sec, arg)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.PyPetscSection_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;
+}
+
+/* "PETSc/CAPI.pyx":153
+ *     return retv
+ * 
+ * cdef api PetscSection PyPetscSection_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef PetscSection retv = NULL
+ *     cdef Section ob = <Section?> arg
+ */
+
+static PetscSection __pyx_f_8petsc4py_5PETSc_PyPetscSection_Get(PyObject *__pyx_v_arg) {
+  PetscSection __pyx_v_retv;
+  struct PyPetscSectionObject *__pyx_v_ob = 0;
+  PetscSection __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PetscSection __pyx_t_2;
+  __Pyx_RefNannySetupContext("PyPetscSection_Get", 0);
+
+  /* "PETSc/CAPI.pyx":154
+ * 
+ * cdef api PetscSection PyPetscSection_Get(object arg) except ? NULL:
+ *     cdef PetscSection retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef Section ob = <Section?> arg
+ *     retv = ob.sec
+ */
+  __pyx_v_retv = NULL;
+
+  /* "PETSc/CAPI.pyx":155
+ * cdef api PetscSection PyPetscSection_Get(object arg) except ? NULL:
+ *     cdef PetscSection retv = NULL
+ *     cdef Section ob = <Section?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.sec
+ *     return retv
+ */
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Section)))) __PYX_ERR(47, 155, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PyPetscSectionObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/CAPI.pyx":156
+ *     cdef PetscSection retv = NULL
+ *     cdef Section ob = <Section?> arg
+ *     retv = ob.sec             # <<<<<<<<<<<<<<
+ *     return retv
+ * 
+ */
+  __pyx_t_2 = __pyx_v_ob->sec;
+  __pyx_v_retv = __pyx_t_2;
+
+  /* "PETSc/CAPI.pyx":157
+ *     cdef Section ob = <Section?> arg
+ *     retv = ob.sec
+ *     return retv             # <<<<<<<<<<<<<<
+ * 
+ * # -- Mat --
+ */
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
+
+  /* "PETSc/CAPI.pyx":153
+ *     return retv
+ * 
+ * cdef api PetscSection PyPetscSection_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef PetscSection retv = NULL
+ *     cdef Section ob = <Section?> arg
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.PyPetscSection_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/CAPI.pyx":161
  * # -- Mat --
  * 
  * cdef api object PyPetscMat_New(PetscMat arg):             # <<<<<<<<<<<<<<
@@ -231705,33 +234047,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscMat_New(Mat __pyx_v_arg) {
   __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("PyPetscMat_New", 0);
 
-  /* "PETSc/CAPI.pyx":149
+  /* "PETSc/CAPI.pyx":162
  * 
  * cdef api object PyPetscMat_New(PetscMat arg):
  *     cdef Mat retv = Mat()             # <<<<<<<<<<<<<<
  *     setref(&retv.mat, arg)
  *     return retv
  */
-  __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[47]; __pyx_lineno = 149; __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(47, 162, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":150
+  /* "PETSc/CAPI.pyx":163
  * cdef api object PyPetscMat_New(PetscMat arg):
  *     cdef Mat retv = Mat()
  *     setref(&retv.mat, arg)             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->mat), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->mat), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 163, __pyx_L1_error)
 
-  /* "PETSc/CAPI.pyx":151
+  /* "PETSc/CAPI.pyx":164
  *     cdef Mat retv = Mat()
  *     setref(&retv.mat, arg)
  *     return retv             # <<<<<<<<<<<<<<
@@ -231743,7 +234082,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscMat_New(Mat __pyx_v_arg) {
   __pyx_r = ((PyObject *)__pyx_v_retv);
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":148
+  /* "PETSc/CAPI.pyx":161
  * # -- Mat --
  * 
  * cdef api object PyPetscMat_New(PetscMat arg):             # <<<<<<<<<<<<<<
@@ -231763,7 +234102,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscMat_New(Mat __pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":153
+/* "PETSc/CAPI.pyx":166
  *     return retv
  * 
  * cdef api PetscMat PyPetscMat_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -231778,12 +234117,9 @@ static Mat __pyx_f_8petsc4py_5PETSc_PyPetscMat_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   Mat __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscMat_Get", 0);
 
-  /* "PETSc/CAPI.pyx":154
+  /* "PETSc/CAPI.pyx":167
  * 
  * cdef api PetscMat PyPetscMat_Get(object arg) except ? NULL:
  *     cdef PetscMat retv = NULL             # <<<<<<<<<<<<<<
@@ -231792,20 +234128,20 @@ static Mat __pyx_f_8petsc4py_5PETSc_PyPetscMat_Get(PyObject *__pyx_v_arg) {
  */
   __pyx_v_retv = NULL;
 
-  /* "PETSc/CAPI.pyx":155
+  /* "PETSc/CAPI.pyx":168
  * cdef api PetscMat PyPetscMat_Get(object arg) except ? NULL:
  *     cdef PetscMat retv = NULL
  *     cdef Mat ob = <Mat?> arg             # <<<<<<<<<<<<<<
  *     retv = ob.mat
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Mat)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(47, 168, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":156
+  /* "PETSc/CAPI.pyx":169
  *     cdef PetscMat retv = NULL
  *     cdef Mat ob = <Mat?> arg
  *     retv = ob.mat             # <<<<<<<<<<<<<<
@@ -231815,7 +234151,7 @@ static Mat __pyx_f_8petsc4py_5PETSc_PyPetscMat_Get(PyObject *__pyx_v_arg) {
   __pyx_t_2 = __pyx_v_ob->mat;
   __pyx_v_retv = __pyx_t_2;
 
-  /* "PETSc/CAPI.pyx":157
+  /* "PETSc/CAPI.pyx":170
  *     cdef Mat ob = <Mat?> arg
  *     retv = ob.mat
  *     return retv             # <<<<<<<<<<<<<<
@@ -231825,7 +234161,7 @@ static Mat __pyx_f_8petsc4py_5PETSc_PyPetscMat_Get(PyObject *__pyx_v_arg) {
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":153
+  /* "PETSc/CAPI.pyx":166
  *     return retv
  * 
  * cdef api PetscMat PyPetscMat_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -231844,7 +234180,7 @@ static Mat __pyx_f_8petsc4py_5PETSc_PyPetscMat_Get(PyObject *__pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":161
+/* "PETSc/CAPI.pyx":174
  * # -- PC --
  * 
  * cdef api object PyPetscPC_New(PetscPC arg):             # <<<<<<<<<<<<<<
@@ -231858,33 +234194,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPC_New(PC __pyx_v_arg) {
   __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("PyPetscPC_New", 0);
 
-  /* "PETSc/CAPI.pyx":162
+  /* "PETSc/CAPI.pyx":175
  * 
  * cdef api object PyPetscPC_New(PetscPC arg):
  *     cdef PC retv = PC()             # <<<<<<<<<<<<<<
  *     setref(&retv.pc, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_PC)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscPCObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":163
+  /* "PETSc/CAPI.pyx":176
  * cdef api object PyPetscPC_New(PetscPC arg):
  *     cdef PC retv = PC()
  *     setref(&retv.pc, arg)             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->pc), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->pc), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 176, __pyx_L1_error)
 
-  /* "PETSc/CAPI.pyx":164
+  /* "PETSc/CAPI.pyx":177
  *     cdef PC retv = PC()
  *     setref(&retv.pc, arg)
  *     return retv             # <<<<<<<<<<<<<<
@@ -231896,7 +234229,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPC_New(PC __pyx_v_arg) {
   __pyx_r = ((PyObject *)__pyx_v_retv);
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":161
+  /* "PETSc/CAPI.pyx":174
  * # -- PC --
  * 
  * cdef api object PyPetscPC_New(PetscPC arg):             # <<<<<<<<<<<<<<
@@ -231916,7 +234249,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPC_New(PC __pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":166
+/* "PETSc/CAPI.pyx":179
  *     return retv
  * 
  * cdef api PetscPC PyPetscPC_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -231931,12 +234264,9 @@ static PC __pyx_f_8petsc4py_5PETSc_PyPetscPC_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PC __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscPC_Get", 0);
 
-  /* "PETSc/CAPI.pyx":167
+  /* "PETSc/CAPI.pyx":180
  * 
  * cdef api PetscPC PyPetscPC_Get(object arg) except ? NULL:
  *     cdef PetscPC retv = NULL             # <<<<<<<<<<<<<<
@@ -231945,20 +234275,20 @@ static PC __pyx_f_8petsc4py_5PETSc_PyPetscPC_Get(PyObject *__pyx_v_arg) {
  */
   __pyx_v_retv = NULL;
 
-  /* "PETSc/CAPI.pyx":168
+  /* "PETSc/CAPI.pyx":181
  * cdef api PetscPC PyPetscPC_Get(object arg) except ? NULL:
  *     cdef PetscPC retv = NULL
  *     cdef PC ob = <PC?> arg             # <<<<<<<<<<<<<<
  *     retv = ob.pc
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_PC)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_PC)))) __PYX_ERR(47, 181, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscPCObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":169
+  /* "PETSc/CAPI.pyx":182
  *     cdef PetscPC retv = NULL
  *     cdef PC ob = <PC?> arg
  *     retv = ob.pc             # <<<<<<<<<<<<<<
@@ -231968,7 +234298,7 @@ static PC __pyx_f_8petsc4py_5PETSc_PyPetscPC_Get(PyObject *__pyx_v_arg) {
   __pyx_t_2 = __pyx_v_ob->pc;
   __pyx_v_retv = __pyx_t_2;
 
-  /* "PETSc/CAPI.pyx":170
+  /* "PETSc/CAPI.pyx":183
  *     cdef PC ob = <PC?> arg
  *     retv = ob.pc
  *     return retv             # <<<<<<<<<<<<<<
@@ -231978,7 +234308,7 @@ static PC __pyx_f_8petsc4py_5PETSc_PyPetscPC_Get(PyObject *__pyx_v_arg) {
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":166
+  /* "PETSc/CAPI.pyx":179
  *     return retv
  * 
  * cdef api PetscPC PyPetscPC_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -231997,7 +234327,7 @@ static PC __pyx_f_8petsc4py_5PETSc_PyPetscPC_Get(PyObject *__pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":174
+/* "PETSc/CAPI.pyx":187
  * # -- KSP --
  * 
  * cdef api object PyPetscKSP_New(PetscKSP arg):             # <<<<<<<<<<<<<<
@@ -232011,33 +234341,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscKSP_New(KSP __pyx_v_arg) {
   __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("PyPetscKSP_New", 0);
 
-  /* "PETSc/CAPI.pyx":175
+  /* "PETSc/CAPI.pyx":188
  * 
  * cdef api object PyPetscKSP_New(PetscKSP arg):
  *     cdef KSP retv = KSP()             # <<<<<<<<<<<<<<
  *     setref(&retv.ksp, arg)
  *     return retv
  */
-  __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[47]; __pyx_lineno = 175; __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(47, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":176
+  /* "PETSc/CAPI.pyx":189
  * cdef api object PyPetscKSP_New(PetscKSP arg):
  *     cdef KSP retv = KSP()
  *     setref(&retv.ksp, arg)             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ksp), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ksp), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 189, __pyx_L1_error)
 
-  /* "PETSc/CAPI.pyx":177
+  /* "PETSc/CAPI.pyx":190
  *     cdef KSP retv = KSP()
  *     setref(&retv.ksp, arg)
  *     return retv             # <<<<<<<<<<<<<<
@@ -232049,7 +234376,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscKSP_New(KSP __pyx_v_arg) {
   __pyx_r = ((PyObject *)__pyx_v_retv);
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":174
+  /* "PETSc/CAPI.pyx":187
  * # -- KSP --
  * 
  * cdef api object PyPetscKSP_New(PetscKSP arg):             # <<<<<<<<<<<<<<
@@ -232069,7 +234396,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscKSP_New(KSP __pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":179
+/* "PETSc/CAPI.pyx":192
  *     return retv
  * 
  * cdef api PetscKSP PyPetscKSP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232084,12 +234411,9 @@ static KSP __pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   KSP __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscKSP_Get", 0);
 
-  /* "PETSc/CAPI.pyx":180
+  /* "PETSc/CAPI.pyx":193
  * 
  * cdef api PetscKSP PyPetscKSP_Get(object arg) except ? NULL:
  *     cdef PetscKSP retv = NULL             # <<<<<<<<<<<<<<
@@ -232098,20 +234422,20 @@ static KSP __pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get(PyObject *__pyx_v_arg) {
  */
   __pyx_v_retv = NULL;
 
-  /* "PETSc/CAPI.pyx":181
+  /* "PETSc/CAPI.pyx":194
  * cdef api PetscKSP PyPetscKSP_Get(object arg) except ? NULL:
  *     cdef PetscKSP retv = NULL
  *     cdef KSP ob = <KSP?> arg             # <<<<<<<<<<<<<<
  *     retv = ob.ksp
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_KSP)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_KSP)))) __PYX_ERR(47, 194, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":182
+  /* "PETSc/CAPI.pyx":195
  *     cdef PetscKSP retv = NULL
  *     cdef KSP ob = <KSP?> arg
  *     retv = ob.ksp             # <<<<<<<<<<<<<<
@@ -232121,7 +234445,7 @@ static KSP __pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get(PyObject *__pyx_v_arg) {
   __pyx_t_2 = __pyx_v_ob->ksp;
   __pyx_v_retv = __pyx_t_2;
 
-  /* "PETSc/CAPI.pyx":183
+  /* "PETSc/CAPI.pyx":196
  *     cdef KSP ob = <KSP?> arg
  *     retv = ob.ksp
  *     return retv             # <<<<<<<<<<<<<<
@@ -232131,7 +234455,7 @@ static KSP __pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get(PyObject *__pyx_v_arg) {
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":179
+  /* "PETSc/CAPI.pyx":192
  *     return retv
  * 
  * cdef api PetscKSP PyPetscKSP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232150,7 +234474,7 @@ static KSP __pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get(PyObject *__pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":187
+/* "PETSc/CAPI.pyx":200
  * # -- SNES --
  * 
  * cdef api object PyPetscSNES_New(PetscSNES arg):             # <<<<<<<<<<<<<<
@@ -232164,33 +234488,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New(SNES __pyx_v_arg) {
   __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("PyPetscSNES_New", 0);
 
-  /* "PETSc/CAPI.pyx":188
+  /* "PETSc/CAPI.pyx":201
  * 
  * cdef api object PyPetscSNES_New(PetscSNES arg):
  *     cdef SNES retv = SNES()             # <<<<<<<<<<<<<<
  *     setref(&retv.snes, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 201, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":189
+  /* "PETSc/CAPI.pyx":202
  * cdef api object PyPetscSNES_New(PetscSNES arg):
  *     cdef SNES retv = SNES()
  *     setref(&retv.snes, arg)             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->snes), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->snes), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 202, __pyx_L1_error)
 
-  /* "PETSc/CAPI.pyx":190
+  /* "PETSc/CAPI.pyx":203
  *     cdef SNES retv = SNES()
  *     setref(&retv.snes, arg)
  *     return retv             # <<<<<<<<<<<<<<
@@ -232202,7 +234523,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New(SNES __pyx_v_arg) {
   __pyx_r = ((PyObject *)__pyx_v_retv);
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":187
+  /* "PETSc/CAPI.pyx":200
  * # -- SNES --
  * 
  * cdef api object PyPetscSNES_New(PetscSNES arg):             # <<<<<<<<<<<<<<
@@ -232222,7 +234543,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New(SNES __pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":192
+/* "PETSc/CAPI.pyx":205
  *     return retv
  * 
  * cdef api PetscSNES PyPetscSNES_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232237,12 +234558,9 @@ static SNES __pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   SNES __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscSNES_Get", 0);
 
-  /* "PETSc/CAPI.pyx":193
+  /* "PETSc/CAPI.pyx":206
  * 
  * cdef api PetscSNES PyPetscSNES_Get(object arg) except ? NULL:
  *     cdef PetscSNES retv = NULL             # <<<<<<<<<<<<<<
@@ -232251,20 +234569,20 @@ static SNES __pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get(PyObject *__pyx_v_arg) {
  */
   __pyx_v_retv = NULL;
 
-  /* "PETSc/CAPI.pyx":194
+  /* "PETSc/CAPI.pyx":207
  * cdef api PetscSNES PyPetscSNES_Get(object arg) except ? NULL:
  *     cdef PetscSNES retv = NULL
  *     cdef SNES ob = <SNES?> arg             # <<<<<<<<<<<<<<
  *     retv = ob.snes
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_SNES)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_SNES)))) __PYX_ERR(47, 207, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":195
+  /* "PETSc/CAPI.pyx":208
  *     cdef PetscSNES retv = NULL
  *     cdef SNES ob = <SNES?> arg
  *     retv = ob.snes             # <<<<<<<<<<<<<<
@@ -232274,7 +234592,7 @@ static SNES __pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get(PyObject *__pyx_v_arg) {
   __pyx_t_2 = __pyx_v_ob->snes;
   __pyx_v_retv = __pyx_t_2;
 
-  /* "PETSc/CAPI.pyx":196
+  /* "PETSc/CAPI.pyx":209
  *     cdef SNES ob = <SNES?> arg
  *     retv = ob.snes
  *     return retv             # <<<<<<<<<<<<<<
@@ -232284,7 +234602,7 @@ static SNES __pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get(PyObject *__pyx_v_arg) {
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":192
+  /* "PETSc/CAPI.pyx":205
  *     return retv
  * 
  * cdef api PetscSNES PyPetscSNES_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232303,7 +234621,7 @@ static SNES __pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get(PyObject *__pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":200
+/* "PETSc/CAPI.pyx":213
  * # -- TS --
  * 
  * cdef api object PyPetscTS_New(PetscTS arg):             # <<<<<<<<<<<<<<
@@ -232317,33 +234635,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscTS_New(TS __pyx_v_arg) {
   __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("PyPetscTS_New", 0);
 
-  /* "PETSc/CAPI.pyx":201
+  /* "PETSc/CAPI.pyx":214
  * 
  * cdef api object PyPetscTS_New(PetscTS arg):
  *     cdef TS retv = TS()             # <<<<<<<<<<<<<<
  *     setref(&retv.ts, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_TS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":202
+  /* "PETSc/CAPI.pyx":215
  * cdef api object PyPetscTS_New(PetscTS arg):
  *     cdef TS retv = TS()
  *     setref(&retv.ts, arg)             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ts), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ts), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 215, __pyx_L1_error)
 
-  /* "PETSc/CAPI.pyx":203
+  /* "PETSc/CAPI.pyx":216
  *     cdef TS retv = TS()
  *     setref(&retv.ts, arg)
  *     return retv             # <<<<<<<<<<<<<<
@@ -232355,7 +234670,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscTS_New(TS __pyx_v_arg) {
   __pyx_r = ((PyObject *)__pyx_v_retv);
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":200
+  /* "PETSc/CAPI.pyx":213
  * # -- TS --
  * 
  * cdef api object PyPetscTS_New(PetscTS arg):             # <<<<<<<<<<<<<<
@@ -232375,7 +234690,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscTS_New(TS __pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":205
+/* "PETSc/CAPI.pyx":218
  *     return retv
  * 
  * cdef api PetscTS PyPetscTS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232390,12 +234705,9 @@ static TS __pyx_f_8petsc4py_5PETSc_PyPetscTS_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   TS __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscTS_Get", 0);
 
-  /* "PETSc/CAPI.pyx":206
+  /* "PETSc/CAPI.pyx":219
  * 
  * cdef api PetscTS PyPetscTS_Get(object arg) except ? NULL:
  *     cdef PetscTS retv = NULL             # <<<<<<<<<<<<<<
@@ -232404,20 +234716,20 @@ static TS __pyx_f_8petsc4py_5PETSc_PyPetscTS_Get(PyObject *__pyx_v_arg) {
  */
   __pyx_v_retv = NULL;
 
-  /* "PETSc/CAPI.pyx":207
+  /* "PETSc/CAPI.pyx":220
  * cdef api PetscTS PyPetscTS_Get(object arg) except ? NULL:
  *     cdef PetscTS retv = NULL
  *     cdef TS ob = <TS?> arg             # <<<<<<<<<<<<<<
  *     retv = ob.ts
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_TS)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_TS)))) __PYX_ERR(47, 220, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":208
+  /* "PETSc/CAPI.pyx":221
  *     cdef PetscTS retv = NULL
  *     cdef TS ob = <TS?> arg
  *     retv = ob.ts             # <<<<<<<<<<<<<<
@@ -232427,17 +234739,17 @@ static TS __pyx_f_8petsc4py_5PETSc_PyPetscTS_Get(PyObject *__pyx_v_arg) {
   __pyx_t_2 = __pyx_v_ob->ts;
   __pyx_v_retv = __pyx_t_2;
 
-  /* "PETSc/CAPI.pyx":209
+  /* "PETSc/CAPI.pyx":222
  *     cdef TS ob = <TS?> arg
  *     retv = ob.ts
  *     return retv             # <<<<<<<<<<<<<<
  * 
- * # -- AO --
+ * # -- TAO --
  */
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":205
+  /* "PETSc/CAPI.pyx":218
  *     return retv
  * 
  * cdef api PetscTS PyPetscTS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232456,7 +234768,154 @@ static TS __pyx_f_8petsc4py_5PETSc_PyPetscTS_Get(PyObject *__pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":213
+/* "PETSc/CAPI.pyx":226
+ * # -- TAO --
+ * 
+ * cdef api object PyPetscTAO_New(PetscTAO arg):             # <<<<<<<<<<<<<<
+ *     cdef TAO retv = TAO()
+ *     setref(&retv.tao, arg)
+ */
+
+static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscTAO_New(Tao __pyx_v_arg) {
+  struct PyPetscTAOObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PyPetscTAO_New", 0);
+
+  /* "PETSc/CAPI.pyx":227
+ * 
+ * cdef api object PyPetscTAO_New(PetscTAO arg):
+ *     cdef TAO retv = TAO()             # <<<<<<<<<<<<<<
+ *     setref(&retv.tao, arg)
+ *     return retv
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 227, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PyPetscTAOObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/CAPI.pyx":228
+ * cdef api object PyPetscTAO_New(PetscTAO arg):
+ *     cdef TAO retv = TAO()
+ *     setref(&retv.tao, arg)             # <<<<<<<<<<<<<<
+ *     return retv
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->tao), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 228, __pyx_L1_error)
+
+  /* "PETSc/CAPI.pyx":229
+ *     cdef TAO retv = TAO()
+ *     setref(&retv.tao, arg)
+ *     return retv             # <<<<<<<<<<<<<<
+ * 
+ * cdef api PetscTAO PyPetscTAO_Get(object arg) except ? NULL:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
+
+  /* "PETSc/CAPI.pyx":226
+ * # -- TAO --
+ * 
+ * cdef api object PyPetscTAO_New(PetscTAO arg):             # <<<<<<<<<<<<<<
+ *     cdef TAO retv = TAO()
+ *     setref(&retv.tao, arg)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.PyPetscTAO_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;
+}
+
+/* "PETSc/CAPI.pyx":231
+ *     return retv
+ * 
+ * cdef api PetscTAO PyPetscTAO_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef PetscTAO retv = NULL
+ *     cdef TAO ob = <TAO?> arg
+ */
+
+static Tao __pyx_f_8petsc4py_5PETSc_PyPetscTAO_Get(PyObject *__pyx_v_arg) {
+  Tao __pyx_v_retv;
+  struct PyPetscTAOObject *__pyx_v_ob = 0;
+  Tao __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  Tao __pyx_t_2;
+  __Pyx_RefNannySetupContext("PyPetscTAO_Get", 0);
+
+  /* "PETSc/CAPI.pyx":232
+ * 
+ * cdef api PetscTAO PyPetscTAO_Get(object arg) except ? NULL:
+ *     cdef PetscTAO retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef TAO ob = <TAO?> arg
+ *     retv = ob.tao
+ */
+  __pyx_v_retv = NULL;
+
+  /* "PETSc/CAPI.pyx":233
+ * cdef api PetscTAO PyPetscTAO_Get(object arg) except ? NULL:
+ *     cdef PetscTAO retv = NULL
+ *     cdef TAO ob = <TAO?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.tao
+ *     return retv
+ */
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_TAO)))) __PYX_ERR(47, 233, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PyPetscTAOObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/CAPI.pyx":234
+ *     cdef PetscTAO retv = NULL
+ *     cdef TAO ob = <TAO?> arg
+ *     retv = ob.tao             # <<<<<<<<<<<<<<
+ *     return retv
+ * 
+ */
+  __pyx_t_2 = __pyx_v_ob->tao;
+  __pyx_v_retv = __pyx_t_2;
+
+  /* "PETSc/CAPI.pyx":235
+ *     cdef TAO ob = <TAO?> arg
+ *     retv = ob.tao
+ *     return retv             # <<<<<<<<<<<<<<
+ * 
+ * # -- AO --
+ */
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
+
+  /* "PETSc/CAPI.pyx":231
+ *     return retv
+ * 
+ * cdef api PetscTAO PyPetscTAO_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef PetscTAO retv = NULL
+ *     cdef TAO ob = <TAO?> arg
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.PyPetscTAO_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/CAPI.pyx":239
  * # -- AO --
  * 
  * cdef api object PyPetscAO_New(PetscAO arg):             # <<<<<<<<<<<<<<
@@ -232470,33 +234929,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscAO_New(AO __pyx_v_arg) {
   __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("PyPetscAO_New", 0);
 
-  /* "PETSc/CAPI.pyx":214
+  /* "PETSc/CAPI.pyx":240
  * 
  * cdef api object PyPetscAO_New(PetscAO arg):
  *     cdef AO retv = AO()             # <<<<<<<<<<<<<<
  *     setref(&retv.ao, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_AO)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_AO), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":215
+  /* "PETSc/CAPI.pyx":241
  * cdef api object PyPetscAO_New(PetscAO arg):
  *     cdef AO retv = AO()
  *     setref(&retv.ao, arg)             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ao), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ao), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 241, __pyx_L1_error)
 
-  /* "PETSc/CAPI.pyx":216
+  /* "PETSc/CAPI.pyx":242
  *     cdef AO retv = AO()
  *     setref(&retv.ao, arg)
  *     return retv             # <<<<<<<<<<<<<<
@@ -232508,7 +234964,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscAO_New(AO __pyx_v_arg) {
   __pyx_r = ((PyObject *)__pyx_v_retv);
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":213
+  /* "PETSc/CAPI.pyx":239
  * # -- AO --
  * 
  * cdef api object PyPetscAO_New(PetscAO arg):             # <<<<<<<<<<<<<<
@@ -232528,7 +234984,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscAO_New(AO __pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":218
+/* "PETSc/CAPI.pyx":244
  *     return retv
  * 
  * cdef api PetscAO PyPetscAO_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232543,12 +234999,9 @@ static AO __pyx_f_8petsc4py_5PETSc_PyPetscAO_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   AO __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscAO_Get", 0);
 
-  /* "PETSc/CAPI.pyx":219
+  /* "PETSc/CAPI.pyx":245
  * 
  * cdef api PetscAO PyPetscAO_Get(object arg) except ? NULL:
  *     cdef PetscAO retv = NULL             # <<<<<<<<<<<<<<
@@ -232557,20 +235010,20 @@ static AO __pyx_f_8petsc4py_5PETSc_PyPetscAO_Get(PyObject *__pyx_v_arg) {
  */
   __pyx_v_retv = NULL;
 
-  /* "PETSc/CAPI.pyx":220
+  /* "PETSc/CAPI.pyx":246
  * cdef api PetscAO PyPetscAO_Get(object arg) except ? NULL:
  *     cdef PetscAO retv = NULL
  *     cdef AO ob = <AO?> arg             # <<<<<<<<<<<<<<
  *     retv = ob.ao
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_AO)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_AO)))) __PYX_ERR(47, 246, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscAOObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":221
+  /* "PETSc/CAPI.pyx":247
  *     cdef PetscAO retv = NULL
  *     cdef AO ob = <AO?> arg
  *     retv = ob.ao             # <<<<<<<<<<<<<<
@@ -232580,7 +235033,7 @@ static AO __pyx_f_8petsc4py_5PETSc_PyPetscAO_Get(PyObject *__pyx_v_arg) {
   __pyx_t_2 = __pyx_v_ob->ao;
   __pyx_v_retv = __pyx_t_2;
 
-  /* "PETSc/CAPI.pyx":222
+  /* "PETSc/CAPI.pyx":248
  *     cdef AO ob = <AO?> arg
  *     retv = ob.ao
  *     return retv             # <<<<<<<<<<<<<<
@@ -232590,7 +235043,7 @@ static AO __pyx_f_8petsc4py_5PETSc_PyPetscAO_Get(PyObject *__pyx_v_arg) {
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":218
+  /* "PETSc/CAPI.pyx":244
  *     return retv
  * 
  * cdef api PetscAO PyPetscAO_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232609,7 +235062,7 @@ static AO __pyx_f_8petsc4py_5PETSc_PyPetscAO_Get(PyObject *__pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":226
+/* "PETSc/CAPI.pyx":252
  * # -- DM --
  * 
  * cdef api object PyPetscDM_New(PetscDM arg):             # <<<<<<<<<<<<<<
@@ -232624,37 +235077,34 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscDM_New(DM __pyx_v_arg) {
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscDM_New", 0);
 
-  /* "PETSc/CAPI.pyx":227
+  /* "PETSc/CAPI.pyx":253
  * 
  * cdef api object PyPetscDM_New(PetscDM arg):
  *     cdef DM retv = subtype_DM(arg)()             # <<<<<<<<<<<<<<
  *     setref(&retv.dm, arg)
  *     return retv
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_arg)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_arg)); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(47, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(47, 253, __pyx_L1_error)
   __pyx_v_retv = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/CAPI.pyx":228
+  /* "PETSc/CAPI.pyx":254
  * cdef api object PyPetscDM_New(PetscDM arg):
  *     cdef DM retv = subtype_DM(arg)()
  *     setref(&retv.dm, arg)             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->dm), __pyx_v_arg); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->dm), __pyx_v_arg); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(47, 254, __pyx_L1_error)
 
-  /* "PETSc/CAPI.pyx":229
+  /* "PETSc/CAPI.pyx":255
  *     cdef DM retv = subtype_DM(arg)()
  *     setref(&retv.dm, arg)
  *     return retv             # <<<<<<<<<<<<<<
@@ -232666,7 +235116,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscDM_New(DM __pyx_v_arg) {
   __pyx_r = ((PyObject *)__pyx_v_retv);
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":226
+  /* "PETSc/CAPI.pyx":252
  * # -- DM --
  * 
  * cdef api object PyPetscDM_New(PetscDM arg):             # <<<<<<<<<<<<<<
@@ -232687,7 +235137,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscDM_New(DM __pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":231
+/* "PETSc/CAPI.pyx":257
  *     return retv
  * 
  * cdef api PetscDM PyPetscDM_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232702,12 +235152,9 @@ static DM __pyx_f_8petsc4py_5PETSc_PyPetscDM_Get(PyObject *__pyx_v_arg) {
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   DM __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscDM_Get", 0);
 
-  /* "PETSc/CAPI.pyx":232
+  /* "PETSc/CAPI.pyx":258
  * 
  * cdef api PetscDM PyPetscDM_Get(object arg) except ? NULL:
  *     cdef PetscDM retv = NULL             # <<<<<<<<<<<<<<
@@ -232716,20 +235163,20 @@ static DM __pyx_f_8petsc4py_5PETSc_PyPetscDM_Get(PyObject *__pyx_v_arg) {
  */
   __pyx_v_retv = NULL;
 
-  /* "PETSc/CAPI.pyx":233
+  /* "PETSc/CAPI.pyx":259
  * cdef api PetscDM PyPetscDM_Get(object arg) except ? NULL:
  *     cdef PetscDM retv = NULL
  *     cdef DM ob = <DM?> arg             # <<<<<<<<<<<<<<
  *     retv = ob.dm
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_DM)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(47, 259, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscDMObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":234
+  /* "PETSc/CAPI.pyx":260
  *     cdef PetscDM retv = NULL
  *     cdef DM ob = <DM?> arg
  *     retv = ob.dm             # <<<<<<<<<<<<<<
@@ -232739,7 +235186,7 @@ static DM __pyx_f_8petsc4py_5PETSc_PyPetscDM_Get(PyObject *__pyx_v_arg) {
   __pyx_t_2 = __pyx_v_ob->dm;
   __pyx_v_retv = __pyx_t_2;
 
-  /* "PETSc/CAPI.pyx":235
+  /* "PETSc/CAPI.pyx":261
  *     cdef DM ob = <DM?> arg
  *     retv = ob.dm
  *     return retv             # <<<<<<<<<<<<<<
@@ -232749,7 +235196,7 @@ static DM __pyx_f_8petsc4py_5PETSc_PyPetscDM_Get(PyObject *__pyx_v_arg) {
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":231
+  /* "PETSc/CAPI.pyx":257
  *     return retv
  * 
  * cdef api PetscDM PyPetscDM_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232768,7 +235215,7 @@ static DM __pyx_f_8petsc4py_5PETSc_PyPetscDM_Get(PyObject *__pyx_v_arg) {
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":239
+/* "PETSc/CAPI.pyx":265
  * # -- Partitioner --
  * 
  * cdef api object PyPetscPartitioner_New(PetscPartitioner arg):             # <<<<<<<<<<<<<<
@@ -232782,33 +235229,30 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New(PetscPartitione
   __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("PyPetscPartitioner_New", 0);
 
-  /* "PETSc/CAPI.pyx":240
+  /* "PETSc/CAPI.pyx":266
  * 
  * cdef api object PyPetscPartitioner_New(PetscPartitioner arg):
  *     cdef Partitioner retv = Partitioner()             # <<<<<<<<<<<<<<
  *     setref(&retv.part, arg)
  *     return retv
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Partitioner)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Partitioner), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(47, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_retv = ((struct PyPetscPartitionerObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":241
+  /* "PETSc/CAPI.pyx":267
  * cdef api object PyPetscPartitioner_New(PetscPartitioner arg):
  *     cdef Partitioner retv = Partitioner()
  *     setref(&retv.part, arg)             # <<<<<<<<<<<<<<
  *     return retv
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->part), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->part), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(47, 267, __pyx_L1_error)
 
-  /* "PETSc/CAPI.pyx":242
+  /* "PETSc/CAPI.pyx":268
  *     cdef Partitioner retv = Partitioner()
  *     setref(&retv.part, arg)
  *     return retv             # <<<<<<<<<<<<<<
@@ -232820,7 +235264,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New(PetscPartitione
   __pyx_r = ((PyObject *)__pyx_v_retv);
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":239
+  /* "PETSc/CAPI.pyx":265
  * # -- Partitioner --
  * 
  * cdef api object PyPetscPartitioner_New(PetscPartitioner arg):             # <<<<<<<<<<<<<<
@@ -232840,7 +235284,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New(PetscPartitione
   return __pyx_r;
 }
 
-/* "PETSc/CAPI.pyx":244
+/* "PETSc/CAPI.pyx":270
  *     return retv
  * 
  * cdef api PetscPartitioner PyPetscPartitioner_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232855,12 +235299,9 @@ static PetscPartitioner __pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get(PyObject
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PetscPartitioner __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyPetscPartitioner_Get", 0);
 
-  /* "PETSc/CAPI.pyx":245
+  /* "PETSc/CAPI.pyx":271
  * 
  * cdef api PetscPartitioner PyPetscPartitioner_Get(object arg) except ? NULL:
  *     cdef PetscPartitioner retv = NULL             # <<<<<<<<<<<<<<
@@ -232869,20 +235310,20 @@ static PetscPartitioner __pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get(PyObject
  */
   __pyx_v_retv = NULL;
 
-  /* "PETSc/CAPI.pyx":246
+  /* "PETSc/CAPI.pyx":272
  * cdef api PetscPartitioner PyPetscPartitioner_Get(object arg) except ? NULL:
  *     cdef PetscPartitioner retv = NULL
  *     cdef Partitioner ob = <Partitioner?> arg             # <<<<<<<<<<<<<<
  *     retv = ob.part
  *     return retv
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Partitioner)))) {__pyx_filename = __pyx_f[47]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8petsc4py_5PETSc_Partitioner)))) __PYX_ERR(47, 272, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_arg;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_ob = ((struct PyPetscPartitionerObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/CAPI.pyx":247
+  /* "PETSc/CAPI.pyx":273
  *     cdef PetscPartitioner retv = NULL
  *     cdef Partitioner ob = <Partitioner?> arg
  *     retv = ob.part             # <<<<<<<<<<<<<<
@@ -232892,7 +235333,7 @@ static PetscPartitioner __pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get(PyObject
   __pyx_t_2 = __pyx_v_ob->part;
   __pyx_v_retv = __pyx_t_2;
 
-  /* "PETSc/CAPI.pyx":248
+  /* "PETSc/CAPI.pyx":274
  *     cdef Partitioner ob = <Partitioner?> arg
  *     retv = ob.part
  *     return retv             # <<<<<<<<<<<<<<
@@ -232902,7 +235343,7 @@ static PetscPartitioner __pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get(PyObject
   __pyx_r = __pyx_v_retv;
   goto __pyx_L0;
 
-  /* "PETSc/CAPI.pyx":244
+  /* "PETSc/CAPI.pyx":270
  *     return retv
  * 
  * cdef api PetscPartitioner PyPetscPartitioner_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
@@ -232929,7 +235370,7 @@ static PetscPartitioner __pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get(PyObject
  *                    const_char    *cfun,
  */
 
-static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_comm, int __pyx_v_line, const char *__pyx_v_cfun, const char *__pyx_v_cfile, int __pyx_v_n, PetscErrorType __pyx_v_p, const char *__pyx_v_mess, CYTHON_UNUSED void *__pyx_v_ctx) {
+static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v_line, const char *__pyx_v_cfun, const char *__pyx_v_cfile, int __pyx_v_n, PetscErrorType __pyx_v_p, const char *__pyx_v_mess, void *__pyx_v_ctx) {
   PetscLogDouble __pyx_v_mem;
   PetscLogDouble __pyx_v_rss;
   const char *__pyx_v_text;
@@ -232946,9 +235387,6 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
   int __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
@@ -232998,7 +235436,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  *     fnm = bytes2str(cfile)
  *     m = "%s() line %d in %s" % (fun, line, fnm)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cfun); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cfun); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 205, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_fun = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -233010,7 +235448,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  *     m = "%s() line %d in %s" % (fun, line, fnm)
  *     tbl.insert(0, m)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cfile); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cfile); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 206, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_fnm = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -233022,9 +235460,9 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  *     tbl.insert(0, m)
  *     if p != PETSC_ERROR_INITIAL:
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 207, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 207, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_fun);
   __Pyx_GIVEREF(__pyx_v_fun);
@@ -233035,7 +235473,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
   __Pyx_GIVEREF(__pyx_v_fnm);
   PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_fnm);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_line_d_in_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_line_d_in_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 207, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_m = ((PyObject*)__pyx_t_1);
@@ -233048,7 +235486,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  *     if p != PETSC_ERROR_INITIAL:
  *         return n
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_tbl, __pyx_n_s_insert); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_tbl, __pyx_n_s_insert); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 208, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
@@ -233062,7 +235500,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
       __pyx_t_4 = 1;
     }
   }
-  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 208, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   if (__pyx_t_3) {
     __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
@@ -233073,7 +235511,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
   __Pyx_INCREF(__pyx_v_m);
   __Pyx_GIVEREF(__pyx_v_m);
   PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_m);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 208, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -233098,6 +235536,14 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  */
     __pyx_r = __pyx_v_n;
     goto __pyx_L0;
+
+    /* "PETSc/PETSc.pyx":209
+ *     m = "%s() line %d in %s" % (fun, line, fnm)
+ *     tbl.insert(0, m)
+ *     if p != PETSC_ERROR_INITIAL:             # <<<<<<<<<<<<<<
+ *         return n
+ *     #
+ */
   }
 
   /* "PETSc/PETSc.pyx":212
@@ -233107,7 +235553,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  *     if n == PETSC_ERR_MEM: # special case
  *         PetscMallocGetCurrentUsage(&mem)
  */
-  if (__Pyx_PyObject_DelSlice(__pyx_v_tbl, 1, 0, NULL, NULL, &__pyx_slice__64, 1, 0, 1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelSlice(__pyx_v_tbl, 1, 0, NULL, NULL, &__pyx_slice__67, 1, 0, 1) < 0) __PYX_ERR(11, 212, __pyx_L1_error)
 
   /* "PETSc/PETSc.pyx":213
  *     #
@@ -233144,11 +235590,11 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  *         tbl.append(m)
  *     else:
  */
-    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_mem); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_mem); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_rss); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_rss); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -233156,7 +235602,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
     __pyx_t_1 = 0;
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_memory_Allocated_d_Used_b, __pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_memory_Allocated_d_Used_b, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_m, ((PyObject*)__pyx_t_2));
@@ -233169,18 +235615,26 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  *     else:
  *         PetscErrorMessage(n, &text, NULL)
  */
-    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_v_m); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_v_m); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(11, 219, __pyx_L1_error)
+
+    /* "PETSc/PETSc.pyx":213
+ *     #
+ *     del tbl[1:] # clear any previous stuff
+ *     if n == PETSC_ERR_MEM: # special case             # <<<<<<<<<<<<<<
+ *         PetscMallocGetCurrentUsage(&mem)
+ *         PetscMemoryGetCurrentUsage(&rss)
+ */
     goto __pyx_L4;
   }
-  /*else*/ {
 
-    /* "PETSc/PETSc.pyx":221
+  /* "PETSc/PETSc.pyx":221
  *         tbl.append(m)
  *     else:
  *         PetscErrorMessage(n, &text, NULL)             # <<<<<<<<<<<<<<
  *     if text != NULL: tbl.append(bytes2str(text))
  *     if mess != NULL: tbl.append(bytes2str(mess))
  */
+  /*else*/ {
     PetscErrorMessage(__pyx_v_n, (&__pyx_v_text), NULL);
   }
   __pyx_L4:;
@@ -233190,38 +235644,44 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
  *         PetscErrorMessage(n, &text, NULL)
  *     if text != NULL: tbl.append(bytes2str(text))             # <<<<<<<<<<<<<<
  *     if mess != NULL: tbl.append(bytes2str(mess))
- *     return n
+ *     <void>comm; <void>ctx; # unused
  */
   __pyx_t_6 = ((__pyx_v_text != NULL) != 0);
   if (__pyx_t_6) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_text); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 222, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(11, 222, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
   /* "PETSc/PETSc.pyx":223
  *         PetscErrorMessage(n, &text, NULL)
  *     if text != NULL: tbl.append(bytes2str(text))
  *     if mess != NULL: tbl.append(bytes2str(mess))             # <<<<<<<<<<<<<<
+ *     <void>comm; <void>ctx; # unused
  *     return n
- * 
  */
   __pyx_t_6 = ((__pyx_v_mess != NULL) != 0);
   if (__pyx_t_6) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_mess); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_mess); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 223, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(11, 223, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
   /* "PETSc/PETSc.pyx":224
  *     if text != NULL: tbl.append(bytes2str(text))
  *     if mess != NULL: tbl.append(bytes2str(mess))
+ *     <void>comm; <void>ctx; # unused             # <<<<<<<<<<<<<<
+ *     return n
+ * 
+ */
+  ((void)__pyx_v_comm);
+  ((void)__pyx_v_ctx);
+
+  /* "PETSc/PETSc.pyx":225
+ *     if mess != NULL: tbl.append(bytes2str(mess))
+ *     <void>comm; <void>ctx; # unused
  *     return n             # <<<<<<<<<<<<<<
  * 
  * cdef int PetscPythonErrorHandler(
@@ -233257,7 +235717,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(CYTHON_UNUSED MPI_Comm __pyx_v_com
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":226
+/* "PETSc/PETSc.pyx":227
  *     return n
  * 
  * cdef int PetscPythonErrorHandler(             # <<<<<<<<<<<<<<
@@ -233270,7 +235730,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler(MPI_Comm __pyx_v_com
   int __pyx_t_1;
   int __pyx_t_2;
 
-  /* "PETSc/PETSc.pyx":236
+  /* "PETSc/PETSc.pyx":237
  *     void          *ctx) nogil:
  *     global tracebacklist
  *     if Py_IsInitialized() and (<void*>tracebacklist) != NULL:             # <<<<<<<<<<<<<<
@@ -233288,7 +235748,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler(MPI_Comm __pyx_v_com
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/PETSc.pyx":237
+    /* "PETSc/PETSc.pyx":238
  *     global tracebacklist
  *     if Py_IsInitialized() and (<void*>tracebacklist) != NULL:
  *         return traceback(comm, line, cfun, cfile, n, p, mess, ctx)             # <<<<<<<<<<<<<<
@@ -233297,21 +235757,29 @@ static int __pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler(MPI_Comm __pyx_v_com
  */
     __pyx_r = __pyx_f_8petsc4py_5PETSc_traceback(__pyx_v_comm, __pyx_v_line, __pyx_v_cfun, __pyx_v_cfile, __pyx_v_n, __pyx_v_p, __pyx_v_mess, __pyx_v_ctx);
     goto __pyx_L0;
+
+    /* "PETSc/PETSc.pyx":237
+ *     void          *ctx) nogil:
+ *     global tracebacklist
+ *     if Py_IsInitialized() and (<void*>tracebacklist) != NULL:             # <<<<<<<<<<<<<<
+ *         return traceback(comm, line, cfun, cfile, n, p, mess, ctx)
+ *     else:
+ */
   }
-  /*else*/ {
 
-    /* "PETSc/PETSc.pyx":239
+  /* "PETSc/PETSc.pyx":240
  *         return traceback(comm, line, cfun, cfile, n, p, mess, ctx)
  *     else:
  *         return PetscTBEH(comm, line, cfun, cfile, n, p, mess, ctx)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
+  /*else*/ {
     __pyx_r = PetscTBEH(__pyx_v_comm, __pyx_v_line, __pyx_v_cfun, __pyx_v_cfile, __pyx_v_n, __pyx_v_p, __pyx_v_mess, __pyx_v_ctx);
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":226
+  /* "PETSc/PETSc.pyx":227
  *     return n
  * 
  * cdef int PetscPythonErrorHandler(             # <<<<<<<<<<<<<<
@@ -233324,7 +235792,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler(MPI_Comm __pyx_v_com
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":272
+/* "PETSc/PETSc.pyx":273
  * cdef char** PyPetsc_Argv = NULL
  * 
  * cdef int getinitargs(object args, int *argc, char **argv[]) except -1:             # <<<<<<<<<<<<<<
@@ -233353,13 +235821,10 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
   PyObject *__pyx_t_12 = NULL;
   int __pyx_t_13;
   char *__pyx_t_14;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getinitargs", 0);
   __Pyx_INCREF(__pyx_v_args);
 
-  /* "PETSc/PETSc.pyx":274
+  /* "PETSc/PETSc.pyx":275
  * cdef int getinitargs(object args, int *argc, char **argv[]) except -1:
  *     # allocate command line arguments
  *     cdef int i, c = 0             # <<<<<<<<<<<<<<
@@ -233368,7 +235833,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  */
   __pyx_v_c = 0;
 
-  /* "PETSc/PETSc.pyx":275
+  /* "PETSc/PETSc.pyx":276
  *     # allocate command line arguments
  *     cdef int i, c = 0
  *     cdef char **v = NULL             # <<<<<<<<<<<<<<
@@ -233377,7 +235842,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/PETSc.pyx":276
+  /* "PETSc/PETSc.pyx":277
  *     cdef int i, c = 0
  *     cdef char **v = NULL
  *     if args is None: args = []             # <<<<<<<<<<<<<<
@@ -233387,47 +235852,45 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
   __pyx_t_1 = (__pyx_v_args == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 277, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "PETSc/PETSc.pyx":277
+  /* "PETSc/PETSc.pyx":278
  *     cdef char **v = NULL
  *     if args is None: args = []
  *     args = [str(a).encode() for a in args]             # <<<<<<<<<<<<<<
  *     args = [a for a in args if a]
  *     c = <int> len(args)
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   if (likely(PyList_CheckExact(__pyx_v_args)) || PyTuple_CheckExact(__pyx_v_args)) {
     __pyx_t_4 = __pyx_v_args; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 278, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 278, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_4))) {
         if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(11, 278, __pyx_L1_error)
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 278, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       } else {
         if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(11, 278, __pyx_L1_error)
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 278, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       }
@@ -233437,7 +235900,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
         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[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(11, 278, __pyx_L1_error)
         }
         break;
       }
@@ -233445,15 +235908,15 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
     }
     __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_7);
     __pyx_t_7 = 0;
-    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(11, 278, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_INCREF(__pyx_v_a);
     __Pyx_GIVEREF(__pyx_v_a);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_a);
-    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 278, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_encode); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_encode); if (unlikely(!__pyx_t_8)) __PYX_ERR(11, 278, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __pyx_t_9 = NULL;
@@ -233467,53 +235930,53 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 278, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 278, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(11, 278, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF_SET(__pyx_v_args, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/PETSc.pyx":278
+  /* "PETSc/PETSc.pyx":279
  *     if args is None: args = []
  *     args = [str(a).encode() for a in args]
  *     args = [a for a in args if a]             # <<<<<<<<<<<<<<
  *     c = <int> len(args)
  *     v = <char**> malloc(<size_t>(c+1)*sizeof(char*))
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   if (likely(PyList_CheckExact(__pyx_v_args)) || PyTuple_CheckExact(__pyx_v_args)) {
     __pyx_t_4 = __pyx_v_args; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_args); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 279, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 279, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_4))) {
         if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(11, 279, __pyx_L1_error)
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 279, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       } else {
         if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(11, 279, __pyx_L1_error)
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 279, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       }
@@ -233523,7 +235986,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
         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[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(11, 279, __pyx_L1_error)
         }
         break;
       }
@@ -233531,28 +235994,26 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
     }
     __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_7);
     __pyx_t_7 = 0;
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_a); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_a); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(11, 279, __pyx_L1_error)
     if (__pyx_t_2) {
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_a))) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L8;
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_a))) __PYX_ERR(11, 279, __pyx_L1_error)
     }
-    __pyx_L8:;
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF_SET(__pyx_v_args, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/PETSc.pyx":279
+  /* "PETSc/PETSc.pyx":280
  *     args = [str(a).encode() for a in args]
  *     args = [a for a in args if a]
  *     c = <int> len(args)             # <<<<<<<<<<<<<<
  *     v = <char**> malloc(<size_t>(c+1)*sizeof(char*))
  *     if v == NULL: raise MemoryError
  */
-  __pyx_t_5 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(11, 280, __pyx_L1_error)
   __pyx_v_c = ((int)__pyx_t_5);
 
-  /* "PETSc/PETSc.pyx":280
+  /* "PETSc/PETSc.pyx":281
  *     args = [a for a in args if a]
  *     c = <int> len(args)
  *     v = <char**> malloc(<size_t>(c+1)*sizeof(char*))             # <<<<<<<<<<<<<<
@@ -233561,7 +236022,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  */
   __pyx_v_v = ((char **)malloc((((size_t)(__pyx_v_c + 1)) * (sizeof(char *)))));
 
-  /* "PETSc/PETSc.pyx":281
+  /* "PETSc/PETSc.pyx":282
  *     c = <int> len(args)
  *     v = <char**> malloc(<size_t>(c+1)*sizeof(char*))
  *     if v == NULL: raise MemoryError             # <<<<<<<<<<<<<<
@@ -233570,10 +236031,10 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  */
   __pyx_t_2 = ((__pyx_v_v == NULL) != 0);
   if (__pyx_t_2) {
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); __PYX_ERR(11, 282, __pyx_L1_error)
   }
 
-  /* "PETSc/PETSc.pyx":282
+  /* "PETSc/PETSc.pyx":283
  *     v = <char**> malloc(<size_t>(c+1)*sizeof(char*))
  *     if v == NULL: raise MemoryError
  *     memset(v, 0, <size_t>(c+1)*sizeof(char*))             # <<<<<<<<<<<<<<
@@ -233582,7 +236043,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  */
   memset(__pyx_v_v, 0, (((size_t)(__pyx_v_c + 1)) * (sizeof(char *))));
 
-  /* "PETSc/PETSc.pyx":283
+  /* "PETSc/PETSc.pyx":284
  *     if v == NULL: raise MemoryError
  *     memset(v, 0, <size_t>(c+1)*sizeof(char*))
  *     try:             # <<<<<<<<<<<<<<
@@ -233590,13 +236051,15 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  *             v[i] = strdup(args[i])
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
     __Pyx_XGOTREF(__pyx_t_10);
     __Pyx_XGOTREF(__pyx_t_11);
     __Pyx_XGOTREF(__pyx_t_12);
     /*try:*/ {
 
-      /* "PETSc/PETSc.pyx":284
+      /* "PETSc/PETSc.pyx":285
  *     memset(v, 0, <size_t>(c+1)*sizeof(char*))
  *     try:
  *         for 0 <= i < c:             # <<<<<<<<<<<<<<
@@ -233606,20 +236069,20 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
       __pyx_t_13 = __pyx_v_c;
       for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_13; __pyx_v_i++) {
 
-        /* "PETSc/PETSc.pyx":285
+        /* "PETSc/PETSc.pyx":286
  *     try:
  *         for 0 <= i < c:
  *             v[i] = strdup(args[i])             # <<<<<<<<<<<<<<
  *             if v[i] == NULL:
  *                 raise MemoryError
  */
-        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_args, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L10_error;};
+        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_args, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 286, __pyx_L10_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_14 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
+        __pyx_t_14 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) __PYX_ERR(11, 286, __pyx_L10_error)
         (__pyx_v_v[__pyx_v_i]) = strdup(__pyx_t_14);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-        /* "PETSc/PETSc.pyx":286
+        /* "PETSc/PETSc.pyx":287
  *         for 0 <= i < c:
  *             v[i] = strdup(args[i])
  *             if v[i] == NULL:             # <<<<<<<<<<<<<<
@@ -233629,29 +236092,46 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
         __pyx_t_2 = (((__pyx_v_v[__pyx_v_i]) == NULL) != 0);
         if (__pyx_t_2) {
 
-          /* "PETSc/PETSc.pyx":287
+          /* "PETSc/PETSc.pyx":288
  *             v[i] = strdup(args[i])
  *             if v[i] == NULL:
  *                 raise MemoryError             # <<<<<<<<<<<<<<
  *     except:
  *         delinitargs(&c, &v); raise
  */
-          PyErr_NoMemory(); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
+          PyErr_NoMemory(); __PYX_ERR(11, 288, __pyx_L10_error)
+
+          /* "PETSc/PETSc.pyx":287
+ *         for 0 <= i < c:
+ *             v[i] = strdup(args[i])
+ *             if v[i] == NULL:             # <<<<<<<<<<<<<<
+ *                 raise MemoryError
+ *     except:
+ */
         }
       }
+
+      /* "PETSc/PETSc.pyx":284
+ *     if v == NULL: raise MemoryError
+ *     memset(v, 0, <size_t>(c+1)*sizeof(char*))
+ *     try:             # <<<<<<<<<<<<<<
+ *         for 0 <= i < c:
+ *             v[i] = strdup(args[i])
+ */
     }
     __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
     goto __pyx_L17_try_end;
     __pyx_L10_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/PETSc.pyx":288
+    /* "PETSc/PETSc.pyx":289
  *             if v[i] == NULL:
  *                 raise MemoryError
  *     except:             # <<<<<<<<<<<<<<
@@ -233660,12 +236140,12 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  */
     /*except:*/ {
       __Pyx_AddTraceback("petsc4py.PETSc.getinitargs", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L12_except_error;}
+      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(11, 289, __pyx_L12_except_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_7);
 
-      /* "PETSc/PETSc.pyx":289
+      /* "PETSc/PETSc.pyx":290
  *                 raise MemoryError
  *     except:
  *         delinitargs(&c, &v); raise             # <<<<<<<<<<<<<<
@@ -233676,11 +236156,20 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
       __Pyx_GIVEREF(__pyx_t_3);
       __Pyx_GIVEREF(__pyx_t_4);
       __Pyx_XGIVEREF(__pyx_t_7);
-      __Pyx_ErrRestore(__pyx_t_3, __pyx_t_4, __pyx_t_7);
+      __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_4, __pyx_t_7);
       __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_7 = 0; 
-      {__pyx_filename = __pyx_f[11]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L12_except_error;}
+      __PYX_ERR(11, 290, __pyx_L12_except_error)
     }
     __pyx_L12_except_error:;
+
+    /* "PETSc/PETSc.pyx":284
+ *     if v == NULL: raise MemoryError
+ *     memset(v, 0, <size_t>(c+1)*sizeof(char*))
+ *     try:             # <<<<<<<<<<<<<<
+ *         for 0 <= i < c:
+ *             v[i] = strdup(args[i])
+ */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_10);
     __Pyx_XGIVEREF(__pyx_t_11);
     __Pyx_XGIVEREF(__pyx_t_12);
@@ -233689,7 +236178,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
     __pyx_L17_try_end:;
   }
 
-  /* "PETSc/PETSc.pyx":290
+  /* "PETSc/PETSc.pyx":291
  *     except:
  *         delinitargs(&c, &v); raise
  *     argc[0] = c; argv[0] = v             # <<<<<<<<<<<<<<
@@ -233699,7 +236188,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
   (__pyx_v_argc[0]) = __pyx_v_c;
   (__pyx_v_argv[0]) = __pyx_v_v;
 
-  /* "PETSc/PETSc.pyx":291
+  /* "PETSc/PETSc.pyx":292
  *         delinitargs(&c, &v); raise
  *     argc[0] = c; argv[0] = v
  *     return 0             # <<<<<<<<<<<<<<
@@ -233709,7 +236198,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":272
+  /* "PETSc/PETSc.pyx":273
  * cdef char** PyPetsc_Argv = NULL
  * 
  * cdef int getinitargs(object args, int *argc, char **argv[]) except -1:             # <<<<<<<<<<<<<<
@@ -233733,7 +236222,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":293
+/* "PETSc/PETSc.pyx":294
  *     return 0
  * 
  * cdef void delinitargs(int *argc, char **argv[]) nogil:             # <<<<<<<<<<<<<<
@@ -233749,7 +236238,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
   int __pyx_t_2;
   int __pyx_t_3;
 
-  /* "PETSc/PETSc.pyx":295
+  /* "PETSc/PETSc.pyx":296
  * cdef void delinitargs(int *argc, char **argv[]) nogil:
  *     # dallocate command line arguments
  *     cdef int i, c = argc[0]             # <<<<<<<<<<<<<<
@@ -233758,7 +236247,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
  */
   __pyx_v_c = (__pyx_v_argc[0]);
 
-  /* "PETSc/PETSc.pyx":296
+  /* "PETSc/PETSc.pyx":297
  *     # dallocate command line arguments
  *     cdef int i, c = argc[0]
  *     cdef char** v = argv[0]             # <<<<<<<<<<<<<<
@@ -233767,7 +236256,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
  */
   __pyx_v_v = (__pyx_v_argv[0]);
 
-  /* "PETSc/PETSc.pyx":297
+  /* "PETSc/PETSc.pyx":298
  *     cdef int i, c = argc[0]
  *     cdef char** v = argv[0]
  *     argc[0] = 0; argv[0] = NULL;             # <<<<<<<<<<<<<<
@@ -233777,7 +236266,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
   (__pyx_v_argc[0]) = 0;
   (__pyx_v_argv[0]) = NULL;
 
-  /* "PETSc/PETSc.pyx":298
+  /* "PETSc/PETSc.pyx":299
  *     cdef char** v = argv[0]
  *     argc[0] = 0; argv[0] = NULL;
  *     if c >= 0 and v != NULL:             # <<<<<<<<<<<<<<
@@ -233795,7 +236284,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/PETSc.pyx":299
+    /* "PETSc/PETSc.pyx":300
  *     argc[0] = 0; argv[0] = NULL;
  *     if c >= 0 and v != NULL:
  *         for 0 <= i < c:             # <<<<<<<<<<<<<<
@@ -233805,7 +236294,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
     __pyx_t_3 = __pyx_v_c;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
 
-      /* "PETSc/PETSc.pyx":300
+      /* "PETSc/PETSc.pyx":301
  *     if c >= 0 and v != NULL:
  *         for 0 <= i < c:
  *             if  v[i] != NULL: free(v[i])             # <<<<<<<<<<<<<<
@@ -233815,12 +236304,10 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
       __pyx_t_1 = (((__pyx_v_v[__pyx_v_i]) != NULL) != 0);
       if (__pyx_t_1) {
         free((__pyx_v_v[__pyx_v_i]));
-        goto __pyx_L8;
       }
-      __pyx_L8:;
     }
 
-    /* "PETSc/PETSc.pyx":301
+    /* "PETSc/PETSc.pyx":302
  *         for 0 <= i < c:
  *             if  v[i] != NULL: free(v[i])
  *         free(v)             # <<<<<<<<<<<<<<
@@ -233828,11 +236315,17 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
  * cdef void finalize() nogil:
  */
     free(__pyx_v_v);
-    goto __pyx_L3;
+
+    /* "PETSc/PETSc.pyx":299
+ *     cdef char** v = argv[0]
+ *     argc[0] = 0; argv[0] = NULL;
+ *     if c >= 0 and v != NULL:             # <<<<<<<<<<<<<<
+ *         for 0 <= i < c:
+ *             if  v[i] != NULL: free(v[i])
+ */
   }
-  __pyx_L3:;
 
-  /* "PETSc/PETSc.pyx":293
+  /* "PETSc/PETSc.pyx":294
  *     return 0
  * 
  * cdef void delinitargs(int *argc, char **argv[]) nogil:             # <<<<<<<<<<<<<<
@@ -233843,7 +236336,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
   /* function exit code */
 }
 
-/* "PETSc/PETSc.pyx":303
+/* "PETSc/PETSc.pyx":304
  *         free(v)
  * 
  * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
@@ -233855,7 +236348,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
   int __pyx_v_ierr;
   int __pyx_t_1;
 
-  /* "PETSc/PETSc.pyx":304
+  /* "PETSc/PETSc.pyx":305
  * 
  * cdef void finalize() nogil:
  *     cdef int ierr = 0             # <<<<<<<<<<<<<<
@@ -233864,7 +236357,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   __pyx_v_ierr = 0;
 
-  /* "PETSc/PETSc.pyx":307
+  /* "PETSc/PETSc.pyx":308
  *     # deallocate command line arguments
  *     global PyPetsc_Argc; global PyPetsc_Argv;
  *     delinitargs(&PyPetsc_Argc, &PyPetsc_Argv)             # <<<<<<<<<<<<<<
@@ -233873,7 +236366,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   __pyx_f_8petsc4py_5PETSc_delinitargs((&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argc), (&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argv));
 
-  /* "PETSc/PETSc.pyx":309
+  /* "PETSc/PETSc.pyx":310
  *     delinitargs(&PyPetsc_Argc, &PyPetsc_Argv)
  *     # manage PETSc finalization
  *     if not (<int>PetscInitializeCalled): return             # <<<<<<<<<<<<<<
@@ -233885,7 +236378,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":310
+  /* "PETSc/PETSc.pyx":311
  *     # manage PETSc finalization
  *     if not (<int>PetscInitializeCalled): return
  *     if (<int>PetscFinalizeCalled): return             # <<<<<<<<<<<<<<
@@ -233897,7 +236390,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":312
+  /* "PETSc/PETSc.pyx":313
  *     if (<int>PetscFinalizeCalled): return
  *     # deinstall Python error handler
  *     ierr = PetscPopErrorHandler()             # <<<<<<<<<<<<<<
@@ -233906,7 +236399,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   __pyx_v_ierr = PetscPopErrorHandler();
 
-  /* "PETSc/PETSc.pyx":313
+  /* "PETSc/PETSc.pyx":314
  *     # deinstall Python error handler
  *     ierr = PetscPopErrorHandler()
  *     if ierr != 0:             # <<<<<<<<<<<<<<
@@ -233916,19 +236409,25 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
   __pyx_t_1 = ((__pyx_v_ierr != 0) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PETSc.pyx":314
+    /* "PETSc/PETSc.pyx":315
  *     ierr = PetscPopErrorHandler()
  *     if ierr != 0:
  *         fprintf(stderr, "PetscPopErrorHandler() failed "             # <<<<<<<<<<<<<<
  *                 "[error code: %d]\n", ierr)
  *     # finalize PETSc
  */
-    fprintf(stderr, __pyx_k_PetscPopErrorHandler_failed_erro, __pyx_v_ierr);
-    goto __pyx_L5;
+    fprintf(stderr, ((char *)"PetscPopErrorHandler() failed [error code: %d]\n"), __pyx_v_ierr);
+
+    /* "PETSc/PETSc.pyx":314
+ *     # deinstall Python error handler
+ *     ierr = PetscPopErrorHandler()
+ *     if ierr != 0:             # <<<<<<<<<<<<<<
+ *         fprintf(stderr, "PetscPopErrorHandler() failed "
+ *                 "[error code: %d]\n", ierr)
+ */
   }
-  __pyx_L5:;
 
-  /* "PETSc/PETSc.pyx":317
+  /* "PETSc/PETSc.pyx":318
  *                 "[error code: %d]\n", ierr)
  *     # finalize PETSc
  *     ierr = PetscFinalize()             # <<<<<<<<<<<<<<
@@ -233937,7 +236436,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   __pyx_v_ierr = PetscFinalize();
 
-  /* "PETSc/PETSc.pyx":318
+  /* "PETSc/PETSc.pyx":319
  *     # finalize PETSc
  *     ierr = PetscFinalize()
  *     if ierr != 0:             # <<<<<<<<<<<<<<
@@ -233947,19 +236446,25 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
   __pyx_t_1 = ((__pyx_v_ierr != 0) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PETSc.pyx":319
+    /* "PETSc/PETSc.pyx":320
  *     ierr = PetscFinalize()
  *     if ierr != 0:
  *         fprintf(stderr, "PetscFinalize() failed "             # <<<<<<<<<<<<<<
  *                 "[error code: %d]\n", ierr)
  *     # and we are done, see you later !!
  */
-    fprintf(stderr, __pyx_k_PetscFinalize_failed_error_code, __pyx_v_ierr);
-    goto __pyx_L6;
+    fprintf(stderr, ((char *)"PetscFinalize() failed [error code: %d]\n"), __pyx_v_ierr);
+
+    /* "PETSc/PETSc.pyx":319
+ *     # finalize PETSc
+ *     ierr = PetscFinalize()
+ *     if ierr != 0:             # <<<<<<<<<<<<<<
+ *         fprintf(stderr, "PetscFinalize() failed "
+ *                 "[error code: %d]\n", ierr)
+ */
   }
-  __pyx_L6:;
 
-  /* "PETSc/PETSc.pyx":303
+  /* "PETSc/PETSc.pyx":304
  *         free(v)
  * 
  * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
@@ -233971,7 +236476,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
   __pyx_L0:;
 }
 
-/* "PETSc/PETSc.pyx":323
+/* "PETSc/PETSc.pyx":324
  *     # and we are done, see you later !!
  * 
  * cdef int initialize(object args, object comm) except -1:             # <<<<<<<<<<<<<<
@@ -233986,12 +236491,9 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
   int __pyx_t_1;
   int __pyx_t_2;
   MPI_Comm __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("initialize", 0);
 
-  /* "PETSc/PETSc.pyx":324
+  /* "PETSc/PETSc.pyx":325
  * 
  * cdef int initialize(object args, object comm) except -1:
  *     if (<int>PetscInitializeCalled): return 1             # <<<<<<<<<<<<<<
@@ -234004,7 +236506,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":325
+  /* "PETSc/PETSc.pyx":326
  * cdef int initialize(object args, object comm) except -1:
  *     if (<int>PetscInitializeCalled): return 1
  *     if (<int>PetscFinalizeCalled):   return 0             # <<<<<<<<<<<<<<
@@ -234017,35 +236519,35 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":328
+  /* "PETSc/PETSc.pyx":329
  *     # allocate command line arguments
  *     global PyPetsc_Argc; global PyPetsc_Argv;
  *     getinitargs(args, &PyPetsc_Argc, &PyPetsc_Argv)             # <<<<<<<<<<<<<<
  *     # communicator
  *     global PETSC_COMM_WORLD
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getinitargs(__pyx_v_args, (&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argc), (&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_getinitargs(__pyx_v_args, (&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argc), (&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 329, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":331
+  /* "PETSc/PETSc.pyx":332
  *     # communicator
  *     global PETSC_COMM_WORLD
  *     PETSC_COMM_WORLD = def_Comm(comm, PETSC_COMM_WORLD)             # <<<<<<<<<<<<<<
  *     # initialize PETSc
  *     CHKERR( PetscInitialize(&PyPetsc_Argc, &PyPetsc_Argv, NULL, NULL) )
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, PETSC_COMM_WORLD); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, PETSC_COMM_WORLD); if (unlikely(PyErr_Occurred())) __PYX_ERR(11, 332, __pyx_L1_error)
   PETSC_COMM_WORLD = __pyx_t_3;
 
-  /* "PETSc/PETSc.pyx":333
+  /* "PETSc/PETSc.pyx":334
  *     PETSC_COMM_WORLD = def_Comm(comm, PETSC_COMM_WORLD)
  *     # initialize PETSc
  *     CHKERR( PetscInitialize(&PyPetsc_Argc, &PyPetsc_Argv, NULL, NULL) )             # <<<<<<<<<<<<<<
  *     # install Python error handler
  *     cdef PetscErrorHandlerFunction handler = NULL
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscInitialize((&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argc), (&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argv), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscInitialize((&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argc), (&__pyx_v_8petsc4py_5PETSc_PyPetsc_Argv), NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 334, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":335
+  /* "PETSc/PETSc.pyx":336
  *     CHKERR( PetscInitialize(&PyPetsc_Argc, &PyPetsc_Argv, NULL, NULL) )
  *     # install Python error handler
  *     cdef PetscErrorHandlerFunction handler = NULL             # <<<<<<<<<<<<<<
@@ -234054,7 +236556,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
  */
   __pyx_v_handler = NULL;
 
-  /* "PETSc/PETSc.pyx":336
+  /* "PETSc/PETSc.pyx":337
  *     # install Python error handler
  *     cdef PetscErrorHandlerFunction handler = NULL
  *     handler = <PetscErrorHandlerFunction>PetscPythonErrorHandler             # <<<<<<<<<<<<<<
@@ -234063,40 +236565,46 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
  */
   __pyx_v_handler = ((PetscErrorHandlerFunction)__pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler);
 
-  /* "PETSc/PETSc.pyx":337
+  /* "PETSc/PETSc.pyx":338
  *     cdef PetscErrorHandlerFunction handler = NULL
  *     handler = <PetscErrorHandlerFunction>PetscPythonErrorHandler
  *     CHKERR( PetscPushErrorHandler(handler, NULL) )             # <<<<<<<<<<<<<<
  *     # register finalization function
  *     if Py_AtExit(finalize) < 0:
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPushErrorHandler(__pyx_v_handler, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPushErrorHandler(__pyx_v_handler, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 338, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":339
+  /* "PETSc/PETSc.pyx":340
  *     CHKERR( PetscPushErrorHandler(handler, NULL) )
  *     # register finalization function
  *     if Py_AtExit(finalize) < 0:             # <<<<<<<<<<<<<<
- *         PySys_WriteStderr("warning: could not register"
- *                           "PetscFinalize() with Py_AtExit()", 0)
+ *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
+ *                           b"PetscFinalize()")
  */
   __pyx_t_1 = ((Py_AtExit(__pyx_f_8petsc4py_5PETSc_finalize) < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PETSc.pyx":340
+    /* "PETSc/PETSc.pyx":341
  *     # register finalization function
  *     if Py_AtExit(finalize) < 0:
- *         PySys_WriteStderr("warning: could not register"             # <<<<<<<<<<<<<<
- *                           "PetscFinalize() with Py_AtExit()", 0)
+ *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",             # <<<<<<<<<<<<<<
+ *                           b"PetscFinalize()")
  *     return 1 # and we are done, enjoy !!
  */
-    PySys_WriteStderr(__pyx_k_warning_could_not_registerPetscF, 0);
-    goto __pyx_L5;
+    PySys_WriteStderr(((char *)"warning: could not register %s with Py_AtExit()"), ((char *)"PetscFinalize()"));
+
+    /* "PETSc/PETSc.pyx":340
+ *     CHKERR( PetscPushErrorHandler(handler, NULL) )
+ *     # register finalization function
+ *     if Py_AtExit(finalize) < 0:             # <<<<<<<<<<<<<<
+ *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
+ *                           b"PetscFinalize()")
+ */
   }
-  __pyx_L5:;
 
-  /* "PETSc/PETSc.pyx":342
- *         PySys_WriteStderr("warning: could not register"
- *                           "PetscFinalize() with Py_AtExit()", 0)
+  /* "PETSc/PETSc.pyx":343
+ *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
+ *                           b"PetscFinalize()")
  *     return 1 # and we are done, enjoy !!             # <<<<<<<<<<<<<<
  * 
  * cdef extern from *:
@@ -234104,7 +236612,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
   __pyx_r = 1;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":323
+  /* "PETSc/PETSc.pyx":324
  *     # and we are done, see you later !!
  * 
  * cdef int initialize(object args, object comm) except -1:             # <<<<<<<<<<<<<<
@@ -234121,7 +236629,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":381
+/* "PETSc/PETSc.pyx":382
  * """
  * 
  * cdef int register() except -1:             # <<<<<<<<<<<<<<
@@ -234134,12 +236642,9 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
   __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("register", 0);
 
-  /* "PETSc/PETSc.pyx":383
+  /* "PETSc/PETSc.pyx":384
  * cdef int register() except -1:
  *     global registercalled
  *     if registercalled: return 0             # <<<<<<<<<<<<<<
@@ -234152,7 +236657,7 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":384
+  /* "PETSc/PETSc.pyx":385
  *     global registercalled
  *     if registercalled: return 0
  *     registercalled = True             # <<<<<<<<<<<<<<
@@ -234161,214 +236666,214 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
  */
   __pyx_v_8petsc4py_5PETSc_registercalled = 1;
 
-  /* "PETSc/PETSc.pyx":386
+  /* "PETSc/PETSc.pyx":387
  *     registercalled = True
  *     # register citation
  *     CHKERR( PetscCitationsRegister(citation, NULL) )             # <<<<<<<<<<<<<<
  *     # make sure all PETSc packages are initialized
  *     CHKERR( PetscInitializePackageAll() )
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCitationsRegister(__pyx_v_8petsc4py_5PETSc_citation, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCitationsRegister(__pyx_v_8petsc4py_5PETSc_citation, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 387, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":388
+  /* "PETSc/PETSc.pyx":389
  *     CHKERR( PetscCitationsRegister(citation, NULL) )
  *     # make sure all PETSc packages are initialized
  *     CHKERR( PetscInitializePackageAll() )             # <<<<<<<<<<<<<<
  *     # register custom implementations
  *     import_libpetsc4py()
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscInitializePackageAll()); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscInitializePackageAll()); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 389, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":390
+  /* "PETSc/PETSc.pyx":391
  *     CHKERR( PetscInitializePackageAll() )
  *     # register custom implementations
  *     import_libpetsc4py()             # <<<<<<<<<<<<<<
  *     CHKERR( PetscPythonRegisterAll() )
  *     # register Python types
  */
-  __pyx_t_2 = import_libpetsc4py(); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = import_libpetsc4py(); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 391, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":391
+  /* "PETSc/PETSc.pyx":392
  *     # register custom implementations
  *     import_libpetsc4py()
  *     CHKERR( PetscPythonRegisterAll() )             # <<<<<<<<<<<<<<
  *     # register Python types
  *     PyPetscType_Register(PETSC_OBJECT_CLASSID,      Object)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPythonRegisterAll()); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPythonRegisterAll()); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 392, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":393
+  /* "PETSc/PETSc.pyx":394
  *     CHKERR( PetscPythonRegisterAll() )
  *     # register Python types
  *     PyPetscType_Register(PETSC_OBJECT_CLASSID,      Object)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_VIEWER_CLASSID,      Viewer)
  *     PyPetscType_Register(PETSC_RANDOM_CLASSID,      Random)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSC_OBJECT_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Object)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSC_OBJECT_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Object); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 394, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":394
+  /* "PETSc/PETSc.pyx":395
  *     # register Python types
  *     PyPetscType_Register(PETSC_OBJECT_CLASSID,      Object)
  *     PyPetscType_Register(PETSC_VIEWER_CLASSID,      Viewer)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_RANDOM_CLASSID,      Random)
  *     PyPetscType_Register(PETSC_IS_CLASSID,          IS)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSC_VIEWER_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Viewer)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSC_VIEWER_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Viewer); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 395, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":395
+  /* "PETSc/PETSc.pyx":396
  *     PyPetscType_Register(PETSC_OBJECT_CLASSID,      Object)
  *     PyPetscType_Register(PETSC_VIEWER_CLASSID,      Viewer)
  *     PyPetscType_Register(PETSC_RANDOM_CLASSID,      Random)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_IS_CLASSID,          IS)
  *     PyPetscType_Register(PETSC_LGMAP_CLASSID,       LGMap)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSC_RANDOM_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Random)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSC_RANDOM_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Random); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 396, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":396
+  /* "PETSc/PETSc.pyx":397
  *     PyPetscType_Register(PETSC_VIEWER_CLASSID,      Viewer)
  *     PyPetscType_Register(PETSC_RANDOM_CLASSID,      Random)
  *     PyPetscType_Register(PETSC_IS_CLASSID,          IS)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_LGMAP_CLASSID,       LGMap)
  *     PyPetscType_Register(PETSC_SF_CLASSID,          SF)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(IS_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_IS)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(IS_CLASSID, __pyx_ptype_8petsc4py_5PETSc_IS); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 397, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":397
+  /* "PETSc/PETSc.pyx":398
  *     PyPetscType_Register(PETSC_RANDOM_CLASSID,      Random)
  *     PyPetscType_Register(PETSC_IS_CLASSID,          IS)
  *     PyPetscType_Register(PETSC_LGMAP_CLASSID,       LGMap)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_SF_CLASSID,          SF)
  *     PyPetscType_Register(PETSC_VEC_CLASSID,         Vec)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(IS_LTOGM_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_LGMap)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(IS_LTOGM_CLASSID, __pyx_ptype_8petsc4py_5PETSc_LGMap); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 398, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":398
+  /* "PETSc/PETSc.pyx":399
  *     PyPetscType_Register(PETSC_IS_CLASSID,          IS)
  *     PyPetscType_Register(PETSC_LGMAP_CLASSID,       LGMap)
  *     PyPetscType_Register(PETSC_SF_CLASSID,          SF)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_VEC_CLASSID,         Vec)
  *     PyPetscType_Register(PETSC_SCATTER_CLASSID,     Scatter)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSCSF_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SF)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSCSF_CLASSID, __pyx_ptype_8petsc4py_5PETSc_SF); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 399, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":399
+  /* "PETSc/PETSc.pyx":400
  *     PyPetscType_Register(PETSC_LGMAP_CLASSID,       LGMap)
  *     PyPetscType_Register(PETSC_SF_CLASSID,          SF)
  *     PyPetscType_Register(PETSC_VEC_CLASSID,         Vec)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_SCATTER_CLASSID,     Scatter)
  *     PyPetscType_Register(PETSC_SECTION_CLASSID,     Section)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(VEC_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(VEC_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Vec); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 400, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":400
+  /* "PETSc/PETSc.pyx":401
  *     PyPetscType_Register(PETSC_SF_CLASSID,          SF)
  *     PyPetscType_Register(PETSC_VEC_CLASSID,         Vec)
  *     PyPetscType_Register(PETSC_SCATTER_CLASSID,     Scatter)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_SECTION_CLASSID,     Section)
  *     PyPetscType_Register(PETSC_MAT_CLASSID,         Mat)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(VEC_SCATTER_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Scatter)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(VEC_SCATTER_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Scatter); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 401, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":401
+  /* "PETSc/PETSc.pyx":402
  *     PyPetscType_Register(PETSC_VEC_CLASSID,         Vec)
  *     PyPetscType_Register(PETSC_SCATTER_CLASSID,     Scatter)
  *     PyPetscType_Register(PETSC_SECTION_CLASSID,     Section)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_MAT_CLASSID,         Mat)
  *     PyPetscType_Register(PETSC_NULLSPACE_CLASSID,   NullSpace)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSC_SECTION_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Section)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSC_SECTION_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Section); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 402, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":402
+  /* "PETSc/PETSc.pyx":403
  *     PyPetscType_Register(PETSC_SCATTER_CLASSID,     Scatter)
  *     PyPetscType_Register(PETSC_SECTION_CLASSID,     Section)
  *     PyPetscType_Register(PETSC_MAT_CLASSID,         Mat)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_NULLSPACE_CLASSID,   NullSpace)
  *     PyPetscType_Register(PETSC_PC_CLASSID,          PC)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(MAT_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(MAT_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Mat); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 403, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":403
+  /* "PETSc/PETSc.pyx":404
  *     PyPetscType_Register(PETSC_SECTION_CLASSID,     Section)
  *     PyPetscType_Register(PETSC_MAT_CLASSID,         Mat)
  *     PyPetscType_Register(PETSC_NULLSPACE_CLASSID,   NullSpace)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_PC_CLASSID,          PC)
  *     PyPetscType_Register(PETSC_KSP_CLASSID,         KSP)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(MAT_NULLSPACE_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_NullSpace)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(MAT_NULLSPACE_CLASSID, __pyx_ptype_8petsc4py_5PETSc_NullSpace); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 404, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":404
+  /* "PETSc/PETSc.pyx":405
  *     PyPetscType_Register(PETSC_MAT_CLASSID,         Mat)
  *     PyPetscType_Register(PETSC_NULLSPACE_CLASSID,   NullSpace)
  *     PyPetscType_Register(PETSC_PC_CLASSID,          PC)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_KSP_CLASSID,         KSP)
  *     PyPetscType_Register(PETSC_SNES_CLASSID,        SNES)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PC_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_PC)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PC_CLASSID, __pyx_ptype_8petsc4py_5PETSc_PC); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 405, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":405
+  /* "PETSc/PETSc.pyx":406
  *     PyPetscType_Register(PETSC_NULLSPACE_CLASSID,   NullSpace)
  *     PyPetscType_Register(PETSC_PC_CLASSID,          PC)
  *     PyPetscType_Register(PETSC_KSP_CLASSID,         KSP)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_SNES_CLASSID,        SNES)
  *     PyPetscType_Register(PETSC_TS_CLASSID,          TS)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(KSP_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_KSP)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(KSP_CLASSID, __pyx_ptype_8petsc4py_5PETSc_KSP); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 406, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":406
+  /* "PETSc/PETSc.pyx":407
  *     PyPetscType_Register(PETSC_PC_CLASSID,          PC)
  *     PyPetscType_Register(PETSC_KSP_CLASSID,         KSP)
  *     PyPetscType_Register(PETSC_SNES_CLASSID,        SNES)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_TS_CLASSID,          TS)
  *     PyPetscType_Register(PETSC_TAO_CLASSID,         TAO)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(SNES_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_SNES)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(SNES_CLASSID, __pyx_ptype_8petsc4py_5PETSc_SNES); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 407, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":407
+  /* "PETSc/PETSc.pyx":408
  *     PyPetscType_Register(PETSC_KSP_CLASSID,         KSP)
  *     PyPetscType_Register(PETSC_SNES_CLASSID,        SNES)
  *     PyPetscType_Register(PETSC_TS_CLASSID,          TS)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_TAO_CLASSID,         TAO)
  *     PyPetscType_Register(PETSC_AO_CLASSID,          AO)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(TS_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_TS)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(TS_CLASSID, __pyx_ptype_8petsc4py_5PETSc_TS); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 408, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":408
+  /* "PETSc/PETSc.pyx":409
  *     PyPetscType_Register(PETSC_SNES_CLASSID,        SNES)
  *     PyPetscType_Register(PETSC_TS_CLASSID,          TS)
  *     PyPetscType_Register(PETSC_TAO_CLASSID,         TAO)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_AO_CLASSID,          AO)
  *     PyPetscType_Register(PETSC_DM_CLASSID,          DM)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(TAO_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_TAO)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(TAO_CLASSID, __pyx_ptype_8petsc4py_5PETSc_TAO); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 409, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":409
+  /* "PETSc/PETSc.pyx":410
  *     PyPetscType_Register(PETSC_TS_CLASSID,          TS)
  *     PyPetscType_Register(PETSC_TAO_CLASSID,         TAO)
  *     PyPetscType_Register(PETSC_AO_CLASSID,          AO)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_DM_CLASSID,          DM)
  *     PyPetscType_Register(PETSC_PARTITIONER_CLASSID, Partitioner)
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(AO_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_AO)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(AO_CLASSID, __pyx_ptype_8petsc4py_5PETSc_AO); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 410, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":410
+  /* "PETSc/PETSc.pyx":411
  *     PyPetscType_Register(PETSC_TAO_CLASSID,         TAO)
  *     PyPetscType_Register(PETSC_AO_CLASSID,          AO)
  *     PyPetscType_Register(PETSC_DM_CLASSID,          DM)             # <<<<<<<<<<<<<<
  *     PyPetscType_Register(PETSC_PARTITIONER_CLASSID, Partitioner)
  *     return 0 # and we are done, enjoy !!
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(DM_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DM)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(DM_CLASSID, __pyx_ptype_8petsc4py_5PETSc_DM); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 411, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":411
+  /* "PETSc/PETSc.pyx":412
  *     PyPetscType_Register(PETSC_AO_CLASSID,          AO)
  *     PyPetscType_Register(PETSC_DM_CLASSID,          DM)
  *     PyPetscType_Register(PETSC_PARTITIONER_CLASSID, Partitioner)             # <<<<<<<<<<<<<<
  *     return 0 # and we are done, enjoy !!
  * 
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSCPARTITIONER_CLASSID, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Partitioner)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSCPARTITIONER_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Partitioner); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 412, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":412
+  /* "PETSc/PETSc.pyx":413
  *     PyPetscType_Register(PETSC_DM_CLASSID,          DM)
  *     PyPetscType_Register(PETSC_PARTITIONER_CLASSID, Partitioner)
  *     return 0 # and we are done, enjoy !!             # <<<<<<<<<<<<<<
@@ -234378,7 +236883,7 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":381
+  /* "PETSc/PETSc.pyx":382
  * """
  * 
  * cdef int register() except -1:             # <<<<<<<<<<<<<<
@@ -234395,7 +236900,7 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":416
+/* "PETSc/PETSc.pyx":417
  * # --------------------------------------------------------------------
  * 
  * def _initialize(args=None, comm=None):             # <<<<<<<<<<<<<<
@@ -234410,9 +236915,6 @@ static PyMethodDef __pyx_mdef_8petsc4py_5PETSc_1_initialize = {"_initialize", (P
 static PyObject *__pyx_pw_8petsc4py_5PETSc_1_initialize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_args = 0;
   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("_initialize (wrapper)", 0);
@@ -234444,7 +236946,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_1_initialize(PyObject *__pyx_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_initialize") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_initialize") < 0)) __PYX_ERR(11, 417, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -234459,7 +236961,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_1_initialize(PyObject *__pyx_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_initialize", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("_initialize", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 417, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -234479,48 +236981,45 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_initialize", 0);
 
-  /* "PETSc/PETSc.pyx":418
+  /* "PETSc/PETSc.pyx":419
  * def _initialize(args=None, comm=None):
  *     global tracebacklist
  *     Error._traceback_ = tracebacklist             # <<<<<<<<<<<<<<
  *     global PetscError
  *     PetscError = Error
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_Error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_Error); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 419, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_t_1, __pyx_n_s_traceback, __pyx_v_8petsc4py_5PETSc_tracebacklist) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_t_1, __pyx_n_s_traceback, __pyx_v_8petsc4py_5PETSc_tracebacklist) < 0) __PYX_ERR(11, 419, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":420
+  /* "PETSc/PETSc.pyx":421
  *     Error._traceback_ = tracebacklist
  *     global PetscError
  *     PetscError = Error             # <<<<<<<<<<<<<<
  *     #
  *     cdef int ready = initialize(args, comm)
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_Error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_Error); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 421, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_PetscError);
   __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_PetscError, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":422
+  /* "PETSc/PETSc.pyx":423
  *     PetscError = Error
  *     #
  *     cdef int ready = initialize(args, comm)             # <<<<<<<<<<<<<<
  *     if ready: register()
  *     #
  */
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_initialize(__pyx_v_args, __pyx_v_comm); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_initialize(__pyx_v_args, __pyx_v_comm); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 423, __pyx_L1_error)
   __pyx_v_ready = __pyx_t_2;
 
-  /* "PETSc/PETSc.pyx":423
+  /* "PETSc/PETSc.pyx":424
  *     #
  *     cdef int ready = initialize(args, comm)
  *     if ready: register()             # <<<<<<<<<<<<<<
@@ -234529,12 +237028,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
  */
   __pyx_t_3 = (__pyx_v_ready != 0);
   if (__pyx_t_3) {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_register(); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_register(); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 424, __pyx_L1_error)
   }
-  __pyx_L3:;
 
-  /* "PETSc/PETSc.pyx":426
+  /* "PETSc/PETSc.pyx":427
  *     #
  *     global __COMM_SELF__, __COMM_WORLD__
  *     __COMM_SELF__.comm  = PETSC_COMM_SELF             # <<<<<<<<<<<<<<
@@ -234543,7 +237040,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
  */
   __pyx_v_8petsc4py_5PETSc___COMM_SELF__->comm = PETSC_COMM_SELF;
 
-  /* "PETSc/PETSc.pyx":427
+  /* "PETSc/PETSc.pyx":428
  *     global __COMM_SELF__, __COMM_WORLD__
  *     __COMM_SELF__.comm  = PETSC_COMM_SELF
  *     __COMM_WORLD__.comm = PETSC_COMM_WORLD             # <<<<<<<<<<<<<<
@@ -234552,7 +237049,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
  */
   __pyx_v_8petsc4py_5PETSc___COMM_WORLD__->comm = PETSC_COMM_WORLD;
 
-  /* "PETSc/PETSc.pyx":430
+  /* "PETSc/PETSc.pyx":431
  *     #
  *     global PETSC_COMM_DEFAULT
  *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD             # <<<<<<<<<<<<<<
@@ -234561,7 +237058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
  */
   __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT = PETSC_COMM_WORLD;
 
-  /* "PETSc/PETSc.pyx":416
+  /* "PETSc/PETSc.pyx":417
  * # --------------------------------------------------------------------
  * 
  * def _initialize(args=None, comm=None):             # <<<<<<<<<<<<<<
@@ -234582,7 +237079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":432
+/* "PETSc/PETSc.pyx":433
  *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD
  * 
  * def _finalize():             # <<<<<<<<<<<<<<
@@ -234612,12 +237109,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
   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("_finalize", 0);
 
-  /* "PETSc/PETSc.pyx":433
+  /* "PETSc/PETSc.pyx":434
  * 
  * def _finalize():
  *     finalize()             # <<<<<<<<<<<<<<
@@ -234626,7 +237120,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  */
   __pyx_f_8petsc4py_5PETSc_finalize();
 
-  /* "PETSc/PETSc.pyx":436
+  /* "PETSc/PETSc.pyx":437
  *     #
  *     global __COMM_SELF__
  *     __COMM_SELF__.comm  = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -234635,7 +237129,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  */
   __pyx_v_8petsc4py_5PETSc___COMM_SELF__->comm = MPI_COMM_NULL;
 
-  /* "PETSc/PETSc.pyx":438
+  /* "PETSc/PETSc.pyx":439
  *     __COMM_SELF__.comm  = MPI_COMM_NULL
  *     global __COMM_WORLD__
  *     __COMM_WORLD__.comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -234644,7 +237138,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  */
   __pyx_v_8petsc4py_5PETSc___COMM_WORLD__->comm = MPI_COMM_NULL;
 
-  /* "PETSc/PETSc.pyx":441
+  /* "PETSc/PETSc.pyx":442
  *     #
  *     global PETSC_COMM_DEFAULT
  *     PETSC_COMM_DEFAULT = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -234653,7 +237147,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  */
   __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT = MPI_COMM_NULL;
 
-  /* "PETSc/PETSc.pyx":444
+  /* "PETSc/PETSc.pyx":445
  *     #
  *     global type_registry
  *     type_registry.clear()             # <<<<<<<<<<<<<<
@@ -234662,11 +237156,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_type_registry == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
-    {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(11, 445, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_type_registry); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_type_registry); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 445, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":446
+  /* "PETSc/PETSc.pyx":447
  *     type_registry.clear()
  *     global stage_registry
  *     stage_registry.clear()             # <<<<<<<<<<<<<<
@@ -234675,11 +237169,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_stage_registry == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
-    {__pyx_filename = __pyx_f[11]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(11, 447, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_stage_registry); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_stage_registry); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 447, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":448
+  /* "PETSc/PETSc.pyx":449
  *     stage_registry.clear()
  *     global class_registry
  *     class_registry.clear()             # <<<<<<<<<<<<<<
@@ -234688,24 +237182,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_class_registry == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
-    {__pyx_filename = __pyx_f[11]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(11, 449, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_class_registry); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_class_registry); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 449, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":450
+  /* "PETSc/PETSc.pyx":451
  *     class_registry.clear()
  *     global event_registry
  *     event_registry.clear()             # <<<<<<<<<<<<<<
+ *     global citations_registry
+ *     citations_registry.clear()
+ */
+  if (unlikely(__pyx_v_8petsc4py_5PETSc_event_registry == Py_None)) {
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
+    __PYX_ERR(11, 451, __pyx_L1_error)
+  }
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_event_registry); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 451, __pyx_L1_error)
+
+  /* "PETSc/PETSc.pyx":453
+ *     event_registry.clear()
+ *     global citations_registry
+ *     citations_registry.clear()             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (unlikely(__pyx_v_8petsc4py_5PETSc_event_registry == Py_None)) {
+  if (unlikely(__pyx_v_8petsc4py_5PETSc_citations_registry == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
-    {__pyx_filename = __pyx_f[11]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(11, 453, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_event_registry); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_citations_registry); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 453, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":432
+  /* "PETSc/PETSc.pyx":433
  *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD
  * 
  * def _finalize():             # <<<<<<<<<<<<<<
@@ -234803,9 +237310,9 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Comm[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_Comm[] = {
-  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_4Comm_size, 0, 0, 0},
-  {(char *)"rank", __pyx_getprop_8petsc4py_5PETSc_4Comm_rank, 0, 0, 0},
-  {(char *)"fortran", __pyx_getprop_8petsc4py_5PETSc_4Comm_fortran, 0, 0, 0},
+  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_4Comm_size, 0, (char *)0, 0},
+  {(char *)"rank", __pyx_getprop_8petsc4py_5PETSc_4Comm_rank, 0, (char *)0, 0},
+  {(char *)"fortran", __pyx_getprop_8petsc4py_5PETSc_4Comm_fortran, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -234882,8 +237389,9 @@ DL_EXPORT(PyTypeObject) PyPetscComm_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   &__pyx_tp_as_number_Comm, /*tp_as_number*/
@@ -235082,15 +237590,15 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Object[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_Object[] = {
-  {(char *)"type", __pyx_getprop_8petsc4py_5PETSc_6Object_type, __pyx_setprop_8petsc4py_5PETSc_6Object_type, 0, 0},
-  {(char *)"prefix", __pyx_getprop_8petsc4py_5PETSc_6Object_prefix, __pyx_setprop_8petsc4py_5PETSc_6Object_prefix, 0, 0},
-  {(char *)"comm", __pyx_getprop_8petsc4py_5PETSc_6Object_comm, 0, 0, 0},
-  {(char *)"name", __pyx_getprop_8petsc4py_5PETSc_6Object_name, __pyx_setprop_8petsc4py_5PETSc_6Object_name, 0, 0},
-  {(char *)"classid", __pyx_getprop_8petsc4py_5PETSc_6Object_classid, 0, 0, 0},
-  {(char *)"klass", __pyx_getprop_8petsc4py_5PETSc_6Object_klass, 0, 0, 0},
-  {(char *)"refcount", __pyx_getprop_8petsc4py_5PETSc_6Object_refcount, 0, 0, 0},
-  {(char *)"handle", __pyx_getprop_8petsc4py_5PETSc_6Object_handle, 0, 0, 0},
-  {(char *)"fortran", __pyx_getprop_8petsc4py_5PETSc_6Object_fortran, 0, 0, 0},
+  {(char *)"type", __pyx_getprop_8petsc4py_5PETSc_6Object_type, __pyx_setprop_8petsc4py_5PETSc_6Object_type, (char *)0, 0},
+  {(char *)"prefix", __pyx_getprop_8petsc4py_5PETSc_6Object_prefix, __pyx_setprop_8petsc4py_5PETSc_6Object_prefix, (char *)0, 0},
+  {(char *)"comm", __pyx_getprop_8petsc4py_5PETSc_6Object_comm, 0, (char *)0, 0},
+  {(char *)"name", __pyx_getprop_8petsc4py_5PETSc_6Object_name, __pyx_setprop_8petsc4py_5PETSc_6Object_name, (char *)0, 0},
+  {(char *)"classid", __pyx_getprop_8petsc4py_5PETSc_6Object_classid, 0, (char *)0, 0},
+  {(char *)"klass", __pyx_getprop_8petsc4py_5PETSc_6Object_klass, 0, (char *)0, 0},
+  {(char *)"refcount", __pyx_getprop_8petsc4py_5PETSc_6Object_refcount, 0, (char *)0, 0},
+  {(char *)"handle", __pyx_getprop_8petsc4py_5PETSc_6Object_handle, 0, (char *)0, 0},
+  {(char *)"fortran", __pyx_getprop_8petsc4py_5PETSc_6Object_fortran, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -235167,8 +237675,9 @@ DL_EXPORT(PyTypeObject) PyPetscObject_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   &__pyx_tp_as_number_Object, /*tp_as_number*/
@@ -235239,22 +237748,21 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Viewer[] = {
   {"createDraw", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_22createDraw},
   {"setType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_25setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_24setType},
   {"getType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_27getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_26getType},
-  {"setFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_29setFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_28setFormat},
-  {"getFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_31getFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_30getFormat},
-  {"pushFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_33pushFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_32pushFormat},
-  {"popFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_35popFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_34popFormat},
-  {"STDOUT", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDOUT, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_36STDOUT},
-  {"STDERR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_39STDERR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_38STDERR},
-  {"ASCII", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_41ASCII, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_40ASCII},
-  {"BINARY", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_43BINARY, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_42BINARY},
-  {"DRAW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_45DRAW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_44DRAW},
-  {"flush", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_47flush, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_46flush},
-  {"setFileMode", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_49setFileMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_48setFileMode},
-  {"getFileMode", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_51getFileMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_50getFileMode},
-  {"setFileName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_53setFileName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_52setFileName},
-  {"getFileName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_55getFileName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_54getFileName},
-  {"setDrawInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_57setDrawInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_56setDrawInfo},
-  {"clearDraw", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_59clearDraw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_58clearDraw},
+  {"getFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_29getFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_28getFormat},
+  {"pushFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_31pushFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_30pushFormat},
+  {"popFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_33popFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_32popFormat},
+  {"STDOUT", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDOUT, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_34STDOUT},
+  {"STDERR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDERR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_36STDERR},
+  {"ASCII", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_39ASCII, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_38ASCII},
+  {"BINARY", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_41BINARY, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_40BINARY},
+  {"DRAW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_43DRAW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_42DRAW},
+  {"flush", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_45flush, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_44flush},
+  {"setFileMode", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_47setFileMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_46setFileMode},
+  {"getFileMode", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_49getFileMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_48getFileMode},
+  {"setFileName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_51setFileName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_50setFileName},
+  {"getFileName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_53getFileName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_52getFileName},
+  {"setDrawInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_55setDrawInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_54setDrawInfo},
+  {"clearDraw", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_57clearDraw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_56clearDraw},
   {0, 0, 0, 0}
 };
 
@@ -235269,8 +237777,9 @@ DL_EXPORT(PyTypeObject) PyPetscViewer_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -235373,8 +237882,8 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Random[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_Random[] = {
-  {(char *)"seed", __pyx_getprop_8petsc4py_5PETSc_6Random_seed, __pyx_setprop_8petsc4py_5PETSc_6Random_seed, 0, 0},
-  {(char *)"interval", __pyx_getprop_8petsc4py_5PETSc_6Random_interval, __pyx_setprop_8petsc4py_5PETSc_6Random_interval, 0, 0},
+  {(char *)"seed", __pyx_getprop_8petsc4py_5PETSc_6Random_seed, __pyx_setprop_8petsc4py_5PETSc_6Random_seed, (char *)0, 0},
+  {(char *)"interval", __pyx_getprop_8petsc4py_5PETSc_6Random_interval, __pyx_setprop_8petsc4py_5PETSc_6Random_interval, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -235389,8 +237898,9 @@ DL_EXPORT(PyTypeObject) PyPetscRandom_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -235534,16 +238044,16 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_IS[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_IS[] = {
-  {(char *)"permutation", __pyx_getprop_8petsc4py_5PETSc_2IS_permutation, 0, 0, 0},
-  {(char *)"identity", __pyx_getprop_8petsc4py_5PETSc_2IS_identity, 0, 0, 0},
-  {(char *)"sorted", __pyx_getprop_8petsc4py_5PETSc_2IS_sorted, 0, 0, 0},
-  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_2IS_sizes, 0, 0, 0},
-  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_2IS_size, 0, 0, 0},
-  {(char *)"local_size", __pyx_getprop_8petsc4py_5PETSc_2IS_local_size, 0, 0, 0},
-  {(char *)"block_size", __pyx_getprop_8petsc4py_5PETSc_2IS_block_size, 0, 0, 0},
-  {(char *)"indices", __pyx_getprop_8petsc4py_5PETSc_2IS_indices, 0, 0, 0},
-  {(char *)"array", __pyx_getprop_8petsc4py_5PETSc_2IS_array, 0, 0, 0},
-  {(char *)"__array_interface__", __pyx_getprop_8petsc4py_5PETSc_2IS___array_interface__, 0, 0, 0},
+  {(char *)"permutation", __pyx_getprop_8petsc4py_5PETSc_2IS_permutation, 0, (char *)0, 0},
+  {(char *)"identity", __pyx_getprop_8petsc4py_5PETSc_2IS_identity, 0, (char *)0, 0},
+  {(char *)"sorted", __pyx_getprop_8petsc4py_5PETSc_2IS_sorted, 0, (char *)0, 0},
+  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_2IS_sizes, 0, (char *)0, 0},
+  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_2IS_size, 0, (char *)0, 0},
+  {(char *)"local_size", __pyx_getprop_8petsc4py_5PETSc_2IS_local_size, 0, (char *)0, 0},
+  {(char *)"block_size", __pyx_getprop_8petsc4py_5PETSc_2IS_block_size, 0, (char *)0, 0},
+  {(char *)"indices", __pyx_getprop_8petsc4py_5PETSc_2IS_indices, 0, (char *)0, 0},
+  {(char *)"array", __pyx_getprop_8petsc4py_5PETSc_2IS_array, 0, (char *)0, 0},
+  {(char *)"__array_interface__", __pyx_getprop_8petsc4py_5PETSc_2IS___array_interface__, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -235575,8 +238085,9 @@ DL_EXPORT(PyTypeObject) PyPetscIS_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -235679,12 +238190,12 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_LGMap[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_LGMap[] = {
-  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_5LGMap_size, 0, 0, 0},
-  {(char *)"block_size", __pyx_getprop_8petsc4py_5PETSc_5LGMap_block_size, 0, 0, 0},
-  {(char *)"indices", __pyx_getprop_8petsc4py_5PETSc_5LGMap_indices, 0, 0, 0},
-  {(char *)"block_indices", __pyx_getprop_8petsc4py_5PETSc_5LGMap_block_indices, 0, 0, 0},
-  {(char *)"info", __pyx_getprop_8petsc4py_5PETSc_5LGMap_info, 0, 0, 0},
-  {(char *)"block_info", __pyx_getprop_8petsc4py_5PETSc_5LGMap_block_info, 0, 0, 0},
+  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_5LGMap_size, 0, (char *)0, 0},
+  {(char *)"block_size", __pyx_getprop_8petsc4py_5PETSc_5LGMap_block_size, 0, (char *)0, 0},
+  {(char *)"indices", __pyx_getprop_8petsc4py_5PETSc_5LGMap_indices, 0, (char *)0, 0},
+  {(char *)"block_indices", __pyx_getprop_8petsc4py_5PETSc_5LGMap_block_indices, 0, (char *)0, 0},
+  {(char *)"info", __pyx_getprop_8petsc4py_5PETSc_5LGMap_info, 0, (char *)0, 0},
+  {(char *)"block_info", __pyx_getprop_8petsc4py_5PETSc_5LGMap_block_info, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -235699,8 +238210,9 @@ DL_EXPORT(PyTypeObject) PyPetscLGMap_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -235805,8 +238317,9 @@ DL_EXPORT(PyTypeObject) PyPetscSF_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -236003,98 +238516,100 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Vec[] = {
   {"restoreCUDAHandle", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_103restoreCUDAHandle, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle},
   {"duplicate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_105duplicate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_104duplicate},
   {"copy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_107copy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_106copy},
-  {"load", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_109load, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_108load},
-  {"equal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_111equal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_110equal},
-  {"dot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_113dot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_112dot},
-  {"dotBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_115dotBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_114dotBegin},
-  {"dotEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_117dotEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_116dotEnd},
-  {"tDot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_119tDot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_118tDot},
-  {"tDotBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_121tDotBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_120tDotBegin},
-  {"tDotEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_122tDotEnd},
-  {"mDot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_125mDot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_124mDot},
-  {"mDotBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_127mDotBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_126mDotBegin},
-  {"mDotEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_128mDotEnd},
-  {"mtDot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_131mtDot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_130mtDot},
-  {"mtDotBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDotBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_132mtDotBegin},
-  {"mtDotEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_134mtDotEnd},
-  {"norm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_137norm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_136norm},
-  {"normBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_139normBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_138normBegin},
-  {"normEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_141normEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_140normEnd},
-  {"sum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_143sum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_142sum},
-  {"min", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_145min, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_144min},
-  {"max", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_147max, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_146max},
-  {"normalize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_149normalize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_148normalize},
-  {"reciprocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_151reciprocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_150reciprocal},
-  {"exp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_153exp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_152exp},
-  {"log", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_155log, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_154log},
-  {"sqrtabs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_157sqrtabs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_156sqrtabs},
-  {"abs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_159abs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_158abs},
-  {"conjugate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_161conjugate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_160conjugate},
-  {"setRandom", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_163setRandom, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_162setRandom},
-  {"permute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_165permute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_164permute},
-  {"zeroEntries", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_167zeroEntries, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_166zeroEntries},
-  {"set", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_169set, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_168set},
-  {"isset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_171isset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_170isset},
-  {"scale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_173scale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_172scale},
-  {"shift", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_175shift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_174shift},
-  {"swap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_177swap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_176swap},
-  {"axpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_179axpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_178axpy},
-  {"isaxpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_181isaxpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_180isaxpy},
-  {"aypx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_183aypx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_182aypx},
-  {"axpby", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_185axpby, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_184axpby},
-  {"waxpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_187waxpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_186waxpy},
-  {"maxpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_189maxpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_188maxpy},
-  {"pointwiseMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_191pointwiseMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_190pointwiseMult},
-  {"pointwiseDivide", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_193pointwiseDivide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_192pointwiseDivide},
-  {"pointwiseMin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_194pointwiseMin},
-  {"pointwiseMax", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseMax, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_196pointwiseMax},
-  {"pointwiseMaxAbs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMaxAbs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_198pointwiseMaxAbs},
-  {"maxPointwiseDivide", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_201maxPointwiseDivide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_200maxPointwiseDivide},
-  {"getValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_203getValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_202getValue},
-  {"getValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_205getValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_204getValues},
-  {"setValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_207setValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_206setValue},
-  {"setValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_209setValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_208setValues},
-  {"setValuesBlocked", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_211setValuesBlocked, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_210setValuesBlocked},
-  {"setLGMap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_213setLGMap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_212setLGMap},
-  {"setValueLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_215setValueLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_214setValueLocal},
-  {"setValuesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_217setValuesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_216setValuesLocal},
-  {"setValuesBlockedLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_219setValuesBlockedLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_218setValuesBlockedLocal},
-  {"assemblyBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_221assemblyBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_220assemblyBegin},
-  {"assemblyEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_223assemblyEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_222assemblyEnd},
-  {"assemble", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_225assemble, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_224assemble},
-  {"strideScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_227strideScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_226strideScale},
-  {"strideSum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_229strideSum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_228strideSum},
-  {"strideMin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_231strideMin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_230strideMin},
-  {"strideMax", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_233strideMax, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_232strideMax},
-  {"strideNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_235strideNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_234strideNorm},
-  {"strideScatter", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_237strideScatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_236strideScatter},
-  {"strideGather", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_239strideGather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_238strideGather},
-  {"localForm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_241localForm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_240localForm},
-  {"ghostUpdateBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_243ghostUpdateBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_242ghostUpdateBegin},
-  {"ghostUpdateEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_245ghostUpdateEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_244ghostUpdateEnd},
-  {"ghostUpdate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_246ghostUpdate},
-  {"setMPIGhost", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_249setMPIGhost, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_248setMPIGhost},
-  {"getSubVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_251getSubVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_250getSubVector},
-  {"restoreSubVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_253restoreSubVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_252restoreSubVector},
-  {"getNestSubVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_255getNestSubVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_254getNestSubVecs},
-  {"setNestSubVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_257setNestSubVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_256setNestSubVecs},
+  {"chop", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_109chop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_108chop},
+  {"load", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_111load, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_110load},
+  {"equal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_113equal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_112equal},
+  {"dot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_115dot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_114dot},
+  {"dotBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_117dotBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_116dotBegin},
+  {"dotEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_119dotEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_118dotEnd},
+  {"tDot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_121tDot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_120tDot},
+  {"tDotBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_122tDotBegin},
+  {"tDotEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_125tDotEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_124tDotEnd},
+  {"mDot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_127mDot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_126mDot},
+  {"mDotBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_128mDotBegin},
+  {"mDotEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_131mDotEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_130mDotEnd},
+  {"mtDot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_132mtDot},
+  {"mtDotBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_134mtDotBegin},
+  {"mtDotEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_137mtDotEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_136mtDotEnd},
+  {"norm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_139norm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_138norm},
+  {"normBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_141normBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_140normBegin},
+  {"normEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_143normEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_142normEnd},
+  {"sum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_145sum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_144sum},
+  {"min", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_147min, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_146min},
+  {"max", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_149max, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_148max},
+  {"normalize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_151normalize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_150normalize},
+  {"reciprocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_153reciprocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_152reciprocal},
+  {"exp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_155exp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_154exp},
+  {"log", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_157log, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_156log},
+  {"sqrtabs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_159sqrtabs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_158sqrtabs},
+  {"abs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_161abs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_160abs},
+  {"conjugate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_163conjugate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_162conjugate},
+  {"setRandom", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_165setRandom, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_164setRandom},
+  {"permute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_167permute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_166permute},
+  {"zeroEntries", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_169zeroEntries, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_168zeroEntries},
+  {"set", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_171set, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_170set},
+  {"isset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_173isset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_172isset},
+  {"scale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_175scale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_174scale},
+  {"shift", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_177shift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_176shift},
+  {"chop", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_179chop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_178chop},
+  {"swap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_181swap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_180swap},
+  {"axpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_183axpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_182axpy},
+  {"isaxpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_185isaxpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_184isaxpy},
+  {"aypx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_187aypx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_186aypx},
+  {"axpby", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_189axpby, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_188axpby},
+  {"waxpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_191waxpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_190waxpy},
+  {"maxpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_193maxpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_192maxpy},
+  {"pointwiseMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_194pointwiseMult},
+  {"pointwiseDivide", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseDivide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_196pointwiseDivide},
+  {"pointwiseMin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_198pointwiseMin},
+  {"pointwiseMax", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_201pointwiseMax, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_200pointwiseMax},
+  {"pointwiseMaxAbs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_203pointwiseMaxAbs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_202pointwiseMaxAbs},
+  {"maxPointwiseDivide", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_205maxPointwiseDivide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_204maxPointwiseDivide},
+  {"getValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_207getValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_206getValue},
+  {"getValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_209getValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_208getValues},
+  {"setValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_211setValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_210setValue},
+  {"setValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_213setValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_212setValues},
+  {"setValuesBlocked", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_215setValuesBlocked, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_214setValuesBlocked},
+  {"setLGMap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_217setLGMap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_216setLGMap},
+  {"setValueLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_219setValueLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_218setValueLocal},
+  {"setValuesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_221setValuesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_220setValuesLocal},
+  {"setValuesBlockedLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesBlockedLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_222setValuesBlockedLocal},
+  {"assemblyBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_225assemblyBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_224assemblyBegin},
+  {"assemblyEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_227assemblyEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_226assemblyEnd},
+  {"assemble", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_229assemble, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_228assemble},
+  {"strideScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_231strideScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_230strideScale},
+  {"strideSum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_233strideSum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_232strideSum},
+  {"strideMin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_235strideMin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_234strideMin},
+  {"strideMax", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMax, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_236strideMax},
+  {"strideNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_239strideNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_238strideNorm},
+  {"strideScatter", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_241strideScatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_240strideScatter},
+  {"strideGather", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_243strideGather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_242strideGather},
+  {"localForm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_245localForm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_244localForm},
+  {"ghostUpdateBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdateBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_246ghostUpdateBegin},
+  {"ghostUpdateEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_248ghostUpdateEnd},
+  {"ghostUpdate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_250ghostUpdate},
+  {"setMPIGhost", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_253setMPIGhost, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_252setMPIGhost},
+  {"getSubVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_255getSubVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_254getSubVector},
+  {"restoreSubVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_257restoreSubVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_256restoreSubVector},
+  {"getNestSubVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_259getNestSubVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_258getNestSubVecs},
+  {"setNestSubVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_261setNestSubVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_260setNestSubVecs},
   {0, 0, 0, 0}
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_Vec[] = {
-  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_3Vec_sizes, __pyx_setprop_8petsc4py_5PETSc_3Vec_sizes, 0, 0},
-  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_3Vec_size, 0, 0, 0},
-  {(char *)"local_size", __pyx_getprop_8petsc4py_5PETSc_3Vec_local_size, 0, 0, 0},
-  {(char *)"block_size", __pyx_getprop_8petsc4py_5PETSc_3Vec_block_size, 0, 0, 0},
-  {(char *)"owner_range", __pyx_getprop_8petsc4py_5PETSc_3Vec_owner_range, 0, 0, 0},
-  {(char *)"owner_ranges", __pyx_getprop_8petsc4py_5PETSc_3Vec_owner_ranges, 0, 0, 0},
-  {(char *)"buffer_w", __pyx_getprop_8petsc4py_5PETSc_3Vec_buffer_w, 0, __pyx_k_Vec_buffer_writable, 0},
-  {(char *)"buffer_r", __pyx_getprop_8petsc4py_5PETSc_3Vec_buffer_r, 0, __pyx_k_Vec_buffer_read_only, 0},
-  {(char *)"array_w", __pyx_getprop_8petsc4py_5PETSc_3Vec_array_w, __pyx_setprop_8petsc4py_5PETSc_3Vec_array_w, __pyx_k_Vec_array_writable, 0},
-  {(char *)"array_r", __pyx_getprop_8petsc4py_5PETSc_3Vec_array_r, 0, __pyx_k_Vec_array_read_only, 0},
-  {(char *)"buffer", __pyx_getprop_8petsc4py_5PETSc_3Vec_buffer, 0, 0, 0},
-  {(char *)"array", __pyx_getprop_8petsc4py_5PETSc_3Vec_array, __pyx_setprop_8petsc4py_5PETSc_3Vec_array, 0, 0},
-  {(char *)"__array_interface__", __pyx_getprop_8petsc4py_5PETSc_3Vec___array_interface__, 0, 0, 0},
+  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_3Vec_sizes, __pyx_setprop_8petsc4py_5PETSc_3Vec_sizes, (char *)0, 0},
+  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_3Vec_size, 0, (char *)0, 0},
+  {(char *)"local_size", __pyx_getprop_8petsc4py_5PETSc_3Vec_local_size, 0, (char *)0, 0},
+  {(char *)"block_size", __pyx_getprop_8petsc4py_5PETSc_3Vec_block_size, 0, (char *)0, 0},
+  {(char *)"owner_range", __pyx_getprop_8petsc4py_5PETSc_3Vec_owner_range, 0, (char *)0, 0},
+  {(char *)"owner_ranges", __pyx_getprop_8petsc4py_5PETSc_3Vec_owner_ranges, 0, (char *)0, 0},
+  {(char *)"buffer_w", __pyx_getprop_8petsc4py_5PETSc_3Vec_buffer_w, 0, (char *)"Vec buffer (writable)", 0},
+  {(char *)"buffer_r", __pyx_getprop_8petsc4py_5PETSc_3Vec_buffer_r, 0, (char *)"Vec buffer (read-only)", 0},
+  {(char *)"array_w", __pyx_getprop_8petsc4py_5PETSc_3Vec_array_w, __pyx_setprop_8petsc4py_5PETSc_3Vec_array_w, (char *)"Vec array (writable)", 0},
+  {(char *)"array_r", __pyx_getprop_8petsc4py_5PETSc_3Vec_array_r, 0, (char *)"Vec array (read-only)", 0},
+  {(char *)"buffer", __pyx_getprop_8petsc4py_5PETSc_3Vec_buffer, 0, (char *)0, 0},
+  {(char *)"array", __pyx_getprop_8petsc4py_5PETSc_3Vec_array, __pyx_setprop_8petsc4py_5PETSc_3Vec_array, (char *)0, 0},
+  {(char *)"__array_interface__", __pyx_getprop_8petsc4py_5PETSc_3Vec___array_interface__, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -236211,8 +238726,9 @@ DL_EXPORT(PyTypeObject) PyPetscVec_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   &__pyx_tp_as_number_Vec, /*tp_as_number*/
@@ -236296,8 +238812,9 @@ DL_EXPORT(PyTypeObject) PyPetscScatter_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -236426,8 +238943,9 @@ DL_EXPORT(PyTypeObject) PyPetscSection_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -236602,134 +239120,145 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Mat[] = {
   {"getOwnershipRangeColumn", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_111getOwnershipRangeColumn, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn},
   {"getOwnershipRangesColumn", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_113getOwnershipRangesColumn, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn},
   {"getOwnershipIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_115getOwnershipIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_114getOwnershipIS},
-  {"duplicate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_117duplicate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_116duplicate},
-  {"copy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_119copy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_118copy},
-  {"load", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_121load, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_120load},
-  {"convert", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_123convert, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_122convert},
-  {"transpose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_125transpose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_124transpose},
-  {"realPart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_127realPart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_126realPart},
-  {"imagPart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_129imagPart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_128imagPart},
-  {"conjugate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_131conjugate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_130conjugate},
-  {"permute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_133permute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_132permute},
-  {"equal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_135equal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_134equal},
-  {"isTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_137isTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_136isTranspose},
-  {"isSymmetric", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_139isSymmetric, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_138isSymmetric},
-  {"isSymmetricKnown", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetricKnown, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_140isSymmetricKnown},
-  {"isHermitian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_143isHermitian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_142isHermitian},
-  {"isHermitianKnown", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitianKnown, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_144isHermitianKnown},
-  {"isStructurallySymmetric", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_147isStructurallySymmetric, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_146isStructurallySymmetric},
-  {"zeroEntries", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_149zeroEntries, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_148zeroEntries},
-  {"getValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_151getValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_150getValue},
-  {"getValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_153getValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_152getValues},
-  {"getValuesCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_155getValuesCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_154getValuesCSR},
-  {"getRow", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_157getRow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_156getRow},
-  {"getRowIJ", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_159getRowIJ, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_158getRowIJ},
-  {"getColumnIJ", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_161getColumnIJ, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_160getColumnIJ},
-  {"setValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_163setValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_162setValue},
-  {"setValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_165setValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_164setValues},
-  {"setValuesRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_167setValuesRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_166setValuesRCV},
-  {"setValuesIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_168setValuesIJV},
-  {"setValuesCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_170setValuesCSR},
-  {"setValuesBlocked", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesBlocked, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_172setValuesBlocked},
-  {"setValuesBlockedRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlockedRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_174setValuesBlockedRCV},
-  {"setValuesBlockedIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_176setValuesBlockedIJV},
-  {"setValuesBlockedCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_178setValuesBlockedCSR},
-  {"setLGMap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_181setLGMap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_180setLGMap},
-  {"setValueLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_183setValueLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_182setValueLocal},
-  {"setValuesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_185setValuesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_184setValuesLocal},
-  {"setValuesLocalRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocalRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_186setValuesLocalRCV},
-  {"setValuesLocalIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_188setValuesLocalIJV},
-  {"setValuesLocalCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_190setValuesLocalCSR},
-  {"setValuesBlockedLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesBlockedLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_192setValuesBlockedLocal},
-  {"setValuesBlockedLocalRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocalRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocalRCV},
-  {"setValuesBlockedLocalIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalIJV},
-  {"setValuesBlockedLocalCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalCSR},
-  {"setStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_201setStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_200setStencil},
-  {"setValueStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_203setValueStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_202setValueStencil},
-  {"setValueBlockedStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueBlockedStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_204setValueBlockedStencil},
-  {"zeroRows", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_207zeroRows, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_206zeroRows},
-  {"zeroRowsLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRowsLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_208zeroRowsLocal},
-  {"zeroRowsColumns", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsColumns, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_210zeroRowsColumns},
-  {"storeValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_213storeValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_212storeValues},
-  {"retrieveValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_215retrieveValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_214retrieveValues},
-  {"assemblyBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_217assemblyBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_216assemblyBegin},
-  {"assemblyEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_218assemblyEnd},
-  {"assemble", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_221assemble, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_220assemble},
-  {"isAssembled", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_223isAssembled, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_222isAssembled},
-  {"createVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_225createVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_224createVecs},
-  {"createVecRight", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecRight, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_226createVecRight},
-  {"createVecLeft", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecLeft, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_228createVecLeft},
-  {"getColumnVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_231getColumnVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_230getColumnVector},
-  {"getDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_233getDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_232getDiagonal},
-  {"getRowSum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_235getRowSum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_234getRowSum},
-  {"setDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_237setDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_236setDiagonal},
-  {"diagonalScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_239diagonalScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_238diagonalScale},
-  {"invertBlockDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_241invertBlockDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_240invertBlockDiagonal},
-  {"setNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_243setNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_242setNullSpace},
-  {"getNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_245getNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_244getNullSpace},
-  {"setNearNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_247setNearNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_246setNearNullSpace},
-  {"getNearNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_249getNearNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_248getNearNullSpace},
-  {"mult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_251mult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_250mult},
-  {"multAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_253multAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_252multAdd},
-  {"multTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_255multTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_254multTranspose},
-  {"multTransposeAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_257multTransposeAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_256multTransposeAdd},
-  {"multHermitian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_259multHermitian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_258multHermitian},
-  {"multHermitianAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_261multHermitianAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_260multHermitianAdd},
-  {"SOR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_263SOR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_262SOR},
-  {"getDiagonalBlock", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_265getDiagonalBlock, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_264getDiagonalBlock},
-  {"increaseOverlap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_267increaseOverlap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_266increaseOverlap},
-  {"getSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_269getSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_268getSubMatrix},
-  {"getLocalSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_271getLocalSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_270getLocalSubMatrix},
-  {"restoreLocalSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_273restoreLocalSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_272restoreLocalSubMatrix},
-  {"norm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_275norm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_274norm},
-  {"scale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_277scale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_276scale},
-  {"shift", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_279shift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_278shift},
-  {"chop", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_281chop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_280chop},
-  {"axpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_283axpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_282axpy},
-  {"aypx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_285aypx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_284aypx},
-  {"matMultSymbolic", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_287matMultSymbolic, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_286matMultSymbolic},
-  {"matMultNumeric", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_289matMultNumeric, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_288matMultNumeric},
-  {"matMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_291matMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_290matMult},
-  {"matTransposeMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_293matTransposeMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_292matTransposeMult},
-  {"transposeMatMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_295transposeMatMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_294transposeMatMult},
-  {"getOrdering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_297getOrdering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_296getOrdering},
-  {"reorderForNonzeroDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_299reorderForNonzeroDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_298reorderForNonzeroDiagonal},
-  {"factorLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_301factorLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_300factorLU},
-  {"factorSymbolicLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_303factorSymbolicLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_302factorSymbolicLU},
-  {"factorNumericLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_305factorNumericLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_304factorNumericLU},
-  {"factorILU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_307factorILU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_306factorILU},
-  {"factorSymbolicILU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicILU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_308factorSymbolicILU},
-  {"factorCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_311factorCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_310factorCholesky},
-  {"factorSymbolicCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_313factorSymbolicCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_312factorSymbolicCholesky},
-  {"factorNumericCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_315factorNumericCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_314factorNumericCholesky},
-  {"factorICC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_317factorICC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_316factorICC},
-  {"factorSymbolicICC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicICC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_318factorSymbolicICC},
-  {"getInertia", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_321getInertia, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_320getInertia},
-  {"setUnfactored", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_323setUnfactored, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_322setUnfactored},
-  {"solveForward", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_325solveForward, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_324solveForward},
-  {"solveBackward", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_327solveBackward, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_326solveBackward},
-  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_329solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_328solve},
-  {"solveTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_331solveTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_330solveTranspose},
-  {"solveAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_333solveAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_332solveAdd},
-  {"solveTransposeAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_335solveTransposeAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_334solveTransposeAdd},
-  {"matSolve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_337matSolve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_336matSolve},
-  {"getDenseArray", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_339getDenseArray, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_338getDenseArray},
-  {"getDenseLocalMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_341getDenseLocalMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_340getDenseLocalMatrix},
+  {"getInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_117getInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_116getInfo},
+  {"duplicate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_119duplicate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_118duplicate},
+  {"copy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_121copy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_120copy},
+  {"load", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_123load, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_122load},
+  {"convert", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_125convert, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_124convert},
+  {"transpose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_127transpose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_126transpose},
+  {"realPart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_129realPart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_128realPart},
+  {"imagPart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_131imagPart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_130imagPart},
+  {"conjugate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_133conjugate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_132conjugate},
+  {"permute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_135permute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_134permute},
+  {"equal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_137equal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_136equal},
+  {"isTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_139isTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_138isTranspose},
+  {"isSymmetric", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetric, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_140isSymmetric},
+  {"isSymmetricKnown", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_143isSymmetricKnown, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_142isSymmetricKnown},
+  {"isHermitian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_144isHermitian},
+  {"isHermitianKnown", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_147isHermitianKnown, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_146isHermitianKnown},
+  {"isStructurallySymmetric", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_149isStructurallySymmetric, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_148isStructurallySymmetric},
+  {"zeroEntries", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_151zeroEntries, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_150zeroEntries},
+  {"getValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_153getValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_152getValue},
+  {"getValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_155getValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_154getValues},
+  {"getValuesCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_157getValuesCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_156getValuesCSR},
+  {"getRow", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_159getRow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_158getRow},
+  {"getRowIJ", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_161getRowIJ, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_160getRowIJ},
+  {"getColumnIJ", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_163getColumnIJ, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_162getColumnIJ},
+  {"setValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_165setValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_164setValue},
+  {"setValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_167setValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_166setValues},
+  {"setValuesRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_168setValuesRCV},
+  {"setValuesIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_170setValuesIJV},
+  {"setValuesCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_172setValuesCSR},
+  {"setValuesBlocked", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlocked, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_174setValuesBlocked},
+  {"setValuesBlockedRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_176setValuesBlockedRCV},
+  {"setValuesBlockedIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_178setValuesBlockedIJV},
+  {"setValuesBlockedCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_181setValuesBlockedCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_180setValuesBlockedCSR},
+  {"setLGMap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_183setLGMap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_182setLGMap},
+  {"setValueLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_185setValueLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_184setValueLocal},
+  {"setValuesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_186setValuesLocal},
+  {"setValuesLocalRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_188setValuesLocalRCV},
+  {"setValuesLocalIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_190setValuesLocalIJV},
+  {"setValuesLocalCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_192setValuesLocalCSR},
+  {"setValuesBlockedLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocal},
+  {"setValuesBlockedLocalRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalRCV},
+  {"setValuesBlockedLocalIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalIJV},
+  {"setValuesBlockedLocalCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalCSR},
+  {"setStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_203setStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_202setStencil},
+  {"setValueStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_204setValueStencil},
+  {"setValueBlockedStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueBlockedStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_206setValueBlockedStencil},
+  {"zeroRows", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRows, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_208zeroRows},
+  {"zeroRowsLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_210zeroRowsLocal},
+  {"zeroRowsColumns", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsColumns, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_212zeroRowsColumns},
+  {"storeValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_215storeValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_214storeValues},
+  {"retrieveValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_217retrieveValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_216retrieveValues},
+  {"assemblyBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_218assemblyBegin},
+  {"assemblyEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_220assemblyEnd},
+  {"assemble", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_223assemble, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_222assemble},
+  {"isAssembled", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_225isAssembled, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_224isAssembled},
+  {"createVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_226createVecs},
+  {"createVecRight", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecRight, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_228createVecRight},
+  {"createVecLeft", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_231createVecLeft, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_230createVecLeft},
+  {"getColumnVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_233getColumnVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_232getColumnVector},
+  {"getRedundantMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_235getRedundantMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_234getRedundantMatrix},
+  {"getDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_237getDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_236getDiagonal},
+  {"getRowSum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_239getRowSum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_238getRowSum},
+  {"setDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_241setDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_240setDiagonal},
+  {"diagonalScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_243diagonalScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_242diagonalScale},
+  {"invertBlockDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_245invertBlockDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal},
+  {"setNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_247setNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_246setNullSpace},
+  {"getNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_249getNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_248getNullSpace},
+  {"setNearNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_251setNearNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_250setNearNullSpace},
+  {"getNearNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_253getNearNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_252getNearNullSpace},
+  {"mult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_255mult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_254mult},
+  {"multAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_257multAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_256multAdd},
+  {"multTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_259multTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_258multTranspose},
+  {"multTransposeAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_261multTransposeAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_260multTransposeAdd},
+  {"multHermitian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_263multHermitian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_262multHermitian},
+  {"multHermitianAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_265multHermitianAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_264multHermitianAdd},
+  {"SOR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_267SOR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_266SOR},
+  {"getDiagonalBlock", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_269getDiagonalBlock, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_268getDiagonalBlock},
+  {"increaseOverlap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_271increaseOverlap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_270increaseOverlap},
+  {"getSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_273getSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_272getSubMatrix},
+  {"getSubMatrices", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_275getSubMatrices, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_274getSubMatrices},
+  {"getLocalSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_277getLocalSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_276getLocalSubMatrix},
+  {"restoreLocalSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_279restoreLocalSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_278restoreLocalSubMatrix},
+  {"norm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_281norm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_280norm},
+  {"scale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_283scale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_282scale},
+  {"shift", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_285shift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_284shift},
+  {"chop", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_287chop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_286chop},
+  {"axpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_289axpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_288axpy},
+  {"aypx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_291aypx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_290aypx},
+  {"matMultSymbolic", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_293matMultSymbolic, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_292matMultSymbolic},
+  {"matMultNumeric", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_295matMultNumeric, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_294matMultNumeric},
+  {"matMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_297matMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_296matMult},
+  {"matTransposeMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_299matTransposeMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_298matTransposeMult},
+  {"transposeMatMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_301transposeMatMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_300transposeMatMult},
+  {"getOrdering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_303getOrdering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_302getOrdering},
+  {"reorderForNonzeroDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_305reorderForNonzeroDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_304reorderForNonzeroDiagonal},
+  {"factorLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_307factorLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_306factorLU},
+  {"factorSymbolicLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_308factorSymbolicLU},
+  {"factorNumericLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_311factorNumericLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_310factorNumericLU},
+  {"factorILU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_313factorILU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_312factorILU},
+  {"factorSymbolicILU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_315factorSymbolicILU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_314factorSymbolicILU},
+  {"factorCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_317factorCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_316factorCholesky},
+  {"factorSymbolicCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_318factorSymbolicCholesky},
+  {"factorNumericCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_321factorNumericCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_320factorNumericCholesky},
+  {"factorICC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_323factorICC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_322factorICC},
+  {"factorSymbolicICC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_325factorSymbolicICC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_324factorSymbolicICC},
+  {"getInertia", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_327getInertia, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_326getInertia},
+  {"setUnfactored", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_329setUnfactored, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_328setUnfactored},
+  {"setMumpsIcntl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_331setMumpsIcntl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_330setMumpsIcntl},
+  {"getMumpsIcntl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_333getMumpsIcntl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_332getMumpsIcntl},
+  {"setMumpsCntl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_335setMumpsCntl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_334setMumpsCntl},
+  {"getMumpsCntl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_337getMumpsCntl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_336getMumpsCntl},
+  {"getMumpsInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_339getMumpsInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_338getMumpsInfo},
+  {"getMumpsInfog", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_341getMumpsInfog, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_340getMumpsInfog},
+  {"getMumpsRinfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsRinfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_342getMumpsRinfo},
+  {"getMumpsRinfog", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_345getMumpsRinfog, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_344getMumpsRinfog},
+  {"solveForward", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_347solveForward, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_346solveForward},
+  {"solveBackward", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_349solveBackward, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_348solveBackward},
+  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_351solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_350solve},
+  {"solveTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_353solveTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_352solveTranspose},
+  {"solveAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_355solveAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_354solveAdd},
+  {"solveTransposeAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_357solveTransposeAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_356solveTransposeAdd},
+  {"matSolve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_359matSolve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_358matSolve},
+  {"getDenseArray", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_361getDenseArray, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_360getDenseArray},
+  {"getDenseLocalMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_363getDenseLocalMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix},
   {0, 0, 0, 0}
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_Mat[] = {
-  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_3Mat_sizes, __pyx_setprop_8petsc4py_5PETSc_3Mat_sizes, 0, 0},
-  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_3Mat_size, 0, 0, 0},
-  {(char *)"local_size", __pyx_getprop_8petsc4py_5PETSc_3Mat_local_size, 0, 0, 0},
-  {(char *)"block_size", __pyx_getprop_8petsc4py_5PETSc_3Mat_block_size, 0, 0, 0},
-  {(char *)"block_sizes", __pyx_getprop_8petsc4py_5PETSc_3Mat_block_sizes, 0, 0, 0},
-  {(char *)"owner_range", __pyx_getprop_8petsc4py_5PETSc_3Mat_owner_range, 0, 0, 0},
-  {(char *)"owner_ranges", __pyx_getprop_8petsc4py_5PETSc_3Mat_owner_ranges, 0, 0, 0},
-  {(char *)"assembled", __pyx_getprop_8petsc4py_5PETSc_3Mat_assembled, 0, 0, 0},
-  {(char *)"symmetric", __pyx_getprop_8petsc4py_5PETSc_3Mat_symmetric, 0, 0, 0},
-  {(char *)"hermitian", __pyx_getprop_8petsc4py_5PETSc_3Mat_hermitian, 0, 0, 0},
-  {(char *)"structsymm", __pyx_getprop_8petsc4py_5PETSc_3Mat_structsymm, 0, 0, 0},
+  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_3Mat_sizes, __pyx_setprop_8petsc4py_5PETSc_3Mat_sizes, (char *)0, 0},
+  {(char *)"size", __pyx_getprop_8petsc4py_5PETSc_3Mat_size, 0, (char *)0, 0},
+  {(char *)"local_size", __pyx_getprop_8petsc4py_5PETSc_3Mat_local_size, 0, (char *)0, 0},
+  {(char *)"block_size", __pyx_getprop_8petsc4py_5PETSc_3Mat_block_size, 0, (char *)0, 0},
+  {(char *)"block_sizes", __pyx_getprop_8petsc4py_5PETSc_3Mat_block_sizes, 0, (char *)0, 0},
+  {(char *)"owner_range", __pyx_getprop_8petsc4py_5PETSc_3Mat_owner_range, 0, (char *)0, 0},
+  {(char *)"owner_ranges", __pyx_getprop_8petsc4py_5PETSc_3Mat_owner_ranges, 0, (char *)0, 0},
+  {(char *)"assembled", __pyx_getprop_8petsc4py_5PETSc_3Mat_assembled, 0, (char *)0, 0},
+  {(char *)"symmetric", __pyx_getprop_8petsc4py_5PETSc_3Mat_symmetric, 0, (char *)0, 0},
+  {(char *)"hermitian", __pyx_getprop_8petsc4py_5PETSc_3Mat_hermitian, 0, (char *)0, 0},
+  {(char *)"structsymm", __pyx_getprop_8petsc4py_5PETSc_3Mat_structsymm, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -236829,8 +239358,9 @@ DL_EXPORT(PyTypeObject) PyPetscMat_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   &__pyx_tp_as_number_Mat, /*tp_as_number*/
@@ -236912,8 +239442,9 @@ DL_EXPORT(PyTypeObject) PyPetscNullSpace_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -237007,39 +239538,48 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_PC[] = {
   {"setGAMGType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_69setGAMGType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_68setGAMGType},
   {"setGAMGLevels", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_71setGAMGLevels, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_70setGAMGLevels},
   {"setGAMGSmooths", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_73setGAMGSmooths, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_72setGAMGSmooths},
-  {"setFactorSolverPackage", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_75setFactorSolverPackage, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_74setFactorSolverPackage},
-  {"getFactorSolverPackage", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_77getFactorSolverPackage, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_76getFactorSolverPackage},
-  {"setFactorOrdering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_79setFactorOrdering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_78setFactorOrdering},
-  {"setFactorPivot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_81setFactorPivot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_80setFactorPivot},
-  {"setFactorShift", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_83setFactorShift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_82setFactorShift},
-  {"setFactorLevels", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_85setFactorLevels, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_84setFactorLevels},
-  {"getFactorMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_87getFactorMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_86getFactorMatrix},
-  {"setFieldSplitType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_89setFieldSplitType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_88setFieldSplitType},
-  {"setFieldSplitIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_91setFieldSplitIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_90setFieldSplitIS},
-  {"setFieldSplitFields", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_93setFieldSplitFields, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_92setFieldSplitFields},
-  {"getFieldSplitSubKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_95getFieldSplitSubKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_94getFieldSplitSubKSP},
-  {"setFieldSplitSchurFactType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_97setFieldSplitSchurFactType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_96setFieldSplitSchurFactType},
-  {"setFieldSplitSchurPreType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_99setFieldSplitSchurPreType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_98setFieldSplitSchurPreType},
-  {"setReusePreconditioner", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_101setReusePreconditioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_100setReusePreconditioner},
-  {"setCompositeType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_103setCompositeType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_102setCompositeType},
-  {"getCompositePC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_105getCompositePC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_104getCompositePC},
-  {"addCompositePC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_107addCompositePC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_106addCompositePC},
-  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_109getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_108getKSP},
-  {"getMGLevels", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_111getMGLevels, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_110getMGLevels},
-  {"getMGCoarseSolve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_113getMGCoarseSolve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_112getMGCoarseSolve},
-  {"setMGInterpolation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_115setMGInterpolation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_114setMGInterpolation},
-  {"getMGInterpolation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_117getMGInterpolation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_116getMGInterpolation},
-  {"setMGRestriction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_119setMGRestriction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_118setMGRestriction},
-  {"getMGRestriction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_121getMGRestriction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_120getMGRestriction},
-  {"setMGRScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_123setMGRScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_122setMGRScale},
-  {"getMGRScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_125getMGRScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_124getMGRScale},
-  {"getMGSmoother", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_127getMGSmoother, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_126getMGSmoother},
-  {"getMGSmootherDown", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_129getMGSmootherDown, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_128getMGSmootherDown},
-  {"getMGSmootherUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_131getMGSmootherUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_130getMGSmootherUp},
-  {"setMGCyclesOnLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_133setMGCyclesOnLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_132setMGCyclesOnLevel},
-  {"setMGRhs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_135setMGRhs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_134setMGRhs},
-  {"setMGX", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_137setMGX, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_136setMGX},
-  {"setMGR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_139setMGR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_138setMGR},
+  {"getHYPREType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_75getHYPREType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_74getHYPREType},
+  {"setHYPREType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_77setHYPREType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_76setHYPREType},
+  {"setHYPREDiscreteCurl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_79setHYPREDiscreteCurl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_78setHYPREDiscreteCurl},
+  {"setHYPREDiscreteGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_81setHYPREDiscreteGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_80setHYPREDiscreteGradient},
+  {"setHYPRESetAlphaPoissonMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_83setHYPRESetAlphaPoissonMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_82setHYPRESetAlphaPoissonMatrix},
+  {"setHYPRESetBetaPoissonMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_85setHYPRESetBetaPoissonMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix},
+  {"setHYPRESetEdgeConstantVectors", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_87setHYPRESetEdgeConstantVectors, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_86setHYPRESetEdgeConstantVectors},
+  {"setFactorSolverPackage", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_89setFactorSolverPackage, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_88setFactorSolverPackage},
+  {"getFactorSolverPackage", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_91getFactorSolverPackage, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_90getFactorSolverPackage},
+  {"setFactorOrdering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_93setFactorOrdering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_92setFactorOrdering},
+  {"setFactorPivot", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_95setFactorPivot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_94setFactorPivot},
+  {"setFactorShift", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_97setFactorShift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_96setFactorShift},
+  {"setFactorLevels", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_99setFactorLevels, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_98setFactorLevels},
+  {"getFactorMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_101getFactorMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_100getFactorMatrix},
+  {"setFieldSplitType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_103setFieldSplitType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_102setFieldSplitType},
+  {"setFieldSplitIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_105setFieldSplitIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_104setFieldSplitIS},
+  {"setFieldSplitFields", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_107setFieldSplitFields, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_106setFieldSplitFields},
+  {"getFieldSplitSubKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_109getFieldSplitSubKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP},
+  {"setFieldSplitSchurFactType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_111setFieldSplitSchurFactType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_110setFieldSplitSchurFactType},
+  {"setFieldSplitSchurPreType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_113setFieldSplitSchurPreType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType},
+  {"setReusePreconditioner", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_115setReusePreconditioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_114setReusePreconditioner},
+  {"setCompositeType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_117setCompositeType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_116setCompositeType},
+  {"getCompositePC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_119getCompositePC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_118getCompositePC},
+  {"addCompositePC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_121addCompositePC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_120addCompositePC},
+  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_123getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_122getKSP},
+  {"getMGType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_125getMGType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_124getMGType},
+  {"setMGType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_127setMGType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_126setMGType},
+  {"getMGLevels", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_129getMGLevels, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_128getMGLevels},
+  {"getMGCoarseSolve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_131getMGCoarseSolve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_130getMGCoarseSolve},
+  {"setMGInterpolation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_133setMGInterpolation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_132setMGInterpolation},
+  {"getMGInterpolation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_135getMGInterpolation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_134getMGInterpolation},
+  {"setMGRestriction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_137setMGRestriction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_136setMGRestriction},
+  {"getMGRestriction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_139getMGRestriction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_138getMGRestriction},
+  {"setMGRScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_141setMGRScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_140setMGRScale},
+  {"getMGRScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_143getMGRScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_142getMGRScale},
+  {"getMGSmoother", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_145getMGSmoother, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_144getMGSmoother},
+  {"getMGSmootherDown", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_147getMGSmootherDown, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_146getMGSmootherDown},
+  {"getMGSmootherUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_149getMGSmootherUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_148getMGSmootherUp},
+  {"setMGCyclesOnLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_151setMGCyclesOnLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_150setMGCyclesOnLevel},
+  {"setMGRhs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_153setMGRhs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_152setMGRhs},
+  {"setMGX", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_155setMGX, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_154setMGX},
+  {"setMGR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_157setMGR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_156setMGR},
   {0, 0, 0, 0}
 };
 
@@ -237054,8 +239594,9 @@ DL_EXPORT(PyTypeObject) PyPetscPC_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -237345,84 +239886,86 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_KSP[] = {
   {"getDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_25getDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_24getDM},
   {"setDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_27setDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_26setDM},
   {"setDMActive", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_29setDMActive, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_28setDMActive},
-  {"setOperators", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_31setOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_30setOperators},
-  {"getOperators", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_33getOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_32getOperators},
-  {"setPC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_35setPC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_34setPC},
-  {"getPC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_37getPC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_36getPC},
-  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_39setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_38setTolerances},
-  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_41getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_40getTolerances},
-  {"setConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_43setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_42setConvergenceTest},
-  {"getConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_45getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_44getConvergenceTest},
-  {"callConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_47callConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_46callConvergenceTest},
-  {"setConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_49setConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_48setConvergenceHistory},
-  {"getConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_51getConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_50getConvergenceHistory},
-  {"logConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_53logConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_52logConvergenceHistory},
-  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_55setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_54setMonitor},
-  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_57getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_56getMonitor},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_59cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_58cancelMonitor},
-  {"monitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_61monitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_60monitor},
-  {"setPCSide", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_63setPCSide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_62setPCSide},
-  {"getPCSide", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_65getPCSide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_64getPCSide},
-  {"setNormType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_67setNormType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_66setNormType},
-  {"getNormType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_69getNormType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_68getNormType},
-  {"setComputeEigenvalues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_71setComputeEigenvalues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_70setComputeEigenvalues},
-  {"getComputeEigenvalues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_73getComputeEigenvalues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_72getComputeEigenvalues},
-  {"setComputeSingularValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeSingularValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_74setComputeSingularValues},
-  {"getComputeSingularValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_77getComputeSingularValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_76getComputeSingularValues},
-  {"setInitialGuessNonzero", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_79setInitialGuessNonzero, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_78setInitialGuessNonzero},
-  {"getInitialGuessNonzero", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_81getInitialGuessNonzero, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_80getInitialGuessNonzero},
-  {"setInitialGuessKnoll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessKnoll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_82setInitialGuessKnoll},
-  {"getInitialGuessKnoll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_85getInitialGuessKnoll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_84getInitialGuessKnoll},
-  {"setUseFischerGuess", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_87setUseFischerGuess, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_86setUseFischerGuess},
-  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_89setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_88setUp},
-  {"reset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_91reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_90reset},
-  {"setUpOnBlocks", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_93setUpOnBlocks, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_92setUpOnBlocks},
-  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_95solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_94solve},
-  {"solveTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_97solveTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_96solveTranspose},
-  {"setIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_99setIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_98setIterationNumber},
-  {"getIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_101getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_100getIterationNumber},
-  {"setResidualNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_103setResidualNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_102setResidualNorm},
-  {"getResidualNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_105getResidualNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_104getResidualNorm},
-  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_107setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_106setConvergedReason},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_109getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_108getConvergedReason},
-  {"getRhs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_111getRhs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_110getRhs},
-  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_113getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_112getSolution},
-  {"getWorkVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_115getWorkVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_114getWorkVecs},
-  {"buildSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_117buildSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_116buildSolution},
-  {"buildResidual", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_119buildResidual, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_118buildResidual},
-  {"computeEigenvalues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_121computeEigenvalues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_120computeEigenvalues},
-  {"computeExtremeSingularValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_123computeExtremeSingularValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_122computeExtremeSingularValues},
-  {"setGMRESRestart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_125setGMRESRestart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_124setGMRESRestart},
-  {"createPython", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_127createPython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_126createPython},
-  {"setPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_129setPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_128setPythonContext},
-  {"getPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_131getPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_130getPythonContext},
-  {"setPythonType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_132setPythonType},
+  {"setComputeRHS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_31setComputeRHS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_30setComputeRHS},
+  {"setComputeOperators", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_33setComputeOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_32setComputeOperators},
+  {"setOperators", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_35setOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_34setOperators},
+  {"getOperators", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_37getOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_36getOperators},
+  {"setPC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_39setPC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_38setPC},
+  {"getPC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_41getPC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_40getPC},
+  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_43setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_42setTolerances},
+  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_45getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_44getTolerances},
+  {"setConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_47setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_46setConvergenceTest},
+  {"getConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_49getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_48getConvergenceTest},
+  {"callConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_51callConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_50callConvergenceTest},
+  {"setConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_53setConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_52setConvergenceHistory},
+  {"getConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_55getConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_54getConvergenceHistory},
+  {"logConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_57logConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_56logConvergenceHistory},
+  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_59setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_58setMonitor},
+  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_61getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_60getMonitor},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_63cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_62cancelMonitor},
+  {"monitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_65monitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_64monitor},
+  {"setPCSide", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_67setPCSide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_66setPCSide},
+  {"getPCSide", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_69getPCSide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_68getPCSide},
+  {"setNormType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_71setNormType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_70setNormType},
+  {"getNormType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_73getNormType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_72getNormType},
+  {"setComputeEigenvalues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeEigenvalues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues},
+  {"getComputeEigenvalues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_77getComputeEigenvalues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_76getComputeEigenvalues},
+  {"setComputeSingularValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_79setComputeSingularValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_78setComputeSingularValues},
+  {"getComputeSingularValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_81getComputeSingularValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_80getComputeSingularValues},
+  {"setInitialGuessNonzero", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessNonzero, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero},
+  {"getInitialGuessNonzero", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_85getInitialGuessNonzero, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_84getInitialGuessNonzero},
+  {"setInitialGuessKnoll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_87setInitialGuessKnoll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll},
+  {"getInitialGuessKnoll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_89getInitialGuessKnoll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_88getInitialGuessKnoll},
+  {"setUseFischerGuess", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_91setUseFischerGuess, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_90setUseFischerGuess},
+  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_93setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_92setUp},
+  {"reset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_95reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_94reset},
+  {"setUpOnBlocks", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_97setUpOnBlocks, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_96setUpOnBlocks},
+  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_99solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_98solve},
+  {"solveTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_101solveTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_100solveTranspose},
+  {"setIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_103setIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_102setIterationNumber},
+  {"getIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_105getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_104getIterationNumber},
+  {"setResidualNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_107setResidualNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_106setResidualNorm},
+  {"getResidualNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_109getResidualNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_108getResidualNorm},
+  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_111setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_110setConvergedReason},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_113getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_112getConvergedReason},
+  {"getRhs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_115getRhs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_114getRhs},
+  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_117getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_116getSolution},
+  {"getWorkVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_119getWorkVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_118getWorkVecs},
+  {"buildSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_121buildSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_120buildSolution},
+  {"buildResidual", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_123buildResidual, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_122buildResidual},
+  {"computeEigenvalues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_125computeEigenvalues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_124computeEigenvalues},
+  {"computeExtremeSingularValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_127computeExtremeSingularValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues},
+  {"setGMRESRestart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_129setGMRESRestart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_128setGMRESRestart},
+  {"createPython", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_131createPython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_130createPython},
+  {"setPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_132setPythonContext},
+  {"getPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_135getPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_134getPythonContext},
+  {"setPythonType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3KSP_137setPythonType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3KSP_136setPythonType},
   {0, 0, 0, 0}
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_KSP[] = {
-  {(char *)"appctx", __pyx_getprop_8petsc4py_5PETSc_3KSP_appctx, __pyx_setprop_8petsc4py_5PETSc_3KSP_appctx, 0, 0},
-  {(char *)"dm", __pyx_getprop_8petsc4py_5PETSc_3KSP_dm, __pyx_setprop_8petsc4py_5PETSc_3KSP_dm, 0, 0},
-  {(char *)"vec_sol", __pyx_getprop_8petsc4py_5PETSc_3KSP_vec_sol, 0, 0, 0},
-  {(char *)"vec_rhs", __pyx_getprop_8petsc4py_5PETSc_3KSP_vec_rhs, 0, 0, 0},
-  {(char *)"mat_op", __pyx_getprop_8petsc4py_5PETSc_3KSP_mat_op, 0, 0, 0},
-  {(char *)"mat_pc", __pyx_getprop_8petsc4py_5PETSc_3KSP_mat_pc, 0, 0, 0},
-  {(char *)"guess_nonzero", __pyx_getprop_8petsc4py_5PETSc_3KSP_guess_nonzero, __pyx_setprop_8petsc4py_5PETSc_3KSP_guess_nonzero, 0, 0},
-  {(char *)"guess_knoll", __pyx_getprop_8petsc4py_5PETSc_3KSP_guess_knoll, __pyx_setprop_8petsc4py_5PETSc_3KSP_guess_knoll, 0, 0},
-  {(char *)"pc", __pyx_getprop_8petsc4py_5PETSc_3KSP_pc, 0, 0, 0},
-  {(char *)"pc_side", __pyx_getprop_8petsc4py_5PETSc_3KSP_pc_side, __pyx_setprop_8petsc4py_5PETSc_3KSP_pc_side, 0, 0},
-  {(char *)"norm_type", __pyx_getprop_8petsc4py_5PETSc_3KSP_norm_type, __pyx_setprop_8petsc4py_5PETSc_3KSP_norm_type, 0, 0},
-  {(char *)"rtol", __pyx_getprop_8petsc4py_5PETSc_3KSP_rtol, __pyx_setprop_8petsc4py_5PETSc_3KSP_rtol, 0, 0},
-  {(char *)"atol", __pyx_getprop_8petsc4py_5PETSc_3KSP_atol, __pyx_setprop_8petsc4py_5PETSc_3KSP_atol, 0, 0},
-  {(char *)"divtol", __pyx_getprop_8petsc4py_5PETSc_3KSP_divtol, __pyx_setprop_8petsc4py_5PETSc_3KSP_divtol, 0, 0},
-  {(char *)"max_it", __pyx_getprop_8petsc4py_5PETSc_3KSP_max_it, __pyx_setprop_8petsc4py_5PETSc_3KSP_max_it, 0, 0},
-  {(char *)"its", __pyx_getprop_8petsc4py_5PETSc_3KSP_its, __pyx_setprop_8petsc4py_5PETSc_3KSP_its, 0, 0},
-  {(char *)"norm", __pyx_getprop_8petsc4py_5PETSc_3KSP_norm, __pyx_setprop_8petsc4py_5PETSc_3KSP_norm, 0, 0},
-  {(char *)"history", __pyx_getprop_8petsc4py_5PETSc_3KSP_history, 0, 0, 0},
-  {(char *)"reason", __pyx_getprop_8petsc4py_5PETSc_3KSP_reason, __pyx_setprop_8petsc4py_5PETSc_3KSP_reason, 0, 0},
-  {(char *)"iterating", __pyx_getprop_8petsc4py_5PETSc_3KSP_iterating, 0, 0, 0},
-  {(char *)"converged", __pyx_getprop_8petsc4py_5PETSc_3KSP_converged, 0, 0, 0},
-  {(char *)"diverged", __pyx_getprop_8petsc4py_5PETSc_3KSP_diverged, 0, 0, 0},
+  {(char *)"appctx", __pyx_getprop_8petsc4py_5PETSc_3KSP_appctx, __pyx_setprop_8petsc4py_5PETSc_3KSP_appctx, (char *)0, 0},
+  {(char *)"dm", __pyx_getprop_8petsc4py_5PETSc_3KSP_dm, __pyx_setprop_8petsc4py_5PETSc_3KSP_dm, (char *)0, 0},
+  {(char *)"vec_sol", __pyx_getprop_8petsc4py_5PETSc_3KSP_vec_sol, 0, (char *)0, 0},
+  {(char *)"vec_rhs", __pyx_getprop_8petsc4py_5PETSc_3KSP_vec_rhs, 0, (char *)0, 0},
+  {(char *)"mat_op", __pyx_getprop_8petsc4py_5PETSc_3KSP_mat_op, 0, (char *)0, 0},
+  {(char *)"mat_pc", __pyx_getprop_8petsc4py_5PETSc_3KSP_mat_pc, 0, (char *)0, 0},
+  {(char *)"guess_nonzero", __pyx_getprop_8petsc4py_5PETSc_3KSP_guess_nonzero, __pyx_setprop_8petsc4py_5PETSc_3KSP_guess_nonzero, (char *)0, 0},
+  {(char *)"guess_knoll", __pyx_getprop_8petsc4py_5PETSc_3KSP_guess_knoll, __pyx_setprop_8petsc4py_5PETSc_3KSP_guess_knoll, (char *)0, 0},
+  {(char *)"pc", __pyx_getprop_8petsc4py_5PETSc_3KSP_pc, 0, (char *)0, 0},
+  {(char *)"pc_side", __pyx_getprop_8petsc4py_5PETSc_3KSP_pc_side, __pyx_setprop_8petsc4py_5PETSc_3KSP_pc_side, (char *)0, 0},
+  {(char *)"norm_type", __pyx_getprop_8petsc4py_5PETSc_3KSP_norm_type, __pyx_setprop_8petsc4py_5PETSc_3KSP_norm_type, (char *)0, 0},
+  {(char *)"rtol", __pyx_getprop_8petsc4py_5PETSc_3KSP_rtol, __pyx_setprop_8petsc4py_5PETSc_3KSP_rtol, (char *)0, 0},
+  {(char *)"atol", __pyx_getprop_8petsc4py_5PETSc_3KSP_atol, __pyx_setprop_8petsc4py_5PETSc_3KSP_atol, (char *)0, 0},
+  {(char *)"divtol", __pyx_getprop_8petsc4py_5PETSc_3KSP_divtol, __pyx_setprop_8petsc4py_5PETSc_3KSP_divtol, (char *)0, 0},
+  {(char *)"max_it", __pyx_getprop_8petsc4py_5PETSc_3KSP_max_it, __pyx_setprop_8petsc4py_5PETSc_3KSP_max_it, (char *)0, 0},
+  {(char *)"its", __pyx_getprop_8petsc4py_5PETSc_3KSP_its, __pyx_setprop_8petsc4py_5PETSc_3KSP_its, (char *)0, 0},
+  {(char *)"norm", __pyx_getprop_8petsc4py_5PETSc_3KSP_norm, __pyx_setprop_8petsc4py_5PETSc_3KSP_norm, (char *)0, 0},
+  {(char *)"history", __pyx_getprop_8petsc4py_5PETSc_3KSP_history, 0, (char *)0, 0},
+  {(char *)"reason", __pyx_getprop_8petsc4py_5PETSc_3KSP_reason, __pyx_setprop_8petsc4py_5PETSc_3KSP_reason, (char *)0, 0},
+  {(char *)"iterating", __pyx_getprop_8petsc4py_5PETSc_3KSP_iterating, 0, (char *)0, 0},
+  {(char *)"converged", __pyx_getprop_8petsc4py_5PETSc_3KSP_converged, 0, (char *)0, 0},
+  {(char *)"diverged", __pyx_getprop_8petsc4py_5PETSc_3KSP_diverged, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -237437,8 +239980,9 @@ DL_EXPORT(PyTypeObject) PyPetscKSP_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -237821,27 +240365,27 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_SNES[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_SNES[] = {
-  {(char *)"appctx", __pyx_getprop_8petsc4py_5PETSc_4SNES_appctx, __pyx_setprop_8petsc4py_5PETSc_4SNES_appctx, 0, 0},
-  {(char *)"dm", __pyx_getprop_8petsc4py_5PETSc_4SNES_dm, __pyx_setprop_8petsc4py_5PETSc_4SNES_dm, 0, 0},
-  {(char *)"npc", __pyx_getprop_8petsc4py_5PETSc_4SNES_npc, __pyx_setprop_8petsc4py_5PETSc_4SNES_npc, 0, 0},
-  {(char *)"vec_sol", __pyx_getprop_8petsc4py_5PETSc_4SNES_vec_sol, 0, 0, 0},
-  {(char *)"vec_upd", __pyx_getprop_8petsc4py_5PETSc_4SNES_vec_upd, 0, 0, 0},
-  {(char *)"vec_rhs", __pyx_getprop_8petsc4py_5PETSc_4SNES_vec_rhs, 0, 0, 0},
-  {(char *)"ksp", __pyx_getprop_8petsc4py_5PETSc_4SNES_ksp, __pyx_setprop_8petsc4py_5PETSc_4SNES_ksp, 0, 0},
-  {(char *)"use_ew", __pyx_getprop_8petsc4py_5PETSc_4SNES_use_ew, __pyx_setprop_8petsc4py_5PETSc_4SNES_use_ew, 0, 0},
-  {(char *)"rtol", __pyx_getprop_8petsc4py_5PETSc_4SNES_rtol, __pyx_setprop_8petsc4py_5PETSc_4SNES_rtol, 0, 0},
-  {(char *)"atol", __pyx_getprop_8petsc4py_5PETSc_4SNES_atol, __pyx_setprop_8petsc4py_5PETSc_4SNES_atol, 0, 0},
-  {(char *)"stol", __pyx_getprop_8petsc4py_5PETSc_4SNES_stol, __pyx_setprop_8petsc4py_5PETSc_4SNES_stol, 0, 0},
-  {(char *)"max_it", __pyx_getprop_8petsc4py_5PETSc_4SNES_max_it, __pyx_setprop_8petsc4py_5PETSc_4SNES_max_it, 0, 0},
-  {(char *)"max_funcs", __pyx_getprop_8petsc4py_5PETSc_4SNES_max_funcs, __pyx_setprop_8petsc4py_5PETSc_4SNES_max_funcs, 0, 0},
-  {(char *)"its", __pyx_getprop_8petsc4py_5PETSc_4SNES_its, __pyx_setprop_8petsc4py_5PETSc_4SNES_its, 0, 0},
-  {(char *)"history", __pyx_getprop_8petsc4py_5PETSc_4SNES_history, 0, 0, 0},
-  {(char *)"reason", __pyx_getprop_8petsc4py_5PETSc_4SNES_reason, __pyx_setprop_8petsc4py_5PETSc_4SNES_reason, 0, 0},
-  {(char *)"iterating", __pyx_getprop_8petsc4py_5PETSc_4SNES_iterating, 0, 0, 0},
-  {(char *)"converged", __pyx_getprop_8petsc4py_5PETSc_4SNES_converged, 0, 0, 0},
-  {(char *)"diverged", __pyx_getprop_8petsc4py_5PETSc_4SNES_diverged, 0, 0, 0},
-  {(char *)"use_mf", __pyx_getprop_8petsc4py_5PETSc_4SNES_use_mf, __pyx_setprop_8petsc4py_5PETSc_4SNES_use_mf, 0, 0},
-  {(char *)"use_fd", __pyx_getprop_8petsc4py_5PETSc_4SNES_use_fd, __pyx_setprop_8petsc4py_5PETSc_4SNES_use_fd, 0, 0},
+  {(char *)"appctx", __pyx_getprop_8petsc4py_5PETSc_4SNES_appctx, __pyx_setprop_8petsc4py_5PETSc_4SNES_appctx, (char *)0, 0},
+  {(char *)"dm", __pyx_getprop_8petsc4py_5PETSc_4SNES_dm, __pyx_setprop_8petsc4py_5PETSc_4SNES_dm, (char *)0, 0},
+  {(char *)"npc", __pyx_getprop_8petsc4py_5PETSc_4SNES_npc, __pyx_setprop_8petsc4py_5PETSc_4SNES_npc, (char *)0, 0},
+  {(char *)"vec_sol", __pyx_getprop_8petsc4py_5PETSc_4SNES_vec_sol, 0, (char *)0, 0},
+  {(char *)"vec_upd", __pyx_getprop_8petsc4py_5PETSc_4SNES_vec_upd, 0, (char *)0, 0},
+  {(char *)"vec_rhs", __pyx_getprop_8petsc4py_5PETSc_4SNES_vec_rhs, 0, (char *)0, 0},
+  {(char *)"ksp", __pyx_getprop_8petsc4py_5PETSc_4SNES_ksp, __pyx_setprop_8petsc4py_5PETSc_4SNES_ksp, (char *)0, 0},
+  {(char *)"use_ew", __pyx_getprop_8petsc4py_5PETSc_4SNES_use_ew, __pyx_setprop_8petsc4py_5PETSc_4SNES_use_ew, (char *)0, 0},
+  {(char *)"rtol", __pyx_getprop_8petsc4py_5PETSc_4SNES_rtol, __pyx_setprop_8petsc4py_5PETSc_4SNES_rtol, (char *)0, 0},
+  {(char *)"atol", __pyx_getprop_8petsc4py_5PETSc_4SNES_atol, __pyx_setprop_8petsc4py_5PETSc_4SNES_atol, (char *)0, 0},
+  {(char *)"stol", __pyx_getprop_8petsc4py_5PETSc_4SNES_stol, __pyx_setprop_8petsc4py_5PETSc_4SNES_stol, (char *)0, 0},
+  {(char *)"max_it", __pyx_getprop_8petsc4py_5PETSc_4SNES_max_it, __pyx_setprop_8petsc4py_5PETSc_4SNES_max_it, (char *)0, 0},
+  {(char *)"max_funcs", __pyx_getprop_8petsc4py_5PETSc_4SNES_max_funcs, __pyx_setprop_8petsc4py_5PETSc_4SNES_max_funcs, (char *)0, 0},
+  {(char *)"its", __pyx_getprop_8petsc4py_5PETSc_4SNES_its, __pyx_setprop_8petsc4py_5PETSc_4SNES_its, (char *)0, 0},
+  {(char *)"history", __pyx_getprop_8petsc4py_5PETSc_4SNES_history, 0, (char *)0, 0},
+  {(char *)"reason", __pyx_getprop_8petsc4py_5PETSc_4SNES_reason, __pyx_setprop_8petsc4py_5PETSc_4SNES_reason, (char *)0, 0},
+  {(char *)"iterating", __pyx_getprop_8petsc4py_5PETSc_4SNES_iterating, 0, (char *)0, 0},
+  {(char *)"converged", __pyx_getprop_8petsc4py_5PETSc_4SNES_converged, 0, (char *)0, 0},
+  {(char *)"diverged", __pyx_getprop_8petsc4py_5PETSc_4SNES_diverged, 0, (char *)0, 0},
+  {(char *)"use_mf", __pyx_getprop_8petsc4py_5PETSc_4SNES_use_mf, __pyx_setprop_8petsc4py_5PETSc_4SNES_use_mf, (char *)0, 0},
+  {(char *)"use_fd", __pyx_getprop_8petsc4py_5PETSc_4SNES_use_fd, __pyx_setprop_8petsc4py_5PETSc_4SNES_use_fd, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -237856,8 +240400,9 @@ DL_EXPORT(PyTypeObject) PyPetscSNES_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -238109,112 +240654,116 @@ static PyObject *__pyx_getprop_8petsc4py_5PETSc_2TS_diverged(PyObject *o, CYTHON
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_TS[] = {
   {"view", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_4destroy},
-  {"create", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_7create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_6create},
-  {"setType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_9setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_8setType},
-  {"getType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_11getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_10getType},
-  {"setProblemType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_13setProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_12setProblemType},
-  {"getProblemType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_15getProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_14getProblemType},
-  {"setEquationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_17setEquationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_16setEquationType},
-  {"getEquationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_19getEquationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_18getEquationType},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_21setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_20setOptionsPrefix},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_23getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_22getOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_25setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_24setFromOptions},
-  {"setAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_27setAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_26setAppCtx},
-  {"getAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_29getAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_28getAppCtx},
-  {"setRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_31setRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_30setRHSFunction},
-  {"setRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_33setRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_32setRHSJacobian},
-  {"computeRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_35computeRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_34computeRHSFunction},
-  {"computeRHSFunctionLinear", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_37computeRHSFunctionLinear, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_36computeRHSFunctionLinear},
-  {"computeRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_38computeRHSJacobian},
-  {"computeRHSJacobianConstant", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSJacobianConstant, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_40computeRHSJacobianConstant},
-  {"getRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_43getRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_42getRHSFunction},
-  {"getRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_45getRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_44getRHSJacobian},
-  {"setIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_47setIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_46setIFunction},
-  {"setIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_49setIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_48setIJacobian},
-  {"computeIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_51computeIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_50computeIFunction},
-  {"computeIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_53computeIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_52computeIJacobian},
-  {"getIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_55getIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_54getIFunction},
-  {"getIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_57getIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_56getIJacobian},
-  {"setSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_59setSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_58setSolution},
-  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_61getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_60getSolution},
-  {"getSNES", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_63getSNES, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_62getSNES},
-  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_65getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_64getKSP},
-  {"getDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_67getDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_66getDM},
-  {"setDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_69setDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_68setDM},
-  {"setTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_71setTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_70setTime},
-  {"getTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_73getTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_72getTime},
-  {"getSolveTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_75getSolveTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_74getSolveTime},
-  {"setInitialTimeStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_77setInitialTimeStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_76setInitialTimeStep},
-  {"setTimeStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_79setTimeStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_78setTimeStep},
-  {"getTimeStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_81getTimeStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_80getTimeStep},
-  {"setStepNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_83setStepNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_82setStepNumber},
-  {"getStepNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_85getStepNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_84getStepNumber},
-  {"setMaxTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_87setMaxTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_86setMaxTime},
-  {"getMaxTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_89getMaxTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_88getMaxTime},
-  {"setMaxSteps", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_91setMaxSteps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_90setMaxSteps},
-  {"getMaxSteps", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_93getMaxSteps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_92getMaxSteps},
-  {"setDuration", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_95setDuration, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_94setDuration},
-  {"getDuration", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_97getDuration, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_96getDuration},
-  {"getSNESIterations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_99getSNESIterations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_98getSNESIterations},
-  {"getKSPIterations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_101getKSPIterations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_100getKSPIterations},
-  {"setMaxStepRejections", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_103setMaxStepRejections, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_102setMaxStepRejections},
-  {"getStepRejections", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_105getStepRejections, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_104getStepRejections},
-  {"setMaxSNESFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_107setMaxSNESFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_106setMaxSNESFailures},
-  {"getSNESFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_109getSNESFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_108getSNESFailures},
-  {"setErrorIfStepFails", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_111setErrorIfStepFails, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_110setErrorIfStepFails},
-  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_113setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_112setTolerances},
-  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_115getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_114getTolerances},
-  {"setExactFinalTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_117setExactFinalTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_116setExactFinalTime},
-  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_119setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_118setConvergedReason},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_121getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_120getConvergedReason},
-  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_123setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_122setMonitor},
-  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_125getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_124getMonitor},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_127cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_126cancelMonitor},
-  {"monitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_129monitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_128monitor},
-  {"setPreStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_131setPreStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_130setPreStep},
-  {"getPreStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_133getPreStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_132getPreStep},
-  {"setPostStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_135setPostStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_134setPostStep},
-  {"getPostStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_137getPostStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_136getPostStep},
-  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_139setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_138setUp},
-  {"reset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_141reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_140reset},
-  {"step", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_143step, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_142step},
-  {"rollBack", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_145rollBack, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_144rollBack},
-  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_147solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_146solve},
-  {"interpolate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_149interpolate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_148interpolate},
-  {"createPython", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_151createPython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_150createPython},
-  {"setPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_153setPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_152setPythonContext},
-  {"getPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_155getPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_154getPythonContext},
-  {"setPythonType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_157setPythonType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_156setPythonType},
-  {"setTheta", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_159setTheta, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_158setTheta},
-  {"getTheta", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_161getTheta, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_160getTheta},
-  {"setThetaEndpoint", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_163setThetaEndpoint, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_162setThetaEndpoint},
-  {"getThetaEndpoint", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_165getThetaEndpoint, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_164getThetaEndpoint},
-  {"setAlphaRadius", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_167setAlphaRadius, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_166setAlphaRadius},
-  {"setAlphaParams", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_169setAlphaParams, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_168setAlphaParams},
-  {"getAlphaParams", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_171getAlphaParams, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_170getAlphaParams},
+  {"load", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_5load, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_4load},
+  {"destroy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_7destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_6destroy},
+  {"create", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_8create},
+  {"clone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_11clone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_10clone},
+  {"setType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_13setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_12setType},
+  {"getType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_15getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_14getType},
+  {"setProblemType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_17setProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_16setProblemType},
+  {"getProblemType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_19getProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_18getProblemType},
+  {"setEquationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_21setEquationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_20setEquationType},
+  {"getEquationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_23getEquationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_22getEquationType},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_25setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_24setOptionsPrefix},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_27getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_26getOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_29setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_28setFromOptions},
+  {"setAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_31setAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_30setAppCtx},
+  {"getAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_33getAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_32getAppCtx},
+  {"setRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_35setRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_34setRHSFunction},
+  {"setRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_37setRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_36setRHSJacobian},
+  {"computeRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_38computeRHSFunction},
+  {"computeRHSFunctionLinear", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSFunctionLinear, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_40computeRHSFunctionLinear},
+  {"computeRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_42computeRHSJacobian},
+  {"computeRHSJacobianConstant", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSJacobianConstant, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant},
+  {"getRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_47getRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_46getRHSFunction},
+  {"getRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_49getRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_48getRHSJacobian},
+  {"setIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_51setIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_50setIFunction},
+  {"setIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_53setIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_52setIJacobian},
+  {"computeIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_54computeIFunction},
+  {"computeIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_56computeIJacobian},
+  {"getIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_59getIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_58getIFunction},
+  {"getIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_61getIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_60getIJacobian},
+  {"setSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_63setSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_62setSolution},
+  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_65getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_64getSolution},
+  {"getSNES", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_67getSNES, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_66getSNES},
+  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_69getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_68getKSP},
+  {"getDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_71getDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_70getDM},
+  {"setDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_73setDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_72setDM},
+  {"setTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_75setTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_74setTime},
+  {"getTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_77getTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_76getTime},
+  {"getPrevTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_79getPrevTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_78getPrevTime},
+  {"getSolveTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_81getSolveTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_80getSolveTime},
+  {"setInitialTimeStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_83setInitialTimeStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_82setInitialTimeStep},
+  {"setTimeStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_85setTimeStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_84setTimeStep},
+  {"getTimeStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_87getTimeStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_86getTimeStep},
+  {"setStepNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_89setStepNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_88setStepNumber},
+  {"getStepNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_91getStepNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_90getStepNumber},
+  {"setMaxTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_93setMaxTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_92setMaxTime},
+  {"getMaxTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_95getMaxTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_94getMaxTime},
+  {"setMaxSteps", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_97setMaxSteps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_96setMaxSteps},
+  {"getMaxSteps", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_99getMaxSteps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_98getMaxSteps},
+  {"setDuration", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_101setDuration, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_100setDuration},
+  {"getDuration", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_103getDuration, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_102getDuration},
+  {"getTotalSteps", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_105getTotalSteps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_104getTotalSteps},
+  {"getSNESIterations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_107getSNESIterations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_106getSNESIterations},
+  {"getKSPIterations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_109getKSPIterations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_108getKSPIterations},
+  {"setMaxStepRejections", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxStepRejections, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_110setMaxStepRejections},
+  {"getStepRejections", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_113getStepRejections, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_112getStepRejections},
+  {"setMaxSNESFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSNESFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_114setMaxSNESFailures},
+  {"getSNESFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_117getSNESFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_116getSNESFailures},
+  {"setErrorIfStepFails", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_119setErrorIfStepFails, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_118setErrorIfStepFails},
+  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_121setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_120setTolerances},
+  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_123getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_122getTolerances},
+  {"setExactFinalTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_125setExactFinalTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_124setExactFinalTime},
+  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_127setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_126setConvergedReason},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_129getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_128getConvergedReason},
+  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_131setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_130setMonitor},
+  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_133getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_132getMonitor},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_135cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_134cancelMonitor},
+  {"monitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_137monitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_136monitor},
+  {"setPreStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_139setPreStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_138setPreStep},
+  {"getPreStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_141getPreStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_140getPreStep},
+  {"setPostStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_143setPostStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_142setPostStep},
+  {"getPostStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_145getPostStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_144getPostStep},
+  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_147setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_146setUp},
+  {"reset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_149reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_148reset},
+  {"step", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_151step, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_150step},
+  {"rollBack", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_153rollBack, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_152rollBack},
+  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_155solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_154solve},
+  {"interpolate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_157interpolate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_156interpolate},
+  {"createPython", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_159createPython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_158createPython},
+  {"setPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_161setPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_160setPythonContext},
+  {"getPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_163getPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_162getPythonContext},
+  {"setPythonType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_165setPythonType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_164setPythonType},
+  {"setTheta", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_167setTheta, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_166setTheta},
+  {"getTheta", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_169getTheta, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_168getTheta},
+  {"setThetaEndpoint", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_171setThetaEndpoint, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_170setThetaEndpoint},
+  {"getThetaEndpoint", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_173getThetaEndpoint, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_172getThetaEndpoint},
+  {"setAlphaRadius", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_175setAlphaRadius, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_174setAlphaRadius},
+  {"setAlphaParams", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_177setAlphaParams, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_176setAlphaParams},
+  {"getAlphaParams", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_179getAlphaParams, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_178getAlphaParams},
   {0, 0, 0, 0}
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_TS[] = {
-  {(char *)"appctx", __pyx_getprop_8petsc4py_5PETSc_2TS_appctx, __pyx_setprop_8petsc4py_5PETSc_2TS_appctx, 0, 0},
-  {(char *)"dm", __pyx_getprop_8petsc4py_5PETSc_2TS_dm, __pyx_setprop_8petsc4py_5PETSc_2TS_dm, 0, 0},
-  {(char *)"problem_type", __pyx_getprop_8petsc4py_5PETSc_2TS_problem_type, __pyx_setprop_8petsc4py_5PETSc_2TS_problem_type, 0, 0},
-  {(char *)"equation_type", __pyx_getprop_8petsc4py_5PETSc_2TS_equation_type, __pyx_setprop_8petsc4py_5PETSc_2TS_equation_type, 0, 0},
-  {(char *)"snes", __pyx_getprop_8petsc4py_5PETSc_2TS_snes, 0, 0, 0},
-  {(char *)"ksp", __pyx_getprop_8petsc4py_5PETSc_2TS_ksp, 0, 0, 0},
-  {(char *)"vec_sol", __pyx_getprop_8petsc4py_5PETSc_2TS_vec_sol, 0, 0, 0},
-  {(char *)"time", __pyx_getprop_8petsc4py_5PETSc_2TS_time, __pyx_setprop_8petsc4py_5PETSc_2TS_time, 0, 0},
-  {(char *)"time_step", __pyx_getprop_8petsc4py_5PETSc_2TS_time_step, __pyx_setprop_8petsc4py_5PETSc_2TS_time_step, 0, 0},
-  {(char *)"step_number", __pyx_getprop_8petsc4py_5PETSc_2TS_step_number, __pyx_setprop_8petsc4py_5PETSc_2TS_step_number, 0, 0},
-  {(char *)"max_time", __pyx_getprop_8petsc4py_5PETSc_2TS_max_time, __pyx_setprop_8petsc4py_5PETSc_2TS_max_time, 0, 0},
-  {(char *)"max_steps", __pyx_getprop_8petsc4py_5PETSc_2TS_max_steps, __pyx_setprop_8petsc4py_5PETSc_2TS_max_steps, 0, 0},
-  {(char *)"rtol", __pyx_getprop_8petsc4py_5PETSc_2TS_rtol, __pyx_setprop_8petsc4py_5PETSc_2TS_rtol, 0, 0},
-  {(char *)"atol", __pyx_getprop_8petsc4py_5PETSc_2TS_atol, __pyx_setprop_8petsc4py_5PETSc_2TS_atol, 0, 0},
-  {(char *)"reason", __pyx_getprop_8petsc4py_5PETSc_2TS_reason, __pyx_setprop_8petsc4py_5PETSc_2TS_reason, 0, 0},
-  {(char *)"iterating", __pyx_getprop_8petsc4py_5PETSc_2TS_iterating, 0, 0, 0},
-  {(char *)"converged", __pyx_getprop_8petsc4py_5PETSc_2TS_converged, 0, 0, 0},
-  {(char *)"diverged", __pyx_getprop_8petsc4py_5PETSc_2TS_diverged, 0, 0, 0},
+  {(char *)"appctx", __pyx_getprop_8petsc4py_5PETSc_2TS_appctx, __pyx_setprop_8petsc4py_5PETSc_2TS_appctx, (char *)0, 0},
+  {(char *)"dm", __pyx_getprop_8petsc4py_5PETSc_2TS_dm, __pyx_setprop_8petsc4py_5PETSc_2TS_dm, (char *)0, 0},
+  {(char *)"problem_type", __pyx_getprop_8petsc4py_5PETSc_2TS_problem_type, __pyx_setprop_8petsc4py_5PETSc_2TS_problem_type, (char *)0, 0},
+  {(char *)"equation_type", __pyx_getprop_8petsc4py_5PETSc_2TS_equation_type, __pyx_setprop_8petsc4py_5PETSc_2TS_equation_type, (char *)0, 0},
+  {(char *)"snes", __pyx_getprop_8petsc4py_5PETSc_2TS_snes, 0, (char *)0, 0},
+  {(char *)"ksp", __pyx_getprop_8petsc4py_5PETSc_2TS_ksp, 0, (char *)0, 0},
+  {(char *)"vec_sol", __pyx_getprop_8petsc4py_5PETSc_2TS_vec_sol, 0, (char *)0, 0},
+  {(char *)"time", __pyx_getprop_8petsc4py_5PETSc_2TS_time, __pyx_setprop_8petsc4py_5PETSc_2TS_time, (char *)0, 0},
+  {(char *)"time_step", __pyx_getprop_8petsc4py_5PETSc_2TS_time_step, __pyx_setprop_8petsc4py_5PETSc_2TS_time_step, (char *)0, 0},
+  {(char *)"step_number", __pyx_getprop_8petsc4py_5PETSc_2TS_step_number, __pyx_setprop_8petsc4py_5PETSc_2TS_step_number, (char *)0, 0},
+  {(char *)"max_time", __pyx_getprop_8petsc4py_5PETSc_2TS_max_time, __pyx_setprop_8petsc4py_5PETSc_2TS_max_time, (char *)0, 0},
+  {(char *)"max_steps", __pyx_getprop_8petsc4py_5PETSc_2TS_max_steps, __pyx_setprop_8petsc4py_5PETSc_2TS_max_steps, (char *)0, 0},
+  {(char *)"rtol", __pyx_getprop_8petsc4py_5PETSc_2TS_rtol, __pyx_setprop_8petsc4py_5PETSc_2TS_rtol, (char *)0, 0},
+  {(char *)"atol", __pyx_getprop_8petsc4py_5PETSc_2TS_atol, __pyx_setprop_8petsc4py_5PETSc_2TS_atol, (char *)0, 0},
+  {(char *)"reason", __pyx_getprop_8petsc4py_5PETSc_2TS_reason, __pyx_setprop_8petsc4py_5PETSc_2TS_reason, (char *)0, 0},
+  {(char *)"iterating", __pyx_getprop_8petsc4py_5PETSc_2TS_iterating, 0, (char *)0, 0},
+  {(char *)"converged", __pyx_getprop_8petsc4py_5PETSc_2TS_converged, 0, (char *)0, 0},
+  {(char *)"diverged", __pyx_getprop_8petsc4py_5PETSc_2TS_diverged, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -238229,8 +240778,9 @@ DL_EXPORT(PyTypeObject) PyPetscTS_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -238288,25 +240838,6 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_TAO(PyTypeObject *t, PyObject *a,
   return o;
 }
 
-static void __pyx_tp_dealloc_8petsc4py_5PETSc_TAO(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 *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_8petsc4py_5PETSc_3TAO_3__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
-  }
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_8petsc4py_5PETSc_Object(o);
-}
-
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_3TAO_appctx(PyObject *o, CYTHON_UNUSED void *x) {
   return __pyx_pw_8petsc4py_5PETSc_3TAO_6appctx_1__get__(o);
 }
@@ -238412,85 +240943,85 @@ static PyObject *__pyx_getprop_8petsc4py_5PETSc_3TAO_diverged(PyObject *o, CYTHO
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_TAO[] = {
-  {"view", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_5view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_4view},
-  {"destroy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_7destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_6destroy},
-  {"create", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_8create},
-  {"setType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_10setType},
-  {"getType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_12getType},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_15setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_14setOptionsPrefix},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_17getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_16getOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_19setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_18setFromOptions},
-  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_21setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_20setUp},
-  {"setInitialTrustRegionRadius", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_23setInitialTrustRegionRadius, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_22setInitialTrustRegionRadius},
-  {"setAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_25setAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_24setAppCtx},
-  {"getAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_27getAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_26getAppCtx},
-  {"setInitial", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_29setInitial, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_28setInitial},
-  {"setObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_31setObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_30setObjective},
-  {"setSeparableObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_33setSeparableObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_32setSeparableObjective},
-  {"setGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_35setGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_34setGradient},
-  {"setObjectiveGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_37setObjectiveGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_36setObjectiveGradient},
-  {"setVariableBounds", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_39setVariableBounds, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_38setVariableBounds},
-  {"setConstraints", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_41setConstraints, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_40setConstraints},
-  {"setHessian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_43setHessian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_42setHessian},
-  {"setJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_45setJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_44setJacobian},
-  {"setStateDesignIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_47setStateDesignIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_46setStateDesignIS},
-  {"setJacobianState", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianState, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_48setJacobianState},
-  {"setJacobianDesign", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_51setJacobianDesign, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_50setJacobianDesign},
-  {"computeObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_53computeObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_52computeObjective},
-  {"computeSeparableObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_55computeSeparableObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_54computeSeparableObjective},
-  {"computeGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_57computeGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_56computeGradient},
-  {"computeObjectiveGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_59computeObjectiveGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_58computeObjectiveGradient},
-  {"computeDualVariables", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_61computeDualVariables, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_60computeDualVariables},
-  {"computeVariableBounds", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_63computeVariableBounds, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_62computeVariableBounds},
-  {"computeConstraints", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_65computeConstraints, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_64computeConstraints},
-  {"computeHessian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_67computeHessian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_66computeHessian},
-  {"computeJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_69computeJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_68computeJacobian},
-  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_71setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_70setTolerances},
-  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_73getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_72getTolerances},
-  {"setObjectiveTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_75setObjectiveTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_74setObjectiveTolerances},
-  {"getObjectiveTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_77getObjectiveTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_76getObjectiveTolerances},
-  {"setGradientTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_79setGradientTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_78setGradientTolerances},
-  {"getGradientTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_81getGradientTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_80getGradientTolerances},
-  {"setConstraintTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_83setConstraintTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_82setConstraintTolerances},
-  {"getConstraintTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_85getConstraintTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_84getConstraintTolerances},
-  {"setConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_87setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_86setConvergenceTest},
-  {"getConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_89getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_88getConvergenceTest},
-  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_91setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_90setConvergedReason},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_93getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_92getConvergedReason},
-  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_95setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_94setMonitor},
-  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_97getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_96getMonitor},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_99cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_98cancelMonitor},
-  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_101solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_100solve},
-  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_103getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_102getSolution},
-  {"getGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_105getGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_104getGradient},
+  {"view", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_4destroy},
+  {"create", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_7create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_6create},
+  {"setType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_9setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_8setType},
+  {"getType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_11getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_10getType},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_13setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_12setOptionsPrefix},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_14getOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_17setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_16setFromOptions},
+  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_19setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_18setUp},
+  {"setInitialTrustRegionRadius", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_21setInitialTrustRegionRadius, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_20setInitialTrustRegionRadius},
+  {"setAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_23setAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_22setAppCtx},
+  {"getAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_25getAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_24getAppCtx},
+  {"setInitial", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_27setInitial, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_26setInitial},
+  {"setObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_29setObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_28setObjective},
+  {"setSeparableObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_31setSeparableObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_30setSeparableObjective},
+  {"setGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_33setGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_32setGradient},
+  {"setObjectiveGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_35setObjectiveGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_34setObjectiveGradient},
+  {"setVariableBounds", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_37setVariableBounds, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_36setVariableBounds},
+  {"setConstraints", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_39setConstraints, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_38setConstraints},
+  {"setHessian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_41setHessian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_40setHessian},
+  {"setJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_43setJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_42setJacobian},
+  {"setStateDesignIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_45setStateDesignIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_44setStateDesignIS},
+  {"setJacobianState", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_47setJacobianState, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_46setJacobianState},
+  {"setJacobianDesign", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianDesign, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_48setJacobianDesign},
+  {"computeObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_51computeObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_50computeObjective},
+  {"computeSeparableObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_53computeSeparableObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_52computeSeparableObjective},
+  {"computeGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_55computeGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_54computeGradient},
+  {"computeObjectiveGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_57computeObjectiveGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_56computeObjectiveGradient},
+  {"computeDualVariables", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_59computeDualVariables, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_58computeDualVariables},
+  {"computeVariableBounds", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_61computeVariableBounds, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_60computeVariableBounds},
+  {"computeConstraints", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_63computeConstraints, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_62computeConstraints},
+  {"computeHessian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_65computeHessian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_64computeHessian},
+  {"computeJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_67computeJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_66computeJacobian},
+  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_69setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_68setTolerances},
+  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_71getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_70getTolerances},
+  {"setConstraintTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_73setConstraintTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_72setConstraintTolerances},
+  {"getConstraintTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_75getConstraintTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_74getConstraintTolerances},
+  {"setConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_77setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_76setConvergenceTest},
+  {"getConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_79getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_78getConvergenceTest},
+  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_81setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_80setConvergedReason},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_83getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_82getConvergedReason},
+  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_85setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_84setMonitor},
+  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_87getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_86getMonitor},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_89cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_88cancelMonitor},
+  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_91solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_90solve},
+  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_93getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_92getSolution},
+  {"getGradient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_95getGradient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_94getGradient},
+  {"setGradientNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_97setGradientNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_96setGradientNorm},
+  {"getGradientNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_99getGradientNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_98getGradientNorm},
+  {"setLMVMH0", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_101setLMVMH0, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_100setLMVMH0},
+  {"getLMVMH0", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_103getLMVMH0, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_102getLMVMH0},
+  {"getLMVMH0KSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_105getLMVMH0KSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_104getLMVMH0KSP},
   {"getVariableBounds", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_107getVariableBounds, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_106getVariableBounds},
   {"getIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_109getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_108getIterationNumber},
   {"getObjectiveValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_111getObjectiveValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_110getObjectiveValue},
-  {"getGradientNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_113getGradientNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_112getGradientNorm},
-  {"getConstraintsNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_115getConstraintsNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_114getConstraintsNorm},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_117getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_116getConvergedReason},
-  {"getSolutionStatus", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_119getSolutionStatus, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_118getSolutionStatus},
-  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_121getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_120getKSP},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_113getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_112getConvergedReason},
+  {"getSolutionNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_115getSolutionNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_114getSolutionNorm},
+  {"getSolutionStatus", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_117getSolutionStatus, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_116getSolutionStatus},
+  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3TAO_119getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3TAO_118getKSP},
   {0, 0, 0, 0}
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_TAO[] = {
-  {(char *)"appctx", __pyx_getprop_8petsc4py_5PETSc_3TAO_appctx, __pyx_setprop_8petsc4py_5PETSc_3TAO_appctx, 0, 0},
-  {(char *)"ksp", __pyx_getprop_8petsc4py_5PETSc_3TAO_ksp, 0, 0, 0},
-  {(char *)"ftol", __pyx_getprop_8petsc4py_5PETSc_3TAO_ftol, __pyx_setprop_8petsc4py_5PETSc_3TAO_ftol, 0, 0},
-  {(char *)"gtol", __pyx_getprop_8petsc4py_5PETSc_3TAO_gtol, __pyx_setprop_8petsc4py_5PETSc_3TAO_gtol, 0, 0},
-  {(char *)"ctol", __pyx_getprop_8petsc4py_5PETSc_3TAO_ctol, __pyx_setprop_8petsc4py_5PETSc_3TAO_ctol, 0, 0},
-  {(char *)"its", __pyx_getprop_8petsc4py_5PETSc_3TAO_its, 0, 0, 0},
-  {(char *)"gnorm", __pyx_getprop_8petsc4py_5PETSc_3TAO_gnorm, 0, 0, 0},
-  {(char *)"cnorm", __pyx_getprop_8petsc4py_5PETSc_3TAO_cnorm, 0, 0, 0},
-  {(char *)"solution", __pyx_getprop_8petsc4py_5PETSc_3TAO_solution, 0, 0, 0},
-  {(char *)"objective", __pyx_getprop_8petsc4py_5PETSc_3TAO_objective, 0, 0, 0},
-  {(char *)"function", __pyx_getprop_8petsc4py_5PETSc_3TAO_function, 0, 0, 0},
-  {(char *)"gradient", __pyx_getprop_8petsc4py_5PETSc_3TAO_gradient, 0, 0, 0},
-  {(char *)"reason", __pyx_getprop_8petsc4py_5PETSc_3TAO_reason, 0, 0, 0},
-  {(char *)"iterating", __pyx_getprop_8petsc4py_5PETSc_3TAO_iterating, 0, 0, 0},
-  {(char *)"converged", __pyx_getprop_8petsc4py_5PETSc_3TAO_converged, 0, 0, 0},
-  {(char *)"diverged", __pyx_getprop_8petsc4py_5PETSc_3TAO_diverged, 0, 0, 0},
+  {(char *)"appctx", __pyx_getprop_8petsc4py_5PETSc_3TAO_appctx, __pyx_setprop_8petsc4py_5PETSc_3TAO_appctx, (char *)0, 0},
+  {(char *)"ksp", __pyx_getprop_8petsc4py_5PETSc_3TAO_ksp, 0, (char *)0, 0},
+  {(char *)"ftol", __pyx_getprop_8petsc4py_5PETSc_3TAO_ftol, __pyx_setprop_8petsc4py_5PETSc_3TAO_ftol, (char *)0, 0},
+  {(char *)"gtol", __pyx_getprop_8petsc4py_5PETSc_3TAO_gtol, __pyx_setprop_8petsc4py_5PETSc_3TAO_gtol, (char *)0, 0},
+  {(char *)"ctol", __pyx_getprop_8petsc4py_5PETSc_3TAO_ctol, __pyx_setprop_8petsc4py_5PETSc_3TAO_ctol, (char *)0, 0},
+  {(char *)"its", __pyx_getprop_8petsc4py_5PETSc_3TAO_its, 0, (char *)0, 0},
+  {(char *)"gnorm", __pyx_getprop_8petsc4py_5PETSc_3TAO_gnorm, 0, (char *)0, 0},
+  {(char *)"cnorm", __pyx_getprop_8petsc4py_5PETSc_3TAO_cnorm, 0, (char *)0, 0},
+  {(char *)"solution", __pyx_getprop_8petsc4py_5PETSc_3TAO_solution, 0, (char *)0, 0},
+  {(char *)"objective", __pyx_getprop_8petsc4py_5PETSc_3TAO_objective, 0, (char *)0, 0},
+  {(char *)"function", __pyx_getprop_8petsc4py_5PETSc_3TAO_function, 0, (char *)0, 0},
+  {(char *)"gradient", __pyx_getprop_8petsc4py_5PETSc_3TAO_gradient, 0, (char *)0, 0},
+  {(char *)"reason", __pyx_getprop_8petsc4py_5PETSc_3TAO_reason, 0, (char *)0, 0},
+  {(char *)"iterating", __pyx_getprop_8petsc4py_5PETSc_3TAO_iterating, 0, (char *)0, 0},
+  {(char *)"converged", __pyx_getprop_8petsc4py_5PETSc_3TAO_converged, 0, (char *)0, 0},
+  {(char *)"diverged", __pyx_getprop_8petsc4py_5PETSc_3TAO_diverged, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -238499,14 +241030,15 @@ DL_EXPORT(PyTypeObject) PyPetscTAO_Type = {
   "petsc4py.PETSc.TAO", /*tp_name*/
   sizeof(struct PyPetscTAOObject), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8petsc4py_5PETSc_TAO, /*tp_dealloc*/
+  __pyx_tp_dealloc_8petsc4py_5PETSc_Object, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -238587,8 +241119,9 @@ DL_EXPORT(PyTypeObject) PyPetscAO_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -238692,6 +241225,21 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_DM[] = {
   {"getDefaultSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_87getDefaultSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_86getDefaultSF},
   {"getPointSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_89getPointSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_88getPointSF},
   {"setPointSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_90setPointSF},
+  {"getNumLabels", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_93getNumLabels, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_92getNumLabels},
+  {"getLabelName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_95getLabelName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_94getLabelName},
+  {"hasLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_97hasLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_96hasLabel},
+  {"createLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_99createLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_98createLabel},
+  {"removeLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_101removeLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_100removeLabel},
+  {"getLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_103getLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_102getLabelValue},
+  {"setLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_105setLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_104setLabelValue},
+  {"clearLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_107clearLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_106clearLabelValue},
+  {"getLabelSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_109getLabelSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_108getLabelSize},
+  {"getLabelIdIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_111getLabelIdIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_110getLabelIdIS},
+  {"getStratumSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_113getStratumSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_112getStratumSize},
+  {"getStratumIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_115getStratumIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_114getStratumIS},
+  {"clearLabelStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_117clearLabelStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_116clearLabelStratum},
+  {"setLabelOutput", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_119setLabelOutput, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_118setLabelOutput},
+  {"getLabelOutput", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelOutput, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_120getLabelOutput},
   {0, 0, 0, 0}
 };
 
@@ -238706,8 +241254,9 @@ DL_EXPORT(PyTypeObject) PyPetscDM_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -238788,8 +241337,9 @@ DL_EXPORT(PyTypeObject) PyPetscPartitioner_Type = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -238880,7 +241430,7 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc__IS_buffer[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc__IS_buffer[] = {
-  {(char *)"__array_interface__", __pyx_getprop_8petsc4py_5PETSc_10_IS_buffer___array_interface__, 0, 0, 0},
+  {(char *)"__array_interface__", __pyx_getprop_8petsc4py_5PETSc_10_IS_buffer___array_interface__, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -238912,8 +241462,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc__IS_buffer = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -239004,7 +241555,7 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc__Vec_buffer[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc__Vec_buffer[] = {
-  {(char *)"__array_interface__", __pyx_getprop_8petsc4py_5PETSc_11_Vec_buffer___array_interface__, 0, 0, 0},
+  {(char *)"__array_interface__", __pyx_getprop_8petsc4py_5PETSc_11_Vec_buffer___array_interface__, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -239036,8 +241587,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc__Vec_buffer = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -239151,8 +241703,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc__Vec_LocalForm = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -239278,12 +241831,12 @@ static int __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_field(PyObject *o, PyOb
 }
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc__Mat_Stencil[] = {
-  {(char *)"i", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_i, 0, 0},
-  {(char *)"j", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_j, 0, 0},
-  {(char *)"k", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_k, 0, 0},
-  {(char *)"c", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_c, 0, 0},
-  {(char *)"index", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_index, 0, 0},
-  {(char *)"field", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_field, 0, 0},
+  {(char *)"i", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_i, (char *)0, 0},
+  {(char *)"j", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_j, (char *)0, 0},
+  {(char *)"k", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_k, (char *)0, 0},
+  {(char *)"c", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_c, (char *)0, 0},
+  {(char *)"index", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_index, (char *)0, 0},
+  {(char *)"field", 0, __pyx_setprop_8petsc4py_5PETSc_12_Mat_Stencil_field, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -239298,8 +241851,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc__Mat_Stencil = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -239478,11 +242032,11 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc__DMDA_Vec_array[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc__DMDA_Vec_array[] = {
-  {(char *)"starts", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_starts, 0, 0, 0},
-  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_sizes, 0, 0, 0},
-  {(char *)"shape", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_shape, 0, 0, 0},
-  {(char *)"strides", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_strides, 0, 0, 0},
-  {(char *)"array", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_array, 0, 0, 0},
+  {(char *)"starts", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_starts, 0, (char *)0, 0},
+  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_sizes, 0, (char *)0, 0},
+  {(char *)"shape", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_shape, 0, (char *)0, 0},
+  {(char *)"strides", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_strides, 0, (char *)0, 0},
+  {(char *)"array", __pyx_getprop_8petsc4py_5PETSc_15_DMDA_Vec_array_array, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -239516,8 +242070,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc__DMDA_Vec_array = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -239650,8 +242205,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc__DMComposite_access = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -239718,6 +242274,14 @@ static void __pyx_tp_dealloc_8petsc4py_5PETSc_Options(PyObject *o) {
   }
   #endif
   PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_8petsc4py_5PETSc_7Options_3__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
   Py_CLEAR(p->_prefix);
   (*Py_TYPE(o)->tp_free)(o);
 }
@@ -239749,10 +242313,10 @@ static PyObject *__pyx_sq_item_8petsc4py_5PETSc_Options(PyObject *o, Py_ssize_t
 
 static int __pyx_mp_ass_subscript_8petsc4py_5PETSc_Options(PyObject *o, PyObject *i, PyObject *v) {
   if (v) {
-    return __pyx_pw_8petsc4py_5PETSc_7Options_7__setitem__(o, i, v);
+    return __pyx_pw_8petsc4py_5PETSc_7Options_9__setitem__(o, i, v);
   }
   else {
-    return __pyx_pw_8petsc4py_5PETSc_7Options_9__delitem__(o, i);
+    return __pyx_pw_8petsc4py_5PETSc_7Options_11__delitem__(o, i);
   }
 }
 
@@ -239770,23 +242334,27 @@ static int __pyx_setprop_8petsc4py_5PETSc_7Options_prefix(PyObject *o, PyObject
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Options[] = {
-  {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_11setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_10setFromOptions},
-  {"prefixPush", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_13prefixPush, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_12prefixPush},
-  {"prefixPop", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_15prefixPop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_14prefixPop},
-  {"hasName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_17hasName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_16hasName},
-  {"setValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_19setValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_18setValue},
-  {"delValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_21delValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_20delValue},
-  {"getBool", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_23getBool, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_22getBool},
-  {"getInt", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_25getInt, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_24getInt},
-  {"getReal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_27getReal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_26getReal},
-  {"getScalar", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_29getScalar, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_28getScalar},
-  {"getString", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_31getString, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_30getString},
-  {"getAll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_33getAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_32getAll},
+  {"create", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_13create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_12create},
+  {"destroy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_15destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_14destroy},
+  {"clear", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_17clear, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_16clear},
+  {"view", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_19view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_18view},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_20setFromOptions},
+  {"prefixPush", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_23prefixPush, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_22prefixPush},
+  {"prefixPop", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_25prefixPop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_24prefixPop},
+  {"hasName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_27hasName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_26hasName},
+  {"setValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_29setValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_28setValue},
+  {"delValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_31delValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_30delValue},
+  {"getBool", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_33getBool, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_32getBool},
+  {"getInt", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_35getInt, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_34getInt},
+  {"getReal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_37getReal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_36getReal},
+  {"getScalar", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_39getScalar, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_38getScalar},
+  {"getString", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_41getString, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_40getString},
+  {"getAll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7Options_43getAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7Options_42getAll},
   {0, 0, 0, 0}
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_Options[] = {
-  {(char *)"prefix", __pyx_getprop_8petsc4py_5PETSc_7Options_prefix, __pyx_setprop_8petsc4py_5PETSc_7Options_prefix, 0, 0},
+  {(char *)"prefix", __pyx_getprop_8petsc4py_5PETSc_7Options_prefix, __pyx_setprop_8petsc4py_5PETSc_7Options_prefix, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -239798,14 +242366,14 @@ static PySequenceMethods __pyx_tp_as_sequence_Options = {
   0, /*sq_slice*/
   0, /*sq_ass_item*/
   0, /*sq_ass_slice*/
-  __pyx_pw_8petsc4py_5PETSc_7Options_3__contains__, /*sq_contains*/
+  __pyx_pw_8petsc4py_5PETSc_7Options_5__contains__, /*sq_contains*/
   0, /*sq_inplace_concat*/
   0, /*sq_inplace_repeat*/
 };
 
 static PyMappingMethods __pyx_tp_as_mapping_Options = {
   0, /*mp_length*/
-  __pyx_pw_8petsc4py_5PETSc_7Options_5__getitem__, /*mp_subscript*/
+  __pyx_pw_8petsc4py_5PETSc_7Options_7__getitem__, /*mp_subscript*/
   __pyx_mp_ass_subscript_8petsc4py_5PETSc_Options, /*mp_ass_subscript*/
 };
 
@@ -239820,8 +242388,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_Options = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -239900,6 +242469,8 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Sys[] = {
   {"sleep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Sys_21sleep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Sys_20sleep},
   {"pushErrorHandler", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Sys_23pushErrorHandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Sys_22pushErrorHandler},
   {"popErrorHandler", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Sys_25popErrorHandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Sys_24popErrorHandler},
+  {"infoAllow", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Sys_27infoAllow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Sys_26infoAllow},
+  {"registerCitation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Sys_29registerCitation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Sys_28registerCitation},
   {0, 0, 0, 0}
 };
 
@@ -239914,8 +242485,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_Sys = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -240006,8 +242578,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_Log = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -240137,10 +242710,10 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_LogStage[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_LogStage[] = {
-  {(char *)"name", __pyx_getprop_8petsc4py_5PETSc_8LogStage_name, __pyx_setprop_8petsc4py_5PETSc_8LogStage_name, 0, 0},
-  {(char *)"active", __pyx_getprop_8petsc4py_5PETSc_8LogStage_active, __pyx_setprop_8petsc4py_5PETSc_8LogStage_active, 0, 0},
-  {(char *)"visible", __pyx_getprop_8petsc4py_5PETSc_8LogStage_visible, __pyx_setprop_8petsc4py_5PETSc_8LogStage_visible, 0, 0},
-  {(char *)"id", __pyx_getprop_8petsc4py_5PETSc_8LogStage_id, 0, 0, 0},
+  {(char *)"name", __pyx_getprop_8petsc4py_5PETSc_8LogStage_name, __pyx_setprop_8petsc4py_5PETSc_8LogStage_name, (char *)0, 0},
+  {(char *)"active", __pyx_getprop_8petsc4py_5PETSc_8LogStage_active, __pyx_setprop_8petsc4py_5PETSc_8LogStage_active, (char *)0, 0},
+  {(char *)"visible", __pyx_getprop_8petsc4py_5PETSc_8LogStage_visible, __pyx_setprop_8petsc4py_5PETSc_8LogStage_visible, (char *)0, 0},
+  {(char *)"id", __pyx_getprop_8petsc4py_5PETSc_8LogStage_id, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -240217,8 +242790,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_LogStage = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   &__pyx_tp_as_number_LogStage, /*tp_as_number*/
@@ -240328,9 +242902,9 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_LogClass[] = {
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_LogClass[] = {
-  {(char *)"name", __pyx_getprop_8petsc4py_5PETSc_8LogClass_name, __pyx_setprop_8petsc4py_5PETSc_8LogClass_name, 0, 0},
-  {(char *)"active", __pyx_getprop_8petsc4py_5PETSc_8LogClass_active, __pyx_setprop_8petsc4py_5PETSc_8LogClass_active, 0, 0},
-  {(char *)"id", __pyx_getprop_8petsc4py_5PETSc_8LogClass_id, 0, 0, 0},
+  {(char *)"name", __pyx_getprop_8petsc4py_5PETSc_8LogClass_name, __pyx_setprop_8petsc4py_5PETSc_8LogClass_name, (char *)0, 0},
+  {(char *)"active", __pyx_getprop_8petsc4py_5PETSc_8LogClass_active, __pyx_setprop_8petsc4py_5PETSc_8LogClass_active, (char *)0, 0},
+  {(char *)"id", __pyx_getprop_8petsc4py_5PETSc_8LogClass_id, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -240407,8 +242981,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_LogClass = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   &__pyx_tp_as_number_LogClass, /*tp_as_number*/
@@ -240534,16 +243109,17 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_LogEvent[] = {
   {"deactivate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_8LogEvent_21deactivate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_8LogEvent_20deactivate},
   {"getActive", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_8LogEvent_23getActive, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_8LogEvent_22getActive},
   {"setActive", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_8LogEvent_25setActive, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_8LogEvent_24setActive},
-  {"setActiveAll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_8LogEvent_27setActiveAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_8LogEvent_26setActiveAll},
-  {"getPerfInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_8LogEvent_29getPerfInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_8LogEvent_28getPerfInfo},
+  {"getActiveAll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_8LogEvent_27getActiveAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_8LogEvent_26getActiveAll},
+  {"setActiveAll", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_8LogEvent_29setActiveAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_8LogEvent_28setActiveAll},
+  {"getPerfInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_8LogEvent_31getPerfInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_8LogEvent_30getPerfInfo},
   {0, 0, 0, 0}
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_LogEvent[] = {
-  {(char *)"name", __pyx_getprop_8petsc4py_5PETSc_8LogEvent_name, __pyx_setprop_8petsc4py_5PETSc_8LogEvent_name, 0, 0},
-  {(char *)"active", __pyx_getprop_8petsc4py_5PETSc_8LogEvent_active, __pyx_setprop_8petsc4py_5PETSc_8LogEvent_active, 0, 0},
-  {(char *)"active_all", __pyx_getprop_8petsc4py_5PETSc_8LogEvent_active_all, __pyx_setprop_8petsc4py_5PETSc_8LogEvent_active_all, 0, 0},
-  {(char *)"id", __pyx_getprop_8petsc4py_5PETSc_8LogEvent_id, 0, 0, 0},
+  {(char *)"name", __pyx_getprop_8petsc4py_5PETSc_8LogEvent_name, __pyx_setprop_8petsc4py_5PETSc_8LogEvent_name, (char *)0, 0},
+  {(char *)"active", __pyx_getprop_8petsc4py_5PETSc_8LogEvent_active, __pyx_setprop_8petsc4py_5PETSc_8LogEvent_active, (char *)0, 0},
+  {(char *)"active_all", __pyx_getprop_8petsc4py_5PETSc_8LogEvent_active_all, __pyx_setprop_8petsc4py_5PETSc_8LogEvent_active_all, (char *)0, 0},
+  {(char *)"id", __pyx_getprop_8petsc4py_5PETSc_8LogEvent_id, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -240620,8 +243196,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_LogEvent = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   &__pyx_tp_as_number_LogEvent, /*tp_as_number*/
@@ -240698,8 +243275,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_ViewerHDF5 = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -240830,38 +243408,42 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_DMDA[] = {
   {"getOwnershipRanges", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_41getOwnershipRanges, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges},
   {"getCorners", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_43getCorners, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_42getCorners},
   {"getGhostCorners", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_45getGhostCorners, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_44getGhostCorners},
-  {"getVecArray", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_47getVecArray, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_46getVecArray},
-  {"setUniformCoordinates", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_49setUniformCoordinates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_48setUniformCoordinates},
-  {"getBoundingBox", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_51getBoundingBox, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_50getBoundingBox},
-  {"getLocalBoundingBox", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_53getLocalBoundingBox, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_52getLocalBoundingBox},
-  {"createNaturalVec", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_55createNaturalVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_54createNaturalVec},
-  {"globalToNatural", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_57globalToNatural, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_56globalToNatural},
-  {"naturalToGlobal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_59naturalToGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_58naturalToGlobal},
-  {"getAO", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_61getAO, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_60getAO},
-  {"getScatter", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_63getScatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_62getScatter},
-  {"setRefinementFactor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_65setRefinementFactor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_64setRefinementFactor},
-  {"getRefinementFactor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_67getRefinementFactor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_66getRefinementFactor},
-  {"setInterpolationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_69setInterpolationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_68setInterpolationType},
-  {"getInterpolationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_71getInterpolationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_70getInterpolationType},
-  {"setElementType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_73setElementType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_72setElementType},
-  {"getElementType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_75getElementType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_74getElementType},
-  {"getElements", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_77getElements, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_76getElements},
+  {"setFieldName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_47setFieldName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_46setFieldName},
+  {"getFieldName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_49getFieldName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_48getFieldName},
+  {"getVecArray", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_51getVecArray, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_50getVecArray},
+  {"setUniformCoordinates", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_53setUniformCoordinates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates},
+  {"setCoordinateName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_55setCoordinateName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_54setCoordinateName},
+  {"getCoordinateName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_57getCoordinateName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_56getCoordinateName},
+  {"getBoundingBox", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_59getBoundingBox, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_58getBoundingBox},
+  {"getLocalBoundingBox", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_61getLocalBoundingBox, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_60getLocalBoundingBox},
+  {"createNaturalVec", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_63createNaturalVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_62createNaturalVec},
+  {"globalToNatural", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_65globalToNatural, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_64globalToNatural},
+  {"naturalToGlobal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_67naturalToGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_66naturalToGlobal},
+  {"getAO", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_69getAO, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_68getAO},
+  {"getScatter", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_71getScatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_70getScatter},
+  {"setRefinementFactor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_73setRefinementFactor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_72setRefinementFactor},
+  {"getRefinementFactor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_75getRefinementFactor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_74getRefinementFactor},
+  {"setInterpolationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_77setInterpolationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_76setInterpolationType},
+  {"getInterpolationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_79getInterpolationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_78getInterpolationType},
+  {"setElementType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_81setElementType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_80setElementType},
+  {"getElementType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_83getElementType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_82getElementType},
+  {"getElements", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4DMDA_85getElements, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4DMDA_84getElements},
   {0, 0, 0, 0}
 };
 
 static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_DMDA[] = {
-  {(char *)"dim", __pyx_getprop_8petsc4py_5PETSc_4DMDA_dim, 0, 0, 0},
-  {(char *)"dof", __pyx_getprop_8petsc4py_5PETSc_4DMDA_dof, 0, 0, 0},
-  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_4DMDA_sizes, 0, 0, 0},
-  {(char *)"proc_sizes", __pyx_getprop_8petsc4py_5PETSc_4DMDA_proc_sizes, 0, 0, 0},
-  {(char *)"boundary_type", __pyx_getprop_8petsc4py_5PETSc_4DMDA_boundary_type, 0, 0, 0},
-  {(char *)"stencil", __pyx_getprop_8petsc4py_5PETSc_4DMDA_stencil, 0, 0, 0},
-  {(char *)"stencil_type", __pyx_getprop_8petsc4py_5PETSc_4DMDA_stencil_type, 0, 0, 0},
-  {(char *)"stencil_width", __pyx_getprop_8petsc4py_5PETSc_4DMDA_stencil_width, 0, 0, 0},
-  {(char *)"ranges", __pyx_getprop_8petsc4py_5PETSc_4DMDA_ranges, 0, 0, 0},
-  {(char *)"ghost_ranges", __pyx_getprop_8petsc4py_5PETSc_4DMDA_ghost_ranges, 0, 0, 0},
-  {(char *)"corners", __pyx_getprop_8petsc4py_5PETSc_4DMDA_corners, 0, 0, 0},
-  {(char *)"ghost_corners", __pyx_getprop_8petsc4py_5PETSc_4DMDA_ghost_corners, 0, 0, 0},
+  {(char *)"dim", __pyx_getprop_8petsc4py_5PETSc_4DMDA_dim, 0, (char *)0, 0},
+  {(char *)"dof", __pyx_getprop_8petsc4py_5PETSc_4DMDA_dof, 0, (char *)0, 0},
+  {(char *)"sizes", __pyx_getprop_8petsc4py_5PETSc_4DMDA_sizes, 0, (char *)0, 0},
+  {(char *)"proc_sizes", __pyx_getprop_8petsc4py_5PETSc_4DMDA_proc_sizes, 0, (char *)0, 0},
+  {(char *)"boundary_type", __pyx_getprop_8petsc4py_5PETSc_4DMDA_boundary_type, 0, (char *)0, 0},
+  {(char *)"stencil", __pyx_getprop_8petsc4py_5PETSc_4DMDA_stencil, 0, (char *)0, 0},
+  {(char *)"stencil_type", __pyx_getprop_8petsc4py_5PETSc_4DMDA_stencil_type, 0, (char *)0, 0},
+  {(char *)"stencil_width", __pyx_getprop_8petsc4py_5PETSc_4DMDA_stencil_width, 0, (char *)0, 0},
+  {(char *)"ranges", __pyx_getprop_8petsc4py_5PETSc_4DMDA_ranges, 0, (char *)0, 0},
+  {(char *)"ghost_ranges", __pyx_getprop_8petsc4py_5PETSc_4DMDA_ghost_ranges, 0, (char *)0, 0},
+  {(char *)"corners", __pyx_getprop_8petsc4py_5PETSc_4DMDA_corners, 0, (char *)0, 0},
+  {(char *)"ghost_corners", __pyx_getprop_8petsc4py_5PETSc_4DMDA_ghost_corners, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -240876,8 +243458,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_DMDA = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -240963,48 +243546,35 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_DMPlex[] = {
   {"orient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_55orient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_54orient},
   {"getCellNumbering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_57getCellNumbering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_56getCellNumbering},
   {"getVertexNumbering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_59getVertexNumbering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering},
-  {"getNumLabels", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_61getNumLabels, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_60getNumLabels},
-  {"getLabelName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_63getLabelName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_62getLabelName},
-  {"hasLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_65hasLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_64hasLabel},
-  {"createLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_67createLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_66createLabel},
-  {"removeLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_69removeLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_68removeLabel},
-  {"getLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_70getLabelValue},
-  {"setLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_73setLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_72setLabelValue},
-  {"clearLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_75clearLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_74clearLabelValue},
-  {"getLabelSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_77getLabelSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_76getLabelSize},
-  {"getLabelIdIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_79getLabelIdIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_78getLabelIdIS},
-  {"setLabelOutput", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setLabelOutput, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_80setLabelOutput},
-  {"getLabelOutput", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_83getLabelOutput, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_82getLabelOutput},
-  {"getStratumSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_85getStratumSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_84getStratumSize},
-  {"getStratumIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_87getStratumIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_86getStratumIS},
-  {"clearLabelStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_89clearLabelStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_88clearLabelStratum},
-  {"getDepth", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_91getDepth, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_90getDepth},
-  {"getDepthStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_93getDepthStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_92getDepthStratum},
-  {"getHeightStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_95getHeightStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_94getHeightStratum},
-  {"getMeet", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_97getMeet, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_96getMeet},
-  {"getJoin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_99getJoin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_98getJoin},
-  {"getTransitiveClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_101getTransitiveClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_100getTransitiveClosure},
-  {"vecGetClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_103vecGetClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_102vecGetClosure},
-  {"generate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_105generate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_104generate},
-  {"setTriangleOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_107setTriangleOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_106setTriangleOptions},
-  {"setTetGenOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setTetGenOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_108setTetGenOptions},
-  {"createSquareBoundary", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_111createSquareBoundary, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_110createSquareBoundary},
-  {"createCubeBoundary", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_113createCubeBoundary, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_112createCubeBoundary},
-  {"markBoundaryFaces", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_115markBoundaryFaces, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_114markBoundaryFaces},
-  {"setAdjacencyUseCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_117setAdjacencyUseCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_116setAdjacencyUseCone},
-  {"setAdjacencyUseClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_119setAdjacencyUseClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_118setAdjacencyUseClosure},
-  {"getPartitioner", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_121getPartitioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_120getPartitioner},
-  {"distribute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_123distribute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_122distribute},
-  {"distributeOverlap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_125distributeOverlap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_124distributeOverlap},
-  {"createCoarsePointIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_127createCoarsePointIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_126createCoarsePointIS},
-  {"createSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_129createSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_128createSection},
-  {"setRefinementUniform", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_131setRefinementUniform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_130setRefinementUniform},
-  {"getRefinementUniform", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_133getRefinementUniform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_132getRefinementUniform},
-  {"setRefinementLimit", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_135setRefinementLimit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_134setRefinementLimit},
-  {"getRefinementLimit", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_137getRefinementLimit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_136getRefinementLimit},
-  {"getOrdering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_139getOrdering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_138getOrdering},
-  {"permute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_141permute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_140permute},
-  {"computeCellGeometryFVM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_143computeCellGeometryFVM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_142computeCellGeometryFVM},
+  {"createPointNumbering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_61createPointNumbering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_60createPointNumbering},
+  {"getDepth", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_63getDepth, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_62getDepth},
+  {"getDepthStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepthStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_64getDepthStratum},
+  {"getHeightStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getHeightStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_66getHeightStratum},
+  {"getMeet", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getMeet, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_68getMeet},
+  {"getJoin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getJoin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_70getJoin},
+  {"getTransitiveClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getTransitiveClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure},
+  {"vecGetClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_75vecGetClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_74vecGetClosure},
+  {"generate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_77generate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_76generate},
+  {"setTriangleOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_79setTriangleOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions},
+  {"setTetGenOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setTetGenOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions},
+  {"createSquareBoundary", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_83createSquareBoundary, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary},
+  {"createCubeBoundary", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_85createCubeBoundary, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary},
+  {"markBoundaryFaces", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_87markBoundaryFaces, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces},
+  {"setAdjacencyUseCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setAdjacencyUseCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_88setAdjacencyUseCone},
+  {"setAdjacencyUseClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_91setAdjacencyUseClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_90setAdjacencyUseClosure},
+  {"getPartitioner", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_93getPartitioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_92getPartitioner},
+  {"distribute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_95distribute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_94distribute},
+  {"distributeOverlap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_97distributeOverlap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_96distributeOverlap},
+  {"distributeField", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_98distributeField},
+  {"createCoarsePointIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_101createCoarsePointIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS},
+  {"createSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_102createSection},
+  {"setRefinementUniform", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setRefinementUniform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_104setRefinementUniform},
+  {"getRefinementUniform", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_107getRefinementUniform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform},
+  {"setRefinementLimit", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setRefinementLimit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_108setRefinementLimit},
+  {"getRefinementLimit", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_111getRefinementLimit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit},
+  {"getOrdering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getOrdering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_112getOrdering},
+  {"permute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_115permute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_114permute},
+  {"computeCellGeometryFVM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_117computeCellGeometryFVM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM},
   {0, 0, 0, 0}
 };
 
@@ -241019,8 +243589,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_DMPlex = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -241100,8 +243671,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_DMComposite = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -241175,6 +243747,7 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_DMShell[] = {
   {"setCreateInterpolation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_31setCreateInterpolation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation},
   {"setCreateInjection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_33setCreateInjection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_32setCreateInjection},
   {"setCreateFieldDecomposition", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateFieldDecomposition, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecomposition},
+  {"setCreateSubDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateSubDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_36setCreateSubDM},
   {0, 0, 0, 0}
 };
 
@@ -241189,8 +243762,9 @@ static PyTypeObject __pyx_type_8petsc4py_5PETSc_DMShell = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #else
-  0, /*reserved*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -241274,10 +243848,10 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_AIJCUSP, __pyx_k_AIJCUSP, sizeof(__pyx_k_AIJCUSP), 0, 0, 1, 1},
   {&__pyx_n_s_AIJCUSPARSE, __pyx_k_AIJCUSPARSE, sizeof(__pyx_k_AIJCUSPARSE), 0, 0, 1, 1},
   {&__pyx_n_s_AIJPERM, __pyx_k_AIJPERM, sizeof(__pyx_k_AIJPERM), 0, 0, 1, 1},
-  {&__pyx_n_s_AIJPTHREAD, __pyx_k_AIJPTHREAD, sizeof(__pyx_k_AIJPTHREAD), 0, 0, 1, 1},
   {&__pyx_n_s_AIJVIENNACL, __pyx_k_AIJVIENNACL, sizeof(__pyx_k_AIJVIENNACL), 0, 0, 1, 1},
   {&__pyx_n_s_AINVCUSP, __pyx_k_AINVCUSP, sizeof(__pyx_k_AINVCUSP), 0, 0, 1, 1},
   {&__pyx_n_s_ALPHA, __pyx_k_ALPHA, sizeof(__pyx_k_ALPHA), 0, 0, 1, 1},
+  {&__pyx_n_s_ALPHA2, __pyx_k_ALPHA2, sizeof(__pyx_k_ALPHA2), 0, 0, 1, 1},
   {&__pyx_n_s_ALWAYS, __pyx_k_ALWAYS, sizeof(__pyx_k_ALWAYS), 0, 0, 1, 1},
   {&__pyx_n_s_AMD, __pyx_k_AMD, sizeof(__pyx_k_AMD), 0, 0, 1, 1},
   {&__pyx_n_s_ANDERSON, __pyx_k_ANDERSON, sizeof(__pyx_k_ANDERSON), 0, 0, 1, 1},
@@ -241305,6 +243879,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_ASCII_VTK, __pyx_k_ASCII_VTK, sizeof(__pyx_k_ASCII_VTK), 0, 0, 1, 1},
   {&__pyx_n_s_ASCII_VTK_CELL, __pyx_k_ASCII_VTK_CELL, sizeof(__pyx_k_ASCII_VTK_CELL), 0, 0, 1, 1},
   {&__pyx_n_s_ASCII_VTK_COORDS, __pyx_k_ASCII_VTK_COORDS, sizeof(__pyx_k_ASCII_VTK_COORDS), 0, 0, 1, 1},
+  {&__pyx_n_s_ASCII_XML, __pyx_k_ASCII_XML, sizeof(__pyx_k_ASCII_XML), 0, 0, 1, 1},
   {&__pyx_n_s_ASFLS, __pyx_k_ASFLS, sizeof(__pyx_k_ASFLS), 0, 0, 1, 1},
   {&__pyx_n_s_ASILS, __pyx_k_ASILS, sizeof(__pyx_k_ASILS), 0, 0, 1, 1},
   {&__pyx_n_s_ASM, __pyx_k_ASM, sizeof(__pyx_k_ASM), 0, 0, 1, 1},
@@ -241321,6 +243896,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_BCGS, __pyx_k_BCGS, sizeof(__pyx_k_BCGS), 0, 0, 1, 1},
   {&__pyx_n_s_BCGSL, __pyx_k_BCGSL, sizeof(__pyx_k_BCGSL), 0, 0, 1, 1},
   {&__pyx_n_s_BDDC, __pyx_k_BDDC, sizeof(__pyx_k_BDDC), 0, 0, 1, 1},
+  {&__pyx_n_s_BDF, __pyx_k_BDF, sizeof(__pyx_k_BDF), 0, 0, 1, 1},
   {&__pyx_n_s_BE, __pyx_k_BE, sizeof(__pyx_k_BE), 0, 0, 1, 1},
   {&__pyx_n_s_BEULER, __pyx_k_BEULER, sizeof(__pyx_k_BEULER), 0, 0, 1, 1},
   {&__pyx_n_s_BFBT, __pyx_k_BFBT, sizeof(__pyx_k_BFBT), 0, 0, 1, 1},
@@ -241341,6 +243917,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_C, __pyx_k_C, sizeof(__pyx_k_C), 0, 0, 1, 1},
   {&__pyx_n_s_CARTESIAN, __pyx_k_CARTESIAN, sizeof(__pyx_k_CARTESIAN), 0, 0, 1, 1},
   {&__pyx_n_s_CG, __pyx_k_CG, sizeof(__pyx_k_CG), 0, 0, 1, 1},
+  {&__pyx_n_s_CGLS, __pyx_k_CGLS, sizeof(__pyx_k_CGLS), 0, 0, 1, 1},
   {&__pyx_n_s_CGNE, __pyx_k_CGNE, sizeof(__pyx_k_CGNE), 0, 0, 1, 1},
   {&__pyx_n_s_CGS, __pyx_k_CGS, sizeof(__pyx_k_CGS), 0, 0, 1, 1},
   {&__pyx_n_s_CHACO, __pyx_k_CHACO, sizeof(__pyx_k_CHACO), 0, 0, 1, 1},
@@ -241357,10 +243934,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_CONVERGED_ATOL_NORMAL, __pyx_k_CONVERGED_ATOL_NORMAL, sizeof(__pyx_k_CONVERGED_ATOL_NORMAL), 0, 0, 1, 1},
   {&__pyx_n_s_CONVERGED_CG_CONSTRAINED, __pyx_k_CONVERGED_CG_CONSTRAINED, sizeof(__pyx_k_CONVERGED_CG_CONSTRAINED), 0, 0, 1, 1},
   {&__pyx_n_s_CONVERGED_CG_NEG_CURVE, __pyx_k_CONVERGED_CG_NEG_CURVE, sizeof(__pyx_k_CONVERGED_CG_NEG_CURVE), 0, 0, 1, 1},
-  {&__pyx_n_s_CONVERGED_FATOL, __pyx_k_CONVERGED_FATOL, sizeof(__pyx_k_CONVERGED_FATOL), 0, 0, 1, 1},
+  {&__pyx_n_s_CONVERGED_EVENT, __pyx_k_CONVERGED_EVENT, sizeof(__pyx_k_CONVERGED_EVENT), 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_FRTOL, __pyx_k_CONVERGED_FRTOL, sizeof(__pyx_k_CONVERGED_FRTOL), 0, 0, 1, 1},
   {&__pyx_n_s_CONVERGED_GATOL, __pyx_k_CONVERGED_GATOL, sizeof(__pyx_k_CONVERGED_GATOL), 0, 0, 1, 1},
   {&__pyx_n_s_CONVERGED_GRTOL, __pyx_k_CONVERGED_GRTOL, sizeof(__pyx_k_CONVERGED_GRTOL), 0, 0, 1, 1},
   {&__pyx_n_s_CONVERGED_GTTOL, __pyx_k_CONVERGED_GTTOL, sizeof(__pyx_k_CONVERGED_GTTOL), 0, 0, 1, 1},
@@ -241457,10 +244033,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_Error___repr, __pyx_k_Error___repr, sizeof(__pyx_k_Error___repr), 0, 0, 1, 1},
   {&__pyx_n_s_Error___str, __pyx_k_Error___str, sizeof(__pyx_k_Error___str), 0, 0, 1, 1},
   {&__pyx_n_s_Event, __pyx_k_Event, sizeof(__pyx_k_Event), 0, 0, 1, 1},
+  {&__pyx_n_s_ExactFinalTime, __pyx_k_ExactFinalTime, sizeof(__pyx_k_ExactFinalTime), 0, 0, 1, 1},
   {&__pyx_n_s_ExactFinalTimeOption, __pyx_k_ExactFinalTimeOption, sizeof(__pyx_k_ExactFinalTimeOption), 0, 0, 1, 1},
   {&__pyx_n_s_FAS, __pyx_k_FAS, sizeof(__pyx_k_FAS), 0, 0, 1, 1},
   {&__pyx_n_s_FBCGS, __pyx_k_FBCGS, sizeof(__pyx_k_FBCGS), 0, 0, 1, 1},
   {&__pyx_n_s_FBCGSR, __pyx_k_FBCGSR, sizeof(__pyx_k_FBCGSR), 0, 0, 1, 1},
+  {&__pyx_n_s_FCG, __pyx_k_FCG, sizeof(__pyx_k_FCG), 0, 0, 1, 1},
   {&__pyx_n_s_FE, __pyx_k_FE, sizeof(__pyx_k_FE), 0, 0, 1, 1},
   {&__pyx_n_s_FFT, __pyx_k_FFT, sizeof(__pyx_k_FFT), 0, 0, 1, 1},
   {&__pyx_n_s_FFTW, __pyx_k_FFTW, sizeof(__pyx_k_FFTW), 0, 0, 1, 1},
@@ -241494,6 +244072,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_GHOSTED, __pyx_k_GHOSTED, sizeof(__pyx_k_GHOSTED), 0, 0, 1, 1},
   {&__pyx_n_s_GL, __pyx_k_GL, sizeof(__pyx_k_GL), 0, 0, 1, 1},
   {&__pyx_n_s_GLMapType, __pyx_k_GLMapType, sizeof(__pyx_k_GLMapType), 0, 0, 1, 1},
+  {&__pyx_n_s_GLOBAL_MAX, __pyx_k_GLOBAL_MAX, sizeof(__pyx_k_GLOBAL_MAX), 0, 0, 1, 1},
+  {&__pyx_n_s_GLOBAL_SUM, __pyx_k_GLOBAL_SUM, sizeof(__pyx_k_GLOBAL_SUM), 0, 0, 1, 1},
   {&__pyx_n_s_GLTR, __pyx_k_GLTR, sizeof(__pyx_k_GLTR), 0, 0, 1, 1},
   {&__pyx_n_s_GMRES, __pyx_k_GMRES, sizeof(__pyx_k_GMRES), 0, 0, 1, 1},
   {&__pyx_n_s_GPCG, __pyx_k_GPCG, sizeof(__pyx_k_GPCG), 0, 0, 1, 1},
@@ -241536,12 +244116,15 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_ISType, __pyx_k_ISType, sizeof(__pyx_k_ISType), 0, 0, 1, 1},
   {&__pyx_n_s_ITERATING, __pyx_k_ITERATING, sizeof(__pyx_k_ITERATING), 0, 0, 1, 1},
   {&__pyx_kp_s_I_0_is_d_expected_d, __pyx_k_I_0_is_d_expected_d, sizeof(__pyx_k_I_0_is_d_expected_d), 0, 0, 1, 0},
+  {&__pyx_n_s_InfoType, __pyx_k_InfoType, sizeof(__pyx_k_InfoType), 0, 0, 1, 1},
   {&__pyx_n_s_InsertMode, __pyx_k_InsertMode, sizeof(__pyx_k_InsertMode), 0, 0, 1, 1},
   {&__pyx_n_s_IntType, __pyx_k_IntType, sizeof(__pyx_k_IntType), 0, 0, 1, 1},
   {&__pyx_n_s_InterpolationType, __pyx_k_InterpolationType, sizeof(__pyx_k_InterpolationType), 0, 0, 1, 1},
+  {&__pyx_kp_s_Invalid_mode_expected_rw_r_or_w, __pyx_k_Invalid_mode_expected_rw_r_or_w, sizeof(__pyx_k_Invalid_mode_expected_rw_r_or_w), 0, 0, 1, 0},
   {&__pyx_n_s_J, __pyx_k_J, sizeof(__pyx_k_J), 0, 0, 1, 1},
   {&__pyx_n_s_JACOBI, __pyx_k_JACOBI, sizeof(__pyx_k_JACOBI), 0, 0, 1, 1},
   {&__pyx_n_s_KACZMARZ, __pyx_k_KACZMARZ, sizeof(__pyx_k_KACZMARZ), 0, 0, 1, 1},
+  {&__pyx_n_s_KASKADE, __pyx_k_KASKADE, sizeof(__pyx_k_KASKADE), 0, 0, 1, 1},
   {&__pyx_n_s_KEEP_NONZERO_PATTERN, __pyx_k_KEEP_NONZERO_PATTERN, sizeof(__pyx_k_KEEP_NONZERO_PATTERN), 0, 0, 1, 1},
   {&__pyx_n_s_KSP, __pyx_k_KSP, sizeof(__pyx_k_KSP), 0, 0, 1, 1},
   {&__pyx_n_s_KSPConvergedReason, __pyx_k_KSPConvergedReason, sizeof(__pyx_k_KSPConvergedReason), 0, 0, 1, 1},
@@ -241556,9 +244139,11 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_LGMRES, __pyx_k_LGMRES, sizeof(__pyx_k_LGMRES), 0, 0, 1, 1},
   {&__pyx_n_s_LINEAR, __pyx_k_LINEAR, sizeof(__pyx_k_LINEAR), 0, 0, 1, 1},
   {&__pyx_n_s_LMVM, __pyx_k_LMVM, sizeof(__pyx_k_LMVM), 0, 0, 1, 1},
+  {&__pyx_n_s_LOCAL, __pyx_k_LOCAL, sizeof(__pyx_k_LOCAL), 0, 0, 1, 1},
   {&__pyx_n_s_LOCALREF, __pyx_k_LOCALREF, sizeof(__pyx_k_LOCALREF), 0, 0, 1, 1},
   {&__pyx_n_s_LOCAL_BACKWARD_SWEEP, __pyx_k_LOCAL_BACKWARD_SWEEP, sizeof(__pyx_k_LOCAL_BACKWARD_SWEEP), 0, 0, 1, 1},
   {&__pyx_n_s_LOCAL_FORWARD_SWEEP, __pyx_k_LOCAL_FORWARD_SWEEP, sizeof(__pyx_k_LOCAL_FORWARD_SWEEP), 0, 0, 1, 1},
+  {&__pyx_n_s_LOCAL_SYMMETRIC_SWEEP, __pyx_k_LOCAL_SYMMETRIC_SWEEP, sizeof(__pyx_k_LOCAL_SYMMETRIC_SWEEP), 0, 0, 1, 1},
   {&__pyx_n_s_LOWER, __pyx_k_LOWER, sizeof(__pyx_k_LOWER), 0, 0, 1, 1},
   {&__pyx_n_s_LRC, __pyx_k_LRC, sizeof(__pyx_k_LRC), 0, 0, 1, 1},
   {&__pyx_n_s_LSC, __pyx_k_LSC, sizeof(__pyx_k_LSC), 0, 0, 1, 1},
@@ -241577,6 +244162,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_MEMORYSCALABLE, __pyx_k_MEMORYSCALABLE, sizeof(__pyx_k_MEMORYSCALABLE), 0, 0, 1, 1},
   {&__pyx_n_s_MFFD, __pyx_k_MFFD, sizeof(__pyx_k_MFFD), 0, 0, 1, 1},
   {&__pyx_n_s_MG, __pyx_k_MG, sizeof(__pyx_k_MG), 0, 0, 1, 1},
+  {&__pyx_n_s_MGType, __pyx_k_MGType, sizeof(__pyx_k_MGType), 0, 0, 1, 1},
+  {&__pyx_n_s_MIMEX, __pyx_k_MIMEX, sizeof(__pyx_k_MIMEX), 0, 0, 1, 1},
   {&__pyx_n_s_MINRES, __pyx_k_MINRES, sizeof(__pyx_k_MINRES), 0, 0, 1, 1},
   {&__pyx_n_s_MIRROR, __pyx_k_MIRROR, sizeof(__pyx_k_MIRROR), 0, 0, 1, 1},
   {&__pyx_n_s_ML, __pyx_k_ML, sizeof(__pyx_k_ML), 0, 0, 1, 1},
@@ -241594,7 +244181,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_MPICUSP, __pyx_k_MPICUSP, sizeof(__pyx_k_MPICUSP), 0, 0, 1, 1},
   {&__pyx_n_s_MPIDENSE, __pyx_k_MPIDENSE, sizeof(__pyx_k_MPIDENSE), 0, 0, 1, 1},
   {&__pyx_n_s_MPIMAIJ, __pyx_k_MPIMAIJ, sizeof(__pyx_k_MPIMAIJ), 0, 0, 1, 1},
-  {&__pyx_n_s_MPIPTHREAD, __pyx_k_MPIPTHREAD, sizeof(__pyx_k_MPIPTHREAD), 0, 0, 1, 1},
   {&__pyx_n_s_MPISBAIJ, __pyx_k_MPISBAIJ, sizeof(__pyx_k_MPISBAIJ), 0, 0, 1, 1},
   {&__pyx_n_s_MPISBSTRM, __pyx_k_MPISBSTRM, sizeof(__pyx_k_MPISBSTRM), 0, 0, 1, 1},
   {&__pyx_n_s_MPIVIENNACL, __pyx_k_MPIVIENNACL, sizeof(__pyx_k_MPIVIENNACL), 0, 0, 1, 1},
@@ -241603,6 +244189,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_MapType, __pyx_k_MapType, sizeof(__pyx_k_MapType), 0, 0, 1, 1},
   {&__pyx_n_s_MatAssemblyType, __pyx_k_MatAssemblyType, sizeof(__pyx_k_MatAssemblyType), 0, 0, 1, 1},
   {&__pyx_n_s_MatFactorShiftType, __pyx_k_MatFactorShiftType, sizeof(__pyx_k_MatFactorShiftType), 0, 0, 1, 1},
+  {&__pyx_n_s_MatInfoType, __pyx_k_MatInfoType, sizeof(__pyx_k_MatInfoType), 0, 0, 1, 1},
   {&__pyx_n_s_MatOption, __pyx_k_MatOption, sizeof(__pyx_k_MatOption), 0, 0, 1, 1},
   {&__pyx_n_s_MatOrderingType, __pyx_k_MatOrderingType, sizeof(__pyx_k_MatOrderingType), 0, 0, 1, 1},
   {&__pyx_n_s_MatSORType, __pyx_k_MatSORType, sizeof(__pyx_k_MatSORType), 0, 0, 1, 1},
@@ -241642,6 +244229,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_NONLINEAR, __pyx_k_NONLINEAR, sizeof(__pyx_k_NONLINEAR), 0, 0, 1, 1},
   {&__pyx_n_s_NONZERO, __pyx_k_NONZERO, sizeof(__pyx_k_NONZERO), 0, 0, 1, 1},
   {&__pyx_n_s_NORMAL, __pyx_k_NORMAL, sizeof(__pyx_k_NORMAL), 0, 0, 1, 1},
+  {&__pyx_n_s_NORMALHERMITIAN, __pyx_k_NORMALHERMITIAN, sizeof(__pyx_k_NORMALHERMITIAN), 0, 0, 1, 1},
   {&__pyx_n_s_NORM_1, __pyx_k_NORM_1, sizeof(__pyx_k_NORM_1), 0, 0, 1, 1},
   {&__pyx_n_s_NORM_1_AND_2, __pyx_k_NORM_1_AND_2, sizeof(__pyx_k_NORM_1_AND_2), 0, 0, 1, 1},
   {&__pyx_n_s_NORM_2, __pyx_k_NORM_2, sizeof(__pyx_k_NORM_2), 0, 0, 1, 1},
@@ -241689,6 +244277,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_PCFieldSplitSchurPreType, __pyx_k_PCFieldSplitSchurPreType, sizeof(__pyx_k_PCFieldSplitSchurPreType), 0, 0, 1, 1},
   {&__pyx_n_s_PCGAMGType, __pyx_k_PCGAMGType, sizeof(__pyx_k_PCGAMGType), 0, 0, 1, 1},
   {&__pyx_n_s_PCGASMType, __pyx_k_PCGASMType, sizeof(__pyx_k_PCGASMType), 0, 0, 1, 1},
+  {&__pyx_n_s_PCMGType, __pyx_k_PCMGType, sizeof(__pyx_k_PCMGType), 0, 0, 1, 1},
   {&__pyx_n_s_PCSide, __pyx_k_PCSide, sizeof(__pyx_k_PCSide), 0, 0, 1, 1},
   {&__pyx_n_s_PCType, __pyx_k_PCType, sizeof(__pyx_k_PCType), 0, 0, 1, 1},
   {&__pyx_n_s_PD, __pyx_k_PD, sizeof(__pyx_k_PD), 0, 0, 1, 1},
@@ -241698,14 +244287,18 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_PGMRES, __pyx_k_PGMRES, sizeof(__pyx_k_PGMRES), 0, 0, 1, 1},
   {&__pyx_n_s_PINFINITY, __pyx_k_PINFINITY, sizeof(__pyx_k_PINFINITY), 0, 0, 1, 1},
   {&__pyx_n_s_PIPECG, __pyx_k_PIPECG, sizeof(__pyx_k_PIPECG), 0, 0, 1, 1},
+  {&__pyx_n_s_PIPECGRR, __pyx_k_PIPECGRR, sizeof(__pyx_k_PIPECGRR), 0, 0, 1, 1},
   {&__pyx_n_s_PIPECR, __pyx_k_PIPECR, sizeof(__pyx_k_PIPECR), 0, 0, 1, 1},
+  {&__pyx_n_s_PIPEFCG, __pyx_k_PIPEFCG, sizeof(__pyx_k_PIPEFCG), 0, 0, 1, 1},
+  {&__pyx_n_s_PIPEFGMRES, __pyx_k_PIPEFGMRES, sizeof(__pyx_k_PIPEFGMRES), 0, 0, 1, 1},
+  {&__pyx_n_s_PIPEGCR, __pyx_k_PIPEGCR, sizeof(__pyx_k_PIPEGCR), 0, 0, 1, 1},
   {&__pyx_n_s_PLEX, __pyx_k_PLEX, sizeof(__pyx_k_PLEX), 0, 0, 1, 1},
   {&__pyx_n_s_POSITIVE_DEFINITE, __pyx_k_POSITIVE_DEFINITE, sizeof(__pyx_k_POSITIVE_DEFINITE), 0, 0, 1, 1},
   {&__pyx_n_s_POUNDERS, __pyx_k_POUNDERS, sizeof(__pyx_k_POUNDERS), 0, 0, 1, 1},
+  {&__pyx_n_s_PREALLOCATOR, __pyx_k_PREALLOCATOR, sizeof(__pyx_k_PREALLOCATOR), 0, 0, 1, 1},
   {&__pyx_n_s_PRECONDITIONED, __pyx_k_PRECONDITIONED, sizeof(__pyx_k_PRECONDITIONED), 0, 0, 1, 1},
   {&__pyx_n_s_PREONLY, __pyx_k_PREONLY, sizeof(__pyx_k_PREONLY), 0, 0, 1, 1},
   {&__pyx_n_s_PSEUDO, __pyx_k_PSEUDO, sizeof(__pyx_k_PSEUDO), 0, 0, 1, 1},
-  {&__pyx_n_s_PTHREAD, __pyx_k_PTHREAD, sizeof(__pyx_k_PTHREAD), 0, 0, 1, 1},
   {&__pyx_n_s_PYTHON, __pyx_k_PYTHON, sizeof(__pyx_k_PYTHON), 0, 0, 1, 1},
   {&__pyx_n_s_PartitionerType, __pyx_k_PartitionerType, sizeof(__pyx_k_PartitionerType), 0, 0, 1, 1},
   {&__pyx_kp_u_Portable_Extensible_Toolkit_for, __pyx_k_Portable_Extensible_Toolkit_for, sizeof(__pyx_k_Portable_Extensible_Toolkit_for), 0, 1, 0, 0},
@@ -241721,6 +244314,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_R, __pyx_k_R, sizeof(__pyx_k_R), 0, 0, 1, 1},
   {&__pyx_n_s_RAND, __pyx_k_RAND, sizeof(__pyx_k_RAND), 0, 0, 1, 1},
   {&__pyx_n_s_RAND48, __pyx_k_RAND48, sizeof(__pyx_k_RAND48), 0, 0, 1, 1},
+  {&__pyx_n_s_RANDER48, __pyx_k_RANDER48, sizeof(__pyx_k_RANDER48), 0, 0, 1, 1},
   {&__pyx_n_s_RCM, __pyx_k_RCM, sizeof(__pyx_k_RCM), 0, 0, 1, 1},
   {&__pyx_n_s_READ, __pyx_k_READ, sizeof(__pyx_k_READ), 0, 0, 1, 1},
   {&__pyx_n_s_REDISTRIBUTE, __pyx_k_REDISTRIBUTE, sizeof(__pyx_k_REDISTRIBUTE), 0, 0, 1, 1},
@@ -241765,7 +244359,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_SEQAIJCUSP, __pyx_k_SEQAIJCUSP, sizeof(__pyx_k_SEQAIJCUSP), 0, 0, 1, 1},
   {&__pyx_n_s_SEQAIJCUSPARSE, __pyx_k_SEQAIJCUSPARSE, sizeof(__pyx_k_SEQAIJCUSPARSE), 0, 0, 1, 1},
   {&__pyx_n_s_SEQAIJPERM, __pyx_k_SEQAIJPERM, sizeof(__pyx_k_SEQAIJPERM), 0, 0, 1, 1},
-  {&__pyx_n_s_SEQAIJPTHREAD, __pyx_k_SEQAIJPTHREAD, sizeof(__pyx_k_SEQAIJPTHREAD), 0, 0, 1, 1},
   {&__pyx_n_s_SEQAIJVIENNACL, __pyx_k_SEQAIJVIENNACL, sizeof(__pyx_k_SEQAIJVIENNACL), 0, 0, 1, 1},
   {&__pyx_n_s_SEQBAIJ, __pyx_k_SEQBAIJ, sizeof(__pyx_k_SEQBAIJ), 0, 0, 1, 1},
   {&__pyx_n_s_SEQBSTRM, __pyx_k_SEQBSTRM, sizeof(__pyx_k_SEQBSTRM), 0, 0, 1, 1},
@@ -241773,7 +244366,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_SEQCUSP, __pyx_k_SEQCUSP, sizeof(__pyx_k_SEQCUSP), 0, 0, 1, 1},
   {&__pyx_n_s_SEQDENSE, __pyx_k_SEQDENSE, sizeof(__pyx_k_SEQDENSE), 0, 0, 1, 1},
   {&__pyx_n_s_SEQMAIJ, __pyx_k_SEQMAIJ, sizeof(__pyx_k_SEQMAIJ), 0, 0, 1, 1},
-  {&__pyx_n_s_SEQPTHREAD, __pyx_k_SEQPTHREAD, sizeof(__pyx_k_SEQPTHREAD), 0, 0, 1, 1},
   {&__pyx_n_s_SEQSBAIJ, __pyx_k_SEQSBAIJ, sizeof(__pyx_k_SEQSBAIJ), 0, 0, 1, 1},
   {&__pyx_n_s_SEQSBSTRM, __pyx_k_SEQSBSTRM, sizeof(__pyx_k_SEQSBSTRM), 0, 0, 1, 1},
   {&__pyx_n_s_SEQVIENNACL, __pyx_k_SEQVIENNACL, sizeof(__pyx_k_SEQVIENNACL), 0, 0, 1, 1},
@@ -241790,6 +244382,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_SPAI, __pyx_k_SPAI, sizeof(__pyx_k_SPAI), 0, 0, 1, 1},
   {&__pyx_n_s_SPD, __pyx_k_SPD, sizeof(__pyx_k_SPD), 0, 0, 1, 1},
   {&__pyx_n_s_SPECIAL, __pyx_k_SPECIAL, sizeof(__pyx_k_SPECIAL), 0, 0, 1, 1},
+  {&__pyx_n_s_SPECTRAL, __pyx_k_SPECTRAL, sizeof(__pyx_k_SPECTRAL), 0, 0, 1, 1},
   {&__pyx_n_s_SPRNG, __pyx_k_SPRNG, sizeof(__pyx_k_SPRNG), 0, 0, 1, 1},
   {&__pyx_n_s_SSFLS, __pyx_k_SSFLS, sizeof(__pyx_k_SSFLS), 0, 0, 1, 1},
   {&__pyx_n_s_SSILS, __pyx_k_SSILS, sizeof(__pyx_k_SSILS), 0, 0, 1, 1},
@@ -241807,6 +244400,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_SUBSET_OFF_PROC_ENTRIES, __pyx_k_SUBSET_OFF_PROC_ENTRIES, sizeof(__pyx_k_SUBSET_OFF_PROC_ENTRIES), 0, 0, 1, 1},
   {&__pyx_n_s_SUNDIALS, __pyx_k_SUNDIALS, sizeof(__pyx_k_SUNDIALS), 0, 0, 1, 1},
   {&__pyx_n_s_SVD, __pyx_k_SVD, sizeof(__pyx_k_SVD), 0, 0, 1, 1},
   {&__pyx_n_s_SYMMETRIC, __pyx_k_SYMMETRIC, sizeof(__pyx_k_SYMMETRIC), 0, 0, 1, 1},
@@ -241831,9 +244425,11 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_TAO_Solver_Termination_Reasons, __pyx_k_TAO_Solver_Termination_Reasons, sizeof(__pyx_k_TAO_Solver_Termination_Reasons), 0, 0, 1, 0},
   {&__pyx_kp_s_TAO_Solver_Types, __pyx_k_TAO_Solver_Types, sizeof(__pyx_k_TAO_Solver_Types), 0, 0, 1, 0},
   {&__pyx_n_s_TCQMR, __pyx_k_TCQMR, sizeof(__pyx_k_TCQMR), 0, 0, 1, 1},
+  {&__pyx_n_s_TELESCOPE, __pyx_k_TELESCOPE, sizeof(__pyx_k_TELESCOPE), 0, 0, 1, 1},
   {&__pyx_n_s_TEST, __pyx_k_TEST, sizeof(__pyx_k_TEST), 0, 0, 1, 1},
   {&__pyx_n_s_TFQMR, __pyx_k_TFQMR, sizeof(__pyx_k_TFQMR), 0, 0, 1, 1},
   {&__pyx_n_s_TFS, __pyx_k_TFS, sizeof(__pyx_k_TFS), 0, 0, 1, 1},
+  {&__pyx_n_s_TH, __pyx_k_TH, sizeof(__pyx_k_TH), 0, 0, 1, 1},
   {&__pyx_n_s_THETA, __pyx_k_THETA, sizeof(__pyx_k_THETA), 0, 0, 1, 1},
   {&__pyx_n_s_THIRD, __pyx_k_THIRD, sizeof(__pyx_k_THIRD), 0, 0, 1, 1},
   {&__pyx_n_s_THIRD_SIZE, __pyx_k_THIRD_SIZE, sizeof(__pyx_k_THIRD_SIZE), 0, 0, 1, 1},
@@ -241841,7 +244437,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_TRON, __pyx_k_TRON, sizeof(__pyx_k_TRON), 0, 0, 1, 1},
   {&__pyx_n_s_TSConvergedReason, __pyx_k_TSConvergedReason, sizeof(__pyx_k_TSConvergedReason), 0, 0, 1, 1},
   {&__pyx_n_s_TSEquationType, __pyx_k_TSEquationType, sizeof(__pyx_k_TSEquationType), 0, 0, 1, 1},
-  {&__pyx_n_s_TSExactFinalTimeOption, __pyx_k_TSExactFinalTimeOption, sizeof(__pyx_k_TSExactFinalTimeOption), 0, 0, 1, 1},
+  {&__pyx_n_s_TSExactFinalTime, __pyx_k_TSExactFinalTime, sizeof(__pyx_k_TSExactFinalTime), 0, 0, 1, 1},
+  {&__pyx_n_s_TSIRM, __pyx_k_TSIRM, sizeof(__pyx_k_TSIRM), 0, 0, 1, 1},
   {&__pyx_n_s_TSProblemType, __pyx_k_TSProblemType, sizeof(__pyx_k_TSProblemType), 0, 0, 1, 1},
   {&__pyx_n_s_TSType, __pyx_k_TSType, sizeof(__pyx_k_TSType), 0, 0, 1, 1},
   {&__pyx_n_s_TWIST, __pyx_k_TWIST, sizeof(__pyx_k_TWIST), 0, 0, 1, 1},
@@ -241873,6 +244470,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_ViewerFormat, __pyx_k_ViewerFormat, sizeof(__pyx_k_ViewerFormat), 0, 0, 1, 1},
   {&__pyx_n_s_ViewerType, __pyx_k_ViewerType, sizeof(__pyx_k_ViewerType), 0, 0, 1, 1},
   {&__pyx_n_s_W, __pyx_k_W, sizeof(__pyx_k_W), 0, 0, 1, 1},
+  {&__pyx_n_s_WBM, __pyx_k_WBM, sizeof(__pyx_k_WBM), 0, 0, 1, 1},
   {&__pyx_n_s_WINDOW, __pyx_k_WINDOW, sizeof(__pyx_k_WINDOW), 0, 0, 1, 1},
   {&__pyx_n_s_WRITE, __pyx_k_WRITE, sizeof(__pyx_k_WRITE), 0, 0, 1, 1},
   {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1},
@@ -241906,6 +244504,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_array_size_d_incompatible_with_v, __pyx_k_array_size_d_incompatible_with_v, sizeof(__pyx_k_array_size_d_incompatible_with_v), 0, 0, 1, 0},
   {&__pyx_n_s_array_w, __pyx_k_array_w, sizeof(__pyx_k_array_w), 0, 0, 1, 1},
   {&__pyx_n_s_asmtype, __pyx_k_asmtype, sizeof(__pyx_k_asmtype), 0, 0, 1, 1},
+  {&__pyx_n_s_assemblies, __pyx_k_assemblies, sizeof(__pyx_k_assemblies), 0, 0, 1, 1},
   {&__pyx_n_s_assembly, __pyx_k_assembly, sizeof(__pyx_k_assembly), 0, 0, 1, 1},
   {&__pyx_n_s_atol, __pyx_k_atol, sizeof(__pyx_k_atol), 0, 0, 1, 1},
   {&__pyx_n_s_attr, __pyx_k_attr, sizeof(__pyx_k_attr), 0, 0, 1, 1},
@@ -241923,6 +244522,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_begin_args, __pyx_k_begin_args, sizeof(__pyx_k_begin_args), 0, 0, 1, 1},
   {&__pyx_n_s_begin_kargs, __pyx_k_begin_kargs, sizeof(__pyx_k_begin_kargs), 0, 0, 1, 1},
   {&__pyx_n_s_beta, __pyx_k_beta, sizeof(__pyx_k_beta), 0, 0, 1, 1},
+  {&__pyx_n_s_block_size, __pyx_k_block_size, sizeof(__pyx_k_block_size), 0, 0, 1, 1},
   {&__pyx_kp_s_block_size_d_must_be_positive, __pyx_k_block_size_d_must_be_positive, sizeof(__pyx_k_block_size_d_must_be_positive), 0, 0, 1, 0},
   {&__pyx_kp_s_block_size_not_set, __pyx_k_block_size_not_set, sizeof(__pyx_k_block_size_not_set), 0, 0, 1, 0},
   {&__pyx_n_s_boundary, __pyx_k_boundary, sizeof(__pyx_k_boundary), 0, 0, 1, 1},
@@ -241939,8 +244539,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_cell_indices_must_have_two_dimen, __pyx_k_cell_indices_must_have_two_dimen, sizeof(__pyx_k_cell_indices_must_have_two_dimen), 0, 0, 1, 0},
   {&__pyx_n_s_cells, __pyx_k_cells, sizeof(__pyx_k_cells), 0, 0, 1, 1},
   {&__pyx_n_s_cgid, __pyx_k_cgid, sizeof(__pyx_k_cgid), 0, 0, 1, 1},
+  {&__pyx_n_s_citation, __pyx_k_citation, sizeof(__pyx_k_citation), 0, 0, 1, 1},
   {&__pyx_n_s_cmap, __pyx_k_cmap, sizeof(__pyx_k_cmap), 0, 0, 1, 1},
-  {&__pyx_n_s_coarsen_2, __pyx_k_coarsen_2, sizeof(__pyx_k_coarsen_2), 0, 0, 1, 1},
+  {&__pyx_n_s_coarsen, __pyx_k_coarsen, sizeof(__pyx_k_coarsen), 0, 0, 1, 1},
   {&__pyx_n_s_col, __pyx_k_col, sizeof(__pyx_k_col), 0, 0, 1, 1},
   {&__pyx_n_s_col_bsize, __pyx_k_col_bsize, sizeof(__pyx_k_col_bsize), 0, 0, 1, 1},
   {&__pyx_n_s_cols, __pyx_k_cols, sizeof(__pyx_k_cols), 0, 0, 1, 1},
@@ -241955,9 +244556,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_conePoint, __pyx_k_conePoint, sizeof(__pyx_k_conePoint), 0, 0, 1, 1},
   {&__pyx_n_s_conePos, __pyx_k_conePos, sizeof(__pyx_k_conePos), 0, 0, 1, 1},
   {&__pyx_n_s_constant, __pyx_k_constant, sizeof(__pyx_k_constant), 0, 0, 1, 1},
-  {&__pyx_n_s_constraints_2, __pyx_k_constraints_2, sizeof(__pyx_k_constraints_2), 0, 0, 1, 1},
+  {&__pyx_n_s_constraints, __pyx_k_constraints, sizeof(__pyx_k_constraints), 0, 0, 1, 1},
   {&__pyx_n_s_context, __pyx_k_context, sizeof(__pyx_k_context), 0, 0, 1, 1},
-  {&__pyx_n_s_converged_2, __pyx_k_converged_2, sizeof(__pyx_k_converged_2), 0, 0, 1, 1},
+  {&__pyx_n_s_converged, __pyx_k_converged, sizeof(__pyx_k_converged), 0, 0, 1, 1},
   {&__pyx_n_s_coordinates, __pyx_k_coordinates, sizeof(__pyx_k_coordinates), 0, 0, 1, 1},
   {&__pyx_kp_s_coordinates_must_have_two_dimens, __pyx_k_coordinates_must_have_two_dimens, sizeof(__pyx_k_coordinates_must_have_two_dimens), 0, 0, 1, 0},
   {&__pyx_n_s_coords, __pyx_k_coords, sizeof(__pyx_k_coords), 0, 0, 1, 1},
@@ -241978,10 +244579,11 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_createVecRight, __pyx_k_createVecRight, sizeof(__pyx_k_createVecRight), 0, 0, 1, 1},
   {&__pyx_n_s_createVecs, __pyx_k_createVecs, sizeof(__pyx_k_createVecs), 0, 0, 1, 1},
   {&__pyx_n_s_create_gvec, __pyx_k_create_gvec, sizeof(__pyx_k_create_gvec), 0, 0, 1, 1},
-  {&__pyx_n_s_create_injection_2, __pyx_k_create_injection_2, sizeof(__pyx_k_create_injection_2), 0, 0, 1, 1},
-  {&__pyx_n_s_create_interpolation_2, __pyx_k_create_interpolation_2, sizeof(__pyx_k_create_interpolation_2), 0, 0, 1, 1},
+  {&__pyx_n_s_create_injection, __pyx_k_create_injection, sizeof(__pyx_k_create_injection), 0, 0, 1, 1},
+  {&__pyx_n_s_create_interpolation, __pyx_k_create_interpolation, sizeof(__pyx_k_create_interpolation), 0, 0, 1, 1},
   {&__pyx_n_s_create_lvec, __pyx_k_create_lvec, sizeof(__pyx_k_create_lvec), 0, 0, 1, 1},
-  {&__pyx_n_s_create_matrix_2, __pyx_k_create_matrix_2, sizeof(__pyx_k_create_matrix_2), 0, 0, 1, 1},
+  {&__pyx_n_s_create_matrix, __pyx_k_create_matrix, sizeof(__pyx_k_create_matrix), 0, 0, 1, 1},
+  {&__pyx_n_s_create_subdm, __pyx_k_create_subdm, sizeof(__pyx_k_create_subdm), 0, 0, 1, 1},
   {&__pyx_n_s_crtol, __pyx_k_crtol, sizeof(__pyx_k_crtol), 0, 0, 1, 1},
   {&__pyx_n_s_csize, __pyx_k_csize, sizeof(__pyx_k_csize), 0, 0, 1, 1},
   {&__pyx_n_s_csr, __pyx_k_csr, sizeof(__pyx_k_csr), 0, 0, 1, 1},
@@ -242017,6 +244619,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_edges, __pyx_k_edges, sizeof(__pyx_k_edges), 0, 0, 1, 1},
   {&__pyx_n_s_elem_type, __pyx_k_elem_type, sizeof(__pyx_k_elem_type), 0, 0, 1, 1},
   {&__pyx_n_s_emacs, __pyx_k_emacs, sizeof(__pyx_k_emacs), 0, 0, 1, 1},
+  {&__pyx_kp_s_empty_citation, __pyx_k_empty_citation, sizeof(__pyx_k_empty_citation), 0, 0, 1, 0},
   {&__pyx_kp_s_empty_name, __pyx_k_empty_name, sizeof(__pyx_k_empty_name), 0, 0, 1, 0},
   {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1},
   {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1},
@@ -242034,11 +244637,13 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_expecting_tuple_list_or_dict, __pyx_k_expecting_tuple_list_or_dict, sizeof(__pyx_k_expecting_tuple_list_or_dict), 0, 0, 1, 0},
   {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
   {&__pyx_n_s_faces, __pyx_k_faces, sizeof(__pyx_k_faces), 0, 0, 1, 1},
-  {&__pyx_n_s_fatol, __pyx_k_fatol, sizeof(__pyx_k_fatol), 0, 0, 1, 1},
+  {&__pyx_n_s_factor_mallocs, __pyx_k_factor_mallocs, sizeof(__pyx_k_factor_mallocs), 0, 0, 1, 1},
   {&__pyx_n_s_field, __pyx_k_field, sizeof(__pyx_k_field), 0, 0, 1, 1},
   {&__pyx_n_s_fieldName, __pyx_k_fieldName, sizeof(__pyx_k_fieldName), 0, 0, 1, 1},
   {&__pyx_n_s_filename, __pyx_k_filename, sizeof(__pyx_k_filename), 0, 0, 1, 1},
   {&__pyx_n_s_fill, __pyx_k_fill, sizeof(__pyx_k_fill), 0, 0, 1, 1},
+  {&__pyx_n_s_fill_ratio_given, __pyx_k_fill_ratio_given, sizeof(__pyx_k_fill_ratio_given), 0, 0, 1, 1},
+  {&__pyx_n_s_fill_ratio_needed, __pyx_k_fill_ratio_needed, sizeof(__pyx_k_fill_ratio_needed), 0, 0, 1, 1},
   {&__pyx_n_s_finalize, __pyx_k_finalize, sizeof(__pyx_k_finalize), 0, 0, 1, 1},
   {&__pyx_n_s_first, __pyx_k_first, sizeof(__pyx_k_first), 0, 0, 1, 1},
   {&__pyx_n_s_flag, __pyx_k_flag, sizeof(__pyx_k_flag), 0, 0, 1, 1},
@@ -242048,8 +244653,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_force, __pyx_k_force, sizeof(__pyx_k_force), 0, 0, 1, 1},
   {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1},
   {&__pyx_n_s_forward, __pyx_k_forward, sizeof(__pyx_k_forward), 0, 0, 1, 1},
-  {&__pyx_n_s_frtol, __pyx_k_frtol, sizeof(__pyx_k_frtol), 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_function, __pyx_k_function, sizeof(__pyx_k_function), 0, 0, 1, 1},
   {&__pyx_n_s_g, __pyx_k_g, sizeof(__pyx_k_g), 0, 0, 1, 1},
   {&__pyx_n_s_gamgtype, __pyx_k_gamgtype, sizeof(__pyx_k_gamgtype), 0, 0, 1, 1},
   {&__pyx_n_s_gamma, __pyx_k_gamma, sizeof(__pyx_k_gamma), 0, 0, 1, 1},
@@ -242057,6 +244661,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_gatol, __pyx_k_gatol, sizeof(__pyx_k_gatol), 0, 0, 1, 1},
   {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1},
   {&__pyx_n_s_getActive, __pyx_k_getActive, sizeof(__pyx_k_getActive), 0, 0, 1, 1},
+  {&__pyx_n_s_getActiveAll, __pyx_k_getActiveAll, sizeof(__pyx_k_getActiveAll), 0, 0, 1, 1},
   {&__pyx_n_s_getAppCtx, __pyx_k_getAppCtx, sizeof(__pyx_k_getAppCtx), 0, 0, 1, 1},
   {&__pyx_n_s_getArray, __pyx_k_getArray, sizeof(__pyx_k_getArray), 0, 0, 1, 1},
   {&__pyx_n_s_getBlockIndices, __pyx_k_getBlockIndices, sizeof(__pyx_k_getBlockIndices), 0, 0, 1, 1},
@@ -242069,7 +244674,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_getClassId, __pyx_k_getClassId, sizeof(__pyx_k_getClassId), 0, 0, 1, 1},
   {&__pyx_n_s_getClassName, __pyx_k_getClassName, sizeof(__pyx_k_getClassName), 0, 0, 1, 1},
   {&__pyx_n_s_getComm, __pyx_k_getComm, sizeof(__pyx_k_getComm), 0, 0, 1, 1},
-  {&__pyx_n_s_getConstraintNorm, __pyx_k_getConstraintNorm, sizeof(__pyx_k_getConstraintNorm), 0, 0, 1, 1},
   {&__pyx_n_s_getConstraintTolerances, __pyx_k_getConstraintTolerances, sizeof(__pyx_k_getConstraintTolerances), 0, 0, 1, 1},
   {&__pyx_n_s_getConvergedReason, __pyx_k_getConvergedReason, sizeof(__pyx_k_getConvergedReason), 0, 0, 1, 1},
   {&__pyx_n_s_getConvergenceHistory, __pyx_k_getConvergenceHistory, sizeof(__pyx_k_getConvergenceHistory), 0, 0, 1, 1},
@@ -242086,7 +244690,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_getGhostCorners, __pyx_k_getGhostCorners, sizeof(__pyx_k_getGhostCorners), 0, 0, 1, 1},
   {&__pyx_n_s_getGhostRanges, __pyx_k_getGhostRanges, sizeof(__pyx_k_getGhostRanges), 0, 0, 1, 1},
   {&__pyx_n_s_getGradient, __pyx_k_getGradient, sizeof(__pyx_k_getGradient), 0, 0, 1, 1},
-  {&__pyx_n_s_getGradientNorm, __pyx_k_getGradientNorm, sizeof(__pyx_k_getGradientNorm), 0, 0, 1, 1},
   {&__pyx_n_s_getGradientTolerances, __pyx_k_getGradientTolerances, sizeof(__pyx_k_getGradientTolerances), 0, 0, 1, 1},
   {&__pyx_n_s_getIndices, __pyx_k_getIndices, sizeof(__pyx_k_getIndices), 0, 0, 1, 1},
   {&__pyx_n_s_getInfo, __pyx_k_getInfo, sizeof(__pyx_k_getInfo), 0, 0, 1, 1},
@@ -242112,7 +244715,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_getNormType, __pyx_k_getNormType, sizeof(__pyx_k_getNormType), 0, 0, 1, 1},
   {&__pyx_n_s_getNumber, __pyx_k_getNumber, sizeof(__pyx_k_getNumber), 0, 0, 1, 1},
   {&__pyx_n_s_getNumberDM, __pyx_k_getNumberDM, sizeof(__pyx_k_getNumberDM), 0, 0, 1, 1},
-  {&__pyx_n_s_getObjectiveTolerances, __pyx_k_getObjectiveTolerances, sizeof(__pyx_k_getObjectiveTolerances), 0, 0, 1, 1},
   {&__pyx_n_s_getObjectiveValue, __pyx_k_getObjectiveValue, sizeof(__pyx_k_getObjectiveValue), 0, 0, 1, 1},
   {&__pyx_n_s_getOperators, __pyx_k_getOperators, sizeof(__pyx_k_getOperators), 0, 0, 1, 1},
   {&__pyx_n_s_getOptionsPrefix, __pyx_k_getOptionsPrefix, sizeof(__pyx_k_getOptionsPrefix), 0, 0, 1, 1},
@@ -242132,6 +244734,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_getSize, __pyx_k_getSize, sizeof(__pyx_k_getSize), 0, 0, 1, 1},
   {&__pyx_n_s_getSizes, __pyx_k_getSizes, sizeof(__pyx_k_getSizes), 0, 0, 1, 1},
   {&__pyx_n_s_getSolution, __pyx_k_getSolution, sizeof(__pyx_k_getSolution), 0, 0, 1, 1},
+  {&__pyx_n_s_getSolutionNorm, __pyx_k_getSolutionNorm, sizeof(__pyx_k_getSolutionNorm), 0, 0, 1, 1},
   {&__pyx_n_s_getSolutionUpdate, __pyx_k_getSolutionUpdate, sizeof(__pyx_k_getSolutionUpdate), 0, 0, 1, 1},
   {&__pyx_n_s_getStencil, __pyx_k_getStencil, sizeof(__pyx_k_getStencil), 0, 0, 1, 1},
   {&__pyx_n_s_getStencilType, __pyx_k_getStencilType, sizeof(__pyx_k_getStencilType), 0, 0, 1, 1},
@@ -242158,7 +244761,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_ghosts_size_d_array_size_d_and_v, __pyx_k_ghosts_size_d_array_size_d_and_v, sizeof(__pyx_k_ghosts_size_d_array_size_d_and_v), 0, 0, 1, 0},
   {&__pyx_kp_s_global_size_d_not_divisible_by_b, __pyx_k_global_size_d_not_divisible_by_b, sizeof(__pyx_k_global_size_d_not_divisible_by_b), 0, 0, 1, 0},
   {&__pyx_n_s_globalsec, __pyx_k_globalsec, sizeof(__pyx_k_globalsec), 0, 0, 1, 1},
-  {&__pyx_n_s_gradient_2, __pyx_k_gradient_2, sizeof(__pyx_k_gradient_2), 0, 0, 1, 1},
+  {&__pyx_n_s_gradient, __pyx_k_gradient, sizeof(__pyx_k_gradient), 0, 0, 1, 1},
   {&__pyx_n_s_group, __pyx_k_group, sizeof(__pyx_k_group), 0, 0, 1, 1},
   {&__pyx_n_s_grtol, __pyx_k_grtol, sizeof(__pyx_k_grtol), 0, 0, 1, 1},
   {&__pyx_n_s_gtol, __pyx_k_gtol, sizeof(__pyx_k_gtol), 0, 0, 1, 1},
@@ -242169,9 +244772,11 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_hasLabel, __pyx_k_hasLabel, sizeof(__pyx_k_hasLabel), 0, 0, 1, 1},
   {&__pyx_n_s_hasLagrange, __pyx_k_hasLagrange, sizeof(__pyx_k_hasLagrange), 0, 0, 1, 1},
   {&__pyx_n_s_hasName, __pyx_k_hasName, sizeof(__pyx_k_hasName), 0, 0, 1, 1},
-  {&__pyx_n_s_hessian_2, __pyx_k_hessian_2, sizeof(__pyx_k_hessian_2), 0, 0, 1, 1},
-  {&__pyx_kp_s_home_devel_petsc4py_3_6_0_src_P, __pyx_k_home_devel_petsc4py_3_6_0_src_P, sizeof(__pyx_k_home_devel_petsc4py_3_6_0_src_P), 0, 0, 1, 0},
-  {&__pyx_kp_s_home_devel_petsc4py_3_6_0_src_P_2, __pyx_k_home_devel_petsc4py_3_6_0_src_P_2, sizeof(__pyx_k_home_devel_petsc4py_3_6_0_src_P_2), 0, 0, 1, 0},
+  {&__pyx_n_s_hessian, __pyx_k_hessian, sizeof(__pyx_k_hessian), 0, 0, 1, 1},
+  {&__pyx_kp_s_home_devel_petsc4py_3_7_0_src_P, __pyx_k_home_devel_petsc4py_3_7_0_src_P, sizeof(__pyx_k_home_devel_petsc4py_3_7_0_src_P), 0, 0, 1, 0},
+  {&__pyx_kp_s_home_devel_petsc4py_3_7_0_src_P_2, __pyx_k_home_devel_petsc4py_3_7_0_src_P_2, sizeof(__pyx_k_home_devel_petsc4py_3_7_0_src_P_2), 0, 0, 1, 0},
+  {&__pyx_n_s_hypretype, __pyx_k_hypretype, sizeof(__pyx_k_hypretype), 0, 0, 1, 1},
+  {&__pyx_n_s_icntl, __pyx_k_icntl, sizeof(__pyx_k_icntl), 0, 0, 1, 1},
   {&__pyx_n_s_idx, __pyx_k_idx, sizeof(__pyx_k_idx), 0, 0, 1, 1},
   {&__pyx_n_s_idxm, __pyx_k_idxm, sizeof(__pyx_k_idxm), 0, 0, 1, 1},
   {&__pyx_n_s_ierr, __pyx_k_ierr, sizeof(__pyx_k_ierr), 0, 0, 1, 1},
@@ -242188,10 +244793,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_incompatible_array_sizes_nv_d, __pyx_k_incompatible_array_sizes_nv_d, sizeof(__pyx_k_incompatible_array_sizes_nv_d), 0, 0, 1, 0},
   {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1},
   {&__pyx_n_s_indices, __pyx_k_indices, sizeof(__pyx_k_indices), 0, 0, 1, 1},
+  {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1},
+  {&__pyx_n_s_infoAllow, __pyx_k_infoAllow, sizeof(__pyx_k_infoAllow), 0, 0, 1, 1},
   {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
   {&__pyx_n_s_initial_time, __pyx_k_initial_time, sizeof(__pyx_k_initial_time), 0, 0, 1, 1},
   {&__pyx_n_s_initial_time_step, __pyx_k_initial_time_step, sizeof(__pyx_k_initial_time_step), 0, 0, 1, 1},
-  {&__pyx_n_s_initialguess_2, __pyx_k_initialguess_2, sizeof(__pyx_k_initialguess_2), 0, 0, 1, 1},
+  {&__pyx_n_s_initialguess, __pyx_k_initialguess, sizeof(__pyx_k_initialguess), 0, 0, 1, 1},
   {&__pyx_n_s_initialize, __pyx_k_initialize, sizeof(__pyx_k_initialize), 0, 0, 1, 1},
   {&__pyx_kp_s_input_arrays_have_incompatible_s, __pyx_k_input_arrays_have_incompatible_s, sizeof(__pyx_k_input_arrays_have_incompatible_s), 0, 0, 1, 0},
   {&__pyx_n_s_insert, __pyx_k_insert, sizeof(__pyx_k_insert), 0, 0, 1, 1},
@@ -242220,9 +244827,10 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_isrows, __pyx_k_isrows, sizeof(__pyx_k_isrows), 0, 0, 1, 1},
   {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 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_jacobian_design_2, __pyx_k_jacobian_design_2, sizeof(__pyx_k_jacobian_design_2), 0, 0, 1, 1},
-  {&__pyx_n_s_jacobian_state_2, __pyx_k_jacobian_state_2, sizeof(__pyx_k_jacobian_state_2), 0, 0, 1, 1},
+  {&__pyx_n_s_ival, __pyx_k_ival, sizeof(__pyx_k_ival), 0, 0, 1, 1},
+  {&__pyx_n_s_jacobian, __pyx_k_jacobian, sizeof(__pyx_k_jacobian), 0, 0, 1, 1},
+  {&__pyx_n_s_jacobian_design, __pyx_k_jacobian_design, sizeof(__pyx_k_jacobian_design), 0, 0, 1, 1},
+  {&__pyx_n_s_jacobian_state, __pyx_k_jacobian_state, sizeof(__pyx_k_jacobian_state), 0, 0, 1, 1},
   {&__pyx_n_s_join, __pyx_k_join, sizeof(__pyx_k_join), 0, 0, 1, 1},
   {&__pyx_n_s_kargs, __pyx_k_kargs, sizeof(__pyx_k_kargs), 0, 0, 1, 1},
   {&__pyx_kp_s_key_d_cannot_register_s_already, __pyx_k_key_d_cannot_register_s_already, sizeof(__pyx_k_key_d_cannot_register_s_already), 0, 0, 1, 0},
@@ -242253,6 +244861,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_lvecs, __pyx_k_lvecs, sizeof(__pyx_k_lvecs), 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_mallocs, __pyx_k_mallocs, sizeof(__pyx_k_mallocs), 0, 0, 1, 1},
   {&__pyx_n_s_map_type, __pyx_k_map_type, sizeof(__pyx_k_map_type), 0, 0, 1, 1},
   {&__pyx_n_s_mat, __pyx_k_mat, sizeof(__pyx_k_mat), 0, 0, 1, 1},
   {&__pyx_n_s_matMult, __pyx_k_matMult, sizeof(__pyx_k_matMult), 0, 0, 1, 1},
@@ -242264,14 +244873,16 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_max_steps, __pyx_k_max_steps, sizeof(__pyx_k_max_steps), 0, 0, 1, 1},
   {&__pyx_n_s_max_time, __pyx_k_max_time, sizeof(__pyx_k_max_time), 0, 0, 1, 1},
   {&__pyx_n_s_memo, __pyx_k_memo, sizeof(__pyx_k_memo), 0, 0, 1, 1},
+  {&__pyx_n_s_memory, __pyx_k_memory, sizeof(__pyx_k_memory), 0, 0, 1, 1},
   {&__pyx_n_s_messageLength, __pyx_k_messageLength, sizeof(__pyx_k_messageLength), 0, 0, 1, 1},
   {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
+  {&__pyx_n_s_mgtype, __pyx_k_mgtype, sizeof(__pyx_k_mgtype), 0, 0, 1, 1},
   {&__pyx_n_s_minor, __pyx_k_minor, sizeof(__pyx_k_minor), 0, 0, 1, 1},
   {&__pyx_n_s_mirror, __pyx_k_mirror, sizeof(__pyx_k_mirror), 0, 0, 1, 1},
   {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1},
   {&__pyx_n_s_model, __pyx_k_model, sizeof(__pyx_k_model), 0, 0, 1, 1},
   {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
-  {&__pyx_n_s_monitor_2, __pyx_k_monitor_2, sizeof(__pyx_k_monitor_2), 0, 0, 1, 1},
+  {&__pyx_n_s_monitor, __pyx_k_monitor, sizeof(__pyx_k_monitor), 0, 0, 1, 1},
   {&__pyx_n_s_mpi4py, __pyx_k_mpi4py, sizeof(__pyx_k_mpi4py), 0, 0, 1, 1},
   {&__pyx_kp_s_mpi4py_MPI, __pyx_k_mpi4py_MPI, sizeof(__pyx_k_mpi4py_MPI), 0, 0, 1, 0},
   {&__pyx_n_s_mpiabort, __pyx_k_mpiabort, sizeof(__pyx_k_mpiabort), 0, 0, 1, 1},
@@ -242281,6 +244892,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
   {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
   {&__pyx_n_s_ncycle, __pyx_k_ncycle, sizeof(__pyx_k_ncycle), 0, 0, 1, 1},
+  {&__pyx_n_s_newsec, __pyx_k_newsec, sizeof(__pyx_k_newsec), 0, 0, 1, 1},
+  {&__pyx_n_s_newvec, __pyx_k_newvec, sizeof(__pyx_k_newvec), 0, 0, 1, 1},
   {&__pyx_n_s_nleaves, __pyx_k_nleaves, sizeof(__pyx_k_nleaves), 0, 0, 1, 1},
   {&__pyx_n_s_nlevels, __pyx_k_nlevels, sizeof(__pyx_k_nlevels), 0, 0, 1, 1},
   {&__pyx_n_s_nlocal, __pyx_k_nlocal, sizeof(__pyx_k_nlocal), 0, 0, 1, 1},
@@ -242297,6 +244910,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_nroots, __pyx_k_nroots, sizeof(__pyx_k_nroots), 0, 0, 1, 1},
   {&__pyx_n_s_nsd, __pyx_k_nsd, sizeof(__pyx_k_nsd), 0, 0, 1, 1},
   {&__pyx_n_s_nsp, __pyx_k_nsp, sizeof(__pyx_k_nsp), 0, 0, 1, 1},
+  {&__pyx_n_s_nsubcomm, __pyx_k_nsubcomm, sizeof(__pyx_k_nsubcomm), 0, 0, 1, 1},
   {&__pyx_kp_s_null_communicator, __pyx_k_null_communicator, sizeof(__pyx_k_null_communicator), 0, 0, 1, 0},
   {&__pyx_n_s_numComp, __pyx_k_numComp, sizeof(__pyx_k_numComp), 0, 0, 1, 1},
   {&__pyx_n_s_numDof, __pyx_k_numDof, sizeof(__pyx_k_numDof), 0, 0, 1, 1},
@@ -242306,14 +244920,18 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_numReductions, __pyx_k_numReductions, sizeof(__pyx_k_numReductions), 0, 0, 1, 1},
   {&__pyx_kp_s_number_of_dimensions_d_and_numbe, __pyx_k_number_of_dimensions_d_and_numbe, sizeof(__pyx_k_number_of_dimensions_d_and_numbe), 0, 0, 1, 0},
   {&__pyx_n_s_numcells, __pyx_k_numcells, sizeof(__pyx_k_numcells), 0, 0, 1, 1},
+  {&__pyx_n_s_nz_allocated, __pyx_k_nz_allocated, sizeof(__pyx_k_nz_allocated), 0, 0, 1, 1},
+  {&__pyx_n_s_nz_unneeded, __pyx_k_nz_unneeded, sizeof(__pyx_k_nz_unneeded), 0, 0, 1, 1},
+  {&__pyx_n_s_nz_used, __pyx_k_nz_used, sizeof(__pyx_k_nz_used), 0, 0, 1, 1},
   {&__pyx_n_s_nzdiag, __pyx_k_nzdiag, sizeof(__pyx_k_nzdiag), 0, 0, 1, 1},
   {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1},
   {&__pyx_n_s_object, __pyx_k_object, sizeof(__pyx_k_object), 0, 0, 1, 1},
-  {&__pyx_n_s_objective_2, __pyx_k_objective_2, sizeof(__pyx_k_objective_2), 0, 0, 1, 1},
-  {&__pyx_n_s_objgrad_2, __pyx_k_objgrad_2, sizeof(__pyx_k_objgrad_2), 0, 0, 1, 1},
+  {&__pyx_n_s_objective, __pyx_k_objective, sizeof(__pyx_k_objective), 0, 0, 1, 1},
+  {&__pyx_n_s_objgrad, __pyx_k_objgrad, sizeof(__pyx_k_objgrad), 0, 0, 1, 1},
   {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1},
   {&__pyx_n_s_omega, __pyx_k_omega, sizeof(__pyx_k_omega), 0, 0, 1, 1},
   {&__pyx_kp_s_only_and, __pyx_k_only_and, sizeof(__pyx_k_only_and), 0, 0, 1, 0},
+  {&__pyx_n_s_operators, __pyx_k_operators, sizeof(__pyx_k_operators), 0, 0, 1, 1},
   {&__pyx_n_s_option, __pyx_k_option, sizeof(__pyx_k_option), 0, 0, 1, 1},
   {&__pyx_kp_s_option_prefix_must_be_string, __pyx_k_option_prefix_must_be_string, sizeof(__pyx_k_option_prefix_must_be_string), 0, 0, 1, 0},
   {&__pyx_kp_s_option_prefix_should_not_have_sp, __pyx_k_option_prefix_should_not_have_sp, sizeof(__pyx_k_option_prefix_should_not_have_sp), 0, 0, 1, 0},
@@ -242329,6 +244947,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_overlap, __pyx_k_overlap, sizeof(__pyx_k_overlap), 0, 0, 1, 1},
   {&__pyx_kp_s_ownership_range_size_d_and_numbe, __pyx_k_ownership_range_size_d_and_numbe, sizeof(__pyx_k_ownership_range_size_d_and_numbe), 0, 0, 1, 0},
   {&__pyx_n_s_ownership_ranges, __pyx_k_ownership_ranges, sizeof(__pyx_k_ownership_ranges), 0, 0, 1, 1},
+  {&__pyx_n_s_ozz, __pyx_k_ozz, sizeof(__pyx_k_ozz), 0, 0, 1, 1},
   {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1},
   {&__pyx_n_s_p1, __pyx_k_p1, sizeof(__pyx_k_p1), 0, 0, 1, 1},
   {&__pyx_n_s_pEnd, __pyx_k_pEnd, sizeof(__pyx_k_pEnd), 0, 0, 1, 1},
@@ -242349,12 +244968,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_popErrorHandler, __pyx_k_popErrorHandler, sizeof(__pyx_k_popErrorHandler), 0, 0, 1, 1},
   {&__pyx_n_s_position, __pyx_k_position, sizeof(__pyx_k_position), 0, 0, 1, 1},
   {&__pyx_n_s_positive_definite, __pyx_k_positive_definite, sizeof(__pyx_k_positive_definite), 0, 0, 1, 1},
-  {&__pyx_n_s_poststep_2, __pyx_k_poststep_2, sizeof(__pyx_k_poststep_2), 0, 0, 1, 1},
+  {&__pyx_n_s_poststep, __pyx_k_poststep, sizeof(__pyx_k_poststep), 0, 0, 1, 1},
   {&__pyx_n_s_pre, __pyx_k_pre, sizeof(__pyx_k_pre), 0, 0, 1, 1},
   {&__pyx_n_s_prefix, __pyx_k_prefix, sizeof(__pyx_k_prefix), 0, 0, 1, 1},
   {&__pyx_kp_s_prefix_s_name_s, __pyx_k_prefix_s_name_s, sizeof(__pyx_k_prefix_s_name_s), 0, 0, 1, 0},
   {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
-  {&__pyx_n_s_prestep_2, __pyx_k_prestep_2, sizeof(__pyx_k_prestep_2), 0, 0, 1, 1},
+  {&__pyx_n_s_prestep, __pyx_k_prestep, sizeof(__pyx_k_prestep), 0, 0, 1, 1},
   {&__pyx_n_s_proc_sizes, __pyx_k_proc_sizes, sizeof(__pyx_k_proc_sizes), 0, 0, 1, 1},
   {&__pyx_n_s_ptype, __pyx_k_ptype, sizeof(__pyx_k_ptype), 0, 0, 1, 1},
   {&__pyx_n_s_push, __pyx_k_push, sizeof(__pyx_k_push), 0, 0, 1, 1},
@@ -242377,12 +244996,13 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_real, __pyx_k_real, sizeof(__pyx_k_real), 0, 0, 1, 1},
   {&__pyx_n_s_reason, __pyx_k_reason, sizeof(__pyx_k_reason), 0, 0, 1, 1},
   {&__pyx_n_s_reciprocal, __pyx_k_reciprocal, sizeof(__pyx_k_reciprocal), 0, 0, 1, 1},
-  {&__pyx_n_s_refine_2, __pyx_k_refine_2, sizeof(__pyx_k_refine_2), 0, 0, 1, 1},
+  {&__pyx_n_s_refine, __pyx_k_refine, sizeof(__pyx_k_refine), 0, 0, 1, 1},
   {&__pyx_n_s_refine_x, __pyx_k_refine_x, sizeof(__pyx_k_refine_x), 0, 0, 1, 1},
   {&__pyx_n_s_refine_y, __pyx_k_refine_y, sizeof(__pyx_k_refine_y), 0, 0, 1, 1},
   {&__pyx_n_s_refine_z, __pyx_k_refine_z, sizeof(__pyx_k_refine_z), 0, 0, 1, 1},
   {&__pyx_n_s_refinementLimit, __pyx_k_refinementLimit, sizeof(__pyx_k_refinementLimit), 0, 0, 1, 1},
   {&__pyx_n_s_refinementUniform, __pyx_k_refinementUniform, sizeof(__pyx_k_refinementUniform), 0, 0, 1, 1},
+  {&__pyx_n_s_registerCitation, __pyx_k_registerCitation, sizeof(__pyx_k_registerCitation), 0, 0, 1, 1},
   {&__pyx_n_s_release, __pyx_k_release, sizeof(__pyx_k_release), 0, 0, 1, 1},
   {&__pyx_n_s_remote, __pyx_k_remote, sizeof(__pyx_k_remote), 0, 0, 1, 1},
   {&__pyx_n_s_remove, __pyx_k_remove, sizeof(__pyx_k_remove), 0, 0, 1, 1},
@@ -242407,6 +245027,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_rtol, __pyx_k_rtol, sizeof(__pyx_k_rtol), 0, 0, 1, 1},
   {&__pyx_n_s_rtol_0, __pyx_k_rtol_0, sizeof(__pyx_k_rtol_0), 0, 0, 1, 1},
   {&__pyx_n_s_rtol_max, __pyx_k_rtol_max, sizeof(__pyx_k_rtol_max), 0, 0, 1, 1},
+  {&__pyx_n_s_rw, __pyx_k_rw, sizeof(__pyx_k_rw), 0, 0, 1, 1},
   {&__pyx_kp_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 0},
   {&__pyx_kp_s_s_line_d_in_s, __pyx_k_s_line_d_in_s, sizeof(__pyx_k_s_line_d_in_s), 0, 0, 1, 0},
   {&__pyx_kp_s_s_s, __pyx_k_s_s, sizeof(__pyx_k_s_s), 0, 0, 1, 0},
@@ -242417,7 +245038,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_seed, __pyx_k_seed, sizeof(__pyx_k_seed), 0, 0, 1, 1},
   {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
   {&__pyx_n_s_sep, __pyx_k_sep, sizeof(__pyx_k_sep), 0, 0, 1, 1},
-  {&__pyx_n_s_separable_2, __pyx_k_separable_2, sizeof(__pyx_k_separable_2), 0, 0, 1, 1},
+  {&__pyx_n_s_separable, __pyx_k_separable, sizeof(__pyx_k_separable), 0, 0, 1, 1},
   {&__pyx_n_s_setActive, __pyx_k_setActive, sizeof(__pyx_k_setActive), 0, 0, 1, 1},
   {&__pyx_n_s_setActiveAll, __pyx_k_setActiveAll, sizeof(__pyx_k_setActiveAll), 0, 0, 1, 1},
   {&__pyx_n_s_setAppCtx, __pyx_k_setAppCtx, sizeof(__pyx_k_setAppCtx), 0, 0, 1, 1},
@@ -242443,7 +245064,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_setNPC, __pyx_k_setNPC, sizeof(__pyx_k_setNPC), 0, 0, 1, 1},
   {&__pyx_n_s_setName, __pyx_k_setName, sizeof(__pyx_k_setName), 0, 0, 1, 1},
   {&__pyx_n_s_setNormType, __pyx_k_setNormType, sizeof(__pyx_k_setNormType), 0, 0, 1, 1},
-  {&__pyx_n_s_setObjectiveTolerances, __pyx_k_setObjectiveTolerances, sizeof(__pyx_k_setObjectiveTolerances), 0, 0, 1, 1},
   {&__pyx_n_s_setOptionsPrefix, __pyx_k_setOptionsPrefix, sizeof(__pyx_k_setOptionsPrefix), 0, 0, 1, 1},
   {&__pyx_n_s_setPCSide, __pyx_k_setPCSide, sizeof(__pyx_k_setPCSide), 0, 0, 1, 1},
   {&__pyx_n_s_setParamsEW, __pyx_k_setParamsEW, sizeof(__pyx_k_setParamsEW), 0, 0, 1, 1},
@@ -242505,7 +245125,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_strides, __pyx_k_strides, sizeof(__pyx_k_strides), 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_subcomm, __pyx_k_subcomm, sizeof(__pyx_k_subcomm), 0, 0, 1, 1},
   {&__pyx_n_s_submat, __pyx_k_submat, sizeof(__pyx_k_submat), 0, 0, 1, 1},
+  {&__pyx_n_s_submats, __pyx_k_submats, sizeof(__pyx_k_submats), 0, 0, 1, 1},
   {&__pyx_n_s_subminor, __pyx_k_subminor, sizeof(__pyx_k_subminor), 0, 0, 1, 1},
   {&__pyx_n_s_subvec, __pyx_k_subvec, sizeof(__pyx_k_subvec), 0, 0, 1, 1},
   {&__pyx_n_s_supp, __pyx_k_supp, sizeof(__pyx_k_supp), 0, 0, 1, 1},
@@ -242545,15 +245167,16 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_unknown_scatter_mode_s, __pyx_k_unknown_scatter_mode_s, sizeof(__pyx_k_unknown_scatter_mode_s), 0, 0, 1, 0},
   {&__pyx_kp_s_unknown_shift_type_s, __pyx_k_unknown_shift_type_s, sizeof(__pyx_k_unknown_shift_type_s), 0, 0, 1, 0},
   {&__pyx_kp_s_unknown_stencil_type_s, __pyx_k_unknown_stencil_type_s, sizeof(__pyx_k_unknown_stencil_type_s), 0, 0, 1, 0},
-  {&__pyx_n_s_update_2, __pyx_k_update_2, sizeof(__pyx_k_update_2), 0, 0, 1, 1},
+  {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
   {&__pyx_n_s_upper, __pyx_k_upper, sizeof(__pyx_k_upper), 0, 0, 1, 1},
   {&__pyx_n_s_useClosure, __pyx_k_useClosure, sizeof(__pyx_k_useClosure), 0, 0, 1, 1},
   {&__pyx_n_s_useCone, __pyx_k_useCone, sizeof(__pyx_k_useCone), 0, 0, 1, 1},
   {&__pyx_n_s_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1},
+  {&__pyx_n_s_val, __pyx_k_val, sizeof(__pyx_k_val), 0, 0, 1, 1},
   {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1},
   {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1},
   {&__pyx_kp_s_values_must_have_two_or_more_dim, __pyx_k_values_must_have_two_or_more_dim, sizeof(__pyx_k_values_must_have_two_or_more_dim), 0, 0, 1, 0},
-  {&__pyx_n_s_varbounds_2, __pyx_k_varbounds_2, sizeof(__pyx_k_varbounds_2), 0, 0, 1, 1},
+  {&__pyx_n_s_varbounds, __pyx_k_varbounds, sizeof(__pyx_k_varbounds), 0, 0, 1, 1},
   {&__pyx_n_s_vec, __pyx_k_vec, sizeof(__pyx_k_vec), 0, 0, 1, 1},
   {&__pyx_n_s_vec_from, __pyx_k_vec_from, sizeof(__pyx_k_vec_from), 0, 0, 1, 1},
   {&__pyx_n_s_vec_to, __pyx_k_vec_to, sizeof(__pyx_k_vec_to), 0, 0, 1, 1},
@@ -242585,22 +245208,24 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_zeropivot, __pyx_k_zeropivot, sizeof(__pyx_k_zeropivot), 0, 0, 1, 1},
   {&__pyx_n_s_zmax, __pyx_k_zmax, sizeof(__pyx_k_zmax), 0, 0, 1, 1},
   {&__pyx_n_s_zmin, __pyx_k_zmin, sizeof(__pyx_k_zmin), 0, 0, 1, 1},
+  {&__pyx_n_s_zoz, __pyx_k_zoz, sizeof(__pyx_k_zoz), 0, 0, 1, 1},
+  {&__pyx_n_s_zzo, __pyx_k_zzo, sizeof(__pyx_k_zzo), 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 = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_SystemError = __Pyx_GetBuiltinName(__pyx_n_s_SystemError); if (!__pyx_builtin_SystemError) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) __PYX_ERR(0, 15, __pyx_L1_error)
+  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(1, 3, __pyx_L1_error)
+  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(2, 70, __pyx_L1_error)
+  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(3, 47, __pyx_L1_error)
+  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(3, 69, __pyx_L1_error)
+  __pyx_builtin_SystemError = __Pyx_GetBuiltinName(__pyx_n_s_SystemError); if (!__pyx_builtin_SystemError) __PYX_ERR(4, 204, __pyx_L1_error)
+  __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(5, 374, __pyx_L1_error)
+  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(6, 540, __pyx_L1_error)
+  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(7, 293, __pyx_L1_error)
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(8, 299, __pyx_L1_error)
+  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) __PYX_ERR(9, 23, __pyx_L1_error)
+  __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(10, 38, __pyx_L1_error)
+  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(11, 282, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -242610,80 +245235,80 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "PETSc/petscopt.pxi":44
+  /* "PETSc/petscopt.pxi":47
  *         prefix = prefix.getOptionsPrefix()
  *     elif not isinstance(prefix, str):
  *         raise TypeError('option prefix must be string')             # <<<<<<<<<<<<<<
  *     if not prefix:
  *         return None
  */
-  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_option_prefix_must_be_string); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_option_prefix_must_be_string); if (unlikely(!__pyx_tuple_)) __PYX_ERR(3, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple_);
   __Pyx_GIVEREF(__pyx_tuple_);
 
-  /* "PETSc/petscopt.pxi":47
+  /* "PETSc/petscopt.pxi":50
  *     if not prefix:
  *         return None
  *     if prefix.count(' '):             # <<<<<<<<<<<<<<
  *         raise ValueError('option prefix should not have spaces')
  *     if prefix.startswith('-'):
  */
-  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(3, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__3);
   __Pyx_GIVEREF(__pyx_tuple__3);
 
-  /* "PETSc/petscopt.pxi":48
+  /* "PETSc/petscopt.pxi":51
  *         return None
  *     if prefix.count(' '):
  *         raise ValueError('option prefix should not have spaces')             # <<<<<<<<<<<<<<
  *     if prefix.startswith('-'):
  *         raise ValueError('option prefix should not start with a hypen')
  */
-  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_option_prefix_should_not_have_sp); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_option_prefix_should_not_have_sp); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(3, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__4);
   __Pyx_GIVEREF(__pyx_tuple__4);
 
-  /* "PETSc/petscopt.pxi":49
+  /* "PETSc/petscopt.pxi":52
  *     if prefix.count(' '):
  *         raise ValueError('option prefix should not have spaces')
  *     if prefix.startswith('-'):             # <<<<<<<<<<<<<<
  *         raise ValueError('option prefix should not start with a hypen')
  *     return prefix
  */
-  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s__5); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s__5); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(3, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__6);
   __Pyx_GIVEREF(__pyx_tuple__6);
 
-  /* "PETSc/petscopt.pxi":50
+  /* "PETSc/petscopt.pxi":53
  *         raise ValueError('option prefix should not have spaces')
  *     if prefix.startswith('-'):
  *         raise ValueError('option prefix should not start with a hypen')             # <<<<<<<<<<<<<<
  *     return prefix
  * 
  */
-  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_option_prefix_should_not_start_w); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_option_prefix_should_not_start_w); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(3, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__7);
   __Pyx_GIVEREF(__pyx_tuple__7);
 
-  /* "PETSc/petscopt.pxi":173
+  /* "PETSc/petscopt.pxi":176
  *     if not iskey(key):
  *         return None
  *     key = key[1:]             # <<<<<<<<<<<<<<
  *     if key[0] == '-':
  *         key = key[1:]
  */
-  __pyx_slice__8 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__8)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_slice__8 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__8)) __PYX_ERR(3, 176, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__8);
   __Pyx_GIVEREF(__pyx_slice__8);
 
-  /* "PETSc/petscopt.pxi":175
+  /* "PETSc/petscopt.pxi":178
  *     key = key[1:]
  *     if key[0] == '-':
  *         key = key[1:]             # <<<<<<<<<<<<<<
  *     if not key.startswith(prefix):
  *         return None
  */
-  __pyx_slice__9 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__9)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_slice__9 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__9)) __PYX_ERR(3, 178, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__9);
   __Pyx_GIVEREF(__pyx_slice__9);
 
@@ -242694,7 +245319,7 @@ static int __Pyx_InitCachedConstants(void) {
  *     cdef int size = 0
  *     CHKERR( MPI_Comm_size(comm, &size) )
  */
-  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(13, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__11);
   __Pyx_GIVEREF(__pyx_tuple__11);
 
@@ -242705,18 +245330,18 @@ static int __Pyx_InitCachedConstants(void) {
  *     cdef int rank = 0
  *     CHKERR( MPI_Comm_rank(comm, &rank) )
  */
-  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(13, 94, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__12);
   __Pyx_GIVEREF(__pyx_tuple__12);
 
-  /* "PETSc/petscsys.pxi":78
+  /* "PETSc/petscsys.pxi":79
  *     if (bs < 1): raise ValueError(
  *         "block size %d must be positive" % toInt(bs))
  *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(             # <<<<<<<<<<<<<<
  *         "local and global sizes cannot be both 'DECIDE'")
  *     if (n > 0) and (n % bs): raise ValueError(
  */
-  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_local_and_global_sizes_cannot_be); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_local_and_global_sizes_cannot_be); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(14, 79, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__13);
   __Pyx_GIVEREF(__pyx_tuple__13);
 
@@ -242727,194 +245352,194 @@ static int __Pyx_InitCachedConstants(void) {
  *             "accessing non-existent buffer segment")
  *         return self.getbuffer(p)
  */
-  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_accessing_non_existent_buffer_se); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_accessing_non_existent_buffer_se); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(4, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__14);
   __Pyx_GIVEREF(__pyx_tuple__14);
 
-  /* "PETSc/petscvec.pxi":499
+  /* "PETSc/petscvec.pxi":505
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
  *         if idx != 0: raise SystemError(             # <<<<<<<<<<<<<<
  *             "accessing non-existent buffer segment")
  *         return self.getbuffer(p)
  */
-  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_accessing_non_existent_buffer_se); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_accessing_non_existent_buffer_se); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(5, 505, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__15);
   __Pyx_GIVEREF(__pyx_tuple__15);
 
-  /* "PETSc/petscvec.pxi":504
+  /* "PETSc/petscvec.pxi":510
  * 
  *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
  *         if idx != 0: raise SystemError(             # <<<<<<<<<<<<<<
  *             "accessing non-existent buffer segment")
  *         if self.readonly: raise TypeError(
  */
-  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_accessing_non_existent_buffer_se); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_accessing_non_existent_buffer_se); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(5, 510, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__16);
   __Pyx_GIVEREF(__pyx_tuple__16);
 
-  /* "PETSc/petscvec.pxi":506
+  /* "PETSc/petscvec.pxi":512
  *         if idx != 0: raise SystemError(
  *             "accessing non-existent buffer segment")
  *         if self.readonly: raise TypeError(             # <<<<<<<<<<<<<<
  *             "Object is not writable.")
  *         return self.getbuffer(p)
  */
-  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Object_is_not_writable); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Object_is_not_writable); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(5, 512, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__17);
   __Pyx_GIVEREF(__pyx_tuple__17);
 
-  /* "PETSc/petscmat.pxi":443
+  /* "PETSc/petscmat.pxi":473
  *     elif isinstance(other, Vec):
  *         diag = other.copy()
  *         diag.scale(-1)             # <<<<<<<<<<<<<<
  *         self.setDiagonal(diag, PETSC_ADD_VALUES)
  *         diag.destroy()
  */
-  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(6, 473, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__18);
   __Pyx_GIVEREF(__pyx_tuple__18);
 
-  /* "PETSc/petscmat.pxi":502
+  /* "PETSc/petscmat.pxi":532
  * cdef Mat mat_rsub(Mat self, other):
  *     cdef Mat mat = <Mat> mat_sub(self, other)
  *     mat.scale(-1)             # <<<<<<<<<<<<<<
  *     return mat
  * 
  */
-  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(6, 532, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__19);
   __Pyx_GIVEREF(__pyx_tuple__19);
 
-  /* "PETSc/petscmat.pxi":761
+  /* "PETSc/petscmat.pxi":797
  *         ("row indices must have two dimensions: "
  *          "rows.ndim=%d") % (PyArray_NDIM(ai)) )
  *     elif not PyArray_ISCONTIGUOUS(ai): raise ValueError(             # <<<<<<<<<<<<<<
  *         "expecting a C-contiguous array")
  *     if PyArray_NDIM(aj) != 2: raise ValueError(
  */
-  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_C_contiguous_array); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_C_contiguous_array); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(6, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__20);
   __Pyx_GIVEREF(__pyx_tuple__20);
 
-  /* "PETSc/petscmat.pxi":766
+  /* "PETSc/petscmat.pxi":802
  *         ("column indices must have two dimensions: "
  *          "cols.ndim=%d") % (PyArray_NDIM(aj)) )
  *     elif not PyArray_ISCONTIGUOUS(aj): raise ValueError(             # <<<<<<<<<<<<<<
  *         "expecting a C-contiguous array")
  *     if PyArray_NDIM(av) < 2: raise ValueError(
  */
-  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_C_contiguous_array); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_C_contiguous_array); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(6, 802, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__21);
   __Pyx_GIVEREF(__pyx_tuple__21);
 
-  /* "PETSc/petscmat.pxi":771
+  /* "PETSc/petscmat.pxi":807
  *         ("values must have two or more dimensions: "
  *          "vals.ndim=%d") % (PyArray_NDIM(av)) )
  *     elif not PyArray_ISCONTIGUOUS(av): raise ValueError(             # <<<<<<<<<<<<<<
  *         "expecting a C-contiguous array")
  *     # check various shapes
  */
-  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_C_contiguous_array); if (unlikely(!__pyx_tuple__22)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_C_contiguous_array); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(6, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__22);
   __Pyx_GIVEREF(__pyx_tuple__22);
 
-  /* "PETSc/petscmat.pxi":908
+  /* "PETSc/petscmat.pxi":943
  *     cdef dict options = dict(opts)
  *     #
  *     cdef fill = options.pop('fill', None)             # <<<<<<<<<<<<<<
  *     if fill is not None:
  *         info.fill = asReal(fill)
  */
-  __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_fill, Py_None); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_fill, Py_None); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(6, 943, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__23);
   __Pyx_GIVEREF(__pyx_tuple__23);
 
-  /* "PETSc/petscmat.pxi":912
+  /* "PETSc/petscmat.pxi":947
  *         info.fill = asReal(fill)
  *     #
  *     cdef zeropivot = options.pop('zeropivot', None)             # <<<<<<<<<<<<<<
  *     if zeropivot is not None:
  *         info.zeropivot = asReal(zeropivot)
  */
-  __pyx_tuple__24 = PyTuple_Pack(2, __pyx_n_s_zeropivot, Py_None); if (unlikely(!__pyx_tuple__24)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 912; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__24 = PyTuple_Pack(2, __pyx_n_s_zeropivot, Py_None); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(6, 947, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__24);
   __Pyx_GIVEREF(__pyx_tuple__24);
 
-  /* "PETSc/petscmat.pxi":916
+  /* "PETSc/petscmat.pxi":951
  *         info.zeropivot = asReal(zeropivot)
  *     #
  *     cdef levels = options.pop('levels', None)             # <<<<<<<<<<<<<<
  *     if levels is not None:
  *         info.levels  = <PetscReal>asInt(levels)
  */
-  __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_levels, Py_None); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_levels, Py_None); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(6, 951, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__25);
   __Pyx_GIVEREF(__pyx_tuple__25);
 
-  /* "PETSc/petscmat.pxi":919
+  /* "PETSc/petscmat.pxi":954
  *     if levels is not None:
  *         info.levels  = <PetscReal>asInt(levels)
  *     cdef diagonal_fill = options.pop('diagonal_fill', None)             # <<<<<<<<<<<<<<
  *     if diagonal_fill is not None:
  *         info.diagonal_fill = <PetscReal>(<bint>diagonal_fill)
  */
-  __pyx_tuple__26 = PyTuple_Pack(2, __pyx_n_s_diagonal_fill, Py_None); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__26 = PyTuple_Pack(2, __pyx_n_s_diagonal_fill, Py_None); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(6, 954, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__26);
   __Pyx_GIVEREF(__pyx_tuple__26);
 
-  /* "PETSc/petscmat.pxi":923
+  /* "PETSc/petscmat.pxi":958
  *         info.diagonal_fill = <PetscReal>(<bint>diagonal_fill)
  *     #
  *     cdef dt = options.pop('dt', None)             # <<<<<<<<<<<<<<
  *     if dt is not None:
  *         info.dt = asReal(dt)
  */
-  __pyx_tuple__27 = PyTuple_Pack(2, __pyx_n_s_dt, Py_None); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__27 = PyTuple_Pack(2, __pyx_n_s_dt, Py_None); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(6, 958, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__27);
   __Pyx_GIVEREF(__pyx_tuple__27);
 
-  /* "PETSc/petscmat.pxi":926
+  /* "PETSc/petscmat.pxi":961
  *     if dt is not None:
  *         info.dt = asReal(dt)
  *     cdef dtcol = options.pop('dtcol', None)             # <<<<<<<<<<<<<<
  *     if dtcol is not None:
  *         info.dtcol = asReal(dtcol)
  */
-  __pyx_tuple__28 = PyTuple_Pack(2, __pyx_n_s_dtcol, Py_None); if (unlikely(!__pyx_tuple__28)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__28 = PyTuple_Pack(2, __pyx_n_s_dtcol, Py_None); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(6, 961, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__28);
   __Pyx_GIVEREF(__pyx_tuple__28);
 
-  /* "PETSc/petscmat.pxi":929
+  /* "PETSc/petscmat.pxi":964
  *     if dtcol is not None:
  *         info.dtcol = asReal(dtcol)
  *     cdef dtcount = options.pop('dtcount', None)             # <<<<<<<<<<<<<<
  *     if dtcount is not None:
  *         info.dtcount = <PetscReal>asInt(dtcount)
  */
-  __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_dtcount, Py_None); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_dtcount, Py_None); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(6, 964, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__29);
   __Pyx_GIVEREF(__pyx_tuple__29);
 
-  /* "PETSc/petscmat.pxi":937
+  /* "PETSc/petscmat.pxi":972
  *         info.usedt = <PetscReal>PETSC_TRUE
  *     #
  *     cdef shifttype = options.pop('shifttype', None)             # <<<<<<<<<<<<<<
  *     if shifttype is not None:
  *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
  */
-  __pyx_tuple__30 = PyTuple_Pack(2, __pyx_n_s_shifttype, Py_None); if (unlikely(!__pyx_tuple__30)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 937; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__30 = PyTuple_Pack(2, __pyx_n_s_shifttype, Py_None); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(6, 972, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__30);
   __Pyx_GIVEREF(__pyx_tuple__30);
 
-  /* "PETSc/petscmat.pxi":940
+  /* "PETSc/petscmat.pxi":975
  *     if shifttype is not None:
  *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
  *     cdef shiftamount = options.pop('shiftamount', None)             # <<<<<<<<<<<<<<
  *     if shiftamount is not None:
  *         info.shiftamount = asReal(shiftamount)
  */
-  __pyx_tuple__31 = PyTuple_Pack(2, __pyx_n_s_shiftamount, Py_None); if (unlikely(!__pyx_tuple__31)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__31 = PyTuple_Pack(2, __pyx_n_s_shiftamount, Py_None); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(6, 975, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__31);
   __Pyx_GIVEREF(__pyx_tuple__31);
 
@@ -242925,7 +245550,7 @@ static int __Pyx_InitCachedConstants(void) {
  *                 author = [s.strip() for s in author if s]
  *                 out.append(author)
  */
-  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s__32); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s__32); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(25, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__33);
   __Pyx_GIVEREF(__pyx_tuple__33);
 
@@ -242936,7 +245561,7 @@ static int __Pyx_InitCachedConstants(void) {
  *         author = [s.strip() for s in author if s]
  *         return dict(major      = cmajor,
  */
-  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s__32); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s__32); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(25, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__34);
   __Pyx_GIVEREF(__pyx_tuple__34);
 
@@ -242947,7 +245572,7 @@ static int __Pyx_InitCachedConstants(void) {
  *         global PETSC_COMM_DEFAULT
  *         PETSC_COMM_DEFAULT = ccomm
  */
-  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(25, 73, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__35);
   __Pyx_GIVEREF(__pyx_tuple__35);
 
@@ -242958,7 +245583,7 @@ static int __Pyx_InitCachedConstants(void) {
  *             format = ['%s', sep] * len(args)
  *             format[-1] = end
  */
-  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(25, 86, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__36);
   __Pyx_GIVEREF(__pyx_tuple__36);
 
@@ -242969,10 +245594,21 @@ static int __Pyx_InitCachedConstants(void) {
  *         format = ['%s', sep] * len(args)
  *         format[-1] = end
  */
-  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(25, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__37);
   __Pyx_GIVEREF(__pyx_tuple__37);
 
+  /* "PETSc/Sys.pyx":175
+ *     @classmethod
+ *     def registerCitation(cls, citation):
+ *         if not citation: raise ValueError("empty citation")             # <<<<<<<<<<<<<<
+ *         cdef const_char *cit = NULL
+ *         citation = str2bytes(citation, &cit)
+ */
+  __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_empty_citation); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(25, 175, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__38);
+  __Pyx_GIVEREF(__pyx_tuple__38);
+
   /* "PETSc/Log.pyx":7
  *     @classmethod
  *     def Stage(cls, name):
@@ -242980,9 +245616,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__38)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__38);
-  __Pyx_GIVEREF(__pyx_tuple__38);
+  __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(26, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__39);
+  __Pyx_GIVEREF(__pyx_tuple__39);
 
   /* "PETSc/Log.pyx":21
  *     @classmethod
@@ -242991,9 +245627,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__39);
-  __Pyx_GIVEREF(__pyx_tuple__39);
+  __pyx_tuple__40 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(26, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__40);
+  __Pyx_GIVEREF(__pyx_tuple__40);
 
   /* "PETSc/Log.pyx":35
  *     @classmethod
@@ -243002,43 +245638,43 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __pyx_tuple__40 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__40)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__40);
-  __Pyx_GIVEREF(__pyx_tuple__40);
-
-  /* "PETSc/Log.pyx":131
- *             return self.getName()
- *         def __set__(self, value):
- *             raise TypeError("readonly attribute")             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(26, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__41);
   __Pyx_GIVEREF(__pyx_tuple__41);
 
-  /* "PETSc/Log.pyx":210
- *             return self.getName()
+  /* "PETSc/Log.pyx":133
  *         def __set__(self, value):
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_tuple__42 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__42)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__42 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(26, 133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__42);
   __Pyx_GIVEREF(__pyx_tuple__42);
 
-  /* "PETSc/Log.pyx":303
- *             return self.getName()
+  /* "PETSc/Log.pyx":213
  *         def __set__(self, value):
+ *             <void>self; <void>value; # unused
  *             raise TypeError("readonly attribute")             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__43)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(26, 213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__43);
   __Pyx_GIVEREF(__pyx_tuple__43);
 
+  /* "PETSc/Log.pyx":308
+ *         def __set__(self, value):
+ *             <void>self; <void>value; # unused
+ *             raise TypeError("readonly attribute")             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(26, 308, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__44);
+  __Pyx_GIVEREF(__pyx_tuple__44);
+
   /* "PETSc/Comm.pyx":25
  *         if not isinstance(self,  Comm): return NotImplemented
  *         if not isinstance(other, Comm): return NotImplemented
@@ -243046,9 +245682,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef Comm s = self
  *         cdef Comm o = other
  */
-  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_only_and); if (unlikely(!__pyx_tuple__44)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__44);
-  __Pyx_GIVEREF(__pyx_tuple__44);
+  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_only_and); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(9, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__45);
+  __Pyx_GIVEREF(__pyx_tuple__45);
 
   /* "PETSc/Comm.pyx":48
  *         if self.comm == MPI_COMM_NULL: return
@@ -243057,9 +245693,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         CHKERR( PetscCommDestroy(&self.comm) )
  *         self.comm = MPI_COMM_NULL
  */
-  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_communicator_not_owned); if (unlikely(!__pyx_tuple__45)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__45);
-  __Pyx_GIVEREF(__pyx_tuple__45);
+  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_communicator_not_owned); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(9, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__46);
+  __Pyx_GIVEREF(__pyx_tuple__46);
 
   /* "PETSc/Comm.pyx":56
  *     def duplicate(self):
@@ -243068,9 +245704,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef MPI_Comm newcomm = MPI_COMM_NULL
  *         CHKERR( PetscCommDuplicate(self.comm, &newcomm, NULL) )
  */
-  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__46)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__46);
-  __Pyx_GIVEREF(__pyx_tuple__46);
+  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(9, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__47);
+  __Pyx_GIVEREF(__pyx_tuple__47);
 
   /* "PETSc/Comm.pyx":67
  *     def getSize(self):
@@ -243079,9 +245715,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef int size=0
  *         MPI_Comm_size(self.comm, &size)
  */
-  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__47);
-  __Pyx_GIVEREF(__pyx_tuple__47);
+  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(9, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__48);
+  __Pyx_GIVEREF(__pyx_tuple__48);
 
   /* "PETSc/Comm.pyx":74
  *     def getRank(self):
@@ -243090,9 +245726,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef int rank=0
  *         MPI_Comm_rank(self.comm, &rank)
  */
-  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__48)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__48);
-  __Pyx_GIVEREF(__pyx_tuple__48);
+  __pyx_tuple__49 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(9, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__49);
+  __Pyx_GIVEREF(__pyx_tuple__49);
 
   /* "PETSc/Comm.pyx":81
  *     def barrier(self):
@@ -243101,9 +245737,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         MPI_Barrier(self.comm)
  * 
  */
-  __pyx_tuple__49 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__49);
-  __Pyx_GIVEREF(__pyx_tuple__49);
+  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(9, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__50);
+  __Pyx_GIVEREF(__pyx_tuple__50);
 
   /* "PETSc/Object.pyx":21
  *         if   op == 2: return (s.obj[0] == o.obj[0])
@@ -243112,56 +245748,78 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     def __nonzero__(self):
  */
-  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_only_and); if (unlikely(!__pyx_tuple__50)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__50);
-  __Pyx_GIVEREF(__pyx_tuple__50);
+  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_s_only_and); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(10, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__51);
+  __Pyx_GIVEREF(__pyx_tuple__51);
 
-  /* "PETSc/Vec.pyx":834
+  /* "PETSc/Vec.pyx":406
+ *             CHKERR( VecCUSPGetCUDAArrayWrite(self.vec, &hdl) )
+ *         else:
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")             # <<<<<<<<<<<<<<
+ *         return <Py_uintptr_t>hdl
+ * 
+ */
+  __pyx_tuple__52 = PyTuple_Pack(1, __pyx_kp_s_Invalid_mode_expected_rw_r_or_w); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(30, 406, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__52);
+  __Pyx_GIVEREF(__pyx_tuple__52);
+
+  /* "PETSc/Vec.pyx":420
+ *             CHKERR( VecCUSPRestoreCUDAArrayWrite(self.vec, &hdl) )
+ *         else:
+ *             raise ValueError("Invalid mode: expected 'rw', 'r', or 'w'")             # <<<<<<<<<<<<<<
+ * 
+ *     def duplicate(self, array=None):
+ */
+  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_s_Invalid_mode_expected_rw_r_or_w); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(30, 420, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__53);
+  __Pyx_GIVEREF(__pyx_tuple__53);
+
+  /* "PETSc/Vec.pyx":860
  *         "Vec buffer (read-only)"
  *         def __get__(self):
  *             return self.getBuffer(True)             # <<<<<<<<<<<<<<
  * 
  *     property array_w:
  */
-  __pyx_tuple__51 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__51);
-  __Pyx_GIVEREF(__pyx_tuple__51);
+  __pyx_tuple__54 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(30, 860, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__54);
+  __Pyx_GIVEREF(__pyx_tuple__54);
 
-  /* "PETSc/Vec.pyx":842
+  /* "PETSc/Vec.pyx":868
  *         def __set__(self, value):
  *             cdef buf = self.getBuffer()
  *             with buf as array: array[:] = value             # <<<<<<<<<<<<<<
  * 
  *     property array_r:
  */
-  __pyx_slice__52 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__52)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_slice__52);
-  __Pyx_GIVEREF(__pyx_slice__52);
-  __pyx_tuple__53 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__53);
-  __Pyx_GIVEREF(__pyx_tuple__53);
+  __pyx_slice__55 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__55)) __PYX_ERR(30, 868, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__55);
+  __Pyx_GIVEREF(__pyx_slice__55);
+  __pyx_tuple__56 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(30, 868, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__56);
+  __Pyx_GIVEREF(__pyx_tuple__56);
 
-  /* "PETSc/Vec.pyx":847
+  /* "PETSc/Vec.pyx":873
  *         "Vec array (read-only)"
  *         def __get__(self):
  *             return self.getArray(True)             # <<<<<<<<<<<<<<
  * 
  *     property buffer:
  */
-  __pyx_tuple__54 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__54)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__54);
-  __Pyx_GIVEREF(__pyx_tuple__54);
+  __pyx_tuple__57 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(30, 873, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__57);
+  __Pyx_GIVEREF(__pyx_tuple__57);
 
-  /* "PETSc/Mat.pyx":1028
+  /* "PETSc/Mat.pyx":1055
  *         cdef ndarray ibdiag = array_s(m*bs, cibdiag)
  *         ibdiag.shape = (toInt(m//bs), toInt(bs), toInt(bs))
  *         return ibdiag.transpose(0, 2, 1)             # <<<<<<<<<<<<<<
  * 
  *     # null space
  */
-  __pyx_tuple__55 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_2, __pyx_int_1); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1028; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__55);
-  __Pyx_GIVEREF(__pyx_tuple__55);
+  __pyx_tuple__58 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_2, __pyx_int_1); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(33, 1055, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__58);
+  __Pyx_GIVEREF(__pyx_tuple__58);
 
   /* "PETSc/SNES.pyx":179
  *         if comms is not None:
@@ -243170,67 +245828,67 @@ static int __Pyx_InitCachedConstants(void) {
  *             CHKERR( PetscMalloc(sizeof(MPI_Comm)*<size_t>clevels, &ccomms) )
  *             try:
  */
-  __pyx_tuple__56 = PyTuple_Pack(1, __pyx_kp_s_Must_provide_as_many_communicato); if (unlikely(!__pyx_tuple__56)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__56);
-  __Pyx_GIVEREF(__pyx_tuple__56);
+  __pyx_tuple__59 = PyTuple_Pack(1, __pyx_kp_s_Must_provide_as_many_communicato); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(36, 179, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__59);
+  __Pyx_GIVEREF(__pyx_tuple__59);
 
-  /* "PETSc/TAO.pyx":596
+  /* "PETSc/TAO.pyx":575
  *                 self.setFunctionTolerances(**value)
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")             # <<<<<<<<<<<<<<
  * 
  *     property gtol:
  */
-  __pyx_tuple__57 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__57)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__57);
-  __Pyx_GIVEREF(__pyx_tuple__57);
+  __pyx_tuple__60 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(38, 575, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__60);
+  __Pyx_GIVEREF(__pyx_tuple__60);
 
-  /* "PETSc/TAO.pyx":607
+  /* "PETSc/TAO.pyx":586
  *                 self.getGradientTolerances(**value)
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")             # <<<<<<<<<<<<<<
  * 
  *     property ctol:
  */
-  __pyx_tuple__58 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__58)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__58);
-  __Pyx_GIVEREF(__pyx_tuple__58);
+  __pyx_tuple__61 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(38, 586, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__61);
+  __Pyx_GIVEREF(__pyx_tuple__61);
 
-  /* "PETSc/TAO.pyx":618
+  /* "PETSc/TAO.pyx":597
  *                 self.getConstraintTolerances(**value)
  *             else:
  *                 raise TypeError("expecting tuple/list or dict")             # <<<<<<<<<<<<<<
  * 
  *     # --- iteration ---
  */
-  __pyx_tuple__59 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__59)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__59);
-  __Pyx_GIVEREF(__pyx_tuple__59);
+  __pyx_tuple__62 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(38, 597, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__62);
+  __Pyx_GIVEREF(__pyx_tuple__62);
 
-  /* "PETSc/DMPlex.pyx":433
+  /* "PETSc/DMPlex.pyx":335
  *         finally:
  *             CHKERR( DMPlexRestoreTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )
  *         return out[::2],out[1::2]             # <<<<<<<<<<<<<<
  * 
  *     def vecGetClosure(self, Section sec, Vec vec, p):
  */
-  __pyx_slice__60 = PySlice_New(Py_None, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__60)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_slice__60);
-  __Pyx_GIVEREF(__pyx_slice__60);
-  __pyx_slice__61 = PySlice_New(__pyx_int_1, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__61)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_slice__61);
-  __Pyx_GIVEREF(__pyx_slice__61);
+  __pyx_slice__63 = PySlice_New(Py_None, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__63)) __PYX_ERR(42, 335, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__63);
+  __Pyx_GIVEREF(__pyx_slice__63);
+  __pyx_slice__64 = PySlice_New(__pyx_int_1, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__64)) __PYX_ERR(42, 335, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__64);
+  __Pyx_GIVEREF(__pyx_slice__64);
 
-  /* "PETSc/DMPlex.pyx":564
+  /* "PETSc/DMPlex.pyx":480
  *                     bcpoints[i] = (<IS?>bcPoints[<Py_ssize_t>i]).iset
  *             else:
  *                 raise ValueError("bcPoints is a required argument")             # <<<<<<<<<<<<<<
  *         else:
  *             assert bcComps  is None
  */
-  __pyx_tuple__62 = PyTuple_Pack(1, __pyx_kp_s_bcPoints_is_a_required_argument); if (unlikely(!__pyx_tuple__62)) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__62);
-  __Pyx_GIVEREF(__pyx_tuple__62);
+  __pyx_tuple__65 = PyTuple_Pack(1, __pyx_kp_s_bcPoints_is_a_required_argument); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(42, 480, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__65);
+  __Pyx_GIVEREF(__pyx_tuple__65);
 
   /* "PETSc/Partitioner.pyx":61
  *                                  numProcs, toInt(nsize))
@@ -243239,9 +245897,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         if points is not None:
  *             points = iarray_i(points, NULL, &cpoints)
  */
-  __pyx_tuple__63 = PyTuple_Pack(1, __pyx_kp_s_Must_provide_both_sizes_and_poin); if (unlikely(!__pyx_tuple__63)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__63);
-  __Pyx_GIVEREF(__pyx_tuple__63);
+  __pyx_tuple__66 = PyTuple_Pack(1, __pyx_kp_s_Must_provide_both_sizes_and_poin); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(46, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__66);
+  __Pyx_GIVEREF(__pyx_tuple__66);
 
   /* "PETSc/PETSc.pyx":212
  *         return n
@@ -243250,9 +245908,9 @@ static int __Pyx_InitCachedConstants(void) {
  *     if n == PETSC_ERR_MEM: # special case
  *         PetscMallocGetCurrentUsage(&mem)
  */
-  __pyx_slice__64 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__64)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_slice__64);
-  __Pyx_GIVEREF(__pyx_slice__64);
+  __pyx_slice__67 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__67)) __PYX_ERR(11, 212, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__67);
+  __Pyx_GIVEREF(__pyx_slice__67);
 
   /* "PETSc/Error.pyx":7
  *     _traceback_ = []
@@ -243261,10 +245919,10 @@ static int __Pyx_InitCachedConstants(void) {
  *         self.ierr = ierr
  *         RuntimeError.__init__(self, self.ierr)
  */
-  __pyx_tuple__65 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__65)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__65);
-  __Pyx_GIVEREF(__pyx_tuple__65);
-  __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_6_0_src_P, __pyx_n_s_init, 7, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__68 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__68);
+  __Pyx_GIVEREF(__pyx_tuple__68);
+  __pyx_codeobj__69 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_7_0_src_P, __pyx_n_s_init, 7, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__69)) __PYX_ERR(1, 7, __pyx_L1_error)
 
   /* "PETSc/Error.pyx":11
  *         RuntimeError.__init__(self, self.ierr)
@@ -243273,10 +245931,10 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef int ierr = self.ierr
  *         return ierr != 0
  */
-  __pyx_tuple__67 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__67)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__67);
-  __Pyx_GIVEREF(__pyx_tuple__67);
-  __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_6_0_src_P, __pyx_n_s_nonzero_2, 11, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__70 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(1, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__70);
+  __Pyx_GIVEREF(__pyx_tuple__70);
+  __pyx_codeobj__71 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_7_0_src_P, __pyx_n_s_nonzero_2, 11, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__71)) __PYX_ERR(1, 11, __pyx_L1_error)
 
   /* "PETSc/Error.pyx":15
  *         return ierr != 0
@@ -243285,10 +245943,10 @@ static int __Pyx_InitCachedConstants(void) {
  *         return 'PETSc.Error(%d)' % self.ierr
  * 
  */
-  __pyx_tuple__69 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__69)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__69);
-  __Pyx_GIVEREF(__pyx_tuple__69);
-  __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_6_0_src_P, __pyx_n_s_repr, 15, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__72 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(1, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__72);
+  __Pyx_GIVEREF(__pyx_tuple__72);
+  __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_7_0_src_P, __pyx_n_s_repr, 15, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(1, 15, __pyx_L1_error)
 
   /* "PETSc/Error.pyx":18
  *         return 'PETSc.Error(%d)' % self.ierr
@@ -243297,31 +245955,31 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef int csize=1, crank=0
  *         if not (<int>PetscFinalizeCalled):
  */
-  __pyx_tuple__71 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_csize, __pyx_n_s_crank, __pyx_n_s_width, __pyx_n_s_rank, __pyx_n_s_tblist, __pyx_n_s_entry, __pyx_n_s_tbline); if (unlikely(!__pyx_tuple__71)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__71);
-  __Pyx_GIVEREF(__pyx_tuple__71);
-  __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_6_0_src_P, __pyx_n_s_str, 18, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__74 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_csize, __pyx_n_s_crank, __pyx_n_s_width, __pyx_n_s_rank, __pyx_n_s_tblist, __pyx_n_s_entry, __pyx_n_s_tbline); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(1, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__74);
+  __Pyx_GIVEREF(__pyx_tuple__74);
+  __pyx_codeobj__75 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_7_0_src_P, __pyx_n_s_str, 18, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__75)) __PYX_ERR(1, 18, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":416
+  /* "PETSc/PETSc.pyx":417
  * # --------------------------------------------------------------------
  * 
  * def _initialize(args=None, comm=None):             # <<<<<<<<<<<<<<
  *     global tracebacklist
  *     Error._traceback_ = tracebacklist
  */
-  __pyx_tuple__73 = PyTuple_Pack(3, __pyx_n_s_args, __pyx_n_s_comm, __pyx_n_s_ready); if (unlikely(!__pyx_tuple__73)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__73);
-  __Pyx_GIVEREF(__pyx_tuple__73);
-  __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_6_0_src_P_2, __pyx_n_s_initialize, 416, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__76 = PyTuple_Pack(3, __pyx_n_s_args, __pyx_n_s_comm, __pyx_n_s_ready); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(11, 417, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__76);
+  __Pyx_GIVEREF(__pyx_tuple__76);
+  __pyx_codeobj__77 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_petsc4py_3_7_0_src_P_2, __pyx_n_s_initialize, 417, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__77)) __PYX_ERR(11, 417, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":432
+  /* "PETSc/PETSc.pyx":433
  *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD
  * 
  * def _finalize():             # <<<<<<<<<<<<<<
  *     finalize()
  *     #
  */
-  __pyx_codeobj__75 = (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_petsc4py_3_6_0_src_P_2, __pyx_n_s_finalize, 432, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__75)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__78 = (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_petsc4py_3_7_0_src_P_2, __pyx_n_s_finalize, 433, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(11, 433, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -243330,14 +245988,16 @@ static int __Pyx_InitCachedConstants(void) {
 }
 
 static int __Pyx_InitGlobals(void) {
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_umethod_PyDict_Type_keys.type = (PyObject*)&PyDict_Type;
+  __pyx_umethod_PyList_Type_pop.type = (PyObject*)&PyList_Type;
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(48, 1, __pyx_L1_error);
+  __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(48, 1, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -243359,9 +246019,6 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannyDeclarations
   #if CYTHON_REFNANNY
   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
@@ -243373,17 +246030,24 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   }
   #endif
   __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_PETSc(void)", 0);
-  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[48]; __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[48]; __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[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_check_binary_version() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(48, 1, __pyx_L1_error)
   #ifdef __Pyx_CyFunction_USED
-  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_CyFunction_init() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   #endif
   #ifdef __Pyx_FusedFunction_USED
-  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_Coroutine_USED
+  if (__pyx_Coroutine_init() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   #endif
   #ifdef __Pyx_Generator_USED
-  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_Generator_init() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_StopAsyncIteration_USED
+  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
@@ -243398,36 +246062,37 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   #else
   __pyx_m = PyModule_Create(&__pyx_moduledef);
   #endif
-  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_m)) __PYX_ERR(48, 1, __pyx_L1_error)
+  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(48, 1, __pyx_L1_error)
   Py_INCREF(__pyx_d);
-  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(48, 1, __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[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(48, 1, __pyx_L1_error);
   /*--- Initialize various global constants etc. ---*/
-  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitGlobals() < 0) __PYX_ERR(48, 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_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   #endif
   if (__pyx_module_is_main_petsc4py__PETSc) {
-    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   }
   #if PY_MAJOR_VERSION >= 3
   {
-    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(48, 1, __pyx_L1_error)
     if (!PyDict_GetItemString(modules, "petsc4py.PETSc")) {
-      if (unlikely(PyDict_SetItemString(modules, "petsc4py.PETSc", __pyx_m) < 0)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(PyDict_SetItemString(modules, "petsc4py.PETSc", __pyx_m) < 0)) __PYX_ERR(48, 1, __pyx_L1_error)
     }
   }
   #endif
   /*--- Builtin init code ---*/
-  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   /*--- Constants init code ---*/
-  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   /*--- Global init code ---*/
   __pyx_v_8petsc4py_5PETSc_PetscError = Py_None; Py_INCREF(Py_None);
+  __pyx_v_8petsc4py_5PETSc_citations_registry = ((PyObject*)Py_None); Py_INCREF(Py_None);
   __pyx_v_8petsc4py_5PETSc_stage_registry = ((PyObject*)Py_None); Py_INCREF(Py_None);
   __pyx_v_8petsc4py_5PETSc_class_registry = ((PyObject*)Py_None); Py_INCREF(Py_None);
   __pyx_v_8petsc4py_5PETSc_event_registry = ((PyObject*)Py_None); Py_INCREF(Py_None);
@@ -243438,226 +246103,230 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __pyx_v_8petsc4py_5PETSc_tracebacklist = Py_None; Py_INCREF(Py_None);
   /*--- Variable export code ---*/
   /*--- Function export code ---*/
-  if (__Pyx_ExportFunction("GetComm", (void (*)(void))__pyx_f_8petsc4py_5PETSc_GetComm, "MPI_Comm (PyObject *, MPI_Comm)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("GetCommDefault", (void (*)(void))__pyx_f_8petsc4py_5PETSc_GetCommDefault, "MPI_Comm (void)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscType_Register", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscType_Register, "int (int, PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscType_Lookup", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup, "PyObject *(int)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscError_Set", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscError_Set, "int (int)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscComm_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscComm_New, "PyObject *(MPI_Comm)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscComm_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscComm_Get, "MPI_Comm (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscComm_GetPtr", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscComm_GetPtr, "MPI_Comm *(PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscObject_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscObject_New, "PyObject *(PetscObject)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscObject_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscObject_Get, "PetscObject (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscObject_GetPtr", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscObject_GetPtr, "PetscObject *(PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscViewer_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscViewer_New, "PyObject *(PetscViewer)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscViewer_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscViewer_Get, "PetscViewer (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscRandom_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscRandom_New, "PyObject *(PetscRandom)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscRandom_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscRandom_Get, "PetscRandom (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscIS_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscIS_New, "PyObject *(IS)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscIS_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscIS_Get, "IS (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscLGMap_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_New, "PyObject *(ISLocalToGlobalMapping)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscLGMap_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_Get, "ISLocalToGlobalMapping (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscSF_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSF_New, "PyObject *(PetscSF)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscSF_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSF_Get, "PetscSF (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscVec_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscVec_New, "PyObject *(Vec)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscVec_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscVec_Get, "Vec (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscScatter_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscScatter_New, "PyObject *(VecScatter)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscScatter_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get, "VecScatter (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscMat_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscMat_New, "PyObject *(Mat)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscMat_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscMat_Get, "Mat (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscPC_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscPC_New, "PyObject *(PC)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscPC_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscPC_Get, "PC (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscKSP_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscKSP_New, "PyObject *(KSP)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscKSP_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get, "KSP (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscSNES_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New, "PyObject *(SNES)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscSNES_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get, "SNES (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscTS_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscTS_New, "PyObject *(TS)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscTS_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscTS_Get, "TS (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscAO_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscAO_New, "PyObject *(AO)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscAO_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscAO_Get, "AO (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscDM_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscDM_New, "PyObject *(DM)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscDM_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscDM_Get, "DM (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscPartitioner_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New, "PyObject *(PetscPartitioner)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PyPetscPartitioner_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get, "PetscPartitioner (PyObject *)") < 0) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_ExportFunction("GetComm", (void (*)(void))__pyx_f_8petsc4py_5PETSc_GetComm, "MPI_Comm (PyObject *, MPI_Comm)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("GetCommDefault", (void (*)(void))__pyx_f_8petsc4py_5PETSc_GetCommDefault, "MPI_Comm (void)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscType_Register", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscType_Register, "int (int, PyTypeObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscType_Lookup", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup, "PyTypeObject *(int)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscError_Set", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscError_Set, "int (int)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscComm_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscComm_New, "PyObject *(MPI_Comm)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscComm_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscComm_Get, "MPI_Comm (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscComm_GetPtr", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscComm_GetPtr, "MPI_Comm *(PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscObject_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscObject_New, "PyObject *(PetscObject)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscObject_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscObject_Get, "PetscObject (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscObject_GetPtr", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscObject_GetPtr, "PetscObject *(PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscViewer_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscViewer_New, "PyObject *(PetscViewer)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscViewer_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscViewer_Get, "PetscViewer (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscRandom_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscRandom_New, "PyObject *(PetscRandom)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscRandom_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscRandom_Get, "PetscRandom (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscIS_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscIS_New, "PyObject *(IS)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscIS_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscIS_Get, "IS (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscLGMap_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_New, "PyObject *(ISLocalToGlobalMapping)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscLGMap_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscLGMap_Get, "ISLocalToGlobalMapping (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscSF_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSF_New, "PyObject *(PetscSF)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscSF_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSF_Get, "PetscSF (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscVec_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscVec_New, "PyObject *(Vec)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscVec_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscVec_Get, "Vec (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscScatter_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscScatter_New, "PyObject *(VecScatter)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscScatter_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscScatter_Get, "VecScatter (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscSection_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSection_New, "PyObject *(PetscSection)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscSection_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSection_Get, "PetscSection (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscMat_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscMat_New, "PyObject *(Mat)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscMat_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscMat_Get, "Mat (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscPC_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscPC_New, "PyObject *(PC)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscPC_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscPC_Get, "PC (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscKSP_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscKSP_New, "PyObject *(KSP)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscKSP_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscKSP_Get, "KSP (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscSNES_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New, "PyObject *(SNES)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscSNES_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscSNES_Get, "SNES (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscTS_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscTS_New, "PyObject *(TS)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscTS_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscTS_Get, "TS (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscTAO_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscTAO_New, "PyObject *(Tao)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscTAO_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscTAO_Get, "Tao (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscAO_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscAO_New, "PyObject *(AO)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscAO_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscAO_Get, "AO (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscDM_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscDM_New, "PyObject *(DM)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscDM_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscDM_Get, "DM (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscPartitioner_New", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New, "PyObject *(PetscPartitioner)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PyPetscPartitioner_Get", (void (*)(void))__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get, "PetscPartitioner (PyObject *)") < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   /*--- Type init code ---*/
-  if (PyType_Ready(&PyPetscComm_Type) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscComm_Type) < 0) __PYX_ERR(9, 3, __pyx_L1_error)
   PyPetscComm_Type.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "Comm", (PyObject *)&PyPetscComm_Type) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Comm", (PyObject *)&PyPetscComm_Type) < 0) __PYX_ERR(9, 3, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc_Comm = &PyPetscComm_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_Object = &__pyx_vtable_8petsc4py_5PETSc_Object;
   __pyx_vtable_8petsc4py_5PETSc_Object.get_attr = (PyObject *(*)(struct PyPetscObjectObject *, char *))__pyx_f_8petsc4py_5PETSc_6Object_get_attr;
   __pyx_vtable_8petsc4py_5PETSc_Object.set_attr = (PyObject *(*)(struct PyPetscObjectObject *, char *, PyObject *))__pyx_f_8petsc4py_5PETSc_6Object_set_attr;
   __pyx_vtable_8petsc4py_5PETSc_Object.get_dict = (PyObject *(*)(struct PyPetscObjectObject *))__pyx_f_8petsc4py_5PETSc_6Object_get_dict;
-  if (PyType_Ready(&PyPetscObject_Type) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscObject_Type) < 0) __PYX_ERR(10, 3, __pyx_L1_error)
   PyPetscObject_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscObject_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Object) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "Object", (PyObject *)&PyPetscObject_Type) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscObject_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Object) < 0) __PYX_ERR(10, 3, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Object", (PyObject *)&PyPetscObject_Type) < 0) __PYX_ERR(10, 3, __pyx_L1_error)
   if (PyPetscObject_Type.tp_weaklistoffset == 0) PyPetscObject_Type.tp_weaklistoffset = offsetof(struct PyPetscObjectObject, __weakref__);
   __pyx_ptype_8petsc4py_5PETSc_Object = &PyPetscObject_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_Viewer = &__pyx_vtable_8petsc4py_5PETSc_Viewer;
   __pyx_vtable_8petsc4py_5PETSc_Viewer.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscViewer_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscViewer_Type) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscViewer_Type) < 0) __PYX_ERR(27, 74, __pyx_L1_error)
   PyPetscViewer_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscViewer_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Viewer) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "Viewer", (PyObject *)&PyPetscViewer_Type) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscViewer_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Viewer) < 0) __PYX_ERR(27, 74, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Viewer", (PyObject *)&PyPetscViewer_Type) < 0) __PYX_ERR(27, 74, __pyx_L1_error)
   if (PyPetscViewer_Type.tp_weaklistoffset == 0) PyPetscViewer_Type.tp_weaklistoffset = offsetof(struct PyPetscViewerObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_Viewer = &PyPetscViewer_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_Random = &__pyx_vtable_8petsc4py_5PETSc_Random;
   __pyx_vtable_8petsc4py_5PETSc_Random.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscRandom_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscRandom_Type) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscRandom_Type) < 0) __PYX_ERR(28, 11, __pyx_L1_error)
   PyPetscRandom_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscRandom_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Random) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "Random", (PyObject *)&PyPetscRandom_Type) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscRandom_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Random) < 0) __PYX_ERR(28, 11, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Random", (PyObject *)&PyPetscRandom_Type) < 0) __PYX_ERR(28, 11, __pyx_L1_error)
   if (PyPetscRandom_Type.tp_weaklistoffset == 0) PyPetscRandom_Type.tp_weaklistoffset = offsetof(struct PyPetscRandomObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_Random = &PyPetscRandom_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_IS = &__pyx_vtable_8petsc4py_5PETSc_IS;
   __pyx_vtable_8petsc4py_5PETSc_IS.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscIS_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscIS_Type) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscIS_Type) < 0) __PYX_ERR(29, 10, __pyx_L1_error)
   PyPetscIS_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscIS_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_IS) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "IS", (PyObject *)&PyPetscIS_Type) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscIS_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_IS) < 0) __PYX_ERR(29, 10, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "IS", (PyObject *)&PyPetscIS_Type) < 0) __PYX_ERR(29, 10, __pyx_L1_error)
   if (PyPetscIS_Type.tp_weaklistoffset == 0) PyPetscIS_Type.tp_weaklistoffset = offsetof(struct PyPetscISObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_IS = &PyPetscIS_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_LGMap = &__pyx_vtable_8petsc4py_5PETSc_LGMap;
   __pyx_vtable_8petsc4py_5PETSc_LGMap.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscLGMap_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscLGMap_Type) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscLGMap_Type) < 0) __PYX_ERR(29, 350, __pyx_L1_error)
   PyPetscLGMap_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscLGMap_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_LGMap) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "LGMap", (PyObject *)&PyPetscLGMap_Type) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscLGMap_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_LGMap) < 0) __PYX_ERR(29, 350, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "LGMap", (PyObject *)&PyPetscLGMap_Type) < 0) __PYX_ERR(29, 350, __pyx_L1_error)
   if (PyPetscLGMap_Type.tp_weaklistoffset == 0) PyPetscLGMap_Type.tp_weaklistoffset = offsetof(struct PyPetscLGMapObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_LGMap = &PyPetscLGMap_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_SF = &__pyx_vtable_8petsc4py_5PETSc_SF;
   __pyx_vtable_8petsc4py_5PETSc_SF.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscSF_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscSF_Type) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscSF_Type) < 0) __PYX_ERR(45, 9, __pyx_L1_error)
   PyPetscSF_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscSF_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_SF) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "SF", (PyObject *)&PyPetscSF_Type) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscSF_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_SF) < 0) __PYX_ERR(45, 9, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "SF", (PyObject *)&PyPetscSF_Type) < 0) __PYX_ERR(45, 9, __pyx_L1_error)
   if (PyPetscSF_Type.tp_weaklistoffset == 0) PyPetscSF_Type.tp_weaklistoffset = offsetof(struct PyPetscSFObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_SF = &PyPetscSF_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_Vec = &__pyx_vtable_8petsc4py_5PETSc_Vec;
   __pyx_vtable_8petsc4py_5PETSc_Vec.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscVec_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscVec_Type) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscVec_Type) < 0) __PYX_ERR(30, 25, __pyx_L1_error)
   PyPetscVec_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscVec_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Vec) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "Vec", (PyObject *)&PyPetscVec_Type) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscVec_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Vec) < 0) __PYX_ERR(30, 25, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Vec", (PyObject *)&PyPetscVec_Type) < 0) __PYX_ERR(30, 25, __pyx_L1_error)
   if (PyPetscVec_Type.tp_weaklistoffset == 0) PyPetscVec_Type.tp_weaklistoffset = offsetof(struct PyPetscVecObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_Vec = &PyPetscVec_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_Scatter = &__pyx_vtable_8petsc4py_5PETSc_Scatter;
   __pyx_vtable_8petsc4py_5PETSc_Scatter.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscScatter_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscScatter_Type) < 0) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscScatter_Type) < 0) __PYX_ERR(31, 3, __pyx_L1_error)
   PyPetscScatter_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscScatter_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Scatter) < 0) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "Scatter", (PyObject *)&PyPetscScatter_Type) < 0) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscScatter_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Scatter) < 0) __PYX_ERR(31, 3, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Scatter", (PyObject *)&PyPetscScatter_Type) < 0) __PYX_ERR(31, 3, __pyx_L1_error)
   if (PyPetscScatter_Type.tp_weaklistoffset == 0) PyPetscScatter_Type.tp_weaklistoffset = offsetof(struct PyPetscScatterObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_Scatter = &PyPetscScatter_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_Section = &__pyx_vtable_8petsc4py_5PETSc_Section;
   __pyx_vtable_8petsc4py_5PETSc_Section.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscSection_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscSection_Type) < 0) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscSection_Type) < 0) __PYX_ERR(32, 3, __pyx_L1_error)
   PyPetscSection_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscSection_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Section) < 0) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "Section", (PyObject *)&PyPetscSection_Type) < 0) {__pyx_filename = __pyx_f[32]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscSection_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Section) < 0) __PYX_ERR(32, 3, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Section", (PyObject *)&PyPetscSection_Type) < 0) __PYX_ERR(32, 3, __pyx_L1_error)
   if (PyPetscSection_Type.tp_weaklistoffset == 0) PyPetscSection_Type.tp_weaklistoffset = offsetof(struct PyPetscSectionObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_Section = &PyPetscSection_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_Mat = &__pyx_vtable_8petsc4py_5PETSc_Mat;
   __pyx_vtable_8petsc4py_5PETSc_Mat.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscMat_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscMat_Type) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscMat_Type) < 0) __PYX_ERR(33, 148, __pyx_L1_error)
   PyPetscMat_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscMat_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Mat) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "Mat", (PyObject *)&PyPetscMat_Type) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscMat_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Mat) < 0) __PYX_ERR(33, 148, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Mat", (PyObject *)&PyPetscMat_Type) < 0) __PYX_ERR(33, 148, __pyx_L1_error)
   if (PyPetscMat_Type.tp_weaklistoffset == 0) PyPetscMat_Type.tp_weaklistoffset = offsetof(struct PyPetscMatObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_Mat = &PyPetscMat_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_NullSpace = &__pyx_vtable_8petsc4py_5PETSc_NullSpace;
   __pyx_vtable_8petsc4py_5PETSc_NullSpace.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscNullSpace_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscNullSpace_Type) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscNullSpace_Type) < 0) __PYX_ERR(33, 1461, __pyx_L1_error)
   PyPetscNullSpace_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscNullSpace_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_NullSpace) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "NullSpace", (PyObject *)&PyPetscNullSpace_Type) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscNullSpace_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_NullSpace) < 0) __PYX_ERR(33, 1461, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "NullSpace", (PyObject *)&PyPetscNullSpace_Type) < 0) __PYX_ERR(33, 1461, __pyx_L1_error)
   if (PyPetscNullSpace_Type.tp_weaklistoffset == 0) PyPetscNullSpace_Type.tp_weaklistoffset = offsetof(struct PyPetscNullSpaceObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_NullSpace = &PyPetscNullSpace_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_PC = &__pyx_vtable_8petsc4py_5PETSc_PC;
   __pyx_vtable_8petsc4py_5PETSc_PC.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscPC_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscPC_Type) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscPC_Type) < 0) __PYX_ERR(34, 104, __pyx_L1_error)
   PyPetscPC_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscPC_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_PC) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "PC", (PyObject *)&PyPetscPC_Type) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscPC_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_PC) < 0) __PYX_ERR(34, 104, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "PC", (PyObject *)&PyPetscPC_Type) < 0) __PYX_ERR(34, 104, __pyx_L1_error)
   if (PyPetscPC_Type.tp_weaklistoffset == 0) PyPetscPC_Type.tp_weaklistoffset = offsetof(struct PyPetscPCObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_PC = &PyPetscPC_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_KSP = &__pyx_vtable_8petsc4py_5PETSc_KSP;
   __pyx_vtable_8petsc4py_5PETSc_KSP.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscKSP_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscKSP_Type) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscKSP_Type) < 0) __PYX_ERR(35, 86, __pyx_L1_error)
   PyPetscKSP_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscKSP_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_KSP) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "KSP", (PyObject *)&PyPetscKSP_Type) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscKSP_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_KSP) < 0) __PYX_ERR(35, 86, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "KSP", (PyObject *)&PyPetscKSP_Type) < 0) __PYX_ERR(35, 86, __pyx_L1_error)
   if (PyPetscKSP_Type.tp_weaklistoffset == 0) PyPetscKSP_Type.tp_weaklistoffset = offsetof(struct PyPetscKSPObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_KSP = &PyPetscKSP_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_SNES = &__pyx_vtable_8petsc4py_5PETSc_SNES;
   __pyx_vtable_8petsc4py_5PETSc_SNES.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscSNES_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscSNES_Type) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscSNES_Type) < 0) __PYX_ERR(36, 61, __pyx_L1_error)
   PyPetscSNES_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscSNES_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_SNES) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "SNES", (PyObject *)&PyPetscSNES_Type) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscSNES_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_SNES) < 0) __PYX_ERR(36, 61, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "SNES", (PyObject *)&PyPetscSNES_Type) < 0) __PYX_ERR(36, 61, __pyx_L1_error)
   if (PyPetscSNES_Type.tp_weaklistoffset == 0) PyPetscSNES_Type.tp_weaklistoffset = offsetof(struct PyPetscSNESObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_SNES = &PyPetscSNES_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_TS = &__pyx_vtable_8petsc4py_5PETSc_TS;
   __pyx_vtable_8petsc4py_5PETSc_TS.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscTS_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscTS_Type) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscTS_Type) < 0) __PYX_ERR(37, 69, __pyx_L1_error)
   PyPetscTS_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscTS_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_TS) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "TS", (PyObject *)&PyPetscTS_Type) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscTS_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_TS) < 0) __PYX_ERR(37, 69, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "TS", (PyObject *)&PyPetscTS_Type) < 0) __PYX_ERR(37, 69, __pyx_L1_error)
   if (PyPetscTS_Type.tp_weaklistoffset == 0) PyPetscTS_Type.tp_weaklistoffset = offsetof(struct PyPetscTSObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_TS = &PyPetscTS_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_TAO = &__pyx_vtable_8petsc4py_5PETSc_TAO;
   __pyx_vtable_8petsc4py_5PETSc_TAO.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscTAO_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscTAO_Type) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscTAO_Type) < 0) __PYX_ERR(38, 53, __pyx_L1_error)
   PyPetscTAO_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscTAO_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_TAO) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "TAO", (PyObject *)&PyPetscTAO_Type) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscTAO_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_TAO) < 0) __PYX_ERR(38, 53, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "TAO", (PyObject *)&PyPetscTAO_Type) < 0) __PYX_ERR(38, 53, __pyx_L1_error)
   if (PyPetscTAO_Type.tp_weaklistoffset == 0) PyPetscTAO_Type.tp_weaklistoffset = offsetof(struct PyPetscTAOObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_TAO = &PyPetscTAO_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_AO = &__pyx_vtable_8petsc4py_5PETSc_AO;
   __pyx_vtable_8petsc4py_5PETSc_AO.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscAO_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscAO_Type) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscAO_Type) < 0) __PYX_ERR(39, 11, __pyx_L1_error)
   PyPetscAO_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscAO_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_AO) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "AO", (PyObject *)&PyPetscAO_Type) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscAO_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_AO) < 0) __PYX_ERR(39, 11, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "AO", (PyObject *)&PyPetscAO_Type) < 0) __PYX_ERR(39, 11, __pyx_L1_error)
   if (PyPetscAO_Type.tp_weaklistoffset == 0) PyPetscAO_Type.tp_weaklistoffset = offsetof(struct PyPetscAOObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_AO = &PyPetscAO_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_DM = &__pyx_vtable_8petsc4py_5PETSc_DM;
   __pyx_vtable_8petsc4py_5PETSc_DM.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscDM_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscDM_Type) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscDM_Type) < 0) __PYX_ERR(40, 24, __pyx_L1_error)
   PyPetscDM_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscDM_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DM) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "DM", (PyObject *)&PyPetscDM_Type) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscDM_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DM) < 0) __PYX_ERR(40, 24, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "DM", (PyObject *)&PyPetscDM_Type) < 0) __PYX_ERR(40, 24, __pyx_L1_error)
   if (PyPetscDM_Type.tp_weaklistoffset == 0) PyPetscDM_Type.tp_weaklistoffset = offsetof(struct PyPetscDMObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_DM = &PyPetscDM_Type;
   __pyx_vtabptr_8petsc4py_5PETSc_Partitioner = &__pyx_vtable_8petsc4py_5PETSc_Partitioner;
   __pyx_vtable_8petsc4py_5PETSc_Partitioner.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
   PyPetscPartitioner_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PyPetscPartitioner_Type) < 0) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&PyPetscPartitioner_Type) < 0) __PYX_ERR(46, 10, __pyx_L1_error)
   PyPetscPartitioner_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PyPetscPartitioner_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Partitioner) < 0) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "Partitioner", (PyObject *)&PyPetscPartitioner_Type) < 0) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(PyPetscPartitioner_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Partitioner) < 0) __PYX_ERR(46, 10, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Partitioner", (PyObject *)&PyPetscPartitioner_Type) < 0) __PYX_ERR(46, 10, __pyx_L1_error)
   if (PyPetscPartitioner_Type.tp_weaklistoffset == 0) PyPetscPartitioner_Type.tp_weaklistoffset = offsetof(struct PyPetscPartitionerObject, __pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_Partitioner = &PyPetscPartitioner_Type;
-  __pyx_ptype_8petsc4py_5PETSc_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_dtype)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_ndarray)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_8petsc4py_5PETSc_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_dtype)) __PYX_ERR(12, 9, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_ndarray)) __PYX_ERR(12, 12, __pyx_L1_error)
   __pyx_vtabptr_8petsc4py_5PETSc__IS_buffer = &__pyx_vtable_8petsc4py_5PETSc__IS_buffer;
   __pyx_vtable_8petsc4py_5PETSc__IS_buffer.acquire = (int (*)(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *))__pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire;
   __pyx_vtable_8petsc4py_5PETSc__IS_buffer.release = (int (*)(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *))__pyx_f_8petsc4py_5PETSc_10_IS_buffer_release;
@@ -243666,10 +246335,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __pyx_vtable_8petsc4py_5PETSc__IS_buffer.enter = (PyObject *(*)(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *))__pyx_f_8petsc4py_5PETSc_10_IS_buffer_enter;
   __pyx_vtable_8petsc4py_5PETSc__IS_buffer.exit = (PyObject *(*)(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *))__pyx_f_8petsc4py_5PETSc_10_IS_buffer_exit;
   __pyx_vtable_8petsc4py_5PETSc__IS_buffer.getbuffer = (Py_ssize_t (*)(struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *, void **))__pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__IS_buffer) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__IS_buffer) < 0) __PYX_ERR(4, 113, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc__IS_buffer.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc__IS_buffer.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc__IS_buffer) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "_IS_buffer", (PyObject *)&__pyx_type_8petsc4py_5PETSc__IS_buffer) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc__IS_buffer.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc__IS_buffer) < 0) __PYX_ERR(4, 113, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "_IS_buffer", (PyObject *)&__pyx_type_8petsc4py_5PETSc__IS_buffer) < 0) __PYX_ERR(4, 113, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc__IS_buffer = &__pyx_type_8petsc4py_5PETSc__IS_buffer;
   __pyx_vtabptr_8petsc4py_5PETSc__Vec_buffer = &__pyx_vtable_8petsc4py_5PETSc__Vec_buffer;
   __pyx_vtable_8petsc4py_5PETSc__Vec_buffer.acquire = (int (*)(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *))__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire;
@@ -243679,104 +246348,107 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __pyx_vtable_8petsc4py_5PETSc__Vec_buffer.enter = (PyObject *(*)(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *))__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_enter;
   __pyx_vtable_8petsc4py_5PETSc__Vec_buffer.exit = (PyObject *(*)(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *))__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_exit;
   __pyx_vtable_8petsc4py_5PETSc__Vec_buffer.getbuffer = (Py_ssize_t (*)(struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *, void **))__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Vec_buffer) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Vec_buffer) < 0) __PYX_ERR(5, 413, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc__Vec_buffer.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc__Vec_buffer.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc__Vec_buffer) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "_Vec_buffer", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Vec_buffer) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc__Vec_buffer.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc__Vec_buffer) < 0) __PYX_ERR(5, 413, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "_Vec_buffer", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Vec_buffer) < 0) __PYX_ERR(5, 413, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc__Vec_buffer = &__pyx_type_8petsc4py_5PETSc__Vec_buffer;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Vec_LocalForm) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Vec_LocalForm) < 0) __PYX_ERR(5, 533, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc__Vec_LocalForm.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "_Vec_LocalForm", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Vec_LocalForm) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "_Vec_LocalForm", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Vec_LocalForm) < 0) __PYX_ERR(5, 533, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc__Vec_LocalForm = &__pyx_type_8petsc4py_5PETSc__Vec_LocalForm;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Mat_Stencil) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 982; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Mat_Stencil) < 0) __PYX_ERR(6, 1017, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc__Mat_Stencil.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "_Mat_Stencil", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Mat_Stencil) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 982; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "_Mat_Stencil", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Mat_Stencil) < 0) __PYX_ERR(6, 1017, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc__Mat_Stencil = &__pyx_type_8petsc4py_5PETSc__Mat_Stencil;
   __pyx_vtabptr_8petsc4py_5PETSc__DMDA_Vec_array = &__pyx_vtable_8petsc4py_5PETSc__DMDA_Vec_array;
   __pyx_vtable_8petsc4py_5PETSc__DMDA_Vec_array.acquire = (int (*)(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *))__pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire;
   __pyx_vtable_8petsc4py_5PETSc__DMDA_Vec_array.release = (int (*)(struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *))__pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_release;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__DMDA_Vec_array) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__DMDA_Vec_array) < 0) __PYX_ERR(7, 198, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc__DMDA_Vec_array.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc__DMDA_Vec_array.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc__DMDA_Vec_array) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "_DMDA_Vec_array", (PyObject *)&__pyx_type_8petsc4py_5PETSc__DMDA_Vec_array) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc__DMDA_Vec_array.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc__DMDA_Vec_array) < 0) __PYX_ERR(7, 198, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "_DMDA_Vec_array", (PyObject *)&__pyx_type_8petsc4py_5PETSc__DMDA_Vec_array) < 0) __PYX_ERR(7, 198, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc__DMDA_Vec_array = &__pyx_type_8petsc4py_5PETSc__DMDA_Vec_array;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__DMComposite_access) < 0) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__DMComposite_access) < 0) __PYX_ERR(23, 17, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc__DMComposite_access.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "_DMComposite_access", (PyObject *)&__pyx_type_8petsc4py_5PETSc__DMComposite_access) < 0) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "_DMComposite_access", (PyObject *)&__pyx_type_8petsc4py_5PETSc__DMComposite_access) < 0) __PYX_ERR(23, 17, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc__DMComposite_access = &__pyx_type_8petsc4py_5PETSc__DMComposite_access;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_Options) < 0) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_Options) < 0) __PYX_ERR(24, 3, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_Options.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "Options", (PyObject *)&__pyx_type_8petsc4py_5PETSc_Options) < 0) {__pyx_filename = __pyx_f[24]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Options", (PyObject *)&__pyx_type_8petsc4py_5PETSc_Options) < 0) __PYX_ERR(24, 3, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc_Options = &__pyx_type_8petsc4py_5PETSc_Options;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_Sys) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_Sys) < 0) __PYX_ERR(25, 3, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_Sys.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "Sys", (PyObject *)&__pyx_type_8petsc4py_5PETSc_Sys) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Sys", (PyObject *)&__pyx_type_8petsc4py_5PETSc_Sys) < 0) __PYX_ERR(25, 3, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc_Sys = &__pyx_type_8petsc4py_5PETSc_Sys;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_Log) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_Log) < 0) __PYX_ERR(26, 3, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_Log.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "Log", (PyObject *)&__pyx_type_8petsc4py_5PETSc_Log) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Log", (PyObject *)&__pyx_type_8petsc4py_5PETSc_Log) < 0) __PYX_ERR(26, 3, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc_Log = &__pyx_type_8petsc4py_5PETSc_Log;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_LogStage) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_LogStage) < 0) __PYX_ERR(26, 95, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_LogStage.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "LogStage", (PyObject *)&__pyx_type_8petsc4py_5PETSc_LogStage) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "LogStage", (PyObject *)&__pyx_type_8petsc4py_5PETSc_LogStage) < 0) __PYX_ERR(26, 95, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc_LogStage = &__pyx_type_8petsc4py_5PETSc_LogStage;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_LogClass) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_LogClass) < 0) __PYX_ERR(26, 191, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_LogClass.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "LogClass", (PyObject *)&__pyx_type_8petsc4py_5PETSc_LogClass) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "LogClass", (PyObject *)&__pyx_type_8petsc4py_5PETSc_LogClass) < 0) __PYX_ERR(26, 191, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc_LogClass = &__pyx_type_8petsc4py_5PETSc_LogClass;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_LogEvent) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_LogEvent) < 0) __PYX_ERR(26, 253, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_LogEvent.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "LogEvent", (PyObject *)&__pyx_type_8petsc4py_5PETSc_LogEvent) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "LogEvent", (PyObject *)&__pyx_type_8petsc4py_5PETSc_LogEvent) < 0) __PYX_ERR(26, 253, __pyx_L1_error)
   __pyx_ptype_8petsc4py_5PETSc_LogEvent = &__pyx_type_8petsc4py_5PETSc_LogEvent;
   __pyx_vtabptr_8petsc4py_5PETSc_ViewerHDF5 = &__pyx_vtable_8petsc4py_5PETSc_ViewerHDF5;
   __pyx_vtable_8petsc4py_5PETSc_ViewerHDF5.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Viewer;
   __pyx_type_8petsc4py_5PETSc_ViewerHDF5.tp_base = __pyx_ptype_8petsc4py_5PETSc_Viewer;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_ViewerHDF5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_ViewerHDF5) < 0) __PYX_ERR(27, 322, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_ViewerHDF5.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_ViewerHDF5.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_ViewerHDF5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "ViewerHDF5", (PyObject *)&__pyx_type_8petsc4py_5PETSc_ViewerHDF5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_ViewerHDF5.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_ViewerHDF5) < 0) __PYX_ERR(27, 322, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "ViewerHDF5", (PyObject *)&__pyx_type_8petsc4py_5PETSc_ViewerHDF5) < 0) __PYX_ERR(27, 322, __pyx_L1_error)
   if (__pyx_type_8petsc4py_5PETSc_ViewerHDF5.tp_weaklistoffset == 0) __pyx_type_8petsc4py_5PETSc_ViewerHDF5.tp_weaklistoffset = offsetof(struct __pyx_obj_8petsc4py_5PETSc_ViewerHDF5, __pyx_base.__pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_ViewerHDF5 = &__pyx_type_8petsc4py_5PETSc_ViewerHDF5;
   __pyx_vtabptr_8petsc4py_5PETSc_DMDA = &__pyx_vtable_8petsc4py_5PETSc_DMDA;
   __pyx_vtable_8petsc4py_5PETSc_DMDA.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_DM;
   __pyx_type_8petsc4py_5PETSc_DMDA.tp_base = __pyx_ptype_8petsc4py_5PETSc_DM;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_DMDA) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_DMDA) < 0) __PYX_ERR(41, 17, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_DMDA.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_DMDA.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DMDA) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "DMDA", (PyObject *)&__pyx_type_8petsc4py_5PETSc_DMDA) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_DMDA.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DMDA) < 0) __PYX_ERR(41, 17, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "DMDA", (PyObject *)&__pyx_type_8petsc4py_5PETSc_DMDA) < 0) __PYX_ERR(41, 17, __pyx_L1_error)
   if (__pyx_type_8petsc4py_5PETSc_DMDA.tp_weaklistoffset == 0) __pyx_type_8petsc4py_5PETSc_DMDA.tp_weaklistoffset = offsetof(struct __pyx_obj_8petsc4py_5PETSc_DMDA, __pyx_base.__pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_DMDA = &__pyx_type_8petsc4py_5PETSc_DMDA;
   __pyx_vtabptr_8petsc4py_5PETSc_DMPlex = &__pyx_vtable_8petsc4py_5PETSc_DMPlex;
   __pyx_vtable_8petsc4py_5PETSc_DMPlex.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_DM;
   __pyx_type_8petsc4py_5PETSc_DMPlex.tp_base = __pyx_ptype_8petsc4py_5PETSc_DM;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_DMPlex) < 0) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_DMPlex) < 0) __PYX_ERR(42, 3, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_DMPlex.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_DMPlex.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DMPlex) < 0) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "DMPlex", (PyObject *)&__pyx_type_8petsc4py_5PETSc_DMPlex) < 0) {__pyx_filename = __pyx_f[42]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_DMPlex.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DMPlex) < 0) __PYX_ERR(42, 3, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "DMPlex", (PyObject *)&__pyx_type_8petsc4py_5PETSc_DMPlex) < 0) __PYX_ERR(42, 3, __pyx_L1_error)
   if (__pyx_type_8petsc4py_5PETSc_DMPlex.tp_weaklistoffset == 0) __pyx_type_8petsc4py_5PETSc_DMPlex.tp_weaklistoffset = offsetof(struct __pyx_obj_8petsc4py_5PETSc_DMPlex, __pyx_base.__pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_DMPlex = &__pyx_type_8petsc4py_5PETSc_DMPlex;
   __pyx_vtabptr_8petsc4py_5PETSc_DMComposite = &__pyx_vtable_8petsc4py_5PETSc_DMComposite;
   __pyx_vtable_8petsc4py_5PETSc_DMComposite.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_DM;
   __pyx_type_8petsc4py_5PETSc_DMComposite.tp_base = __pyx_ptype_8petsc4py_5PETSc_DM;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_DMComposite) < 0) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_DMComposite) < 0) __PYX_ERR(43, 3, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_DMComposite.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_DMComposite.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DMComposite) < 0) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "DMComposite", (PyObject *)&__pyx_type_8petsc4py_5PETSc_DMComposite) < 0) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_DMComposite.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DMComposite) < 0) __PYX_ERR(43, 3, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "DMComposite", (PyObject *)&__pyx_type_8petsc4py_5PETSc_DMComposite) < 0) __PYX_ERR(43, 3, __pyx_L1_error)
   if (__pyx_type_8petsc4py_5PETSc_DMComposite.tp_weaklistoffset == 0) __pyx_type_8petsc4py_5PETSc_DMComposite.tp_weaklistoffset = offsetof(struct __pyx_obj_8petsc4py_5PETSc_DMComposite, __pyx_base.__pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_DMComposite = &__pyx_type_8petsc4py_5PETSc_DMComposite;
   __pyx_vtabptr_8petsc4py_5PETSc_DMShell = &__pyx_vtable_8petsc4py_5PETSc_DMShell;
   __pyx_vtable_8petsc4py_5PETSc_DMShell.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_DM;
   __pyx_type_8petsc4py_5PETSc_DMShell.tp_base = __pyx_ptype_8petsc4py_5PETSc_DM;
-  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_DMShell) < 0) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_DMShell) < 0) __PYX_ERR(44, 1, __pyx_L1_error)
   __pyx_type_8petsc4py_5PETSc_DMShell.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_DMShell.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DMShell) < 0) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "DMShell", (PyObject *)&__pyx_type_8petsc4py_5PETSc_DMShell) < 0) {__pyx_filename = __pyx_f[44]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc_DMShell.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_DMShell) < 0) __PYX_ERR(44, 1, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "DMShell", (PyObject *)&__pyx_type_8petsc4py_5PETSc_DMShell) < 0) __PYX_ERR(44, 1, __pyx_L1_error)
   if (__pyx_type_8petsc4py_5PETSc_DMShell.tp_weaklistoffset == 0) __pyx_type_8petsc4py_5PETSc_DMShell.tp_weaklistoffset = offsetof(struct __pyx_obj_8petsc4py_5PETSc_DMShell, __pyx_base.__pyx_base.__weakref__);
   __pyx_ptype_8petsc4py_5PETSc_DMShell = &__pyx_type_8petsc4py_5PETSc_DMShell;
   /*--- Type import code ---*/
   /*--- Variable import code ---*/
   /*--- Function import code ---*/
   /*--- Execution code ---*/
+  #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
+  if (__Pyx_patch_abc() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
+  #endif
 
   /* "PETSc/PETSc.pyx":47
  *     void *PyExc_RuntimeError
@@ -243799,7 +246471,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * IntType     = PyArray_TypeObjectFromType(NPY_PETSC_INT)
  */
-  __pyx_t_2 = _import_array(); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = _import_array(); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 106, __pyx_L1_error)
 
   /* "PETSc/PETSc.pyx":108
  * import_array()
@@ -243808,9 +246480,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * RealType    = PyArray_TypeObjectFromType(NPY_PETSC_REAL)
  * ScalarType  = PyArray_TypeObjectFromType(NPY_PETSC_SCALAR)
  */
-  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_INT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_INT); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 108, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_IntType, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_IntType, __pyx_t_1) < 0) __PYX_ERR(11, 108, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PETSc.pyx":109
@@ -243820,9 +246492,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * ScalarType  = PyArray_TypeObjectFromType(NPY_PETSC_SCALAR)
  * ComplexType = PyArray_TypeObjectFromType(NPY_PETSC_COMPLEX)
  */
-  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_REAL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_REAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RealType, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RealType, __pyx_t_1) < 0) __PYX_ERR(11, 109, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PETSc.pyx":110
@@ -243832,9 +246504,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * ComplexType = PyArray_TypeObjectFromType(NPY_PETSC_COMPLEX)
  * 
  */
-  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_SCALAR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_SCALAR); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScalarType, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScalarType, __pyx_t_1) < 0) __PYX_ERR(11, 110, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PETSc.pyx":111
@@ -243844,9 +246516,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_COMPLEX); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_COMPLEX); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ComplexType, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ComplexType, __pyx_t_1) < 0) __PYX_ERR(11, 111, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PETSc.pyx":145
@@ -243856,7 +246528,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * Portable, Extensible Toolkit for Scientific Computation
  * """
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_doc, __pyx_kp_u_Portable_Extensible_Toolkit_for) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_doc, __pyx_kp_u_Portable_Extensible_Toolkit_for) < 0) __PYX_ERR(11, 145, __pyx_L1_error)
 
   /* "PETSc/Const.pyx":3
  * # --------------------------------------------------------------------
@@ -243865,9 +246537,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * DEFAULT   = PETSC_DEFAULT
  * DETERMINE = PETSC_DETERMINE
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DECIDE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DECIDE, __pyx_t_1) < 0) __PYX_ERR(0, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Const.pyx":4
@@ -243877,9 +246549,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * DETERMINE = PETSC_DETERMINE
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DEFAULT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DEFAULT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT, __pyx_t_1) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Const.pyx":5
@@ -243889,9 +246561,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DETERMINE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DETERMINE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DETERMINE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DETERMINE, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Const.pyx":9
@@ -243901,9 +246573,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * NINFINITY = toReal(PETSC_NINFINITY)
  * PINFINITY = toReal(PETSC_INFINITY)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(PETSC_INFINITY); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(PETSC_INFINITY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INFINITY, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INFINITY, __pyx_t_1) < 0) __PYX_ERR(0, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Const.pyx":10
@@ -243913,9 +246585,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * PINFINITY = toReal(PETSC_INFINITY)
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(PETSC_NINFINITY); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(PETSC_NINFINITY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NINFINITY, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NINFINITY, __pyx_t_1) < 0) __PYX_ERR(0, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Const.pyx":11
@@ -243925,9 +246597,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(PETSC_INFINITY); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(PETSC_INFINITY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PINFINITY, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PINFINITY, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Const.pyx":15
@@ -243937,14 +246609,14 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NOT_SET_VALUES    = PETSC_NOT_SET_VALUES
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_InsertMode, __pyx_n_s_InsertMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_InsertMode, __pyx_n_s_InsertMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Const.pyx":17
@@ -243954,9 +246626,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INSERT_VALUES     = PETSC_INSERT_VALUES
  *     ADD_VALUES        = PETSC_ADD_VALUES
  */
-  __pyx_t_5 = PyInt_FromLong(NOT_SET_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_InsertMode(NOT_SET_VALUES); 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_NOT_SET_VALUES, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NOT_SET_VALUES, __pyx_t_5) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":18
@@ -243966,9 +246638,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD_VALUES        = PETSC_ADD_VALUES
  *     MAX_VALUES        = PETSC_MAX_VALUES
  */
-  __pyx_t_5 = PyInt_FromLong(INSERT_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_InsertMode(INSERT_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_VALUES, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_VALUES, __pyx_t_5) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":19
@@ -243978,9 +246650,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MAX_VALUES        = PETSC_MAX_VALUES
  *     INSERT_ALL_VALUES = PETSC_INSERT_ALL_VALUES
  */
-  __pyx_t_5 = PyInt_FromLong(ADD_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_InsertMode(ADD_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_VALUES, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_VALUES, __pyx_t_5) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":20
@@ -243990,9 +246662,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INSERT_ALL_VALUES = PETSC_INSERT_ALL_VALUES
  *     ADD_ALL_VALUES    = PETSC_ADD_ALL_VALUES
  */
-  __pyx_t_5 = PyInt_FromLong(MAX_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_InsertMode(MAX_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAX_VALUES, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAX_VALUES, __pyx_t_5) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":21
@@ -244002,9 +246674,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD_ALL_VALUES    = PETSC_ADD_ALL_VALUES
  *     INSERT_BC_VALUES  = PETSC_INSERT_BC_VALUES
  */
-  __pyx_t_5 = PyInt_FromLong(INSERT_ALL_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_InsertMode(INSERT_ALL_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 21, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_ALL_VALUES, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_ALL_VALUES, __pyx_t_5) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":22
@@ -244014,9 +246686,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INSERT_BC_VALUES  = PETSC_INSERT_BC_VALUES
  *     ADD_BC_VALUES     = PETSC_ADD_BC_VALUES
  */
-  __pyx_t_5 = PyInt_FromLong(ADD_ALL_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_InsertMode(ADD_ALL_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 22, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_ALL_VALUES, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_ALL_VALUES, __pyx_t_5) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":23
@@ -244026,9 +246698,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD_BC_VALUES     = PETSC_ADD_BC_VALUES
  *     # aliases
  */
-  __pyx_t_5 = PyInt_FromLong(INSERT_BC_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_InsertMode(INSERT_BC_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_BC_VALUES, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_BC_VALUES, __pyx_t_5) < 0) __PYX_ERR(0, 23, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":24
@@ -244038,9 +246710,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     INSERT     = INSERT_VALUES
  */
-  __pyx_t_5 = PyInt_FromLong(ADD_BC_VALUES); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_InsertMode(ADD_BC_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_BC_VALUES, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_BC_VALUES, __pyx_t_5) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":26
@@ -244055,9 +246727,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_VALUES);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT, __pyx_t_5) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":27
@@ -244072,9 +246744,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_VALUES);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 27, __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[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD, __pyx_t_5) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":28
@@ -244089,9 +246761,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_MAX_VALUES);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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_MAX, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAX, __pyx_t_5) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":29
@@ -244106,9 +246778,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_ALL_VALUES);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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_INSERT_ALL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_ALL, __pyx_t_5) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":30
@@ -244123,9 +246795,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_ALL_VALUES);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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_ADD_ALL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_ALL, __pyx_t_5) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":31
@@ -244140,9 +246812,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_BC_VALUES);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_BC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INSERT_BC, __pyx_t_5) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":32
@@ -244157,9 +246829,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_BC_VALUES);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_BC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD_BC, __pyx_t_5) < 0) __PYX_ERR(0, 32, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":15
@@ -244169,9 +246841,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NOT_SET_VALUES    = PETSC_NOT_SET_VALUES
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_InsertMode, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_InsertMode, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_InsertMode, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_InsertMode, __pyx_t_5) < 0) __PYX_ERR(0, 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;
@@ -244184,14 +246856,14 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     SCATTER_FORWARD       = PETSC_SCATTER_FORWARD
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_ScatterMode, __pyx_n_s_ScatterMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_ScatterMode, __pyx_n_s_ScatterMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Const.pyx":38
@@ -244201,9 +246873,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SCATTER_REVERSE       = PETSC_SCATTER_REVERSE
  *     SCATTER_FORWARD_LOCAL = PETSC_SCATTER_FORWARD_LOCAL
  */
-  __pyx_t_5 = PyInt_FromLong(SCATTER_FORWARD); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_ScatterMode(SCATTER_FORWARD); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_FORWARD, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_FORWARD, __pyx_t_5) < 0) __PYX_ERR(0, 38, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":39
@@ -244213,9 +246885,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SCATTER_FORWARD_LOCAL = PETSC_SCATTER_FORWARD_LOCAL
  *     SCATTER_REVERSE_LOCAL = PETSC_SCATTER_REVERSE_LOCAL
  */
-  __pyx_t_5 = PyInt_FromLong(SCATTER_REVERSE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_ScatterMode(SCATTER_REVERSE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_REVERSE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_REVERSE, __pyx_t_5) < 0) __PYX_ERR(0, 39, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":40
@@ -244225,9 +246897,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SCATTER_REVERSE_LOCAL = PETSC_SCATTER_REVERSE_LOCAL
  *     SCATTER_LOCAL         = PETSC_SCATTER_LOCAL
  */
-  __pyx_t_5 = PyInt_FromLong(SCATTER_FORWARD_LOCAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_ScatterMode(SCATTER_FORWARD_LOCAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_FORWARD_LOCAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_FORWARD_LOCAL, __pyx_t_5) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":41
@@ -244237,9 +246909,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SCATTER_LOCAL         = PETSC_SCATTER_LOCAL
  *     # aliases
  */
-  __pyx_t_5 = PyInt_FromLong(SCATTER_REVERSE_LOCAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_ScatterMode(SCATTER_REVERSE_LOCAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_REVERSE_LOCAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_REVERSE_LOCAL, __pyx_t_5) < 0) __PYX_ERR(0, 41, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":42
@@ -244249,9 +246921,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     FORWARD       = SCATTER_FORWARD
  */
-  __pyx_t_5 = PyInt_FromLong(SCATTER_LOCAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_ScatterMode(SCATTER_LOCAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_LOCAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER_LOCAL, __pyx_t_5) < 0) __PYX_ERR(0, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":44
@@ -244266,9 +246938,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_FORWARD);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 44, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FORWARD, __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_FORWARD, __pyx_t_5) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":45
@@ -244283,9 +246955,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_REVERSE);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REVERSE, __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_REVERSE, __pyx_t_5) < 0) __PYX_ERR(0, 45, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":46
@@ -244300,9 +246972,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_FORWARD_LOCAL);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FORWARD_LOCAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FORWARD_LOCAL, __pyx_t_5) < 0) __PYX_ERR(0, 46, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":47
@@ -244317,9 +246989,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_REVERSE_LOCAL);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REVERSE_LOCAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REVERSE_LOCAL, __pyx_t_5) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":36
@@ -244329,9 +247001,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     SCATTER_FORWARD       = PETSC_SCATTER_FORWARD
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ScatterMode, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ScatterMode, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScatterMode, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScatterMode, __pyx_t_5) < 0) __PYX_ERR(0, 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;
@@ -244344,14 +247016,14 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NORM_1         = PETSC_NORM_1
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_NormType, __pyx_n_s_NormType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_NormType, __pyx_n_s_NormType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Const.pyx":53
@@ -244361,9 +247033,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_2         = PETSC_NORM_2
  *     NORM_1_AND_2   = PETSC_NORM_1_AND_2
  */
-  __pyx_t_5 = PyInt_FromLong(NORM_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_NormType(NORM_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_1, __pyx_t_5) < 0) __PYX_ERR(0, 53, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":54
@@ -244373,9 +247045,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_1_AND_2   = PETSC_NORM_1_AND_2
  *     NORM_FROBENIUS = PETSC_NORM_FROBENIUS
  */
-  __pyx_t_5 = PyInt_FromLong(NORM_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_NormType(NORM_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_2, __pyx_t_5) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":55
@@ -244385,9 +247057,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_FROBENIUS = PETSC_NORM_FROBENIUS
  *     NORM_INFINITY  = PETSC_NORM_INFINITY
  */
-  __pyx_t_5 = PyInt_FromLong(NORM_1_AND_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_NormType(NORM_1_AND_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_1_AND_2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_1_AND_2, __pyx_t_5) < 0) __PYX_ERR(0, 55, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":56
@@ -244397,9 +247069,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_INFINITY  = PETSC_NORM_INFINITY
  *     NORM_MAX       = PETSC_NORM_MAX
  */
-  __pyx_t_5 = PyInt_FromLong(NORM_FROBENIUS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_NormType(NORM_FROBENIUS); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_FROBENIUS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_FROBENIUS, __pyx_t_5) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":57
@@ -244409,9 +247081,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_MAX       = PETSC_NORM_MAX
  *     # aliases
  */
-  __pyx_t_5 = PyInt_FromLong(NORM_INFINITY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_NormType(NORM_INFINITY); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_INFINITY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_INFINITY, __pyx_t_5) < 0) __PYX_ERR(0, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":58
@@ -244421,9 +247093,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     N1        = NORM_1
  */
-  __pyx_t_5 = PyInt_FromLong(NORM_MAX); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_NormType(NORM_MAX); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_MAX, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_MAX, __pyx_t_5) < 0) __PYX_ERR(0, 58, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":60
@@ -244438,9 +247110,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_1);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_N1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_N1, __pyx_t_5) < 0) __PYX_ERR(0, 60, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":61
@@ -244455,9 +247127,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_2);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 61, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_N2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_N2, __pyx_t_5) < 0) __PYX_ERR(0, 61, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":62
@@ -244472,9 +247144,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_1_AND_2);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_N12, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_N12, __pyx_t_5) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":63
@@ -244489,9 +247161,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_MAX);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAX, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAX, __pyx_t_5) < 0) __PYX_ERR(0, 63, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":64
@@ -244506,9 +247178,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_FROBENIUS);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FROBENIUS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FROBENIUS, __pyx_t_5) < 0) __PYX_ERR(0, 64, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":65
@@ -244523,9 +247195,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INFINITY);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INFINITY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INFINITY, __pyx_t_5) < 0) __PYX_ERR(0, 65, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":67
@@ -244540,9 +247212,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_FROBENIUS);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 67, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FRB, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FRB, __pyx_t_5) < 0) __PYX_ERR(0, 67, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":68
@@ -244557,9 +247229,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_INFINITY);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INF, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INF, __pyx_t_5) < 0) __PYX_ERR(0, 68, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Const.pyx":51
@@ -244569,9 +247241,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NORM_1         = PETSC_NORM_1
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NormType, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NormType, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NormType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NormType, __pyx_t_5) < 0) __PYX_ERR(0, 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;
@@ -244584,14 +247256,14 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     _traceback_ = []
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_builtin_RuntimeError);
   __Pyx_GIVEREF(__pyx_builtin_RuntimeError);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_RuntimeError);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_Error, __pyx_n_s_Error, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_Error, __pyx_n_s_Error, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Error.pyx":5
@@ -244601,9 +247273,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def __init__(self, int ierr=0):
  */
-  __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_traceback, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_traceback, __pyx_t_5) < 0) __PYX_ERR(1, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Error.pyx":7
@@ -244613,18 +247285,18 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         self.ierr = ierr
  *         RuntimeError.__init__(self, self.ierr)
  */
-  __pyx_t_5 = __Pyx_PyInt_From_int(((int)0)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_int(((int)0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_5);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_5Error_1__init__, 0, __pyx_n_s_Error___init, NULL, __pyx_n_s_petsc4py_PETSc, __pyx_d, ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_5Error_1__init__, 0, __pyx_n_s_Error___init, NULL, __pyx_n_s_petsc4py_PETSc, __pyx_d, ((PyObject *)__pyx_codeobj__69)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_t_6);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_init, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_init, __pyx_t_5) < 0) __PYX_ERR(1, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Error.pyx":11
@@ -244634,9 +247306,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef int ierr = self.ierr
  *         return ierr != 0
  */
-  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_5Error_3__nonzero__, 0, __pyx_n_s_Error___nonzero, NULL, __pyx_n_s_petsc4py_PETSc, __pyx_d, ((PyObject *)__pyx_codeobj__68)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_5Error_3__nonzero__, 0, __pyx_n_s_Error___nonzero, NULL, __pyx_n_s_petsc4py_PETSc, __pyx_d, ((PyObject *)__pyx_codeobj__71)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_nonzero_2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_nonzero_2, __pyx_t_5) < 0) __PYX_ERR(1, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Error.pyx":15
@@ -244646,9 +247318,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         return 'PETSc.Error(%d)' % self.ierr
  * 
  */
-  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_5Error_5__repr__, 0, __pyx_n_s_Error___repr, NULL, __pyx_n_s_petsc4py_PETSc, __pyx_d, ((PyObject *)__pyx_codeobj__70)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_5Error_5__repr__, 0, __pyx_n_s_Error___repr, NULL, __pyx_n_s_petsc4py_PETSc, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_repr, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_repr, __pyx_t_5) < 0) __PYX_ERR(1, 15, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Error.pyx":18
@@ -244658,9 +247330,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef int csize=1, crank=0
  *         if not (<int>PetscFinalizeCalled):
  */
-  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_5Error_7__str__, 0, __pyx_n_s_Error___str, NULL, __pyx_n_s_petsc4py_PETSc, __pyx_d, ((PyObject *)__pyx_codeobj__72)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_5Error_7__str__, 0, __pyx_n_s_Error___str, NULL, __pyx_n_s_petsc4py_PETSc, __pyx_d, ((PyObject *)__pyx_codeobj__75)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_str, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_str, __pyx_t_5) < 0) __PYX_ERR(1, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Error.pyx":3
@@ -244670,9 +247342,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     _traceback_ = []
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_Error, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_Error, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Error, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Error, __pyx_t_5) < 0) __PYX_ERR(1, 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;
@@ -244685,7 +247357,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *                    date=False, author=False):
  *         cdef int cmajor = PETSC_VERSION_MAJOR
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_getVersion); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_getVersion); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Sys.pyx":5
@@ -244695,10 +247367,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def getVersion(cls, patch=False, devel=False,
  *                    date=False, author=False):
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_getVersion, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_getVersion, __pyx_t_3) < 0) __PYX_ERR(25, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244709,7 +247381,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef int cmajor = PETSC_VERSION_MAJOR
  *         cdef int cminor = PETSC_VERSION_MINOR
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_getVersionInfo); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_getVersionInfo); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 33, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Sys.pyx":32
@@ -244719,10 +247391,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def getVersionInfo(cls):
  *         cdef int cmajor = PETSC_VERSION_MAJOR
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_getVersionInfo, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_getVersionInfo, __pyx_t_1) < 0) __PYX_ERR(25, 33, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244733,7 +247405,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         return <bint>PetscInitializeCalled
  * 
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_isInitialized); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_isInitialized); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Sys.pyx":53
@@ -244743,10 +247415,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def isInitialized(cls):
  *         return <bint>PetscInitializeCalled
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_isInitialized, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_isInitialized, __pyx_t_3) < 0) __PYX_ERR(25, 54, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244757,7 +247429,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         return <bint>PetscFinalizeCalled
  * 
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_isFinalized); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_isFinalized); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Sys.pyx":57
@@ -244767,10 +247439,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def isFinalized(cls):
  *         return <bint>PetscFinalizeCalled
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_isFinalized, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_isFinalized, __pyx_t_1) < 0) __PYX_ERR(25, 58, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244781,7 +247453,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef Comm comm = Comm()
  *         comm.comm = PETSC_COMM_DEFAULT
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_getDefaultComm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_getDefaultComm); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Sys.pyx":63
@@ -244791,10 +247463,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def getDefaultComm(cls):
  *         cdef Comm comm = Comm()
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_getDefaultComm, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_getDefaultComm, __pyx_t_3) < 0) __PYX_ERR(25, 64, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244805,7 +247477,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_WORLD)
  *         if ccomm == MPI_COMM_NULL:
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_setDefaultComm); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_setDefaultComm); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 70, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Sys.pyx":69
@@ -244815,10 +247487,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def setDefaultComm(cls, comm):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_WORLD)
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_setDefaultComm, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_setDefaultComm, __pyx_t_1) < 0) __PYX_ERR(25, 70, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244829,7 +247501,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef object comm = kargs.get('comm', None)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_Print); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_Print); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 80, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Sys.pyx":79
@@ -244839,10 +247511,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def Print(cls, *args, **kargs):
  *         cdef object comm = kargs.get('comm', None)
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 79, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_Print, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_Print, __pyx_t_3) < 0) __PYX_ERR(25, 80, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244853,7 +247525,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef object comm = kargs.get('comm', None)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_syncPrint); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_syncPrint); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 97, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Sys.pyx":96
@@ -244863,10 +247535,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def syncPrint(cls, *args, **kargs):
  *         cdef object comm = kargs.get('comm', None)
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_syncPrint, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_syncPrint, __pyx_t_1) < 0) __PYX_ERR(25, 97, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244877,7 +247549,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         CHKERR( PetscSynchronizedFlush(ccomm, PETSC_STDOUT) )
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_syncFlush); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_syncFlush); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Sys.pyx":112
@@ -244887,10 +247559,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def syncFlush(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_syncFlush, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_syncFlush, __pyx_t_3) < 0) __PYX_ERR(25, 113, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244901,7 +247573,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_splitOwnership); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_splitOwnership); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 120, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Sys.pyx":119
@@ -244911,10 +247583,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def splitOwnership(cls, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 119, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_splitOwnership, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_splitOwnership, __pyx_t_1) < 0) __PYX_ERR(25, 120, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244925,7 +247597,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef int s = seconds
  *         CHKERR( PetscSleep(s) )
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_sleep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_sleep); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Sys.pyx":132
@@ -244935,10 +247607,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def sleep(cls, seconds=1):
  *         cdef int s = seconds
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 132, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_sleep, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_sleep, __pyx_t_3) < 0) __PYX_ERR(25, 133, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244949,7 +247621,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef PetscErrorHandlerFunction handler = NULL
  *         if errhandler == "python":
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_pushErrorHandler); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_pushErrorHandler); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 140, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Sys.pyx":139
@@ -244959,10 +247631,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def pushErrorHandler(cls, errhandler):
  *         cdef PetscErrorHandlerFunction handler = NULL
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 139, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_pushErrorHandler, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_pushErrorHandler, __pyx_t_1) < 0) __PYX_ERR(25, 140, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
@@ -244973,7 +247645,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         CHKERR( PetscPopErrorHandler() )
  * 
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_popErrorHandler); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_popErrorHandler); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Sys.pyx":163
@@ -244983,13 +247655,75 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def popErrorHandler(cls):
  *         CHKERR( PetscPopErrorHandler() )
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 163, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_popErrorHandler, __pyx_t_3) < 0) __PYX_ERR(25, 164, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
+
+  /* "PETSc/Sys.pyx":168
+ * 
+ *     @classmethod
+ *     def infoAllow(cls, flag):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_infoAllow); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 168, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+
+  /* "PETSc/Sys.pyx":167
+ *         CHKERR( PetscPopErrorHandler() )
+ * 
+ *     @classmethod             # <<<<<<<<<<<<<<
+ *     def infoAllow(cls, flag):
+ *         cdef PetscBool tval = PETSC_FALSE
+ */
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 167, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_infoAllow, __pyx_t_1) < 0) __PYX_ERR(25, 168, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
+
+  /* "PETSc/Sys.pyx":174
+ * 
+ *     @classmethod
+ *     def registerCitation(cls, citation):             # <<<<<<<<<<<<<<
+ *         if not citation: raise ValueError("empty citation")
+ *         cdef const_char *cit = NULL
+ */
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_registerCitation); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 174, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+
+  /* "PETSc/Sys.pyx":173
+ *         CHKERR( PetscInfoAllow(tval, NULL) )
+ * 
+ *     @classmethod             # <<<<<<<<<<<<<<
+ *     def registerCitation(cls, citation):
+ *         if not citation: raise ValueError("empty citation")
+ */
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_popErrorHandler, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_registerCitation, __pyx_t_3) < 0) __PYX_ERR(25, 174, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
+  /* "PETSc/Sys.pyx":182
+ *         set_citation(citation, <bint>set)
+ * 
+ * cdef dict citations_registry = { }             # <<<<<<<<<<<<<<
+ * 
+ * cdef PetscBool get_citation(object citation):
+ */
+  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 182, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_citations_registry);
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_citations_registry, ((PyObject*)__pyx_t_3));
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+
   /* "PETSc/Log.pyx":6
  * 
  *     @classmethod
@@ -244997,7 +247731,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         if not name: raise ValueError("empty name")
  *         cdef const_char *cname = NULL
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Stage); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Stage); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":5
@@ -245007,10 +247741,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def Stage(cls, name):
  *         if not name: raise ValueError("empty name")
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_Stage, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_Stage, __pyx_t_1) < 0) __PYX_ERR(26, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245021,7 +247755,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         if not name: raise ValueError("empty name")
  *         cdef const_char *cname = NULL
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Class); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Class); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":19
@@ -245031,10 +247765,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def Class(cls, name):
  *         if not name: raise ValueError("empty name")
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_Class, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_Class, __pyx_t_3) < 0) __PYX_ERR(26, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245045,7 +247779,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         if not name: raise ValueError("empty name")
  *         cdef const_char *cname = NULL
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Event); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Event); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":33
@@ -245055,10 +247789,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def Event(cls, name, klass=None):
  *         if not name: raise ValueError("empty name")
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 33, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_Event, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_Event, __pyx_t_1) < 0) __PYX_ERR(26, 34, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245067,9 +247801,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     @classmethod
  *     def begin(cls, all=False):             # <<<<<<<<<<<<<<
  *         if all: CHKERR( PetscLogAllBegin() )
- *         else:   CHKERR( PetscLogBegin() )
+ *         else:   CHKERR( PetscLogDefaultBegin() )
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_begin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_begin); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":49
@@ -245079,34 +247813,34 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def begin(cls, all=False):
  *         if all: CHKERR( PetscLogAllBegin() )
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_begin, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_begin, __pyx_t_3) < 0) __PYX_ERR(26, 50, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":55
  * 
  *     @classmethod
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def view(cls, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":54
- *         else:   CHKERR( PetscLogBegin() )
+ *         else:   CHKERR( PetscLogDefaultBegin() )
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
- *     def view(self, Viewer viewer=None):
+ *     def view(cls, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_view, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_view, __pyx_t_1) < 0) __PYX_ERR(26, 55, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245117,7 +247851,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         CHKERR( PetscLogDestroy() )
  * 
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_destroy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_destroy); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 62, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":61
@@ -245127,10 +247861,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def destroy(cls):
  *         CHKERR( PetscLogDestroy() )
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 61, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_destroy, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_destroy, __pyx_t_3) < 0) __PYX_ERR(26, 62, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245141,7 +247875,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef PetscLogDouble cflops=flops
  *         CHKERR( PetscLogFlops(cflops) )
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_logFlops); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_logFlops); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 66, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":65
@@ -245151,10 +247885,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def logFlops(cls, flops):
  *         cdef PetscLogDouble cflops=flops
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_logFlops, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_logFlops, __pyx_t_1) < 0) __PYX_ERR(26, 66, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245165,7 +247899,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef PetscLogDouble cflops=flops
  *         CHKERR( PetscLogFlops(cflops) )
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_addFlops); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_addFlops); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 71, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":70
@@ -245175,10 +247909,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def addFlops(cls, flops):
  *         cdef PetscLogDouble cflops=flops
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 70, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_addFlops, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_addFlops, __pyx_t_3) < 0) __PYX_ERR(26, 71, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245189,7 +247923,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef PetscLogDouble cflops=0
  *         CHKERR( PetscGetFlops(&cflops) )
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getFlops); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getFlops); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 76, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":75
@@ -245199,10 +247933,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def getFlops(cls):
  *         cdef PetscLogDouble cflops=0
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_getFlops, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_getFlops, __pyx_t_1) < 0) __PYX_ERR(26, 76, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245213,7 +247947,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef PetscLogDouble wctime=0
  *         CHKERR( PetscTime(&wctime) )
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getTime); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getTime); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":81
@@ -245223,10 +247957,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def getTime(cls):
  *         cdef PetscLogDouble wctime=0
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_getTime, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_getTime, __pyx_t_3) < 0) __PYX_ERR(26, 82, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
@@ -245237,7 +247971,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         cdef PetscLogDouble cputime=0
  *         CHKERR( PetscGetCPUTime(&cputime) )
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getCPUTime); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getCPUTime); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":87
@@ -245247,49 +247981,49 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     def getCPUTime(cls):
  *         cdef PetscLogDouble cputime=0
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 87, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_getCPUTime, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log->tp_dict, __pyx_n_s_getCPUTime, __pyx_t_1) < 0) __PYX_ERR(26, 88, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
-  /* "PETSc/Log.pyx":176
+  /* "PETSc/Log.pyx":178
  * 
  * 
  * cdef dict stage_registry = { }             # <<<<<<<<<<<<<<
  * 
  * cdef LogStage get_LogStage(object name):
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 178, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_stage_registry);
   __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_stage_registry, ((PyObject*)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Log.pyx":236
+  /* "PETSc/Log.pyx":240
  * 
  * 
  * cdef dict class_registry = { }             # <<<<<<<<<<<<<<
  * 
  * cdef LogClass get_LogClass(object name):
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_class_registry);
   __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_class_registry, ((PyObject*)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Log.pyx":348
+  /* "PETSc/Log.pyx":358
  *         return info
  * 
  * cdef dict event_registry = { }             # <<<<<<<<<<<<<<
  * 
  * cdef LogEvent get_LogEvent(object name):
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[26]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 358, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_event_registry);
   __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_event_registry, ((PyObject*)__pyx_t_1));
@@ -245303,9 +248037,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Clone    = duplicate
  *     Dup      = duplicate
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_destroy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_destroy); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Free, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Free, __pyx_t_1) < 0) __PYX_ERR(9, 109, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
@@ -245316,9 +248050,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Dup      = duplicate
  *     Get_size = getSize
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Clone, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Clone, __pyx_t_1) < 0) __PYX_ERR(9, 110, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
@@ -245329,9 +248063,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Get_size = getSize
  *     Get_rank = getRank
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Dup, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Dup, __pyx_t_1) < 0) __PYX_ERR(9, 111, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
@@ -245342,9 +248076,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Get_rank = getRank
  *     Barrier  = barrier
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_getSize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_getSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Get_size, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Get_size, __pyx_t_1) < 0) __PYX_ERR(9, 112, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
@@ -245355,9 +248089,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Barrier  = barrier
  * 
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_getRank); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_getRank); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Get_rank, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Get_rank, __pyx_t_1) < 0) __PYX_ERR(9, 113, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
@@ -245368,9 +248102,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_barrier); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_barrier); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Barrier, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Barrier, __pyx_t_1) < 0) __PYX_ERR(9, 114, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
@@ -245381,7 +248115,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * cdef Comm __COMM_SELF__  = Comm()
  * cdef Comm __COMM_WORLD__ = Comm()
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_NULL__));
   __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_NULL__, ((struct PyPetscCommObject *)__pyx_t_1));
@@ -245395,7 +248129,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * cdef Comm __COMM_WORLD__ = Comm()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 119, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_SELF__));
   __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_SELF__, ((struct PyPetscCommObject *)__pyx_t_1));
@@ -245409,7 +248143,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * COMM_NULL  = __COMM_NULL__
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Comm)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 120, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_WORLD__));
   __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_WORLD__, ((struct PyPetscCommObject *)__pyx_t_1));
@@ -245423,7 +248157,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * COMM_SELF  = __COMM_SELF__
  * COMM_WORLD = __COMM_WORLD__
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_NULL, ((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_NULL__)) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_NULL, ((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_NULL__)) < 0) __PYX_ERR(9, 122, __pyx_L1_error)
 
   /* "PETSc/Comm.pyx":123
  * 
@@ -245432,7 +248166,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * COMM_WORLD = __COMM_WORLD__
  * 
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_SELF, ((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_SELF__)) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_SELF, ((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_SELF__)) < 0) __PYX_ERR(9, 123, __pyx_L1_error)
 
   /* "PETSc/Comm.pyx":124
  * COMM_NULL  = __COMM_NULL__
@@ -245441,7 +248175,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_WORLD, ((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_WORLD__)) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_WORLD, ((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_WORLD__)) < 0) __PYX_ERR(9, 124, __pyx_L1_error)
 
   /* "PETSc/Comm.pyx":128
  * # --------------------------------------------------------------------
@@ -245452,29 +248186,29 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  */
   __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT = MPI_COMM_NULL;
 
-  /* "PETSc/Object.pyx":241
+  /* "PETSc/Object.pyx":242
  * include "cyclicgc.pxi"
  * 
  * cdef dict type_registry = { 0 : None }             # <<<<<<<<<<<<<<
  * __type_registry__ = type_registry
  * 
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_int_0, Py_None) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_int_0, Py_None) < 0) __PYX_ERR(10, 242, __pyx_L1_error)
   __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_type_registry);
   __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_type_registry, ((PyObject*)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":242
+  /* "PETSc/Object.pyx":243
  * 
  * cdef dict type_registry = { 0 : None }
  * __type_registry__ = type_registry             # <<<<<<<<<<<<<<
  * 
  * cdef int PyPetscType_Register(int classid, type cls) except -1:
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_type_registry, __pyx_v_8petsc4py_5PETSc_type_registry) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_type_registry, __pyx_v_8petsc4py_5PETSc_type_registry) < 0) __PYX_ERR(10, 243, __pyx_L1_error)
 
   /* "PETSc/Viewer.pyx":3
  * # --------------------------------------------------------------------
@@ -245483,14 +248217,14 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SOCKET      = S_(PETSCVIEWERSOCKET)
  *     ASCII       = S_(PETSCVIEWERASCII)
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_ViewerType, __pyx_n_s_ViewerType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_ViewerType, __pyx_n_s_ViewerType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Viewer.pyx":4
@@ -245500,9 +248234,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII       = S_(PETSCVIEWERASCII)
  *     BINARY      = S_(PETSCVIEWERBINARY)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSOCKET); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSOCKET); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SOCKET, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SOCKET, __pyx_t_5) < 0) __PYX_ERR(27, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":5
@@ -245512,9 +248246,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BINARY      = S_(PETSCVIEWERBINARY)
  *     STRING      = S_(PETSCVIEWERSTRING)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERASCII); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERASCII); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII, __pyx_t_5) < 0) __PYX_ERR(27, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":6
@@ -245524,9 +248258,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     STRING      = S_(PETSCVIEWERSTRING)
  *     DRAW        = S_(PETSCVIEWERDRAW)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERBINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERBINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BINARY, __pyx_t_5) < 0) __PYX_ERR(27, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":7
@@ -245536,9 +248270,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DRAW        = S_(PETSCVIEWERDRAW)
  *     VU          = S_(PETSCVIEWERVU)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSTRING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSTRING); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STRING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STRING, __pyx_t_5) < 0) __PYX_ERR(27, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":8
@@ -245548,9 +248282,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     VU          = S_(PETSCVIEWERVU)
  *     MATHEMATICA = S_(PETSCVIEWERMATHEMATICA)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERDRAW); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERDRAW); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW, __pyx_t_5) < 0) __PYX_ERR(27, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":9
@@ -245560,9 +248294,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MATHEMATICA = S_(PETSCVIEWERMATHEMATICA)
  *     HDF5        = S_(PETSCVIEWERHDF5)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERVU); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERVU); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VU, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VU, __pyx_t_5) < 0) __PYX_ERR(27, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":10
@@ -245572,9 +248306,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     HDF5        = S_(PETSCVIEWERHDF5)
  *     NETCDF      = S_(PETSCVIEWERNETCDF)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERMATHEMATICA); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERMATHEMATICA); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MATHEMATICA, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MATHEMATICA, __pyx_t_5) < 0) __PYX_ERR(27, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":11
@@ -245584,9 +248318,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NETCDF      = S_(PETSCVIEWERNETCDF)
  *     VTK         = S_(PETSCVIEWERVTK)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERHDF5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERHDF5); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HDF5, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HDF5, __pyx_t_5) < 0) __PYX_ERR(27, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":12
@@ -245596,9 +248330,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     VTK         = S_(PETSCVIEWERVTK)
  *     MATLAB      = S_(PETSCVIEWERMATLAB)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERNETCDF); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERNETCDF); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NETCDF, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NETCDF, __pyx_t_5) < 0) __PYX_ERR(27, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":13
@@ -245608,9 +248342,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MATLAB      = S_(PETSCVIEWERMATLAB)
  *     SAWS        = S_(PETSCVIEWERSAWS)
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERVTK); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERVTK); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VTK, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VTK, __pyx_t_5) < 0) __PYX_ERR(27, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":14
@@ -245620,9 +248354,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SAWS        = S_(PETSCVIEWERSAWS)
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERMATLAB); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERMATLAB); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MATLAB, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MATLAB, __pyx_t_5) < 0) __PYX_ERR(27, 14, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":15
@@ -245632,9 +248366,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class ViewerFormat(object):
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSAWS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSAWS); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAWS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAWS, __pyx_t_5) < 0) __PYX_ERR(27, 15, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":3
@@ -245644,9 +248378,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SOCKET      = S_(PETSCVIEWERSOCKET)
  *     ASCII       = S_(PETSCVIEWERASCII)
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ViewerType, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ViewerType, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ViewerType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ViewerType, __pyx_t_5) < 0) __PYX_ERR(27, 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;
@@ -245659,14 +248393,14 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DEFAULT           = PETSC_VIEWER_DEFAULT
  *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_ViewerFormat, __pyx_n_s_ViewerFormat, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_ViewerFormat, __pyx_n_s_ViewerFormat, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Viewer.pyx":18
@@ -245676,9 +248410,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB
  *     ASCII_MATHEMATICA = PETSC_VIEWER_ASCII_MATHEMATICA
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_DEFAULT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DEFAULT); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DEFAULT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DEFAULT, __pyx_t_5) < 0) __PYX_ERR(27, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":19
@@ -245688,9 +248422,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_MATHEMATICA = PETSC_VIEWER_ASCII_MATHEMATICA
  *     ASCII_IMPL        = PETSC_VIEWER_ASCII_IMPL
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_MATLAB); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_MATLAB); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_MATLAB, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_MATLAB, __pyx_t_5) < 0) __PYX_ERR(27, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":20
@@ -245700,9 +248434,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_IMPL        = PETSC_VIEWER_ASCII_IMPL
  *     ASCII_INFO        = PETSC_VIEWER_ASCII_INFO
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_MATHEMATICA); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_MATHEMATICA); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_MATHEMATICA, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_MATHEMATICA, __pyx_t_5) < 0) __PYX_ERR(27, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":21
@@ -245712,9 +248446,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_INFO        = PETSC_VIEWER_ASCII_INFO
  *     ASCII_INFO_DETAIL = PETSC_VIEWER_ASCII_INFO_DETAIL
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_IMPL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_IMPL); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 21, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_IMPL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_IMPL, __pyx_t_5) < 0) __PYX_ERR(27, 21, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":22
@@ -245724,9 +248458,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_INFO_DETAIL = PETSC_VIEWER_ASCII_INFO_DETAIL
  *     ASCII_COMMON      = PETSC_VIEWER_ASCII_COMMON
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_INFO); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_INFO); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 22, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_INFO, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_INFO, __pyx_t_5) < 0) __PYX_ERR(27, 22, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":23
@@ -245736,9 +248470,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_COMMON      = PETSC_VIEWER_ASCII_COMMON
  *     ASCII_SYMMODU     = PETSC_VIEWER_ASCII_SYMMODU
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_INFO_DETAIL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_INFO_DETAIL); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_INFO_DETAIL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_INFO_DETAIL, __pyx_t_5) < 0) __PYX_ERR(27, 23, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":24
@@ -245748,9 +248482,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_SYMMODU     = PETSC_VIEWER_ASCII_SYMMODU
  *     ASCII_INDEX       = PETSC_VIEWER_ASCII_INDEX
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_COMMON); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_COMMON); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_COMMON, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_COMMON, __pyx_t_5) < 0) __PYX_ERR(27, 24, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":25
@@ -245760,9 +248494,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_INDEX       = PETSC_VIEWER_ASCII_INDEX
  *     ASCII_DENSE       = PETSC_VIEWER_ASCII_DENSE
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_SYMMODU); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_SYMMODU); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_SYMMODU, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_SYMMODU, __pyx_t_5) < 0) __PYX_ERR(27, 25, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":26
@@ -245772,9 +248506,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_DENSE       = PETSC_VIEWER_ASCII_DENSE
  *     ASCII_MATRIXMARKET= PETSC_VIEWER_ASCII_MATRIXMARKET
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_INDEX); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_INDEX); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 26, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_INDEX, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_INDEX, __pyx_t_5) < 0) __PYX_ERR(27, 26, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":27
@@ -245784,9 +248518,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_MATRIXMARKET= PETSC_VIEWER_ASCII_MATRIXMARKET
  *     ASCII_VTK         = PETSC_VIEWER_ASCII_VTK
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_DENSE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_DENSE); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_DENSE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_DENSE, __pyx_t_5) < 0) __PYX_ERR(27, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":28
@@ -245796,9 +248530,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_VTK         = PETSC_VIEWER_ASCII_VTK
  *     ASCII_VTK_CELL    = PETSC_VIEWER_ASCII_VTK_CELL
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_MATRIXMARKET); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_MATRIXMARKET); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 28, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_MATRIXMARKET, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_MATRIXMARKET, __pyx_t_5) < 0) __PYX_ERR(27, 28, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":29
@@ -245808,9 +248542,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_VTK_CELL    = PETSC_VIEWER_ASCII_VTK_CELL
  *     ASCII_VTK_COORDS  = PETSC_VIEWER_ASCII_VTK_COORDS
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_VTK); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_VTK); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_VTK, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_VTK, __pyx_t_5) < 0) __PYX_ERR(27, 29, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":30
@@ -245820,9 +248554,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_VTK_COORDS  = PETSC_VIEWER_ASCII_VTK_COORDS
  *     ASCII_PCICE       = PETSC_VIEWER_ASCII_PCICE
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_VTK_CELL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_VTK_CELL); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_VTK_CELL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_VTK_CELL, __pyx_t_5) < 0) __PYX_ERR(27, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":31
@@ -245832,9 +248566,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_PCICE       = PETSC_VIEWER_ASCII_PCICE
  *     ASCII_PYTHON      = PETSC_VIEWER_ASCII_PYTHON
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_VTK_COORDS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_VTK_COORDS); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_VTK_COORDS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_VTK_COORDS, __pyx_t_5) < 0) __PYX_ERR(27, 31, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":32
@@ -245844,9 +248578,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_PYTHON      = PETSC_VIEWER_ASCII_PYTHON
  *     ASCII_FACTOR_INFO = PETSC_VIEWER_ASCII_FACTOR_INFO
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_PCICE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_PCICE); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_PCICE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_PCICE, __pyx_t_5) < 0) __PYX_ERR(27, 32, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":33
@@ -245856,9 +248590,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_FACTOR_INFO = PETSC_VIEWER_ASCII_FACTOR_INFO
  *     ASCII_LATEX       = PETSC_VIEWER_ASCII_LATEX
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_PYTHON); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_PYTHON); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 33, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_PYTHON, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_PYTHON, __pyx_t_5) < 0) __PYX_ERR(27, 33, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":34
@@ -245866,155 +248600,167 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASCII_PYTHON      = PETSC_VIEWER_ASCII_PYTHON
  *     ASCII_FACTOR_INFO = PETSC_VIEWER_ASCII_FACTOR_INFO             # <<<<<<<<<<<<<<
  *     ASCII_LATEX       = PETSC_VIEWER_ASCII_LATEX
- *     DRAW_BASIC        = PETSC_VIEWER_DRAW_BASIC
+ *     ASCII_XML         = PETSC_VIEWER_ASCII_XML
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_FACTOR_INFO); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_FACTOR_INFO); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_FACTOR_INFO, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_FACTOR_INFO, __pyx_t_5) < 0) __PYX_ERR(27, 34, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":35
  *     ASCII_PYTHON      = PETSC_VIEWER_ASCII_PYTHON
  *     ASCII_FACTOR_INFO = PETSC_VIEWER_ASCII_FACTOR_INFO
  *     ASCII_LATEX       = PETSC_VIEWER_ASCII_LATEX             # <<<<<<<<<<<<<<
+ *     ASCII_XML         = PETSC_VIEWER_ASCII_XML
  *     DRAW_BASIC        = PETSC_VIEWER_DRAW_BASIC
- *     DRAW_LG           = PETSC_VIEWER_DRAW_LG
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_ASCII_LATEX); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_LATEX); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_LATEX, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_LATEX, __pyx_t_5) < 0) __PYX_ERR(27, 35, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":36
  *     ASCII_FACTOR_INFO = PETSC_VIEWER_ASCII_FACTOR_INFO
  *     ASCII_LATEX       = PETSC_VIEWER_ASCII_LATEX
- *     DRAW_BASIC        = PETSC_VIEWER_DRAW_BASIC             # <<<<<<<<<<<<<<
+ *     ASCII_XML         = PETSC_VIEWER_ASCII_XML             # <<<<<<<<<<<<<<
+ *     DRAW_BASIC        = PETSC_VIEWER_DRAW_BASIC
  *     DRAW_LG           = PETSC_VIEWER_DRAW_LG
- *     DRAW_CONTOUR      = PETSC_VIEWER_DRAW_CONTOUR
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_DRAW_BASIC); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_XML); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW_BASIC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASCII_XML, __pyx_t_5) < 0) __PYX_ERR(27, 36, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":37
  *     ASCII_LATEX       = PETSC_VIEWER_ASCII_LATEX
+ *     ASCII_XML         = PETSC_VIEWER_ASCII_XML
+ *     DRAW_BASIC        = PETSC_VIEWER_DRAW_BASIC             # <<<<<<<<<<<<<<
+ *     DRAW_LG           = PETSC_VIEWER_DRAW_LG
+ *     DRAW_CONTOUR      = PETSC_VIEWER_DRAW_CONTOUR
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DRAW_BASIC); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW_BASIC, __pyx_t_5) < 0) __PYX_ERR(27, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "PETSc/Viewer.pyx":38
+ *     ASCII_XML         = PETSC_VIEWER_ASCII_XML
  *     DRAW_BASIC        = PETSC_VIEWER_DRAW_BASIC
  *     DRAW_LG           = PETSC_VIEWER_DRAW_LG             # <<<<<<<<<<<<<<
  *     DRAW_CONTOUR      = PETSC_VIEWER_DRAW_CONTOUR
  *     DRAW_PORTS        = PETSC_VIEWER_DRAW_PORTS
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_DRAW_LG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DRAW_LG); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 38, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW_LG, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW_LG, __pyx_t_5) < 0) __PYX_ERR(27, 38, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":38
+  /* "PETSc/Viewer.pyx":39
  *     DRAW_BASIC        = PETSC_VIEWER_DRAW_BASIC
  *     DRAW_LG           = PETSC_VIEWER_DRAW_LG
  *     DRAW_CONTOUR      = PETSC_VIEWER_DRAW_CONTOUR             # <<<<<<<<<<<<<<
  *     DRAW_PORTS        = PETSC_VIEWER_DRAW_PORTS
  *     VTK_VTS           = PETSC_VIEWER_VTK_VTS
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_DRAW_CONTOUR); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DRAW_CONTOUR); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW_CONTOUR, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW_CONTOUR, __pyx_t_5) < 0) __PYX_ERR(27, 39, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":39
+  /* "PETSc/Viewer.pyx":40
  *     DRAW_LG           = PETSC_VIEWER_DRAW_LG
  *     DRAW_CONTOUR      = PETSC_VIEWER_DRAW_CONTOUR
  *     DRAW_PORTS        = PETSC_VIEWER_DRAW_PORTS             # <<<<<<<<<<<<<<
  *     VTK_VTS           = PETSC_VIEWER_VTK_VTS
  *     VTK_VTR           = PETSC_VIEWER_VTK_VTR
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_DRAW_PORTS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DRAW_PORTS); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW_PORTS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DRAW_PORTS, __pyx_t_5) < 0) __PYX_ERR(27, 40, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":40
+  /* "PETSc/Viewer.pyx":41
  *     DRAW_CONTOUR      = PETSC_VIEWER_DRAW_CONTOUR
  *     DRAW_PORTS        = PETSC_VIEWER_DRAW_PORTS
  *     VTK_VTS           = PETSC_VIEWER_VTK_VTS             # <<<<<<<<<<<<<<
  *     VTK_VTR           = PETSC_VIEWER_VTK_VTR
  *     VTK_VTU           = PETSC_VIEWER_VTK_VTU
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_VTK_VTS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_VTK_VTS); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VTK_VTS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VTK_VTS, __pyx_t_5) < 0) __PYX_ERR(27, 41, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":41
+  /* "PETSc/Viewer.pyx":42
  *     DRAW_PORTS        = PETSC_VIEWER_DRAW_PORTS
  *     VTK_VTS           = PETSC_VIEWER_VTK_VTS
  *     VTK_VTR           = PETSC_VIEWER_VTK_VTR             # <<<<<<<<<<<<<<
  *     VTK_VTU           = PETSC_VIEWER_VTK_VTU
  *     BINARY_MATLAB     = PETSC_VIEWER_BINARY_MATLAB
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_VTK_VTR); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_VTK_VTR); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VTK_VTR, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VTK_VTR, __pyx_t_5) < 0) __PYX_ERR(27, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":42
+  /* "PETSc/Viewer.pyx":43
  *     VTK_VTS           = PETSC_VIEWER_VTK_VTS
  *     VTK_VTR           = PETSC_VIEWER_VTK_VTR
  *     VTK_VTU           = PETSC_VIEWER_VTK_VTU             # <<<<<<<<<<<<<<
  *     BINARY_MATLAB     = PETSC_VIEWER_BINARY_MATLAB
  *     NATIVE            = PETSC_VIEWER_NATIVE
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_VTK_VTU); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_VTK_VTU); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 43, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VTK_VTU, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VTK_VTU, __pyx_t_5) < 0) __PYX_ERR(27, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":43
+  /* "PETSc/Viewer.pyx":44
  *     VTK_VTR           = PETSC_VIEWER_VTK_VTR
  *     VTK_VTU           = PETSC_VIEWER_VTK_VTU
  *     BINARY_MATLAB     = PETSC_VIEWER_BINARY_MATLAB             # <<<<<<<<<<<<<<
  *     NATIVE            = PETSC_VIEWER_NATIVE
  *     HDF5_VIZ          = PETSC_VIEWER_HDF5_VIZ
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_BINARY_MATLAB); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_BINARY_MATLAB); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 44, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BINARY_MATLAB, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BINARY_MATLAB, __pyx_t_5) < 0) __PYX_ERR(27, 44, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":44
+  /* "PETSc/Viewer.pyx":45
  *     VTK_VTU           = PETSC_VIEWER_VTK_VTU
  *     BINARY_MATLAB     = PETSC_VIEWER_BINARY_MATLAB
  *     NATIVE            = PETSC_VIEWER_NATIVE             # <<<<<<<<<<<<<<
  *     HDF5_VIZ          = PETSC_VIEWER_HDF5_VIZ
  *     NOFORMAT          = PETSC_VIEWER_NOFORMAT
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_NATIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_NATIVE); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NATIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NATIVE, __pyx_t_5) < 0) __PYX_ERR(27, 45, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":45
+  /* "PETSc/Viewer.pyx":46
  *     BINARY_MATLAB     = PETSC_VIEWER_BINARY_MATLAB
  *     NATIVE            = PETSC_VIEWER_NATIVE
  *     HDF5_VIZ          = PETSC_VIEWER_HDF5_VIZ             # <<<<<<<<<<<<<<
  *     NOFORMAT          = PETSC_VIEWER_NOFORMAT
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_HDF5_VIZ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_HDF5_VIZ); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HDF5_VIZ, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HDF5_VIZ, __pyx_t_5) < 0) __PYX_ERR(27, 46, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":46
+  /* "PETSc/Viewer.pyx":47
  *     NATIVE            = PETSC_VIEWER_NATIVE
  *     HDF5_VIZ          = PETSC_VIEWER_HDF5_VIZ
  *     NOFORMAT          = PETSC_VIEWER_NOFORMAT             # <<<<<<<<<<<<<<
  * 
  * class FileMode(object):
  */
-  __pyx_t_5 = PyInt_FromLong(PETSC_VIEWER_NOFORMAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_NOFORMAT); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NOFORMAT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NOFORMAT, __pyx_t_5) < 0) __PYX_ERR(27, 47, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
   /* "PETSc/Viewer.pyx":17
@@ -246024,92 +248770,92 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DEFAULT           = PETSC_VIEWER_DEFAULT
  *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ViewerFormat, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ViewerFormat, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ViewerFormat, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ViewerFormat, __pyx_t_5) < 0) __PYX_ERR(27, 17, __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_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":48
+  /* "PETSc/Viewer.pyx":49
  *     NOFORMAT          = PETSC_VIEWER_NOFORMAT
  * 
  * class FileMode(object):             # <<<<<<<<<<<<<<
  *     # native
  *     READ          = PETSC_FILE_MODE_READ
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_FileMode, __pyx_n_s_FileMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_FileMode, __pyx_n_s_FileMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Viewer.pyx":50
+  /* "PETSc/Viewer.pyx":51
  * class FileMode(object):
  *     # native
  *     READ          = PETSC_FILE_MODE_READ             # <<<<<<<<<<<<<<
  *     WRITE         = PETSC_FILE_MODE_WRITE
  *     APPEND        = PETSC_FILE_MODE_APPEND
  */
-  __pyx_t_5 = PyInt_FromLong(FILE_MODE_READ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_READ); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_READ, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_READ, __pyx_t_5) < 0) __PYX_ERR(27, 51, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":51
+  /* "PETSc/Viewer.pyx":52
  *     # native
  *     READ          = PETSC_FILE_MODE_READ
  *     WRITE         = PETSC_FILE_MODE_WRITE             # <<<<<<<<<<<<<<
  *     APPEND        = PETSC_FILE_MODE_APPEND
  *     UPDATE        = PETSC_FILE_MODE_UPDATE
  */
-  __pyx_t_5 = PyInt_FromLong(FILE_MODE_WRITE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_WRITE); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_WRITE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_WRITE, __pyx_t_5) < 0) __PYX_ERR(27, 52, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":52
+  /* "PETSc/Viewer.pyx":53
  *     READ          = PETSC_FILE_MODE_READ
  *     WRITE         = PETSC_FILE_MODE_WRITE
  *     APPEND        = PETSC_FILE_MODE_APPEND             # <<<<<<<<<<<<<<
  *     UPDATE        = PETSC_FILE_MODE_UPDATE
  *     APPEND_UPDATE = PETSC_FILE_MODE_APPEND_UPDATE
  */
-  __pyx_t_5 = PyInt_FromLong(FILE_MODE_APPEND); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_APPEND); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_APPEND, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_APPEND, __pyx_t_5) < 0) __PYX_ERR(27, 53, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":53
+  /* "PETSc/Viewer.pyx":54
  *     WRITE         = PETSC_FILE_MODE_WRITE
  *     APPEND        = PETSC_FILE_MODE_APPEND
  *     UPDATE        = PETSC_FILE_MODE_UPDATE             # <<<<<<<<<<<<<<
  *     APPEND_UPDATE = PETSC_FILE_MODE_APPEND_UPDATE
  *     # aliases
  */
-  __pyx_t_5 = PyInt_FromLong(FILE_MODE_UPDATE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_UPDATE); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UPDATE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UPDATE, __pyx_t_5) < 0) __PYX_ERR(27, 54, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":54
+  /* "PETSc/Viewer.pyx":55
  *     APPEND        = PETSC_FILE_MODE_APPEND
  *     UPDATE        = PETSC_FILE_MODE_UPDATE
  *     APPEND_UPDATE = PETSC_FILE_MODE_APPEND_UPDATE             # <<<<<<<<<<<<<<
  *     # aliases
  *     R, W, A, U = READ, WRITE, APPEND, UPDATE
  */
-  __pyx_t_5 = PyInt_FromLong(FILE_MODE_APPEND_UPDATE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_APPEND_UPDATE); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_APPEND_UPDATE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_APPEND_UPDATE, __pyx_t_5) < 0) __PYX_ERR(27, 55, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Viewer.pyx":56
+  /* "PETSc/Viewer.pyx":57
  *     APPEND_UPDATE = PETSC_FILE_MODE_APPEND_UPDATE
  *     # aliases
  *     R, W, A, U = READ, WRITE, APPEND, UPDATE             # <<<<<<<<<<<<<<
@@ -246121,39 +248867,39 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ);
   }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_6 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_WRITE);
   if (unlikely(!__pyx_t_6)) {
     PyErr_Clear();
     __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_WRITE);
   }
-  if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_7 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_APPEND);
   if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
     __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_APPEND);
   }
-  if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_UPDATE);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
     __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_UPDATE);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_R, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_R, __pyx_t_5) < 0) __PYX_ERR(27, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_W, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_W, __pyx_t_6) < 0) __PYX_ERR(27, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_A, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_A, __pyx_t_7) < 0) __PYX_ERR(27, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_U, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_U, __pyx_t_8) < 0) __PYX_ERR(27, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":57
+  /* "PETSc/Viewer.pyx":58
  *     # aliases
  *     R, W, A, U = READ, WRITE, APPEND, UPDATE
  *     AU = UA    = APPEND_UPDATE             # <<<<<<<<<<<<<<
@@ -246165,93 +248911,93 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_APPEND_UPDATE);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AU, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UA, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AU, __pyx_t_8) < 0) __PYX_ERR(27, 58, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UA, __pyx_t_8) < 0) __PYX_ERR(27, 58, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":48
+  /* "PETSc/Viewer.pyx":49
  *     NOFORMAT          = PETSC_VIEWER_NOFORMAT
  * 
  * class FileMode(object):             # <<<<<<<<<<<<<<
  *     # native
  *     READ          = PETSC_FILE_MODE_READ
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_FileMode, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_FileMode, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FileMode, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FileMode, __pyx_t_8) < 0) __PYX_ERR(27, 49, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":59
+  /* "PETSc/Viewer.pyx":60
  *     AU = UA    = APPEND_UPDATE
  * 
  * class DrawSize(object):             # <<<<<<<<<<<<<<
  *     # native
  *     FULL_SIZE    = PETSC_DRAW_FULL_SIZE
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_DrawSize, __pyx_n_s_DrawSize, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_1, __pyx_n_s_DrawSize, __pyx_n_s_DrawSize, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Viewer.pyx":61
+  /* "PETSc/Viewer.pyx":62
  * class DrawSize(object):
  *     # native
  *     FULL_SIZE    = PETSC_DRAW_FULL_SIZE             # <<<<<<<<<<<<<<
  *     HALF_SIZE    = PETSC_DRAW_HALF_SIZE
  *     THIRD_SIZE   = PETSC_DRAW_THIRD_SIZE
  */
-  __pyx_t_8 = __Pyx_PyInt_From_int(PETSC_DRAW_FULL_SIZE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_int(PETSC_DRAW_FULL_SIZE); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 62, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL_SIZE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL_SIZE, __pyx_t_8) < 0) __PYX_ERR(27, 62, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":62
+  /* "PETSc/Viewer.pyx":63
  *     # native
  *     FULL_SIZE    = PETSC_DRAW_FULL_SIZE
  *     HALF_SIZE    = PETSC_DRAW_HALF_SIZE             # <<<<<<<<<<<<<<
  *     THIRD_SIZE   = PETSC_DRAW_THIRD_SIZE
  *     QUARTER_SIZE = PETSC_DRAW_QUARTER_SIZE
  */
-  __pyx_t_8 = __Pyx_PyInt_From_int(PETSC_DRAW_HALF_SIZE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_int(PETSC_DRAW_HALF_SIZE); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HALF_SIZE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HALF_SIZE, __pyx_t_8) < 0) __PYX_ERR(27, 63, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":63
+  /* "PETSc/Viewer.pyx":64
  *     FULL_SIZE    = PETSC_DRAW_FULL_SIZE
  *     HALF_SIZE    = PETSC_DRAW_HALF_SIZE
  *     THIRD_SIZE   = PETSC_DRAW_THIRD_SIZE             # <<<<<<<<<<<<<<
  *     QUARTER_SIZE = PETSC_DRAW_QUARTER_SIZE
  *     # aliases
  */
-  __pyx_t_8 = __Pyx_PyInt_From_int(PETSC_DRAW_THIRD_SIZE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_int(PETSC_DRAW_THIRD_SIZE); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_THIRD_SIZE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_THIRD_SIZE, __pyx_t_8) < 0) __PYX_ERR(27, 64, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":64
+  /* "PETSc/Viewer.pyx":65
  *     HALF_SIZE    = PETSC_DRAW_HALF_SIZE
  *     THIRD_SIZE   = PETSC_DRAW_THIRD_SIZE
  *     QUARTER_SIZE = PETSC_DRAW_QUARTER_SIZE             # <<<<<<<<<<<<<<
  *     # aliases
  *     FULL    = FULL_SIZE
  */
-  __pyx_t_8 = __Pyx_PyInt_From_int(PETSC_DRAW_QUARTER_SIZE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_int(PETSC_DRAW_QUARTER_SIZE); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QUARTER_SIZE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QUARTER_SIZE, __pyx_t_8) < 0) __PYX_ERR(27, 65, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":66
+  /* "PETSc/Viewer.pyx":67
  *     QUARTER_SIZE = PETSC_DRAW_QUARTER_SIZE
  *     # aliases
  *     FULL    = FULL_SIZE             # <<<<<<<<<<<<<<
@@ -246263,12 +249009,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_FULL_SIZE);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 67, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_8) < 0) __PYX_ERR(27, 67, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":67
+  /* "PETSc/Viewer.pyx":68
  *     # aliases
  *     FULL    = FULL_SIZE
  *     HALF    = HALF_SIZE             # <<<<<<<<<<<<<<
@@ -246280,12 +249026,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_HALF_SIZE);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HALF, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HALF, __pyx_t_8) < 0) __PYX_ERR(27, 68, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":68
+  /* "PETSc/Viewer.pyx":69
  *     FULL    = FULL_SIZE
  *     HALF    = HALF_SIZE
  *     THIRD   = THIRD_SIZE             # <<<<<<<<<<<<<<
@@ -246297,12 +249043,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_THIRD_SIZE);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_THIRD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_THIRD, __pyx_t_8) < 0) __PYX_ERR(27, 69, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":69
+  /* "PETSc/Viewer.pyx":70
  *     HALF    = HALF_SIZE
  *     THIRD   = THIRD_SIZE
  *     QUARTER = QUARTER_SIZE             # <<<<<<<<<<<<<<
@@ -246314,323 +249060,335 @@ PyMODINIT_FUNC PyInit_PETSc(void)
     PyErr_Clear();
     __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_QUARTER_SIZE);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 70, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QUARTER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QUARTER, __pyx_t_8) < 0) __PYX_ERR(27, 70, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":59
+  /* "PETSc/Viewer.pyx":60
  *     AU = UA    = APPEND_UPDATE
  * 
  * class DrawSize(object):             # <<<<<<<<<<<<<<
  *     # native
  *     FULL_SIZE    = PETSC_DRAW_FULL_SIZE
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DrawSize, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DrawSize, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DrawSize, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DrawSize, __pyx_t_8) < 0) __PYX_ERR(27, 60, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":75
+  /* "PETSc/Viewer.pyx":76
  * cdef class Viewer(Object):
  * 
  *     Type   = ViewerType             # <<<<<<<<<<<<<<
  *     Format = ViewerFormat
  *     Mode   = FileMode
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_ViewerType); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_ViewerType); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 76, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(27, 76, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":76
+  /* "PETSc/Viewer.pyx":77
  * 
  *     Type   = ViewerType
  *     Format = ViewerFormat             # <<<<<<<<<<<<<<
  *     Mode   = FileMode
  *     Size   = DrawSize
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_ViewerFormat); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_ViewerFormat); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Format, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Format, __pyx_t_1) < 0) __PYX_ERR(27, 77, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":77
+  /* "PETSc/Viewer.pyx":78
  *     Type   = ViewerType
  *     Format = ViewerFormat
  *     Mode   = FileMode             # <<<<<<<<<<<<<<
  *     Size   = DrawSize
  * 
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_FileMode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_FileMode); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 78, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Mode, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Mode, __pyx_t_1) < 0) __PYX_ERR(27, 78, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":78
+  /* "PETSc/Viewer.pyx":79
  *     Format = ViewerFormat
  *     Mode   = FileMode
  *     Size   = DrawSize             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DrawSize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DrawSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 79, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Size, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Size, __pyx_t_1) < 0) __PYX_ERR(27, 79, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":245
+  /* "PETSc/Viewer.pyx":234
  * 
  *     @classmethod
  *     def STDOUT(cls, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_STDOUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_STDOUT); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 234, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Viewer.pyx":244
+  /* "PETSc/Viewer.pyx":233
  *         CHKERR( PetscViewerPopFormat(self.vwr) )
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def STDOUT(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 233, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_STDOUT, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_STDOUT, __pyx_t_3) < 0) __PYX_ERR(27, 234, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":253
+  /* "PETSc/Viewer.pyx":242
  * 
  *     @classmethod
  *     def STDERR(cls, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_STDERR); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_STDERR); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Viewer.pyx":252
+  /* "PETSc/Viewer.pyx":241
  *         return viewer
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def STDERR(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_STDERR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_STDERR, __pyx_t_1) < 0) __PYX_ERR(27, 242, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":261
+  /* "PETSc/Viewer.pyx":250
  * 
  *     @classmethod
  *     def ASCII(cls, name, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_ASCII); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_ASCII); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 250, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Viewer.pyx":260
+  /* "PETSc/Viewer.pyx":249
  *         return viewer
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def ASCII(cls, name, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 249, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_ASCII, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_ASCII, __pyx_t_3) < 0) __PYX_ERR(27, 250, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":270
+  /* "PETSc/Viewer.pyx":259
  * 
  *     @classmethod
  *     def BINARY(cls, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_BINARY); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_BINARY); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Viewer.pyx":269
+  /* "PETSc/Viewer.pyx":258
  *         return viewer
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def BINARY(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_BINARY, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_BINARY, __pyx_t_1) < 0) __PYX_ERR(27, 259, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":278
+  /* "PETSc/Viewer.pyx":267
  * 
  *     @classmethod
  *     def DRAW(cls, comm=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef Viewer viewer = Viewer()
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_DRAW); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_DRAW); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 267, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Viewer.pyx":277
+  /* "PETSc/Viewer.pyx":266
  *         return viewer
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def DRAW(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_DRAW, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_DRAW, __pyx_t_3) < 0) __PYX_ERR(27, 267, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":374
+  /* "PETSc/Viewer.pyx":363
  * # --------------------------------------------------------------------
  * 
  * del ViewerType             # <<<<<<<<<<<<<<
  * del ViewerFormat
  * del FileMode
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ViewerType) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ViewerType) < 0) __PYX_ERR(27, 363, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":375
+  /* "PETSc/Viewer.pyx":364
  * 
  * del ViewerType
  * del ViewerFormat             # <<<<<<<<<<<<<<
  * del FileMode
  * del DrawSize
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ViewerFormat) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ViewerFormat) < 0) __PYX_ERR(27, 364, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":376
+  /* "PETSc/Viewer.pyx":365
  * del ViewerType
  * del ViewerFormat
  * del FileMode             # <<<<<<<<<<<<<<
  * del DrawSize
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_FileMode) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_FileMode) < 0) __PYX_ERR(27, 365, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":377
+  /* "PETSc/Viewer.pyx":366
  * del ViewerFormat
  * del FileMode
  * del DrawSize             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DrawSize) < 0) {__pyx_filename = __pyx_f[27]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DrawSize) < 0) __PYX_ERR(27, 366, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":3
  * # --------------------------------------------------------------------
  * 
  * class RandomType(object):             # <<<<<<<<<<<<<<
- *     RAND   = S_(PETSCRAND)
- *     RAND48 = S_(PETSCRAND48)
+ *     RAND     = S_(PETSCRAND)
+ *     RAND48   = S_(PETSCRAND48)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_RandomType, __pyx_n_s_RandomType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_RandomType, __pyx_n_s_RandomType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Random.pyx":4
  * 
  * class RandomType(object):
- *     RAND   = S_(PETSCRAND)             # <<<<<<<<<<<<<<
- *     RAND48 = S_(PETSCRAND48)
- *     SPRNG  = S_(PETSCSPRNG)
+ *     RAND     = S_(PETSCRAND)             # <<<<<<<<<<<<<<
+ *     RAND48   = S_(PETSCRAND48)
+ *     SPRNG    = S_(PETSCSPRNG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCRAND); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCRAND); if (unlikely(!__pyx_t_8)) __PYX_ERR(28, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RAND, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RAND, __pyx_t_8) < 0) __PYX_ERR(28, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
   /* "PETSc/Random.pyx":5
  * class RandomType(object):
- *     RAND   = S_(PETSCRAND)
- *     RAND48 = S_(PETSCRAND48)             # <<<<<<<<<<<<<<
- *     SPRNG  = S_(PETSCSPRNG)
- * 
+ *     RAND     = S_(PETSCRAND)
+ *     RAND48   = S_(PETSCRAND48)             # <<<<<<<<<<<<<<
+ *     SPRNG    = S_(PETSCSPRNG)
+ *     RANDER48 = S_(PETSCRANDER48)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCRAND48); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCRAND48); if (unlikely(!__pyx_t_8)) __PYX_ERR(28, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RAND48, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RAND48, __pyx_t_8) < 0) __PYX_ERR(28, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
   /* "PETSc/Random.pyx":6
- *     RAND   = S_(PETSCRAND)
- *     RAND48 = S_(PETSCRAND48)
- *     SPRNG  = S_(PETSCSPRNG)             # <<<<<<<<<<<<<<
+ *     RAND     = S_(PETSCRAND)
+ *     RAND48   = S_(PETSCRAND48)
+ *     SPRNG    = S_(PETSCSPRNG)             # <<<<<<<<<<<<<<
+ *     RANDER48 = S_(PETSCRANDER48)
+ * 
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSPRNG); if (unlikely(!__pyx_t_8)) __PYX_ERR(28, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPRNG, __pyx_t_8) < 0) __PYX_ERR(28, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Random.pyx":7
+ *     RAND48   = S_(PETSCRAND48)
+ *     SPRNG    = S_(PETSCSPRNG)
+ *     RANDER48 = S_(PETSCRANDER48)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSPRNG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCRANDER48); if (unlikely(!__pyx_t_8)) __PYX_ERR(28, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPRNG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RANDER48, __pyx_t_8) < 0) __PYX_ERR(28, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
   /* "PETSc/Random.pyx":3
  * # --------------------------------------------------------------------
  * 
  * class RandomType(object):             # <<<<<<<<<<<<<<
- *     RAND   = S_(PETSCRAND)
- *     RAND48 = S_(PETSCRAND48)
+ *     RAND     = S_(PETSCRAND)
+ *     RAND48   = S_(PETSCRAND48)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_RandomType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_RandomType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(28, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RandomType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RandomType, __pyx_t_8) < 0) __PYX_ERR(28, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Random.pyx":12
+  /* "PETSc/Random.pyx":13
  * cdef class Random(Object):
  * 
  *     Type = RandomType             # <<<<<<<<<<<<<<
  * 
  *     def __cinit__(self):
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_RandomType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_RandomType); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Random->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Random->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(28, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Random);
 
-  /* "PETSc/Random.pyx":99
+  /* "PETSc/Random.pyx":100
  * # --------------------------------------------------------------------
  * 
  * del RandomType             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_RandomType) < 0) {__pyx_filename = __pyx_f[28]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_RandomType) < 0) __PYX_ERR(28, 100, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":3
  * # --------------------------------------------------------------------
@@ -246639,14 +249397,14 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GENERAL = S_(ISGENERAL)
  *     BLOCK   = S_(ISBLOCK)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_ISType, __pyx_n_s_ISType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_ISType, __pyx_n_s_ISType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/IS.pyx":4
@@ -246656,9 +249414,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BLOCK   = S_(ISBLOCK)
  *     STRIDE  = S_(ISSTRIDE)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(ISGENERAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(ISGENERAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(29, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GENERAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GENERAL, __pyx_t_8) < 0) __PYX_ERR(29, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
   /* "PETSc/IS.pyx":5
@@ -246668,9 +249426,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     STRIDE  = S_(ISSTRIDE)
  * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(ISBLOCK); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(ISBLOCK); if (unlikely(!__pyx_t_8)) __PYX_ERR(29, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BLOCK, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BLOCK, __pyx_t_8) < 0) __PYX_ERR(29, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
   /* "PETSc/IS.pyx":6
@@ -246680,9 +249438,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(ISSTRIDE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(ISSTRIDE); if (unlikely(!__pyx_t_8)) __PYX_ERR(29, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STRIDE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STRIDE, __pyx_t_8) < 0) __PYX_ERR(29, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
   /* "PETSc/IS.pyx":3
@@ -246692,9 +249450,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GENERAL = S_(ISGENERAL)
  *     BLOCK   = S_(ISBLOCK)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ISType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ISType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(29, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ISType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ISType, __pyx_t_8) < 0) __PYX_ERR(29, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -246707,10247 +249465,17281 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     #
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ISType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ISType); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(29, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_IS);
 
-  /* "PETSc/IS.pyx":341
+  /* "PETSc/IS.pyx":343
+ * 
+ * 
+ * class GLMapType(object):             # <<<<<<<<<<<<<<
+ *     MASK = PETSC_IS_GTOLM_MASK
+ *     DROP = PETSC_IS_GTOLM_DROP
+ */
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_GLMapType, __pyx_n_s_GLMapType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "PETSc/IS.pyx":344
+ * 
+ * class GLMapType(object):
+ *     MASK = PETSC_IS_GTOLM_MASK             # <<<<<<<<<<<<<<
+ *     DROP = PETSC_IS_GTOLM_DROP
+ * 
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_ISGlobalToLocalMappingType(IS_GTOLM_MASK); if (unlikely(!__pyx_t_8)) __PYX_ERR(29, 344, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MASK, __pyx_t_8) < 0) __PYX_ERR(29, 344, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/IS.pyx":345
+ * class GLMapType(object):
+ *     MASK = PETSC_IS_GTOLM_MASK
+ *     DROP = PETSC_IS_GTOLM_DROP             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_ISGlobalToLocalMappingType(IS_GTOLM_DROP); if (unlikely(!__pyx_t_8)) __PYX_ERR(29, 345, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DROP, __pyx_t_8) < 0) __PYX_ERR(29, 345, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/IS.pyx":343
+ * 
+ * 
+ * class GLMapType(object):             # <<<<<<<<<<<<<<
+ *     MASK = PETSC_IS_GTOLM_MASK
+ *     DROP = PETSC_IS_GTOLM_DROP
+ */
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_GLMapType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_GLMapType, __pyx_t_8) < 0) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/IS.pyx":352
+ * cdef class LGMap(Object):
+ * 
+ *     MapType = GLMapType             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_GLMapType); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap->tp_dict, __pyx_n_s_MapType, __pyx_t_3) < 0) __PYX_ERR(29, 352, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_LGMap);
+
+  /* "PETSc/IS.pyx":556
+ * # --------------------------------------------------------------------
+ * 
+ * del ISType             # <<<<<<<<<<<<<<
+ * del GLMapType
+ * 
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ISType) < 0) __PYX_ERR(29, 556, __pyx_L1_error)
+
+  /* "PETSc/IS.pyx":557
+ * 
+ * del ISType
+ * del GLMapType             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_GLMapType) < 0) __PYX_ERR(29, 557, __pyx_L1_error)
+
+  /* "PETSc/Vec.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class VecType(object):             # <<<<<<<<<<<<<<
+ *     SEQ        = S_(VECSEQ)
+ *     MPI        = S_(VECMPI)
+ */
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_VecType, __pyx_n_s_VecType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "PETSc/Vec.pyx":4
+ * 
+ * class VecType(object):
+ *     SEQ        = S_(VECSEQ)             # <<<<<<<<<<<<<<
+ *     MPI        = S_(VECMPI)
+ *     STANDARD   = S_(VECSTANDARD)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQ); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQ, __pyx_t_8) < 0) __PYX_ERR(30, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":5
+ * class VecType(object):
+ *     SEQ        = S_(VECSEQ)
+ *     MPI        = S_(VECMPI)             # <<<<<<<<<<<<<<
+ *     STANDARD   = S_(VECSTANDARD)
+ *     SHARED     = S_(VECSHARED)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECMPI); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPI, __pyx_t_8) < 0) __PYX_ERR(30, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":6
+ *     SEQ        = S_(VECSEQ)
+ *     MPI        = S_(VECMPI)
+ *     STANDARD   = S_(VECSTANDARD)             # <<<<<<<<<<<<<<
+ *     SHARED     = S_(VECSHARED)
+ *     SEQCUSP    = S_(VECSEQCUSP)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSTANDARD); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STANDARD, __pyx_t_8) < 0) __PYX_ERR(30, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":7
+ *     MPI        = S_(VECMPI)
+ *     STANDARD   = S_(VECSTANDARD)
+ *     SHARED     = S_(VECSHARED)             # <<<<<<<<<<<<<<
+ *     SEQCUSP    = S_(VECSEQCUSP)
+ *     MPICUSP    = S_(VECMPICUSP)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSHARED); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHARED, __pyx_t_8) < 0) __PYX_ERR(30, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":8
+ *     STANDARD   = S_(VECSTANDARD)
+ *     SHARED     = S_(VECSHARED)
+ *     SEQCUSP    = S_(VECSEQCUSP)             # <<<<<<<<<<<<<<
+ *     MPICUSP    = S_(VECMPICUSP)
+ *     CUSP       = S_(VECCUSP)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQCUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQCUSP, __pyx_t_8) < 0) __PYX_ERR(30, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":9
+ *     SHARED     = S_(VECSHARED)
+ *     SEQCUSP    = S_(VECSEQCUSP)
+ *     MPICUSP    = S_(VECMPICUSP)             # <<<<<<<<<<<<<<
+ *     CUSP       = S_(VECCUSP)
+ *     SEQVIENNACL= S_(VECSEQVIENNACL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECMPICUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPICUSP, __pyx_t_8) < 0) __PYX_ERR(30, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":10
+ *     SEQCUSP    = S_(VECSEQCUSP)
+ *     MPICUSP    = S_(VECMPICUSP)
+ *     CUSP       = S_(VECCUSP)             # <<<<<<<<<<<<<<
+ *     SEQVIENNACL= S_(VECSEQVIENNACL)
+ *     MPIVIENNACL= S_(VECMPIVIENNACL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECCUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CUSP, __pyx_t_8) < 0) __PYX_ERR(30, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":11
+ *     MPICUSP    = S_(VECMPICUSP)
+ *     CUSP       = S_(VECCUSP)
+ *     SEQVIENNACL= S_(VECSEQVIENNACL)             # <<<<<<<<<<<<<<
+ *     MPIVIENNACL= S_(VECMPIVIENNACL)
+ *     VIENNACL   = S_(VECVIENNACL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQVIENNACL); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQVIENNACL, __pyx_t_8) < 0) __PYX_ERR(30, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":12
+ *     CUSP       = S_(VECCUSP)
+ *     SEQVIENNACL= S_(VECSEQVIENNACL)
+ *     MPIVIENNACL= S_(VECMPIVIENNACL)             # <<<<<<<<<<<<<<
+ *     VIENNACL   = S_(VECVIENNACL)
+ *     SEQCUSP    = S_(VECSEQCUDA)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECMPIVIENNACL); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIVIENNACL, __pyx_t_8) < 0) __PYX_ERR(30, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":13
+ *     SEQVIENNACL= S_(VECSEQVIENNACL)
+ *     MPIVIENNACL= S_(VECMPIVIENNACL)
+ *     VIENNACL   = S_(VECVIENNACL)             # <<<<<<<<<<<<<<
+ *     SEQCUSP    = S_(VECSEQCUDA)
+ *     MPICUSP    = S_(VECMPICUDA)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECVIENNACL); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VIENNACL, __pyx_t_8) < 0) __PYX_ERR(30, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":14
+ *     MPIVIENNACL= S_(VECMPIVIENNACL)
+ *     VIENNACL   = S_(VECVIENNACL)
+ *     SEQCUSP    = S_(VECSEQCUDA)             # <<<<<<<<<<<<<<
+ *     MPICUSP    = S_(VECMPICUDA)
+ *     CUSP       = S_(VECCUDA)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQCUDA); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQCUSP, __pyx_t_8) < 0) __PYX_ERR(30, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":15
+ *     VIENNACL   = S_(VECVIENNACL)
+ *     SEQCUSP    = S_(VECSEQCUDA)
+ *     MPICUSP    = S_(VECMPICUDA)             # <<<<<<<<<<<<<<
+ *     CUSP       = S_(VECCUDA)
+ *     NEST       = S_(VECNEST)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECMPICUDA); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPICUSP, __pyx_t_8) < 0) __PYX_ERR(30, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":16
+ *     SEQCUSP    = S_(VECSEQCUDA)
+ *     MPICUSP    = S_(VECMPICUDA)
+ *     CUSP       = S_(VECCUDA)             # <<<<<<<<<<<<<<
+ *     NEST       = S_(VECNEST)
+ * 
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECCUDA); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CUSP, __pyx_t_8) < 0) __PYX_ERR(30, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":17
+ *     MPICUSP    = S_(VECMPICUDA)
+ *     CUSP       = S_(VECCUDA)
+ *     NEST       = S_(VECNEST)             # <<<<<<<<<<<<<<
+ * 
+ * class VecOption(object):
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECNEST); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEST, __pyx_t_8) < 0) __PYX_ERR(30, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class VecType(object):             # <<<<<<<<<<<<<<
+ *     SEQ        = S_(VECSEQ)
+ *     MPI        = S_(VECMPI)
+ */
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_VecType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VecType, __pyx_t_8) < 0) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/Vec.pyx":19
+ *     NEST       = S_(VECNEST)
+ * 
+ * class VecOption(object):             # <<<<<<<<<<<<<<
+ *     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES
+ *     IGNORE_NEGATIVE_INDICES = VEC_IGNORE_NEGATIVE_INDICES
+ */
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_VecOption, __pyx_n_s_VecOption, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "PETSc/Vec.pyx":20
+ * 
+ * class VecOption(object):
+ *     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES             # <<<<<<<<<<<<<<
+ *     IGNORE_NEGATIVE_INDICES = VEC_IGNORE_NEGATIVE_INDICES
+ * 
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_VecOption(VEC_IGNORE_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_OFF_PROC_ENTRIES, __pyx_t_8) < 0) __PYX_ERR(30, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":21
+ * class VecOption(object):
+ *     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES
+ *     IGNORE_NEGATIVE_INDICES = VEC_IGNORE_NEGATIVE_INDICES             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_VecOption(VEC_IGNORE_NEGATIVE_INDICES); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_NEGATIVE_INDICES, __pyx_t_8) < 0) __PYX_ERR(30, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Vec.pyx":19
+ *     NEST       = S_(VECNEST)
+ * 
+ * class VecOption(object):             # <<<<<<<<<<<<<<
+ *     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES
+ *     IGNORE_NEGATIVE_INDICES = VEC_IGNORE_NEGATIVE_INDICES
+ */
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_VecOption, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VecOption, __pyx_t_8) < 0) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/Vec.pyx":27
+ * cdef class Vec(Object):
+ * 
+ *     Type = VecType             # <<<<<<<<<<<<<<
+ *     Option = VecOption
+ * 
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_VecType); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(30, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Vec);
+
+  /* "PETSc/Vec.pyx":28
+ * 
+ *     Type = VecType
+ *     Option = VecOption             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_VecOption); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec->tp_dict, __pyx_n_s_Option, __pyx_t_3) < 0) __PYX_ERR(30, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Vec);
+
+  /* "PETSc/Vec.pyx":894
+ * # --------------------------------------------------------------------
+ * 
+ * del VecType             # <<<<<<<<<<<<<<
+ * del VecOption
+ * 
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_VecType) < 0) __PYX_ERR(30, 894, __pyx_L1_error)
+
+  /* "PETSc/Vec.pyx":895
+ * 
+ * del VecType
+ * del VecOption             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_VecOption) < 0) __PYX_ERR(30, 895, __pyx_L1_error)
+
+  /* "PETSc/Scatter.pyx":5
+ * cdef class Scatter(Object):
+ * 
+ *     Mode = ScatterMode             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ScatterMode); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict, __pyx_n_s_Mode, __pyx_t_3) < 0) __PYX_ERR(31, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
+
+  /* "PETSc/Scatter.pyx":44
+ * 
+ *     @classmethod
+ *     def toAll(cls, Vec vec not None):             # <<<<<<<<<<<<<<
+ *         cdef Scatter scatter = Scatter()
+ *         cdef Vec ovec = Vec()
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter, __pyx_n_s_toAll); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+
+  /* "PETSc/Scatter.pyx":43
+ *         return scatter
+ * 
+ *     @classmethod             # <<<<<<<<<<<<<<
+ *     def toAll(cls, Vec vec not None):
+ *         cdef Scatter scatter = Scatter()
+ */
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict, __pyx_n_s_toAll, __pyx_t_1) < 0) __PYX_ERR(31, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
+
+  /* "PETSc/Scatter.pyx":52
+ * 
+ *     @classmethod
+ *     def toZero(cls, Vec vec not None):             # <<<<<<<<<<<<<<
+ *         cdef Scatter scatter = Scatter()
+ *         cdef Vec ovec = Vec()
+ */
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter, __pyx_n_s_toZero); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+
+  /* "PETSc/Scatter.pyx":51
+ *         return (scatter, ovec)
+ * 
+ *     @classmethod             # <<<<<<<<<<<<<<
+ *     def toZero(cls, Vec vec not None):
+ *         cdef Scatter scatter = Scatter()
+ */
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict, __pyx_n_s_toZero, __pyx_t_3) < 0) __PYX_ERR(31, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
+
+  /* "PETSc/Mat.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class MatType(object):             # <<<<<<<<<<<<<<
+ *     SAME            = S_(MATSAME)
+ *     MAIJ            = S_(MATMAIJ)
+ */
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatType, __pyx_n_s_MatType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "PETSc/Mat.pyx":4
+ * 
+ * class MatType(object):
+ *     SAME            = S_(MATSAME)             # <<<<<<<<<<<<<<
+ *     MAIJ            = S_(MATMAIJ)
+ *     SEQMAIJ         = S_(MATSEQMAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSAME); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME, __pyx_t_8) < 0) __PYX_ERR(33, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":5
+ * class MatType(object):
+ *     SAME            = S_(MATSAME)
+ *     MAIJ            = S_(MATMAIJ)             # <<<<<<<<<<<<<<
+ *     SEQMAIJ         = S_(MATSEQMAIJ)
+ *     MPIMAIJ         = S_(MATMPIMAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":6
+ *     SAME            = S_(MATSAME)
+ *     MAIJ            = S_(MATMAIJ)
+ *     SEQMAIJ         = S_(MATSEQMAIJ)             # <<<<<<<<<<<<<<
+ *     MPIMAIJ         = S_(MATMPIMAIJ)
+ *     IS              = S_(MATIS)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQMAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQMAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":7
+ *     MAIJ            = S_(MATMAIJ)
+ *     SEQMAIJ         = S_(MATSEQMAIJ)
+ *     MPIMAIJ         = S_(MATMPIMAIJ)             # <<<<<<<<<<<<<<
+ *     IS              = S_(MATIS)
+ *     AIJ             = S_(MATAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIMAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIMAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":8
+ *     SEQMAIJ         = S_(MATSEQMAIJ)
+ *     MPIMAIJ         = S_(MATMPIMAIJ)
+ *     IS              = S_(MATIS)             # <<<<<<<<<<<<<<
+ *     AIJ             = S_(MATAIJ)
+ *     SEQAIJ          = S_(MATSEQAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATIS); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IS, __pyx_t_8) < 0) __PYX_ERR(33, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":9
+ *     MPIMAIJ         = S_(MATMPIMAIJ)
+ *     IS              = S_(MATIS)
+ *     AIJ             = S_(MATAIJ)             # <<<<<<<<<<<<<<
+ *     SEQAIJ          = S_(MATSEQAIJ)
+ *     MPIAIJ          = S_(MATMPIAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJ, __pyx_t_8) < 0) __PYX_ERR(33, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":10
+ *     IS              = S_(MATIS)
+ *     AIJ             = S_(MATAIJ)
+ *     SEQAIJ          = S_(MATSEQAIJ)             # <<<<<<<<<<<<<<
+ *     MPIAIJ          = S_(MATMPIAIJ)
+ *     AIJCRL          = S_(MATAIJCRL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":11
+ *     AIJ             = S_(MATAIJ)
+ *     SEQAIJ          = S_(MATSEQAIJ)
+ *     MPIAIJ          = S_(MATMPIAIJ)             # <<<<<<<<<<<<<<
+ *     AIJCRL          = S_(MATAIJCRL)
+ *     SEQAIJCRL       = S_(MATSEQAIJCRL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":12
+ *     SEQAIJ          = S_(MATSEQAIJ)
+ *     MPIAIJ          = S_(MATMPIAIJ)
+ *     AIJCRL          = S_(MATAIJCRL)             # <<<<<<<<<<<<<<
+ *     SEQAIJCRL       = S_(MATSEQAIJCRL)
+ *     MPIAIJCRL       = S_(MATMPIAIJCRL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCRL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJCRL, __pyx_t_8) < 0) __PYX_ERR(33, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":13
+ *     MPIAIJ          = S_(MATMPIAIJ)
+ *     AIJCRL          = S_(MATAIJCRL)
+ *     SEQAIJCRL       = S_(MATSEQAIJCRL)             # <<<<<<<<<<<<<<
+ *     MPIAIJCRL       = S_(MATMPIAIJCRL)
+ *     AIJCUSP         = S_(MATAIJCUSP)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCRL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJCRL, __pyx_t_8) < 0) __PYX_ERR(33, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":14
+ *     AIJCRL          = S_(MATAIJCRL)
+ *     SEQAIJCRL       = S_(MATSEQAIJCRL)
+ *     MPIAIJCRL       = S_(MATMPIAIJCRL)             # <<<<<<<<<<<<<<
+ *     AIJCUSP         = S_(MATAIJCUSP)
+ *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCRL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJCRL, __pyx_t_8) < 0) __PYX_ERR(33, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":15
+ *     SEQAIJCRL       = S_(MATSEQAIJCRL)
+ *     MPIAIJCRL       = S_(MATMPIAIJCRL)
+ *     AIJCUSP         = S_(MATAIJCUSP)             # <<<<<<<<<<<<<<
+ *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
+ *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJCUSP, __pyx_t_8) < 0) __PYX_ERR(33, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":16
+ *     MPIAIJCRL       = S_(MATMPIAIJCRL)
+ *     AIJCUSP         = S_(MATAIJCUSP)
+ *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)             # <<<<<<<<<<<<<<
+ *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
+ *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJCUSP, __pyx_t_8) < 0) __PYX_ERR(33, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":17
+ *     AIJCUSP         = S_(MATAIJCUSP)
+ *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
+ *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)             # <<<<<<<<<<<<<<
+ *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
+ *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJCUSP, __pyx_t_8) < 0) __PYX_ERR(33, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":18
+ *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
+ *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
+ *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)             # <<<<<<<<<<<<<<
+ *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
+ *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCUSPARSE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJCUSPARSE, __pyx_t_8) < 0) __PYX_ERR(33, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":19
+ *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
+ *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
+ *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)             # <<<<<<<<<<<<<<
+ *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
+ *     AIJVIENNACL     = S_(MATAIJVIENNACL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCUSPARSE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJCUSPARSE, __pyx_t_8) < 0) __PYX_ERR(33, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":20
+ *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
+ *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
+ *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)             # <<<<<<<<<<<<<<
+ *     AIJVIENNACL     = S_(MATAIJVIENNACL)
+ *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCUSPARSE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJCUSPARSE, __pyx_t_8) < 0) __PYX_ERR(33, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":21
+ *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
+ *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
+ *     AIJVIENNACL     = S_(MATAIJVIENNACL)             # <<<<<<<<<<<<<<
+ *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
+ *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJVIENNACL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJVIENNACL, __pyx_t_8) < 0) __PYX_ERR(33, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":22
+ *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
+ *     AIJVIENNACL     = S_(MATAIJVIENNACL)
+ *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)             # <<<<<<<<<<<<<<
+ *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
+ *     AIJPERM         = S_(MATAIJPERM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJVIENNACL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJVIENNACL, __pyx_t_8) < 0) __PYX_ERR(33, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":23
+ *     AIJVIENNACL     = S_(MATAIJVIENNACL)
+ *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
+ *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)             # <<<<<<<<<<<<<<
+ *     AIJPERM         = S_(MATAIJPERM)
+ *     SEQAIJPERM      = S_(MATSEQAIJPERM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJVIENNACL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJVIENNACL, __pyx_t_8) < 0) __PYX_ERR(33, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":24
+ *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
+ *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
+ *     AIJPERM         = S_(MATAIJPERM)             # <<<<<<<<<<<<<<
+ *     SEQAIJPERM      = S_(MATSEQAIJPERM)
+ *     MPIAIJPERM      = S_(MATMPIAIJPERM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJPERM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJPERM, __pyx_t_8) < 0) __PYX_ERR(33, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":25
+ *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
+ *     AIJPERM         = S_(MATAIJPERM)
+ *     SEQAIJPERM      = S_(MATSEQAIJPERM)             # <<<<<<<<<<<<<<
+ *     MPIAIJPERM      = S_(MATMPIAIJPERM)
+ *     SHELL           = S_(MATSHELL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJPERM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJPERM, __pyx_t_8) < 0) __PYX_ERR(33, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":26
+ *     AIJPERM         = S_(MATAIJPERM)
+ *     SEQAIJPERM      = S_(MATSEQAIJPERM)
+ *     MPIAIJPERM      = S_(MATMPIAIJPERM)             # <<<<<<<<<<<<<<
+ *     SHELL           = S_(MATSHELL)
+ *     DENSE           = S_(MATDENSE)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJPERM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJPERM, __pyx_t_8) < 0) __PYX_ERR(33, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":27
+ *     SEQAIJPERM      = S_(MATSEQAIJPERM)
+ *     MPIAIJPERM      = S_(MATMPIAIJPERM)
+ *     SHELL           = S_(MATSHELL)             # <<<<<<<<<<<<<<
+ *     DENSE           = S_(MATDENSE)
+ *     SEQDENSE        = S_(MATSEQDENSE)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSHELL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) __PYX_ERR(33, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":28
+ *     MPIAIJPERM      = S_(MATMPIAIJPERM)
+ *     SHELL           = S_(MATSHELL)
+ *     DENSE           = S_(MATDENSE)             # <<<<<<<<<<<<<<
+ *     SEQDENSE        = S_(MATSEQDENSE)
+ *     MPIDENSE        = S_(MATMPIDENSE)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATDENSE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DENSE, __pyx_t_8) < 0) __PYX_ERR(33, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":29
+ *     SHELL           = S_(MATSHELL)
+ *     DENSE           = S_(MATDENSE)
+ *     SEQDENSE        = S_(MATSEQDENSE)             # <<<<<<<<<<<<<<
+ *     MPIDENSE        = S_(MATMPIDENSE)
+ *     ELEMENTAL       = S_(MATELEMENTAL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQDENSE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQDENSE, __pyx_t_8) < 0) __PYX_ERR(33, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":30
+ *     DENSE           = S_(MATDENSE)
+ *     SEQDENSE        = S_(MATSEQDENSE)
+ *     MPIDENSE        = S_(MATMPIDENSE)             # <<<<<<<<<<<<<<
+ *     ELEMENTAL       = S_(MATELEMENTAL)
+ *     BAIJ            = S_(MATBAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIDENSE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIDENSE, __pyx_t_8) < 0) __PYX_ERR(33, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":31
+ *     SEQDENSE        = S_(MATSEQDENSE)
+ *     MPIDENSE        = S_(MATMPIDENSE)
+ *     ELEMENTAL       = S_(MATELEMENTAL)             # <<<<<<<<<<<<<<
+ *     BAIJ            = S_(MATBAIJ)
+ *     SEQBAIJ         = S_(MATSEQBAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATELEMENTAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ELEMENTAL, __pyx_t_8) < 0) __PYX_ERR(33, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":32
+ *     MPIDENSE        = S_(MATMPIDENSE)
+ *     ELEMENTAL       = S_(MATELEMENTAL)
+ *     BAIJ            = S_(MATBAIJ)             # <<<<<<<<<<<<<<
+ *     SEQBAIJ         = S_(MATSEQBAIJ)
+ *     MPIBAIJ         = S_(MATMPIBAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATBAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":33
+ *     ELEMENTAL       = S_(MATELEMENTAL)
+ *     BAIJ            = S_(MATBAIJ)
+ *     SEQBAIJ         = S_(MATSEQBAIJ)             # <<<<<<<<<<<<<<
+ *     MPIBAIJ         = S_(MATMPIBAIJ)
+ *     MPIADJ          = S_(MATMPIADJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQBAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQBAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":34
+ *     BAIJ            = S_(MATBAIJ)
+ *     SEQBAIJ         = S_(MATSEQBAIJ)
+ *     MPIBAIJ         = S_(MATMPIBAIJ)             # <<<<<<<<<<<<<<
+ *     MPIADJ          = S_(MATMPIADJ)
+ *     SBAIJ           = S_(MATSBAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIBAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIBAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":35
+ *     SEQBAIJ         = S_(MATSEQBAIJ)
+ *     MPIBAIJ         = S_(MATMPIBAIJ)
+ *     MPIADJ          = S_(MATMPIADJ)             # <<<<<<<<<<<<<<
+ *     SBAIJ           = S_(MATSBAIJ)
+ *     SEQSBAIJ        = S_(MATSEQSBAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIADJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIADJ, __pyx_t_8) < 0) __PYX_ERR(33, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":36
+ *     MPIBAIJ         = S_(MATMPIBAIJ)
+ *     MPIADJ          = S_(MATMPIADJ)
+ *     SBAIJ           = S_(MATSBAIJ)             # <<<<<<<<<<<<<<
+ *     SEQSBAIJ        = S_(MATSEQSBAIJ)
+ *     MPISBAIJ        = S_(MATMPISBAIJ)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSBAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SBAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":37
+ *     MPIADJ          = S_(MATMPIADJ)
+ *     SBAIJ           = S_(MATSBAIJ)
+ *     SEQSBAIJ        = S_(MATSEQSBAIJ)             # <<<<<<<<<<<<<<
+ *     MPISBAIJ        = S_(MATMPISBAIJ)
+ *     SEQBSTRM        = S_(MATSEQBSTRM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQSBAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQSBAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":38
+ *     SBAIJ           = S_(MATSBAIJ)
+ *     SEQSBAIJ        = S_(MATSEQSBAIJ)
+ *     MPISBAIJ        = S_(MATMPISBAIJ)             # <<<<<<<<<<<<<<
+ *     SEQBSTRM        = S_(MATSEQBSTRM)
+ *     MPIBSTRM        = S_(MATMPIBSTRM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPISBAIJ); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPISBAIJ, __pyx_t_8) < 0) __PYX_ERR(33, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":39
+ *     SEQSBAIJ        = S_(MATSEQSBAIJ)
+ *     MPISBAIJ        = S_(MATMPISBAIJ)
+ *     SEQBSTRM        = S_(MATSEQBSTRM)             # <<<<<<<<<<<<<<
+ *     MPIBSTRM        = S_(MATMPIBSTRM)
+ *     BSTRM           = S_(MATBSTRM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQBSTRM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQBSTRM, __pyx_t_8) < 0) __PYX_ERR(33, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":40
+ *     MPISBAIJ        = S_(MATMPISBAIJ)
+ *     SEQBSTRM        = S_(MATSEQBSTRM)
+ *     MPIBSTRM        = S_(MATMPIBSTRM)             # <<<<<<<<<<<<<<
+ *     BSTRM           = S_(MATBSTRM)
+ *     SEQSBSTRM       = S_(MATSEQSBSTRM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIBSTRM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIBSTRM, __pyx_t_8) < 0) __PYX_ERR(33, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":41
+ *     SEQBSTRM        = S_(MATSEQBSTRM)
+ *     MPIBSTRM        = S_(MATMPIBSTRM)
+ *     BSTRM           = S_(MATBSTRM)             # <<<<<<<<<<<<<<
+ *     SEQSBSTRM       = S_(MATSEQSBSTRM)
+ *     MPISBSTRM       = S_(MATMPISBSTRM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATBSTRM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BSTRM, __pyx_t_8) < 0) __PYX_ERR(33, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":42
+ *     MPIBSTRM        = S_(MATMPIBSTRM)
+ *     BSTRM           = S_(MATBSTRM)
+ *     SEQSBSTRM       = S_(MATSEQSBSTRM)             # <<<<<<<<<<<<<<
+ *     MPISBSTRM       = S_(MATMPISBSTRM)
+ *     SBSTRM          = S_(MATSBSTRM)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQSBSTRM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQSBSTRM, __pyx_t_8) < 0) __PYX_ERR(33, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":43
+ *     BSTRM           = S_(MATBSTRM)
+ *     SEQSBSTRM       = S_(MATSEQSBSTRM)
+ *     MPISBSTRM       = S_(MATMPISBSTRM)             # <<<<<<<<<<<<<<
+ *     SBSTRM          = S_(MATSBSTRM)
+ *     DAAD            = S_(MATDAAD)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPISBSTRM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPISBSTRM, __pyx_t_8) < 0) __PYX_ERR(33, 43, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":44
+ *     SEQSBSTRM       = S_(MATSEQSBSTRM)
+ *     MPISBSTRM       = S_(MATMPISBSTRM)
+ *     SBSTRM          = S_(MATSBSTRM)             # <<<<<<<<<<<<<<
+ *     DAAD            = S_(MATDAAD)
+ *     MFFD            = S_(MATMFFD)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSBSTRM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SBSTRM, __pyx_t_8) < 0) __PYX_ERR(33, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":45
+ *     MPISBSTRM       = S_(MATMPISBSTRM)
+ *     SBSTRM          = S_(MATSBSTRM)
+ *     DAAD            = S_(MATDAAD)             # <<<<<<<<<<<<<<
+ *     MFFD            = S_(MATMFFD)
+ *     NORMAL          = S_(MATNORMAL)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATDAAD); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAAD, __pyx_t_8) < 0) __PYX_ERR(33, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":46
+ *     SBSTRM          = S_(MATSBSTRM)
+ *     DAAD            = S_(MATDAAD)
+ *     MFFD            = S_(MATMFFD)             # <<<<<<<<<<<<<<
+ *     NORMAL          = S_(MATNORMAL)
+ *     NORMALHERMITIAN = S_(MATNORMALHERMITIAN)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMFFD); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MFFD, __pyx_t_8) < 0) __PYX_ERR(33, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":47
+ *     DAAD            = S_(MATDAAD)
+ *     MFFD            = S_(MATMFFD)
+ *     NORMAL          = S_(MATNORMAL)             # <<<<<<<<<<<<<<
+ *     NORMALHERMITIAN = S_(MATNORMALHERMITIAN)
+ *     LRC             = S_(MATLRC)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATNORMAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORMAL, __pyx_t_8) < 0) __PYX_ERR(33, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":48
+ *     MFFD            = S_(MATMFFD)
+ *     NORMAL          = S_(MATNORMAL)
+ *     NORMALHERMITIAN = S_(MATNORMALHERMITIAN)             # <<<<<<<<<<<<<<
+ *     LRC             = S_(MATLRC)
+ *     SCATTER         = S_(MATSCATTER)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATNORMALHERMITIAN); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORMALHERMITIAN, __pyx_t_8) < 0) __PYX_ERR(33, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":49
+ *     NORMAL          = S_(MATNORMAL)
+ *     NORMALHERMITIAN = S_(MATNORMALHERMITIAN)
+ *     LRC             = S_(MATLRC)             # <<<<<<<<<<<<<<
+ *     SCATTER         = S_(MATSCATTER)
+ *     BLOCKMAT        = S_(MATBLOCKMAT)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATLRC); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LRC, __pyx_t_8) < 0) __PYX_ERR(33, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":50
+ *     NORMALHERMITIAN = S_(MATNORMALHERMITIAN)
+ *     LRC             = S_(MATLRC)
+ *     SCATTER         = S_(MATSCATTER)             # <<<<<<<<<<<<<<
+ *     BLOCKMAT        = S_(MATBLOCKMAT)
+ *     COMPOSITE       = S_(MATCOMPOSITE)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSCATTER); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER, __pyx_t_8) < 0) __PYX_ERR(33, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":51
+ *     LRC             = S_(MATLRC)
+ *     SCATTER         = S_(MATSCATTER)
+ *     BLOCKMAT        = S_(MATBLOCKMAT)             # <<<<<<<<<<<<<<
+ *     COMPOSITE       = S_(MATCOMPOSITE)
+ *     FFT             = S_(MATFFT)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATBLOCKMAT); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BLOCKMAT, __pyx_t_8) < 0) __PYX_ERR(33, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":52
+ *     SCATTER         = S_(MATSCATTER)
+ *     BLOCKMAT        = S_(MATBLOCKMAT)
+ *     COMPOSITE       = S_(MATCOMPOSITE)             # <<<<<<<<<<<<<<
+ *     FFT             = S_(MATFFT)
+ *     FFTW            = S_(MATFFTW)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATCOMPOSITE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSITE, __pyx_t_8) < 0) __PYX_ERR(33, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":53
+ *     BLOCKMAT        = S_(MATBLOCKMAT)
+ *     COMPOSITE       = S_(MATCOMPOSITE)
+ *     FFT             = S_(MATFFT)             # <<<<<<<<<<<<<<
+ *     FFTW            = S_(MATFFTW)
+ *     SEQCUFFT        = S_(MATSEQCUFFT)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATFFT); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FFT, __pyx_t_8) < 0) __PYX_ERR(33, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":54
+ *     COMPOSITE       = S_(MATCOMPOSITE)
+ *     FFT             = S_(MATFFT)
+ *     FFTW            = S_(MATFFTW)             # <<<<<<<<<<<<<<
+ *     SEQCUFFT        = S_(MATSEQCUFFT)
+ *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATFFTW); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FFTW, __pyx_t_8) < 0) __PYX_ERR(33, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":55
+ *     FFT             = S_(MATFFT)
+ *     FFTW            = S_(MATFFTW)
+ *     SEQCUFFT        = S_(MATSEQCUFFT)             # <<<<<<<<<<<<<<
+ *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)
+ *     PYTHON          = S_(MATPYTHON)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQCUFFT); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQCUFFT, __pyx_t_8) < 0) __PYX_ERR(33, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":56
+ *     FFTW            = S_(MATFFTW)
+ *     SEQCUFFT        = S_(MATSEQCUFFT)
+ *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)             # <<<<<<<<<<<<<<
+ *     PYTHON          = S_(MATPYTHON)
+ *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATTRANSPOSEMAT); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TRANSPOSEMAT, __pyx_t_8) < 0) __PYX_ERR(33, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":57
+ *     SEQCUFFT        = S_(MATSEQCUFFT)
+ *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)
+ *     PYTHON          = S_(MATPYTHON)             # <<<<<<<<<<<<<<
+ *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)
+ *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATPYTHON); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) __PYX_ERR(33, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":58
+ *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)
+ *     PYTHON          = S_(MATPYTHON)
+ *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)             # <<<<<<<<<<<<<<
+ *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)
+ *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSCHURCOMPLEMENT); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCHURCOMPLEMENT, __pyx_t_8) < 0) __PYX_ERR(33, 58, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":59
+ *     PYTHON          = S_(MATPYTHON)
+ *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)
+ *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)             # <<<<<<<<<<<<<<
+ *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)
+ *     SUBMATRIX       = S_(MATSUBMATRIX)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATHYPRESTRUCT); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HYPRESTRUCT, __pyx_t_8) < 0) __PYX_ERR(33, 59, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":60
+ *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)
+ *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)
+ *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)             # <<<<<<<<<<<<<<
+ *     SUBMATRIX       = S_(MATSUBMATRIX)
+ *     LOCALREF        = S_(MATLOCALREF)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATHYPRESSTRUCT); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HYPRESSTRUCT, __pyx_t_8) < 0) __PYX_ERR(33, 60, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":61
+ *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)
+ *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)
+ *     SUBMATRIX       = S_(MATSUBMATRIX)             # <<<<<<<<<<<<<<
+ *     LOCALREF        = S_(MATLOCALREF)
+ *     NEST            = S_(MATNEST)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSUBMATRIX); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBMATRIX, __pyx_t_8) < 0) __PYX_ERR(33, 61, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":62
+ *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)
+ *     SUBMATRIX       = S_(MATSUBMATRIX)
+ *     LOCALREF        = S_(MATLOCALREF)             # <<<<<<<<<<<<<<
+ *     NEST            = S_(MATNEST)
+ *     PREALLOCATOR    = S_(MATPREALLOCATOR)
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATLOCALREF); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCALREF, __pyx_t_8) < 0) __PYX_ERR(33, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":63
+ *     SUBMATRIX       = S_(MATSUBMATRIX)
+ *     LOCALREF        = S_(MATLOCALREF)
+ *     NEST            = S_(MATNEST)             # <<<<<<<<<<<<<<
+ *     PREALLOCATOR    = S_(MATPREALLOCATOR)
+ * 
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATNEST); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEST, __pyx_t_8) < 0) __PYX_ERR(33, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":64
+ *     LOCALREF        = S_(MATLOCALREF)
+ *     NEST            = S_(MATNEST)
+ *     PREALLOCATOR    = S_(MATPREALLOCATOR)             # <<<<<<<<<<<<<<
+ * 
+ * class MatOption(object):
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATPREALLOCATOR); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PREALLOCATOR, __pyx_t_8) < 0) __PYX_ERR(33, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":3
+ * # --------------------------------------------------------------------
  * 
+ * class MatType(object):             # <<<<<<<<<<<<<<
+ *     SAME            = S_(MATSAME)
+ *     MAIJ            = S_(MATMAIJ)
+ */
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatType, __pyx_t_8) < 0) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/Mat.pyx":66
+ *     PREALLOCATOR    = S_(MATPREALLOCATOR)
  * 
- * class GLMapType(object):             # <<<<<<<<<<<<<<
- *     MASK = PETSC_IS_GTOLM_MASK
- *     DROP = PETSC_IS_GTOLM_DROP
+ * class MatOption(object):             # <<<<<<<<<<<<<<
+ *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
+ *     ROW_ORIENTED                = MAT_ROW_ORIENTED
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 66, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 66, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_GLMapType, __pyx_n_s_GLMapType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatOption, __pyx_n_s_MatOption, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 66, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/IS.pyx":342
- * 
- * class GLMapType(object):
- *     MASK = PETSC_IS_GTOLM_MASK             # <<<<<<<<<<<<<<
- *     DROP = PETSC_IS_GTOLM_DROP
+  /* "PETSc/Mat.pyx":67
  * 
+ * class MatOption(object):
+ *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR             # <<<<<<<<<<<<<<
+ *     ROW_ORIENTED                = MAT_ROW_ORIENTED
+ *     SYMMETRIC                   = MAT_SYMMETRIC
  */
-  __pyx_t_8 = PyInt_FromLong(IS_GTOLM_MASK); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_UNUSED_NONZERO_LOCATION_ERR); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 67, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MASK, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UNUSED_NONZERO_LOCATION_ERR, __pyx_t_8) < 0) __PYX_ERR(33, 67, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/IS.pyx":343
- * class GLMapType(object):
- *     MASK = PETSC_IS_GTOLM_MASK
- *     DROP = PETSC_IS_GTOLM_DROP             # <<<<<<<<<<<<<<
- * 
- * 
+  /* "PETSc/Mat.pyx":68
+ * class MatOption(object):
+ *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
+ *     ROW_ORIENTED                = MAT_ROW_ORIENTED             # <<<<<<<<<<<<<<
+ *     SYMMETRIC                   = MAT_SYMMETRIC
+ *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
  */
-  __pyx_t_8 = PyInt_FromLong(IS_GTOLM_DROP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_ROW_ORIENTED); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DROP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ROW_ORIENTED, __pyx_t_8) < 0) __PYX_ERR(33, 68, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/IS.pyx":341
- * 
- * 
- * class GLMapType(object):             # <<<<<<<<<<<<<<
- *     MASK = PETSC_IS_GTOLM_MASK
- *     DROP = PETSC_IS_GTOLM_DROP
+  /* "PETSc/Mat.pyx":69
+ *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
+ *     ROW_ORIENTED                = MAT_ROW_ORIENTED
+ *     SYMMETRIC                   = MAT_SYMMETRIC             # <<<<<<<<<<<<<<
+ *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
+ *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_GLMapType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_SYMMETRIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_GLMapType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC, __pyx_t_8) < 0) __PYX_ERR(33, 69, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/IS.pyx":350
- * cdef class LGMap(Object):
- * 
- *     MapType = GLMapType             # <<<<<<<<<<<<<<
- * 
- *     #
+  /* "PETSc/Mat.pyx":70
+ *     ROW_ORIENTED                = MAT_ROW_ORIENTED
+ *     SYMMETRIC                   = MAT_SYMMETRIC
+ *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC             # <<<<<<<<<<<<<<
+ *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS
+ *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_GLMapType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap->tp_dict, __pyx_n_s_MapType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_LGMap);
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_STRUCTURALLY_SYMMETRIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STRUCTURALLY_SYMMETRIC, __pyx_t_8) < 0) __PYX_ERR(33, 70, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/IS.pyx":554
- * # --------------------------------------------------------------------
- * 
- * del ISType             # <<<<<<<<<<<<<<
- * del GLMapType
- * 
+  /* "PETSc/Mat.pyx":71
+ *     SYMMETRIC                   = MAT_SYMMETRIC
+ *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
+ *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS             # <<<<<<<<<<<<<<
+ *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES
+ *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ISType) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_NEW_DIAGONALS); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEW_DIAGONALS, __pyx_t_8) < 0) __PYX_ERR(33, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/IS.pyx":555
- * 
- * del ISType
- * del GLMapType             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
+  /* "PETSc/Mat.pyx":72
+ *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
+ *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS
+ *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES             # <<<<<<<<<<<<<<
+ *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE
+ *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_GLMapType) < 0) {__pyx_filename = __pyx_f[29]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_IGNORE_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_OFF_PROC_ENTRIES, __pyx_t_8) < 0) __PYX_ERR(33, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class VecType(object):             # <<<<<<<<<<<<<<
- *     SEQ        = S_(VECSEQ)
- *     MPI        = S_(VECMPI)
+  /* "PETSc/Mat.pyx":73
+ *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS
+ *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES
+ *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE             # <<<<<<<<<<<<<<
+ *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN
+ *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_VecType, __pyx_n_s_VecType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_USE_HASH_TABLE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 73, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USE_HASH_TABLE, __pyx_t_8) < 0) __PYX_ERR(33, 73, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":4
- * 
- * class VecType(object):
- *     SEQ        = S_(VECSEQ)             # <<<<<<<<<<<<<<
- *     MPI        = S_(VECMPI)
- *     STANDARD   = S_(VECSTANDARD)
+  /* "PETSc/Mat.pyx":74
+ *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES
+ *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE
+ *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+ *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES
+ *     USE_INODES                  = MAT_USE_INODES
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_KEEP_NONZERO_PATTERN); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KEEP_NONZERO_PATTERN, __pyx_t_8) < 0) __PYX_ERR(33, 74, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":5
- * class VecType(object):
- *     SEQ        = S_(VECSEQ)
- *     MPI        = S_(VECMPI)             # <<<<<<<<<<<<<<
- *     STANDARD   = S_(VECSTANDARD)
- *     SHARED     = S_(VECSHARED)
+  /* "PETSc/Mat.pyx":75
+ *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE
+ *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN
+ *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES             # <<<<<<<<<<<<<<
+ *     USE_INODES                  = MAT_USE_INODES
+ *     HERMITIAN                   = MAT_HERMITIAN
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECMPI); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_IGNORE_ZERO_ENTRIES); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPI, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_ZERO_ENTRIES, __pyx_t_8) < 0) __PYX_ERR(33, 75, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":6
- *     SEQ        = S_(VECSEQ)
- *     MPI        = S_(VECMPI)
- *     STANDARD   = S_(VECSTANDARD)             # <<<<<<<<<<<<<<
- *     SHARED     = S_(VECSHARED)
- *     SEQCUSP    = S_(VECSEQCUSP)
+  /* "PETSc/Mat.pyx":76
+ *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN
+ *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES
+ *     USE_INODES                  = MAT_USE_INODES             # <<<<<<<<<<<<<<
+ *     HERMITIAN                   = MAT_HERMITIAN
+ *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSTANDARD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_USE_INODES); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 76, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STANDARD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USE_INODES, __pyx_t_8) < 0) __PYX_ERR(33, 76, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":7
- *     MPI        = S_(VECMPI)
- *     STANDARD   = S_(VECSTANDARD)
- *     SHARED     = S_(VECSHARED)             # <<<<<<<<<<<<<<
- *     SEQCUSP    = S_(VECSEQCUSP)
- *     MPICUSP    = S_(VECMPICUSP)
+  /* "PETSc/Mat.pyx":77
+ *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES
+ *     USE_INODES                  = MAT_USE_INODES
+ *     HERMITIAN                   = MAT_HERMITIAN             # <<<<<<<<<<<<<<
+ *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL
+ *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSHARED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_HERMITIAN); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHARED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HERMITIAN, __pyx_t_8) < 0) __PYX_ERR(33, 77, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":8
- *     STANDARD   = S_(VECSTANDARD)
- *     SHARED     = S_(VECSHARED)
- *     SEQCUSP    = S_(VECSEQCUSP)             # <<<<<<<<<<<<<<
- *     MPICUSP    = S_(VECMPICUSP)
- *     CUSP       = S_(VECCUSP)
+  /* "PETSc/Mat.pyx":78
+ *     USE_INODES                  = MAT_USE_INODES
+ *     HERMITIAN                   = MAT_HERMITIAN
+ *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL             # <<<<<<<<<<<<<<
+ *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
+ *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQCUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_SYMMETRY_ETERNAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 78, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQCUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRY_ETERNAL, __pyx_t_8) < 0) __PYX_ERR(33, 78, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":9
- *     SHARED     = S_(VECSHARED)
- *     SEQCUSP    = S_(VECSEQCUSP)
- *     MPICUSP    = S_(VECMPICUSP)             # <<<<<<<<<<<<<<
- *     CUSP       = S_(VECCUSP)
- *     SEQVIENNACL= S_(VECSEQVIENNACL)
+  /* "PETSc/Mat.pyx":79
+ *     HERMITIAN                   = MAT_HERMITIAN
+ *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL
+ *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR             # <<<<<<<<<<<<<<
+ *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR
+ *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECMPICUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_NEW_NONZERO_LOCATION_ERR); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 79, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPICUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEW_NONZERO_LOCATION_ERR, __pyx_t_8) < 0) __PYX_ERR(33, 79, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":10
- *     SEQCUSP    = S_(VECSEQCUSP)
- *     MPICUSP    = S_(VECMPICUSP)
- *     CUSP       = S_(VECCUSP)             # <<<<<<<<<<<<<<
- *     SEQVIENNACL= S_(VECSEQVIENNACL)
- *     MPIVIENNACL= S_(VECMPIVIENNACL)
+  /* "PETSc/Mat.pyx":80
+ *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL
+ *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
+ *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR             # <<<<<<<<<<<<<<
+ *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR
+ *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECCUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_IGNORE_LOWER_TRIANGULAR); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 80, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_LOWER_TRIANGULAR, __pyx_t_8) < 0) __PYX_ERR(33, 80, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":11
- *     MPICUSP    = S_(VECMPICUSP)
- *     CUSP       = S_(VECCUSP)
- *     SEQVIENNACL= S_(VECSEQVIENNACL)             # <<<<<<<<<<<<<<
- *     MPIVIENNACL= S_(VECMPIVIENNACL)
- *     VIENNACL   = S_(VECVIENNACL)
+  /* "PETSc/Mat.pyx":81
+ *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
+ *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR
+ *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR             # <<<<<<<<<<<<<<
+ *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
+ *     SPD                         = MAT_SPD
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQVIENNACL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_ERROR_LOWER_TRIANGULAR); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQVIENNACL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ERROR_LOWER_TRIANGULAR, __pyx_t_8) < 0) __PYX_ERR(33, 81, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":12
- *     CUSP       = S_(VECCUSP)
- *     SEQVIENNACL= S_(VECSEQVIENNACL)
- *     MPIVIENNACL= S_(VECMPIVIENNACL)             # <<<<<<<<<<<<<<
- *     VIENNACL   = S_(VECVIENNACL)
- *     NEST       = S_(VECNEST)
+  /* "PETSc/Mat.pyx":82
+ *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR
+ *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR
+ *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR             # <<<<<<<<<<<<<<
+ *     SPD                         = MAT_SPD
+ *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECMPIVIENNACL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_GETROW_UPPERTRIANGULAR); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIVIENNACL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GETROW_UPPERTRIANGULAR, __pyx_t_8) < 0) __PYX_ERR(33, 82, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":13
- *     SEQVIENNACL= S_(VECSEQVIENNACL)
- *     MPIVIENNACL= S_(VECMPIVIENNACL)
- *     VIENNACL   = S_(VECVIENNACL)             # <<<<<<<<<<<<<<
- *     NEST       = S_(VECNEST)
- *     SEQPTHREAD = S_(VECSEQPTHREAD)
+  /* "PETSc/Mat.pyx":83
+ *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR
+ *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
+ *     SPD                         = MAT_SPD             # <<<<<<<<<<<<<<
+ *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
+ *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECVIENNACL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_SPD); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 83, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VIENNACL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPD, __pyx_t_8) < 0) __PYX_ERR(33, 83, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":14
- *     MPIVIENNACL= S_(VECMPIVIENNACL)
- *     VIENNACL   = S_(VECVIENNACL)
- *     NEST       = S_(VECNEST)             # <<<<<<<<<<<<<<
- *     SEQPTHREAD = S_(VECSEQPTHREAD)
- *     MPIPTHREAD = S_(VECMPIPTHREAD)
+  /* "PETSc/Mat.pyx":84
+ *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
+ *     SPD                         = MAT_SPD
+ *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS             # <<<<<<<<<<<<<<
+ *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES
+ *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECNEST); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_NO_OFF_PROC_ZERO_ROWS); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 84, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEST, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NO_OFF_PROC_ZERO_ROWS, __pyx_t_8) < 0) __PYX_ERR(33, 84, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":15
- *     VIENNACL   = S_(VECVIENNACL)
- *     NEST       = S_(VECNEST)
- *     SEQPTHREAD = S_(VECSEQPTHREAD)             # <<<<<<<<<<<<<<
- *     MPIPTHREAD = S_(VECMPIPTHREAD)
- *     PTHREAD    = S_(VECPTHREAD)
+  /* "PETSc/Mat.pyx":85
+ *     SPD                         = MAT_SPD
+ *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
+ *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES             # <<<<<<<<<<<<<<
+ *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
+ *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQPTHREAD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_NO_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQPTHREAD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NO_OFF_PROC_ENTRIES, __pyx_t_8) < 0) __PYX_ERR(33, 85, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":16
- *     NEST       = S_(VECNEST)
- *     SEQPTHREAD = S_(VECSEQPTHREAD)
- *     MPIPTHREAD = S_(VECMPIPTHREAD)             # <<<<<<<<<<<<<<
- *     PTHREAD    = S_(VECPTHREAD)
+  /* "PETSc/Mat.pyx":86
+ *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
+ *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES
+ *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS             # <<<<<<<<<<<<<<
+ *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
+ *     SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_NEW_NONZERO_LOCATIONS); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEW_NONZERO_LOCATIONS, __pyx_t_8) < 0) __PYX_ERR(33, 86, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/Mat.pyx":87
+ *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES
+ *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
+ *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR             # <<<<<<<<<<<<<<
+ *     SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES
  * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECMPIPTHREAD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_NEW_NONZERO_ALLOCATION_ERR); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 87, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIPTHREAD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEW_NONZERO_ALLOCATION_ERR, __pyx_t_8) < 0) __PYX_ERR(33, 87, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":17
- *     SEQPTHREAD = S_(VECSEQPTHREAD)
- *     MPIPTHREAD = S_(VECMPIPTHREAD)
- *     PTHREAD    = S_(VECPTHREAD)             # <<<<<<<<<<<<<<
+  /* "PETSc/Mat.pyx":88
+ *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
+ *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
+ *     SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES             # <<<<<<<<<<<<<<
  * 
- * class VecOption(object):
+ * class MatAssemblyType(object):
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(VECPTHREAD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatOption(MAT_SUBSET_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PTHREAD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET_OFF_PROC_ENTRIES, __pyx_t_8) < 0) __PYX_ERR(33, 88, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":3
- * # --------------------------------------------------------------------
+  /* "PETSc/Mat.pyx":66
+ *     PREALLOCATOR    = S_(MATPREALLOCATOR)
  * 
- * class VecType(object):             # <<<<<<<<<<<<<<
- *     SEQ        = S_(VECSEQ)
- *     MPI        = S_(VECMPI)
+ * class MatOption(object):             # <<<<<<<<<<<<<<
+ *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
+ *     ROW_ORIENTED                = MAT_ROW_ORIENTED
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_VecType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatOption, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 66, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VecType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatOption, __pyx_t_8) < 0) __PYX_ERR(33, 66, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Vec.pyx":19
- *     PTHREAD    = S_(VECPTHREAD)
+  /* "PETSc/Mat.pyx":90
+ *     SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES
  * 
- * class VecOption(object):             # <<<<<<<<<<<<<<
- *     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES
- *     IGNORE_NEGATIVE_INDICES = VEC_IGNORE_NEGATIVE_INDICES
+ * class MatAssemblyType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_VecOption, __pyx_n_s_VecOption, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatAssemblyType, __pyx_n_s_MatAssemblyType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Vec.pyx":20
- * 
- * class VecOption(object):
- *     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES             # <<<<<<<<<<<<<<
- *     IGNORE_NEGATIVE_INDICES = VEC_IGNORE_NEGATIVE_INDICES
- * 
+  /* "PETSc/Mat.pyx":92
+ * class MatAssemblyType(object):
+ *     # native
+ *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
+ *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY
+ *     # aliases
  */
-  __pyx_t_8 = PyInt_FromLong(VEC_IGNORE_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatAssemblyType(MAT_FINAL_ASSEMBLY); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 92, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_OFF_PROC_ENTRIES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FINAL_ASSEMBLY, __pyx_t_8) < 0) __PYX_ERR(33, 92, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":21
- * class VecOption(object):
- *     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES
- *     IGNORE_NEGATIVE_INDICES = VEC_IGNORE_NEGATIVE_INDICES             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
+  /* "PETSc/Mat.pyx":93
+ *     # native
+ *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
+ *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY             # <<<<<<<<<<<<<<
+ *     # aliases
+ *     FINAL = FINAL_ASSEMBLY
  */
-  __pyx_t_8 = PyInt_FromLong(VEC_IGNORE_NEGATIVE_INDICES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatAssemblyType(MAT_FLUSH_ASSEMBLY); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_NEGATIVE_INDICES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FLUSH_ASSEMBLY, __pyx_t_8) < 0) __PYX_ERR(33, 93, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":19
- *     PTHREAD    = S_(VECPTHREAD)
+  /* "PETSc/Mat.pyx":95
+ *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY
+ *     # aliases
+ *     FINAL = FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
+ *     FLUSH = FLUSH_ASSEMBLY
  * 
- * class VecOption(object):             # <<<<<<<<<<<<<<
- *     IGNORE_OFF_PROC_ENTRIES = VEC_IGNORE_OFF_PROC_ENTRIES
- *     IGNORE_NEGATIVE_INDICES = VEC_IGNORE_NEGATIVE_INDICES
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_VecOption, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_FINAL_ASSEMBLY);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_FINAL_ASSEMBLY);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 95, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VecOption, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FINAL, __pyx_t_8) < 0) __PYX_ERR(33, 95, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Vec.pyx":27
- * cdef class Vec(Object):
- * 
- *     Type = VecType             # <<<<<<<<<<<<<<
- *     Option = VecOption
+  /* "PETSc/Mat.pyx":96
+ *     # aliases
+ *     FINAL = FINAL_ASSEMBLY
+ *     FLUSH = FLUSH_ASSEMBLY             # <<<<<<<<<<<<<<
  * 
+ * class MatInfoType(object):
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_VecType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Vec);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_FLUSH_ASSEMBLY);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_FLUSH_ASSEMBLY);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 96, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FLUSH, __pyx_t_8) < 0) __PYX_ERR(33, 96, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Vec.pyx":28
- * 
- *     Type = VecType
- *     Option = VecOption             # <<<<<<<<<<<<<<
+  /* "PETSc/Mat.pyx":90
+ *     SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES
  * 
- *     #
+ * class MatAssemblyType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_VecOption); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec->tp_dict, __pyx_n_s_Option, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatAssemblyType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatAssemblyType, __pyx_t_8) < 0) __PYX_ERR(33, 90, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Vec);
-
-  /* "PETSc/Vec.pyx":868
- * # --------------------------------------------------------------------
- * 
- * del VecType             # <<<<<<<<<<<<<<
- * del VecOption
- * 
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_VecType) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/Vec.pyx":869
- * 
- * del VecType
- * del VecOption             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_VecOption) < 0) {__pyx_filename = __pyx_f[30]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "PETSc/Scatter.pyx":5
- * cdef class Scatter(Object):
- * 
- *     Mode = ScatterMode             # <<<<<<<<<<<<<<
+  /* "PETSc/Mat.pyx":98
+ *     FLUSH = FLUSH_ASSEMBLY
  * 
- *     #
+ * class MatInfoType(object):             # <<<<<<<<<<<<<<
+ *     LOCAL = MAT_LOCAL
+ *     GLOBAL_MAX = MAT_GLOBAL_MAX
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ScatterMode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 98, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict, __pyx_n_s_Mode, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatInfoType, __pyx_n_s_MatInfoType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Scatter.pyx":44
+  /* "PETSc/Mat.pyx":99
  * 
- *     @classmethod
- *     def toAll(cls, Vec vec not None):             # <<<<<<<<<<<<<<
- *         cdef Scatter scatter = Scatter()
- *         cdef Vec ovec = Vec()
+ * class MatInfoType(object):
+ *     LOCAL = MAT_LOCAL             # <<<<<<<<<<<<<<
+ *     GLOBAL_MAX = MAT_GLOBAL_MAX
+ *     GLOBAL_SUM = MAT_GLOBAL_SUM
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter, __pyx_n_s_toAll); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_8 = __Pyx_PyInt_From_MatInfoType(MAT_LOCAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 99, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCAL, __pyx_t_8) < 0) __PYX_ERR(33, 99, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Scatter.pyx":43
- *         return scatter
+  /* "PETSc/Mat.pyx":100
+ * class MatInfoType(object):
+ *     LOCAL = MAT_LOCAL
+ *     GLOBAL_MAX = MAT_GLOBAL_MAX             # <<<<<<<<<<<<<<
+ *     GLOBAL_SUM = MAT_GLOBAL_SUM
  * 
- *     @classmethod             # <<<<<<<<<<<<<<
- *     def toAll(cls, Vec vec not None):
- *         cdef Scatter scatter = Scatter()
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict, __pyx_n_s_toAll, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
+  __pyx_t_8 = __Pyx_PyInt_From_MatInfoType(MAT_GLOBAL_MAX); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 100, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GLOBAL_MAX, __pyx_t_8) < 0) __PYX_ERR(33, 100, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Scatter.pyx":52
+  /* "PETSc/Mat.pyx":101
+ *     LOCAL = MAT_LOCAL
+ *     GLOBAL_MAX = MAT_GLOBAL_MAX
+ *     GLOBAL_SUM = MAT_GLOBAL_SUM             # <<<<<<<<<<<<<<
  * 
- *     @classmethod
- *     def toZero(cls, Vec vec not None):             # <<<<<<<<<<<<<<
- *         cdef Scatter scatter = Scatter()
- *         cdef Vec ovec = Vec()
+ * class MatStructure(object):
  */
-  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter, __pyx_n_s_toZero); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_8 = __Pyx_PyInt_From_MatInfoType(MAT_GLOBAL_SUM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 101, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GLOBAL_SUM, __pyx_t_8) < 0) __PYX_ERR(33, 101, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Scatter.pyx":51
- *         return (scatter, ovec)
+  /* "PETSc/Mat.pyx":98
+ *     FLUSH = FLUSH_ASSEMBLY
  * 
- *     @classmethod             # <<<<<<<<<<<<<<
- *     def toZero(cls, Vec vec not None):
- *         cdef Scatter scatter = Scatter()
+ * class MatInfoType(object):             # <<<<<<<<<<<<<<
+ *     LOCAL = MAT_LOCAL
+ *     GLOBAL_MAX = MAT_GLOBAL_MAX
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatInfoType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatInfoType, __pyx_t_8) < 0) __PYX_ERR(33, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict, __pyx_n_s_toZero, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[31]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
 
-  /* "PETSc/Mat.pyx":3
- * # --------------------------------------------------------------------
+  /* "PETSc/Mat.pyx":103
+ *     GLOBAL_SUM = MAT_GLOBAL_SUM
  * 
- * class MatType(object):             # <<<<<<<<<<<<<<
- *     SAME            = S_(MATSAME)
- *     MAIJ            = S_(MATMAIJ)
+ * class MatStructure(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatType, __pyx_n_s_MatType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatStructure, __pyx_n_s_MatStructure, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":4
- * 
- * class MatType(object):
- *     SAME            = S_(MATSAME)             # <<<<<<<<<<<<<<
- *     MAIJ            = S_(MATMAIJ)
- *     SEQMAIJ         = S_(MATSEQMAIJ)
+  /* "PETSc/Mat.pyx":105
+ * class MatStructure(object):
+ *     # native
+ *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+ *     DIFFERENT_NONZERO_PATTERN = MAT_DIFFERENT_NONZERO_PATTERN
+ *     SUBSET_NONZERO_PATTERN    = MAT_SUBSET_NONZERO_PATTERN
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSAME); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatStructure(SAME_NONZERO_PATTERN); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 105, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME_NONZERO_PATTERN, __pyx_t_8) < 0) __PYX_ERR(33, 105, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":5
- * class MatType(object):
- *     SAME            = S_(MATSAME)
- *     MAIJ            = S_(MATMAIJ)             # <<<<<<<<<<<<<<
- *     SEQMAIJ         = S_(MATSEQMAIJ)
- *     MPIMAIJ         = S_(MATMPIMAIJ)
+  /* "PETSc/Mat.pyx":106
+ *     # 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_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatStructure(DIFFERENT_NONZERO_PATTERN); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NONZERO_PATTERN, __pyx_t_8) < 0) __PYX_ERR(33, 106, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":6
- *     SAME            = S_(MATSAME)
- *     MAIJ            = S_(MATMAIJ)
- *     SEQMAIJ         = S_(MATSEQMAIJ)             # <<<<<<<<<<<<<<
- *     MPIMAIJ         = S_(MATMPIMAIJ)
- *     IS              = S_(MATIS)
+  /* "PETSc/Mat.pyx":107
+ *     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
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQMAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatStructure(SUBSET_NONZERO_PATTERN); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 107, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQMAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET_NONZERO_PATTERN, __pyx_t_8) < 0) __PYX_ERR(33, 107, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":7
- *     MAIJ            = S_(MATMAIJ)
- *     SEQMAIJ         = S_(MATSEQMAIJ)
- *     MPIMAIJ         = S_(MATMPIMAIJ)             # <<<<<<<<<<<<<<
- *     IS              = S_(MATIS)
- *     AIJ             = S_(MATAIJ)
+  /* "PETSc/Mat.pyx":109
+ *     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_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIMAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SAME_NONZERO_PATTERN);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SAME_NONZERO_PATTERN);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIMAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME, __pyx_t_8) < 0) __PYX_ERR(33, 109, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME_NZ, __pyx_t_8) < 0) __PYX_ERR(33, 109, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":8
- *     SEQMAIJ         = S_(MATSEQMAIJ)
- *     MPIMAIJ         = S_(MATMPIMAIJ)
- *     IS              = S_(MATIS)             # <<<<<<<<<<<<<<
- *     AIJ             = S_(MATAIJ)
- *     SEQAIJ          = S_(MATSEQAIJ)
+  /* "PETSc/Mat.pyx":110
+ *     # aliases
+ *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
+ *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+ *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATIS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SUBSET_NONZERO_PATTERN);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SUBSET_NONZERO_PATTERN);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET, __pyx_t_8) < 0) __PYX_ERR(33, 110, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET_NZ, __pyx_t_8) < 0) __PYX_ERR(33, 110, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":9
- *     MPIMAIJ         = S_(MATMPIMAIJ)
- *     IS              = S_(MATIS)
- *     AIJ             = S_(MATAIJ)             # <<<<<<<<<<<<<<
- *     SEQAIJ          = S_(MATSEQAIJ)
- *     SEQAIJPTHREAD   = S_(MATSEQAIJPTHREAD)
+  /* "PETSc/Mat.pyx":111
+ *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
+ *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN
+ *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+ * 
+ * class MatOrderingType(object):
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NONZERO_PATTERN);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DIFFERENT_NONZERO_PATTERN);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT, __pyx_t_8) < 0) __PYX_ERR(33, 111, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NZ, __pyx_t_8) < 0) __PYX_ERR(33, 111, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":10
- *     IS              = S_(MATIS)
- *     AIJ             = S_(MATAIJ)
- *     SEQAIJ          = S_(MATSEQAIJ)             # <<<<<<<<<<<<<<
- *     SEQAIJPTHREAD   = S_(MATSEQAIJPTHREAD)
- *     AIJPTHREAD      = S_(MATAIJPTHREAD)
+  /* "PETSc/Mat.pyx":103
+ *     GLOBAL_SUM = MAT_GLOBAL_SUM
+ * 
+ * class MatStructure(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatStructure, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatStructure, __pyx_t_8) < 0) __PYX_ERR(33, 103, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":11
- *     AIJ             = S_(MATAIJ)
- *     SEQAIJ          = S_(MATSEQAIJ)
- *     SEQAIJPTHREAD   = S_(MATSEQAIJPTHREAD)             # <<<<<<<<<<<<<<
- *     AIJPTHREAD      = S_(MATAIJPTHREAD)
- *     MPIAIJ          = S_(MATMPIAIJ)
+  /* "PETSc/Mat.pyx":113
+ *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
+ * 
+ * class MatOrderingType(object):             # <<<<<<<<<<<<<<
+ *     NATURAL     = S_(MATORDERINGNATURAL)
+ *     ND          = S_(MATORDERINGND)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJPTHREAD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJPTHREAD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatOrderingType, __pyx_n_s_MatOrderingType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":12
- *     SEQAIJ          = S_(MATSEQAIJ)
- *     SEQAIJPTHREAD   = S_(MATSEQAIJPTHREAD)
- *     AIJPTHREAD      = S_(MATAIJPTHREAD)             # <<<<<<<<<<<<<<
- *     MPIAIJ          = S_(MATMPIAIJ)
- *     AIJCRL          = S_(MATAIJCRL)
+  /* "PETSc/Mat.pyx":114
+ * 
+ * class MatOrderingType(object):
+ *     NATURAL     = S_(MATORDERINGNATURAL)             # <<<<<<<<<<<<<<
+ *     ND          = S_(MATORDERINGND)
+ *     OWD         = S_(MATORDERING1WD)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJPTHREAD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGNATURAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJPTHREAD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NATURAL, __pyx_t_8) < 0) __PYX_ERR(33, 114, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":13
- *     SEQAIJPTHREAD   = S_(MATSEQAIJPTHREAD)
- *     AIJPTHREAD      = S_(MATAIJPTHREAD)
- *     MPIAIJ          = S_(MATMPIAIJ)             # <<<<<<<<<<<<<<
- *     AIJCRL          = S_(MATAIJCRL)
- *     SEQAIJCRL       = S_(MATSEQAIJCRL)
+  /* "PETSc/Mat.pyx":115
+ * class MatOrderingType(object):
+ *     NATURAL     = S_(MATORDERINGNATURAL)
+ *     ND          = S_(MATORDERINGND)             # <<<<<<<<<<<<<<
+ *     OWD         = S_(MATORDERING1WD)
+ *     RCM         = S_(MATORDERINGRCM)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGND); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 115, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ND, __pyx_t_8) < 0) __PYX_ERR(33, 115, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":14
- *     AIJPTHREAD      = S_(MATAIJPTHREAD)
- *     MPIAIJ          = S_(MATMPIAIJ)
- *     AIJCRL          = S_(MATAIJCRL)             # <<<<<<<<<<<<<<
- *     SEQAIJCRL       = S_(MATSEQAIJCRL)
- *     MPIAIJCRL       = S_(MATMPIAIJCRL)
+  /* "PETSc/Mat.pyx":116
+ *     NATURAL     = S_(MATORDERINGNATURAL)
+ *     ND          = S_(MATORDERINGND)
+ *     OWD         = S_(MATORDERING1WD)             # <<<<<<<<<<<<<<
+ *     RCM         = S_(MATORDERINGRCM)
+ *     QMD         = S_(MATORDERINGQMD)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCRL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERING1WD); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJCRL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_OWD, __pyx_t_8) < 0) __PYX_ERR(33, 116, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":15
- *     MPIAIJ          = S_(MATMPIAIJ)
- *     AIJCRL          = S_(MATAIJCRL)
- *     SEQAIJCRL       = S_(MATSEQAIJCRL)             # <<<<<<<<<<<<<<
- *     MPIAIJCRL       = S_(MATMPIAIJCRL)
- *     AIJCUSP         = S_(MATAIJCUSP)
+  /* "PETSc/Mat.pyx":117
+ *     ND          = S_(MATORDERINGND)
+ *     OWD         = S_(MATORDERING1WD)
+ *     RCM         = S_(MATORDERINGRCM)             # <<<<<<<<<<<<<<
+ *     QMD         = S_(MATORDERINGQMD)
+ *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCRL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGRCM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJCRL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RCM, __pyx_t_8) < 0) __PYX_ERR(33, 117, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":16
- *     AIJCRL          = S_(MATAIJCRL)
- *     SEQAIJCRL       = S_(MATSEQAIJCRL)
- *     MPIAIJCRL       = S_(MATMPIAIJCRL)             # <<<<<<<<<<<<<<
- *     AIJCUSP         = S_(MATAIJCUSP)
- *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
+  /* "PETSc/Mat.pyx":118
+ *     OWD         = S_(MATORDERING1WD)
+ *     RCM         = S_(MATORDERINGRCM)
+ *     QMD         = S_(MATORDERINGQMD)             # <<<<<<<<<<<<<<
+ *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
+ *     WBM         = S_(MATORDERINGWBM)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCRL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGQMD); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJCRL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QMD, __pyx_t_8) < 0) __PYX_ERR(33, 118, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":17
- *     SEQAIJCRL       = S_(MATSEQAIJCRL)
- *     MPIAIJCRL       = S_(MATMPIAIJCRL)
- *     AIJCUSP         = S_(MATAIJCUSP)             # <<<<<<<<<<<<<<
- *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
- *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
+  /* "PETSc/Mat.pyx":119
+ *     RCM         = S_(MATORDERINGRCM)
+ *     QMD         = S_(MATORDERINGQMD)
+ *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)             # <<<<<<<<<<<<<<
+ *     WBM         = S_(MATORDERINGWBM)
+ *     SPECTRAL    = S_(MATORDERINGSPECTRAL)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGROWLENGTH); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 119, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJCUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ROWLENGTH, __pyx_t_8) < 0) __PYX_ERR(33, 119, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":18
- *     MPIAIJCRL       = S_(MATMPIAIJCRL)
- *     AIJCUSP         = S_(MATAIJCUSP)
- *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)             # <<<<<<<<<<<<<<
- *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
- *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
+  /* "PETSc/Mat.pyx":120
+ *     QMD         = S_(MATORDERINGQMD)
+ *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
+ *     WBM         = S_(MATORDERINGWBM)             # <<<<<<<<<<<<<<
+ *     SPECTRAL    = S_(MATORDERINGSPECTRAL)
+ *     AMD         = S_(MATORDERINGAMD)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGWBM); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 120, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJCUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_WBM, __pyx_t_8) < 0) __PYX_ERR(33, 120, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":19
- *     AIJCUSP         = S_(MATAIJCUSP)
- *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
- *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)             # <<<<<<<<<<<<<<
- *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
- *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
+  /* "PETSc/Mat.pyx":121
+ *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
+ *     WBM         = S_(MATORDERINGWBM)
+ *     SPECTRAL    = S_(MATORDERINGSPECTRAL)             # <<<<<<<<<<<<<<
+ *     AMD         = S_(MATORDERINGAMD)
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGSPECTRAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 121, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJCUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPECTRAL, __pyx_t_8) < 0) __PYX_ERR(33, 121, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":20
- *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
- *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
- *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)             # <<<<<<<<<<<<<<
- *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
- *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
+  /* "PETSc/Mat.pyx":122
+ *     WBM         = S_(MATORDERINGWBM)
+ *     SPECTRAL    = S_(MATORDERINGSPECTRAL)
+ *     AMD         = S_(MATORDERINGAMD)             # <<<<<<<<<<<<<<
+ * 
+ * class MatFactorShiftType(object):
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCUSPARSE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGAMD); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJCUSPARSE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AMD, __pyx_t_8) < 0) __PYX_ERR(33, 122, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":21
- *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
- *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
- *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)             # <<<<<<<<<<<<<<
- *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
- *     AIJVIENNACL     = S_(MATAIJVIENNACL)
+  /* "PETSc/Mat.pyx":113
+ *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
+ * 
+ * class MatOrderingType(object):             # <<<<<<<<<<<<<<
+ *     NATURAL     = S_(MATORDERINGNATURAL)
+ *     ND          = S_(MATORDERINGND)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCUSPARSE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatOrderingType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJCUSPARSE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatOrderingType, __pyx_t_8) < 0) __PYX_ERR(33, 113, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":22
- *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
- *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
- *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)             # <<<<<<<<<<<<<<
- *     AIJVIENNACL     = S_(MATAIJVIENNACL)
- *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
+  /* "PETSc/Mat.pyx":124
+ *     AMD         = S_(MATORDERINGAMD)
+ * 
+ * class MatFactorShiftType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NONE              = MAT_SHIFT_NONE
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCUSPARSE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJCUSPARSE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 124, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 124, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatFactorShiftType, __pyx_n_s_MatFactorShiftType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 124, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":23
- *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
- *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
- *     AIJVIENNACL     = S_(MATAIJVIENNACL)             # <<<<<<<<<<<<<<
- *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
- *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
+  /* "PETSc/Mat.pyx":126
+ * class MatFactorShiftType(object):
+ *     # native
+ *     NONE              = MAT_SHIFT_NONE             # <<<<<<<<<<<<<<
+ *     NONZERO           = MAT_SHIFT_NONZERO
+ *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJVIENNACL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_NONE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJVIENNACL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) __PYX_ERR(33, 126, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":24
- *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
- *     AIJVIENNACL     = S_(MATAIJVIENNACL)
- *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)             # <<<<<<<<<<<<<<
- *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
- *     AIJPERM         = S_(MATAIJPERM)
+  /* "PETSc/Mat.pyx":127
+ *     # native
+ *     NONE              = MAT_SHIFT_NONE
+ *     NONZERO           = MAT_SHIFT_NONZERO             # <<<<<<<<<<<<<<
+ *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
+ *     INBLOCKS          = MAT_SHIFT_INBLOCKS
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJVIENNACL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_NONZERO); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJVIENNACL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONZERO, __pyx_t_8) < 0) __PYX_ERR(33, 127, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":25
- *     AIJVIENNACL     = S_(MATAIJVIENNACL)
- *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
- *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)             # <<<<<<<<<<<<<<
- *     AIJPERM         = S_(MATAIJPERM)
- *     SEQAIJPERM      = S_(MATSEQAIJPERM)
+  /* "PETSc/Mat.pyx":128
+ *     NONE              = MAT_SHIFT_NONE
+ *     NONZERO           = MAT_SHIFT_NONZERO
+ *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE             # <<<<<<<<<<<<<<
+ *     INBLOCKS          = MAT_SHIFT_INBLOCKS
+ *     # aliases
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJVIENNACL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_POSITIVE_DEFINITE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 128, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJVIENNACL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_POSITIVE_DEFINITE, __pyx_t_8) < 0) __PYX_ERR(33, 128, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":26
- *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
- *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
- *     AIJPERM         = S_(MATAIJPERM)             # <<<<<<<<<<<<<<
- *     SEQAIJPERM      = S_(MATSEQAIJPERM)
- *     MPIAIJPERM      = S_(MATMPIAIJPERM)
+  /* "PETSc/Mat.pyx":129
+ *     NONZERO           = MAT_SHIFT_NONZERO
+ *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
+ *     INBLOCKS          = MAT_SHIFT_INBLOCKS             # <<<<<<<<<<<<<<
+ *     # aliases
+ *     NZ = MAT_SHIFT_NONZERO
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJPERM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_INBLOCKS); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 129, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AIJPERM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INBLOCKS, __pyx_t_8) < 0) __PYX_ERR(33, 129, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":27
- *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
- *     AIJPERM         = S_(MATAIJPERM)
- *     SEQAIJPERM      = S_(MATSEQAIJPERM)             # <<<<<<<<<<<<<<
- *     MPIAIJPERM      = S_(MATMPIAIJPERM)
- *     SHELL           = S_(MATSHELL)
+  /* "PETSc/Mat.pyx":131
+ *     INBLOCKS          = MAT_SHIFT_INBLOCKS
+ *     # aliases
+ *     NZ = MAT_SHIFT_NONZERO             # <<<<<<<<<<<<<<
+ *     PD = MAT_SHIFT_POSITIVE_DEFINITE
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJPERM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_NONZERO); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 131, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQAIJPERM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NZ, __pyx_t_8) < 0) __PYX_ERR(33, 131, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":28
- *     AIJPERM         = S_(MATAIJPERM)
- *     SEQAIJPERM      = S_(MATSEQAIJPERM)
- *     MPIAIJPERM      = S_(MATMPIAIJPERM)             # <<<<<<<<<<<<<<
- *     SHELL           = S_(MATSHELL)
- *     DENSE           = S_(MATDENSE)
+  /* "PETSc/Mat.pyx":132
+ *     # aliases
+ *     NZ = MAT_SHIFT_NONZERO
+ *     PD = MAT_SHIFT_POSITIVE_DEFINITE             # <<<<<<<<<<<<<<
+ * 
+ * class MatSORType(object):
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJPERM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_POSITIVE_DEFINITE); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 132, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIAIJPERM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PD, __pyx_t_8) < 0) __PYX_ERR(33, 132, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":29
- *     SEQAIJPERM      = S_(MATSEQAIJPERM)
- *     MPIAIJPERM      = S_(MATMPIAIJPERM)
- *     SHELL           = S_(MATSHELL)             # <<<<<<<<<<<<<<
- *     DENSE           = S_(MATDENSE)
- *     SEQDENSE        = S_(MATSEQDENSE)
+  /* "PETSc/Mat.pyx":124
+ *     AMD         = S_(MATORDERINGAMD)
+ * 
+ * class MatFactorShiftType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NONE              = MAT_SHIFT_NONE
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSHELL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatFactorShiftType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatFactorShiftType, __pyx_t_8) < 0) __PYX_ERR(33, 124, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":30
- *     MPIAIJPERM      = S_(MATMPIAIJPERM)
- *     SHELL           = S_(MATSHELL)
- *     DENSE           = S_(MATDENSE)             # <<<<<<<<<<<<<<
- *     SEQDENSE        = S_(MATSEQDENSE)
- *     MPIDENSE        = S_(MATMPIDENSE)
+  /* "PETSc/Mat.pyx":134
+ *     PD = MAT_SHIFT_POSITIVE_DEFINITE
+ * 
+ * class MatSORType(object):             # <<<<<<<<<<<<<<
+ *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP
+ *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATDENSE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DENSE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 134, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 134, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatSORType, __pyx_n_s_MatSORType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 134, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":31
- *     SHELL           = S_(MATSHELL)
- *     DENSE           = S_(MATDENSE)
- *     SEQDENSE        = S_(MATSEQDENSE)             # <<<<<<<<<<<<<<
- *     MPIDENSE        = S_(MATMPIDENSE)
- *     ELEMENTAL       = S_(MATELEMENTAL)
+  /* "PETSc/Mat.pyx":135
+ * 
+ * class MatSORType(object):
+ *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP             # <<<<<<<<<<<<<<
+ *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
+ *     SYMMETRY_SWEEP        = SOR_SYMMETRIC_SWEEP
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQDENSE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_FORWARD_SWEEP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQDENSE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FORWARD_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 135, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":32
- *     DENSE           = S_(MATDENSE)
- *     SEQDENSE        = S_(MATSEQDENSE)
- *     MPIDENSE        = S_(MATMPIDENSE)             # <<<<<<<<<<<<<<
- *     ELEMENTAL       = S_(MATELEMENTAL)
- *     BAIJ            = S_(MATBAIJ)
+  /* "PETSc/Mat.pyx":136
+ * class MatSORType(object):
+ *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP
+ *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP             # <<<<<<<<<<<<<<
+ *     SYMMETRY_SWEEP        = SOR_SYMMETRIC_SWEEP
+ *     LOCAL_FORWARD_SWEEP   = SOR_LOCAL_FORWARD_SWEEP
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIDENSE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_BACKWARD_SWEEP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 136, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIDENSE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BACKWARD_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 136, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":33
- *     SEQDENSE        = S_(MATSEQDENSE)
- *     MPIDENSE        = S_(MATMPIDENSE)
- *     ELEMENTAL       = S_(MATELEMENTAL)             # <<<<<<<<<<<<<<
- *     BAIJ            = S_(MATBAIJ)
- *     SEQBAIJ         = S_(MATSEQBAIJ)
+  /* "PETSc/Mat.pyx":137
+ *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP
+ *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
+ *     SYMMETRY_SWEEP        = SOR_SYMMETRIC_SWEEP             # <<<<<<<<<<<<<<
+ *     LOCAL_FORWARD_SWEEP   = SOR_LOCAL_FORWARD_SWEEP
+ *     LOCAL_BACKWARD_SWEEP  = SOR_LOCAL_BACKWARD_SWEEP
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATELEMENTAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_SYMMETRIC_SWEEP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ELEMENTAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRY_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 137, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":34
- *     MPIDENSE        = S_(MATMPIDENSE)
- *     ELEMENTAL       = S_(MATELEMENTAL)
- *     BAIJ            = S_(MATBAIJ)             # <<<<<<<<<<<<<<
- *     SEQBAIJ         = S_(MATSEQBAIJ)
- *     MPIBAIJ         = S_(MATMPIBAIJ)
+  /* "PETSc/Mat.pyx":138
+ *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
+ *     SYMMETRY_SWEEP        = SOR_SYMMETRIC_SWEEP
+ *     LOCAL_FORWARD_SWEEP   = SOR_LOCAL_FORWARD_SWEEP             # <<<<<<<<<<<<<<
+ *     LOCAL_BACKWARD_SWEEP  = SOR_LOCAL_BACKWARD_SWEEP
+ *     LOCAL_SYMMETRIC_SWEEP = SOR_LOCAL_SYMMETRIC_SWEEP
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATBAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_LOCAL_FORWARD_SWEEP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 138, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCAL_FORWARD_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 138, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":35
- *     ELEMENTAL       = S_(MATELEMENTAL)
- *     BAIJ            = S_(MATBAIJ)
- *     SEQBAIJ         = S_(MATSEQBAIJ)             # <<<<<<<<<<<<<<
- *     MPIBAIJ         = S_(MATMPIBAIJ)
- *     MPIADJ          = S_(MATMPIADJ)
+  /* "PETSc/Mat.pyx":139
+ *     SYMMETRY_SWEEP        = SOR_SYMMETRIC_SWEEP
+ *     LOCAL_FORWARD_SWEEP   = SOR_LOCAL_FORWARD_SWEEP
+ *     LOCAL_BACKWARD_SWEEP  = SOR_LOCAL_BACKWARD_SWEEP             # <<<<<<<<<<<<<<
+ *     LOCAL_SYMMETRIC_SWEEP = SOR_LOCAL_SYMMETRIC_SWEEP
+ *     ZERO_INITIAL_GUESS    = SOR_ZERO_INITIAL_GUESS
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQBAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_LOCAL_BACKWARD_SWEEP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 139, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQBAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCAL_BACKWARD_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 139, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":36
- *     BAIJ            = S_(MATBAIJ)
- *     SEQBAIJ         = S_(MATSEQBAIJ)
- *     MPIBAIJ         = S_(MATMPIBAIJ)             # <<<<<<<<<<<<<<
- *     MPIADJ          = S_(MATMPIADJ)
- *     SBAIJ           = S_(MATSBAIJ)
+  /* "PETSc/Mat.pyx":140
+ *     LOCAL_FORWARD_SWEEP   = SOR_LOCAL_FORWARD_SWEEP
+ *     LOCAL_BACKWARD_SWEEP  = SOR_LOCAL_BACKWARD_SWEEP
+ *     LOCAL_SYMMETRIC_SWEEP = SOR_LOCAL_SYMMETRIC_SWEEP             # <<<<<<<<<<<<<<
+ *     ZERO_INITIAL_GUESS    = SOR_ZERO_INITIAL_GUESS
+ *     EISENSTAT             = SOR_EISENSTAT
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIBAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_LOCAL_SYMMETRIC_SWEEP); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 140, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIBAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCAL_SYMMETRIC_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 140, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":37
- *     SEQBAIJ         = S_(MATSEQBAIJ)
- *     MPIBAIJ         = S_(MATMPIBAIJ)
- *     MPIADJ          = S_(MATMPIADJ)             # <<<<<<<<<<<<<<
- *     SBAIJ           = S_(MATSBAIJ)
- *     SEQSBAIJ        = S_(MATSEQSBAIJ)
+  /* "PETSc/Mat.pyx":141
+ *     LOCAL_BACKWARD_SWEEP  = SOR_LOCAL_BACKWARD_SWEEP
+ *     LOCAL_SYMMETRIC_SWEEP = SOR_LOCAL_SYMMETRIC_SWEEP
+ *     ZERO_INITIAL_GUESS    = SOR_ZERO_INITIAL_GUESS             # <<<<<<<<<<<<<<
+ *     EISENSTAT             = SOR_EISENSTAT
+ *     APPLY_UPPER           = SOR_APPLY_UPPER
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIADJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_ZERO_INITIAL_GUESS); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIADJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ZERO_INITIAL_GUESS, __pyx_t_8) < 0) __PYX_ERR(33, 141, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":38
- *     MPIBAIJ         = S_(MATMPIBAIJ)
- *     MPIADJ          = S_(MATMPIADJ)
- *     SBAIJ           = S_(MATSBAIJ)             # <<<<<<<<<<<<<<
- *     SEQSBAIJ        = S_(MATSEQSBAIJ)
- *     MPISBAIJ        = S_(MATMPISBAIJ)
+  /* "PETSc/Mat.pyx":142
+ *     LOCAL_SYMMETRIC_SWEEP = SOR_LOCAL_SYMMETRIC_SWEEP
+ *     ZERO_INITIAL_GUESS    = SOR_ZERO_INITIAL_GUESS
+ *     EISENSTAT             = SOR_EISENSTAT             # <<<<<<<<<<<<<<
+ *     APPLY_UPPER           = SOR_APPLY_UPPER
+ *     APPLY_LOWER           = SOR_APPLY_LOWER
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSBAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_EISENSTAT); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SBAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EISENSTAT, __pyx_t_8) < 0) __PYX_ERR(33, 142, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":39
- *     MPIADJ          = S_(MATMPIADJ)
- *     SBAIJ           = S_(MATSBAIJ)
- *     SEQSBAIJ        = S_(MATSEQSBAIJ)             # <<<<<<<<<<<<<<
- *     MPISBAIJ        = S_(MATMPISBAIJ)
- *     SEQBSTRM        = S_(MATSEQBSTRM)
+  /* "PETSc/Mat.pyx":143
+ *     ZERO_INITIAL_GUESS    = SOR_ZERO_INITIAL_GUESS
+ *     EISENSTAT             = SOR_EISENSTAT
+ *     APPLY_UPPER           = SOR_APPLY_UPPER             # <<<<<<<<<<<<<<
+ *     APPLY_LOWER           = SOR_APPLY_LOWER
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQSBAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_APPLY_UPPER); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQSBAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_APPLY_UPPER, __pyx_t_8) < 0) __PYX_ERR(33, 143, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":40
- *     SBAIJ           = S_(MATSBAIJ)
- *     SEQSBAIJ        = S_(MATSEQSBAIJ)
- *     MPISBAIJ        = S_(MATMPISBAIJ)             # <<<<<<<<<<<<<<
- *     SEQBSTRM        = S_(MATSEQBSTRM)
- *     MPIBSTRM        = S_(MATMPIBSTRM)
+  /* "PETSc/Mat.pyx":144
+ *     EISENSTAT             = SOR_EISENSTAT
+ *     APPLY_UPPER           = SOR_APPLY_UPPER
+ *     APPLY_LOWER           = SOR_APPLY_LOWER             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPISBAIJ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(SOR_APPLY_LOWER); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPISBAIJ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_APPLY_LOWER, __pyx_t_8) < 0) __PYX_ERR(33, 144, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":41
- *     SEQSBAIJ        = S_(MATSEQSBAIJ)
- *     MPISBAIJ        = S_(MATMPISBAIJ)
- *     SEQBSTRM        = S_(MATSEQBSTRM)             # <<<<<<<<<<<<<<
- *     MPIBSTRM        = S_(MATMPIBSTRM)
- *     BSTRM           = S_(MATBSTRM)
+  /* "PETSc/Mat.pyx":134
+ *     PD = MAT_SHIFT_POSITIVE_DEFINITE
+ * 
+ * class MatSORType(object):             # <<<<<<<<<<<<<<
+ *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP
+ *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQBSTRM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatSORType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQBSTRM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatSORType, __pyx_t_8) < 0) __PYX_ERR(33, 134, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":42
- *     MPISBAIJ        = S_(MATMPISBAIJ)
- *     SEQBSTRM        = S_(MATSEQBSTRM)
- *     MPIBSTRM        = S_(MATMPIBSTRM)             # <<<<<<<<<<<<<<
- *     BSTRM           = S_(MATBSTRM)
- *     SEQSBSTRM       = S_(MATSEQSBSTRM)
+  /* "PETSc/Mat.pyx":150
+ * cdef class Mat(Object):
+ * 
+ *     Type            = MatType             # <<<<<<<<<<<<<<
+ *     Option          = MatOption
+ *     AssemblyType    = MatAssemblyType
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatType); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 150, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(33, 150, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":151
+ * 
+ *     Type            = MatType
+ *     Option          = MatOption             # <<<<<<<<<<<<<<
+ *     AssemblyType    = MatAssemblyType
+ *     InfoType        = MatInfoType
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatOption); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 151, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Option, __pyx_t_3) < 0) __PYX_ERR(33, 151, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":152
+ *     Type            = MatType
+ *     Option          = MatOption
+ *     AssemblyType    = MatAssemblyType             # <<<<<<<<<<<<<<
+ *     InfoType        = MatInfoType
+ *     Structure       = MatStructure
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatAssemblyType); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 152, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_AssemblyType, __pyx_t_3) < 0) __PYX_ERR(33, 152, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":153
+ *     Option          = MatOption
+ *     AssemblyType    = MatAssemblyType
+ *     InfoType        = MatInfoType             # <<<<<<<<<<<<<<
+ *     Structure       = MatStructure
+ *     OrderingType    = MatOrderingType
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatInfoType); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 153, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_InfoType, __pyx_t_3) < 0) __PYX_ERR(33, 153, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":154
+ *     AssemblyType    = MatAssemblyType
+ *     InfoType        = MatInfoType
+ *     Structure       = MatStructure             # <<<<<<<<<<<<<<
+ *     OrderingType    = MatOrderingType
+ *     FactorShiftType = MatFactorShiftType
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatStructure); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 154, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Structure, __pyx_t_3) < 0) __PYX_ERR(33, 154, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":155
+ *     InfoType        = MatInfoType
+ *     Structure       = MatStructure
+ *     OrderingType    = MatOrderingType             # <<<<<<<<<<<<<<
+ *     FactorShiftType = MatFactorShiftType
+ *     SORType         = MatSORType
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatOrderingType); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 155, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_OrderingType, __pyx_t_3) < 0) __PYX_ERR(33, 155, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":156
+ *     Structure       = MatStructure
+ *     OrderingType    = MatOrderingType
+ *     FactorShiftType = MatFactorShiftType             # <<<<<<<<<<<<<<
+ *     SORType         = MatSORType
+ *     #
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatFactorShiftType); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 156, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_FactorShiftType, __pyx_t_3) < 0) __PYX_ERR(33, 156, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":157
+ *     OrderingType    = MatOrderingType
+ *     FactorShiftType = MatFactorShiftType
+ *     SORType         = MatSORType             # <<<<<<<<<<<<<<
+ *     #
+ * 
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatSORType); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 157, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_SORType, __pyx_t_3) < 0) __PYX_ERR(33, 157, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":883
+ *     #
+ * 
+ *     Stencil = _Mat_Stencil             # <<<<<<<<<<<<<<
+ * 
+ *     def setStencil(self, dims, starts=None, dof=1):
+ */
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Stencil, ((PyObject *)__pyx_ptype_8petsc4py_5PETSc__Mat_Stencil)) < 0) __PYX_ERR(33, 883, __pyx_L1_error)
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":996
+ *         return vecl
+ * 
+ *     getVecs = createVecs             # <<<<<<<<<<<<<<
+ *     getVecRight = createVecRight
+ *     getVecLeft = createVecLeft
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecs); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 996, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecs, __pyx_t_3) < 0) __PYX_ERR(33, 996, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":997
+ * 
+ *     getVecs = createVecs
+ *     getVecRight = createVecRight             # <<<<<<<<<<<<<<
+ *     getVecLeft = createVecLeft
+ * 
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecRight); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 997, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecRight, __pyx_t_3) < 0) __PYX_ERR(33, 997, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":998
+ *     getVecs = createVecs
+ *     getVecRight = createVecRight
+ *     getVecLeft = createVecLeft             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 998, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecLeft, __pyx_t_3) < 0) __PYX_ERR(33, 998, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+
+  /* "PETSc/Mat.pyx":1543
+ * # --------------------------------------------------------------------
+ * 
+ * del MatType             # <<<<<<<<<<<<<<
+ * del MatOption
+ * del MatAssemblyType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatType) < 0) __PYX_ERR(33, 1543, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1544
+ * 
+ * del MatType
+ * del MatOption             # <<<<<<<<<<<<<<
+ * del MatAssemblyType
+ * del MatInfoType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatOption) < 0) __PYX_ERR(33, 1544, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1545
+ * del MatType
+ * del MatOption
+ * del MatAssemblyType             # <<<<<<<<<<<<<<
+ * del MatInfoType
+ * del MatStructure
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatAssemblyType) < 0) __PYX_ERR(33, 1545, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1546
+ * del MatOption
+ * del MatAssemblyType
+ * del MatInfoType             # <<<<<<<<<<<<<<
+ * del MatStructure
+ * del MatOrderingType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatInfoType) < 0) __PYX_ERR(33, 1546, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1547
+ * del MatAssemblyType
+ * del MatInfoType
+ * del MatStructure             # <<<<<<<<<<<<<<
+ * del MatOrderingType
+ * del MatFactorShiftType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatStructure) < 0) __PYX_ERR(33, 1547, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1548
+ * del MatInfoType
+ * del MatStructure
+ * del MatOrderingType             # <<<<<<<<<<<<<<
+ * del MatFactorShiftType
+ * del MatSORType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatOrderingType) < 0) __PYX_ERR(33, 1548, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1549
+ * del MatStructure
+ * del MatOrderingType
+ * del MatFactorShiftType             # <<<<<<<<<<<<<<
+ * del MatSORType
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIBSTRM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPIBSTRM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatFactorShiftType) < 0) __PYX_ERR(33, 1549, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":43
- *     SEQBSTRM        = S_(MATSEQBSTRM)
- *     MPIBSTRM        = S_(MATMPIBSTRM)
- *     BSTRM           = S_(MATBSTRM)             # <<<<<<<<<<<<<<
- *     SEQSBSTRM       = S_(MATSEQSBSTRM)
- *     MPISBSTRM       = S_(MATMPISBSTRM)
+  /* "PETSc/Mat.pyx":1550
+ * del MatOrderingType
+ * del MatFactorShiftType
+ * del MatSORType             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATBSTRM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BSTRM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatSORType) < 0) __PYX_ERR(33, 1550, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":44
- *     MPIBSTRM        = S_(MATMPIBSTRM)
- *     BSTRM           = S_(MATBSTRM)
- *     SEQSBSTRM       = S_(MATSEQSBSTRM)             # <<<<<<<<<<<<<<
- *     MPISBSTRM       = S_(MATMPISBSTRM)
- *     SBSTRM          = S_(MATSBSTRM)
+  /* "PETSc/PC.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class PCType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NONE         = S_(PCNONE)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQSBSTRM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQSBSTRM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCType, __pyx_n_s_PCType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":45
- *     BSTRM           = S_(MATBSTRM)
- *     SEQSBSTRM       = S_(MATSEQSBSTRM)
- *     MPISBSTRM       = S_(MATMPISBSTRM)             # <<<<<<<<<<<<<<
- *     SBSTRM          = S_(MATSBSTRM)
- *     DAAD            = S_(MATDAAD)
+  /* "PETSc/PC.pyx":5
+ * class PCType(object):
+ *     # native
+ *     NONE         = S_(PCNONE)             # <<<<<<<<<<<<<<
+ *     JACOBI       = S_(PCJACOBI)
+ *     SOR          = S_(PCSOR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMPISBSTRM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCNONE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MPISBSTRM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) __PYX_ERR(34, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":46
- *     SEQSBSTRM       = S_(MATSEQSBSTRM)
- *     MPISBSTRM       = S_(MATMPISBSTRM)
- *     SBSTRM          = S_(MATSBSTRM)             # <<<<<<<<<<<<<<
- *     DAAD            = S_(MATDAAD)
- *     MFFD            = S_(MATMFFD)
+  /* "PETSc/PC.pyx":6
+ *     # native
+ *     NONE         = S_(PCNONE)
+ *     JACOBI       = S_(PCJACOBI)             # <<<<<<<<<<<<<<
+ *     SOR          = S_(PCSOR)
+ *     LU           = S_(PCLU)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSBSTRM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCJACOBI); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SBSTRM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_JACOBI, __pyx_t_8) < 0) __PYX_ERR(34, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":47
- *     MPISBSTRM       = S_(MATMPISBSTRM)
- *     SBSTRM          = S_(MATSBSTRM)
- *     DAAD            = S_(MATDAAD)             # <<<<<<<<<<<<<<
- *     MFFD            = S_(MATMFFD)
- *     NORMAL          = S_(MATNORMAL)
+  /* "PETSc/PC.pyx":7
+ *     NONE         = S_(PCNONE)
+ *     JACOBI       = S_(PCJACOBI)
+ *     SOR          = S_(PCSOR)             # <<<<<<<<<<<<<<
+ *     LU           = S_(PCLU)
+ *     SHELL        = S_(PCSHELL)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATDAAD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSOR); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAAD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SOR, __pyx_t_8) < 0) __PYX_ERR(34, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":48
- *     SBSTRM          = S_(MATSBSTRM)
- *     DAAD            = S_(MATDAAD)
- *     MFFD            = S_(MATMFFD)             # <<<<<<<<<<<<<<
- *     NORMAL          = S_(MATNORMAL)
- *     LRC             = S_(MATLRC)
+  /* "PETSc/PC.pyx":8
+ *     JACOBI       = S_(PCJACOBI)
+ *     SOR          = S_(PCSOR)
+ *     LU           = S_(PCLU)             # <<<<<<<<<<<<<<
+ *     SHELL        = S_(PCSHELL)
+ *     BJACOBI      = S_(PCBJACOBI)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATMFFD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCLU); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MFFD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LU, __pyx_t_8) < 0) __PYX_ERR(34, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":49
- *     DAAD            = S_(MATDAAD)
- *     MFFD            = S_(MATMFFD)
- *     NORMAL          = S_(MATNORMAL)             # <<<<<<<<<<<<<<
- *     LRC             = S_(MATLRC)
- *     SCATTER         = S_(MATSCATTER)
+  /* "PETSc/PC.pyx":9
+ *     SOR          = S_(PCSOR)
+ *     LU           = S_(PCLU)
+ *     SHELL        = S_(PCSHELL)             # <<<<<<<<<<<<<<
+ *     BJACOBI      = S_(PCBJACOBI)
+ *     MG           = S_(PCMG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATNORMAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSHELL); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORMAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) __PYX_ERR(34, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":50
- *     MFFD            = S_(MATMFFD)
- *     NORMAL          = S_(MATNORMAL)
- *     LRC             = S_(MATLRC)             # <<<<<<<<<<<<<<
- *     SCATTER         = S_(MATSCATTER)
- *     BLOCKMAT        = S_(MATBLOCKMAT)
+  /* "PETSc/PC.pyx":10
+ *     LU           = S_(PCLU)
+ *     SHELL        = S_(PCSHELL)
+ *     BJACOBI      = S_(PCBJACOBI)             # <<<<<<<<<<<<<<
+ *     MG           = S_(PCMG)
+ *     EISENSTAT    = S_(PCEISENSTAT)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATLRC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCBJACOBI); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LRC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BJACOBI, __pyx_t_8) < 0) __PYX_ERR(34, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":51
- *     NORMAL          = S_(MATNORMAL)
- *     LRC             = S_(MATLRC)
- *     SCATTER         = S_(MATSCATTER)             # <<<<<<<<<<<<<<
- *     BLOCKMAT        = S_(MATBLOCKMAT)
- *     COMPOSITE       = S_(MATCOMPOSITE)
+  /* "PETSc/PC.pyx":11
+ *     SHELL        = S_(PCSHELL)
+ *     BJACOBI      = S_(PCBJACOBI)
+ *     MG           = S_(PCMG)             # <<<<<<<<<<<<<<
+ *     EISENSTAT    = S_(PCEISENSTAT)
+ *     ILU          = S_(PCILU)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSCATTER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCMG); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCATTER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MG, __pyx_t_8) < 0) __PYX_ERR(34, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":52
- *     LRC             = S_(MATLRC)
- *     SCATTER         = S_(MATSCATTER)
- *     BLOCKMAT        = S_(MATBLOCKMAT)             # <<<<<<<<<<<<<<
- *     COMPOSITE       = S_(MATCOMPOSITE)
- *     FFT             = S_(MATFFT)
+  /* "PETSc/PC.pyx":12
+ *     BJACOBI      = S_(PCBJACOBI)
+ *     MG           = S_(PCMG)
+ *     EISENSTAT    = S_(PCEISENSTAT)             # <<<<<<<<<<<<<<
+ *     ILU          = S_(PCILU)
+ *     ICC          = S_(PCICC)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATBLOCKMAT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCEISENSTAT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BLOCKMAT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EISENSTAT, __pyx_t_8) < 0) __PYX_ERR(34, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":53
- *     SCATTER         = S_(MATSCATTER)
- *     BLOCKMAT        = S_(MATBLOCKMAT)
- *     COMPOSITE       = S_(MATCOMPOSITE)             # <<<<<<<<<<<<<<
- *     FFT             = S_(MATFFT)
- *     FFTW            = S_(MATFFTW)
+  /* "PETSc/PC.pyx":13
+ *     MG           = S_(PCMG)
+ *     EISENSTAT    = S_(PCEISENSTAT)
+ *     ILU          = S_(PCILU)             # <<<<<<<<<<<<<<
+ *     ICC          = S_(PCICC)
+ *     ASM          = S_(PCASM)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATCOMPOSITE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCILU); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSITE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ILU, __pyx_t_8) < 0) __PYX_ERR(34, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":54
- *     BLOCKMAT        = S_(MATBLOCKMAT)
- *     COMPOSITE       = S_(MATCOMPOSITE)
- *     FFT             = S_(MATFFT)             # <<<<<<<<<<<<<<
- *     FFTW            = S_(MATFFTW)
- *     SEQCUFFT        = S_(MATSEQCUFFT)
+  /* "PETSc/PC.pyx":14
+ *     EISENSTAT    = S_(PCEISENSTAT)
+ *     ILU          = S_(PCILU)
+ *     ICC          = S_(PCICC)             # <<<<<<<<<<<<<<
+ *     ASM          = S_(PCASM)
+ *     GASM         = S_(PCGASM)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATFFT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCICC); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FFT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ICC, __pyx_t_8) < 0) __PYX_ERR(34, 14, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":55
- *     COMPOSITE       = S_(MATCOMPOSITE)
- *     FFT             = S_(MATFFT)
- *     FFTW            = S_(MATFFTW)             # <<<<<<<<<<<<<<
- *     SEQCUFFT        = S_(MATSEQCUFFT)
- *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)
+  /* "PETSc/PC.pyx":15
+ *     ILU          = S_(PCILU)
+ *     ICC          = S_(PCICC)
+ *     ASM          = S_(PCASM)             # <<<<<<<<<<<<<<
+ *     GASM         = S_(PCGASM)
+ *     KSP          = S_(PCKSP)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATFFTW); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCASM); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FFTW, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASM, __pyx_t_8) < 0) __PYX_ERR(34, 15, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":56
- *     FFT             = S_(MATFFT)
- *     FFTW            = S_(MATFFTW)
- *     SEQCUFFT        = S_(MATSEQCUFFT)             # <<<<<<<<<<<<<<
- *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)
- *     PYTHON          = S_(MATPYTHON)
+  /* "PETSc/PC.pyx":16
+ *     ICC          = S_(PCICC)
+ *     ASM          = S_(PCASM)
+ *     GASM         = S_(PCGASM)             # <<<<<<<<<<<<<<
+ *     KSP          = S_(PCKSP)
+ *     COMPOSITE    = S_(PCCOMPOSITE)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQCUFFT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGASM); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SEQCUFFT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GASM, __pyx_t_8) < 0) __PYX_ERR(34, 16, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":57
- *     FFTW            = S_(MATFFTW)
- *     SEQCUFFT        = S_(MATSEQCUFFT)
- *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)             # <<<<<<<<<<<<<<
- *     PYTHON          = S_(MATPYTHON)
- *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)
+  /* "PETSc/PC.pyx":17
+ *     ASM          = S_(PCASM)
+ *     GASM         = S_(PCGASM)
+ *     KSP          = S_(PCKSP)             # <<<<<<<<<<<<<<
+ *     COMPOSITE    = S_(PCCOMPOSITE)
+ *     REDUNDANT    = S_(PCREDUNDANT)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATTRANSPOSEMAT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCKSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TRANSPOSEMAT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KSP, __pyx_t_8) < 0) __PYX_ERR(34, 17, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":58
- *     SEQCUFFT        = S_(MATSEQCUFFT)
- *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)
- *     PYTHON          = S_(MATPYTHON)             # <<<<<<<<<<<<<<
- *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)
- *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)
+  /* "PETSc/PC.pyx":18
+ *     GASM         = S_(PCGASM)
+ *     KSP          = S_(PCKSP)
+ *     COMPOSITE    = S_(PCCOMPOSITE)             # <<<<<<<<<<<<<<
+ *     REDUNDANT    = S_(PCREDUNDANT)
+ *     SPAI         = S_(PCSPAI)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATPYTHON); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCCOMPOSITE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSITE, __pyx_t_8) < 0) __PYX_ERR(34, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":59
- *     TRANSPOSEMAT    = S_(MATTRANSPOSEMAT)
- *     PYTHON          = S_(MATPYTHON)
- *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)             # <<<<<<<<<<<<<<
- *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)
- *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)
+  /* "PETSc/PC.pyx":19
+ *     KSP          = S_(PCKSP)
+ *     COMPOSITE    = S_(PCCOMPOSITE)
+ *     REDUNDANT    = S_(PCREDUNDANT)             # <<<<<<<<<<<<<<
+ *     SPAI         = S_(PCSPAI)
+ *     NN           = S_(PCNN)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSCHURCOMPLEMENT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCREDUNDANT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCHURCOMPLEMENT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REDUNDANT, __pyx_t_8) < 0) __PYX_ERR(34, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":60
- *     PYTHON          = S_(MATPYTHON)
- *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)
- *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)             # <<<<<<<<<<<<<<
- *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)
- *     SUBMATRIX       = S_(MATSUBMATRIX)
+  /* "PETSc/PC.pyx":20
+ *     COMPOSITE    = S_(PCCOMPOSITE)
+ *     REDUNDANT    = S_(PCREDUNDANT)
+ *     SPAI         = S_(PCSPAI)             # <<<<<<<<<<<<<<
+ *     NN           = S_(PCNN)
+ *     CHOLESKY     = S_(PCCHOLESKY)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATHYPRESTRUCT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSPAI); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HYPRESTRUCT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPAI, __pyx_t_8) < 0) __PYX_ERR(34, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":61
- *     SCHURCOMPLEMENT = S_(MATSCHURCOMPLEMENT)
- *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)
- *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)             # <<<<<<<<<<<<<<
- *     SUBMATRIX       = S_(MATSUBMATRIX)
- *     LOCALREF        = S_(MATLOCALREF)
+  /* "PETSc/PC.pyx":21
+ *     REDUNDANT    = S_(PCREDUNDANT)
+ *     SPAI         = S_(PCSPAI)
+ *     NN           = S_(PCNN)             # <<<<<<<<<<<<<<
+ *     CHOLESKY     = S_(PCCHOLESKY)
+ *     PBJACOBI     = S_(PCPBJACOBI)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATHYPRESSTRUCT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCNN); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 21, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HYPRESSTRUCT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NN, __pyx_t_8) < 0) __PYX_ERR(34, 21, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":62
- *     HYPRESTRUCT     = S_(MATHYPRESTRUCT)
- *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)
- *     SUBMATRIX       = S_(MATSUBMATRIX)             # <<<<<<<<<<<<<<
- *     LOCALREF        = S_(MATLOCALREF)
- *     NEST            = S_(MATNEST)
+  /* "PETSc/PC.pyx":22
+ *     SPAI         = S_(PCSPAI)
+ *     NN           = S_(PCNN)
+ *     CHOLESKY     = S_(PCCHOLESKY)             # <<<<<<<<<<<<<<
+ *     PBJACOBI     = S_(PCPBJACOBI)
+ *     MAT          = S_(PCMAT)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATSUBMATRIX); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCCHOLESKY); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 22, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBMATRIX, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHOLESKY, __pyx_t_8) < 0) __PYX_ERR(34, 22, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":63
- *     HYPRESSTRUCT    = S_(MATHYPRESSTRUCT)
- *     SUBMATRIX       = S_(MATSUBMATRIX)
- *     LOCALREF        = S_(MATLOCALREF)             # <<<<<<<<<<<<<<
- *     NEST            = S_(MATNEST)
- * 
+  /* "PETSc/PC.pyx":23
+ *     NN           = S_(PCNN)
+ *     CHOLESKY     = S_(PCCHOLESKY)
+ *     PBJACOBI     = S_(PCPBJACOBI)             # <<<<<<<<<<<<<<
+ *     MAT          = S_(PCMAT)
+ *     HYPRE        = S_(PCHYPRE)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATLOCALREF); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCPBJACOBI); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCALREF, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PBJACOBI, __pyx_t_8) < 0) __PYX_ERR(34, 23, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":64
- *     SUBMATRIX       = S_(MATSUBMATRIX)
- *     LOCALREF        = S_(MATLOCALREF)
- *     NEST            = S_(MATNEST)             # <<<<<<<<<<<<<<
- * 
- * class MatOption(object):
+  /* "PETSc/PC.pyx":24
+ *     CHOLESKY     = S_(PCCHOLESKY)
+ *     PBJACOBI     = S_(PCPBJACOBI)
+ *     MAT          = S_(PCMAT)             # <<<<<<<<<<<<<<
+ *     HYPRE        = S_(PCHYPRE)
+ *     PARMS        = S_(PCPARMS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATNEST); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCMAT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEST, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAT, __pyx_t_8) < 0) __PYX_ERR(34, 24, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class MatType(object):             # <<<<<<<<<<<<<<
- *     SAME            = S_(MATSAME)
- *     MAIJ            = S_(MATMAIJ)
+  /* "PETSc/PC.pyx":25
+ *     PBJACOBI     = S_(PCPBJACOBI)
+ *     MAT          = S_(PCMAT)
+ *     HYPRE        = S_(PCHYPRE)             # <<<<<<<<<<<<<<
+ *     PARMS        = S_(PCPARMS)
+ *     FIELDSPLIT   = S_(PCFIELDSPLIT)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCHYPRE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HYPRE, __pyx_t_8) < 0) __PYX_ERR(34, 25, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":66
- *     NEST            = S_(MATNEST)
- * 
- * class MatOption(object):             # <<<<<<<<<<<<<<
- *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
- *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
+  /* "PETSc/PC.pyx":26
+ *     MAT          = S_(PCMAT)
+ *     HYPRE        = S_(PCHYPRE)
+ *     PARMS        = S_(PCPARMS)             # <<<<<<<<<<<<<<
+ *     FIELDSPLIT   = S_(PCFIELDSPLIT)
+ *     TFS          = S_(PCTFS)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatOption, __pyx_n_s_MatOption, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCPARMS); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PARMS, __pyx_t_8) < 0) __PYX_ERR(34, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":67
- * 
- * class MatOption(object):
- *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR             # <<<<<<<<<<<<<<
- *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
- *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
+  /* "PETSc/PC.pyx":27
+ *     HYPRE        = S_(PCHYPRE)
+ *     PARMS        = S_(PCPARMS)
+ *     FIELDSPLIT   = S_(PCFIELDSPLIT)             # <<<<<<<<<<<<<<
+ *     TFS          = S_(PCTFS)
+ *     ML           = S_(PCML)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_NEW_NONZERO_LOCATION_ERR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCFIELDSPLIT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEW_NONZERO_LOCATION_ERR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FIELDSPLIT, __pyx_t_8) < 0) __PYX_ERR(34, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":68
- * class MatOption(object):
- *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
- *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR             # <<<<<<<<<<<<<<
- *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
- *     ROW_ORIENTED                = MAT_ROW_ORIENTED
+  /* "PETSc/PC.pyx":28
+ *     PARMS        = S_(PCPARMS)
+ *     FIELDSPLIT   = S_(PCFIELDSPLIT)
+ *     TFS          = S_(PCTFS)             # <<<<<<<<<<<<<<
+ *     ML           = S_(PCML)
+ *     GALERKIN     = S_(PCGALERKIN)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_UNUSED_NONZERO_LOCATION_ERR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCTFS); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 28, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UNUSED_NONZERO_LOCATION_ERR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TFS, __pyx_t_8) < 0) __PYX_ERR(34, 28, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":69
- *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
- *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
- *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR             # <<<<<<<<<<<<<<
- *     ROW_ORIENTED                = MAT_ROW_ORIENTED
- *     SYMMETRIC                   = MAT_SYMMETRIC
+  /* "PETSc/PC.pyx":29
+ *     FIELDSPLIT   = S_(PCFIELDSPLIT)
+ *     TFS          = S_(PCTFS)
+ *     ML           = S_(PCML)             # <<<<<<<<<<<<<<
+ *     GALERKIN     = S_(PCGALERKIN)
+ *     EXOTIC       = S_(PCEXOTIC)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_NEW_NONZERO_ALLOCATION_ERR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCML); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEW_NONZERO_ALLOCATION_ERR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ML, __pyx_t_8) < 0) __PYX_ERR(34, 29, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":70
- *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
- *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
- *     ROW_ORIENTED                = MAT_ROW_ORIENTED             # <<<<<<<<<<<<<<
- *     SYMMETRIC                   = MAT_SYMMETRIC
- *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
+  /* "PETSc/PC.pyx":30
+ *     TFS          = S_(PCTFS)
+ *     ML           = S_(PCML)
+ *     GALERKIN     = S_(PCGALERKIN)             # <<<<<<<<<<<<<<
+ *     EXOTIC       = S_(PCEXOTIC)
+ *     CP           = S_(PCCP)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_ROW_ORIENTED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGALERKIN); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ROW_ORIENTED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GALERKIN, __pyx_t_8) < 0) __PYX_ERR(34, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":71
- *     NEW_NONZERO_ALLOCATION_ERR  = MAT_NEW_NONZERO_ALLOCATION_ERR
- *     ROW_ORIENTED                = MAT_ROW_ORIENTED
- *     SYMMETRIC                   = MAT_SYMMETRIC             # <<<<<<<<<<<<<<
- *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
- *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS
+  /* "PETSc/PC.pyx":31
+ *     ML           = S_(PCML)
+ *     GALERKIN     = S_(PCGALERKIN)
+ *     EXOTIC       = S_(PCEXOTIC)             # <<<<<<<<<<<<<<
+ *     CP           = S_(PCCP)
+ *     BFBT         = S_(PCBFBT)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_SYMMETRIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCEXOTIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXOTIC, __pyx_t_8) < 0) __PYX_ERR(34, 31, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":72
- *     ROW_ORIENTED                = MAT_ROW_ORIENTED
- *     SYMMETRIC                   = MAT_SYMMETRIC
- *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC             # <<<<<<<<<<<<<<
- *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS
- *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES
+  /* "PETSc/PC.pyx":32
+ *     GALERKIN     = S_(PCGALERKIN)
+ *     EXOTIC       = S_(PCEXOTIC)
+ *     CP           = S_(PCCP)             # <<<<<<<<<<<<<<
+ *     BFBT         = S_(PCBFBT)
+ *     LSC          = S_(PCLSC)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_STRUCTURALLY_SYMMETRIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCCP); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STRUCTURALLY_SYMMETRIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CP, __pyx_t_8) < 0) __PYX_ERR(34, 32, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":73
- *     SYMMETRIC                   = MAT_SYMMETRIC
- *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
- *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS             # <<<<<<<<<<<<<<
- *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES
- *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE
+  /* "PETSc/PC.pyx":33
+ *     EXOTIC       = S_(PCEXOTIC)
+ *     CP           = S_(PCCP)
+ *     BFBT         = S_(PCBFBT)             # <<<<<<<<<<<<<<
+ *     LSC          = S_(PCLSC)
+ *     PYTHON       = S_(PCPYTHON)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_NEW_DIAGONALS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCBFBT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 33, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEW_DIAGONALS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BFBT, __pyx_t_8) < 0) __PYX_ERR(34, 33, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":74
- *     STRUCTURALLY_SYMMETRIC      = MAT_STRUCTURALLY_SYMMETRIC
- *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS
- *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES             # <<<<<<<<<<<<<<
- *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE
- *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN
+  /* "PETSc/PC.pyx":34
+ *     CP           = S_(PCCP)
+ *     BFBT         = S_(PCBFBT)
+ *     LSC          = S_(PCLSC)             # <<<<<<<<<<<<<<
+ *     PYTHON       = S_(PCPYTHON)
+ *     PFMG         = S_(PCPFMG)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_IGNORE_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCLSC); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_OFF_PROC_ENTRIES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LSC, __pyx_t_8) < 0) __PYX_ERR(34, 34, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":75
- *     NEW_DIAGONALS               = MAT_NEW_DIAGONALS
- *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES
- *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE             # <<<<<<<<<<<<<<
- *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN
- *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES
+  /* "PETSc/PC.pyx":35
+ *     BFBT         = S_(PCBFBT)
+ *     LSC          = S_(PCLSC)
+ *     PYTHON       = S_(PCPYTHON)             # <<<<<<<<<<<<<<
+ *     PFMG         = S_(PCPFMG)
+ *     SYSPFMG      = S_(PCSYSPFMG)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_USE_HASH_TABLE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCPYTHON); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USE_HASH_TABLE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) __PYX_ERR(34, 35, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":76
- *     IGNORE_OFF_PROC_ENTRIES     = MAT_IGNORE_OFF_PROC_ENTRIES
- *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE
- *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES
- *     USE_INODES                  = MAT_USE_INODES
+  /* "PETSc/PC.pyx":36
+ *     LSC          = S_(PCLSC)
+ *     PYTHON       = S_(PCPYTHON)
+ *     PFMG         = S_(PCPFMG)             # <<<<<<<<<<<<<<
+ *     SYSPFMG      = S_(PCSYSPFMG)
+ *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_KEEP_NONZERO_PATTERN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCPFMG); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KEEP_NONZERO_PATTERN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PFMG, __pyx_t_8) < 0) __PYX_ERR(34, 36, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":77
- *     USE_HASH_TABLE              = MAT_USE_HASH_TABLE
- *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN
- *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES             # <<<<<<<<<<<<<<
- *     USE_INODES                  = MAT_USE_INODES
- *     HERMITIAN                   = MAT_HERMITIAN
+  /* "PETSc/PC.pyx":37
+ *     PYTHON       = S_(PCPYTHON)
+ *     PFMG         = S_(PCPFMG)
+ *     SYSPFMG      = S_(PCSYSPFMG)             # <<<<<<<<<<<<<<
+ *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
+ *     SVD          = S_(PCSVD)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_IGNORE_ZERO_ENTRIES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSYSPFMG); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_ZERO_ENTRIES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYSPFMG, __pyx_t_8) < 0) __PYX_ERR(34, 37, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":78
- *     KEEP_NONZERO_PATTERN        = MAT_KEEP_NONZERO_PATTERN
- *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES
- *     USE_INODES                  = MAT_USE_INODES             # <<<<<<<<<<<<<<
- *     HERMITIAN                   = MAT_HERMITIAN
- *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL
+  /* "PETSc/PC.pyx":38
+ *     PFMG         = S_(PCPFMG)
+ *     SYSPFMG      = S_(PCSYSPFMG)
+ *     REDISTRIBUTE = S_(PCREDISTRIBUTE)             # <<<<<<<<<<<<<<
+ *     SVD          = S_(PCSVD)
+ *     GAMG         = S_(PCGAMG)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_USE_INODES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCREDISTRIBUTE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 38, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USE_INODES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REDISTRIBUTE, __pyx_t_8) < 0) __PYX_ERR(34, 38, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":79
- *     IGNORE_ZERO_ENTRIES         = MAT_IGNORE_ZERO_ENTRIES
- *     USE_INODES                  = MAT_USE_INODES
- *     HERMITIAN                   = MAT_HERMITIAN             # <<<<<<<<<<<<<<
- *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL
- *     # DUMMY                       = MAT_DUMMY
+  /* "PETSc/PC.pyx":39
+ *     SYSPFMG      = S_(PCSYSPFMG)
+ *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
+ *     SVD          = S_(PCSVD)             # <<<<<<<<<<<<<<
+ *     GAMG         = S_(PCGAMG)
+ *     SACUSP       = S_(PCSACUSP)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_HERMITIAN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSVD); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HERMITIAN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SVD, __pyx_t_8) < 0) __PYX_ERR(34, 39, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":80
- *     USE_INODES                  = MAT_USE_INODES
- *     HERMITIAN                   = MAT_HERMITIAN
- *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL             # <<<<<<<<<<<<<<
- *     # DUMMY                       = MAT_DUMMY
- *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR
+  /* "PETSc/PC.pyx":40
+ *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
+ *     SVD          = S_(PCSVD)
+ *     GAMG         = S_(PCGAMG)             # <<<<<<<<<<<<<<
+ *     SACUSP       = S_(PCSACUSP)
+ *     SACUSPPOLY   = S_(PCSACUSPPOLY)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_SYMMETRY_ETERNAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMG); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRY_ETERNAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GAMG, __pyx_t_8) < 0) __PYX_ERR(34, 40, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":82
- *     SYMMETRY_ETERNAL            = MAT_SYMMETRY_ETERNAL
- *     # DUMMY                       = MAT_DUMMY
- *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR             # <<<<<<<<<<<<<<
- *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR
- *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
+  /* "PETSc/PC.pyx":41
+ *     SVD          = S_(PCSVD)
+ *     GAMG         = S_(PCGAMG)
+ *     SACUSP       = S_(PCSACUSP)             # <<<<<<<<<<<<<<
+ *     SACUSPPOLY   = S_(PCSACUSPPOLY)
+ *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_IGNORE_LOWER_TRIANGULAR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSACUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IGNORE_LOWER_TRIANGULAR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SACUSP, __pyx_t_8) < 0) __PYX_ERR(34, 41, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":83
- *     # DUMMY                       = MAT_DUMMY
- *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR
- *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR             # <<<<<<<<<<<<<<
- *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
- *     SPD                         = MAT_SPD
+  /* "PETSc/PC.pyx":42
+ *     GAMG         = S_(PCGAMG)
+ *     SACUSP       = S_(PCSACUSP)
+ *     SACUSPPOLY   = S_(PCSACUSPPOLY)             # <<<<<<<<<<<<<<
+ *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
+ *     AINVCUSP     = S_(PCAINVCUSP)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_ERROR_LOWER_TRIANGULAR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSACUSPPOLY); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ERROR_LOWER_TRIANGULAR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SACUSPPOLY, __pyx_t_8) < 0) __PYX_ERR(34, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":84
- *     IGNORE_LOWER_TRIANGULAR     = MAT_IGNORE_LOWER_TRIANGULAR
- *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR
- *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR             # <<<<<<<<<<<<<<
- *     SPD                         = MAT_SPD
- *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
+  /* "PETSc/PC.pyx":43
+ *     SACUSP       = S_(PCSACUSP)
+ *     SACUSPPOLY   = S_(PCSACUSPPOLY)
+ *     BICGSTABCUSP = S_(PCBICGSTABCUSP)             # <<<<<<<<<<<<<<
+ *     AINVCUSP     = S_(PCAINVCUSP)
+ *     BDDC         = S_(PCBDDC)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_GETROW_UPPERTRIANGULAR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCBICGSTABCUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 43, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GETROW_UPPERTRIANGULAR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BICGSTABCUSP, __pyx_t_8) < 0) __PYX_ERR(34, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":85
- *     ERROR_LOWER_TRIANGULAR      = MAT_ERROR_LOWER_TRIANGULAR
- *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
- *     SPD                         = MAT_SPD             # <<<<<<<<<<<<<<
- *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
- *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES
+  /* "PETSc/PC.pyx":44
+ *     SACUSPPOLY   = S_(PCSACUSPPOLY)
+ *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
+ *     AINVCUSP     = S_(PCAINVCUSP)             # <<<<<<<<<<<<<<
+ *     BDDC         = S_(PCBDDC)
+ *     KACZMARZ     = S_(PCKACZMARZ)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_SPD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCAINVCUSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 44, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AINVCUSP, __pyx_t_8) < 0) __PYX_ERR(34, 44, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":86
- *     GETROW_UPPERTRIANGULAR      = MAT_GETROW_UPPERTRIANGULAR
- *     SPD                         = MAT_SPD
- *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS             # <<<<<<<<<<<<<<
- *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES
- *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
+  /* "PETSc/PC.pyx":45
+ *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
+ *     AINVCUSP     = S_(PCAINVCUSP)
+ *     BDDC         = S_(PCBDDC)             # <<<<<<<<<<<<<<
+ *     KACZMARZ     = S_(PCKACZMARZ)
+ *     TELESCOPE    = S_(PCTELESCOPE)
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_NO_OFF_PROC_ZERO_ROWS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCBDDC); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NO_OFF_PROC_ZERO_ROWS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BDDC, __pyx_t_8) < 0) __PYX_ERR(34, 45, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":87
- *     SPD                         = MAT_SPD
- *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
- *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES             # <<<<<<<<<<<<<<
- *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
+  /* "PETSc/PC.pyx":46
+ *     AINVCUSP     = S_(PCAINVCUSP)
+ *     BDDC         = S_(PCBDDC)
+ *     KACZMARZ     = S_(PCKACZMARZ)             # <<<<<<<<<<<<<<
+ *     TELESCOPE    = S_(PCTELESCOPE)
  * 
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_NO_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCKACZMARZ); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NO_OFF_PROC_ENTRIES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KACZMARZ, __pyx_t_8) < 0) __PYX_ERR(34, 46, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":88
- *     NO_OFF_PROC_ZERO_ROWS       = MAT_NO_OFF_PROC_ZERO_ROWS
- *     NO_OFF_PROC_ENTRIES         = MAT_NO_OFF_PROC_ENTRIES
- *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS             # <<<<<<<<<<<<<<
+  /* "PETSc/PC.pyx":47
+ *     BDDC         = S_(PCBDDC)
+ *     KACZMARZ     = S_(PCKACZMARZ)
+ *     TELESCOPE    = S_(PCTELESCOPE)             # <<<<<<<<<<<<<<
  * 
- * class MatAssemblyType(object):
+ * class PCSide(object):
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_NEW_NONZERO_LOCATIONS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCTELESCOPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEW_NONZERO_LOCATIONS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TELESCOPE, __pyx_t_8) < 0) __PYX_ERR(34, 47, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":66
- *     NEST            = S_(MATNEST)
+  /* "PETSc/PC.pyx":3
+ * # --------------------------------------------------------------------
  * 
- * class MatOption(object):             # <<<<<<<<<<<<<<
- *     NEW_NONZERO_LOCATION_ERR    = MAT_NEW_NONZERO_LOCATION_ERR
- *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
+ * class PCType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NONE         = S_(PCNONE)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatOption, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatOption, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCType, __pyx_t_8) < 0) __PYX_ERR(34, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":90
- *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
+  /* "PETSc/PC.pyx":49
+ *     TELESCOPE    = S_(PCTELESCOPE)
  * 
- * class MatAssemblyType(object):             # <<<<<<<<<<<<<<
+ * class PCSide(object):             # <<<<<<<<<<<<<<
  *     # native
- *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
+ *     LEFT      = PC_LEFT
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatAssemblyType, __pyx_n_s_MatAssemblyType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCSide, __pyx_n_s_PCSide, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":92
- * class MatAssemblyType(object):
+  /* "PETSc/PC.pyx":51
+ * class PCSide(object):
  *     # native
- *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
- *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY
- *     # aliases
+ *     LEFT      = PC_LEFT             # <<<<<<<<<<<<<<
+ *     RIGHT     = PC_RIGHT
+ *     SYMMETRIC = PC_SYMMETRIC
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_FINAL_ASSEMBLY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCSide(PC_LEFT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FINAL_ASSEMBLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LEFT, __pyx_t_8) < 0) __PYX_ERR(34, 51, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":93
+  /* "PETSc/PC.pyx":52
  *     # native
- *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
- *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY             # <<<<<<<<<<<<<<
+ *     LEFT      = PC_LEFT
+ *     RIGHT     = PC_RIGHT             # <<<<<<<<<<<<<<
+ *     SYMMETRIC = PC_SYMMETRIC
  *     # aliases
- *     FINAL = FINAL_ASSEMBLY
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_FLUSH_ASSEMBLY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCSide(PC_RIGHT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FLUSH_ASSEMBLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RIGHT, __pyx_t_8) < 0) __PYX_ERR(34, 52, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":95
- *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY
+  /* "PETSc/PC.pyx":53
+ *     LEFT      = PC_LEFT
+ *     RIGHT     = PC_RIGHT
+ *     SYMMETRIC = PC_SYMMETRIC             # <<<<<<<<<<<<<<
  *     # aliases
- *     FINAL = FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
- *     FLUSH = FLUSH_ASSEMBLY
- * 
+ *     L = LEFT
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_FINAL_ASSEMBLY);
+  __pyx_t_8 = __Pyx_PyInt_From_PCSide(PC_SYMMETRIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC, __pyx_t_8) < 0) __PYX_ERR(34, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/PC.pyx":55
+ *     SYMMETRIC = PC_SYMMETRIC
+ *     # aliases
+ *     L = LEFT             # <<<<<<<<<<<<<<
+ *     R = RIGHT
+ *     S = SYMMETRIC
+ */
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_LEFT);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_FINAL_ASSEMBLY);
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_LEFT);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FINAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_L, __pyx_t_8) < 0) __PYX_ERR(34, 55, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":96
+  /* "PETSc/PC.pyx":56
  *     # aliases
- *     FINAL = FINAL_ASSEMBLY
- *     FLUSH = FLUSH_ASSEMBLY             # <<<<<<<<<<<<<<
+ *     L = LEFT
+ *     R = RIGHT             # <<<<<<<<<<<<<<
+ *     S = SYMMETRIC
  * 
- * class MatStructure(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_FLUSH_ASSEMBLY);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_RIGHT);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_FLUSH_ASSEMBLY);
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_RIGHT);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FLUSH, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_R, __pyx_t_8) < 0) __PYX_ERR(34, 56, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":90
- *     NEW_NONZERO_LOCATIONS       = MAT_NEW_NONZERO_LOCATIONS
+  /* "PETSc/PC.pyx":57
+ *     L = LEFT
+ *     R = RIGHT
+ *     S = SYMMETRIC             # <<<<<<<<<<<<<<
  * 
- * class MatAssemblyType(object):             # <<<<<<<<<<<<<<
+ * class PCASMType(object):
+ */
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SYMMETRIC);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_S, __pyx_t_8) < 0) __PYX_ERR(34, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/PC.pyx":49
+ *     TELESCOPE    = S_(PCTELESCOPE)
+ * 
+ * class PCSide(object):             # <<<<<<<<<<<<<<
  *     # native
- *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
+ *     LEFT      = PC_LEFT
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatAssemblyType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCSide, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatAssemblyType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCSide, __pyx_t_8) < 0) __PYX_ERR(34, 49, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":98
- *     FLUSH = FLUSH_ASSEMBLY
+  /* "PETSc/PC.pyx":59
+ *     S = SYMMETRIC
  * 
- * class MatStructure(object):             # <<<<<<<<<<<<<<
- *     # native
- *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
+ * class PCASMType(object):             # <<<<<<<<<<<<<<
+ *     NONE        = PC_ASM_NONE
+ *     BASIC       = PC_ASM_BASIC
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatStructure, __pyx_n_s_MatStructure, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCASMType, __pyx_n_s_PCASMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":100
- * class MatStructure(object):
- *     # native
- *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     DIFFERENT_NONZERO_PATTERN = MAT_DIFFERENT_NONZERO_PATTERN
- *     SUBSET_NONZERO_PATTERN    = MAT_SUBSET_NONZERO_PATTERN
+  /* "PETSc/PC.pyx":60
+ * 
+ * class PCASMType(object):
+ *     NONE        = PC_ASM_NONE             # <<<<<<<<<<<<<<
+ *     BASIC       = PC_ASM_BASIC
+ *     RESTRICT    = PC_ASM_RESTRICT
  */
-  __pyx_t_8 = PyInt_FromLong(SAME_NONZERO_PATTERN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCASMType(PC_ASM_NONE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME_NONZERO_PATTERN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) __PYX_ERR(34, 60, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":101
- *     # native
- *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
- *     DIFFERENT_NONZERO_PATTERN = MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     SUBSET_NONZERO_PATTERN    = MAT_SUBSET_NONZERO_PATTERN
- *     # aliases
+  /* "PETSc/PC.pyx":61
+ * class PCASMType(object):
+ *     NONE        = PC_ASM_NONE
+ *     BASIC       = PC_ASM_BASIC             # <<<<<<<<<<<<<<
+ *     RESTRICT    = PC_ASM_RESTRICT
+ *     INTERPOLATE = PC_ASM_INTERPOLATE
  */
-  __pyx_t_8 = PyInt_FromLong(DIFFERENT_NONZERO_PATTERN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCASMType(PC_ASM_BASIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 61, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NONZERO_PATTERN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BASIC, __pyx_t_8) < 0) __PYX_ERR(34, 61, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":102
- *     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
+  /* "PETSc/PC.pyx":62
+ *     NONE        = PC_ASM_NONE
+ *     BASIC       = PC_ASM_BASIC
+ *     RESTRICT    = PC_ASM_RESTRICT             # <<<<<<<<<<<<<<
+ *     INTERPOLATE = PC_ASM_INTERPOLATE
+ * 
  */
-  __pyx_t_8 = PyInt_FromLong(SUBSET_NONZERO_PATTERN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCASMType(PC_ASM_RESTRICT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 62, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET_NONZERO_PATTERN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RESTRICT, __pyx_t_8) < 0) __PYX_ERR(34, 62, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":104
- *     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
+  /* "PETSc/PC.pyx":63
+ *     BASIC       = PC_ASM_BASIC
+ *     RESTRICT    = PC_ASM_RESTRICT
+ *     INTERPOLATE = PC_ASM_INTERPOLATE             # <<<<<<<<<<<<<<
+ * 
+ * class PCGASMType(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SAME_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SAME_NONZERO_PATTERN);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCASMType(PC_ASM_INTERPOLATE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME_NZ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERPOLATE, __pyx_t_8) < 0) __PYX_ERR(34, 63, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":105
- *     # aliases
- *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
- *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
+  /* "PETSc/PC.pyx":59
+ *     S = SYMMETRIC
  * 
+ * class PCASMType(object):             # <<<<<<<<<<<<<<
+ *     NONE        = PC_ASM_NONE
+ *     BASIC       = PC_ASM_BASIC
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SUBSET_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SUBSET_NONZERO_PATTERN);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCASMType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET_NZ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCASMType, __pyx_t_8) < 0) __PYX_ERR(34, 59, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":106
- *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
- *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN
- *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+  /* "PETSc/PC.pyx":65
+ *     INTERPOLATE = PC_ASM_INTERPOLATE
  * 
- * class MatOrderingType(object):
+ * class PCGASMType(object):             # <<<<<<<<<<<<<<
+ *     NONE        = PC_GASM_NONE
+ *     BASIC       = PC_GASM_BASIC
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DIFFERENT_NONZERO_PATTERN);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCGASMType, __pyx_n_s_PCGASMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "PETSc/PC.pyx":66
+ * 
+ * class PCGASMType(object):
+ *     NONE        = PC_GASM_NONE             # <<<<<<<<<<<<<<
+ *     BASIC       = PC_GASM_BASIC
+ *     RESTRICT    = PC_GASM_RESTRICT
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_PCGASMType(PC_GASM_NONE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 66, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NZ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) __PYX_ERR(34, 66, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":98
- *     FLUSH = FLUSH_ASSEMBLY
+  /* "PETSc/PC.pyx":67
+ * class PCGASMType(object):
+ *     NONE        = PC_GASM_NONE
+ *     BASIC       = PC_GASM_BASIC             # <<<<<<<<<<<<<<
+ *     RESTRICT    = PC_GASM_RESTRICT
+ *     INTERPOLATE = PC_GASM_INTERPOLATE
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_PCGASMType(PC_GASM_BASIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BASIC, __pyx_t_8) < 0) __PYX_ERR(34, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/PC.pyx":68
+ *     NONE        = PC_GASM_NONE
+ *     BASIC       = PC_GASM_BASIC
+ *     RESTRICT    = PC_GASM_RESTRICT             # <<<<<<<<<<<<<<
+ *     INTERPOLATE = PC_GASM_INTERPOLATE
  * 
- * class MatStructure(object):             # <<<<<<<<<<<<<<
- *     # native
- *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatStructure, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCGASMType(PC_GASM_RESTRICT); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RESTRICT, __pyx_t_8) < 0) __PYX_ERR(34, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/PC.pyx":69
+ *     BASIC       = PC_GASM_BASIC
+ *     RESTRICT    = PC_GASM_RESTRICT
+ *     INTERPOLATE = PC_GASM_INTERPOLATE             # <<<<<<<<<<<<<<
+ * 
+ * class PCMGType(object):
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_PCGASMType(PC_GASM_INTERPOLATE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERPOLATE, __pyx_t_8) < 0) __PYX_ERR(34, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/PC.pyx":65
+ *     INTERPOLATE = PC_ASM_INTERPOLATE
+ * 
+ * class PCGASMType(object):             # <<<<<<<<<<<<<<
+ *     NONE        = PC_GASM_NONE
+ *     BASIC       = PC_GASM_BASIC
+ */
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCGASMType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatStructure, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCGASMType, __pyx_t_8) < 0) __PYX_ERR(34, 65, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":108
- *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
+  /* "PETSc/PC.pyx":71
+ *     INTERPOLATE = PC_GASM_INTERPOLATE
  * 
- * class MatOrderingType(object):             # <<<<<<<<<<<<<<
- *     NATURAL     = S_(MATORDERINGNATURAL)
- *     ND          = S_(MATORDERINGND)
+ * class PCMGType(object):             # <<<<<<<<<<<<<<
+ *     MULTIPLICATIVE = PC_MG_MULTIPLICATIVE
+ *     ADDITIVE       = PC_MG_ADDITIVE
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 71, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 71, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatOrderingType, __pyx_n_s_MatOrderingType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCMGType, __pyx_n_s_PCMGType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 71, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":109
+  /* "PETSc/PC.pyx":72
  * 
- * class MatOrderingType(object):
- *     NATURAL     = S_(MATORDERINGNATURAL)             # <<<<<<<<<<<<<<
- *     ND          = S_(MATORDERINGND)
- *     OWD         = S_(MATORDERING1WD)
+ * class PCMGType(object):
+ *     MULTIPLICATIVE = PC_MG_MULTIPLICATIVE             # <<<<<<<<<<<<<<
+ *     ADDITIVE       = PC_MG_ADDITIVE
+ *     FULL           = PC_MG_FULL
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGNATURAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCMGType(PC_MG_MULTIPLICATIVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 72, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NATURAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MULTIPLICATIVE, __pyx_t_8) < 0) __PYX_ERR(34, 72, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":110
- * class MatOrderingType(object):
- *     NATURAL     = S_(MATORDERINGNATURAL)
- *     ND          = S_(MATORDERINGND)             # <<<<<<<<<<<<<<
- *     OWD         = S_(MATORDERING1WD)
- *     RCM         = S_(MATORDERINGRCM)
+  /* "PETSc/PC.pyx":73
+ * class PCMGType(object):
+ *     MULTIPLICATIVE = PC_MG_MULTIPLICATIVE
+ *     ADDITIVE       = PC_MG_ADDITIVE             # <<<<<<<<<<<<<<
+ *     FULL           = PC_MG_FULL
+ *     KASKADE        = PC_MG_KASKADE
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGND); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCMGType(PC_MG_ADDITIVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 73, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ND, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADDITIVE, __pyx_t_8) < 0) __PYX_ERR(34, 73, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":111
- *     NATURAL     = S_(MATORDERINGNATURAL)
- *     ND          = S_(MATORDERINGND)
- *     OWD         = S_(MATORDERING1WD)             # <<<<<<<<<<<<<<
- *     RCM         = S_(MATORDERINGRCM)
- *     QMD         = S_(MATORDERINGQMD)
+  /* "PETSc/PC.pyx":74
+ *     MULTIPLICATIVE = PC_MG_MULTIPLICATIVE
+ *     ADDITIVE       = PC_MG_ADDITIVE
+ *     FULL           = PC_MG_FULL             # <<<<<<<<<<<<<<
+ *     KASKADE        = PC_MG_KASKADE
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERING1WD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCMGType(PC_MG_FULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_OWD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_8) < 0) __PYX_ERR(34, 74, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":112
- *     ND          = S_(MATORDERINGND)
- *     OWD         = S_(MATORDERING1WD)
- *     RCM         = S_(MATORDERINGRCM)             # <<<<<<<<<<<<<<
- *     QMD         = S_(MATORDERINGQMD)
- *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
+  /* "PETSc/PC.pyx":75
+ *     ADDITIVE       = PC_MG_ADDITIVE
+ *     FULL           = PC_MG_FULL
+ *     KASKADE        = PC_MG_KASKADE             # <<<<<<<<<<<<<<
+ * 
+ * class PCGAMGType(object):
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGRCM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCMGType(PC_MG_KASKADE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RCM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KASKADE, __pyx_t_8) < 0) __PYX_ERR(34, 75, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":113
- *     OWD         = S_(MATORDERING1WD)
- *     RCM         = S_(MATORDERINGRCM)
- *     QMD         = S_(MATORDERINGQMD)             # <<<<<<<<<<<<<<
- *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
- *     AMD         = S_(MATORDERINGAMD)
+  /* "PETSc/PC.pyx":71
+ *     INTERPOLATE = PC_GASM_INTERPOLATE
+ * 
+ * class PCMGType(object):             # <<<<<<<<<<<<<<
+ *     MULTIPLICATIVE = PC_MG_MULTIPLICATIVE
+ *     ADDITIVE       = PC_MG_ADDITIVE
+ */
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCMGType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCMGType, __pyx_t_8) < 0) __PYX_ERR(34, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/PC.pyx":77
+ *     KASKADE        = PC_MG_KASKADE
+ * 
+ * class PCGAMGType(object):             # <<<<<<<<<<<<<<
+ *     AGG       = S_(PCGAMGAGG)
+ *     GEO       = S_(PCGAMGGEO)
+ */
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCGAMGType, __pyx_n_s_PCGAMGType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "PETSc/PC.pyx":78
+ * 
+ * class PCGAMGType(object):
+ *     AGG       = S_(PCGAMGAGG)             # <<<<<<<<<<<<<<
+ *     GEO       = S_(PCGAMGGEO)
+ *     CLASSICAL = S_(PCGAMGCLASSICAL)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGQMD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGAGG); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 78, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QMD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AGG, __pyx_t_8) < 0) __PYX_ERR(34, 78, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":114
- *     RCM         = S_(MATORDERINGRCM)
- *     QMD         = S_(MATORDERINGQMD)
- *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)             # <<<<<<<<<<<<<<
- *     AMD         = S_(MATORDERINGAMD)
+  /* "PETSc/PC.pyx":79
+ * class PCGAMGType(object):
+ *     AGG       = S_(PCGAMGAGG)
+ *     GEO       = S_(PCGAMGGEO)             # <<<<<<<<<<<<<<
+ *     CLASSICAL = S_(PCGAMGCLASSICAL)
  * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGROWLENGTH); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGGEO); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 79, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ROWLENGTH, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GEO, __pyx_t_8) < 0) __PYX_ERR(34, 79, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":115
- *     QMD         = S_(MATORDERINGQMD)
- *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
- *     AMD         = S_(MATORDERINGAMD)             # <<<<<<<<<<<<<<
+  /* "PETSc/PC.pyx":80
+ *     AGG       = S_(PCGAMGAGG)
+ *     GEO       = S_(PCGAMGGEO)
+ *     CLASSICAL = S_(PCGAMGCLASSICAL)             # <<<<<<<<<<<<<<
  * 
- * class MatFactorShiftType(object):
+ * class PCCompositeType(object):
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGAMD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGCLASSICAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 80, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AMD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CLASSICAL, __pyx_t_8) < 0) __PYX_ERR(34, 80, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":108
- *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
+  /* "PETSc/PC.pyx":77
+ *     KASKADE        = PC_MG_KASKADE
  * 
- * class MatOrderingType(object):             # <<<<<<<<<<<<<<
- *     NATURAL     = S_(MATORDERINGNATURAL)
- *     ND          = S_(MATORDERINGND)
+ * class PCGAMGType(object):             # <<<<<<<<<<<<<<
+ *     AGG       = S_(PCGAMGAGG)
+ *     GEO       = S_(PCGAMGGEO)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatOrderingType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCGAMGType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 77, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatOrderingType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCGAMGType, __pyx_t_8) < 0) __PYX_ERR(34, 77, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":117
- *     AMD         = S_(MATORDERINGAMD)
+  /* "PETSc/PC.pyx":82
+ *     CLASSICAL = S_(PCGAMGCLASSICAL)
  * 
- * class MatFactorShiftType(object):             # <<<<<<<<<<<<<<
- *     # native
- *     NONE              = MAT_SHIFT_NONE
+ * class PCCompositeType(object):             # <<<<<<<<<<<<<<
+ *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
+ *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatFactorShiftType, __pyx_n_s_MatFactorShiftType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCCompositeType, __pyx_n_s_PCCompositeType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":119
- * class MatFactorShiftType(object):
- *     # native
- *     NONE              = MAT_SHIFT_NONE             # <<<<<<<<<<<<<<
- *     NONZERO           = MAT_SHIFT_NONZERO
- *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
- */
-  __pyx_t_8 = PyInt_FromLong(MAT_SHIFT_NONE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/Mat.pyx":120
- *     # native
- *     NONE              = MAT_SHIFT_NONE
- *     NONZERO           = MAT_SHIFT_NONZERO             # <<<<<<<<<<<<<<
- *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
- *     INBLOCKS          = MAT_SHIFT_INBLOCKS
+  /* "PETSc/PC.pyx":83
+ * 
+ * class PCCompositeType(object):
+ *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE             # <<<<<<<<<<<<<<
+ *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
+ *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_SHIFT_NONZERO); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_ADDITIVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 83, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONZERO, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADDITIVE, __pyx_t_8) < 0) __PYX_ERR(34, 83, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":121
- *     NONE              = MAT_SHIFT_NONE
- *     NONZERO           = MAT_SHIFT_NONZERO
- *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE             # <<<<<<<<<<<<<<
- *     INBLOCKS          = MAT_SHIFT_INBLOCKS
- *     # aliases
+  /* "PETSc/PC.pyx":84
+ * class PCCompositeType(object):
+ *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
+ *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE             # <<<<<<<<<<<<<<
+ *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
+ *     SPECIAL                  = PC_COMPOSITE_SPECIAL
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_SHIFT_POSITIVE_DEFINITE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_MULTIPLICATIVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 84, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_POSITIVE_DEFINITE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MULTIPLICATIVE, __pyx_t_8) < 0) __PYX_ERR(34, 84, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":122
- *     NONZERO           = MAT_SHIFT_NONZERO
- *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
- *     INBLOCKS          = MAT_SHIFT_INBLOCKS             # <<<<<<<<<<<<<<
- *     # aliases
- *     NZ = MAT_SHIFT_NONZERO
+  /* "PETSc/PC.pyx":85
+ *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
+ *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
+ *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE             # <<<<<<<<<<<<<<
+ *     SPECIAL                  = PC_COMPOSITE_SPECIAL
+ *     SCHUR                    = PC_COMPOSITE_SCHUR
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_SHIFT_INBLOCKS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INBLOCKS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC_MULTIPLICATIVE, __pyx_t_8) < 0) __PYX_ERR(34, 85, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":124
- *     INBLOCKS          = MAT_SHIFT_INBLOCKS
- *     # aliases
- *     NZ = MAT_SHIFT_NONZERO             # <<<<<<<<<<<<<<
- *     PD = MAT_SHIFT_POSITIVE_DEFINITE
+  /* "PETSc/PC.pyx":86
+ *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
+ *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
+ *     SPECIAL                  = PC_COMPOSITE_SPECIAL             # <<<<<<<<<<<<<<
+ *     SCHUR                    = PC_COMPOSITE_SCHUR
  * 
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_SHIFT_NONZERO); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_SPECIAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 86, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NZ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPECIAL, __pyx_t_8) < 0) __PYX_ERR(34, 86, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":125
- *     # aliases
- *     NZ = MAT_SHIFT_NONZERO
- *     PD = MAT_SHIFT_POSITIVE_DEFINITE             # <<<<<<<<<<<<<<
+  /* "PETSc/PC.pyx":87
+ *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
+ *     SPECIAL                  = PC_COMPOSITE_SPECIAL
+ *     SCHUR                    = PC_COMPOSITE_SCHUR             # <<<<<<<<<<<<<<
  * 
- * class MatSORType(object):
+ * class PCFieldSplitSchurPreType(object):
  */
-  __pyx_t_8 = PyInt_FromLong(MAT_SHIFT_POSITIVE_DEFINITE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_SCHUR); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 87, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCHUR, __pyx_t_8) < 0) __PYX_ERR(34, 87, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":117
- *     AMD         = S_(MATORDERINGAMD)
+  /* "PETSc/PC.pyx":82
+ *     CLASSICAL = S_(PCGAMGCLASSICAL)
  * 
- * class MatFactorShiftType(object):             # <<<<<<<<<<<<<<
- *     # native
- *     NONE              = MAT_SHIFT_NONE
+ * class PCCompositeType(object):             # <<<<<<<<<<<<<<
+ *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
+ *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatFactorShiftType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCCompositeType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatFactorShiftType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCCompositeType, __pyx_t_8) < 0) __PYX_ERR(34, 82, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":127
- *     PD = MAT_SHIFT_POSITIVE_DEFINITE
+  /* "PETSc/PC.pyx":89
+ *     SCHUR                    = PC_COMPOSITE_SCHUR
  * 
- * class MatSORType(object):             # <<<<<<<<<<<<<<
- *     FORWARD_SWEEP        = SOR_FORWARD_SWEEP
- *     BACKWARD_SWEEP       = SOR_BACKWARD_SWEEP
+ * class PCFieldSplitSchurPreType(object):             # <<<<<<<<<<<<<<
+ *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
+ *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 89, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 89, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_MatSORType, __pyx_n_s_MatSORType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_n_s_PCFieldSplitSchurPreType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 89, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":128
+  /* "PETSc/PC.pyx":90
  * 
- * class MatSORType(object):
- *     FORWARD_SWEEP        = SOR_FORWARD_SWEEP             # <<<<<<<<<<<<<<
- *     BACKWARD_SWEEP       = SOR_BACKWARD_SWEEP
- *     SYMMETRY_SWEEP       = SOR_SYMMETRIC_SWEEP
+ * class PCFieldSplitSchurPreType(object):
+ *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF             # <<<<<<<<<<<<<<
+ *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
+ *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_FORWARD_SWEEP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_SELF); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FORWARD_SWEEP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SELF, __pyx_t_8) < 0) __PYX_ERR(34, 90, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":129
- * class MatSORType(object):
- *     FORWARD_SWEEP        = SOR_FORWARD_SWEEP
- *     BACKWARD_SWEEP       = SOR_BACKWARD_SWEEP             # <<<<<<<<<<<<<<
- *     SYMMETRY_SWEEP       = SOR_SYMMETRIC_SWEEP
- *     LOCAL_FORWARD_SWEEP  = SOR_LOCAL_FORWARD_SWEEP
+  /* "PETSc/PC.pyx":91
+ * class PCFieldSplitSchurPreType(object):
+ *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
+ *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP             # <<<<<<<<<<<<<<
+ *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
+ *     USER                     = PC_FIELDSPLIT_SCHUR_PRE_USER
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_BACKWARD_SWEEP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_SELFP); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 91, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BACKWARD_SWEEP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SELFP, __pyx_t_8) < 0) __PYX_ERR(34, 91, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":130
- *     FORWARD_SWEEP        = SOR_FORWARD_SWEEP
- *     BACKWARD_SWEEP       = SOR_BACKWARD_SWEEP
- *     SYMMETRY_SWEEP       = SOR_SYMMETRIC_SWEEP             # <<<<<<<<<<<<<<
- *     LOCAL_FORWARD_SWEEP  = SOR_LOCAL_FORWARD_SWEEP
- *     LOCAL_BACKWARD_SWEEP = SOR_LOCAL_BACKWARD_SWEEP
+  /* "PETSc/PC.pyx":92
+ *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
+ *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
+ *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11             # <<<<<<<<<<<<<<
+ *     USER                     = PC_FIELDSPLIT_SCHUR_PRE_USER
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_SYMMETRIC_SWEEP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_A11); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 92, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRY_SWEEP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_A11, __pyx_t_8) < 0) __PYX_ERR(34, 92, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":131
- *     BACKWARD_SWEEP       = SOR_BACKWARD_SWEEP
- *     SYMMETRY_SWEEP       = SOR_SYMMETRIC_SWEEP
- *     LOCAL_FORWARD_SWEEP  = SOR_LOCAL_FORWARD_SWEEP             # <<<<<<<<<<<<<<
- *     LOCAL_BACKWARD_SWEEP = SOR_LOCAL_BACKWARD_SWEEP
- *     ZERO_INITIAL_GUESS   = SOR_ZERO_INITIAL_GUESS
+  /* "PETSc/PC.pyx":93
+ *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
+ *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
+ *     USER                     = PC_FIELDSPLIT_SCHUR_PRE_USER             # <<<<<<<<<<<<<<
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
+ * 
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_USER); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_8) < 0) __PYX_ERR(34, 93, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/PC.pyx":94
+ *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
+ *     USER                     = PC_FIELDSPLIT_SCHUR_PRE_USER
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL             # <<<<<<<<<<<<<<
+ * 
+ * class PCFieldSplitSchurFactType(object):
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_FULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 94, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_8) < 0) __PYX_ERR(34, 94, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/PC.pyx":89
+ *     SCHUR                    = PC_COMPOSITE_SCHUR
+ * 
+ * class PCFieldSplitSchurPreType(object):             # <<<<<<<<<<<<<<
+ *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
+ *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_LOCAL_FORWARD_SWEEP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 89, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCAL_FORWARD_SWEEP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_t_8) < 0) __PYX_ERR(34, 89, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":132
- *     SYMMETRY_SWEEP       = SOR_SYMMETRIC_SWEEP
- *     LOCAL_FORWARD_SWEEP  = SOR_LOCAL_FORWARD_SWEEP
- *     LOCAL_BACKWARD_SWEEP = SOR_LOCAL_BACKWARD_SWEEP             # <<<<<<<<<<<<<<
- *     ZERO_INITIAL_GUESS   = SOR_ZERO_INITIAL_GUESS
- *     EISENSTAT            = SOR_EISENSTAT
+  /* "PETSc/PC.pyx":96
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
+ * 
+ * class PCFieldSplitSchurFactType(object):             # <<<<<<<<<<<<<<
+ *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
+ *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_LOCAL_BACKWARD_SWEEP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCAL_BACKWARD_SWEEP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 96, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 96, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_n_s_PCFieldSplitSchurFactType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 96, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/Mat.pyx":133
- *     LOCAL_FORWARD_SWEEP  = SOR_LOCAL_FORWARD_SWEEP
- *     LOCAL_BACKWARD_SWEEP = SOR_LOCAL_BACKWARD_SWEEP
- *     ZERO_INITIAL_GUESS   = SOR_ZERO_INITIAL_GUESS             # <<<<<<<<<<<<<<
- *     EISENSTAT            = SOR_EISENSTAT
- *     APPLY_UPPER          = SOR_APPLY_UPPER
+  /* "PETSc/PC.pyx":97
+ * 
+ * class PCFieldSplitSchurFactType(object):
+ *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG             # <<<<<<<<<<<<<<
+ *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
+ *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_ZERO_INITIAL_GUESS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurFactType(PC_FIELDSPLIT_SCHUR_FACT_DIAG); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 97, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ZERO_INITIAL_GUESS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIAG, __pyx_t_8) < 0) __PYX_ERR(34, 97, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":134
- *     LOCAL_BACKWARD_SWEEP = SOR_LOCAL_BACKWARD_SWEEP
- *     ZERO_INITIAL_GUESS   = SOR_ZERO_INITIAL_GUESS
- *     EISENSTAT            = SOR_EISENSTAT             # <<<<<<<<<<<<<<
- *     APPLY_UPPER          = SOR_APPLY_UPPER
- *     APPLY_LOWER          = SOR_APPLY_LOWER
+  /* "PETSc/PC.pyx":98
+ * class PCFieldSplitSchurFactType(object):
+ *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
+ *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER             # <<<<<<<<<<<<<<
+ *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_FACT_FULL
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_EISENSTAT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurFactType(PC_FIELDSPLIT_SCHUR_FACT_LOWER); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 98, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EISENSTAT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOWER, __pyx_t_8) < 0) __PYX_ERR(34, 98, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":135
- *     ZERO_INITIAL_GUESS   = SOR_ZERO_INITIAL_GUESS
- *     EISENSTAT            = SOR_EISENSTAT
- *     APPLY_UPPER          = SOR_APPLY_UPPER             # <<<<<<<<<<<<<<
- *     APPLY_LOWER          = SOR_APPLY_LOWER
+  /* "PETSc/PC.pyx":99
+ *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
+ *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
+ *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER             # <<<<<<<<<<<<<<
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_FACT_FULL
  * 
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_APPLY_UPPER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurFactType(PC_FIELDSPLIT_SCHUR_FACT_UPPER); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 99, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_APPLY_UPPER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UPPER, __pyx_t_8) < 0) __PYX_ERR(34, 99, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":136
- *     EISENSTAT            = SOR_EISENSTAT
- *     APPLY_UPPER          = SOR_APPLY_UPPER
- *     APPLY_LOWER          = SOR_APPLY_LOWER             # <<<<<<<<<<<<<<
+  /* "PETSc/PC.pyx":100
+ *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
+ *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_FACT_FULL             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = PyInt_FromLong(SOR_APPLY_LOWER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_PCFieldSplitSchurFactType(PC_FIELDSPLIT_SCHUR_FACT_FULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_APPLY_LOWER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_8) < 0) __PYX_ERR(34, 100, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":127
- *     PD = MAT_SHIFT_POSITIVE_DEFINITE
+  /* "PETSc/PC.pyx":96
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
  * 
- * class MatSORType(object):             # <<<<<<<<<<<<<<
- *     FORWARD_SWEEP        = SOR_FORWARD_SWEEP
- *     BACKWARD_SWEEP       = SOR_BACKWARD_SWEEP
+ * class PCFieldSplitSchurFactType(object):             # <<<<<<<<<<<<<<
+ *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
+ *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatSORType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatSORType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_t_8) < 0) __PYX_ERR(34, 96, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":142
- * cdef class Mat(Object):
+  /* "PETSc/PC.pyx":106
+ * cdef class PC(Object):
+ * 
+ *     Type = PCType             # <<<<<<<<<<<<<<
+ *     Side = PCSide
  * 
- *     Type            = MatType             # <<<<<<<<<<<<<<
- *     Option          = MatOption
- *     AssemblyType    = MatAssemblyType
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCType); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(34, 106, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":143
+  /* "PETSc/PC.pyx":107
  * 
- *     Type            = MatType
- *     Option          = MatOption             # <<<<<<<<<<<<<<
- *     AssemblyType    = MatAssemblyType
- *     Structure       = MatStructure
+ *     Type = PCType
+ *     Side = PCSide             # <<<<<<<<<<<<<<
+ * 
+ *     ASMType       = PCASMType
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatOption); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCSide); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 107, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Option, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_Side, __pyx_t_3) < 0) __PYX_ERR(34, 107, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":144
- *     Type            = MatType
- *     Option          = MatOption
- *     AssemblyType    = MatAssemblyType             # <<<<<<<<<<<<<<
- *     Structure       = MatStructure
- *     OrderingType    = MatOrderingType
+  /* "PETSc/PC.pyx":109
+ *     Side = PCSide
+ * 
+ *     ASMType       = PCASMType             # <<<<<<<<<<<<<<
+ *     GASMType      = PCGASMType
+ *     MGType        = PCMGType
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatAssemblyType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCASMType); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_AssemblyType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_ASMType, __pyx_t_3) < 0) __PYX_ERR(34, 109, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":145
- *     Option          = MatOption
- *     AssemblyType    = MatAssemblyType
- *     Structure       = MatStructure             # <<<<<<<<<<<<<<
- *     OrderingType    = MatOrderingType
- *     FactorShiftType = MatFactorShiftType
+  /* "PETSc/PC.pyx":110
+ * 
+ *     ASMType       = PCASMType
+ *     GASMType      = PCGASMType             # <<<<<<<<<<<<<<
+ *     MGType        = PCMGType
+ *     GAMGType      = PCGAMGType
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatStructure); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCGASMType); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Structure, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_GASMType, __pyx_t_3) < 0) __PYX_ERR(34, 110, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":146
- *     AssemblyType    = MatAssemblyType
- *     Structure       = MatStructure
- *     OrderingType    = MatOrderingType             # <<<<<<<<<<<<<<
- *     FactorShiftType = MatFactorShiftType
- *     SORType         = MatSORType
+  /* "PETSc/PC.pyx":111
+ *     ASMType       = PCASMType
+ *     GASMType      = PCGASMType
+ *     MGType        = PCMGType             # <<<<<<<<<<<<<<
+ *     GAMGType      = PCGAMGType
+ *     CompositeType = PCCompositeType
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatOrderingType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCMGType); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_OrderingType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_MGType, __pyx_t_3) < 0) __PYX_ERR(34, 111, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":147
- *     Structure       = MatStructure
- *     OrderingType    = MatOrderingType
- *     FactorShiftType = MatFactorShiftType             # <<<<<<<<<<<<<<
- *     SORType         = MatSORType
- *     #
+  /* "PETSc/PC.pyx":112
+ *     GASMType      = PCGASMType
+ *     MGType        = PCMGType
+ *     GAMGType      = PCGAMGType             # <<<<<<<<<<<<<<
+ *     CompositeType = PCCompositeType
+ *     SchurFactType = PCFieldSplitSchurFactType
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatFactorShiftType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCGAMGType); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_FactorShiftType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_GAMGType, __pyx_t_3) < 0) __PYX_ERR(34, 112, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":148
- *     OrderingType    = MatOrderingType
- *     FactorShiftType = MatFactorShiftType
- *     SORType         = MatSORType             # <<<<<<<<<<<<<<
- *     #
- * 
+  /* "PETSc/PC.pyx":113
+ *     MGType        = PCMGType
+ *     GAMGType      = PCGAMGType
+ *     CompositeType = PCCompositeType             # <<<<<<<<<<<<<<
+ *     SchurFactType = PCFieldSplitSchurFactType
+ *     SchurPreType  = PCFieldSplitSchurPreType
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatSORType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCCompositeType); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_SORType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_CompositeType, __pyx_t_3) < 0) __PYX_ERR(34, 113, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
-
-  /* "PETSc/Mat.pyx":866
- *     #
- * 
- *     Stencil = _Mat_Stencil             # <<<<<<<<<<<<<<
- * 
- *     def setStencil(self, dims, starts=None, dof=1):
- */
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Stencil, ((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc__Mat_Stencil))) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":979
- *         return vecl
+  /* "PETSc/PC.pyx":114
+ *     GAMGType      = PCGAMGType
+ *     CompositeType = PCCompositeType
+ *     SchurFactType = PCFieldSplitSchurFactType             # <<<<<<<<<<<<<<
+ *     SchurPreType  = PCFieldSplitSchurPreType
  * 
- *     getVecs = createVecs             # <<<<<<<<<<<<<<
- *     getVecRight = createVecRight
- *     getVecLeft = createVecLeft
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecs); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 979; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCFieldSplitSchurFactType); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecs, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 979; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_SchurFactType, __pyx_t_3) < 0) __PYX_ERR(34, 114, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":980
- * 
- *     getVecs = createVecs
- *     getVecRight = createVecRight             # <<<<<<<<<<<<<<
- *     getVecLeft = createVecLeft
+  /* "PETSc/PC.pyx":115
+ *     CompositeType = PCCompositeType
+ *     SchurFactType = PCFieldSplitSchurFactType
+ *     SchurPreType  = PCFieldSplitSchurPreType             # <<<<<<<<<<<<<<
  * 
+ *     # --- xxx ---
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecRight); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 980; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCFieldSplitSchurPreType); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 115, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecRight, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 980; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_SchurPreType, __pyx_t_3) < 0) __PYX_ERR(34, 115, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/Mat.pyx":981
- *     getVecs = createVecs
- *     getVecRight = createVecRight
- *     getVecLeft = createVecLeft             # <<<<<<<<<<<<<<
+  /* "PETSc/PC.pyx":574
+ * # --------------------------------------------------------------------
  * 
- *     #
+ * del PCType             # <<<<<<<<<<<<<<
+ * del PCSide
+ * del PCASMType
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecLeft, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCType) < 0) __PYX_ERR(34, 574, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1436
- * # --------------------------------------------------------------------
+  /* "PETSc/PC.pyx":575
  * 
- * del MatType             # <<<<<<<<<<<<<<
- * del MatOption
- * del MatAssemblyType
+ * del PCType
+ * del PCSide             # <<<<<<<<<<<<<<
+ * del PCASMType
+ * del PCGASMType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatType) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCSide) < 0) __PYX_ERR(34, 575, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1437
- * 
- * del MatType
- * del MatOption             # <<<<<<<<<<<<<<
- * del MatAssemblyType
- * del MatStructure
+  /* "PETSc/PC.pyx":576
+ * del PCType
+ * del PCSide
+ * del PCASMType             # <<<<<<<<<<<<<<
+ * del PCGASMType
+ * del PCMGType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatOption) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCASMType) < 0) __PYX_ERR(34, 576, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1438
- * del MatType
- * del MatOption
- * del MatAssemblyType             # <<<<<<<<<<<<<<
- * del MatStructure
- * del MatOrderingType
+  /* "PETSc/PC.pyx":577
+ * del PCSide
+ * del PCASMType
+ * del PCGASMType             # <<<<<<<<<<<<<<
+ * del PCMGType
+ * del PCGAMGType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatAssemblyType) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCGASMType) < 0) __PYX_ERR(34, 577, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1439
- * del MatOption
- * del MatAssemblyType
- * del MatStructure             # <<<<<<<<<<<<<<
- * del MatOrderingType
- * del MatFactorShiftType
+  /* "PETSc/PC.pyx":578
+ * del PCASMType
+ * del PCGASMType
+ * del PCMGType             # <<<<<<<<<<<<<<
+ * del PCGAMGType
+ * del PCCompositeType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatStructure) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCMGType) < 0) __PYX_ERR(34, 578, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1440
- * del MatAssemblyType
- * del MatStructure
- * del MatOrderingType             # <<<<<<<<<<<<<<
- * del MatFactorShiftType
- * del MatSORType
+  /* "PETSc/PC.pyx":579
+ * del PCGASMType
+ * del PCMGType
+ * del PCGAMGType             # <<<<<<<<<<<<<<
+ * del PCCompositeType
+ * del PCFieldSplitSchurPreType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatOrderingType) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCGAMGType) < 0) __PYX_ERR(34, 579, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1441
- * del MatStructure
- * del MatOrderingType
- * del MatFactorShiftType             # <<<<<<<<<<<<<<
- * del MatSORType
+  /* "PETSc/PC.pyx":580
+ * del PCMGType
+ * del PCGAMGType
+ * del PCCompositeType             # <<<<<<<<<<<<<<
+ * del PCFieldSplitSchurPreType
+ * del PCFieldSplitSchurFactType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCCompositeType) < 0) __PYX_ERR(34, 580, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":581
+ * del PCGAMGType
+ * del PCCompositeType
+ * del PCFieldSplitSchurPreType             # <<<<<<<<<<<<<<
+ * del PCFieldSplitSchurFactType
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatFactorShiftType) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCFieldSplitSchurPreType) < 0) __PYX_ERR(34, 581, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1442
- * del MatOrderingType
- * del MatFactorShiftType
- * del MatSORType             # <<<<<<<<<<<<<<
+  /* "PETSc/PC.pyx":582
+ * del PCCompositeType
+ * del PCFieldSplitSchurPreType
+ * del PCFieldSplitSchurFactType             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatSORType) < 0) {__pyx_filename = __pyx_f[33]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCFieldSplitSchurFactType) < 0) __PYX_ERR(34, 582, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":3
+  /* "PETSc/KSP.pyx":3
  * # --------------------------------------------------------------------
  * 
- * class PCType(object):             # <<<<<<<<<<<<<<
- *     # native
- *     NONE         = S_(PCNONE)
+ * class KSPType(object):             # <<<<<<<<<<<<<<
+ *     RICHARDSON = S_(KSPRICHARDSON)
+ *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCType, __pyx_n_s_PCType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_KSPType, __pyx_n_s_KSPType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/PC.pyx":5
- * class PCType(object):
- *     # native
- *     NONE         = S_(PCNONE)             # <<<<<<<<<<<<<<
- *     JACOBI       = S_(PCJACOBI)
- *     SOR          = S_(PCSOR)
+  /* "PETSc/KSP.pyx":4
+ * 
+ * class KSPType(object):
+ *     RICHARDSON = S_(KSPRICHARDSON)             # <<<<<<<<<<<<<<
+ *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
+ *     CG         = S_(KSPCG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCNONE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPRICHARDSON); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RICHARDSON, __pyx_t_8) < 0) __PYX_ERR(35, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":6
- *     # native
- *     NONE         = S_(PCNONE)
- *     JACOBI       = S_(PCJACOBI)             # <<<<<<<<<<<<<<
- *     SOR          = S_(PCSOR)
- *     LU           = S_(PCLU)
+  /* "PETSc/KSP.pyx":5
+ * class KSPType(object):
+ *     RICHARDSON = S_(KSPRICHARDSON)
+ *     CHEBYSHEV  = S_(KSPCHEBYSHEV)             # <<<<<<<<<<<<<<
+ *     CG         = S_(KSPCG)
+ *     GROPPCG    = S_(KSPGROPPCG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCJACOBI); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCHEBYSHEV); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_JACOBI, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHEBYSHEV, __pyx_t_8) < 0) __PYX_ERR(35, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":7
- *     NONE         = S_(PCNONE)
- *     JACOBI       = S_(PCJACOBI)
- *     SOR          = S_(PCSOR)             # <<<<<<<<<<<<<<
- *     LU           = S_(PCLU)
- *     SHELL        = S_(PCSHELL)
+  /* "PETSc/KSP.pyx":6
+ *     RICHARDSON = S_(KSPRICHARDSON)
+ *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
+ *     CG         = S_(KSPCG)             # <<<<<<<<<<<<<<
+ *     GROPPCG    = S_(KSPGROPPCG)
+ *     PIPECG     = S_(KSPPIPECG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSOR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SOR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CG, __pyx_t_8) < 0) __PYX_ERR(35, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":8
- *     JACOBI       = S_(PCJACOBI)
- *     SOR          = S_(PCSOR)
- *     LU           = S_(PCLU)             # <<<<<<<<<<<<<<
- *     SHELL        = S_(PCSHELL)
- *     BJACOBI      = S_(PCBJACOBI)
+  /* "PETSc/KSP.pyx":7
+ *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
+ *     CG         = S_(KSPCG)
+ *     GROPPCG    = S_(KSPGROPPCG)             # <<<<<<<<<<<<<<
+ *     PIPECG     = S_(KSPPIPECG)
+ *     PIPECGRR   = S_(KSPPIPECGRR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCLU); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPGROPPCG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LU, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GROPPCG, __pyx_t_8) < 0) __PYX_ERR(35, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":9
- *     SOR          = S_(PCSOR)
- *     LU           = S_(PCLU)
- *     SHELL        = S_(PCSHELL)             # <<<<<<<<<<<<<<
- *     BJACOBI      = S_(PCBJACOBI)
- *     MG           = S_(PCMG)
+  /* "PETSc/KSP.pyx":8
+ *     CG         = S_(KSPCG)
+ *     GROPPCG    = S_(KSPGROPPCG)
+ *     PIPECG     = S_(KSPPIPECG)             # <<<<<<<<<<<<<<
+ *     PIPECGRR   = S_(KSPPIPECGRR)
+ *     CGNE       = S_(KSPCGNE)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSHELL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPECG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PIPECG, __pyx_t_8) < 0) __PYX_ERR(35, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":10
- *     LU           = S_(PCLU)
- *     SHELL        = S_(PCSHELL)
- *     BJACOBI      = S_(PCBJACOBI)             # <<<<<<<<<<<<<<
- *     MG           = S_(PCMG)
- *     EISENSTAT    = S_(PCEISENSTAT)
+  /* "PETSc/KSP.pyx":9
+ *     GROPPCG    = S_(KSPGROPPCG)
+ *     PIPECG     = S_(KSPPIPECG)
+ *     PIPECGRR   = S_(KSPPIPECGRR)             # <<<<<<<<<<<<<<
+ *     CGNE       = S_(KSPCGNE)
+ *     NASH       = S_(KSPNASH)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCBJACOBI); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPECGRR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BJACOBI, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PIPECGRR, __pyx_t_8) < 0) __PYX_ERR(35, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":11
- *     SHELL        = S_(PCSHELL)
- *     BJACOBI      = S_(PCBJACOBI)
- *     MG           = S_(PCMG)             # <<<<<<<<<<<<<<
- *     EISENSTAT    = S_(PCEISENSTAT)
- *     ILU          = S_(PCILU)
+  /* "PETSc/KSP.pyx":10
+ *     PIPECG     = S_(KSPPIPECG)
+ *     PIPECGRR   = S_(KSPPIPECGRR)
+ *     CGNE       = S_(KSPCGNE)             # <<<<<<<<<<<<<<
+ *     NASH       = S_(KSPNASH)
+ *     STCG       = S_(KSPSTCG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCMG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGNE); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CGNE, __pyx_t_8) < 0) __PYX_ERR(35, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":12
- *     BJACOBI      = S_(PCBJACOBI)
- *     MG           = S_(PCMG)
- *     EISENSTAT    = S_(PCEISENSTAT)             # <<<<<<<<<<<<<<
- *     ILU          = S_(PCILU)
- *     ICC          = S_(PCICC)
+  /* "PETSc/KSP.pyx":11
+ *     PIPECGRR   = S_(KSPPIPECGRR)
+ *     CGNE       = S_(KSPCGNE)
+ *     NASH       = S_(KSPNASH)             # <<<<<<<<<<<<<<
+ *     STCG       = S_(KSPSTCG)
+ *     GLTR       = S_(KSPGLTR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCEISENSTAT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPNASH); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EISENSTAT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NASH, __pyx_t_8) < 0) __PYX_ERR(35, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":13
- *     MG           = S_(PCMG)
- *     EISENSTAT    = S_(PCEISENSTAT)
- *     ILU          = S_(PCILU)             # <<<<<<<<<<<<<<
- *     ICC          = S_(PCICC)
- *     ASM          = S_(PCASM)
+  /* "PETSc/KSP.pyx":12
+ *     CGNE       = S_(KSPCGNE)
+ *     NASH       = S_(KSPNASH)
+ *     STCG       = S_(KSPSTCG)             # <<<<<<<<<<<<<<
+ *     GLTR       = S_(KSPGLTR)
+ *     FCG        = S_(KSPFCG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCILU); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPSTCG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ILU, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STCG, __pyx_t_8) < 0) __PYX_ERR(35, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":14
- *     EISENSTAT    = S_(PCEISENSTAT)
- *     ILU          = S_(PCILU)
- *     ICC          = S_(PCICC)             # <<<<<<<<<<<<<<
- *     ASM          = S_(PCASM)
- *     GASM         = S_(PCGASM)
+  /* "PETSc/KSP.pyx":13
+ *     NASH       = S_(KSPNASH)
+ *     STCG       = S_(KSPSTCG)
+ *     GLTR       = S_(KSPGLTR)             # <<<<<<<<<<<<<<
+ *     FCG        = S_(KSPFCG)
+ *     PIPEFCG    = S_(KSPPIPEFCG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCICC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPGLTR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ICC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GLTR, __pyx_t_8) < 0) __PYX_ERR(35, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":15
- *     ILU          = S_(PCILU)
- *     ICC          = S_(PCICC)
- *     ASM          = S_(PCASM)             # <<<<<<<<<<<<<<
- *     GASM         = S_(PCGASM)
- *     KSP          = S_(PCKSP)
+  /* "PETSc/KSP.pyx":14
+ *     STCG       = S_(KSPSTCG)
+ *     GLTR       = S_(KSPGLTR)
+ *     FCG        = S_(KSPFCG)             # <<<<<<<<<<<<<<
+ *     PIPEFCG    = S_(KSPPIPEFCG)
+ *     GMRES      = S_(KSPGMRES)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCASM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPFCG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FCG, __pyx_t_8) < 0) __PYX_ERR(35, 14, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":16
- *     ICC          = S_(PCICC)
- *     ASM          = S_(PCASM)
- *     GASM         = S_(PCGASM)             # <<<<<<<<<<<<<<
- *     KSP          = S_(PCKSP)
- *     COMPOSITE    = S_(PCCOMPOSITE)
+  /* "PETSc/KSP.pyx":15
+ *     GLTR       = S_(KSPGLTR)
+ *     FCG        = S_(KSPFCG)
+ *     PIPEFCG    = S_(KSPPIPEFCG)             # <<<<<<<<<<<<<<
+ *     GMRES      = S_(KSPGMRES)
+ *     PIPEFGMRES = S_(KSPPIPEFGMRES)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGASM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPEFCG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GASM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PIPEFCG, __pyx_t_8) < 0) __PYX_ERR(35, 15, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":17
- *     ASM          = S_(PCASM)
- *     GASM         = S_(PCGASM)
- *     KSP          = S_(PCKSP)             # <<<<<<<<<<<<<<
- *     COMPOSITE    = S_(PCCOMPOSITE)
- *     REDUNDANT    = S_(PCREDUNDANT)
+  /* "PETSc/KSP.pyx":16
+ *     FCG        = S_(KSPFCG)
+ *     PIPEFCG    = S_(KSPPIPEFCG)
+ *     GMRES      = S_(KSPGMRES)             # <<<<<<<<<<<<<<
+ *     PIPEFGMRES = S_(KSPPIPEFGMRES)
+ *     FGMRES     = S_(KSPFGMRES)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCKSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPGMRES); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GMRES, __pyx_t_8) < 0) __PYX_ERR(35, 16, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":18
- *     GASM         = S_(PCGASM)
- *     KSP          = S_(PCKSP)
- *     COMPOSITE    = S_(PCCOMPOSITE)             # <<<<<<<<<<<<<<
- *     REDUNDANT    = S_(PCREDUNDANT)
- *     SPAI         = S_(PCSPAI)
+  /* "PETSc/KSP.pyx":17
+ *     PIPEFCG    = S_(KSPPIPEFCG)
+ *     GMRES      = S_(KSPGMRES)
+ *     PIPEFGMRES = S_(KSPPIPEFGMRES)             # <<<<<<<<<<<<<<
+ *     FGMRES     = S_(KSPFGMRES)
+ *     LGMRES     = S_(KSPLGMRES)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCCOMPOSITE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPEFGMRES); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSITE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PIPEFGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 17, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":19
- *     KSP          = S_(PCKSP)
- *     COMPOSITE    = S_(PCCOMPOSITE)
- *     REDUNDANT    = S_(PCREDUNDANT)             # <<<<<<<<<<<<<<
- *     SPAI         = S_(PCSPAI)
- *     NN           = S_(PCNN)
+  /* "PETSc/KSP.pyx":18
+ *     GMRES      = S_(KSPGMRES)
+ *     PIPEFGMRES = S_(KSPPIPEFGMRES)
+ *     FGMRES     = S_(KSPFGMRES)             # <<<<<<<<<<<<<<
+ *     LGMRES     = S_(KSPLGMRES)
+ *     DGMRES     = S_(KSPDGMRES)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCREDUNDANT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPFGMRES); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REDUNDANT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":20
- *     COMPOSITE    = S_(PCCOMPOSITE)
- *     REDUNDANT    = S_(PCREDUNDANT)
- *     SPAI         = S_(PCSPAI)             # <<<<<<<<<<<<<<
- *     NN           = S_(PCNN)
- *     CHOLESKY     = S_(PCCHOLESKY)
+  /* "PETSc/KSP.pyx":19
+ *     PIPEFGMRES = S_(KSPPIPEFGMRES)
+ *     FGMRES     = S_(KSPFGMRES)
+ *     LGMRES     = S_(KSPLGMRES)             # <<<<<<<<<<<<<<
+ *     DGMRES     = S_(KSPDGMRES)
+ *     PGMRES     = S_(KSPPGMRES)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSPAI); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPLGMRES); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPAI, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":21
- *     REDUNDANT    = S_(PCREDUNDANT)
- *     SPAI         = S_(PCSPAI)
- *     NN           = S_(PCNN)             # <<<<<<<<<<<<<<
- *     CHOLESKY     = S_(PCCHOLESKY)
- *     PBJACOBI     = S_(PCPBJACOBI)
+  /* "PETSc/KSP.pyx":20
+ *     FGMRES     = S_(KSPFGMRES)
+ *     LGMRES     = S_(KSPLGMRES)
+ *     DGMRES     = S_(KSPDGMRES)             # <<<<<<<<<<<<<<
+ *     PGMRES     = S_(KSPPGMRES)
+ *     TCQMR      = S_(KSPTCQMR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCNN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPDGMRES); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":22
- *     SPAI         = S_(PCSPAI)
- *     NN           = S_(PCNN)
- *     CHOLESKY     = S_(PCCHOLESKY)             # <<<<<<<<<<<<<<
- *     PBJACOBI     = S_(PCPBJACOBI)
- *     MAT          = S_(PCMAT)
+  /* "PETSc/KSP.pyx":21
+ *     LGMRES     = S_(KSPLGMRES)
+ *     DGMRES     = S_(KSPDGMRES)
+ *     PGMRES     = S_(KSPPGMRES)             # <<<<<<<<<<<<<<
+ *     TCQMR      = S_(KSPTCQMR)
+ *     BCGS       = S_(KSPBCGS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCCHOLESKY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPGMRES); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 21, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHOLESKY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 21, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":23
- *     NN           = S_(PCNN)
- *     CHOLESKY     = S_(PCCHOLESKY)
- *     PBJACOBI     = S_(PCPBJACOBI)             # <<<<<<<<<<<<<<
- *     MAT          = S_(PCMAT)
- *     HYPRE        = S_(PCHYPRE)
+  /* "PETSc/KSP.pyx":22
+ *     DGMRES     = S_(KSPDGMRES)
+ *     PGMRES     = S_(KSPPGMRES)
+ *     TCQMR      = S_(KSPTCQMR)             # <<<<<<<<<<<<<<
+ *     BCGS       = S_(KSPBCGS)
+ *     IBCGS      = S_(KSPIBCGS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCPBJACOBI); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPTCQMR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 22, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PBJACOBI, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TCQMR, __pyx_t_8) < 0) __PYX_ERR(35, 22, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":24
- *     CHOLESKY     = S_(PCCHOLESKY)
- *     PBJACOBI     = S_(PCPBJACOBI)
- *     MAT          = S_(PCMAT)             # <<<<<<<<<<<<<<
- *     HYPRE        = S_(PCHYPRE)
- *     PARMS        = S_(PCPARMS)
+  /* "PETSc/KSP.pyx":23
+ *     PGMRES     = S_(KSPPGMRES)
+ *     TCQMR      = S_(KSPTCQMR)
+ *     BCGS       = S_(KSPBCGS)             # <<<<<<<<<<<<<<
+ *     IBCGS      = S_(KSPIBCGS)
+ *     FBCGS      = S_(KSPFBCGS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCMAT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPBCGS); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BCGS, __pyx_t_8) < 0) __PYX_ERR(35, 23, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":25
- *     PBJACOBI     = S_(PCPBJACOBI)
- *     MAT          = S_(PCMAT)
- *     HYPRE        = S_(PCHYPRE)             # <<<<<<<<<<<<<<
- *     PARMS        = S_(PCPARMS)
- *     FIELDSPLIT   = S_(PCFIELDSPLIT)
+  /* "PETSc/KSP.pyx":24
+ *     TCQMR      = S_(KSPTCQMR)
+ *     BCGS       = S_(KSPBCGS)
+ *     IBCGS      = S_(KSPIBCGS)             # <<<<<<<<<<<<<<
+ *     FBCGS      = S_(KSPFBCGS)
+ *     FBCGSR     = S_(KSPFBCGSR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCHYPRE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPIBCGS); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HYPRE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IBCGS, __pyx_t_8) < 0) __PYX_ERR(35, 24, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":26
- *     MAT          = S_(PCMAT)
- *     HYPRE        = S_(PCHYPRE)
- *     PARMS        = S_(PCPARMS)             # <<<<<<<<<<<<<<
- *     FIELDSPLIT   = S_(PCFIELDSPLIT)
- *     TFS          = S_(PCTFS)
+  /* "PETSc/KSP.pyx":25
+ *     BCGS       = S_(KSPBCGS)
+ *     IBCGS      = S_(KSPIBCGS)
+ *     FBCGS      = S_(KSPFBCGS)             # <<<<<<<<<<<<<<
+ *     FBCGSR     = S_(KSPFBCGSR)
+ *     BCGSL      = S_(KSPBCGSL)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCPARMS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPFBCGS); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PARMS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FBCGS, __pyx_t_8) < 0) __PYX_ERR(35, 25, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":27
- *     HYPRE        = S_(PCHYPRE)
- *     PARMS        = S_(PCPARMS)
- *     FIELDSPLIT   = S_(PCFIELDSPLIT)             # <<<<<<<<<<<<<<
- *     TFS          = S_(PCTFS)
- *     ML           = S_(PCML)
+  /* "PETSc/KSP.pyx":26
+ *     IBCGS      = S_(KSPIBCGS)
+ *     FBCGS      = S_(KSPFBCGS)
+ *     FBCGSR     = S_(KSPFBCGSR)             # <<<<<<<<<<<<<<
+ *     BCGSL      = S_(KSPBCGSL)
+ *     CGS        = S_(KSPCGS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCFIELDSPLIT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPFBCGSR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 26, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FIELDSPLIT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FBCGSR, __pyx_t_8) < 0) __PYX_ERR(35, 26, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":28
- *     PARMS        = S_(PCPARMS)
- *     FIELDSPLIT   = S_(PCFIELDSPLIT)
- *     TFS          = S_(PCTFS)             # <<<<<<<<<<<<<<
- *     ML           = S_(PCML)
- *     GALERKIN     = S_(PCGALERKIN)
+  /* "PETSc/KSP.pyx":27
+ *     FBCGS      = S_(KSPFBCGS)
+ *     FBCGSR     = S_(KSPFBCGSR)
+ *     BCGSL      = S_(KSPBCGSL)             # <<<<<<<<<<<<<<
+ *     CGS        = S_(KSPCGS)
+ *     TFQMR      = S_(KSPTFQMR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCTFS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPBCGSL); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TFS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BCGSL, __pyx_t_8) < 0) __PYX_ERR(35, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":29
- *     FIELDSPLIT   = S_(PCFIELDSPLIT)
- *     TFS          = S_(PCTFS)
- *     ML           = S_(PCML)             # <<<<<<<<<<<<<<
- *     GALERKIN     = S_(PCGALERKIN)
- *     EXOTIC       = S_(PCEXOTIC)
+  /* "PETSc/KSP.pyx":28
+ *     FBCGSR     = S_(KSPFBCGSR)
+ *     BCGSL      = S_(KSPBCGSL)
+ *     CGS        = S_(KSPCGS)             # <<<<<<<<<<<<<<
+ *     TFQMR      = S_(KSPTFQMR)
+ *     CR         = S_(KSPCR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCML); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGS); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 28, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ML, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CGS, __pyx_t_8) < 0) __PYX_ERR(35, 28, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":30
- *     TFS          = S_(PCTFS)
- *     ML           = S_(PCML)
- *     GALERKIN     = S_(PCGALERKIN)             # <<<<<<<<<<<<<<
- *     EXOTIC       = S_(PCEXOTIC)
- *     CP           = S_(PCCP)
+  /* "PETSc/KSP.pyx":29
+ *     BCGSL      = S_(KSPBCGSL)
+ *     CGS        = S_(KSPCGS)
+ *     TFQMR      = S_(KSPTFQMR)             # <<<<<<<<<<<<<<
+ *     CR         = S_(KSPCR)
+ *     PIPECR     = S_(KSPPIPECR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGALERKIN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPTFQMR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GALERKIN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TFQMR, __pyx_t_8) < 0) __PYX_ERR(35, 29, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":31
- *     ML           = S_(PCML)
- *     GALERKIN     = S_(PCGALERKIN)
- *     EXOTIC       = S_(PCEXOTIC)             # <<<<<<<<<<<<<<
- *     CP           = S_(PCCP)
- *     BFBT         = S_(PCBFBT)
+  /* "PETSc/KSP.pyx":30
+ *     CGS        = S_(KSPCGS)
+ *     TFQMR      = S_(KSPTFQMR)
+ *     CR         = S_(KSPCR)             # <<<<<<<<<<<<<<
+ *     PIPECR     = S_(KSPPIPECR)
+ *     LSQR       = S_(KSPLSQR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCEXOTIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXOTIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CR, __pyx_t_8) < 0) __PYX_ERR(35, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":32
- *     GALERKIN     = S_(PCGALERKIN)
- *     EXOTIC       = S_(PCEXOTIC)
- *     CP           = S_(PCCP)             # <<<<<<<<<<<<<<
- *     BFBT         = S_(PCBFBT)
- *     LSC          = S_(PCLSC)
+  /* "PETSc/KSP.pyx":31
+ *     TFQMR      = S_(KSPTFQMR)
+ *     CR         = S_(KSPCR)
+ *     PIPECR     = S_(KSPPIPECR)             # <<<<<<<<<<<<<<
+ *     LSQR       = S_(KSPLSQR)
+ *     PREONLY    = S_(KSPPREONLY)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCCP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPECR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PIPECR, __pyx_t_8) < 0) __PYX_ERR(35, 31, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":33
- *     EXOTIC       = S_(PCEXOTIC)
- *     CP           = S_(PCCP)
- *     BFBT         = S_(PCBFBT)             # <<<<<<<<<<<<<<
- *     LSC          = S_(PCLSC)
- *     PYTHON       = S_(PCPYTHON)
+  /* "PETSc/KSP.pyx":32
+ *     CR         = S_(KSPCR)
+ *     PIPECR     = S_(KSPPIPECR)
+ *     LSQR       = S_(KSPLSQR)             # <<<<<<<<<<<<<<
+ *     PREONLY    = S_(KSPPREONLY)
+ *     QCG        = S_(KSPQCG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCBFBT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPLSQR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BFBT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LSQR, __pyx_t_8) < 0) __PYX_ERR(35, 32, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":34
- *     CP           = S_(PCCP)
- *     BFBT         = S_(PCBFBT)
- *     LSC          = S_(PCLSC)             # <<<<<<<<<<<<<<
- *     PYTHON       = S_(PCPYTHON)
- *     PFMG         = S_(PCPFMG)
+  /* "PETSc/KSP.pyx":33
+ *     PIPECR     = S_(KSPPIPECR)
+ *     LSQR       = S_(KSPLSQR)
+ *     PREONLY    = S_(KSPPREONLY)             # <<<<<<<<<<<<<<
+ *     QCG        = S_(KSPQCG)
+ *     BICG       = S_(KSPBICG)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCLSC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPREONLY); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 33, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LSC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PREONLY, __pyx_t_8) < 0) __PYX_ERR(35, 33, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":35
- *     BFBT         = S_(PCBFBT)
- *     LSC          = S_(PCLSC)
- *     PYTHON       = S_(PCPYTHON)             # <<<<<<<<<<<<<<
- *     PFMG         = S_(PCPFMG)
- *     SYSPFMG      = S_(PCSYSPFMG)
+  /* "PETSc/KSP.pyx":34
+ *     LSQR       = S_(KSPLSQR)
+ *     PREONLY    = S_(KSPPREONLY)
+ *     QCG        = S_(KSPQCG)             # <<<<<<<<<<<<<<
+ *     BICG       = S_(KSPBICG)
+ *     MINRES     = S_(KSPMINRES)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCPYTHON); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPQCG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QCG, __pyx_t_8) < 0) __PYX_ERR(35, 34, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":36
- *     LSC          = S_(PCLSC)
- *     PYTHON       = S_(PCPYTHON)
- *     PFMG         = S_(PCPFMG)             # <<<<<<<<<<<<<<
- *     SYSPFMG      = S_(PCSYSPFMG)
- *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
+  /* "PETSc/KSP.pyx":35
+ *     PREONLY    = S_(KSPPREONLY)
+ *     QCG        = S_(KSPQCG)
+ *     BICG       = S_(KSPBICG)             # <<<<<<<<<<<<<<
+ *     MINRES     = S_(KSPMINRES)
+ *     SYMMLQ     = S_(KSPSYMMLQ)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCPFMG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPBICG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PFMG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BICG, __pyx_t_8) < 0) __PYX_ERR(35, 35, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":37
- *     PYTHON       = S_(PCPYTHON)
- *     PFMG         = S_(PCPFMG)
- *     SYSPFMG      = S_(PCSYSPFMG)             # <<<<<<<<<<<<<<
- *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
- *     SVD          = S_(PCSVD)
+  /* "PETSc/KSP.pyx":36
+ *     QCG        = S_(KSPQCG)
+ *     BICG       = S_(KSPBICG)
+ *     MINRES     = S_(KSPMINRES)             # <<<<<<<<<<<<<<
+ *     SYMMLQ     = S_(KSPSYMMLQ)
+ *     LCD        = S_(KSPLCD)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSYSPFMG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPMINRES); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYSPFMG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MINRES, __pyx_t_8) < 0) __PYX_ERR(35, 36, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":38
- *     PFMG         = S_(PCPFMG)
- *     SYSPFMG      = S_(PCSYSPFMG)
- *     REDISTRIBUTE = S_(PCREDISTRIBUTE)             # <<<<<<<<<<<<<<
- *     SVD          = S_(PCSVD)
- *     GAMG         = S_(PCGAMG)
+  /* "PETSc/KSP.pyx":37
+ *     BICG       = S_(KSPBICG)
+ *     MINRES     = S_(KSPMINRES)
+ *     SYMMLQ     = S_(KSPSYMMLQ)             # <<<<<<<<<<<<<<
+ *     LCD        = S_(KSPLCD)
+ *     PYTHON     = S_(KSPPYTHON)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCREDISTRIBUTE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPSYMMLQ); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REDISTRIBUTE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMLQ, __pyx_t_8) < 0) __PYX_ERR(35, 37, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":39
- *     SYSPFMG      = S_(PCSYSPFMG)
- *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
- *     SVD          = S_(PCSVD)             # <<<<<<<<<<<<<<
- *     GAMG         = S_(PCGAMG)
- *     SACUSP       = S_(PCSACUSP)
+  /* "PETSc/KSP.pyx":38
+ *     MINRES     = S_(KSPMINRES)
+ *     SYMMLQ     = S_(KSPSYMMLQ)
+ *     LCD        = S_(KSPLCD)             # <<<<<<<<<<<<<<
+ *     PYTHON     = S_(KSPPYTHON)
+ *     GCR        = S_(KSPGCR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSVD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPLCD); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 38, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SVD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LCD, __pyx_t_8) < 0) __PYX_ERR(35, 38, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":40
- *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
- *     SVD          = S_(PCSVD)
- *     GAMG         = S_(PCGAMG)             # <<<<<<<<<<<<<<
- *     SACUSP       = S_(PCSACUSP)
- *     SACUSPPOLY   = S_(PCSACUSPPOLY)
+  /* "PETSc/KSP.pyx":39
+ *     SYMMLQ     = S_(KSPSYMMLQ)
+ *     LCD        = S_(KSPLCD)
+ *     PYTHON     = S_(KSPPYTHON)             # <<<<<<<<<<<<<<
+ *     GCR        = S_(KSPGCR)
+ *     PIPEGCR    = S_(KSPPIPEGCR)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPYTHON); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GAMG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) __PYX_ERR(35, 39, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":41
- *     SVD          = S_(PCSVD)
- *     GAMG         = S_(PCGAMG)
- *     SACUSP       = S_(PCSACUSP)             # <<<<<<<<<<<<<<
- *     SACUSPPOLY   = S_(PCSACUSPPOLY)
- *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
+  /* "PETSc/KSP.pyx":40
+ *     LCD        = S_(KSPLCD)
+ *     PYTHON     = S_(KSPPYTHON)
+ *     GCR        = S_(KSPGCR)             # <<<<<<<<<<<<<<
+ *     PIPEGCR    = S_(KSPPIPEGCR)
+ *     TSIRM      = S_(KSPTSIRM)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSACUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPGCR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SACUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GCR, __pyx_t_8) < 0) __PYX_ERR(35, 40, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":42
- *     GAMG         = S_(PCGAMG)
- *     SACUSP       = S_(PCSACUSP)
- *     SACUSPPOLY   = S_(PCSACUSPPOLY)             # <<<<<<<<<<<<<<
- *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
- *     AINVCUSP     = S_(PCAINVCUSP)
+  /* "PETSc/KSP.pyx":41
+ *     PYTHON     = S_(KSPPYTHON)
+ *     GCR        = S_(KSPGCR)
+ *     PIPEGCR    = S_(KSPPIPEGCR)             # <<<<<<<<<<<<<<
+ *     TSIRM      = S_(KSPTSIRM)
+ *     CGLS       = S_(KSPCGLS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCSACUSPPOLY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPEGCR); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SACUSPPOLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PIPEGCR, __pyx_t_8) < 0) __PYX_ERR(35, 41, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":43
- *     SACUSP       = S_(PCSACUSP)
- *     SACUSPPOLY   = S_(PCSACUSPPOLY)
- *     BICGSTABCUSP = S_(PCBICGSTABCUSP)             # <<<<<<<<<<<<<<
- *     AINVCUSP     = S_(PCAINVCUSP)
- *     BDDC         = S_(PCBDDC)
+  /* "PETSc/KSP.pyx":42
+ *     GCR        = S_(KSPGCR)
+ *     PIPEGCR    = S_(KSPPIPEGCR)
+ *     TSIRM      = S_(KSPTSIRM)             # <<<<<<<<<<<<<<
+ *     CGLS       = S_(KSPCGLS)
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCBICGSTABCUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPTSIRM); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BICGSTABCUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TSIRM, __pyx_t_8) < 0) __PYX_ERR(35, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":44
- *     SACUSPPOLY   = S_(PCSACUSPPOLY)
- *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
- *     AINVCUSP     = S_(PCAINVCUSP)             # <<<<<<<<<<<<<<
- *     BDDC         = S_(PCBDDC)
- *     KACZMARZ     = S_(PCKACZMARZ)
+  /* "PETSc/KSP.pyx":43
+ *     PIPEGCR    = S_(KSPPIPEGCR)
+ *     TSIRM      = S_(KSPTSIRM)
+ *     CGLS       = S_(KSPCGLS)             # <<<<<<<<<<<<<<
+ * 
+ * class KSPNormType(object):
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCAINVCUSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGLS); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 43, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AINVCUSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CGLS, __pyx_t_8) < 0) __PYX_ERR(35, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":45
- *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
- *     AINVCUSP     = S_(PCAINVCUSP)
- *     BDDC         = S_(PCBDDC)             # <<<<<<<<<<<<<<
- *     KACZMARZ     = S_(PCKACZMARZ)
+  /* "PETSc/KSP.pyx":3
+ * # --------------------------------------------------------------------
  * 
+ * class KSPType(object):             # <<<<<<<<<<<<<<
+ *     RICHARDSON = S_(KSPRICHARDSON)
+ *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCBDDC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BDDC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPType, __pyx_t_8) < 0) __PYX_ERR(35, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":46
- *     AINVCUSP     = S_(PCAINVCUSP)
- *     BDDC         = S_(PCBDDC)
- *     KACZMARZ     = S_(PCKACZMARZ)             # <<<<<<<<<<<<<<
+  /* "PETSc/KSP.pyx":45
+ *     CGLS       = S_(KSPCGLS)
  * 
- * class PCSide(object):
+ * class KSPNormType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NORM_DEFAULT          = KSP_NORM_DEFAULT
+ */
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_KSPNormType, __pyx_n_s_KSPNormType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "PETSc/KSP.pyx":47
+ * class KSPNormType(object):
+ *     # native
+ *     NORM_DEFAULT          = KSP_NORM_DEFAULT             # <<<<<<<<<<<<<<
+ *     NORM_NONE             = KSP_NORM_NONE
+ *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCKACZMARZ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_DEFAULT); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KACZMARZ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT, __pyx_t_8) < 0) __PYX_ERR(35, 47, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":3
- * # --------------------------------------------------------------------
+  /* "PETSc/KSP.pyx":48
+ *     # native
+ *     NORM_DEFAULT          = KSP_NORM_DEFAULT
+ *     NORM_NONE             = KSP_NORM_NONE             # <<<<<<<<<<<<<<
+ *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
+ *     NORM_UNPRECONDITIONED = KSP_NORM_UNPRECONDITIONED
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_NONE); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_NONE, __pyx_t_8) < 0) __PYX_ERR(35, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":49
+ *     NORM_DEFAULT          = KSP_NORM_DEFAULT
+ *     NORM_NONE             = KSP_NORM_NONE
+ *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED             # <<<<<<<<<<<<<<
+ *     NORM_UNPRECONDITIONED = KSP_NORM_UNPRECONDITIONED
+ *     NORM_NATURAL          = KSP_NORM_NATURAL
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_PRECONDITIONED); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_PRECONDITIONED, __pyx_t_8) < 0) __PYX_ERR(35, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":50
+ *     NORM_NONE             = KSP_NORM_NONE
+ *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
+ *     NORM_UNPRECONDITIONED = KSP_NORM_UNPRECONDITIONED             # <<<<<<<<<<<<<<
+ *     NORM_NATURAL          = KSP_NORM_NATURAL
+ *     # aliases
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_UNPRECONDITIONED); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_UNPRECONDITIONED, __pyx_t_8) < 0) __PYX_ERR(35, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":51
+ *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
+ *     NORM_UNPRECONDITIONED = KSP_NORM_UNPRECONDITIONED
+ *     NORM_NATURAL          = KSP_NORM_NATURAL             # <<<<<<<<<<<<<<
+ *     # aliases
+ *     DEFAULT          = NORM_DEFAULT
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_NATURAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_NATURAL, __pyx_t_8) < 0) __PYX_ERR(35, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":53
+ *     NORM_NATURAL          = KSP_NORM_NATURAL
+ *     # aliases
+ *     DEFAULT          = NORM_DEFAULT             # <<<<<<<<<<<<<<
+ *     NONE = NO        = NORM_NONE
+ *     PRECONDITIONED   = NORM_PRECONDITIONED
+ */
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_DEFAULT);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DEFAULT, __pyx_t_8) < 0) __PYX_ERR(35, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":54
+ *     # aliases
+ *     DEFAULT          = NORM_DEFAULT
+ *     NONE = NO        = NORM_NONE             # <<<<<<<<<<<<<<
+ *     PRECONDITIONED   = NORM_PRECONDITIONED
+ *     UNPRECONDITIONED = NORM_UNPRECONDITIONED
+ */
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_NONE);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NONE);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) __PYX_ERR(35, 54, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NO, __pyx_t_8) < 0) __PYX_ERR(35, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":55
+ *     DEFAULT          = NORM_DEFAULT
+ *     NONE = NO        = NORM_NONE
+ *     PRECONDITIONED   = NORM_PRECONDITIONED             # <<<<<<<<<<<<<<
+ *     UNPRECONDITIONED = NORM_UNPRECONDITIONED
+ *     NATURAL          = NORM_NATURAL
+ */
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_PRECONDITIONED);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_PRECONDITIONED);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PRECONDITIONED, __pyx_t_8) < 0) __PYX_ERR(35, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":56
+ *     NONE = NO        = NORM_NONE
+ *     PRECONDITIONED   = NORM_PRECONDITIONED
+ *     UNPRECONDITIONED = NORM_UNPRECONDITIONED             # <<<<<<<<<<<<<<
+ *     NATURAL          = NORM_NATURAL
  * 
- * class PCType(object):             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_UNPRECONDITIONED);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_UNPRECONDITIONED);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UNPRECONDITIONED, __pyx_t_8) < 0) __PYX_ERR(35, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":57
+ *     PRECONDITIONED   = NORM_PRECONDITIONED
+ *     UNPRECONDITIONED = NORM_UNPRECONDITIONED
+ *     NATURAL          = NORM_NATURAL             # <<<<<<<<<<<<<<
+ * 
+ * class KSPConvergedReason(object):
+ */
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_NATURAL);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NATURAL);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NATURAL, __pyx_t_8) < 0) __PYX_ERR(35, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":45
+ *     CGLS       = S_(KSPCGLS)
+ * 
+ * class KSPNormType(object):             # <<<<<<<<<<<<<<
  *     # native
- *     NONE         = S_(PCNONE)
+ *     NORM_DEFAULT          = KSP_NORM_DEFAULT
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPNormType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPNormType, __pyx_t_8) < 0) __PYX_ERR(35, 45, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":48
- *     KACZMARZ     = S_(PCKACZMARZ)
+  /* "PETSc/KSP.pyx":59
+ *     NATURAL          = NORM_NATURAL
  * 
- * class PCSide(object):             # <<<<<<<<<<<<<<
- *     # native
- *     LEFT      = PC_LEFT
+ * class KSPConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     #iterating
+ *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCSide, __pyx_n_s_PCSide, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_KSPConvergedReason, __pyx_n_s_KSPConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/PC.pyx":50
- * class PCSide(object):
- *     # native
- *     LEFT      = PC_LEFT             # <<<<<<<<<<<<<<
- *     RIGHT     = PC_RIGHT
- *     SYMMETRIC = PC_SYMMETRIC
+  /* "PETSc/KSP.pyx":61
+ * class KSPConvergedReason(object):
+ *     #iterating
+ *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     ITERATING                 = KSP_CONVERGED_ITERATING
+ *     # converged
  */
-  __pyx_t_8 = PyInt_FromLong(PC_LEFT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 61, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LEFT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_8) < 0) __PYX_ERR(35, 61, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":51
- *     # native
- *     LEFT      = PC_LEFT
- *     RIGHT     = PC_RIGHT             # <<<<<<<<<<<<<<
- *     SYMMETRIC = PC_SYMMETRIC
- *     # aliases
+  /* "PETSc/KSP.pyx":62
+ *     #iterating
+ *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
+ *     ITERATING                 = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     # converged
+ *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL
  */
-  __pyx_t_8 = PyInt_FromLong(PC_RIGHT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 62, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RIGHT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_8) < 0) __PYX_ERR(35, 62, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":52
- *     LEFT      = PC_LEFT
- *     RIGHT     = PC_RIGHT
- *     SYMMETRIC = PC_SYMMETRIC             # <<<<<<<<<<<<<<
- *     # aliases
- *     L = LEFT
+  /* "PETSc/KSP.pyx":64
+ *     ITERATING                 = KSP_CONVERGED_ITERATING
+ *     # converged
+ *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL             # <<<<<<<<<<<<<<
+ *     CONVERGED_ATOL_NORMAL     = KSP_CONVERGED_ATOL_NORMAL
+ *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_RTOL_NORMAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_RTOL_NORMAL, __pyx_t_8) < 0) __PYX_ERR(35, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":65
+ *     # converged
+ *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL
+ *     CONVERGED_ATOL_NORMAL     = KSP_CONVERGED_ATOL_NORMAL             # <<<<<<<<<<<<<<
+ *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL
+ *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ATOL_NORMAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ATOL_NORMAL, __pyx_t_8) < 0) __PYX_ERR(35, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":66
+ *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL
+ *     CONVERGED_ATOL_NORMAL     = KSP_CONVERGED_ATOL_NORMAL
+ *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL             # <<<<<<<<<<<<<<
+ *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL
+ *     CONVERGED_ITS             = KSP_CONVERGED_ITS
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_RTOL); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_RTOL, __pyx_t_8) < 0) __PYX_ERR(35, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":67
+ *     CONVERGED_ATOL_NORMAL     = KSP_CONVERGED_ATOL_NORMAL
+ *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL
+ *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITS             = KSP_CONVERGED_ITS
+ *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ATOL); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ATOL, __pyx_t_8) < 0) __PYX_ERR(35, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":68
+ *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL
+ *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL
+ *     CONVERGED_ITS             = KSP_CONVERGED_ITS             # <<<<<<<<<<<<<<
+ *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE
+ *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ITS); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITS, __pyx_t_8) < 0) __PYX_ERR(35, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":69
+ *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL
+ *     CONVERGED_ITS             = KSP_CONVERGED_ITS
+ *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE             # <<<<<<<<<<<<<<
+ *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED
+ *     CONVERGED_STEP_LENGTH     = KSP_CONVERGED_STEP_LENGTH
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_CG_NEG_CURVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_CG_NEG_CURVE, __pyx_t_8) < 0) __PYX_ERR(35, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":70
+ *     CONVERGED_ITS             = KSP_CONVERGED_ITS
+ *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE
+ *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED             # <<<<<<<<<<<<<<
+ *     CONVERGED_STEP_LENGTH     = KSP_CONVERGED_STEP_LENGTH
+ *     CONVERGED_HAPPY_BREAKDOWN = KSP_CONVERGED_HAPPY_BREAKDOWN
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_CG_CONSTRAINED); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_CG_CONSTRAINED, __pyx_t_8) < 0) __PYX_ERR(35, 70, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":71
+ *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE
+ *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED
+ *     CONVERGED_STEP_LENGTH     = KSP_CONVERGED_STEP_LENGTH             # <<<<<<<<<<<<<<
+ *     CONVERGED_HAPPY_BREAKDOWN = KSP_CONVERGED_HAPPY_BREAKDOWN
+ *     # diverged
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_STEP_LENGTH); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_STEP_LENGTH, __pyx_t_8) < 0) __PYX_ERR(35, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":72
+ *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED
+ *     CONVERGED_STEP_LENGTH     = KSP_CONVERGED_STEP_LENGTH
+ *     CONVERGED_HAPPY_BREAKDOWN = KSP_CONVERGED_HAPPY_BREAKDOWN             # <<<<<<<<<<<<<<
+ *     # diverged
+ *     DIVERGED_NULL             = KSP_DIVERGED_NULL
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_HAPPY_BREAKDOWN); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_HAPPY_BREAKDOWN, __pyx_t_8) < 0) __PYX_ERR(35, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":74
+ *     CONVERGED_HAPPY_BREAKDOWN = KSP_CONVERGED_HAPPY_BREAKDOWN
+ *     # diverged
+ *     DIVERGED_NULL             = KSP_DIVERGED_NULL             # <<<<<<<<<<<<<<
+ *     DIVERGED_MAX_IT           = KSP_DIVERGED_MAX_IT
+ *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_NULL, __pyx_t_8) < 0) __PYX_ERR(35, 74, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":75
+ *     # diverged
+ *     DIVERGED_NULL             = KSP_DIVERGED_NULL
+ *     DIVERGED_MAX_IT           = KSP_DIVERGED_MAX_IT             # <<<<<<<<<<<<<<
+ *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL
+ *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_ITS); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 75, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_MAX_IT, __pyx_t_8) < 0) __PYX_ERR(35, 75, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":76
+ *     DIVERGED_NULL             = KSP_DIVERGED_NULL
+ *     DIVERGED_MAX_IT           = KSP_DIVERGED_MAX_IT
+ *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL             # <<<<<<<<<<<<<<
+ *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN
+ *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_DTOL); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_DTOL, __pyx_t_8) < 0) __PYX_ERR(35, 76, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":77
+ *     DIVERGED_MAX_IT           = KSP_DIVERGED_MAX_IT
+ *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL
+ *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
+ *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG
+ *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_8) < 0) __PYX_ERR(35, 77, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":78
+ *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL
+ *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN
+ *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG             # <<<<<<<<<<<<<<
+ *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC
+ *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
+ */
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_BREAKDOWN_BICG); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN_BICG, __pyx_t_8) < 0) __PYX_ERR(35, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "PETSc/KSP.pyx":79
+ *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN
+ *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG
+ *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC             # <<<<<<<<<<<<<<
+ *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
+ *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF
  */
-  __pyx_t_8 = PyInt_FromLong(PC_SYMMETRIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_NONSYMMETRIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 79, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_NONSYMMETRIC, __pyx_t_8) < 0) __PYX_ERR(35, 79, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":54
- *     SYMMETRIC = PC_SYMMETRIC
- *     # aliases
- *     L = LEFT             # <<<<<<<<<<<<<<
- *     R = RIGHT
- *     S = SYMMETRIC
+  /* "PETSc/KSP.pyx":80
+ *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG
+ *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC
+ *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC             # <<<<<<<<<<<<<<
+ *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF
+ *     DIVERGED_INDEFINITE_MAT   = KSP_DIVERGED_INDEFINITE_MAT
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_LEFT);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_LEFT);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_INDEFINITE_PC); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 80, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_L, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_INDEFINITE_PC, __pyx_t_8) < 0) __PYX_ERR(35, 80, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":55
- *     # aliases
- *     L = LEFT
- *     R = RIGHT             # <<<<<<<<<<<<<<
- *     S = SYMMETRIC
+  /* "PETSc/KSP.pyx":81
+ *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC
+ *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
+ *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF             # <<<<<<<<<<<<<<
+ *     DIVERGED_INDEFINITE_MAT   = KSP_DIVERGED_INDEFINITE_MAT
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_RIGHT);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_RIGHT);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_NANORINF); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_R, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_NANORINF, __pyx_t_8) < 0) __PYX_ERR(35, 81, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":56
- *     L = LEFT
- *     R = RIGHT
- *     S = SYMMETRIC             # <<<<<<<<<<<<<<
+  /* "PETSc/KSP.pyx":82
+ *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
+ *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF
+ *     DIVERGED_INDEFINITE_MAT   = KSP_DIVERGED_INDEFINITE_MAT             # <<<<<<<<<<<<<<
  * 
- * class PCASMType(object):
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SYMMETRIC);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_INDEFINITE_MAT); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 82, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_S, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_INDEFINITE_MAT, __pyx_t_8) < 0) __PYX_ERR(35, 82, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":48
- *     KACZMARZ     = S_(PCKACZMARZ)
+  /* "PETSc/KSP.pyx":59
+ *     NATURAL          = NORM_NATURAL
  * 
- * class PCSide(object):             # <<<<<<<<<<<<<<
- *     # native
- *     LEFT      = PC_LEFT
+ * class KSPConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     #iterating
+ *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCSide, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPConvergedReason, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(35, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCSide, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPConvergedReason, __pyx_t_8) < 0) __PYX_ERR(35, 59, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":58
- *     S = SYMMETRIC
+  /* "PETSc/KSP.pyx":88
+ * cdef class KSP(Object):
  * 
- * class PCASMType(object):             # <<<<<<<<<<<<<<
- *     NONE        = PC_ASM_NONE
- *     BASIC       = PC_ASM_BASIC
+ *     Type            = KSPType             # <<<<<<<<<<<<<<
+ *     NormType        = KSPNormType
+ *     ConvergedReason = KSPConvergedReason
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPType); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCASMType, __pyx_n_s_PCASMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(35, 88, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
 
-  /* "PETSc/PC.pyx":59
+  /* "PETSc/KSP.pyx":89
+ * 
+ *     Type            = KSPType
+ *     NormType        = KSPNormType             # <<<<<<<<<<<<<<
+ *     ConvergedReason = KSPConvergedReason
  * 
- * class PCASMType(object):
- *     NONE        = PC_ASM_NONE             # <<<<<<<<<<<<<<
- *     BASIC       = PC_ASM_BASIC
- *     RESTRICT    = PC_ASM_RESTRICT
  */
-  __pyx_t_8 = PyInt_FromLong(PC_ASM_NONE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPNormType); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 89, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_NormType, __pyx_t_3) < 0) __PYX_ERR(35, 89, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
 
-  /* "PETSc/PC.pyx":60
- * class PCASMType(object):
- *     NONE        = PC_ASM_NONE
- *     BASIC       = PC_ASM_BASIC             # <<<<<<<<<<<<<<
- *     RESTRICT    = PC_ASM_RESTRICT
- *     INTERPOLATE = PC_ASM_INTERPOLATE
+  /* "PETSc/KSP.pyx":90
+ *     Type            = KSPType
+ *     NormType        = KSPNormType
+ *     ConvergedReason = KSPConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ *     # --- xxx ---
  */
-  __pyx_t_8 = PyInt_FromLong(PC_ASM_BASIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BASIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPConvergedReason); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_3) < 0) __PYX_ERR(35, 90, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
 
-  /* "PETSc/PC.pyx":61
- *     NONE        = PC_ASM_NONE
- *     BASIC       = PC_ASM_BASIC
- *     RESTRICT    = PC_ASM_RESTRICT             # <<<<<<<<<<<<<<
- *     INTERPOLATE = PC_ASM_INTERPOLATE
+  /* "PETSc/KSP.pyx":655
+ * # --------------------------------------------------------------------
  * 
+ * del KSPType             # <<<<<<<<<<<<<<
+ * del KSPNormType
+ * del KSPConvergedReason
  */
-  __pyx_t_8 = PyInt_FromLong(PC_ASM_RESTRICT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RESTRICT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPType) < 0) __PYX_ERR(35, 655, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":62
- *     BASIC       = PC_ASM_BASIC
- *     RESTRICT    = PC_ASM_RESTRICT
- *     INTERPOLATE = PC_ASM_INTERPOLATE             # <<<<<<<<<<<<<<
+  /* "PETSc/KSP.pyx":656
+ * 
+ * del KSPType
+ * del KSPNormType             # <<<<<<<<<<<<<<
+ * del KSPConvergedReason
  * 
- * class PCGASMType(object):
  */
-  __pyx_t_8 = PyInt_FromLong(PC_ASM_INTERPOLATE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERPOLATE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPNormType) < 0) __PYX_ERR(35, 656, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":58
- *     S = SYMMETRIC
+  /* "PETSc/KSP.pyx":657
+ * del KSPType
+ * del KSPNormType
+ * del KSPConvergedReason             # <<<<<<<<<<<<<<
  * 
- * class PCASMType(object):             # <<<<<<<<<<<<<<
- *     NONE        = PC_ASM_NONE
- *     BASIC       = PC_ASM_BASIC
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCASMType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCASMType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPConvergedReason) < 0) __PYX_ERR(35, 657, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":64
- *     INTERPOLATE = PC_ASM_INTERPOLATE
+  /* "PETSc/SNES.pyx":3
+ * # --------------------------------------------------------------------
  * 
- * class PCGASMType(object):             # <<<<<<<<<<<<<<
- *     NONE        = PC_GASM_NONE
- *     BASIC       = PC_GASM_BASIC
+ * class SNESType(object):             # <<<<<<<<<<<<<<
+ *     NEWTONLS     = S_(SNESNEWTONLS)
+ *     NEWTONTR     = S_(SNESNEWTONTR)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCGASMType, __pyx_n_s_PCGASMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_SNESType, __pyx_n_s_SNESType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/PC.pyx":65
+  /* "PETSc/SNES.pyx":4
  * 
- * class PCGASMType(object):
- *     NONE        = PC_GASM_NONE             # <<<<<<<<<<<<<<
- *     BASIC       = PC_GASM_BASIC
- *     RESTRICT    = PC_GASM_RESTRICT
- */
-  __pyx_t_8 = PyInt_FromLong(PC_GASM_NONE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/PC.pyx":66
- * class PCGASMType(object):
- *     NONE        = PC_GASM_NONE
- *     BASIC       = PC_GASM_BASIC             # <<<<<<<<<<<<<<
- *     RESTRICT    = PC_GASM_RESTRICT
- *     INTERPOLATE = PC_GASM_INTERPOLATE
+ * class SNESType(object):
+ *     NEWTONLS     = S_(SNESNEWTONLS)             # <<<<<<<<<<<<<<
+ *     NEWTONTR     = S_(SNESNEWTONTR)
+ *     PYTHON       = S_(SNESPYTHON)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_GASM_BASIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNEWTONLS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BASIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEWTONLS, __pyx_t_8) < 0) __PYX_ERR(36, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":67
- *     NONE        = PC_GASM_NONE
- *     BASIC       = PC_GASM_BASIC
- *     RESTRICT    = PC_GASM_RESTRICT             # <<<<<<<<<<<<<<
- *     INTERPOLATE = PC_GASM_INTERPOLATE
- * 
+  /* "PETSc/SNES.pyx":5
+ * class SNESType(object):
+ *     NEWTONLS     = S_(SNESNEWTONLS)
+ *     NEWTONTR     = S_(SNESNEWTONTR)             # <<<<<<<<<<<<<<
+ *     PYTHON       = S_(SNESPYTHON)
+ *     TEST         = S_(SNESTEST)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_GASM_RESTRICT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNEWTONTR); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RESTRICT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEWTONTR, __pyx_t_8) < 0) __PYX_ERR(36, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":68
- *     BASIC       = PC_GASM_BASIC
- *     RESTRICT    = PC_GASM_RESTRICT
- *     INTERPOLATE = PC_GASM_INTERPOLATE             # <<<<<<<<<<<<<<
- * 
- * class PCGAMGType(object):
+  /* "PETSc/SNES.pyx":6
+ *     NEWTONLS     = S_(SNESNEWTONLS)
+ *     NEWTONTR     = S_(SNESNEWTONTR)
+ *     PYTHON       = S_(SNESPYTHON)             # <<<<<<<<<<<<<<
+ *     TEST         = S_(SNESTEST)
+ *     NRICHARDSON  = S_(SNESNRICHARDSON)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_GASM_INTERPOLATE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESPYTHON); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERPOLATE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) __PYX_ERR(36, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":64
- *     INTERPOLATE = PC_ASM_INTERPOLATE
- * 
- * class PCGASMType(object):             # <<<<<<<<<<<<<<
- *     NONE        = PC_GASM_NONE
- *     BASIC       = PC_GASM_BASIC
+  /* "PETSc/SNES.pyx":7
+ *     NEWTONTR     = S_(SNESNEWTONTR)
+ *     PYTHON       = S_(SNESPYTHON)
+ *     TEST         = S_(SNESTEST)             # <<<<<<<<<<<<<<
+ *     NRICHARDSON  = S_(SNESNRICHARDSON)
+ *     KSPONLY      = S_(SNESKSPONLY)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCGASMType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESTEST); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCGASMType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TEST, __pyx_t_8) < 0) __PYX_ERR(36, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "PETSc/PC.pyx":70
- *     INTERPOLATE = PC_GASM_INTERPOLATE
- * 
- * class PCGAMGType(object):             # <<<<<<<<<<<<<<
- *     AGG       = S_(PCGAMGAGG)
- *     GEO       = S_(PCGAMGGEO)
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCGAMGType, __pyx_n_s_PCGAMGType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/PC.pyx":71
- * 
- * class PCGAMGType(object):
- *     AGG       = S_(PCGAMGAGG)             # <<<<<<<<<<<<<<
- *     GEO       = S_(PCGAMGGEO)
- *     CLASSICAL = S_(PCGAMGCLASSICAL)
+  /* "PETSc/SNES.pyx":8
+ *     PYTHON       = S_(SNESPYTHON)
+ *     TEST         = S_(SNESTEST)
+ *     NRICHARDSON  = S_(SNESNRICHARDSON)             # <<<<<<<<<<<<<<
+ *     KSPONLY      = S_(SNESKSPONLY)
+ *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGAGG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNRICHARDSON); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_AGG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NRICHARDSON, __pyx_t_8) < 0) __PYX_ERR(36, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":72
- * class PCGAMGType(object):
- *     AGG       = S_(PCGAMGAGG)
- *     GEO       = S_(PCGAMGGEO)             # <<<<<<<<<<<<<<
- *     CLASSICAL = S_(PCGAMGCLASSICAL)
- * 
+  /* "PETSc/SNES.pyx":9
+ *     TEST         = S_(SNESTEST)
+ *     NRICHARDSON  = S_(SNESNRICHARDSON)
+ *     KSPONLY      = S_(SNESKSPONLY)             # <<<<<<<<<<<<<<
+ *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
+ *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGGEO); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESKSPONLY); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GEO, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KSPONLY, __pyx_t_8) < 0) __PYX_ERR(36, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":73
- *     AGG       = S_(PCGAMGAGG)
- *     GEO       = S_(PCGAMGGEO)
- *     CLASSICAL = S_(PCGAMGCLASSICAL)             # <<<<<<<<<<<<<<
- * 
- * class PCCompositeType(object):
+  /* "PETSc/SNES.pyx":10
+ *     NRICHARDSON  = S_(SNESNRICHARDSON)
+ *     KSPONLY      = S_(SNESKSPONLY)
+ *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)             # <<<<<<<<<<<<<<
+ *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
+ *     NGMRES       = S_(SNESNGMRES)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGCLASSICAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESVINEWTONRSLS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CLASSICAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VINEWTONRSLS, __pyx_t_8) < 0) __PYX_ERR(36, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":70
- *     INTERPOLATE = PC_GASM_INTERPOLATE
- * 
- * class PCGAMGType(object):             # <<<<<<<<<<<<<<
- *     AGG       = S_(PCGAMGAGG)
- *     GEO       = S_(PCGAMGGEO)
+  /* "PETSc/SNES.pyx":11
+ *     KSPONLY      = S_(SNESKSPONLY)
+ *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
+ *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)             # <<<<<<<<<<<<<<
+ *     NGMRES       = S_(SNESNGMRES)
+ *     QN           = S_(SNESQN)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCGAMGType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESVINEWTONSSLS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCGAMGType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VINEWTONSSLS, __pyx_t_8) < 0) __PYX_ERR(36, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "PETSc/PC.pyx":75
- *     CLASSICAL = S_(PCGAMGCLASSICAL)
- * 
- * class PCCompositeType(object):             # <<<<<<<<<<<<<<
- *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
- *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCCompositeType, __pyx_n_s_PCCompositeType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/PC.pyx":76
- * 
- * class PCCompositeType(object):
- *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE             # <<<<<<<<<<<<<<
- *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
- *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
+  /* "PETSc/SNES.pyx":12
+ *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
+ *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
+ *     NGMRES       = S_(SNESNGMRES)             # <<<<<<<<<<<<<<
+ *     QN           = S_(SNESQN)
+ *     SHELL        = S_(SNESSHELL)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_COMPOSITE_ADDITIVE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNGMRES); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADDITIVE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NGMRES, __pyx_t_8) < 0) __PYX_ERR(36, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":77
- * class PCCompositeType(object):
- *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
- *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE             # <<<<<<<<<<<<<<
- *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
- *     SPECIAL                  = PC_COMPOSITE_SPECIAL
+  /* "PETSc/SNES.pyx":13
+ *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
+ *     NGMRES       = S_(SNESNGMRES)
+ *     QN           = S_(SNESQN)             # <<<<<<<<<<<<<<
+ *     SHELL        = S_(SNESSHELL)
+ *     NGS          = S_(SNESNGS)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_COMPOSITE_MULTIPLICATIVE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESQN); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MULTIPLICATIVE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QN, __pyx_t_8) < 0) __PYX_ERR(36, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":78
- *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
- *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
- *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE             # <<<<<<<<<<<<<<
- *     SPECIAL                  = PC_COMPOSITE_SPECIAL
- *     SCHUR                    = PC_COMPOSITE_SCHUR
+  /* "PETSc/SNES.pyx":14
+ *     NGMRES       = S_(SNESNGMRES)
+ *     QN           = S_(SNESQN)
+ *     SHELL        = S_(SNESSHELL)             # <<<<<<<<<<<<<<
+ *     NGS          = S_(SNESNGS)
+ *     NCG          = S_(SNESNCG)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESSHELL); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC_MULTIPLICATIVE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) __PYX_ERR(36, 14, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":79
- *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
- *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
- *     SPECIAL                  = PC_COMPOSITE_SPECIAL             # <<<<<<<<<<<<<<
- *     SCHUR                    = PC_COMPOSITE_SCHUR
- * 
+  /* "PETSc/SNES.pyx":15
+ *     QN           = S_(SNESQN)
+ *     SHELL        = S_(SNESSHELL)
+ *     NGS          = S_(SNESNGS)             # <<<<<<<<<<<<<<
+ *     NCG          = S_(SNESNCG)
+ *     FAS          = S_(SNESFAS)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_COMPOSITE_SPECIAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNGS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SPECIAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NGS, __pyx_t_8) < 0) __PYX_ERR(36, 15, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":80
- *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
- *     SPECIAL                  = PC_COMPOSITE_SPECIAL
- *     SCHUR                    = PC_COMPOSITE_SCHUR             # <<<<<<<<<<<<<<
- * 
- * class PCFieldSplitSchurPreType(object):
+  /* "PETSc/SNES.pyx":16
+ *     SHELL        = S_(SNESSHELL)
+ *     NGS          = S_(SNESNGS)
+ *     NCG          = S_(SNESNCG)             # <<<<<<<<<<<<<<
+ *     FAS          = S_(SNESFAS)
+ *     MS           = S_(SNESMS)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_COMPOSITE_SCHUR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNCG); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCHUR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NCG, __pyx_t_8) < 0) __PYX_ERR(36, 16, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":75
- *     CLASSICAL = S_(PCGAMGCLASSICAL)
- * 
- * class PCCompositeType(object):             # <<<<<<<<<<<<<<
- *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
- *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
+  /* "PETSc/SNES.pyx":17
+ *     NGS          = S_(SNESNGS)
+ *     NCG          = S_(SNESNCG)
+ *     FAS          = S_(SNESFAS)             # <<<<<<<<<<<<<<
+ *     MS           = S_(SNESMS)
+ *     NASM         = S_(SNESNASM)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCCompositeType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESFAS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCCompositeType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FAS, __pyx_t_8) < 0) __PYX_ERR(36, 17, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "PETSc/PC.pyx":82
- *     SCHUR                    = PC_COMPOSITE_SCHUR
- * 
- * class PCFieldSplitSchurPreType(object):             # <<<<<<<<<<<<<<
- *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
- *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_n_s_PCFieldSplitSchurPreType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/PC.pyx":83
- * 
- * class PCFieldSplitSchurPreType(object):
- *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF             # <<<<<<<<<<<<<<
- *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
- *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
+  /* "PETSc/SNES.pyx":18
+ *     NCG          = S_(SNESNCG)
+ *     FAS          = S_(SNESFAS)
+ *     MS           = S_(SNESMS)             # <<<<<<<<<<<<<<
+ *     NASM         = S_(SNESNASM)
+ *     ANDERSON     = S_(SNESANDERSON)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_PRE_SELF); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESMS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SELF, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MS, __pyx_t_8) < 0) __PYX_ERR(36, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":84
- * class PCFieldSplitSchurPreType(object):
- *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
- *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP             # <<<<<<<<<<<<<<
- *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
- *     USER                     = PC_FIELDSPLIT_SCHUR_PRE_USER
+  /* "PETSc/SNES.pyx":19
+ *     FAS          = S_(SNESFAS)
+ *     MS           = S_(SNESMS)
+ *     NASM         = S_(SNESNASM)             # <<<<<<<<<<<<<<
+ *     ANDERSON     = S_(SNESANDERSON)
+ *     ASPIN        = S_(SNESASPIN)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_PRE_SELFP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNASM); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SELFP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NASM, __pyx_t_8) < 0) __PYX_ERR(36, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":85
- *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
- *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
- *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11             # <<<<<<<<<<<<<<
- *     USER                     = PC_FIELDSPLIT_SCHUR_PRE_USER
- *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
+  /* "PETSc/SNES.pyx":20
+ *     MS           = S_(SNESMS)
+ *     NASM         = S_(SNESNASM)
+ *     ANDERSON     = S_(SNESANDERSON)             # <<<<<<<<<<<<<<
+ *     ASPIN        = S_(SNESASPIN)
+ *     COMPOSITE    = S_(SNESCOMPOSITE)
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_PRE_A11); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESANDERSON); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_A11, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ANDERSON, __pyx_t_8) < 0) __PYX_ERR(36, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":86
- *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
- *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
- *     USER                     = PC_FIELDSPLIT_SCHUR_PRE_USER             # <<<<<<<<<<<<<<
- *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
+  /* "PETSc/SNES.pyx":21
+ *     NASM         = S_(SNESNASM)
+ *     ANDERSON     = S_(SNESANDERSON)
+ *     ASPIN        = S_(SNESASPIN)             # <<<<<<<<<<<<<<
+ *     COMPOSITE    = S_(SNESCOMPOSITE)
  * 
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_PRE_USER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESASPIN); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 21, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASPIN, __pyx_t_8) < 0) __PYX_ERR(36, 21, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":87
- *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
- *     USER                     = PC_FIELDSPLIT_SCHUR_PRE_USER
- *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL             # <<<<<<<<<<<<<<
+  /* "PETSc/SNES.pyx":22
+ *     ANDERSON     = S_(SNESANDERSON)
+ *     ASPIN        = S_(SNESASPIN)
+ *     COMPOSITE    = S_(SNESCOMPOSITE)             # <<<<<<<<<<<<<<
  * 
- * class PCFieldSplitSchurFactType(object):
+ * class SNESNormSchedule(object):
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_PRE_FULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESCOMPOSITE); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 22, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSITE, __pyx_t_8) < 0) __PYX_ERR(36, 22, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":82
- *     SCHUR                    = PC_COMPOSITE_SCHUR
+  /* "PETSc/SNES.pyx":3
+ * # --------------------------------------------------------------------
  * 
- * class PCFieldSplitSchurPreType(object):             # <<<<<<<<<<<<<<
- *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
- *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
+ * class SNESType(object):             # <<<<<<<<<<<<<<
+ *     NEWTONLS     = S_(SNESNEWTONLS)
+ *     NEWTONTR     = S_(SNESNEWTONTR)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESType, __pyx_t_8) < 0) __PYX_ERR(36, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":89
- *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
+  /* "PETSc/SNES.pyx":24
+ *     COMPOSITE    = S_(SNESCOMPOSITE)
  * 
- * class PCFieldSplitSchurFactType(object):             # <<<<<<<<<<<<<<
- *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
- *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
+ * class SNESNormSchedule(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NORM_DEFAULT            = SNES_NORM_DEFAULT
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_n_s_PCFieldSplitSchurFactType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_SNESNormSchedule, __pyx_n_s_SNESNormSchedule, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/PC.pyx":90
- * 
- * class PCFieldSplitSchurFactType(object):
- *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG             # <<<<<<<<<<<<<<
- *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
- *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER
+  /* "PETSc/SNES.pyx":26
+ * class SNESNormSchedule(object):
+ *     # native
+ *     NORM_DEFAULT            = SNES_NORM_DEFAULT             # <<<<<<<<<<<<<<
+ *     NORM_NONE               = SNES_NORM_NONE
+ *     NORM_ALWAYS             = SNES_NORM_ALWAYS
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_FACT_DIAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_DEFAULT); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 26, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIAG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT, __pyx_t_8) < 0) __PYX_ERR(36, 26, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":91
- * class PCFieldSplitSchurFactType(object):
- *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
- *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER             # <<<<<<<<<<<<<<
- *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER
- *     FULL                     = PC_FIELDSPLIT_SCHUR_FACT_FULL
+  /* "PETSc/SNES.pyx":27
+ *     # native
+ *     NORM_DEFAULT            = SNES_NORM_DEFAULT
+ *     NORM_NONE               = SNES_NORM_NONE             # <<<<<<<<<<<<<<
+ *     NORM_ALWAYS             = SNES_NORM_ALWAYS
+ *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_FACT_LOWER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_NONE); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOWER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_NONE, __pyx_t_8) < 0) __PYX_ERR(36, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":92
- *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
- *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
- *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER             # <<<<<<<<<<<<<<
- *     FULL                     = PC_FIELDSPLIT_SCHUR_FACT_FULL
- * 
+  /* "PETSc/SNES.pyx":28
+ *     NORM_DEFAULT            = SNES_NORM_DEFAULT
+ *     NORM_NONE               = SNES_NORM_NONE
+ *     NORM_ALWAYS             = SNES_NORM_ALWAYS             # <<<<<<<<<<<<<<
+ *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
+ *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_FACT_UPPER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_ALWAYS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 28, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UPPER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_ALWAYS, __pyx_t_8) < 0) __PYX_ERR(36, 28, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":93
- *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
- *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER
- *     FULL                     = PC_FIELDSPLIT_SCHUR_FACT_FULL             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
+  /* "PETSc/SNES.pyx":29
+ *     NORM_NONE               = SNES_NORM_NONE
+ *     NORM_ALWAYS             = SNES_NORM_ALWAYS
+ *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY             # <<<<<<<<<<<<<<
+ *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY
+ *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
  */
-  __pyx_t_8 = PyInt_FromLong(PC_FIELDSPLIT_SCHUR_FACT_FULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_INITIAL_ONLY); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_ONLY, __pyx_t_8) < 0) __PYX_ERR(36, 29, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":89
- *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
- * 
- * class PCFieldSplitSchurFactType(object):             # <<<<<<<<<<<<<<
- *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
- *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
+  /* "PETSc/SNES.pyx":30
+ *     NORM_ALWAYS             = SNES_NORM_ALWAYS
+ *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
+ *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY             # <<<<<<<<<<<<<<
+ *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
+ *     # aliases
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_FINAL_ONLY); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_FINAL_ONLY, __pyx_t_8) < 0) __PYX_ERR(36, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "PETSc/PC.pyx":99
- * cdef class PC(Object):
- * 
- *     Type = PCType             # <<<<<<<<<<<<<<
- *     Side = PCSide
- * 
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
-
-  /* "PETSc/PC.pyx":100
- * 
- *     Type = PCType
- *     Side = PCSide             # <<<<<<<<<<<<<<
- * 
- *     ASMType       = PCASMType
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCSide); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_Side, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
-
-  /* "PETSc/PC.pyx":102
- *     Side = PCSide
- * 
- *     ASMType       = PCASMType             # <<<<<<<<<<<<<<
- *     GASMType      = PCGASMType
- *     GAMGType      = PCGAMGType
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCASMType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_ASMType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
-
-  /* "PETSc/PC.pyx":103
- * 
- *     ASMType       = PCASMType
- *     GASMType      = PCGASMType             # <<<<<<<<<<<<<<
- *     GAMGType      = PCGAMGType
- *     CompositeType = PCCompositeType
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCGASMType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_GASMType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":104
- *     ASMType       = PCASMType
- *     GASMType      = PCGASMType
- *     GAMGType      = PCGAMGType             # <<<<<<<<<<<<<<
- *     CompositeType = PCCompositeType
- *     SchurFactType = PCFieldSplitSchurFactType
+  /* "PETSc/SNES.pyx":31
+ *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
+ *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY
+ *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY             # <<<<<<<<<<<<<<
+ *     # aliases
+ *     DEFAULT            = NORM_DEFAULT
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCGAMGType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_GAMGType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
+  __pyx_t_8 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_INITIAL_FINAL_ONLY); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_FINAL_ONLY, __pyx_t_8) < 0) __PYX_ERR(36, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":105
- *     GASMType      = PCGASMType
- *     GAMGType      = PCGAMGType
- *     CompositeType = PCCompositeType             # <<<<<<<<<<<<<<
- *     SchurFactType = PCFieldSplitSchurFactType
- *     SchurPreType  = PCFieldSplitSchurPreType
+  /* "PETSc/SNES.pyx":33
+ *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
+ *     # aliases
+ *     DEFAULT            = NORM_DEFAULT             # <<<<<<<<<<<<<<
+ *     NONE               = NORM_NONE
+ *     ALWAYS             = NORM_ALWAYS
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCCompositeType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_CompositeType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_DEFAULT);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DEFAULT, __pyx_t_8) < 0) __PYX_ERR(36, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":106
- *     GAMGType      = PCGAMGType
- *     CompositeType = PCCompositeType
- *     SchurFactType = PCFieldSplitSchurFactType             # <<<<<<<<<<<<<<
- *     SchurPreType  = PCFieldSplitSchurPreType
- * 
+  /* "PETSc/SNES.pyx":34
+ *     # aliases
+ *     DEFAULT            = NORM_DEFAULT
+ *     NONE               = NORM_NONE             # <<<<<<<<<<<<<<
+ *     ALWAYS             = NORM_ALWAYS
+ *     INITIAL_ONLY       = NORM_INITIAL_ONLY
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCFieldSplitSchurFactType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_SchurFactType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_NONE);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NONE);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) __PYX_ERR(36, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":107
- *     CompositeType = PCCompositeType
- *     SchurFactType = PCFieldSplitSchurFactType
- *     SchurPreType  = PCFieldSplitSchurPreType             # <<<<<<<<<<<<<<
- * 
- *     # --- xxx ---
+  /* "PETSc/SNES.pyx":35
+ *     DEFAULT            = NORM_DEFAULT
+ *     NONE               = NORM_NONE
+ *     ALWAYS             = NORM_ALWAYS             # <<<<<<<<<<<<<<
+ *     INITIAL_ONLY       = NORM_INITIAL_ONLY
+ *     FINAL_ONLY         = NORM_FINAL_ONLY
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCFieldSplitSchurPreType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_SchurPreType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_ALWAYS);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_ALWAYS);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALWAYS, __pyx_t_8) < 0) __PYX_ERR(36, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":523
- * # --------------------------------------------------------------------
- * 
- * del PCType             # <<<<<<<<<<<<<<
- * del PCSide
- * del PCASMType
+  /* "PETSc/SNES.pyx":36
+ *     NONE               = NORM_NONE
+ *     ALWAYS             = NORM_ALWAYS
+ *     INITIAL_ONLY       = NORM_INITIAL_ONLY             # <<<<<<<<<<<<<<
+ *     FINAL_ONLY         = NORM_FINAL_ONLY
+ *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCType) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_ONLY);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INITIAL_ONLY);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INITIAL_ONLY, __pyx_t_8) < 0) __PYX_ERR(36, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":524
+  /* "PETSc/SNES.pyx":37
+ *     ALWAYS             = NORM_ALWAYS
+ *     INITIAL_ONLY       = NORM_INITIAL_ONLY
+ *     FINAL_ONLY         = NORM_FINAL_ONLY             # <<<<<<<<<<<<<<
+ *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
  * 
- * del PCType
- * del PCSide             # <<<<<<<<<<<<<<
- * del PCASMType
- * del PCGASMType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCSide) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/PC.pyx":525
- * del PCType
- * del PCSide
- * del PCASMType             # <<<<<<<<<<<<<<
- * del PCGASMType
- * del PCGAMGType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCASMType) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/PC.pyx":526
- * del PCSide
- * del PCASMType
- * del PCGASMType             # <<<<<<<<<<<<<<
- * del PCGAMGType
- * del PCCompositeType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCGASMType) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/PC.pyx":527
- * del PCASMType
- * del PCGASMType
- * del PCGAMGType             # <<<<<<<<<<<<<<
- * del PCCompositeType
- * del PCFieldSplitSchurPreType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCGAMGType) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/PC.pyx":528
- * del PCGASMType
- * del PCGAMGType
- * del PCCompositeType             # <<<<<<<<<<<<<<
- * del PCFieldSplitSchurPreType
- * del PCFieldSplitSchurFactType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCCompositeType) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_FINAL_ONLY);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_FINAL_ONLY);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FINAL_ONLY, __pyx_t_8) < 0) __PYX_ERR(36, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":529
- * del PCGAMGType
- * del PCCompositeType
- * del PCFieldSplitSchurPreType             # <<<<<<<<<<<<<<
- * del PCFieldSplitSchurFactType
+  /* "PETSc/SNES.pyx":38
+ *     INITIAL_ONLY       = NORM_INITIAL_ONLY
+ *     FINAL_ONLY         = NORM_FINAL_ONLY
+ *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY             # <<<<<<<<<<<<<<
  * 
+ * class SNESConvergedReason(object):
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCFieldSplitSchurPreType) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_FINAL_ONLY);
+  if (unlikely(!__pyx_t_8)) {
+    PyErr_Clear();
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INITIAL_FINAL_ONLY);
+  }
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INITIAL_FINAL_ONLY, __pyx_t_8) < 0) __PYX_ERR(36, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/PC.pyx":530
- * del PCCompositeType
- * del PCFieldSplitSchurPreType
- * del PCFieldSplitSchurFactType             # <<<<<<<<<<<<<<
+  /* "PETSc/SNES.pyx":24
+ *     COMPOSITE    = S_(SNESCOMPOSITE)
  * 
- * # --------------------------------------------------------------------
+ * class SNESNormSchedule(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NORM_DEFAULT            = SNES_NORM_DEFAULT
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCFieldSplitSchurFactType) < 0) {__pyx_filename = __pyx_f[34]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESNormSchedule, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESNormSchedule, __pyx_t_8) < 0) __PYX_ERR(36, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":3
- * # --------------------------------------------------------------------
+  /* "PETSc/SNES.pyx":40
+ *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
  * 
- * class KSPType(object):             # <<<<<<<<<<<<<<
- *     RICHARDSON = S_(KSPRICHARDSON)
- *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
+ * class SNESConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     # iterating
+ *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_KSPType, __pyx_n_s_KSPType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_SNESConvergedReason, __pyx_n_s_SNESConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/KSP.pyx":4
- * 
- * class KSPType(object):
- *     RICHARDSON = S_(KSPRICHARDSON)             # <<<<<<<<<<<<<<
- *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
- *     CG         = S_(KSPCG)
+  /* "PETSc/SNES.pyx":42
+ * class SNESConvergedReason(object):
+ *     # iterating
+ *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     ITERATING                = SNES_CONVERGED_ITERATING
+ *     # converged
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPRICHARDSON); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RICHARDSON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_8) < 0) __PYX_ERR(36, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":5
- * class KSPType(object):
- *     RICHARDSON = S_(KSPRICHARDSON)
- *     CHEBYSHEV  = S_(KSPCHEBYSHEV)             # <<<<<<<<<<<<<<
- *     CG         = S_(KSPCG)
- *     GROPPCG    = S_(KSPGROPPCG)
+  /* "PETSc/SNES.pyx":43
+ *     # iterating
+ *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING
+ *     ITERATING                = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     # converged
+ *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCHEBYSHEV); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 43, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHEBYSHEV, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_8) < 0) __PYX_ERR(36, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":6
- *     RICHARDSON = S_(KSPRICHARDSON)
- *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
- *     CG         = S_(KSPCG)             # <<<<<<<<<<<<<<
- *     GROPPCG    = S_(KSPGROPPCG)
- *     PIPECG     = S_(KSPPIPECG)
+  /* "PETSc/SNES.pyx":45
+ *     ITERATING                = SNES_CONVERGED_ITERATING
+ *     # converged
+ *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS             # <<<<<<<<<<<<<<
+ *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE
+ *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_FNORM_ABS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_FNORM_ABS, __pyx_t_8) < 0) __PYX_ERR(36, 45, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":7
- *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
- *     CG         = S_(KSPCG)
- *     GROPPCG    = S_(KSPGROPPCG)             # <<<<<<<<<<<<<<
- *     PIPECG     = S_(KSPPIPECG)
- *     CGNE       = S_(KSPCGNE)
+  /* "PETSc/SNES.pyx":46
+ *     # converged
+ *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS
+ *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE             # <<<<<<<<<<<<<<
+ *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
+ *     CONVERGED_ITS            = SNES_CONVERGED_ITS
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPGROPPCG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_FNORM_RELATIVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GROPPCG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_FNORM_RELATIVE, __pyx_t_8) < 0) __PYX_ERR(36, 46, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":8
- *     CG         = S_(KSPCG)
- *     GROPPCG    = S_(KSPGROPPCG)
- *     PIPECG     = S_(KSPPIPECG)             # <<<<<<<<<<<<<<
- *     CGNE       = S_(KSPCGNE)
- *     NASH       = S_(KSPNASH)
+  /* "PETSc/SNES.pyx":47
+ *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS
+ *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE
+ *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITS            = SNES_CONVERGED_ITS
+ *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPECG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_SNORM_RELATIVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PIPECG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_SNORM_RELATIVE, __pyx_t_8) < 0) __PYX_ERR(36, 47, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":9
- *     GROPPCG    = S_(KSPGROPPCG)
- *     PIPECG     = S_(KSPPIPECG)
- *     CGNE       = S_(KSPCGNE)             # <<<<<<<<<<<<<<
- *     NASH       = S_(KSPNASH)
- *     STCG       = S_(KSPSTCG)
+  /* "PETSc/SNES.pyx":48
+ *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE
+ *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
+ *     CONVERGED_ITS            = SNES_CONVERGED_ITS             # <<<<<<<<<<<<<<
+ *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
+ *     # diverged
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGNE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_ITS); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 48, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CGNE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITS, __pyx_t_8) < 0) __PYX_ERR(36, 48, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":10
- *     PIPECG     = S_(KSPPIPECG)
- *     CGNE       = S_(KSPCGNE)
- *     NASH       = S_(KSPNASH)             # <<<<<<<<<<<<<<
- *     STCG       = S_(KSPSTCG)
- *     GLTR       = S_(KSPGLTR)
+  /* "PETSc/SNES.pyx":49
+ *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
+ *     CONVERGED_ITS            = SNES_CONVERGED_ITS
+ *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA             # <<<<<<<<<<<<<<
+ *     # diverged
+ *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPNASH); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_TR_DELTA); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NASH, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TR_DELTA, __pyx_t_8) < 0) __PYX_ERR(36, 49, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":11
- *     CGNE       = S_(KSPCGNE)
- *     NASH       = S_(KSPNASH)
- *     STCG       = S_(KSPSTCG)             # <<<<<<<<<<<<<<
- *     GLTR       = S_(KSPGLTR)
- *     GMRES      = S_(KSPGMRES)
+  /* "PETSc/SNES.pyx":51
+ *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
+ *     # diverged
+ *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN             # <<<<<<<<<<<<<<
+ *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT
+ *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPSTCG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_FUNCTION_DOMAIN); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STCG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_FUNCTION_DOMAIN, __pyx_t_8) < 0) __PYX_ERR(36, 51, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":12
- *     NASH       = S_(KSPNASH)
- *     STCG       = S_(KSPSTCG)
- *     GLTR       = S_(KSPGLTR)             # <<<<<<<<<<<<<<
- *     GMRES      = S_(KSPGMRES)
- *     FGMRES     = S_(KSPFGMRES)
+  /* "PETSc/SNES.pyx":52
+ *     # diverged
+ *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN
+ *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT             # <<<<<<<<<<<<<<
+ *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
+ *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPGLTR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_FUNCTION_COUNT); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GLTR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_FUNCTION_COUNT, __pyx_t_8) < 0) __PYX_ERR(36, 52, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":13
- *     STCG       = S_(KSPSTCG)
- *     GLTR       = S_(KSPGLTR)
- *     GMRES      = S_(KSPGMRES)             # <<<<<<<<<<<<<<
- *     FGMRES     = S_(KSPFGMRES)
- *     LGMRES     = S_(KSPLGMRES)
+  /* "PETSc/SNES.pyx":53
+ *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN
+ *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT
+ *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN             # <<<<<<<<<<<<<<
+ *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
+ *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPGMRES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_FNORM_NAN); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GMRES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_FNORM_NAN, __pyx_t_8) < 0) __PYX_ERR(36, 53, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":14
- *     GLTR       = S_(KSPGLTR)
- *     GMRES      = S_(KSPGMRES)
- *     FGMRES     = S_(KSPFGMRES)             # <<<<<<<<<<<<<<
- *     LGMRES     = S_(KSPLGMRES)
- *     DGMRES     = S_(KSPDGMRES)
+  /* "PETSc/SNES.pyx":54
+ *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT
+ *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
+ *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT             # <<<<<<<<<<<<<<
+ *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
+ *     DIVERGED_INNER           = SNES_DIVERGED_INNER
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPFGMRES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_MAX_IT); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FGMRES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_MAX_IT, __pyx_t_8) < 0) __PYX_ERR(36, 54, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":15
- *     GMRES      = S_(KSPGMRES)
- *     FGMRES     = S_(KSPFGMRES)
- *     LGMRES     = S_(KSPLGMRES)             # <<<<<<<<<<<<<<
- *     DGMRES     = S_(KSPDGMRES)
- *     PGMRES     = S_(KSPPGMRES)
+  /* "PETSc/SNES.pyx":55
+ *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
+ *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
+ *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH             # <<<<<<<<<<<<<<
+ *     DIVERGED_INNER           = SNES_DIVERGED_INNER
+ *     DIVERGED_LOCAL_MIN       = SNES_DIVERGED_LOCAL_MIN
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPLGMRES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_LINE_SEARCH); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LGMRES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_LINE_SEARCH, __pyx_t_8) < 0) __PYX_ERR(36, 55, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":16
- *     FGMRES     = S_(KSPFGMRES)
- *     LGMRES     = S_(KSPLGMRES)
- *     DGMRES     = S_(KSPDGMRES)             # <<<<<<<<<<<<<<
- *     PGMRES     = S_(KSPPGMRES)
- *     TCQMR      = S_(KSPTCQMR)
+  /* "PETSc/SNES.pyx":56
+ *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
+ *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
+ *     DIVERGED_INNER           = SNES_DIVERGED_INNER             # <<<<<<<<<<<<<<
+ *     DIVERGED_LOCAL_MIN       = SNES_DIVERGED_LOCAL_MIN
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPDGMRES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_INNER); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DGMRES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_INNER, __pyx_t_8) < 0) __PYX_ERR(36, 56, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":17
- *     LGMRES     = S_(KSPLGMRES)
- *     DGMRES     = S_(KSPDGMRES)
- *     PGMRES     = S_(KSPPGMRES)             # <<<<<<<<<<<<<<
- *     TCQMR      = S_(KSPTCQMR)
- *     BCGS       = S_(KSPBCGS)
+  /* "PETSc/SNES.pyx":57
+ *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
+ *     DIVERGED_INNER           = SNES_DIVERGED_INNER
+ *     DIVERGED_LOCAL_MIN       = SNES_DIVERGED_LOCAL_MIN             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPGMRES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_LOCAL_MIN); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PGMRES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_LOCAL_MIN, __pyx_t_8) < 0) __PYX_ERR(36, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":18
- *     DGMRES     = S_(KSPDGMRES)
- *     PGMRES     = S_(KSPPGMRES)
- *     TCQMR      = S_(KSPTCQMR)             # <<<<<<<<<<<<<<
- *     BCGS       = S_(KSPBCGS)
- *     IBCGS      = S_(KSPIBCGS)
+  /* "PETSc/SNES.pyx":40
+ *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
+ * 
+ * class SNESConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     # iterating
+ *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPTCQMR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESConvergedReason, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(36, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TCQMR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESConvergedReason, __pyx_t_8) < 0) __PYX_ERR(36, 40, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":19
- *     PGMRES     = S_(KSPPGMRES)
- *     TCQMR      = S_(KSPTCQMR)
- *     BCGS       = S_(KSPBCGS)             # <<<<<<<<<<<<<<
- *     IBCGS      = S_(KSPIBCGS)
- *     FBCGS      = S_(KSPFBCGS)
+  /* "PETSc/SNES.pyx":63
+ * cdef class SNES(Object):
+ * 
+ *     Type = SNESType             # <<<<<<<<<<<<<<
+ *     NormSchedule = SNESNormSchedule
+ *     ConvergedReason = SNESConvergedReason
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPBCGS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BCGS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESType); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(36, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/KSP.pyx":20
- *     TCQMR      = S_(KSPTCQMR)
- *     BCGS       = S_(KSPBCGS)
- *     IBCGS      = S_(KSPIBCGS)             # <<<<<<<<<<<<<<
- *     FBCGS      = S_(KSPFBCGS)
- *     FBCGSR     = S_(KSPFBCGSR)
+  /* "PETSc/SNES.pyx":64
+ * 
+ *     Type = SNESType
+ *     NormSchedule = SNESNormSchedule             # <<<<<<<<<<<<<<
+ *     ConvergedReason = SNESConvergedReason
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPIBCGS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IBCGS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESNormSchedule); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_NormSchedule, __pyx_t_3) < 0) __PYX_ERR(36, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/KSP.pyx":21
- *     BCGS       = S_(KSPBCGS)
- *     IBCGS      = S_(KSPIBCGS)
- *     FBCGS      = S_(KSPFBCGS)             # <<<<<<<<<<<<<<
- *     FBCGSR     = S_(KSPFBCGSR)
- *     BCGSL      = S_(KSPBCGSL)
+  /* "PETSc/SNES.pyx":65
+ *     Type = SNESType
+ *     NormSchedule = SNESNormSchedule
+ *     ConvergedReason = SNESConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ *     # --- xxx ---
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESConvergedReason); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_3) < 0) __PYX_ERR(36, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
+
+  /* "PETSc/SNES.pyx":502
+ *         return toInt(ival)
+ * 
+ *     setMaxNonlinearStepFailures = setMaxStepFailures             # <<<<<<<<<<<<<<
+ *     getMaxNonlinearStepFailures = getMaxStepFailures
+ *     getNonlinearStepFailures    = getStepFailures
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_setMaxStepFailures); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 502, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_setMaxNonlinearStepFailures, __pyx_t_3) < 0) __PYX_ERR(36, 502, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
+
+  /* "PETSc/SNES.pyx":503
+ * 
+ *     setMaxNonlinearStepFailures = setMaxStepFailures
+ *     getMaxNonlinearStepFailures = getMaxStepFailures             # <<<<<<<<<<<<<<
+ *     getNonlinearStepFailures    = getStepFailures
+ *     setMaxLinearSolveFailures   = setMaxKSPFailures
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getMaxStepFailures); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 503, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getMaxNonlinearStepFailures, __pyx_t_3) < 0) __PYX_ERR(36, 503, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
+
+  /* "PETSc/SNES.pyx":504
+ *     setMaxNonlinearStepFailures = setMaxStepFailures
+ *     getMaxNonlinearStepFailures = getMaxStepFailures
+ *     getNonlinearStepFailures    = getStepFailures             # <<<<<<<<<<<<<<
+ *     setMaxLinearSolveFailures   = setMaxKSPFailures
+ *     getMaxLinearSolveFailures   = getMaxKSPFailures
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getStepFailures); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 504, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getNonlinearStepFailures, __pyx_t_3) < 0) __PYX_ERR(36, 504, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
+
+  /* "PETSc/SNES.pyx":505
+ *     getMaxNonlinearStepFailures = getMaxStepFailures
+ *     getNonlinearStepFailures    = getStepFailures
+ *     setMaxLinearSolveFailures   = setMaxKSPFailures             # <<<<<<<<<<<<<<
+ *     getMaxLinearSolveFailures   = getMaxKSPFailures
+ *     getLinearSolveFailures      = getKSPFailures
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_setMaxKSPFailures); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 505, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_setMaxLinearSolveFailures, __pyx_t_3) < 0) __PYX_ERR(36, 505, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
+
+  /* "PETSc/SNES.pyx":506
+ *     getNonlinearStepFailures    = getStepFailures
+ *     setMaxLinearSolveFailures   = setMaxKSPFailures
+ *     getMaxLinearSolveFailures   = getMaxKSPFailures             # <<<<<<<<<<<<<<
+ *     getLinearSolveFailures      = getKSPFailures
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPFBCGS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FBCGS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getMaxKSPFailures); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 506, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getMaxLinearSolveFailures, __pyx_t_3) < 0) __PYX_ERR(36, 506, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/KSP.pyx":22
- *     IBCGS      = S_(KSPIBCGS)
- *     FBCGS      = S_(KSPFBCGS)
- *     FBCGSR     = S_(KSPFBCGSR)             # <<<<<<<<<<<<<<
- *     BCGSL      = S_(KSPBCGSL)
- *     CGS        = S_(KSPCGS)
+  /* "PETSc/SNES.pyx":507
+ *     setMaxLinearSolveFailures   = setMaxKSPFailures
+ *     getMaxLinearSolveFailures   = getMaxKSPFailures
+ *     getLinearSolveFailures      = getKSPFailures             # <<<<<<<<<<<<<<
+ * 
+ *     # --- solving ---
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPFBCGSR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FBCGSR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getKSPFailures); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 507, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getLinearSolveFailures, __pyx_t_3) < 0) __PYX_ERR(36, 507, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/KSP.pyx":23
- *     FBCGS      = S_(KSPFBCGS)
- *     FBCGSR     = S_(KSPFBCGSR)
- *     BCGSL      = S_(KSPBCGSL)             # <<<<<<<<<<<<<<
- *     CGS        = S_(KSPCGS)
- *     TFQMR      = S_(KSPTFQMR)
+  /* "PETSc/SNES.pyx":830
+ * # --------------------------------------------------------------------
+ * 
+ * del SNESType             # <<<<<<<<<<<<<<
+ * del SNESNormSchedule
+ * del SNESConvergedReason
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPBCGSL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BCGSL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESType) < 0) __PYX_ERR(36, 830, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":24
- *     FBCGSR     = S_(KSPFBCGSR)
- *     BCGSL      = S_(KSPBCGSL)
- *     CGS        = S_(KSPCGS)             # <<<<<<<<<<<<<<
- *     TFQMR      = S_(KSPTFQMR)
- *     CR         = S_(KSPCR)
+  /* "PETSc/SNES.pyx":831
+ * 
+ * del SNESType
+ * del SNESNormSchedule             # <<<<<<<<<<<<<<
+ * del SNESConvergedReason
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CGS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESNormSchedule) < 0) __PYX_ERR(36, 831, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":25
- *     BCGSL      = S_(KSPBCGSL)
- *     CGS        = S_(KSPCGS)
- *     TFQMR      = S_(KSPTFQMR)             # <<<<<<<<<<<<<<
- *     CR         = S_(KSPCR)
- *     PIPECR     = S_(KSPPIPECR)
+  /* "PETSc/SNES.pyx":832
+ * del SNESType
+ * del SNESNormSchedule
+ * del SNESConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPTFQMR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TFQMR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESConvergedReason) < 0) __PYX_ERR(36, 832, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":26
- *     CGS        = S_(KSPCGS)
- *     TFQMR      = S_(KSPTFQMR)
- *     CR         = S_(KSPCR)             # <<<<<<<<<<<<<<
- *     PIPECR     = S_(KSPPIPECR)
- *     LSQR       = S_(KSPLSQR)
+  /* "PETSc/TS.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class TSType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     EULER    = S_(TSEULER)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPCR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSType, __pyx_n_s_TSType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/KSP.pyx":27
- *     TFQMR      = S_(KSPTFQMR)
- *     CR         = S_(KSPCR)
- *     PIPECR     = S_(KSPPIPECR)             # <<<<<<<<<<<<<<
- *     LSQR       = S_(KSPLSQR)
- *     PREONLY    = S_(KSPPREONLY)
+  /* "PETSc/TS.pyx":5
+ * class TSType(object):
+ *     # native
+ *     EULER    = S_(TSEULER)             # <<<<<<<<<<<<<<
+ *     BEULER   = S_(TSBEULER)
+ *     PSEUDO   = S_(TSPSEUDO)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPECR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSEULER); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PIPECR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EULER, __pyx_t_8) < 0) __PYX_ERR(37, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":28
- *     CR         = S_(KSPCR)
- *     PIPECR     = S_(KSPPIPECR)
- *     LSQR       = S_(KSPLSQR)             # <<<<<<<<<<<<<<
- *     PREONLY    = S_(KSPPREONLY)
- *     QCG        = S_(KSPQCG)
+  /* "PETSc/TS.pyx":6
+ *     # native
+ *     EULER    = S_(TSEULER)
+ *     BEULER   = S_(TSBEULER)             # <<<<<<<<<<<<<<
+ *     PSEUDO   = S_(TSPSEUDO)
+ *     CN       = S_(TSCN)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPLSQR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSBEULER); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LSQR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BEULER, __pyx_t_8) < 0) __PYX_ERR(37, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":29
- *     PIPECR     = S_(KSPPIPECR)
- *     LSQR       = S_(KSPLSQR)
- *     PREONLY    = S_(KSPPREONLY)             # <<<<<<<<<<<<<<
- *     QCG        = S_(KSPQCG)
- *     BICG       = S_(KSPBICG)
+  /* "PETSc/TS.pyx":7
+ *     EULER    = S_(TSEULER)
+ *     BEULER   = S_(TSBEULER)
+ *     PSEUDO   = S_(TSPSEUDO)             # <<<<<<<<<<<<<<
+ *     CN       = S_(TSCN)
+ *     SUNDIALS = S_(TSSUNDIALS)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPREONLY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSPSEUDO); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PREONLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PSEUDO, __pyx_t_8) < 0) __PYX_ERR(37, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":30
- *     LSQR       = S_(KSPLSQR)
- *     PREONLY    = S_(KSPPREONLY)
- *     QCG        = S_(KSPQCG)             # <<<<<<<<<<<<<<
- *     BICG       = S_(KSPBICG)
- *     MINRES     = S_(KSPMINRES)
+  /* "PETSc/TS.pyx":8
+ *     BEULER   = S_(TSBEULER)
+ *     PSEUDO   = S_(TSPSEUDO)
+ *     CN       = S_(TSCN)             # <<<<<<<<<<<<<<
+ *     SUNDIALS = S_(TSSUNDIALS)
+ *     RK       = S_(TSRK)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPQCG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSCN); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QCG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CN, __pyx_t_8) < 0) __PYX_ERR(37, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":31
- *     PREONLY    = S_(KSPPREONLY)
- *     QCG        = S_(KSPQCG)
- *     BICG       = S_(KSPBICG)             # <<<<<<<<<<<<<<
- *     MINRES     = S_(KSPMINRES)
- *     SYMMLQ     = S_(KSPSYMMLQ)
+  /* "PETSc/TS.pyx":9
+ *     PSEUDO   = S_(TSPSEUDO)
+ *     CN       = S_(TSCN)
+ *     SUNDIALS = S_(TSSUNDIALS)             # <<<<<<<<<<<<<<
+ *     RK       = S_(TSRK)
+ *     PYTHON   = S_(TSPYTHON)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPBICG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSSUNDIALS); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BICG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUNDIALS, __pyx_t_8) < 0) __PYX_ERR(37, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":32
- *     QCG        = S_(KSPQCG)
- *     BICG       = S_(KSPBICG)
- *     MINRES     = S_(KSPMINRES)             # <<<<<<<<<<<<<<
- *     SYMMLQ     = S_(KSPSYMMLQ)
- *     LCD        = S_(KSPLCD)
+  /* "PETSc/TS.pyx":10
+ *     CN       = S_(TSCN)
+ *     SUNDIALS = S_(TSSUNDIALS)
+ *     RK       = S_(TSRK)             # <<<<<<<<<<<<<<
+ *     PYTHON   = S_(TSPYTHON)
+ *     THETA    = S_(TSTHETA)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPMINRES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSRK); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MINRES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RK, __pyx_t_8) < 0) __PYX_ERR(37, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":33
- *     BICG       = S_(KSPBICG)
- *     MINRES     = S_(KSPMINRES)
- *     SYMMLQ     = S_(KSPSYMMLQ)             # <<<<<<<<<<<<<<
- *     LCD        = S_(KSPLCD)
- *     PYTHON     = S_(KSPPYTHON)
+  /* "PETSc/TS.pyx":11
+ *     SUNDIALS = S_(TSSUNDIALS)
+ *     RK       = S_(TSRK)
+ *     PYTHON   = S_(TSPYTHON)             # <<<<<<<<<<<<<<
+ *     THETA    = S_(TSTHETA)
+ *     ALPHA    = S_(TSALPHA)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPSYMMLQ); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSPYTHON); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SYMMLQ, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) __PYX_ERR(37, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":34
- *     MINRES     = S_(KSPMINRES)
- *     SYMMLQ     = S_(KSPSYMMLQ)
- *     LCD        = S_(KSPLCD)             # <<<<<<<<<<<<<<
- *     PYTHON     = S_(KSPPYTHON)
- *     GCR        = S_(KSPGCR)
+  /* "PETSc/TS.pyx":12
+ *     RK       = S_(TSRK)
+ *     PYTHON   = S_(TSPYTHON)
+ *     THETA    = S_(TSTHETA)             # <<<<<<<<<<<<<<
+ *     ALPHA    = S_(TSALPHA)
+ *     ALPHA2  = S_(TSALPHA2)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPLCD); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSTHETA); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LCD, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_THETA, __pyx_t_8) < 0) __PYX_ERR(37, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":35
- *     SYMMLQ     = S_(KSPSYMMLQ)
- *     LCD        = S_(KSPLCD)
- *     PYTHON     = S_(KSPPYTHON)             # <<<<<<<<<<<<<<
- *     GCR        = S_(KSPGCR)
- * 
+  /* "PETSc/TS.pyx":13
+ *     PYTHON   = S_(TSPYTHON)
+ *     THETA    = S_(TSTHETA)
+ *     ALPHA    = S_(TSALPHA)             # <<<<<<<<<<<<<<
+ *     ALPHA2  = S_(TSALPHA2)
+ *     GL       = S_(TSGL)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPPYTHON); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSALPHA); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALPHA, __pyx_t_8) < 0) __PYX_ERR(37, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":36
- *     LCD        = S_(KSPLCD)
- *     PYTHON     = S_(KSPPYTHON)
- *     GCR        = S_(KSPGCR)             # <<<<<<<<<<<<<<
- * 
- * class KSPNormType(object):
+  /* "PETSc/TS.pyx":14
+ *     THETA    = S_(TSTHETA)
+ *     ALPHA    = S_(TSALPHA)
+ *     ALPHA2  = S_(TSALPHA2)             # <<<<<<<<<<<<<<
+ *     GL       = S_(TSGL)
+ *     SSP      = S_(TSSSP)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(KSPGCR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSALPHA2); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GCR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALPHA2, __pyx_t_8) < 0) __PYX_ERR(37, 14, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class KSPType(object):             # <<<<<<<<<<<<<<
- *     RICHARDSON = S_(KSPRICHARDSON)
- *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
+  /* "PETSc/TS.pyx":15
+ *     ALPHA    = S_(TSALPHA)
+ *     ALPHA2  = S_(TSALPHA2)
+ *     GL       = S_(TSGL)             # <<<<<<<<<<<<<<
+ *     SSP      = S_(TSSSP)
+ *     ARKIMEX  = S_(TSARKIMEX)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSGL); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GL, __pyx_t_8) < 0) __PYX_ERR(37, 15, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":38
- *     GCR        = S_(KSPGCR)
- * 
- * class KSPNormType(object):             # <<<<<<<<<<<<<<
- *     # native
- *     NORM_DEFAULT          = KSP_NORM_DEFAULT
+  /* "PETSc/TS.pyx":16
+ *     ALPHA2  = S_(TSALPHA2)
+ *     GL       = S_(TSGL)
+ *     SSP      = S_(TSSSP)             # <<<<<<<<<<<<<<
+ *     ARKIMEX  = S_(TSARKIMEX)
+ *     ROSW     = S_(TSROSW)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_KSPNormType, __pyx_n_s_KSPNormType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSSSP); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SSP, __pyx_t_8) < 0) __PYX_ERR(37, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":40
- * class KSPNormType(object):
- *     # native
- *     NORM_DEFAULT          = KSP_NORM_DEFAULT             # <<<<<<<<<<<<<<
- *     NORM_NONE             = KSP_NORM_NONE
- *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
+  /* "PETSc/TS.pyx":17
+ *     GL       = S_(TSGL)
+ *     SSP      = S_(TSSSP)
+ *     ARKIMEX  = S_(TSARKIMEX)             # <<<<<<<<<<<<<<
+ *     ROSW     = S_(TSROSW)
+ *     EIMEX    = S_(TSEIMEX)
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_NORM_DEFAULT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSARKIMEX); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ARKIMEX, __pyx_t_8) < 0) __PYX_ERR(37, 17, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":41
- *     # native
- *     NORM_DEFAULT          = KSP_NORM_DEFAULT
- *     NORM_NONE             = KSP_NORM_NONE             # <<<<<<<<<<<<<<
- *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
- *     NORM_UNPRECONDITIONED = KSP_NORM_UNPRECONDITIONED
+  /* "PETSc/TS.pyx":18
+ *     SSP      = S_(TSSSP)
+ *     ARKIMEX  = S_(TSARKIMEX)
+ *     ROSW     = S_(TSROSW)             # <<<<<<<<<<<<<<
+ *     EIMEX    = S_(TSEIMEX)
+ *     MIMEX    = S_(TSMIMEX)
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_NORM_NONE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSROSW); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ROSW, __pyx_t_8) < 0) __PYX_ERR(37, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":42
- *     NORM_DEFAULT          = KSP_NORM_DEFAULT
- *     NORM_NONE             = KSP_NORM_NONE
- *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED             # <<<<<<<<<<<<<<
- *     NORM_UNPRECONDITIONED = KSP_NORM_UNPRECONDITIONED
- *     NORM_NATURAL          = KSP_NORM_NATURAL
+  /* "PETSc/TS.pyx":19
+ *     ARKIMEX  = S_(TSARKIMEX)
+ *     ROSW     = S_(TSROSW)
+ *     EIMEX    = S_(TSEIMEX)             # <<<<<<<<<<<<<<
+ *     MIMEX    = S_(TSMIMEX)
+ *     BDF      = S_(TSBDF)
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_NORM_PRECONDITIONED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSEIMEX); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_PRECONDITIONED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EIMEX, __pyx_t_8) < 0) __PYX_ERR(37, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":43
- *     NORM_NONE             = KSP_NORM_NONE
- *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
- *     NORM_UNPRECONDITIONED = KSP_NORM_UNPRECONDITIONED             # <<<<<<<<<<<<<<
- *     NORM_NATURAL          = KSP_NORM_NATURAL
+  /* "PETSc/TS.pyx":20
+ *     ROSW     = S_(TSROSW)
+ *     EIMEX    = S_(TSEIMEX)
+ *     MIMEX    = S_(TSMIMEX)             # <<<<<<<<<<<<<<
+ *     BDF      = S_(TSBDF)
  *     # aliases
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_NORM_UNPRECONDITIONED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSMIMEX); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_UNPRECONDITIONED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MIMEX, __pyx_t_8) < 0) __PYX_ERR(37, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":44
- *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
- *     NORM_UNPRECONDITIONED = KSP_NORM_UNPRECONDITIONED
- *     NORM_NATURAL          = KSP_NORM_NATURAL             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":21
+ *     EIMEX    = S_(TSEIMEX)
+ *     MIMEX    = S_(TSMIMEX)
+ *     BDF      = S_(TSBDF)             # <<<<<<<<<<<<<<
  *     # aliases
- *     DEFAULT          = NORM_DEFAULT
+ *     FE = EULER
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_NORM_NATURAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSBDF); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 21, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_NATURAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BDF, __pyx_t_8) < 0) __PYX_ERR(37, 21, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":46
- *     NORM_NATURAL          = KSP_NORM_NATURAL
+  /* "PETSc/TS.pyx":23
+ *     BDF      = S_(TSBDF)
  *     # aliases
- *     DEFAULT          = NORM_DEFAULT             # <<<<<<<<<<<<<<
- *     NONE = NO        = NORM_NONE
- *     PRECONDITIONED   = NORM_PRECONDITIONED
+ *     FE = EULER             # <<<<<<<<<<<<<<
+ *     BE = BEULER
+ *     TH = THETA
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_EULER);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_DEFAULT);
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_EULER);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DEFAULT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FE, __pyx_t_8) < 0) __PYX_ERR(37, 23, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":47
+  /* "PETSc/TS.pyx":24
  *     # aliases
- *     DEFAULT          = NORM_DEFAULT
- *     NONE = NO        = NORM_NONE             # <<<<<<<<<<<<<<
- *     PRECONDITIONED   = NORM_PRECONDITIONED
- *     UNPRECONDITIONED = NORM_UNPRECONDITIONED
+ *     FE = EULER
+ *     BE = BEULER             # <<<<<<<<<<<<<<
+ *     TH = THETA
+ *     CRANK_NICOLSON = CN
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_NONE);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_BEULER);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NONE);
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_BEULER);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NO, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BE, __pyx_t_8) < 0) __PYX_ERR(37, 24, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":48
- *     DEFAULT          = NORM_DEFAULT
- *     NONE = NO        = NORM_NONE
- *     PRECONDITIONED   = NORM_PRECONDITIONED             # <<<<<<<<<<<<<<
- *     UNPRECONDITIONED = NORM_UNPRECONDITIONED
- *     NATURAL          = NORM_NATURAL
+  /* "PETSc/TS.pyx":25
+ *     FE = EULER
+ *     BE = BEULER
+ *     TH = THETA             # <<<<<<<<<<<<<<
+ *     CRANK_NICOLSON = CN
+ *     RUNGE_KUTTA    = RK
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_PRECONDITIONED);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_THETA);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_PRECONDITIONED);
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_THETA);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PRECONDITIONED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TH, __pyx_t_8) < 0) __PYX_ERR(37, 25, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":49
- *     NONE = NO        = NORM_NONE
- *     PRECONDITIONED   = NORM_PRECONDITIONED
- *     UNPRECONDITIONED = NORM_UNPRECONDITIONED             # <<<<<<<<<<<<<<
- *     NATURAL          = NORM_NATURAL
+  /* "PETSc/TS.pyx":26
+ *     BE = BEULER
+ *     TH = THETA
+ *     CRANK_NICOLSON = CN             # <<<<<<<<<<<<<<
+ *     RUNGE_KUTTA    = RK
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_UNPRECONDITIONED);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_CN);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_UNPRECONDITIONED);
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_CN);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 26, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UNPRECONDITIONED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CRANK_NICOLSON, __pyx_t_8) < 0) __PYX_ERR(37, 26, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":50
- *     PRECONDITIONED   = NORM_PRECONDITIONED
- *     UNPRECONDITIONED = NORM_UNPRECONDITIONED
- *     NATURAL          = NORM_NATURAL             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":27
+ *     TH = THETA
+ *     CRANK_NICOLSON = CN
+ *     RUNGE_KUTTA    = RK             # <<<<<<<<<<<<<<
  * 
- * class KSPConvergedReason(object):
+ * class TSProblemType(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_NATURAL);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_RK);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NATURAL);
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_RK);
   }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NATURAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RUNGE_KUTTA, __pyx_t_8) < 0) __PYX_ERR(37, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":38
- *     GCR        = S_(KSPGCR)
+  /* "PETSc/TS.pyx":3
+ * # -----------------------------------------------------------------------------
  * 
- * class KSPNormType(object):             # <<<<<<<<<<<<<<
+ * class TSType(object):             # <<<<<<<<<<<<<<
  *     # native
- *     NORM_DEFAULT          = KSP_NORM_DEFAULT
+ *     EULER    = S_(TSEULER)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPNormType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPNormType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSType, __pyx_t_8) < 0) __PYX_ERR(37, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":52
- *     NATURAL          = NORM_NATURAL
+  /* "PETSc/TS.pyx":29
+ *     RUNGE_KUTTA    = RK
  * 
- * class KSPConvergedReason(object):             # <<<<<<<<<<<<<<
- *     #iterating
- *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
+ * class TSProblemType(object):             # <<<<<<<<<<<<<<
+ *     LINEAR    = TS_LINEAR
+ *     NONLINEAR = TS_NONLINEAR
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_KSPConvergedReason, __pyx_n_s_KSPConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSProblemType, __pyx_n_s_TSProblemType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/KSP.pyx":54
- * class KSPConvergedReason(object):
- *     #iterating
- *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     ITERATING                 = KSP_CONVERGED_ITERATING
- *     # converged
- */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/KSP.pyx":55
- *     #iterating
- *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
- *     ITERATING                 = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     # converged
- *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL
- */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/KSP.pyx":57
- *     ITERATING                 = KSP_CONVERGED_ITERATING
- *     # converged
- *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL             # <<<<<<<<<<<<<<
- *     CONVERGED_ATOL_NORMAL     = KSP_CONVERGED_ATOL_NORMAL
- *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL
- */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_RTOL_NORMAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_RTOL_NORMAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/KSP.pyx":58
- *     # converged
- *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL
- *     CONVERGED_ATOL_NORMAL     = KSP_CONVERGED_ATOL_NORMAL             # <<<<<<<<<<<<<<
- *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL
- *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL
+  /* "PETSc/TS.pyx":30
+ * 
+ * class TSProblemType(object):
+ *     LINEAR    = TS_LINEAR             # <<<<<<<<<<<<<<
+ *     NONLINEAR = TS_NONLINEAR
+ * 
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_ATOL_NORMAL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSProblemType(TS_LINEAR); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ATOL_NORMAL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LINEAR, __pyx_t_8) < 0) __PYX_ERR(37, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":59
- *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL
- *     CONVERGED_ATOL_NORMAL     = KSP_CONVERGED_ATOL_NORMAL
- *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL             # <<<<<<<<<<<<<<
- *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL
- *     CONVERGED_ITS             = KSP_CONVERGED_ITS
+  /* "PETSc/TS.pyx":31
+ * class TSProblemType(object):
+ *     LINEAR    = TS_LINEAR
+ *     NONLINEAR = TS_NONLINEAR             # <<<<<<<<<<<<<<
+ * 
+ * class TSEquationType(object):
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_RTOL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSProblemType(TS_NONLINEAR); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_RTOL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONLINEAR, __pyx_t_8) < 0) __PYX_ERR(37, 31, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":60
- *     CONVERGED_ATOL_NORMAL     = KSP_CONVERGED_ATOL_NORMAL
- *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL
- *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL             # <<<<<<<<<<<<<<
- *     CONVERGED_ITS             = KSP_CONVERGED_ITS
- *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE
+  /* "PETSc/TS.pyx":29
+ *     RUNGE_KUTTA    = RK
+ * 
+ * class TSProblemType(object):             # <<<<<<<<<<<<<<
+ *     LINEAR    = TS_LINEAR
+ *     NONLINEAR = TS_NONLINEAR
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_ATOL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSProblemType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ATOL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSProblemType, __pyx_t_8) < 0) __PYX_ERR(37, 29, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":61
- *     CONVERGED_RTOL            = KSP_CONVERGED_RTOL
- *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL
- *     CONVERGED_ITS             = KSP_CONVERGED_ITS             # <<<<<<<<<<<<<<
- *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE
- *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED
+  /* "PETSc/TS.pyx":33
+ *     NONLINEAR = TS_NONLINEAR
+ * 
+ * class TSEquationType(object):             # <<<<<<<<<<<<<<
+ *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
+ *     EXPLICIT                  = TS_EQ_EXPLICIT
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_ITS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSEquationType, __pyx_n_s_TSEquationType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/KSP.pyx":62
- *     CONVERGED_ATOL            = KSP_CONVERGED_ATOL
- *     CONVERGED_ITS             = KSP_CONVERGED_ITS
- *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE             # <<<<<<<<<<<<<<
- *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED
- *     CONVERGED_STEP_LENGTH     = KSP_CONVERGED_STEP_LENGTH
+  /* "PETSc/TS.pyx":34
+ * 
+ * class TSEquationType(object):
+ *     UNSPECIFIED               = TS_EQ_UNSPECIFIED             # <<<<<<<<<<<<<<
+ *     EXPLICIT                  = TS_EQ_EXPLICIT
+ *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_CG_NEG_CURVE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_UNSPECIFIED); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_CG_NEG_CURVE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UNSPECIFIED, __pyx_t_8) < 0) __PYX_ERR(37, 34, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":63
- *     CONVERGED_ITS             = KSP_CONVERGED_ITS
- *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE
- *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED             # <<<<<<<<<<<<<<
- *     CONVERGED_STEP_LENGTH     = KSP_CONVERGED_STEP_LENGTH
- *     CONVERGED_HAPPY_BREAKDOWN = KSP_CONVERGED_HAPPY_BREAKDOWN
+  /* "PETSc/TS.pyx":35
+ * class TSEquationType(object):
+ *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
+ *     EXPLICIT                  = TS_EQ_EXPLICIT             # <<<<<<<<<<<<<<
+ *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
+ *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_CG_CONSTRAINED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_EXPLICIT); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_CG_CONSTRAINED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXPLICIT, __pyx_t_8) < 0) __PYX_ERR(37, 35, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":64
- *     CONVERGED_CG_NEG_CURVE    = KSP_CONVERGED_CG_NEG_CURVE
- *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED
- *     CONVERGED_STEP_LENGTH     = KSP_CONVERGED_STEP_LENGTH             # <<<<<<<<<<<<<<
- *     CONVERGED_HAPPY_BREAKDOWN = KSP_CONVERGED_HAPPY_BREAKDOWN
- *     # diverged
+  /* "PETSc/TS.pyx":36
+ *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
+ *     EXPLICIT                  = TS_EQ_EXPLICIT
+ *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT             # <<<<<<<<<<<<<<
+ *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1
+ *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_STEP_LENGTH); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_ODE_EXPLICIT); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_STEP_LENGTH, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ODE_EXPLICIT, __pyx_t_8) < 0) __PYX_ERR(37, 36, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":65
- *     CONVERGED_CG_CONSTRAINED  = KSP_CONVERGED_CG_CONSTRAINED
- *     CONVERGED_STEP_LENGTH     = KSP_CONVERGED_STEP_LENGTH
- *     CONVERGED_HAPPY_BREAKDOWN = KSP_CONVERGED_HAPPY_BREAKDOWN             # <<<<<<<<<<<<<<
- *     # diverged
- *     DIVERGED_NULL             = KSP_DIVERGED_NULL
+  /* "PETSc/TS.pyx":37
+ *     EXPLICIT                  = TS_EQ_EXPLICIT
+ *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
+ *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1             # <<<<<<<<<<<<<<
+ *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2
+ *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_CONVERGED_HAPPY_BREAKDOWN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_SEMI_EXPLICIT_INDEX1); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_HAPPY_BREAKDOWN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX1, __pyx_t_8) < 0) __PYX_ERR(37, 37, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":67
- *     CONVERGED_HAPPY_BREAKDOWN = KSP_CONVERGED_HAPPY_BREAKDOWN
- *     # diverged
- *     DIVERGED_NULL             = KSP_DIVERGED_NULL             # <<<<<<<<<<<<<<
- *     DIVERGED_MAX_IT           = KSP_DIVERGED_MAX_IT
- *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL
+  /* "PETSc/TS.pyx":38
+ *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
+ *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1
+ *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2             # <<<<<<<<<<<<<<
+ *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3
+ *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_SEMI_EXPLICIT_INDEX2); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 38, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_NULL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX2, __pyx_t_8) < 0) __PYX_ERR(37, 38, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":68
- *     # diverged
- *     DIVERGED_NULL             = KSP_DIVERGED_NULL
- *     DIVERGED_MAX_IT           = KSP_DIVERGED_MAX_IT             # <<<<<<<<<<<<<<
- *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL
- *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN
+  /* "PETSc/TS.pyx":39
+ *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1
+ *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2
+ *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3             # <<<<<<<<<<<<<<
+ *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI
+ *     IMPLICIT                  = TS_EQ_IMPLICIT
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_ITS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_SEMI_EXPLICIT_INDEX3); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 39, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_MAX_IT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX3, __pyx_t_8) < 0) __PYX_ERR(37, 39, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":69
- *     DIVERGED_NULL             = KSP_DIVERGED_NULL
- *     DIVERGED_MAX_IT           = KSP_DIVERGED_MAX_IT
- *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL             # <<<<<<<<<<<<<<
- *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN
- *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG
+  /* "PETSc/TS.pyx":40
+ *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2
+ *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3
+ *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI             # <<<<<<<<<<<<<<
+ *     IMPLICIT                  = TS_EQ_IMPLICIT
+ *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_DTOL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_DTOL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEXHI, __pyx_t_8) < 0) __PYX_ERR(37, 40, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":70
- *     DIVERGED_MAX_IT           = KSP_DIVERGED_MAX_IT
- *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL
- *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
- *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG
- *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC
+  /* "PETSc/TS.pyx":41
+ *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3
+ *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI
+ *     IMPLICIT                  = TS_EQ_IMPLICIT             # <<<<<<<<<<<<<<
+ *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT
+ *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_IMPLICIT); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IMPLICIT, __pyx_t_8) < 0) __PYX_ERR(37, 41, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":71
- *     DIVERGED_DTOL             = KSP_DIVERGED_DTOL
- *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN
- *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG             # <<<<<<<<<<<<<<
- *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC
- *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
+  /* "PETSc/TS.pyx":42
+ *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI
+ *     IMPLICIT                  = TS_EQ_IMPLICIT
+ *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT             # <<<<<<<<<<<<<<
+ *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1
+ *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_BREAKDOWN_BICG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_ODE_IMPLICIT); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN_BICG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ODE_IMPLICIT, __pyx_t_8) < 0) __PYX_ERR(37, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":72
- *     DIVERGED_BREAKDOWN        = KSP_DIVERGED_BREAKDOWN
- *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG
- *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC             # <<<<<<<<<<<<<<
- *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
- *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF
+  /* "PETSc/TS.pyx":43
+ *     IMPLICIT                  = TS_EQ_IMPLICIT
+ *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT
+ *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1             # <<<<<<<<<<<<<<
+ *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2
+ *     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_NONSYMMETRIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_IMPLICIT_INDEX1); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 43, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_NONSYMMETRIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_IMPLICIT_INDEX1, __pyx_t_8) < 0) __PYX_ERR(37, 43, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":73
- *     DIVERGED_BREAKDOWN_BICG   = KSP_DIVERGED_BREAKDOWN_BICG
- *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC
- *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC             # <<<<<<<<<<<<<<
- *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF
- *     DIVERGED_INDEFINITE_MAT   = KSP_DIVERGED_INDEFINITE_MAT
+  /* "PETSc/TS.pyx":44
+ *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT
+ *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1
+ *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2             # <<<<<<<<<<<<<<
+ *     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3
+ *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_INDEFINITE_PC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_IMPLICIT_INDEX2); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 44, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_INDEFINITE_PC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_IMPLICIT_INDEX2, __pyx_t_8) < 0) __PYX_ERR(37, 44, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":74
- *     DIVERGED_NONSYMMETRIC     = KSP_DIVERGED_NONSYMMETRIC
- *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
- *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF             # <<<<<<<<<<<<<<
- *     DIVERGED_INDEFINITE_MAT   = KSP_DIVERGED_INDEFINITE_MAT
+  /* "PETSc/TS.pyx":45
+ *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1
+ *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2
+ *     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3             # <<<<<<<<<<<<<<
+ *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
  * 
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_NANORINF); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_IMPLICIT_INDEX3); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_NANORINF, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_IMPLICIT_INDEX3, __pyx_t_8) < 0) __PYX_ERR(37, 45, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":75
- *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
- *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF
- *     DIVERGED_INDEFINITE_MAT   = KSP_DIVERGED_INDEFINITE_MAT             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":46
+ *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2
+ *     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3
+ *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI             # <<<<<<<<<<<<<<
  * 
- * # --------------------------------------------------------------------
+ * class TSExactFinalTime(object):
  */
-  __pyx_t_8 = PyInt_FromLong(KSP_DIVERGED_INDEFINITE_MAT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_IMPLICIT_INDEXHI); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_INDEFINITE_MAT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_IMPLICIT_INDEXHI, __pyx_t_8) < 0) __PYX_ERR(37, 46, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":52
- *     NATURAL          = NORM_NATURAL
+  /* "PETSc/TS.pyx":33
+ *     NONLINEAR = TS_NONLINEAR
  * 
- * class KSPConvergedReason(object):             # <<<<<<<<<<<<<<
- *     #iterating
- *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
+ * class TSEquationType(object):             # <<<<<<<<<<<<<<
+ *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
+ *     EXPLICIT                  = TS_EQ_EXPLICIT
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPConvergedReason, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSEquationType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 33, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPConvergedReason, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSEquationType, __pyx_t_8) < 0) __PYX_ERR(37, 33, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":81
- * cdef class KSP(Object):
+  /* "PETSc/TS.pyx":48
+ *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
  * 
- *     Type            = KSPType             # <<<<<<<<<<<<<<
- *     NormType        = KSPNormType
- *     ConvergedReason = KSPConvergedReason
+ * class TSExactFinalTime(object):             # <<<<<<<<<<<<<<
+ *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
+ *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 48, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSExactFinalTime, __pyx_n_s_TSExactFinalTime, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/KSP.pyx":82
- * 
- *     Type            = KSPType
- *     NormType        = KSPNormType             # <<<<<<<<<<<<<<
- *     ConvergedReason = KSPConvergedReason
+  /* "PETSc/TS.pyx":49
  * 
+ * class TSExactFinalTime(object):
+ *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED             # <<<<<<<<<<<<<<
+ *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
+ *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPNormType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_NormType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
+  __pyx_t_8 = __Pyx_PyInt_From_TSExactFinalTimeOption(TS_EXACTFINALTIME_UNSPECIFIED); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UNSPECIFIED, __pyx_t_8) < 0) __PYX_ERR(37, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":83
- *     Type            = KSPType
- *     NormType        = KSPNormType
- *     ConvergedReason = KSPConvergedReason             # <<<<<<<<<<<<<<
- * 
- *     # --- xxx ---
+  /* "PETSc/TS.pyx":50
+ * class TSExactFinalTime(object):
+ *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
+ *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER             # <<<<<<<<<<<<<<
+ *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
+ *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPConvergedReason); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
+  __pyx_t_8 = __Pyx_PyInt_From_TSExactFinalTimeOption(TS_EXACTFINALTIME_STEPOVER); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STEPOVER, __pyx_t_8) < 0) __PYX_ERR(37, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":634
- * # --------------------------------------------------------------------
+  /* "PETSc/TS.pyx":51
+ *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
+ *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
+ *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE             # <<<<<<<<<<<<<<
+ *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
  * 
- * del KSPType             # <<<<<<<<<<<<<<
- * del KSPNormType
- * del KSPConvergedReason
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPType) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSExactFinalTimeOption(TS_EXACTFINALTIME_INTERPOLATE); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERPOLATE, __pyx_t_8) < 0) __PYX_ERR(37, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":635
- * 
- * del KSPType
- * del KSPNormType             # <<<<<<<<<<<<<<
- * del KSPConvergedReason
+  /* "PETSc/TS.pyx":52
+ *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
+ *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
+ *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP             # <<<<<<<<<<<<<<
  * 
+ * class TSConvergedReason(object):
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPNormType) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSExactFinalTimeOption(TS_EXACTFINALTIME_MATCHSTEP); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MATCHSTEP, __pyx_t_8) < 0) __PYX_ERR(37, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/KSP.pyx":636
- * del KSPType
- * del KSPNormType
- * del KSPConvergedReason             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":48
+ *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
  * 
- * # --------------------------------------------------------------------
+ * class TSExactFinalTime(object):             # <<<<<<<<<<<<<<
+ *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
+ *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPConvergedReason) < 0) {__pyx_filename = __pyx_f[35]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSExactFinalTime, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSExactFinalTime, __pyx_t_8) < 0) __PYX_ERR(37, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":3
- * # --------------------------------------------------------------------
+  /* "PETSc/TS.pyx":54
+ *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
  * 
- * class SNESType(object):             # <<<<<<<<<<<<<<
- *     NEWTONLS     = S_(SNESNEWTONLS)
- *     NEWTONTR     = S_(SNESNEWTONTR)
+ * class TSConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     # iterating
+ *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_SNESType, __pyx_n_s_SNESType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSConvergedReason, __pyx_n_s_TSConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/SNES.pyx":4
- * 
- * class SNESType(object):
- *     NEWTONLS     = S_(SNESNEWTONLS)             # <<<<<<<<<<<<<<
- *     NEWTONTR     = S_(SNESNEWTONTR)
- *     PYTHON       = S_(SNESPYTHON)
+  /* "PETSc/TS.pyx":56
+ * class TSConvergedReason(object):
+ *     # iterating
+ *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     ITERATING                = TS_CONVERGED_ITERATING
+ *     # converged
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNEWTONLS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEWTONLS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_8) < 0) __PYX_ERR(37, 56, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/SNES.pyx":5
- * class SNESType(object):
- *     NEWTONLS     = S_(SNESNEWTONLS)
- *     NEWTONTR     = S_(SNESNEWTONTR)             # <<<<<<<<<<<<<<
- *     PYTHON       = S_(SNESPYTHON)
- *     TEST         = S_(SNESTEST)
+  /* "PETSc/TS.pyx":57
+ *     # iterating
+ *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
+ *     ITERATING                = TS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     # converged
+ *     CONVERGED_TIME           = TS_CONVERGED_TIME
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNEWTONTR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEWTONTR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_8) < 0) __PYX_ERR(37, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/SNES.pyx":6
- *     NEWTONLS     = S_(SNESNEWTONLS)
- *     NEWTONTR     = S_(SNESNEWTONTR)
- *     PYTHON       = S_(SNESPYTHON)             # <<<<<<<<<<<<<<
- *     TEST         = S_(SNESTEST)
- *     NRICHARDSON  = S_(SNESNRICHARDSON)
+  /* "PETSc/TS.pyx":59
+ *     ITERATING                = TS_CONVERGED_ITERATING
+ *     # converged
+ *     CONVERGED_TIME           = TS_CONVERGED_TIME             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITS            = TS_CONVERGED_ITS
+ *     CONVERGED_USER           = TS_CONVERGED_USER
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESPYTHON); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_TIME); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TIME, __pyx_t_8) < 0) __PYX_ERR(37, 59, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/SNES.pyx":7
- *     NEWTONTR     = S_(SNESNEWTONTR)
- *     PYTHON       = S_(SNESPYTHON)
- *     TEST         = S_(SNESTEST)             # <<<<<<<<<<<<<<
- *     NRICHARDSON  = S_(SNESNRICHARDSON)
- *     KSPONLY      = S_(SNESKSPONLY)
+  /* "PETSc/TS.pyx":60
+ *     # converged
+ *     CONVERGED_TIME           = TS_CONVERGED_TIME
+ *     CONVERGED_ITS            = TS_CONVERGED_ITS             # <<<<<<<<<<<<<<
+ *     CONVERGED_USER           = TS_CONVERGED_USER
+ *     CONVERGED_EVENT          = TS_CONVERGED_EVENT
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESTEST); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_ITS); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TEST, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITS, __pyx_t_8) < 0) __PYX_ERR(37, 60, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/SNES.pyx":8
- *     PYTHON       = S_(SNESPYTHON)
- *     TEST         = S_(SNESTEST)
- *     NRICHARDSON  = S_(SNESNRICHARDSON)             # <<<<<<<<<<<<<<
- *     KSPONLY      = S_(SNESKSPONLY)
- *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
+  /* "PETSc/TS.pyx":61
+ *     CONVERGED_TIME           = TS_CONVERGED_TIME
+ *     CONVERGED_ITS            = TS_CONVERGED_ITS
+ *     CONVERGED_USER           = TS_CONVERGED_USER             # <<<<<<<<<<<<<<
+ *     CONVERGED_EVENT          = TS_CONVERGED_EVENT
+ *     # diverged
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNRICHARDSON); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_USER); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 61, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NRICHARDSON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_USER, __pyx_t_8) < 0) __PYX_ERR(37, 61, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/SNES.pyx":9
- *     TEST         = S_(SNESTEST)
- *     NRICHARDSON  = S_(SNESNRICHARDSON)
- *     KSPONLY      = S_(SNESKSPONLY)             # <<<<<<<<<<<<<<
- *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
- *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
+  /* "PETSc/TS.pyx":62
+ *     CONVERGED_ITS            = TS_CONVERGED_ITS
+ *     CONVERGED_USER           = TS_CONVERGED_USER
+ *     CONVERGED_EVENT          = TS_CONVERGED_EVENT             # <<<<<<<<<<<<<<
+ *     # diverged
+ *     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESKSPONLY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_EVENT); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 62, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KSPONLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_EVENT, __pyx_t_8) < 0) __PYX_ERR(37, 62, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/SNES.pyx":10
- *     NRICHARDSON  = S_(SNESNRICHARDSON)
- *     KSPONLY      = S_(SNESKSPONLY)
- *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)             # <<<<<<<<<<<<<<
- *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
- *     NGMRES       = S_(SNESNGMRES)
+  /* "PETSc/TS.pyx":64
+ *     CONVERGED_EVENT          = TS_CONVERGED_EVENT
+ *     # diverged
+ *     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE             # <<<<<<<<<<<<<<
+ *     DIVERGED_STEP_REJECTED   = TS_DIVERGED_STEP_REJECTED
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESVINEWTONRSLS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSConvergedReason(TS_DIVERGED_NONLINEAR_SOLVE); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VINEWTONRSLS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_NONLINEAR_SOLVE, __pyx_t_8) < 0) __PYX_ERR(37, 64, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/SNES.pyx":11
- *     KSPONLY      = S_(SNESKSPONLY)
- *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
- *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)             # <<<<<<<<<<<<<<
- *     NGMRES       = S_(SNESNGMRES)
- *     QN           = S_(SNESQN)
+  /* "PETSc/TS.pyx":65
+ *     # diverged
+ *     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE
+ *     DIVERGED_STEP_REJECTED   = TS_DIVERGED_STEP_REJECTED             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESVINEWTONSSLS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_TSConvergedReason(TS_DIVERGED_STEP_REJECTED); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VINEWTONSSLS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_STEP_REJECTED, __pyx_t_8) < 0) __PYX_ERR(37, 65, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/SNES.pyx":12
- *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
- *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
- *     NGMRES       = S_(SNESNGMRES)             # <<<<<<<<<<<<<<
- *     QN           = S_(SNESQN)
- *     SHELL        = S_(SNESSHELL)
+  /* "PETSc/TS.pyx":54
+ *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
+ * 
+ * class TSConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     # iterating
+ *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNGMRES); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSConvergedReason, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(37, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NGMRES, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSConvergedReason, __pyx_t_8) < 0) __PYX_ERR(37, 54, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":13
- *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
- *     NGMRES       = S_(SNESNGMRES)
- *     QN           = S_(SNESQN)             # <<<<<<<<<<<<<<
- *     SHELL        = S_(SNESSHELL)
- *     NGS          = S_(SNESNGS)
+  /* "PETSc/TS.pyx":71
+ * cdef class TS(Object):
+ * 
+ *     Type = TSType             # <<<<<<<<<<<<<<
+ *     ProblemType = TSProblemType
+ *     EquationType = TSEquationType
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESQN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSType); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(37, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/SNES.pyx":14
- *     NGMRES       = S_(SNESNGMRES)
- *     QN           = S_(SNESQN)
- *     SHELL        = S_(SNESSHELL)             # <<<<<<<<<<<<<<
- *     NGS          = S_(SNESNGS)
- *     NCG          = S_(SNESNCG)
+  /* "PETSc/TS.pyx":72
+ * 
+ *     Type = TSType
+ *     ProblemType = TSProblemType             # <<<<<<<<<<<<<<
+ *     EquationType = TSEquationType
+ *     ExactFinalTime = TSExactFinalTime
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESSHELL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSProblemType); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ProblemType, __pyx_t_3) < 0) __PYX_ERR(37, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/SNES.pyx":15
- *     QN           = S_(SNESQN)
- *     SHELL        = S_(SNESSHELL)
- *     NGS          = S_(SNESNGS)             # <<<<<<<<<<<<<<
- *     NCG          = S_(SNESNCG)
- *     FAS          = S_(SNESFAS)
+  /* "PETSc/TS.pyx":73
+ *     Type = TSType
+ *     ProblemType = TSProblemType
+ *     EquationType = TSEquationType             # <<<<<<<<<<<<<<
+ *     ExactFinalTime = TSExactFinalTime
+ *     ExactFinalTimeOption = TSExactFinalTime
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNGS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NGS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSEquationType); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 73, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_EquationType, __pyx_t_3) < 0) __PYX_ERR(37, 73, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/SNES.pyx":16
- *     SHELL        = S_(SNESSHELL)
- *     NGS          = S_(SNESNGS)
- *     NCG          = S_(SNESNCG)             # <<<<<<<<<<<<<<
- *     FAS          = S_(SNESFAS)
- *     MS           = S_(SNESMS)
+  /* "PETSc/TS.pyx":74
+ *     ProblemType = TSProblemType
+ *     EquationType = TSEquationType
+ *     ExactFinalTime = TSExactFinalTime             # <<<<<<<<<<<<<<
+ *     ExactFinalTimeOption = TSExactFinalTime
+ *     ConvergedReason = TSConvergedReason
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNCG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NCG, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSExactFinalTime); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ExactFinalTime, __pyx_t_3) < 0) __PYX_ERR(37, 74, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/SNES.pyx":17
- *     NGS          = S_(SNESNGS)
- *     NCG          = S_(SNESNCG)
- *     FAS          = S_(SNESFAS)             # <<<<<<<<<<<<<<
- *     MS           = S_(SNESMS)
- *     NASM         = S_(SNESNASM)
+  /* "PETSc/TS.pyx":75
+ *     EquationType = TSEquationType
+ *     ExactFinalTime = TSExactFinalTime
+ *     ExactFinalTimeOption = TSExactFinalTime             # <<<<<<<<<<<<<<
+ *     ConvergedReason = TSConvergedReason
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESFAS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FAS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSExactFinalTime); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 75, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ExactFinalTimeOption, __pyx_t_3) < 0) __PYX_ERR(37, 75, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/SNES.pyx":18
- *     NCG          = S_(SNESNCG)
- *     FAS          = S_(SNESFAS)
- *     MS           = S_(SNESMS)             # <<<<<<<<<<<<<<
- *     NASM         = S_(SNESNASM)
- *     ANDERSON     = S_(SNESANDERSON)
+  /* "PETSc/TS.pyx":76
+ *     ExactFinalTime = TSExactFinalTime
+ *     ExactFinalTimeOption = TSExactFinalTime
+ *     ConvergedReason = TSConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ *     # --- xxx ---
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESMS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSConvergedReason); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_3) < 0) __PYX_ERR(37, 76, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/SNES.pyx":19
- *     FAS          = S_(SNESFAS)
- *     MS           = S_(SNESMS)
- *     NASM         = S_(SNESNASM)             # <<<<<<<<<<<<<<
- *     ANDERSON     = S_(SNESANDERSON)
- *     ASPIN        = S_(SNESASPIN)
+  /* "PETSc/TS.pyx":748
+ * # -----------------------------------------------------------------------------
+ * 
+ * del TSType             # <<<<<<<<<<<<<<
+ * del TSProblemType
+ * del TSEquationType
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESNASM); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NASM, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSType) < 0) __PYX_ERR(37, 748, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":20
- *     MS           = S_(SNESMS)
- *     NASM         = S_(SNESNASM)
- *     ANDERSON     = S_(SNESANDERSON)             # <<<<<<<<<<<<<<
- *     ASPIN        = S_(SNESASPIN)
- *     COMPOSITE    = S_(SNESCOMPOSITE)
+  /* "PETSc/TS.pyx":749
+ * 
+ * del TSType
+ * del TSProblemType             # <<<<<<<<<<<<<<
+ * del TSEquationType
+ * del TSExactFinalTime
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESANDERSON); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ANDERSON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSProblemType) < 0) __PYX_ERR(37, 749, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":21
- *     NASM         = S_(SNESNASM)
- *     ANDERSON     = S_(SNESANDERSON)
- *     ASPIN        = S_(SNESASPIN)             # <<<<<<<<<<<<<<
- *     COMPOSITE    = S_(SNESCOMPOSITE)
+  /* "PETSc/TS.pyx":750
+ * del TSType
+ * del TSProblemType
+ * del TSEquationType             # <<<<<<<<<<<<<<
+ * del TSExactFinalTime
+ * del TSConvergedReason
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSEquationType) < 0) __PYX_ERR(37, 750, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":751
+ * del TSProblemType
+ * del TSEquationType
+ * del TSExactFinalTime             # <<<<<<<<<<<<<<
+ * del TSConvergedReason
  * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESASPIN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ASPIN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSExactFinalTime) < 0) __PYX_ERR(37, 751, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":22
- *     ANDERSON     = S_(SNESANDERSON)
- *     ASPIN        = S_(SNESASPIN)
- *     COMPOSITE    = S_(SNESCOMPOSITE)             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":752
+ * del TSEquationType
+ * del TSExactFinalTime
+ * del TSConvergedReason             # <<<<<<<<<<<<<<
  * 
- * class SNESNormSchedule(object):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(SNESCOMPOSITE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSITE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSConvergedReason) < 0) __PYX_ERR(37, 752, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":3
+  /* "PETSc/TAO.pyx":3
  * # --------------------------------------------------------------------
  * 
- * class SNESType(object):             # <<<<<<<<<<<<<<
- *     NEWTONLS     = S_(SNESNEWTONLS)
- *     NEWTONTR     = S_(SNESNEWTONTR)
+ * class TAOType:             # <<<<<<<<<<<<<<
+ *     """
+ *     TAO Solver Types
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TAOType, __pyx_n_s_TAOType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, __pyx_kp_s_TAO_Solver_Types); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+
+  /* "PETSc/TAO.pyx":7
+ *     TAO Solver Types
+ *     """
+ *     LMVM     = S_(TAOLMVM)             # <<<<<<<<<<<<<<
+ *     NLS      = S_(TAONLS)
+ *     NTR      = S_(TAONTR)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOLMVM); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LMVM, __pyx_t_1) < 0) __PYX_ERR(38, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":24
- *     COMPOSITE    = S_(SNESCOMPOSITE)
- * 
- * class SNESNormSchedule(object):             # <<<<<<<<<<<<<<
- *     # native
- *     NORM_DEFAULT            = SNES_NORM_DEFAULT
+  /* "PETSc/TAO.pyx":8
+ *     """
+ *     LMVM     = S_(TAOLMVM)
+ *     NLS      = S_(TAONLS)             # <<<<<<<<<<<<<<
+ *     NTR      = S_(TAONTR)
+ *     NTL      = S_(TAONTL)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAONLS); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NLS, __pyx_t_1) < 0) __PYX_ERR(38, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":9
+ *     LMVM     = S_(TAOLMVM)
+ *     NLS      = S_(TAONLS)
+ *     NTR      = S_(TAONTR)             # <<<<<<<<<<<<<<
+ *     NTL      = S_(TAONTL)
+ *     CG       = S_(TAOCG)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAONTR); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NTR, __pyx_t_1) < 0) __PYX_ERR(38, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":10
+ *     NLS      = S_(TAONLS)
+ *     NTR      = S_(TAONTR)
+ *     NTL      = S_(TAONTL)             # <<<<<<<<<<<<<<
+ *     CG       = S_(TAOCG)
+ *     TRON     = S_(TAOTRON)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAONTL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NTL, __pyx_t_1) < 0) __PYX_ERR(38, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":11
+ *     NTR      = S_(TAONTR)
+ *     NTL      = S_(TAONTL)
+ *     CG       = S_(TAOCG)             # <<<<<<<<<<<<<<
+ *     TRON     = S_(TAOTRON)
+ *     OWLQN    = S_(TAOOWLQN)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOCG); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CG, __pyx_t_1) < 0) __PYX_ERR(38, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":12
+ *     NTL      = S_(TAONTL)
+ *     CG       = S_(TAOCG)
+ *     TRON     = S_(TAOTRON)             # <<<<<<<<<<<<<<
+ *     OWLQN    = S_(TAOOWLQN)
+ *     BMRM     = S_(TAOBMRM)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOTRON); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TRON, __pyx_t_1) < 0) __PYX_ERR(38, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":13
+ *     CG       = S_(TAOCG)
+ *     TRON     = S_(TAOTRON)
+ *     OWLQN    = S_(TAOOWLQN)             # <<<<<<<<<<<<<<
+ *     BMRM     = S_(TAOBMRM)
+ *     BLMVM    = S_(TAOBLMVM)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOOWLQN); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_OWLQN, __pyx_t_1) < 0) __PYX_ERR(38, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/TAO.pyx":14
+ *     TRON     = S_(TAOTRON)
+ *     OWLQN    = S_(TAOOWLQN)
+ *     BMRM     = S_(TAOBMRM)             # <<<<<<<<<<<<<<
+ *     BLMVM    = S_(TAOBLMVM)
+ *     BQPIP    = S_(TAOBQPIP)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOBMRM); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_SNESNormSchedule, __pyx_n_s_SNESNormSchedule, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BMRM, __pyx_t_1) < 0) __PYX_ERR(38, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":26
- * class SNESNormSchedule(object):
- *     # native
- *     NORM_DEFAULT            = SNES_NORM_DEFAULT             # <<<<<<<<<<<<<<
- *     NORM_NONE               = SNES_NORM_NONE
- *     NORM_ALWAYS             = SNES_NORM_ALWAYS
+  /* "PETSc/TAO.pyx":15
+ *     OWLQN    = S_(TAOOWLQN)
+ *     BMRM     = S_(TAOBMRM)
+ *     BLMVM    = S_(TAOBLMVM)             # <<<<<<<<<<<<<<
+ *     BQPIP    = S_(TAOBQPIP)
+ *     GPCG     = S_(TAOGPCG)
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_NORM_DEFAULT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOBLMVM); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BLMVM, __pyx_t_1) < 0) __PYX_ERR(38, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":27
- *     # native
- *     NORM_DEFAULT            = SNES_NORM_DEFAULT
- *     NORM_NONE               = SNES_NORM_NONE             # <<<<<<<<<<<<<<
- *     NORM_ALWAYS             = SNES_NORM_ALWAYS
- *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
+  /* "PETSc/TAO.pyx":16
+ *     BMRM     = S_(TAOBMRM)
+ *     BLMVM    = S_(TAOBLMVM)
+ *     BQPIP    = S_(TAOBQPIP)             # <<<<<<<<<<<<<<
+ *     GPCG     = S_(TAOGPCG)
+ *     NM       = S_(TAONM)
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_NORM_NONE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOBQPIP); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BQPIP, __pyx_t_1) < 0) __PYX_ERR(38, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":28
- *     NORM_DEFAULT            = SNES_NORM_DEFAULT
- *     NORM_NONE               = SNES_NORM_NONE
- *     NORM_ALWAYS             = SNES_NORM_ALWAYS             # <<<<<<<<<<<<<<
- *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
- *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY
+  /* "PETSc/TAO.pyx":17
+ *     BLMVM    = S_(TAOBLMVM)
+ *     BQPIP    = S_(TAOBQPIP)
+ *     GPCG     = S_(TAOGPCG)             # <<<<<<<<<<<<<<
+ *     NM       = S_(TAONM)
+ *     POUNDERS = S_(TAOPOUNDERS)
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_NORM_ALWAYS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_ALWAYS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOGPCG); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GPCG, __pyx_t_1) < 0) __PYX_ERR(38, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":29
- *     NORM_NONE               = SNES_NORM_NONE
- *     NORM_ALWAYS             = SNES_NORM_ALWAYS
- *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY             # <<<<<<<<<<<<<<
- *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY
- *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
+  /* "PETSc/TAO.pyx":18
+ *     BQPIP    = S_(TAOBQPIP)
+ *     GPCG     = S_(TAOGPCG)
+ *     NM       = S_(TAONM)             # <<<<<<<<<<<<<<
+ *     POUNDERS = S_(TAOPOUNDERS)
+ *     LCL      = S_(TAOLCL)
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_NORM_INITIAL_ONLY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_ONLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAONM); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NM, __pyx_t_1) < 0) __PYX_ERR(38, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":30
- *     NORM_ALWAYS             = SNES_NORM_ALWAYS
- *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
- *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY             # <<<<<<<<<<<<<<
- *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
- *     # aliases
+  /* "PETSc/TAO.pyx":19
+ *     GPCG     = S_(TAOGPCG)
+ *     NM       = S_(TAONM)
+ *     POUNDERS = S_(TAOPOUNDERS)             # <<<<<<<<<<<<<<
+ *     LCL      = S_(TAOLCL)
+ *     SSILS    = S_(TAOSSILS)
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_NORM_FINAL_ONLY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_FINAL_ONLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOPOUNDERS); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_POUNDERS, __pyx_t_1) < 0) __PYX_ERR(38, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":31
- *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
- *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY
- *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY             # <<<<<<<<<<<<<<
- *     # aliases
- *     DEFAULT            = NORM_DEFAULT
+  /* "PETSc/TAO.pyx":20
+ *     NM       = S_(TAONM)
+ *     POUNDERS = S_(TAOPOUNDERS)
+ *     LCL      = S_(TAOLCL)             # <<<<<<<<<<<<<<
+ *     SSILS    = S_(TAOSSILS)
+ *     SSFLS    = S_(TAOSSFLS)
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_NORM_INITIAL_FINAL_ONLY); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_FINAL_ONLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOLCL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LCL, __pyx_t_1) < 0) __PYX_ERR(38, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":33
- *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
- *     # aliases
- *     DEFAULT            = NORM_DEFAULT             # <<<<<<<<<<<<<<
- *     NONE               = NORM_NONE
- *     ALWAYS             = NORM_ALWAYS
+  /* "PETSc/TAO.pyx":21
+ *     POUNDERS = S_(TAOPOUNDERS)
+ *     LCL      = S_(TAOLCL)
+ *     SSILS    = S_(TAOSSILS)             # <<<<<<<<<<<<<<
+ *     SSFLS    = S_(TAOSSFLS)
+ *     ASILS    = S_(TAOASILS)
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_DEFAULT);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DEFAULT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOSSILS); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SSILS, __pyx_t_1) < 0) __PYX_ERR(38, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":34
- *     # aliases
- *     DEFAULT            = NORM_DEFAULT
- *     NONE               = NORM_NONE             # <<<<<<<<<<<<<<
- *     ALWAYS             = NORM_ALWAYS
- *     INITIAL_ONLY       = NORM_INITIAL_ONLY
+  /* "PETSc/TAO.pyx":22
+ *     LCL      = S_(TAOLCL)
+ *     SSILS    = S_(TAOSSILS)
+ *     SSFLS    = S_(TAOSSFLS)             # <<<<<<<<<<<<<<
+ *     ASILS    = S_(TAOASILS)
+ *     ASFLS    = S_(TAOASFLS)
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_NONE);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NONE);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOSSFLS); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SSFLS, __pyx_t_1) < 0) __PYX_ERR(38, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":35
- *     DEFAULT            = NORM_DEFAULT
- *     NONE               = NORM_NONE
- *     ALWAYS             = NORM_ALWAYS             # <<<<<<<<<<<<<<
- *     INITIAL_ONLY       = NORM_INITIAL_ONLY
- *     FINAL_ONLY         = NORM_FINAL_ONLY
+  /* "PETSc/TAO.pyx":23
+ *     SSILS    = S_(TAOSSILS)
+ *     SSFLS    = S_(TAOSSFLS)
+ *     ASILS    = S_(TAOASILS)             # <<<<<<<<<<<<<<
+ *     ASFLS    = S_(TAOASFLS)
+ *     IPM      = S_(TAOIPM)
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_ALWAYS);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_ALWAYS);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALWAYS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOASILS); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ASILS, __pyx_t_1) < 0) __PYX_ERR(38, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":36
- *     NONE               = NORM_NONE
- *     ALWAYS             = NORM_ALWAYS
- *     INITIAL_ONLY       = NORM_INITIAL_ONLY             # <<<<<<<<<<<<<<
- *     FINAL_ONLY         = NORM_FINAL_ONLY
- *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
+  /* "PETSc/TAO.pyx":24
+ *     SSFLS    = S_(TAOSSFLS)
+ *     ASILS    = S_(TAOASILS)
+ *     ASFLS    = S_(TAOASFLS)             # <<<<<<<<<<<<<<
+ *     IPM      = S_(TAOIPM)
+ *     TEST     = S_(TAOTEST)
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_ONLY);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INITIAL_ONLY);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INITIAL_ONLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOASFLS); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ASFLS, __pyx_t_1) < 0) __PYX_ERR(38, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":37
- *     ALWAYS             = NORM_ALWAYS
- *     INITIAL_ONLY       = NORM_INITIAL_ONLY
- *     FINAL_ONLY         = NORM_FINAL_ONLY             # <<<<<<<<<<<<<<
- *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
+  /* "PETSc/TAO.pyx":25
+ *     ASILS    = S_(TAOASILS)
+ *     ASFLS    = S_(TAOASFLS)
+ *     IPM      = S_(TAOIPM)             # <<<<<<<<<<<<<<
+ *     TEST     = S_(TAOTEST)
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_FINAL_ONLY);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_FINAL_ONLY);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FINAL_ONLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOIPM); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IPM, __pyx_t_1) < 0) __PYX_ERR(38, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":38
- *     INITIAL_ONLY       = NORM_INITIAL_ONLY
- *     FINAL_ONLY         = NORM_FINAL_ONLY
- *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY             # <<<<<<<<<<<<<<
+  /* "PETSc/TAO.pyx":26
+ *     ASFLS    = S_(TAOASFLS)
+ *     IPM      = S_(TAOIPM)
+ *     TEST     = S_(TAOTEST)             # <<<<<<<<<<<<<<
  * 
- * class SNESConvergedReason(object):
+ * class TAOConvergedReason:
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_FINAL_ONLY);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INITIAL_FINAL_ONLY);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INITIAL_FINAL_ONLY, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOTEST); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TEST, __pyx_t_1) < 0) __PYX_ERR(38, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":24
- *     COMPOSITE    = S_(SNESCOMPOSITE)
+  /* "PETSc/TAO.pyx":3
+ * # --------------------------------------------------------------------
  * 
- * class SNESNormSchedule(object):             # <<<<<<<<<<<<<<
- *     # native
- *     NORM_DEFAULT            = SNES_NORM_DEFAULT
+ * class TAOType:             # <<<<<<<<<<<<<<
+ *     """
+ *     TAO Solver Types
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESNormSchedule, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESNormSchedule, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_TAOType, __pyx_empty_tuple, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TAOType, __pyx_t_1) < 0) __PYX_ERR(38, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":40
- *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
+  /* "PETSc/TAO.pyx":28
+ *     TEST     = S_(TAOTEST)
  * 
- * class SNESConvergedReason(object):             # <<<<<<<<<<<<<<
- *     # iterating
- *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING
+ * class TAOConvergedReason:             # <<<<<<<<<<<<<<
+ *     """
+ *     TAO Solver Termination Reasons
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TAOConvergedReason, __pyx_n_s_TAOConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, __pyx_kp_s_TAO_Solver_Termination_Reasons); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 28, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "PETSc/TAO.pyx":33
+ *     """
+ *     # iterating
+ *     CONTINUE_ITERATING    = TAO_CONTINUE_ITERATING    # iterating             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITERATING   = TAO_CONTINUE_ITERATING    # iterating
+ *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 33, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_SNESConvergedReason, __pyx_n_s_SNESConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONTINUE_ITERATING, __pyx_t_1) < 0) __PYX_ERR(38, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":42
- * class SNESConvergedReason(object):
+  /* "PETSc/TAO.pyx":34
  *     # iterating
- *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     ITERATING                = SNES_CONVERGED_ITERATING
+ *     CONTINUE_ITERATING    = TAO_CONTINUE_ITERATING    # iterating
+ *     CONVERGED_ITERATING   = TAO_CONTINUE_ITERATING    # iterating             # <<<<<<<<<<<<<<
+ *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
  *     # converged
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_1) < 0) __PYX_ERR(38, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":43
- *     # iterating
- *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING
- *     ITERATING                = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+  /* "PETSc/TAO.pyx":35
+ *     CONTINUE_ITERATING    = TAO_CONTINUE_ITERATING    # iterating
+ *     CONVERGED_ITERATING   = TAO_CONTINUE_ITERATING    # iterating
+ *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating             # <<<<<<<<<<<<<<
  *     # converged
- *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS
+ *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ITERATING, __pyx_t_1) < 0) __PYX_ERR(38, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":45
- *     ITERATING                = SNES_CONVERGED_ITERATING
+  /* "PETSc/TAO.pyx":37
+ *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
  *     # converged
- *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS             # <<<<<<<<<<<<<<
- *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE
- *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
+ *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol             # <<<<<<<<<<<<<<
+ *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
+ *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_CONVERGED_FNORM_ABS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_FNORM_ABS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_GATOL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_GATOL, __pyx_t_1) < 0) __PYX_ERR(38, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":46
+  /* "PETSc/TAO.pyx":38
  *     # converged
- *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS
- *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE             # <<<<<<<<<<<<<<
- *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
- *     CONVERGED_ITS            = SNES_CONVERGED_ITS
+ *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
+ *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol             # <<<<<<<<<<<<<<
+ *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
+ *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_CONVERGED_FNORM_RELATIVE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_FNORM_RELATIVE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_GRTOL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_GRTOL, __pyx_t_1) < 0) __PYX_ERR(38, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":47
- *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS
- *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE
- *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE             # <<<<<<<<<<<<<<
- *     CONVERGED_ITS            = SNES_CONVERGED_ITS
- *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
+  /* "PETSc/TAO.pyx":39
+ *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
+ *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
+ *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol             # <<<<<<<<<<<<<<
+ *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
+ *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_CONVERGED_SNORM_RELATIVE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_SNORM_RELATIVE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_GTTOL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_GTTOL, __pyx_t_1) < 0) __PYX_ERR(38, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":48
- *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE
- *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
- *     CONVERGED_ITS            = SNES_CONVERGED_ITS             # <<<<<<<<<<<<<<
- *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
- *     # diverged
+  /* "PETSc/TAO.pyx":40
+ *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
+ *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
+ *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size             # <<<<<<<<<<<<<<
+ *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min
+ *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_CONVERGED_ITS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_STEPTOL); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_STEPTOL, __pyx_t_1) < 0) __PYX_ERR(38, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":49
- *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
- *     CONVERGED_ITS            = SNES_CONVERGED_ITS
- *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA             # <<<<<<<<<<<<<<
+  /* "PETSc/TAO.pyx":41
+ *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
+ *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
+ *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min             # <<<<<<<<<<<<<<
+ *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
  *     # diverged
- *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_CONVERGED_TR_DELTA); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TR_DELTA, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_MINF); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_MINF, __pyx_t_1) < 0) __PYX_ERR(38, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":51
- *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
+  /* "PETSc/TAO.pyx":42
+ *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
+ *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min
+ *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined             # <<<<<<<<<<<<<<
  *     # diverged
- *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN             # <<<<<<<<<<<<<<
- *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT
- *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
+ *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_DIVERGED_FUNCTION_DOMAIN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_FUNCTION_DOMAIN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_USER); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_USER, __pyx_t_1) < 0) __PYX_ERR(38, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":52
+  /* "PETSc/TAO.pyx":44
+ *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
  *     # diverged
- *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN
- *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT             # <<<<<<<<<<<<<<
- *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
- *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
+ *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #             # <<<<<<<<<<<<<<
+ *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #
+ *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_DIVERGED_FUNCTION_COUNT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_FUNCTION_COUNT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_MAXITS); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_MAXITS, __pyx_t_1) < 0) __PYX_ERR(38, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":53
- *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN
- *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT
- *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN             # <<<<<<<<<<<<<<
- *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
- *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
+  /* "PETSc/TAO.pyx":45
+ *     # diverged
+ *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #
+ *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #             # <<<<<<<<<<<<<<
+ *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
+ *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_DIVERGED_FNORM_NAN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_FNORM_NAN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_NAN); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_NAN, __pyx_t_1) < 0) __PYX_ERR(38, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":54
- *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT
- *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
- *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT             # <<<<<<<<<<<<<<
- *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
- *     DIVERGED_INNER           = SNES_DIVERGED_INNER
+  /* "PETSc/TAO.pyx":46
+ *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #
+ *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #
+ *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #             # <<<<<<<<<<<<<<
+ *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
+ *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_DIVERGED_MAX_IT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_MAX_IT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_MAXFCN); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_MAXFCN, __pyx_t_1) < 0) __PYX_ERR(38, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":55
- *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
- *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
- *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH             # <<<<<<<<<<<<<<
- *     DIVERGED_INNER           = SNES_DIVERGED_INNER
- *     DIVERGED_LOCAL_MIN       = SNES_DIVERGED_LOCAL_MIN
+  /* "PETSc/TAO.pyx":47
+ *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #
+ *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
+ *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #             # <<<<<<<<<<<<<<
+ *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #
+ *     DIVERGED_USER         = TAO_DIVERGED_USER         # user defined
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_DIVERGED_LINE_SEARCH); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_LINE_SEARCH, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_LS_FAILURE); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_LS_FAILURE, __pyx_t_1) < 0) __PYX_ERR(38, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":56
- *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
- *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
- *     DIVERGED_INNER           = SNES_DIVERGED_INNER             # <<<<<<<<<<<<<<
- *     DIVERGED_LOCAL_MIN       = SNES_DIVERGED_LOCAL_MIN
+  /* "PETSc/TAO.pyx":48
+ *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
+ *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
+ *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #             # <<<<<<<<<<<<<<
+ *     DIVERGED_USER         = TAO_DIVERGED_USER         # user defined
  * 
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_DIVERGED_INNER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_INNER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_TR_REDUCTION); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_TR_REDUCTION, __pyx_t_1) < 0) __PYX_ERR(38, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":57
- *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
- *     DIVERGED_INNER           = SNES_DIVERGED_INNER
- *     DIVERGED_LOCAL_MIN       = SNES_DIVERGED_LOCAL_MIN             # <<<<<<<<<<<<<<
+  /* "PETSc/TAO.pyx":49
+ *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
+ *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #
+ *     DIVERGED_USER         = TAO_DIVERGED_USER         # user defined             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = PyInt_FromLong(SNES_DIVERGED_LOCAL_MIN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_LOCAL_MIN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/SNES.pyx":40
- *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
- * 
- * class SNESConvergedReason(object):             # <<<<<<<<<<<<<<
- *     # iterating
- *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESConvergedReason, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESConvergedReason, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_USER); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_USER, __pyx_t_1) < 0) __PYX_ERR(38, 49, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":63
- * cdef class SNES(Object):
+  /* "PETSc/TAO.pyx":28
+ *     TEST     = S_(TAOTEST)
  * 
- *     Type = SNESType             # <<<<<<<<<<<<<<
- *     NormSchedule = SNESNormSchedule
- *     ConvergedReason = SNESConvergedReason
+ * class TAOConvergedReason:             # <<<<<<<<<<<<<<
+ *     """
+ *     TAO Solver Termination Reasons
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_TAOConvergedReason, __pyx_empty_tuple, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TAOConvergedReason, __pyx_t_1) < 0) __PYX_ERR(38, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/SNES.pyx":64
- * 
- *     Type = SNESType
- *     NormSchedule = SNESNormSchedule             # <<<<<<<<<<<<<<
- *     ConvergedReason = SNESConvergedReason
+  /* "PETSc/TAO.pyx":59
+ *     """
  * 
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESNormSchedule); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_NormSchedule, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
-
-  /* "PETSc/SNES.pyx":65
- *     Type = SNESType
- *     NormSchedule = SNESNormSchedule
- *     ConvergedReason = SNESConvergedReason             # <<<<<<<<<<<<<<
+ *     Type   = TAOType             # <<<<<<<<<<<<<<
+ *     Reason = TAOConvergedReason
  * 
- *     # --- xxx ---
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESConvergedReason); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TAOType); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 59, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(38, 59, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
 
-  /* "PETSc/SNES.pyx":502
- *         return toInt(ival)
+  /* "PETSc/TAO.pyx":60
  * 
- *     setMaxNonlinearStepFailures = setMaxStepFailures             # <<<<<<<<<<<<<<
- *     getMaxNonlinearStepFailures = getMaxStepFailures
- *     getNonlinearStepFailures    = getStepFailures
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_setMaxStepFailures); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_setMaxNonlinearStepFailures, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
-
-  /* "PETSc/SNES.pyx":503
+ *     Type   = TAOType
+ *     Reason = TAOConvergedReason             # <<<<<<<<<<<<<<
  * 
- *     setMaxNonlinearStepFailures = setMaxStepFailures
- *     getMaxNonlinearStepFailures = getMaxStepFailures             # <<<<<<<<<<<<<<
- *     getNonlinearStepFailures    = getStepFailures
- *     setMaxLinearSolveFailures   = setMaxKSPFailures
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getMaxStepFailures); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getMaxNonlinearStepFailures, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
-
-  /* "PETSc/SNES.pyx":504
- *     setMaxNonlinearStepFailures = setMaxStepFailures
- *     getMaxNonlinearStepFailures = getMaxStepFailures
- *     getNonlinearStepFailures    = getStepFailures             # <<<<<<<<<<<<<<
- *     setMaxLinearSolveFailures   = setMaxKSPFailures
- *     getMaxLinearSolveFailures   = getMaxKSPFailures
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getStepFailures); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getNonlinearStepFailures, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
-
-  /* "PETSc/SNES.pyx":505
- *     getMaxNonlinearStepFailures = getMaxStepFailures
- *     getNonlinearStepFailures    = getStepFailures
- *     setMaxLinearSolveFailures   = setMaxKSPFailures             # <<<<<<<<<<<<<<
- *     getMaxLinearSolveFailures   = getMaxKSPFailures
- *     getLinearSolveFailures      = getKSPFailures
+ *     def __cinit__(self):
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_setMaxKSPFailures); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TAOConvergedReason); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_setMaxLinearSolveFailures, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_Reason, __pyx_t_3) < 0) __PYX_ERR(38, 60, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
 
-  /* "PETSc/SNES.pyx":506
- *     getNonlinearStepFailures    = getStepFailures
- *     setMaxLinearSolveFailures   = setMaxKSPFailures
- *     getMaxLinearSolveFailures   = getMaxKSPFailures             # <<<<<<<<<<<<<<
- *     getLinearSolveFailures      = getKSPFailures
+  /* "PETSc/TAO.pyx":511
+ *         return toReal(fval)
  * 
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getMaxKSPFailures); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getMaxLinearSolveFailures, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
-
-  /* "PETSc/SNES.pyx":507
- *     setMaxLinearSolveFailures   = setMaxKSPFailures
- *     getMaxLinearSolveFailures   = getMaxKSPFailures
- *     getLinearSolveFailures      = getKSPFailures             # <<<<<<<<<<<<<<
+ *     getFunctionValue = getObjectiveValue             # <<<<<<<<<<<<<<
  * 
- *     # --- solving ---
+ *     def getConvergedReason(self):
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getKSPFailures); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO, __pyx_n_s_getObjectiveValue); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 511, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getLinearSolveFailures, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_getFunctionValue, __pyx_t_3) < 0) __PYX_ERR(38, 511, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
 
-  /* "PETSc/SNES.pyx":830
+  /* "PETSc/TAO.pyx":649
  * # --------------------------------------------------------------------
  * 
- * del SNESType             # <<<<<<<<<<<<<<
- * del SNESNormSchedule
- * del SNESConvergedReason
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESType) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "PETSc/SNES.pyx":831
- * 
- * del SNESType
- * del SNESNormSchedule             # <<<<<<<<<<<<<<
- * del SNESConvergedReason
+ * del TAOType             # <<<<<<<<<<<<<<
+ * del TAOConvergedReason
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESNormSchedule) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TAOType) < 0) __PYX_ERR(38, 649, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":832
- * del SNESType
- * del SNESNormSchedule
- * del SNESConvergedReason             # <<<<<<<<<<<<<<
+  /* "PETSc/TAO.pyx":650
+ * 
+ * del TAOType
+ * del TAOConvergedReason             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESConvergedReason) < 0) {__pyx_filename = __pyx_f[36]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TAOConvergedReason) < 0) __PYX_ERR(38, 650, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "PETSc/AO.pyx":3
+ * # --------------------------------------------------------------------
  * 
- * class TSType(object):             # <<<<<<<<<<<<<<
- *     # native
- *     EULER    = S_(TSEULER)
+ * class AOType(object):             # <<<<<<<<<<<<<<
+ *     BASIC          = S_(AOBASIC)
+ *     ADVANCED       = S_(AOADVANCED)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(39, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(39, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSType, __pyx_n_s_TSType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_AOType, __pyx_n_s_AOType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(39, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TS.pyx":5
- * class TSType(object):
- *     # native
- *     EULER    = S_(TSEULER)             # <<<<<<<<<<<<<<
- *     BEULER   = S_(TSBEULER)
- *     PSEUDO   = S_(TSPSEUDO)
+  /* "PETSc/AO.pyx":4
+ * 
+ * class AOType(object):
+ *     BASIC          = S_(AOBASIC)             # <<<<<<<<<<<<<<
+ *     ADVANCED       = S_(AOADVANCED)
+ *     MAPPING        = S_(AOMAPPING)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSEULER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(AOBASIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(39, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EULER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BASIC, __pyx_t_8) < 0) __PYX_ERR(39, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":6
- *     # native
- *     EULER    = S_(TSEULER)
- *     BEULER   = S_(TSBEULER)             # <<<<<<<<<<<<<<
- *     PSEUDO   = S_(TSPSEUDO)
- *     CN       = S_(TSCN)
+  /* "PETSc/AO.pyx":5
+ * class AOType(object):
+ *     BASIC          = S_(AOBASIC)
+ *     ADVANCED       = S_(AOADVANCED)             # <<<<<<<<<<<<<<
+ *     MAPPING        = S_(AOMAPPING)
+ *     MEMORYSCALABLE = S_(AOMEMORYSCALABLE)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSBEULER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(AOADVANCED); if (unlikely(!__pyx_t_8)) __PYX_ERR(39, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BEULER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADVANCED, __pyx_t_8) < 0) __PYX_ERR(39, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":7
- *     EULER    = S_(TSEULER)
- *     BEULER   = S_(TSBEULER)
- *     PSEUDO   = S_(TSPSEUDO)             # <<<<<<<<<<<<<<
- *     CN       = S_(TSCN)
- *     SUNDIALS = S_(TSSUNDIALS)
+  /* "PETSc/AO.pyx":6
+ *     BASIC          = S_(AOBASIC)
+ *     ADVANCED       = S_(AOADVANCED)
+ *     MAPPING        = S_(AOMAPPING)             # <<<<<<<<<<<<<<
+ *     MEMORYSCALABLE = S_(AOMEMORYSCALABLE)
+ * 
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSPSEUDO); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(AOMAPPING); if (unlikely(!__pyx_t_8)) __PYX_ERR(39, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PSEUDO, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAPPING, __pyx_t_8) < 0) __PYX_ERR(39, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":8
- *     BEULER   = S_(TSBEULER)
- *     PSEUDO   = S_(TSPSEUDO)
- *     CN       = S_(TSCN)             # <<<<<<<<<<<<<<
- *     SUNDIALS = S_(TSSUNDIALS)
- *     RK       = S_(TSRK)
+  /* "PETSc/AO.pyx":7
+ *     ADVANCED       = S_(AOADVANCED)
+ *     MAPPING        = S_(AOMAPPING)
+ *     MEMORYSCALABLE = S_(AOMEMORYSCALABLE)             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSCN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(AOMEMORYSCALABLE); if (unlikely(!__pyx_t_8)) __PYX_ERR(39, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MEMORYSCALABLE, __pyx_t_8) < 0) __PYX_ERR(39, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":9
- *     PSEUDO   = S_(TSPSEUDO)
- *     CN       = S_(TSCN)
- *     SUNDIALS = S_(TSSUNDIALS)             # <<<<<<<<<<<<<<
- *     RK       = S_(TSRK)
- *     PYTHON   = S_(TSPYTHON)
+  /* "PETSc/AO.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class AOType(object):             # <<<<<<<<<<<<<<
+ *     BASIC          = S_(AOBASIC)
+ *     ADVANCED       = S_(AOADVANCED)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSSUNDIALS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_AOType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(39, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUNDIALS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_AOType, __pyx_t_8) < 0) __PYX_ERR(39, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":10
- *     CN       = S_(TSCN)
- *     SUNDIALS = S_(TSSUNDIALS)
- *     RK       = S_(TSRK)             # <<<<<<<<<<<<<<
- *     PYTHON   = S_(TSPYTHON)
- *     THETA    = S_(TSTHETA)
+  /* "PETSc/AO.pyx":13
+ * cdef class AO(Object):
+ * 
+ *     Type = AOType             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSRK); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RK, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_AOType); if (unlikely(!__pyx_t_3)) __PYX_ERR(39, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_AO->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(39, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_AO);
 
-  /* "PETSc/TS.pyx":11
- *     SUNDIALS = S_(TSSUNDIALS)
- *     RK       = S_(TSRK)
- *     PYTHON   = S_(TSPYTHON)             # <<<<<<<<<<<<<<
- *     THETA    = S_(TSTHETA)
- *     ALPHA    = S_(TSALPHA)
+  /* "PETSc/AO.pyx":117
+ * # --------------------------------------------------------------------
+ * 
+ * del AOType             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSPYTHON); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PYTHON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_AOType) < 0) __PYX_ERR(39, 117, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":12
- *     RK       = S_(TSRK)
- *     PYTHON   = S_(TSPYTHON)
- *     THETA    = S_(TSTHETA)             # <<<<<<<<<<<<<<
- *     ALPHA    = S_(TSALPHA)
- *     GL       = S_(TSGL)
+  /* "PETSc/DM.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class DMType(object):             # <<<<<<<<<<<<<<
+ *     DA        = S_(DMDA_type)
+ *     COMPOSITE = S_(DMCOMPOSITE)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSTHETA); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_THETA, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMType, __pyx_n_s_DMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TS.pyx":13
- *     PYTHON   = S_(TSPYTHON)
- *     THETA    = S_(TSTHETA)
- *     ALPHA    = S_(TSALPHA)             # <<<<<<<<<<<<<<
- *     GL       = S_(TSGL)
- *     SSP      = S_(TSSSP)
+  /* "PETSc/DM.pyx":4
+ * 
+ * class DMType(object):
+ *     DA        = S_(DMDA_type)             # <<<<<<<<<<<<<<
+ *     COMPOSITE = S_(DMCOMPOSITE)
+ *     SLICED    = S_(DMSLICED)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSALPHA); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMDA); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALPHA, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DA, __pyx_t_8) < 0) __PYX_ERR(40, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":14
- *     THETA    = S_(TSTHETA)
- *     ALPHA    = S_(TSALPHA)
- *     GL       = S_(TSGL)             # <<<<<<<<<<<<<<
- *     SSP      = S_(TSSSP)
- *     ARKIMEX  = S_(TSARKIMEX)
+  /* "PETSc/DM.pyx":5
+ * class DMType(object):
+ *     DA        = S_(DMDA_type)
+ *     COMPOSITE = S_(DMCOMPOSITE)             # <<<<<<<<<<<<<<
+ *     SLICED    = S_(DMSLICED)
+ *     SHELL     = S_(DMSHELL)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSGL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMCOMPOSITE); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSITE, __pyx_t_8) < 0) __PYX_ERR(40, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":15
- *     ALPHA    = S_(TSALPHA)
- *     GL       = S_(TSGL)
- *     SSP      = S_(TSSSP)             # <<<<<<<<<<<<<<
- *     ARKIMEX  = S_(TSARKIMEX)
- *     ROSW     = S_(TSROSW)
+  /* "PETSc/DM.pyx":6
+ *     DA        = S_(DMDA_type)
+ *     COMPOSITE = S_(DMCOMPOSITE)
+ *     SLICED    = S_(DMSLICED)             # <<<<<<<<<<<<<<
+ *     SHELL     = S_(DMSHELL)
+ *     PLEX      = S_(DMPLEX)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSSSP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMSLICED); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 6, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SSP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SLICED, __pyx_t_8) < 0) __PYX_ERR(40, 6, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":16
- *     GL       = S_(TSGL)
- *     SSP      = S_(TSSSP)
- *     ARKIMEX  = S_(TSARKIMEX)             # <<<<<<<<<<<<<<
- *     ROSW     = S_(TSROSW)
- *     EIMEX    = S_(TSEIMEX)
+  /* "PETSc/DM.pyx":7
+ *     COMPOSITE = S_(DMCOMPOSITE)
+ *     SLICED    = S_(DMSLICED)
+ *     SHELL     = S_(DMSHELL)             # <<<<<<<<<<<<<<
+ *     PLEX      = S_(DMPLEX)
+ *     CARTESIAN = S_(DMCARTESIAN)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSARKIMEX); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMSHELL); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ARKIMEX, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) __PYX_ERR(40, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":17
- *     SSP      = S_(TSSSP)
- *     ARKIMEX  = S_(TSARKIMEX)
- *     ROSW     = S_(TSROSW)             # <<<<<<<<<<<<<<
- *     EIMEX    = S_(TSEIMEX)
- *     # aliases
+  /* "PETSc/DM.pyx":8
+ *     SLICED    = S_(DMSLICED)
+ *     SHELL     = S_(DMSHELL)
+ *     PLEX      = S_(DMPLEX)             # <<<<<<<<<<<<<<
+ *     CARTESIAN = S_(DMCARTESIAN)
+ *     REDUNDANT = S_(DMREDUNDANT)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSROSW); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMPLEX); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ROSW, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PLEX, __pyx_t_8) < 0) __PYX_ERR(40, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":18
- *     ARKIMEX  = S_(TSARKIMEX)
- *     ROSW     = S_(TSROSW)
- *     EIMEX    = S_(TSEIMEX)             # <<<<<<<<<<<<<<
- *     # aliases
- *     FE = EULER
+  /* "PETSc/DM.pyx":9
+ *     SHELL     = S_(DMSHELL)
+ *     PLEX      = S_(DMPLEX)
+ *     CARTESIAN = S_(DMCARTESIAN)             # <<<<<<<<<<<<<<
+ *     REDUNDANT = S_(DMREDUNDANT)
+ *     PATCH     = S_(DMPATCH)
  */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(TSEIMEX); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMCARTESIAN); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EIMEX, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CARTESIAN, __pyx_t_8) < 0) __PYX_ERR(40, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":20
- *     EIMEX    = S_(TSEIMEX)
- *     # aliases
- *     FE = EULER             # <<<<<<<<<<<<<<
- *     BE = BEULER
- *     CRANK_NICOLSON = CN
+  /* "PETSc/DM.pyx":10
+ *     PLEX      = S_(DMPLEX)
+ *     CARTESIAN = S_(DMCARTESIAN)
+ *     REDUNDANT = S_(DMREDUNDANT)             # <<<<<<<<<<<<<<
+ *     PATCH     = S_(DMPATCH)
+ *     MOAB      = S_(DMMOAB)
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_EULER);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_EULER);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMREDUNDANT); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REDUNDANT, __pyx_t_8) < 0) __PYX_ERR(40, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":21
- *     # aliases
- *     FE = EULER
- *     BE = BEULER             # <<<<<<<<<<<<<<
- *     CRANK_NICOLSON = CN
- *     RUNGE_KUTTA    = RK
+  /* "PETSc/DM.pyx":11
+ *     CARTESIAN = S_(DMCARTESIAN)
+ *     REDUNDANT = S_(DMREDUNDANT)
+ *     PATCH     = S_(DMPATCH)             # <<<<<<<<<<<<<<
+ *     MOAB      = S_(DMMOAB)
+ *     NETWORK   = S_(DMNETWORK)
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_BEULER);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_BEULER);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMPATCH); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PATCH, __pyx_t_8) < 0) __PYX_ERR(40, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":22
- *     FE = EULER
- *     BE = BEULER
- *     CRANK_NICOLSON = CN             # <<<<<<<<<<<<<<
- *     RUNGE_KUTTA    = RK
+  /* "PETSc/DM.pyx":12
+ *     REDUNDANT = S_(DMREDUNDANT)
+ *     PATCH     = S_(DMPATCH)
+ *     MOAB      = S_(DMMOAB)             # <<<<<<<<<<<<<<
+ *     NETWORK   = S_(DMNETWORK)
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_CN);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_CN);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMMOAB); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CRANK_NICOLSON, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MOAB, __pyx_t_8) < 0) __PYX_ERR(40, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":23
- *     BE = BEULER
- *     CRANK_NICOLSON = CN
- *     RUNGE_KUTTA    = RK             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":13
+ *     PATCH     = S_(DMPATCH)
+ *     MOAB      = S_(DMMOAB)
+ *     NETWORK   = S_(DMNETWORK)             # <<<<<<<<<<<<<<
  * 
- * class TSProblemType(object):
+ * class DMBoundaryType(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_RK);
-  if (unlikely(!__pyx_t_8)) {
-    PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_RK);
-  }
-  if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMNETWORK); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RUNGE_KUTTA, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NETWORK, __pyx_t_8) < 0) __PYX_ERR(40, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "PETSc/DM.pyx":3
+ * # --------------------------------------------------------------------
  * 
- * class TSType(object):             # <<<<<<<<<<<<<<
- *     # native
- *     EULER    = S_(TSEULER)
+ * class DMType(object):             # <<<<<<<<<<<<<<
+ *     DA        = S_(DMDA_type)
+ *     COMPOSITE = S_(DMCOMPOSITE)
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMType, __pyx_t_8) < 0) __PYX_ERR(40, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":25
- *     RUNGE_KUTTA    = RK
+  /* "PETSc/DM.pyx":15
+ *     NETWORK   = S_(DMNETWORK)
  * 
- * class TSProblemType(object):             # <<<<<<<<<<<<<<
- *     LINEAR    = TS_LINEAR
- *     NONLINEAR = TS_NONLINEAR
+ * class DMBoundaryType(object):             # <<<<<<<<<<<<<<
+ *     NONE     = DM_BOUNDARY_NONE
+ *     GHOSTED  = DM_BOUNDARY_GHOSTED
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSProblemType, __pyx_n_s_TSProblemType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMBoundaryType, __pyx_n_s_DMBoundaryType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TS.pyx":26
- * 
- * class TSProblemType(object):
- *     LINEAR    = TS_LINEAR             # <<<<<<<<<<<<<<
- *     NONLINEAR = TS_NONLINEAR
+  /* "PETSc/DM.pyx":16
  * 
+ * class DMBoundaryType(object):
+ *     NONE     = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
+ *     GHOSTED  = DM_BOUNDARY_GHOSTED
+ *     MIRROR   = DM_BOUNDARY_MIRROR
  */
-  __pyx_t_8 = PyInt_FromLong(TS_LINEAR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_NONE); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LINEAR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) __PYX_ERR(40, 16, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":27
- * class TSProblemType(object):
- *     LINEAR    = TS_LINEAR
- *     NONLINEAR = TS_NONLINEAR             # <<<<<<<<<<<<<<
- * 
- * class TSEquationType(object):
+  /* "PETSc/DM.pyx":17
+ * class DMBoundaryType(object):
+ *     NONE     = DM_BOUNDARY_NONE
+ *     GHOSTED  = DM_BOUNDARY_GHOSTED             # <<<<<<<<<<<<<<
+ *     MIRROR   = DM_BOUNDARY_MIRROR
+ *     PERIODIC = DM_BOUNDARY_PERIODIC
  */
-  __pyx_t_8 = PyInt_FromLong(TS_NONLINEAR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_GHOSTED); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONLINEAR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHOSTED, __pyx_t_8) < 0) __PYX_ERR(40, 17, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":25
- *     RUNGE_KUTTA    = RK
- * 
- * class TSProblemType(object):             # <<<<<<<<<<<<<<
- *     LINEAR    = TS_LINEAR
- *     NONLINEAR = TS_NONLINEAR
+  /* "PETSc/DM.pyx":18
+ *     NONE     = DM_BOUNDARY_NONE
+ *     GHOSTED  = DM_BOUNDARY_GHOSTED
+ *     MIRROR   = DM_BOUNDARY_MIRROR             # <<<<<<<<<<<<<<
+ *     PERIODIC = DM_BOUNDARY_PERIODIC
+ *     TWIST    = DM_BOUNDARY_TWIST
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSProblemType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_MIRROR); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSProblemType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MIRROR, __pyx_t_8) < 0) __PYX_ERR(40, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "PETSc/TS.pyx":29
- *     NONLINEAR = TS_NONLINEAR
- * 
- * class TSEquationType(object):             # <<<<<<<<<<<<<<
- *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
- *     EXPLICIT                  = TS_EQ_EXPLICIT
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSEquationType, __pyx_n_s_TSEquationType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TS.pyx":30
+  /* "PETSc/DM.pyx":19
+ *     GHOSTED  = DM_BOUNDARY_GHOSTED
+ *     MIRROR   = DM_BOUNDARY_MIRROR
+ *     PERIODIC = DM_BOUNDARY_PERIODIC             # <<<<<<<<<<<<<<
+ *     TWIST    = DM_BOUNDARY_TWIST
  * 
- * class TSEquationType(object):
- *     UNSPECIFIED               = TS_EQ_UNSPECIFIED             # <<<<<<<<<<<<<<
- *     EXPLICIT                  = TS_EQ_EXPLICIT
- *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
- */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_UNSPECIFIED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_UNSPECIFIED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/TS.pyx":31
- * class TSEquationType(object):
- *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
- *     EXPLICIT                  = TS_EQ_EXPLICIT             # <<<<<<<<<<<<<<
- *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
- *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1
- */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_EXPLICIT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXPLICIT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/TS.pyx":32
- *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
- *     EXPLICIT                  = TS_EQ_EXPLICIT
- *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT             # <<<<<<<<<<<<<<
- *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1
- *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2
- */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_ODE_EXPLICIT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ODE_EXPLICIT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/TS.pyx":33
- *     EXPLICIT                  = TS_EQ_EXPLICIT
- *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
- *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1             # <<<<<<<<<<<<<<
- *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2
- *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3
- */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_DAE_SEMI_EXPLICIT_INDEX1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX1, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/TS.pyx":34
- *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
- *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1
- *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2             # <<<<<<<<<<<<<<
- *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3
- *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_DAE_SEMI_EXPLICIT_INDEX2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_PERIODIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX2, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PERIODIC, __pyx_t_8) < 0) __PYX_ERR(40, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":35
- *     DAE_SEMI_EXPLICIT_INDEX1  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX1
- *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2
- *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3             # <<<<<<<<<<<<<<
- *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI
- *     IMPLICIT                  = TS_EQ_IMPLICIT
+  /* "PETSc/DM.pyx":20
+ *     MIRROR   = DM_BOUNDARY_MIRROR
+ *     PERIODIC = DM_BOUNDARY_PERIODIC
+ *     TWIST    = DM_BOUNDARY_TWIST             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_DAE_SEMI_EXPLICIT_INDEX3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_TWIST); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX3, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TWIST, __pyx_t_8) < 0) __PYX_ERR(40, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":36
- *     DAE_SEMI_EXPLICIT_INDEX2  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX2
- *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3
- *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI             # <<<<<<<<<<<<<<
- *     IMPLICIT                  = TS_EQ_IMPLICIT
- *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT
+  /* "PETSc/DM.pyx":15
+ *     NETWORK   = S_(DMNETWORK)
+ * 
+ * class DMBoundaryType(object):             # <<<<<<<<<<<<<<
+ *     NONE     = DM_BOUNDARY_NONE
+ *     GHOSTED  = DM_BOUNDARY_GHOSTED
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMBoundaryType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(40, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEXHI, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMBoundaryType, __pyx_t_8) < 0) __PYX_ERR(40, 15, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":37
- *     DAE_SEMI_EXPLICIT_INDEX3  = TS_EQ_DAE_SEMI_EXPLICIT_INDEX3
- *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI
- *     IMPLICIT                  = TS_EQ_IMPLICIT             # <<<<<<<<<<<<<<
- *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT
- *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1
+  /* "PETSc/DM.pyx":26
+ * cdef class DM(Object):
+ * 
+ *     Type         = DMType             # <<<<<<<<<<<<<<
+ *     BoundaryType = DMBoundaryType
+ * 
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_IMPLICIT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IMPLICIT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMType); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(40, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
 
-  /* "PETSc/TS.pyx":38
- *     DAE_SEMI_EXPLICIT_INDEXHI = TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI
- *     IMPLICIT                  = TS_EQ_IMPLICIT
- *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT             # <<<<<<<<<<<<<<
- *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1
- *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2
+  /* "PETSc/DM.pyx":27
+ * 
+ *     Type         = DMType
+ *     BoundaryType = DMBoundaryType             # <<<<<<<<<<<<<<
+ * 
+ *     #
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_ODE_IMPLICIT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ODE_IMPLICIT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMBoundaryType); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_BoundaryType, __pyx_t_3) < 0) __PYX_ERR(40, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
 
-  /* "PETSc/TS.pyx":39
- *     IMPLICIT                  = TS_EQ_IMPLICIT
- *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT
- *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1             # <<<<<<<<<<<<<<
- *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2
- *     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3
+  /* "PETSc/DM.pyx":393
+ * 
+ *     # backward compatibility
+ *     createGlobalVector = createGlobalVec             # <<<<<<<<<<<<<<
+ *     createLocalVector = createLocalVec
+ *     getMatrix = createMatrix = createMat
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_DAE_IMPLICIT_INDEX1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_IMPLICIT_INDEX1, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createGlobalVec); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 393, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createGlobalVector, __pyx_t_3) < 0) __PYX_ERR(40, 393, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
 
-  /* "PETSc/TS.pyx":40
- *     ODE_IMPLICIT              = TS_EQ_ODE_IMPLICIT
- *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1
- *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2             # <<<<<<<<<<<<<<
- *     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3
- *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
+  /* "PETSc/DM.pyx":394
+ *     # backward compatibility
+ *     createGlobalVector = createGlobalVec
+ *     createLocalVector = createLocalVec             # <<<<<<<<<<<<<<
+ *     getMatrix = createMatrix = createMat
+ * 
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_DAE_IMPLICIT_INDEX2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_IMPLICIT_INDEX2, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createLocalVec); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 394, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createLocalVector, __pyx_t_3) < 0) __PYX_ERR(40, 394, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
 
-  /* "PETSc/TS.pyx":41
- *     DAE_IMPLICIT_INDEX1       = TS_EQ_DAE_IMPLICIT_INDEX1
- *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2
- *     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3             # <<<<<<<<<<<<<<
- *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
+  /* "PETSc/DM.pyx":395
+ *     createGlobalVector = createGlobalVec
+ *     createLocalVector = createLocalVec
+ *     getMatrix = createMatrix = createMat             # <<<<<<<<<<<<<<
  * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_DAE_IMPLICIT_INDEX3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_IMPLICIT_INDEX3, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createMat); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 395, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_getMatrix, __pyx_t_3) < 0) __PYX_ERR(40, 395, __pyx_L1_error)
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createMatrix, __pyx_t_3) < 0) __PYX_ERR(40, 395, __pyx_L1_error)
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":42
- *     DAE_IMPLICIT_INDEX2       = TS_EQ_DAE_IMPLICIT_INDEX2
- *     DAE_IMPLICIT_INDEX3       = TS_EQ_DAE_IMPLICIT_INDEX3
- *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI             # <<<<<<<<<<<<<<
+  /* "PETSc/DM.pyx":399
+ * # --------------------------------------------------------------------
+ * 
+ * del DMType             # <<<<<<<<<<<<<<
+ * del DMBoundaryType
  * 
- * class TSExactFinalTimeOption(object):
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EQ_DAE_IMPLICIT_INDEXHI); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DAE_IMPLICIT_INDEXHI, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMType) < 0) __PYX_ERR(40, 399, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":29
- *     NONLINEAR = TS_NONLINEAR
+  /* "PETSc/DM.pyx":400
  * 
- * class TSEquationType(object):             # <<<<<<<<<<<<<<
- *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
- *     EXPLICIT                  = TS_EQ_EXPLICIT
+ * del DMType
+ * del DMBoundaryType             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSEquationType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSEquationType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMBoundaryType) < 0) __PYX_ERR(40, 400, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":44
- *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
+  /* "PETSc/DMDA.pyx":3
+ * # --------------------------------------------------------------------
  * 
- * class TSExactFinalTimeOption(object):             # <<<<<<<<<<<<<<
- *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
- *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
+ * class DMDAStencilType(object):             # <<<<<<<<<<<<<<
+ *     STAR = DMDA_STENCIL_STAR
+ *     BOX  = DMDA_STENCIL_BOX
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSExactFinalTimeOption, __pyx_n_s_TSExactFinalTimeOption, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMDAStencilType, __pyx_n_s_DMDAStencilType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TS.pyx":45
+  /* "PETSc/DMDA.pyx":4
  * 
- * class TSExactFinalTimeOption(object):
- *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER             # <<<<<<<<<<<<<<
- *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
- *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
- */
-  __pyx_t_8 = PyInt_FromLong(TS_EXACTFINALTIME_STEPOVER); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STEPOVER, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-
-  /* "PETSc/TS.pyx":46
- * class TSExactFinalTimeOption(object):
- *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
- *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE             # <<<<<<<<<<<<<<
- *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
+ * class DMDAStencilType(object):
+ *     STAR = DMDA_STENCIL_STAR             # <<<<<<<<<<<<<<
+ *     BOX  = DMDA_STENCIL_BOX
  * 
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EXACTFINALTIME_INTERPOLATE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMDAStencilType(DMDA_STENCIL_STAR); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERPOLATE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STAR, __pyx_t_8) < 0) __PYX_ERR(41, 4, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":47
- *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
- *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
- *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP             # <<<<<<<<<<<<<<
+  /* "PETSc/DMDA.pyx":5
+ * class DMDAStencilType(object):
+ *     STAR = DMDA_STENCIL_STAR
+ *     BOX  = DMDA_STENCIL_BOX             # <<<<<<<<<<<<<<
  * 
- * class TSConvergedReason(object):
+ * class DMDAInterpolationType(object):
  */
-  __pyx_t_8 = PyInt_FromLong(TS_EXACTFINALTIME_MATCHSTEP); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMDAStencilType(DMDA_STENCIL_BOX); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 5, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MATCHSTEP, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BOX, __pyx_t_8) < 0) __PYX_ERR(41, 5, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":44
- *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
+  /* "PETSc/DMDA.pyx":3
+ * # --------------------------------------------------------------------
  * 
- * class TSExactFinalTimeOption(object):             # <<<<<<<<<<<<<<
- *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
- *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
+ * class DMDAStencilType(object):             # <<<<<<<<<<<<<<
+ *     STAR = DMDA_STENCIL_STAR
+ *     BOX  = DMDA_STENCIL_BOX
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSExactFinalTimeOption, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAStencilType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSExactFinalTimeOption, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAStencilType, __pyx_t_8) < 0) __PYX_ERR(41, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":49
- *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
+  /* "PETSc/DMDA.pyx":7
+ *     BOX  = DMDA_STENCIL_BOX
  * 
- * class TSConvergedReason(object):             # <<<<<<<<<<<<<<
- *     # iterating
- *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
+ * class DMDAInterpolationType(object):             # <<<<<<<<<<<<<<
+ *     Q0 = DMDA_INTERPOLATION_Q0
+ *     Q1 = DMDA_INTERPOLATION_Q1
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_TSConvergedReason, __pyx_n_s_TSConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMDAInterpolationType, __pyx_n_s_DMDAInterpolationType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TS.pyx":51
- * class TSConvergedReason(object):
- *     # iterating
- *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     ITERATING                = TS_CONVERGED_ITERATING
- *     # converged
+  /* "PETSc/DMDA.pyx":8
+ * 
+ * class DMDAInterpolationType(object):
+ *     Q0 = DMDA_INTERPOLATION_Q0             # <<<<<<<<<<<<<<
+ *     Q1 = DMDA_INTERPOLATION_Q1
+ * 
  */
-  __pyx_t_8 = PyInt_FromLong(TS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMDAInterpolationType(DMDA_Q0); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Q0, __pyx_t_8) < 0) __PYX_ERR(41, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":52
- *     # iterating
- *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
- *     ITERATING                = TS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     # converged
- *     CONVERGED_TIME           = TS_CONVERGED_TIME
+  /* "PETSc/DMDA.pyx":9
+ * class DMDAInterpolationType(object):
+ *     Q0 = DMDA_INTERPOLATION_Q0
+ *     Q1 = DMDA_INTERPOLATION_Q1             # <<<<<<<<<<<<<<
+ * 
+ * class DMDAElementType(object):
  */
-  __pyx_t_8 = PyInt_FromLong(TS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMDAInterpolationType(DMDA_Q1); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Q1, __pyx_t_8) < 0) __PYX_ERR(41, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":54
- *     ITERATING                = TS_CONVERGED_ITERATING
- *     # converged
- *     CONVERGED_TIME           = TS_CONVERGED_TIME             # <<<<<<<<<<<<<<
- *     CONVERGED_ITS            = TS_CONVERGED_ITS
- *     # diverged
+  /* "PETSc/DMDA.pyx":7
+ *     BOX  = DMDA_STENCIL_BOX
+ * 
+ * class DMDAInterpolationType(object):             # <<<<<<<<<<<<<<
+ *     Q0 = DMDA_INTERPOLATION_Q0
+ *     Q1 = DMDA_INTERPOLATION_Q1
  */
-  __pyx_t_8 = PyInt_FromLong(TS_CONVERGED_TIME); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAInterpolationType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TIME, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAInterpolationType, __pyx_t_8) < 0) __PYX_ERR(41, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":55
- *     # converged
- *     CONVERGED_TIME           = TS_CONVERGED_TIME
- *     CONVERGED_ITS            = TS_CONVERGED_ITS             # <<<<<<<<<<<<<<
- *     # diverged
- *     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE
+  /* "PETSc/DMDA.pyx":11
+ *     Q1 = DMDA_INTERPOLATION_Q1
+ * 
+ * class DMDAElementType(object):             # <<<<<<<<<<<<<<
+ *     P1 = DMDA_ELEMENT_P1
+ *     Q1 = DMDA_ELEMENT_Q1
  */
-  __pyx_t_8 = PyInt_FromLong(TS_CONVERGED_ITS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMDAElementType, __pyx_n_s_DMDAElementType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(41, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TS.pyx":57
- *     CONVERGED_ITS            = TS_CONVERGED_ITS
- *     # diverged
- *     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE             # <<<<<<<<<<<<<<
- *     DIVERGED_STEP_REJECTED   = TS_DIVERGED_STEP_REJECTED
+  /* "PETSc/DMDA.pyx":12
+ * 
+ * class DMDAElementType(object):
+ *     P1 = DMDA_ELEMENT_P1             # <<<<<<<<<<<<<<
+ *     Q1 = DMDA_ELEMENT_Q1
  * 
  */
-  __pyx_t_8 = PyInt_FromLong(TS_DIVERGED_NONLINEAR_SOLVE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMDAElementType(DMDA_ELEMENT_P1); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_NONLINEAR_SOLVE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_P1, __pyx_t_8) < 0) __PYX_ERR(41, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":58
- *     # diverged
- *     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE
- *     DIVERGED_STEP_REJECTED   = TS_DIVERGED_STEP_REJECTED             # <<<<<<<<<<<<<<
+  /* "PETSc/DMDA.pyx":13
+ * class DMDAElementType(object):
+ *     P1 = DMDA_ELEMENT_P1
+ *     Q1 = DMDA_ELEMENT_Q1             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = PyInt_FromLong(TS_DIVERGED_STEP_REJECTED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_From_DMDAElementType(DMDA_ELEMENT_Q1); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_STEP_REJECTED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Q1, __pyx_t_8) < 0) __PYX_ERR(41, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TS.pyx":49
- *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
+  /* "PETSc/DMDA.pyx":11
+ *     Q1 = DMDA_INTERPOLATION_Q1
  * 
- * class TSConvergedReason(object):             # <<<<<<<<<<<<<<
- *     # iterating
- *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
+ * class DMDAElementType(object):             # <<<<<<<<<<<<<<
+ *     P1 = DMDA_ELEMENT_P1
+ *     Q1 = DMDA_ELEMENT_Q1
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSConvergedReason, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAElementType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(41, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSConvergedReason, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAElementType, __pyx_t_8) < 0) __PYX_ERR(41, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":64
- * cdef class TS(Object):
+  /* "PETSc/DMDA.pyx":19
+ * cdef class DMDA(DM):
  * 
- *     Type = TSType             # <<<<<<<<<<<<<<
- *     ProblemType = TSProblemType
- *     EquationType = TSEquationType
+ *     StencilType       = DMDAStencilType             # <<<<<<<<<<<<<<
+ *     InterpolationType = DMDAInterpolationType
+ *     ElementType       = DMDAElementType
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAStencilType); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_StencilType, __pyx_t_3) < 0) __PYX_ERR(41, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
 
-  /* "PETSc/TS.pyx":65
+  /* "PETSc/DMDA.pyx":20
+ * 
+ *     StencilType       = DMDAStencilType
+ *     InterpolationType = DMDAInterpolationType             # <<<<<<<<<<<<<<
+ *     ElementType       = DMDAElementType
  * 
- *     Type = TSType
- *     ProblemType = TSProblemType             # <<<<<<<<<<<<<<
- *     EquationType = TSEquationType
- *     ExactFinalTimeOption = TSExactFinalTimeOption
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSProblemType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ProblemType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
-
-  /* "PETSc/TS.pyx":66
- *     Type = TSType
- *     ProblemType = TSProblemType
- *     EquationType = TSEquationType             # <<<<<<<<<<<<<<
- *     ExactFinalTimeOption = TSExactFinalTimeOption
- *     ConvergedReason = TSConvergedReason
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSEquationType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAInterpolationType); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 20, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_EquationType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_InterpolationType, __pyx_t_3) < 0) __PYX_ERR(41, 20, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
 
-  /* "PETSc/TS.pyx":67
- *     ProblemType = TSProblemType
- *     EquationType = TSEquationType
- *     ExactFinalTimeOption = TSExactFinalTimeOption             # <<<<<<<<<<<<<<
- *     ConvergedReason = TSConvergedReason
+  /* "PETSc/DMDA.pyx":21
+ *     StencilType       = DMDAStencilType
+ *     InterpolationType = DMDAInterpolationType
+ *     ElementType       = DMDAElementType             # <<<<<<<<<<<<<<
  * 
+ *     #
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSExactFinalTimeOption); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAElementType); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 21, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ExactFinalTimeOption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_ElementType, __pyx_t_3) < 0) __PYX_ERR(41, 21, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
 
-  /* "PETSc/TS.pyx":68
- *     EquationType = TSEquationType
- *     ExactFinalTimeOption = TSExactFinalTimeOption
- *     ConvergedReason = TSConvergedReason             # <<<<<<<<<<<<<<
+  /* "PETSc/DMDA.pyx":530
+ * 
+ *     # backward compatibility
+ *     createNaturalVector = createNaturalVec             # <<<<<<<<<<<<<<
+ * 
  * 
- *     # --- xxx ---
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSConvergedReason); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA, __pyx_n_s_createNaturalVec); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 530, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_createNaturalVector, __pyx_t_3) < 0) __PYX_ERR(41, 530, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
 
-  /* "PETSc/TS.pyx":722
- * # -----------------------------------------------------------------------------
+  /* "PETSc/DMDA.pyx":534
  * 
- * del TSType             # <<<<<<<<<<<<<<
- * del TSProblemType
- * del TSEquationType
+ * # backward compatibility alias
+ * DA = DMDA             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSType) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DA, ((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA)) < 0) __PYX_ERR(41, 534, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":723
+  /* "PETSc/DMDA.pyx":538
+ * # --------------------------------------------------------------------
  * 
- * del TSType
- * del TSProblemType             # <<<<<<<<<<<<<<
- * del TSEquationType
- * del TSExactFinalTimeOption
+ * del DMDAStencilType             # <<<<<<<<<<<<<<
+ * del DMDAInterpolationType
+ * del DMDAElementType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSProblemType) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMDAStencilType) < 0) __PYX_ERR(41, 538, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":724
- * del TSType
- * del TSProblemType
- * del TSEquationType             # <<<<<<<<<<<<<<
- * del TSExactFinalTimeOption
- * del TSConvergedReason
+  /* "PETSc/DMDA.pyx":539
+ * 
+ * del DMDAStencilType
+ * del DMDAInterpolationType             # <<<<<<<<<<<<<<
+ * del DMDAElementType
+ * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSEquationType) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMDAInterpolationType) < 0) __PYX_ERR(41, 539, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":725
- * del TSProblemType
- * del TSEquationType
- * del TSExactFinalTimeOption             # <<<<<<<<<<<<<<
- * del TSConvergedReason
+  /* "PETSc/DMDA.pyx":540
+ * del DMDAStencilType
+ * del DMDAInterpolationType
+ * del DMDAElementType             # <<<<<<<<<<<<<<
  * 
+ * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSExactFinalTimeOption) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMDAElementType) < 0) __PYX_ERR(41, 540, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":726
- * del TSEquationType
- * del TSExactFinalTimeOption
- * del TSConvergedReason             # <<<<<<<<<<<<<<
+  /* "PETSc/DMComposite.pyx":25
+ *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
+ *         return toInt(n)
+ *     getNumberDM = getNumber             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def getEntries(self):
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSConvergedReason) < 0) {__pyx_filename = __pyx_f[37]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMComposite, __pyx_n_s_getNumber); if (unlikely(!__pyx_t_3)) __PYX_ERR(43, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMComposite->tp_dict, __pyx_n_s_getNumberDM, __pyx_t_3) < 0) __PYX_ERR(43, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMComposite);
 
-  /* "PETSc/TAO.pyx":3
+  /* "PETSc/SF.pyx":3
  * # --------------------------------------------------------------------
  * 
- * class TAOType:             # <<<<<<<<<<<<<<
- *     """
- *     TAO Solver Types
+ * class SFType(object):             # <<<<<<<<<<<<<<
+ *     BASIC  = S_(PETSCSFBASIC)
+ *     WINDOW = S_(PETSCSFWINDOW)
  */
-  __pyx_t_3 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TAOType, __pyx_n_s_TAOType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, __pyx_kp_s_TAO_Solver_Types); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-
-  /* "PETSc/TAO.pyx":7
- *     TAO Solver Types
- *     """
- *     LMVM     = S_(TAOLMVM)             # <<<<<<<<<<<<<<
- *     NLS      = S_(TAONLS)
- *     NTR      = S_(TAONTR)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOLMVM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LMVM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "PETSc/TAO.pyx":8
- *     """
- *     LMVM     = S_(TAOLMVM)
- *     NLS      = S_(TAONLS)             # <<<<<<<<<<<<<<
- *     NTR      = S_(TAONTR)
- *     NTL      = S_(TAONTL)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAONLS); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NLS, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "PETSc/TAO.pyx":9
- *     LMVM     = S_(TAOLMVM)
- *     NLS      = S_(TAONLS)
- *     NTR      = S_(TAONTR)             # <<<<<<<<<<<<<<
- *     NTL      = S_(TAONTL)
- *     CG       = S_(TAOCG)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAONTR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NTR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "PETSc/TAO.pyx":10
- *     NLS      = S_(TAONLS)
- *     NTR      = S_(TAONTR)
- *     NTL      = S_(TAONTL)             # <<<<<<<<<<<<<<
- *     CG       = S_(TAOCG)
- *     TRON     = S_(TAOTRON)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAONTL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(45, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NTL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_SFType, __pyx_n_s_SFType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(45, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TAO.pyx":11
- *     NTR      = S_(TAONTR)
- *     NTL      = S_(TAONTL)
- *     CG       = S_(TAOCG)             # <<<<<<<<<<<<<<
- *     TRON     = S_(TAOTRON)
- *     OWLQN    = S_(TAOOWLQN)
+  /* "PETSc/SF.pyx":4
+ * 
+ * class SFType(object):
+ *     BASIC  = S_(PETSCSFBASIC)             # <<<<<<<<<<<<<<
+ *     WINDOW = S_(PETSCSFWINDOW)
+ * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOCG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSFBASIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(45, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BASIC, __pyx_t_8) < 0) __PYX_ERR(45, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TAO.pyx":12
- *     NTL      = S_(TAONTL)
- *     CG       = S_(TAOCG)
- *     TRON     = S_(TAOTRON)             # <<<<<<<<<<<<<<
- *     OWLQN    = S_(TAOOWLQN)
- *     BMRM     = S_(TAOBMRM)
+  /* "PETSc/SF.pyx":5
+ * class SFType(object):
+ *     BASIC  = S_(PETSCSFBASIC)
+ *     WINDOW = S_(PETSCSFWINDOW)             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOTRON); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TRON, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSFWINDOW); if (unlikely(!__pyx_t_8)) __PYX_ERR(45, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_WINDOW, __pyx_t_8) < 0) __PYX_ERR(45, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TAO.pyx":13
- *     CG       = S_(TAOCG)
- *     TRON     = S_(TAOTRON)
- *     OWLQN    = S_(TAOOWLQN)             # <<<<<<<<<<<<<<
- *     BMRM     = S_(TAOBMRM)
- *     BLMVM    = S_(TAOBLMVM)
+  /* "PETSc/SF.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class SFType(object):             # <<<<<<<<<<<<<<
+ *     BASIC  = S_(PETSCSFBASIC)
+ *     WINDOW = S_(PETSCSFWINDOW)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOOWLQN); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_OWLQN, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SFType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(45, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SFType, __pyx_t_8) < 0) __PYX_ERR(45, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TAO.pyx":14
- *     TRON     = S_(TAOTRON)
- *     OWLQN    = S_(TAOOWLQN)
- *     BMRM     = S_(TAOBMRM)             # <<<<<<<<<<<<<<
- *     BLMVM    = S_(TAOBLMVM)
- *     BQPIP    = S_(TAOBQPIP)
+  /* "PETSc/SF.pyx":11
+ * cdef class SF(Object):
+ * 
+ *     Type = SFType             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOBMRM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BMRM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SFType); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(45, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SF);
 
-  /* "PETSc/TAO.pyx":15
- *     OWLQN    = S_(TAOOWLQN)
- *     BMRM     = S_(TAOBMRM)
- *     BLMVM    = S_(TAOBLMVM)             # <<<<<<<<<<<<<<
- *     BQPIP    = S_(TAOBQPIP)
- *     GPCG     = S_(TAOGPCG)
+  /* "PETSc/SF.pyx":104
+ * # --------------------------------------------------------------------
+ * 
+ * del SFType             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOBLMVM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BLMVM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SFType) < 0) __PYX_ERR(45, 104, __pyx_L1_error)
 
-  /* "PETSc/TAO.pyx":16
- *     BMRM     = S_(TAOBMRM)
- *     BLMVM    = S_(TAOBLMVM)
- *     BQPIP    = S_(TAOBQPIP)             # <<<<<<<<<<<<<<
- *     GPCG     = S_(TAOGPCG)
- *     NM       = S_(TAONM)
+  /* "PETSc/Partitioner.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class PartitionerType(object):             # <<<<<<<<<<<<<<
+ *     CHACO    = S_(PETSCPARTITIONERCHACO)
+ *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOBQPIP); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(46, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(46, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BQPIP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PartitionerType, __pyx_n_s_PartitionerType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(46, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "PETSc/TAO.pyx":17
- *     BLMVM    = S_(TAOBLMVM)
- *     BQPIP    = S_(TAOBQPIP)
- *     GPCG     = S_(TAOGPCG)             # <<<<<<<<<<<<<<
- *     NM       = S_(TAONM)
- *     POUNDERS = S_(TAOPOUNDERS)
+  /* "PETSc/Partitioner.pyx":4
+ * 
+ * class PartitionerType(object):
+ *     CHACO    = S_(PETSCPARTITIONERCHACO)             # <<<<<<<<<<<<<<
+ *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
+ *     SHELL    = S_(PETSCPARTITIONERSHELL)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOGPCG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GPCG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERCHACO); if (unlikely(!__pyx_t_8)) __PYX_ERR(46, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHACO, __pyx_t_8) < 0) __PYX_ERR(46, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TAO.pyx":18
- *     BQPIP    = S_(TAOBQPIP)
- *     GPCG     = S_(TAOGPCG)
- *     NM       = S_(TAONM)             # <<<<<<<<<<<<<<
- *     POUNDERS = S_(TAOPOUNDERS)
- *     LCL      = S_(TAOLCL)
+  /* "PETSc/Partitioner.pyx":5
+ * class PartitionerType(object):
+ *     CHACO    = S_(PETSCPARTITIONERCHACO)
+ *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)             # <<<<<<<<<<<<<<
+ *     SHELL    = S_(PETSCPARTITIONERSHELL)
+ * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAONM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERPARMETIS); if (unlikely(!__pyx_t_8)) __PYX_ERR(46, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PARMETIS, __pyx_t_8) < 0) __PYX_ERR(46, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TAO.pyx":19
- *     GPCG     = S_(TAOGPCG)
- *     NM       = S_(TAONM)
- *     POUNDERS = S_(TAOPOUNDERS)             # <<<<<<<<<<<<<<
- *     LCL      = S_(TAOLCL)
- *     SSILS    = S_(TAOSSILS)
+  /* "PETSc/Partitioner.pyx":6
+ *     CHACO    = S_(PETSCPARTITIONERCHACO)
+ *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
+ *     SHELL    = S_(PETSCPARTITIONERSHELL)             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOPOUNDERS); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_POUNDERS, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERSHELL); if (unlikely(!__pyx_t_8)) __PYX_ERR(46, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) __PYX_ERR(46, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/TAO.pyx":20
- *     NM       = S_(TAONM)
- *     POUNDERS = S_(TAOPOUNDERS)
- *     LCL      = S_(TAOLCL)             # <<<<<<<<<<<<<<
- *     SSILS    = S_(TAOSSILS)
- *     SSFLS    = S_(TAOSSFLS)
+  /* "PETSc/Partitioner.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class PartitionerType(object):             # <<<<<<<<<<<<<<
+ *     CHACO    = S_(PETSCPARTITIONERCHACO)
+ *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOLCL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LCL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PartitionerType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(46, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PartitionerType, __pyx_t_8) < 0) __PYX_ERR(46, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TAO.pyx":21
- *     POUNDERS = S_(TAOPOUNDERS)
- *     LCL      = S_(TAOLCL)
- *     SSILS    = S_(TAOSSILS)             # <<<<<<<<<<<<<<
- *     SSFLS    = S_(TAOSSFLS)
- *     ASILS    = S_(TAOASILS)
+  /* "PETSc/Partitioner.pyx":12
+ * cdef class Partitioner(Object):
+ * 
+ *     Type = PartitionerType             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOSSILS); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SSILS, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PartitionerType); if (unlikely(!__pyx_t_3)) __PYX_ERR(46, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Partitioner->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(46, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Partitioner);
 
-  /* "PETSc/TAO.pyx":22
- *     LCL      = S_(TAOLCL)
- *     SSILS    = S_(TAOSSILS)
- *     SSFLS    = S_(TAOSSFLS)             # <<<<<<<<<<<<<<
- *     ASILS    = S_(TAOASILS)
- *     ASFLS    = S_(TAOASFLS)
+  /* "PETSc/PETSc.pyx":190
+ *                   int,PetscErrorType,char*,void*)
+ * 
+ * cdef object tracebacklist = []             # <<<<<<<<<<<<<<
+ * 
+ * cdef int traceback(MPI_Comm       comm,
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOSSFLS); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SSFLS, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 190, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_tracebacklist);
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_tracebacklist, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "PETSc/TAO.pyx":23
- *     SSILS    = S_(TAOSSILS)
- *     SSFLS    = S_(TAOSSFLS)
- *     ASILS    = S_(TAOASILS)             # <<<<<<<<<<<<<<
- *     ASFLS    = S_(TAOASFLS)
- *     IPM      = S_(TAOIPM)
+  /* "PETSc/PETSc.pyx":270
+ *     int PetscPythonRegisterAll()
+ * 
+ * cdef int    PyPetsc_Argc = 0             # <<<<<<<<<<<<<<
+ * cdef char** PyPetsc_Argv = NULL
+ * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOASILS); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ASILS, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_8petsc4py_5PETSc_PyPetsc_Argc = 0;
 
-  /* "PETSc/TAO.pyx":24
- *     SSFLS    = S_(TAOSSFLS)
- *     ASILS    = S_(TAOASILS)
- *     ASFLS    = S_(TAOASFLS)             # <<<<<<<<<<<<<<
- *     IPM      = S_(TAOIPM)
- *     TEST     = S_(TAOTEST)
+  /* "PETSc/PETSc.pyx":271
+ * 
+ * cdef int    PyPetsc_Argc = 0
+ * cdef char** PyPetsc_Argv = NULL             # <<<<<<<<<<<<<<
+ * 
+ * cdef int getinitargs(object args, int *argc, char **argv[]) except -1:
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOASFLS); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ASFLS, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_8petsc4py_5PETSc_PyPetsc_Argv = NULL;
 
-  /* "PETSc/TAO.pyx":25
- *     ASILS    = S_(TAOASILS)
- *     ASFLS    = S_(TAOASFLS)
- *     IPM      = S_(TAOIPM)             # <<<<<<<<<<<<<<
- *     TEST     = S_(TAOTEST)
+  /* "PETSc/PETSc.pyx":366
+ *     PetscClassId PETSC_PARTITIONER_CLASSID "PETSCPARTITIONER_CLASSID"
+ * 
+ * cdef bint registercalled = 0             # <<<<<<<<<<<<<<
  * 
+ * cdef const char *citation = b"""\
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOIPM); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IPM, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_8petsc4py_5PETSc_registercalled = 0;
 
-  /* "PETSc/TAO.pyx":26
- *     ASFLS    = S_(TAOASFLS)
- *     IPM      = S_(TAOIPM)
- *     TEST     = S_(TAOTEST)             # <<<<<<<<<<<<<<
+  /* "PETSc/PETSc.pyx":368
+ * cdef bint registercalled = 0
  * 
- * class TAOConvergedReason:
+ * cdef const char *citation = b"""\             # <<<<<<<<<<<<<<
+ * @Article{Dalcin2011,
+ *   Author = {Lisandro D. Dalcin and Rodrigo R. Paz and Pablo A. Kler and Alejandro Cosimo},
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_S_(TAOTEST); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TEST, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_8petsc4py_5PETSc_citation = ((char const *)"@Article{Dalcin2011,\n  Author = {Lisandro D. Dalcin and Rodrigo R. Paz and Pablo A. Kler and Alejandro Cosimo},\n  Title = {Parallel distributed computing using {P}ython},\n  Journal = {Advances in Water Resources},\n  Note = {New Computational Methods and Software Tools},\n  Volume = {34},\n  Number = {9},\n  Pages = {1124--1139},\n  Year = {2011},\n  DOI = {http://dx.doi.org/10.1016/j.advwatres.2011.04.013}\n}\n");
 
-  /* "PETSc/TAO.pyx":3
+  /* "PETSc/PETSc.pyx":417
  * # --------------------------------------------------------------------
  * 
- * class TAOType:             # <<<<<<<<<<<<<<
- *     """
- *     TAO Solver Types
+ * def _initialize(args=None, comm=None):             # <<<<<<<<<<<<<<
+ *     global tracebacklist
+ *     Error._traceback_ = tracebacklist
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_TAOType, __pyx_empty_tuple, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TAOType, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_1_initialize, NULL, __pyx_n_s_petsc4py_PETSc); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 417, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_initialize, __pyx_t_3) < 0) __PYX_ERR(11, 417, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TAO.pyx":28
- *     TEST     = S_(TAOTEST)
+  /* "PETSc/PETSc.pyx":433
+ *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD
  * 
- * class TAOConvergedReason:             # <<<<<<<<<<<<<<
- *     """
- *     TAO Solver Termination Reasons
+ * def _finalize():             # <<<<<<<<<<<<<<
+ *     finalize()
+ *     #
  */
-  __pyx_t_3 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TAOConvergedReason, __pyx_n_s_TAOConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, __pyx_kp_s_TAO_Solver_Termination_Reasons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_3_finalize, NULL, __pyx_n_s_petsc4py_PETSc); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 433, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_finalize, __pyx_t_3) < 0) __PYX_ERR(11, 433, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/TAO.pyx":33
- *     """
- *     # iterating
- *     CONTINUE_ITERATING    = TAO_CONTINUE_ITERATING    # iterating             # <<<<<<<<<<<<<<
- *     CONVERGED_ITERATING   = TAO_CONTINUE_ITERATING    # iterating
- *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONTINUE_ITERATING, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "PETSc/TAO.pyx":34
- *     # iterating
- *     CONTINUE_ITERATING    = TAO_CONTINUE_ITERATING    # iterating
- *     CONVERGED_ITERATING   = TAO_CONTINUE_ITERATING    # iterating             # <<<<<<<<<<<<<<
- *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
- *     # converged
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "PETSc/TAO.pyx":35
- *     CONTINUE_ITERATING    = TAO_CONTINUE_ITERATING    # iterating
- *     CONVERGED_ITERATING   = TAO_CONTINUE_ITERATING    # iterating
- *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating             # <<<<<<<<<<<<<<
- *     # converged
- *     CONVERGED_FATOL       = TAO_CONVERGED_FATOL       # f(X)-f(X*) <= fatol
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ITERATING, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "PETSc/TAO.pyx":37
- *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
- *     # converged
- *     CONVERGED_FATOL       = TAO_CONVERGED_FATOL       # f(X)-f(X*) <= fatol             # <<<<<<<<<<<<<<
- *     CONVERGED_FRTOL       = TAO_CONVERGED_FRTOL       # |F(X)-f(X*)|/|f(X)| < frtol
- *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONVERGED_FATOL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_FATOL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "PETSc/TAO.pyx":38
- *     # converged
- *     CONVERGED_FATOL       = TAO_CONVERGED_FATOL       # f(X)-f(X*) <= fatol
- *     CONVERGED_FRTOL       = TAO_CONVERGED_FRTOL       # |F(X)-f(X*)|/|f(X)| < frtol             # <<<<<<<<<<<<<<
- *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
- *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONVERGED_FRTOL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_FRTOL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  /*--- Wrapped vars code ---*/
 
-  /* "PETSc/TAO.pyx":39
- *     CONVERGED_FATOL       = TAO_CONVERGED_FATOL       # f(X)-f(X*) <= fatol
- *     CONVERGED_FRTOL       = TAO_CONVERGED_FRTOL       # |F(X)-f(X*)|/|f(X)| < frtol
- *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol             # <<<<<<<<<<<<<<
- *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
- *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONVERGED_GATOL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_GATOL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(48, 1, __pyx_L1_error);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __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_XDECREF(__pyx_t_8);
+  if (__pyx_m) {
+    if (__pyx_d) {
+      __Pyx_AddTraceback("init petsc4py.PETSc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    }
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init petsc4py.PETSc");
+  }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
+}
 
-  /* "PETSc/TAO.pyx":40
- *     CONVERGED_FRTOL       = TAO_CONVERGED_FRTOL       # |F(X)-f(X*)|/|f(X)| < frtol
- *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
- *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol             # <<<<<<<<<<<<<<
- *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
- *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONVERGED_GRTOL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_GRTOL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+static void __Pyx_CleanupGlobals(void) {
+  Py_CLEAR(__pyx_tuple_);
+  Py_CLEAR(__pyx_tuple__3);
+  Py_CLEAR(__pyx_tuple__4);
+  Py_CLEAR(__pyx_tuple__6);
+  Py_CLEAR(__pyx_tuple__7);
+  Py_CLEAR(__pyx_slice__8);
+  Py_CLEAR(__pyx_slice__9);
+  Py_CLEAR(__pyx_tuple__11);
+  Py_CLEAR(__pyx_tuple__12);
+  Py_CLEAR(__pyx_tuple__13);
+  Py_CLEAR(__pyx_tuple__14);
+  Py_CLEAR(__pyx_tuple__15);
+  Py_CLEAR(__pyx_tuple__16);
+  Py_CLEAR(__pyx_tuple__17);
+  Py_CLEAR(__pyx_tuple__18);
+  Py_CLEAR(__pyx_tuple__19);
+  Py_CLEAR(__pyx_tuple__20);
+  Py_CLEAR(__pyx_tuple__21);
+  Py_CLEAR(__pyx_tuple__22);
+  Py_CLEAR(__pyx_tuple__23);
+  Py_CLEAR(__pyx_tuple__24);
+  Py_CLEAR(__pyx_tuple__25);
+  Py_CLEAR(__pyx_tuple__26);
+  Py_CLEAR(__pyx_tuple__27);
+  Py_CLEAR(__pyx_tuple__28);
+  Py_CLEAR(__pyx_tuple__29);
+  Py_CLEAR(__pyx_tuple__30);
+  Py_CLEAR(__pyx_tuple__31);
+  Py_CLEAR(__pyx_tuple__33);
+  Py_CLEAR(__pyx_tuple__34);
+  Py_CLEAR(__pyx_tuple__35);
+  Py_CLEAR(__pyx_tuple__36);
+  Py_CLEAR(__pyx_tuple__37);
+  Py_CLEAR(__pyx_tuple__38);
+  Py_CLEAR(__pyx_tuple__39);
+  Py_CLEAR(__pyx_tuple__40);
+  Py_CLEAR(__pyx_tuple__41);
+  Py_CLEAR(__pyx_tuple__42);
+  Py_CLEAR(__pyx_tuple__43);
+  Py_CLEAR(__pyx_tuple__44);
+  Py_CLEAR(__pyx_tuple__45);
+  Py_CLEAR(__pyx_tuple__46);
+  Py_CLEAR(__pyx_tuple__47);
+  Py_CLEAR(__pyx_tuple__48);
+  Py_CLEAR(__pyx_tuple__49);
+  Py_CLEAR(__pyx_tuple__50);
+  Py_CLEAR(__pyx_tuple__51);
+  Py_CLEAR(__pyx_tuple__52);
+  Py_CLEAR(__pyx_tuple__53);
+  Py_CLEAR(__pyx_tuple__54);
+  Py_CLEAR(__pyx_slice__55);
+  Py_CLEAR(__pyx_tuple__56);
+  Py_CLEAR(__pyx_tuple__57);
+  Py_CLEAR(__pyx_tuple__58);
+  Py_CLEAR(__pyx_tuple__59);
+  Py_CLEAR(__pyx_tuple__60);
+  Py_CLEAR(__pyx_tuple__61);
+  Py_CLEAR(__pyx_tuple__62);
+  Py_CLEAR(__pyx_slice__63);
+  Py_CLEAR(__pyx_slice__64);
+  Py_CLEAR(__pyx_tuple__65);
+  Py_CLEAR(__pyx_tuple__66);
+  Py_CLEAR(__pyx_slice__67);
+  Py_CLEAR(__pyx_tuple__68);
+  Py_CLEAR(__pyx_codeobj__69);
+  Py_CLEAR(__pyx_tuple__70);
+  Py_CLEAR(__pyx_codeobj__71);
+  Py_CLEAR(__pyx_tuple__72);
+  Py_CLEAR(__pyx_codeobj__73);
+  Py_CLEAR(__pyx_tuple__74);
+  Py_CLEAR(__pyx_codeobj__75);
+  Py_CLEAR(__pyx_tuple__76);
+  Py_CLEAR(__pyx_codeobj__77);
+  Py_CLEAR(__pyx_codeobj__78);
+  /* 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);
+  }
 
-  /* "PETSc/TAO.pyx":41
- *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
- *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
- *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol             # <<<<<<<<<<<<<<
- *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
- *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONVERGED_GTTOL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_GTTOL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+Py_CLEAR(__pyx_umethod_PyDict_Type_keys.method);
+  Py_CLEAR(__pyx_umethod_PyList_Type_pop.method);
+}
+static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
+  /*--- Global cleanup code ---*/
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_tracebacklist);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_type_registry);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc___COMM_WORLD__);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc___COMM_SELF__);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc___COMM_NULL__);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_event_registry);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_class_registry);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_stage_registry);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_citations_registry);
+  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_PetscError);
+  __Pyx_CleanupGlobals();
+  /*--- Type import cleanup code ---*/
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_dtype);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_ndarray);
+  /*--- Builtin cleanup code ---*/
+  Py_CLEAR(__pyx_builtin_object);
+  Py_CLEAR(__pyx_builtin_RuntimeError);
+  Py_CLEAR(__pyx_builtin_ValueError);
+  Py_CLEAR(__pyx_builtin_TypeError);
+  Py_CLEAR(__pyx_builtin_KeyError);
+  Py_CLEAR(__pyx_builtin_SystemError);
+  Py_CLEAR(__pyx_builtin_Ellipsis);
+  Py_CLEAR(__pyx_builtin_NotImplementedError);
+  Py_CLEAR(__pyx_builtin_enumerate);
+  Py_CLEAR(__pyx_builtin_range);
+  Py_CLEAR(__pyx_builtin_NotImplemented);
+  Py_CLEAR(__pyx_builtin_AttributeError);
+  Py_CLEAR(__pyx_builtin_MemoryError);
+  /*--- Intern cleanup code ---*/
+  Py_CLEAR(__pyx_empty_tuple);
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_CLEAR(__pyx_b);
+  #endif
+  Py_CLEAR(__pyx_d);
+}
 
-  /* "PETSc/TAO.pyx":42
- *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
- *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
- *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size             # <<<<<<<<<<<<<<
- *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min
- *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONVERGED_STEPTOL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_STEPTOL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+/* --- 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
 
-  /* "PETSc/TAO.pyx":43
- *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
- *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
- *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min             # <<<<<<<<<<<<<<
- *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
- *     # diverged
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONVERGED_MINF); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_MINF, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+/* 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;
+}
 
-  /* "PETSc/TAO.pyx":44
- *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
- *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min
- *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined             # <<<<<<<<<<<<<<
- *     # diverged
- *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_CONVERGED_USER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_USER, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+/* 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);
+    }
+}
 
-  /* "PETSc/TAO.pyx":46
- *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
- *     # diverged
- *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #             # <<<<<<<<<<<<<<
- *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #
- *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_DIVERGED_MAXITS); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_MAXITS, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+/* 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
 
-  /* "PETSc/TAO.pyx":47
- *     # diverged
- *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #
- *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #             # <<<<<<<<<<<<<<
- *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
- *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_DIVERGED_NAN); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_NAN, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+/* 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
 
-  /* "PETSc/TAO.pyx":48
- *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #
- *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #
- *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #             # <<<<<<<<<<<<<<
- *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
- *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_DIVERGED_MAXFCN); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_MAXFCN, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+/* 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
 
-  /* "PETSc/TAO.pyx":49
- *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #
- *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
- *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #             # <<<<<<<<<<<<<<
- *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #
- *     DIVERGED_USER         = TAO_DIVERGED_USER         # user defined
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_DIVERGED_LS_FAILURE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_LS_FAILURE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+/* 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
 
-  /* "PETSc/TAO.pyx":50
- *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
- *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
- *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #             # <<<<<<<<<<<<<<
- *     DIVERGED_USER         = TAO_DIVERGED_USER         # user defined
- * 
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_DIVERGED_TR_REDUCTION); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_TR_REDUCTION, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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
 
-  /* "PETSc/TAO.pyx":51
- *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
- *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #
- *     DIVERGED_USER         = TAO_DIVERGED_USER         # user defined             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  __pyx_t_1 = PyInt_FromLong(TAO_DIVERGED_USER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_USER, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+/* 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
+}
 
-  /* "PETSc/TAO.pyx":28
- *     TEST     = S_(TAOTEST)
- * 
- * class TAOConvergedReason:             # <<<<<<<<<<<<<<
- *     """
- *     TAO Solver Termination Reasons
- */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_TAOConvergedReason, __pyx_empty_tuple, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TAOConvergedReason, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* BytesEquals */
+    static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+    return PyObject_RichCompareBool(s1, s2, equals);
+#else
+    if (s1 == s2) {
+        return (equals == Py_EQ);
+    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
+        const char *ps1, *ps2;
+        Py_ssize_t length = PyBytes_GET_SIZE(s1);
+        if (length != PyBytes_GET_SIZE(s2))
+            return (equals == Py_NE);
+        ps1 = PyBytes_AS_STRING(s1);
+        ps2 = PyBytes_AS_STRING(s2);
+        if (ps1[0] != ps2[0]) {
+            return (equals == Py_NE);
+        } else if (length == 1) {
+            return (equals == Py_EQ);
+        } else {
+            int result = memcmp(ps1, ps2, (size_t)length);
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
+        return (equals == Py_NE);
+    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
+        return (equals == Py_NE);
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
+    }
+#endif
+}
 
-  /* "PETSc/TAO.pyx":61
- *     """
- * 
- *     Type   = TAOType             # <<<<<<<<<<<<<<
- *     Reason = TAOConvergedReason
- * 
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TAOType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
+/* UnicodeEquals */
+    static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+    return PyObject_RichCompareBool(s1, s2, equals);
+#else
+#if PY_MAJOR_VERSION < 3
+    PyObject* owned_ref = NULL;
+#endif
+    int s1_is_unicode, s2_is_unicode;
+    if (s1 == s2) {
+        goto return_eq;
+    }
+    s1_is_unicode = PyUnicode_CheckExact(s1);
+    s2_is_unicode = PyUnicode_CheckExact(s2);
+#if PY_MAJOR_VERSION < 3
+    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
+        owned_ref = PyUnicode_FromObject(s2);
+        if (unlikely(!owned_ref))
+            return -1;
+        s2 = owned_ref;
+        s2_is_unicode = 1;
+    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
+        owned_ref = PyUnicode_FromObject(s1);
+        if (unlikely(!owned_ref))
+            return -1;
+        s1 = owned_ref;
+        s1_is_unicode = 1;
+    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
+        return __Pyx_PyBytes_Equals(s1, s2, equals);
+    }
+#endif
+    if (s1_is_unicode & s2_is_unicode) {
+        Py_ssize_t length;
+        int kind;
+        void *data1, *data2;
+        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
+            return -1;
+        length = __Pyx_PyUnicode_GET_LENGTH(s1);
+        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
+            goto return_ne;
+        }
+        kind = __Pyx_PyUnicode_KIND(s1);
+        if (kind != __Pyx_PyUnicode_KIND(s2)) {
+            goto return_ne;
+        }
+        data1 = __Pyx_PyUnicode_DATA(s1);
+        data2 = __Pyx_PyUnicode_DATA(s2);
+        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
+            goto return_ne;
+        } else if (length == 1) {
+            goto return_eq;
+        } else {
+            int result = memcmp(data1, data2, (size_t)(length * kind));
+            #if PY_MAJOR_VERSION < 3
+            Py_XDECREF(owned_ref);
+            #endif
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & s2_is_unicode) {
+        goto return_ne;
+    } else if ((s2 == Py_None) & s1_is_unicode) {
+        goto return_ne;
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
+    }
+return_eq:
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(owned_ref);
+    #endif
+    return (equals == Py_EQ);
+return_ne:
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(owned_ref);
+    #endif
+    return (equals == Py_NE);
+#endif
+}
 
-  /* "PETSc/TAO.pyx":62
- * 
- *     Type   = TAOType
- *     Reason = TAOConvergedReason             # <<<<<<<<<<<<<<
- * 
- *     def __cinit__(self):
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_TAOConvergedReason); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_Reason, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
+/* 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
 
-  /* "PETSc/TAO.pyx":390
- *         return (toReal(_fatol), toReal(_frtol))
- * 
- *     setFunctionTolerances = setObjectiveTolerances             # <<<<<<<<<<<<<<
- *     getFunctionTolerances = getObjectiveTolerances
- * 
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO, __pyx_n_s_setObjectiveTolerances); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_setFunctionTolerances, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
+/* 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;
+}
 
-  /* "PETSc/TAO.pyx":391
- * 
- *     setFunctionTolerances = setObjectiveTolerances
- *     getFunctionTolerances = getObjectiveTolerances             # <<<<<<<<<<<<<<
- * 
- *     def setGradientTolerances(self, gatol=None, grtol=None, gttol=None):
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO, __pyx_n_s_getObjectiveTolerances); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_getFunctionTolerances, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
+/* SwapException */
+        #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx__ExceptionSwap(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;
+    *type = tmp_type;
+    *value = tmp_value;
+    *tb = tmp_tb;
+}
+#else
+static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
+    PyErr_SetExcInfo(*type, *value, *tb);
+    *type = tmp_type;
+    *value = tmp_value;
+    *tb = tmp_tb;
+}
+#endif
 
-  /* "PETSc/TAO.pyx":527
- *         return toReal(fval)
- * 
- *     getFunctionValue = getObjectiveValue             # <<<<<<<<<<<<<<
- * 
- *     def getGradientNorm(self):
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO, __pyx_n_s_getObjectiveValue); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_getFunctionValue, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
+/* 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
 
-  /* "PETSc/TAO.pyx":670
- * # --------------------------------------------------------------------
- * 
- * del TAOType             # <<<<<<<<<<<<<<
- * del TAOConvergedReason
- * 
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TAOType) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* 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;
+}
 
-  /* "PETSc/TAO.pyx":671
- * 
- * del TAOType
- * del TAOConvergedReason             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TAOConvergedReason) < 0) {__pyx_filename = __pyx_f[38]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* pop_index */
+        static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix) {
+    PyObject *r;
+    if (unlikely(!py_ix)) return NULL;
+    r = __Pyx__PyObject_PopIndex(L, py_ix);
+    Py_DECREF(py_ix);
+    return r;
+}
+static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix) {
+    return __Pyx_PyObject_CallMethod1(L, __pyx_n_s_pop, py_ix);
+}
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix) {
+    Py_ssize_t size = PyList_GET_SIZE(L);
+    if (likely(size > (((PyListObject*)L)->allocated >> 1))) {
+        Py_ssize_t cix = ix;
+        if (cix < 0) {
+            cix += size;
+        }
+        if (likely(0 <= cix && cix < size)) {
+            PyObject* v = PyList_GET_ITEM(L, cix);
+            Py_SIZE(L) -= 1;
+            size -= 1;
+            memmove(&PyList_GET_ITEM(L, cix), &PyList_GET_ITEM(L, cix+1), (size_t)(size-cix)*sizeof(PyObject*));
+            return v;
+        }
+    }
+    if (py_ix == Py_None) {
+        return __Pyx__PyObject_PopNewIndex(L, PyInt_FromSsize_t(ix));
+    } else {
+        return __Pyx__PyObject_PopIndex(L, py_ix);
+    }
+}
+#endif
 
-  /* "PETSc/AO.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class AOType(object):             # <<<<<<<<<<<<<<
- *     BASIC          = S_(AOBASIC)
- *     ADVANCED       = S_(AOADVANCED)
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_AOType, __pyx_n_s_AOType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+/* SliceObject */
+        static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj,
+        Py_ssize_t cstart, Py_ssize_t cstop,
+        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
+        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyMappingMethods* mp;
+#if PY_MAJOR_VERSION < 3
+    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
+    if (likely(ms && ms->sq_slice)) {
+        if (!has_cstart) {
+            if (_py_start && (*_py_start != Py_None)) {
+                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
+                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
+            } else
+                cstart = 0;
+        }
+        if (!has_cstop) {
+            if (_py_stop && (*_py_stop != Py_None)) {
+                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
+                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
+            } else
+                cstop = PY_SSIZE_T_MAX;
+        }
+        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
+            Py_ssize_t l = ms->sq_length(obj);
+            if (likely(l >= 0)) {
+                if (cstop < 0) {
+                    cstop += l;
+                    if (cstop < 0) cstop = 0;
+                }
+                if (cstart < 0) {
+                    cstart += l;
+                    if (cstart < 0) cstart = 0;
+                }
+            } else {
+                if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+                    goto bad;
+                PyErr_Clear();
+            }
+        }
+        return ms->sq_slice(obj, cstart, cstop);
+    }
+#endif
+    mp = Py_TYPE(obj)->tp_as_mapping;
+    if (likely(mp && mp->mp_subscript))
+#endif
+    {
+        PyObject* result;
+        PyObject *py_slice, *py_start, *py_stop;
+        if (_py_slice) {
+            py_slice = *_py_slice;
+        } else {
+            PyObject* owned_start = NULL;
+            PyObject* owned_stop = NULL;
+            if (_py_start) {
+                py_start = *_py_start;
+            } else {
+                if (has_cstart) {
+                    owned_start = py_start = PyInt_FromSsize_t(cstart);
+                    if (unlikely(!py_start)) goto bad;
+                } else
+                    py_start = Py_None;
+            }
+            if (_py_stop) {
+                py_stop = *_py_stop;
+            } else {
+                if (has_cstop) {
+                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
+                    if (unlikely(!py_stop)) {
+                        Py_XDECREF(owned_start);
+                        goto bad;
+                    }
+                } else
+                    py_stop = Py_None;
+            }
+            py_slice = PySlice_New(py_start, py_stop, Py_None);
+            Py_XDECREF(owned_start);
+            Py_XDECREF(owned_stop);
+            if (unlikely(!py_slice)) goto bad;
+        }
+#if CYTHON_COMPILING_IN_CPYTHON
+        result = mp->mp_subscript(obj, py_slice);
+#else
+        result = PyObject_GetItem(obj, py_slice);
+#endif
+        if (!_py_slice) {
+            Py_DECREF(py_slice);
+        }
+        return result;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name);
+bad:
+    return NULL;
+}
 
-  /* "PETSc/AO.pyx":4
- * 
- * class AOType(object):
- *     BASIC          = S_(AOBASIC)             # <<<<<<<<<<<<<<
- *     ADVANCED       = S_(AOADVANCED)
- *     MAPPING        = S_(AOMAPPING)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(AOBASIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BASIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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));
+}
 
-  /* "PETSc/AO.pyx":5
- * class AOType(object):
- *     BASIC          = S_(AOBASIC)
- *     ADVANCED       = S_(AOADVANCED)             # <<<<<<<<<<<<<<
- *     MAPPING        = S_(AOMAPPING)
- *     MEMORYSCALABLE = S_(AOMEMORYSCALABLE)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(AOADVANCED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADVANCED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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;
+}
 
-  /* "PETSc/AO.pyx":6
- *     BASIC          = S_(AOBASIC)
- *     ADVANCED       = S_(AOADVANCED)
- *     MAPPING        = S_(AOMAPPING)             # <<<<<<<<<<<<<<
- *     MEMORYSCALABLE = S_(AOMEMORYSCALABLE)
- * 
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(AOMAPPING); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAPPING, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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;
+}
 
-  /* "PETSc/AO.pyx":7
- *     ADVANCED       = S_(AOADVANCED)
- *     MAPPING        = S_(AOMAPPING)
- *     MEMORYSCALABLE = S_(AOMEMORYSCALABLE)             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(AOMEMORYSCALABLE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MEMORYSCALABLE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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;
+}
 
-  /* "PETSc/AO.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class AOType(object):             # <<<<<<<<<<<<<<
- *     BASIC          = S_(AOBASIC)
- *     ADVANCED       = S_(AOADVANCED)
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_AOType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_AOType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* 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);
+}
 
-  /* "PETSc/AO.pyx":13
- * cdef class AO(Object):
- * 
- *     Type = AOType             # <<<<<<<<<<<<<<
- * 
- *     def __cinit__(self):
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_AOType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_AO->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_AO);
+/* 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");
+}
 
-  /* "PETSc/AO.pyx":117
- * # --------------------------------------------------------------------
- * 
- * del AOType             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_AOType) < 0) {__pyx_filename = __pyx_f[39]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* 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
+}
 
-  /* "PETSc/DM.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class DMType(object):             # <<<<<<<<<<<<<<
- *     DA        = S_(DMDA_type)
- *     COMPOSITE = S_(DMCOMPOSITE)
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMType, __pyx_n_s_DMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+/* 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;
+}
 
-  /* "PETSc/DM.pyx":4
- * 
- * class DMType(object):
- *     DA        = S_(DMDA_type)             # <<<<<<<<<<<<<<
- *     COMPOSITE = S_(DMCOMPOSITE)
- *     SLICED    = S_(DMSLICED)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMDA); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DA, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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
 
-  /* "PETSc/DM.pyx":5
- * class DMType(object):
- *     DA        = S_(DMDA_type)
- *     COMPOSITE = S_(DMCOMPOSITE)             # <<<<<<<<<<<<<<
- *     SLICED    = S_(DMSLICED)
- *     SHELL     = S_(DMSHELL)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMCOMPOSITE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSITE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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;
+}
 
-  /* "PETSc/DM.pyx":6
- *     DA        = S_(DMDA_type)
- *     COMPOSITE = S_(DMCOMPOSITE)
- *     SLICED    = S_(DMSLICED)             # <<<<<<<<<<<<<<
- *     SHELL     = S_(DMSHELL)
- *     PLEX      = S_(DMPLEX)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMSLICED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SLICED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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);
+}
 
-  /* "PETSc/DM.pyx":7
- *     COMPOSITE = S_(DMCOMPOSITE)
- *     SLICED    = S_(DMSLICED)
- *     SHELL     = S_(DMSHELL)             # <<<<<<<<<<<<<<
- *     PLEX      = S_(DMPLEX)
- *     CARTESIAN = S_(DMCARTESIAN)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMSHELL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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;
+}
 
-  /* "PETSc/DM.pyx":8
- *     SLICED    = S_(DMSLICED)
- *     SHELL     = S_(DMSHELL)
- *     PLEX      = S_(DMPLEX)             # <<<<<<<<<<<<<<
- *     CARTESIAN = S_(DMCARTESIAN)
- *     REDUNDANT = S_(DMREDUNDANT)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMPLEX); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PLEX, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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;
+}
 
-  /* "PETSc/DM.pyx":9
- *     SHELL     = S_(DMSHELL)
- *     PLEX      = S_(DMPLEX)
- *     CARTESIAN = S_(DMCARTESIAN)             # <<<<<<<<<<<<<<
- *     REDUNDANT = S_(DMREDUNDANT)
- *     PATCH     = S_(DMPATCH)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMCARTESIAN); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CARTESIAN, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* UnpackUnboundCMethod */
+        static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
+    PyObject *method;
+    method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
+    if (unlikely(!method))
+        return -1;
+    target->method = method;
+#if CYTHON_COMPILING_IN_CPYTHON
+    #if PY_MAJOR_VERSION >= 3
+    if (likely(PyObject_TypeCheck(method, &PyMethodDescr_Type)))
+    #endif
+    {
+        PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
+        target->func = descr->d_method->ml_meth;
+        target->flag = descr->d_method->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_O | METH_NOARGS);
+    }
+#endif
+    return 0;
+}
 
-  /* "PETSc/DM.pyx":10
- *     PLEX      = S_(DMPLEX)
- *     CARTESIAN = S_(DMCARTESIAN)
- *     REDUNDANT = S_(DMREDUNDANT)             # <<<<<<<<<<<<<<
- *     PATCH     = S_(DMPATCH)
- *     MOAB      = S_(DMMOAB)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMREDUNDANT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REDUNDANT, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CallUnboundCMethod0 */
+        static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
+    PyObject *args, *result = NULL;
+    if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
+#if CYTHON_COMPILING_IN_CPYTHON
+    args = PyTuple_New(1);
+    if (unlikely(!args)) goto bad;
+    Py_INCREF(self);
+    PyTuple_SET_ITEM(args, 0, self);
+#else
+    args = PyTuple_Pack(1, self);
+    if (unlikely(!args)) goto bad;
+#endif
+    result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
+    Py_DECREF(args);
+bad:
+    return result;
+}
 
-  /* "PETSc/DM.pyx":11
- *     CARTESIAN = S_(DMCARTESIAN)
- *     REDUNDANT = S_(DMREDUNDANT)
- *     PATCH     = S_(DMPATCH)             # <<<<<<<<<<<<<<
- *     MOAB      = S_(DMMOAB)
- *     NETWORK   = S_(DMNETWORK)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMPATCH); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PATCH, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* py_dict_keys */
+        static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d) {
+    if (PY_MAJOR_VERSION >= 3)
+        return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_keys, d);
+    else
+        return PyDict_Keys(d);
+}
 
-  /* "PETSc/DM.pyx":12
- *     REDUNDANT = S_(DMREDUNDANT)
- *     PATCH     = S_(DMPATCH)
- *     MOAB      = S_(DMMOAB)             # <<<<<<<<<<<<<<
- *     NETWORK   = S_(DMNETWORK)
- * 
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMMOAB); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MOAB, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* PyIntBinop */
+        #if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
+    if (op1 == op2) {
+        Py_RETURN_TRUE;
+    }
+    #if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_CheckExact(op1))) {
+        const long b = intval;
+        long a = PyInt_AS_LONG(op1);
+        if (a == b) {
+            Py_RETURN_TRUE;
+        } else {
+            Py_RETURN_FALSE;
+        }
+    }
+    #endif
+    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    if (likely(PyLong_CheckExact(op1))) {
+        const long b = intval;
+        long a;
+        const digit* digits = ((PyLongObject*)op1)->ob_digit;
+        const Py_ssize_t size = Py_SIZE(op1);
+        if (likely(__Pyx_sst_abs(size) <= 1)) {
+            a = likely(size) ? digits[0] : 0;
+            if (size == -1) a = -a;
+        } else {
+            switch (size) {
+                case -2:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    }
+                case 2:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    }
+                case -3:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    }
+                case 3:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    }
+                case -4:
+                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                        a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    }
+                case 4:
+                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                        a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    }
+                #if PyLong_SHIFT < 30 && PyLong_SHIFT != 15
+                default: return PyLong_Type.tp_richcompare(op1, op2, Py_EQ);
+                #else
+                default: Py_RETURN_FALSE;
+                #endif
+            }
+        }
+            if (a == b) {
+                Py_RETURN_TRUE;
+            } else {
+                Py_RETURN_FALSE;
+            }
+    }
+    #endif
+    if (PyFloat_CheckExact(op1)) {
+        const long b = intval;
+        double a = PyFloat_AS_DOUBLE(op1);
+            if ((double)a == (double)b) {
+                Py_RETURN_TRUE;
+            } else {
+                Py_RETURN_FALSE;
+            }
+    }
+    return PyObject_RichCompare(op1, op2, Py_EQ);
+}
+#endif
 
-  /* "PETSc/DM.pyx":13
- *     PATCH     = S_(DMPATCH)
- *     MOAB      = S_(DMMOAB)
- *     NETWORK   = S_(DMNETWORK)             # <<<<<<<<<<<<<<
- * 
- * class DMBoundaryType(object):
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(DMNETWORK); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NETWORK, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* SetItemInt */
+        static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
+    int r;
+    if (!j) return -1;
+    r = PyObject_SetItem(o, j, v);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, 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) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
+        if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
+            PyObject* old = PyList_GET_ITEM(o, n);
+            Py_INCREF(v);
+            PyList_SET_ITEM(o, n, v);
+            Py_DECREF(old);
+            return 1;
+        }
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_ass_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 -1;
+                    PyErr_Clear();
+                }
+            }
+            return m->sq_ass_item(o, i, v);
+        }
+    }
+#else
+#if CYTHON_COMPILING_IN_PYPY
+    if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) {
+#else
+    if (is_list || PySequence_Check(o)) {
+#endif
+        return PySequence_SetItem(o, i, v);
+    }
+#endif
+    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
+}
 
-  /* "PETSc/DM.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class DMType(object):             # <<<<<<<<<<<<<<
- *     DA        = S_(DMDA_type)
- *     COMPOSITE = S_(DMCOMPOSITE)
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* PyIntBinop */
+          #if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
+    #if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_CheckExact(op1))) {
+        const long b = intval;
+        long x;
+        long a = PyInt_AS_LONG(op1);
+            x = (long)((unsigned long)a + b);
+            if (likely((x^a) >= 0 || (x^b) >= 0))
+                return PyInt_FromLong(x);
+            return PyLong_Type.tp_as_number->nb_add(op1, op2);
+    }
+    #endif
+    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    if (likely(PyLong_CheckExact(op1))) {
+        const long b = intval;
+        long a, x;
+        const PY_LONG_LONG llb = intval;
+        PY_LONG_LONG lla, llx;
+        const digit* digits = ((PyLongObject*)op1)->ob_digit;
+        const Py_ssize_t size = Py_SIZE(op1);
+        if (likely(__Pyx_sst_abs(size) <= 1)) {
+            a = likely(size) ? digits[0] : 0;
+            if (size == -1) a = -a;
+        } else {
+            switch (size) {
+                case -2:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+                        lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+                    }
+                case 2:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+                        lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+                    }
+                case -3:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+                        lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+                    }
+                case 3:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+                        lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+                    }
+                case -4:
+                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                        a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
+                        lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+                    }
+                case 4:
+                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                        a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
+                        lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+                    }
+                default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
+            }
+        }
+                x = a + b;
+            return PyLong_FromLong(x);
+        long_long:
+                llx = lla + llb;
+            return PyLong_FromLongLong(llx);
+    }
+    #endif
+    if (PyFloat_CheckExact(op1)) {
+        const long b = intval;
+        double a = PyFloat_AS_DOUBLE(op1);
+            double result;
+            PyFPE_START_PROTECT("add", return NULL)
+            result = ((double)a) + (double)b;
+            PyFPE_END_PROTECT(result)
+            return PyFloat_FromDouble(result);
+    }
+    return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
+}
+#endif
 
-  /* "PETSc/DM.pyx":15
- *     NETWORK   = S_(DMNETWORK)
- * 
- * class DMBoundaryType(object):             # <<<<<<<<<<<<<<
- *     NONE     = DM_BOUNDARY_NONE
- *     GHOSTED  = DM_BOUNDARY_GHOSTED
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMBoundaryType, __pyx_n_s_DMBoundaryType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+/* StringJoin */
+          #if !CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values) {
+    return PyObject_CallMethodObjArgs(sep, __pyx_n_s_join, values, NULL);
+}
+#endif
 
-  /* "PETSc/DM.pyx":16
- * 
- * class DMBoundaryType(object):
- *     NONE     = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
- *     GHOSTED  = DM_BOUNDARY_GHOSTED
- *     MIRROR   = DM_BOUNDARY_MIRROR
- */
-  __pyx_t_8 = PyInt_FromLong(DM_BOUNDARY_NONE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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;
+}
 
-  /* "PETSc/DM.pyx":17
- * class DMBoundaryType(object):
- *     NONE     = DM_BOUNDARY_NONE
- *     GHOSTED  = DM_BOUNDARY_GHOSTED             # <<<<<<<<<<<<<<
- *     MIRROR   = DM_BOUNDARY_MIRROR
- *     PERIODIC = DM_BOUNDARY_PERIODIC
- */
-  __pyx_t_8 = PyInt_FromLong(DM_BOUNDARY_GHOSTED); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHOSTED, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* dict_getitem_default */
+          static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) {
+    PyObject* value;
+#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
+    value = PyDict_GetItemWithError(d, key);
+    if (unlikely(!value)) {
+        if (unlikely(PyErr_Occurred()))
+            return NULL;
+        value = default_value;
+    }
+    Py_INCREF(value);
+#else
+    if (PyString_CheckExact(key) || PyUnicode_CheckExact(key) || PyInt_CheckExact(key)) {
+        value = PyDict_GetItem(d, key);
+        if (unlikely(!value)) {
+            value = default_value;
+        }
+        Py_INCREF(value);
+    } else {
+        if (default_value == Py_None)
+            default_value = NULL;
+        value = PyObject_CallMethodObjArgs(
+            d, __pyx_n_s_get, key, default_value, NULL);
+    }
+#endif
+    return value;
+}
 
-  /* "PETSc/DM.pyx":18
- *     NONE     = DM_BOUNDARY_NONE
- *     GHOSTED  = DM_BOUNDARY_GHOSTED
- *     MIRROR   = DM_BOUNDARY_MIRROR             # <<<<<<<<<<<<<<
- *     PERIODIC = DM_BOUNDARY_PERIODIC
- *     TWIST    = DM_BOUNDARY_TWIST
- */
-  __pyx_t_8 = PyInt_FromLong(DM_BOUNDARY_MIRROR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MIRROR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* PyObjectCallMethod0 */
+          static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
+    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 *function = PyMethod_GET_FUNCTION(method);
+            result = __Pyx_PyObject_CallOneArg(function, self);
+            Py_DECREF(method);
+            return result;
+        }
+    }
+#endif
+    result = __Pyx_PyObject_CallNoArg(method);
+    Py_DECREF(method);
+bad:
+    return result;
+}
 
-  /* "PETSc/DM.pyx":19
- *     GHOSTED  = DM_BOUNDARY_GHOSTED
- *     MIRROR   = DM_BOUNDARY_MIRROR
- *     PERIODIC = DM_BOUNDARY_PERIODIC             # <<<<<<<<<<<<<<
- *     TWIST    = DM_BOUNDARY_TWIST
- * 
- */
-  __pyx_t_8 = PyInt_FromLong(DM_BOUNDARY_PERIODIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PERIODIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* pop */
+          static CYTHON_INLINE PyObject* __Pyx__PyObject_Pop(PyObject* L) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (Py_TYPE(L) == &PySet_Type) {
+        return PySet_Pop(L);
+    }
+#endif
+    return __Pyx_PyObject_CallMethod0(L, __pyx_n_s_pop);
+}
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyList_Pop(PyObject* L) {
+    if (likely(PyList_GET_SIZE(L) > (((PyListObject*)L)->allocated >> 1))) {
+        Py_SIZE(L) -= 1;
+        return PyList_GET_ITEM(L, PyList_GET_SIZE(L));
+    }
+    return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyList_Type_pop, L);
+}
+#endif
 
-  /* "PETSc/DM.pyx":20
- *     MIRROR   = DM_BOUNDARY_MIRROR
- *     PERIODIC = DM_BOUNDARY_PERIODIC
- *     TWIST    = DM_BOUNDARY_TWIST             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  __pyx_t_8 = PyInt_FromLong(DM_BOUNDARY_TWIST); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TWIST, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* SliceObject */
+          static CYTHON_INLINE int __Pyx_PyObject_SetSlice(PyObject* obj, PyObject* value,
+        Py_ssize_t cstart, Py_ssize_t cstop,
+        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
+        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyMappingMethods* mp;
+#if PY_MAJOR_VERSION < 3
+    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
+    if (likely(ms && ms->sq_ass_slice)) {
+        if (!has_cstart) {
+            if (_py_start && (*_py_start != Py_None)) {
+                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
+                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
+            } else
+                cstart = 0;
+        }
+        if (!has_cstop) {
+            if (_py_stop && (*_py_stop != Py_None)) {
+                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
+                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
+            } else
+                cstop = PY_SSIZE_T_MAX;
+        }
+        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
+            Py_ssize_t l = ms->sq_length(obj);
+            if (likely(l >= 0)) {
+                if (cstop < 0) {
+                    cstop += l;
+                    if (cstop < 0) cstop = 0;
+                }
+                if (cstart < 0) {
+                    cstart += l;
+                    if (cstart < 0) cstart = 0;
+                }
+            } else {
+                if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+                    goto bad;
+                PyErr_Clear();
+            }
+        }
+        return ms->sq_ass_slice(obj, cstart, cstop, value);
+    }
+#endif
+    mp = Py_TYPE(obj)->tp_as_mapping;
+    if (likely(mp && mp->mp_ass_subscript))
+#endif
+    {
+        int result;
+        PyObject *py_slice, *py_start, *py_stop;
+        if (_py_slice) {
+            py_slice = *_py_slice;
+        } else {
+            PyObject* owned_start = NULL;
+            PyObject* owned_stop = NULL;
+            if (_py_start) {
+                py_start = *_py_start;
+            } else {
+                if (has_cstart) {
+                    owned_start = py_start = PyInt_FromSsize_t(cstart);
+                    if (unlikely(!py_start)) goto bad;
+                } else
+                    py_start = Py_None;
+            }
+            if (_py_stop) {
+                py_stop = *_py_stop;
+            } else {
+                if (has_cstop) {
+                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
+                    if (unlikely(!py_stop)) {
+                        Py_XDECREF(owned_start);
+                        goto bad;
+                    }
+                } else
+                    py_stop = Py_None;
+            }
+            py_slice = PySlice_New(py_start, py_stop, Py_None);
+            Py_XDECREF(owned_start);
+            Py_XDECREF(owned_stop);
+            if (unlikely(!py_slice)) goto bad;
+        }
+#if CYTHON_COMPILING_IN_CPYTHON
+        result = mp->mp_ass_subscript(obj, py_slice, value);
+#else
+        result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice);
+#endif
+        if (!_py_slice) {
+            Py_DECREF(py_slice);
+        }
+        return result;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "'%.200s' object does not support slice %.10s",
+        Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion");
+bad:
+    return -1;
+}
 
-  /* "PETSc/DM.pyx":15
- *     NETWORK   = S_(DMNETWORK)
- * 
- * class DMBoundaryType(object):             # <<<<<<<<<<<<<<
- *     NONE     = DM_BOUNDARY_NONE
- *     GHOSTED  = DM_BOUNDARY_GHOSTED
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMBoundaryType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMBoundaryType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* SliceTupleAndList */
+          #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) {
+    Py_ssize_t start = *_start, stop = *_stop, length = *_length;
+    if (start < 0) {
+        start += length;
+        if (start < 0)
+            start = 0;
+    }
+    if (stop < 0)
+        stop += length;
+    else if (stop > length)
+        stop = length;
+    *_length = stop - start;
+    *_start = start;
+    *_stop = stop;
+}
+static CYTHON_INLINE void __Pyx_copy_object_array(PyObject** CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
+    PyObject *v;
+    Py_ssize_t i;
+    for (i = 0; i < length; i++) {
+        v = dest[i] = src[i];
+        Py_INCREF(v);
+    }
+}
+static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(
+            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
+    PyObject* dest;
+    Py_ssize_t length = PyList_GET_SIZE(src);
+    __Pyx_crop_slice(&start, &stop, &length);
+    if (unlikely(length <= 0))
+        return PyList_New(0);
+    dest = PyList_New(length);
+    if (unlikely(!dest))
+        return NULL;
+    __Pyx_copy_object_array(
+        ((PyListObject*)src)->ob_item + start,
+        ((PyListObject*)dest)->ob_item,
+        length);
+    return dest;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
+            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
+    PyObject* dest;
+    Py_ssize_t length = PyTuple_GET_SIZE(src);
+    __Pyx_crop_slice(&start, &stop, &length);
+    if (unlikely(length <= 0))
+        return PyTuple_New(0);
+    dest = PyTuple_New(length);
+    if (unlikely(!dest))
+        return NULL;
+    __Pyx_copy_object_array(
+        ((PyTupleObject*)src)->ob_item + start,
+        ((PyTupleObject*)dest)->ob_item,
+        length);
+    return dest;
+}
+#endif
 
-  /* "PETSc/DM.pyx":26
- * cdef class DM(Object):
- * 
- *     Type         = DMType             # <<<<<<<<<<<<<<
- *     BoundaryType = DMBoundaryType
- * 
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
+/* 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;
+}
 
-  /* "PETSc/DM.pyx":27
- * 
- *     Type         = DMType
- *     BoundaryType = DMBoundaryType             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMBoundaryType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_BoundaryType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
+/* 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;
+}
 
-  /* "PETSc/DM.pyx":295
- * 
- *     # backward compatibility
- *     createGlobalVector = createGlobalVec             # <<<<<<<<<<<<<<
- *     createLocalVector = createLocalVec
- *     getMatrix = createMatrix = createMat
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createGlobalVec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createGlobalVector, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
+/* 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;
+}
 
-  /* "PETSc/DM.pyx":296
- *     # backward compatibility
- *     createGlobalVector = createGlobalVec
- *     createLocalVector = createLocalVec             # <<<<<<<<<<<<<<
- *     getMatrix = createMatrix = createMat
- * 
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createLocalVec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createLocalVector, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
+/* 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;
+}
 
-  /* "PETSc/DM.pyx":297
- *     createGlobalVector = createGlobalVec
- *     createLocalVector = createLocalVec
- *     getMatrix = createMatrix = createMat             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createMat); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_getMatrix, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createMatrix, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* FetchCommonType */
+            static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
+    PyObject* fake_module;
+    PyTypeObject* cached_type = NULL;
+    fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
+    if (!fake_module) return NULL;
+    Py_INCREF(fake_module);
+    cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
+    if (cached_type) {
+        if (!PyType_Check((PyObject*)cached_type)) {
+            PyErr_Format(PyExc_TypeError,
+                "Shared Cython type %.200s is not a type object",
+                type->tp_name);
+            goto bad;
+        }
+        if (cached_type->tp_basicsize != type->tp_basicsize) {
+            PyErr_Format(PyExc_TypeError,
+                "Shared Cython type %.200s has the wrong size, try recompiling",
+                type->tp_name);
+            goto bad;
+        }
+    } else {
+        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
+        PyErr_Clear();
+        if (PyType_Ready(type) < 0) goto bad;
+        if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
+            goto bad;
+        Py_INCREF(type);
+        cached_type = type;
+    }
+done:
+    Py_DECREF(fake_module);
+    return cached_type;
+bad:
+    Py_XDECREF(cached_type);
+    cached_type = NULL;
+    goto done;
+}
 
-  /* "PETSc/DM.pyx":301
- * # --------------------------------------------------------------------
- * 
- * del DMType             # <<<<<<<<<<<<<<
- * del DMBoundaryType
- * 
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMType) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* CythonFunction */
+            static PyObject *
+__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
+{
+    if (unlikely(op->func_doc == NULL)) {
+        if (op->func.m_ml->ml_doc) {
+#if PY_MAJOR_VERSION >= 3
+            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
+#else
+            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
+#endif
+            if (unlikely(op->func_doc == NULL))
+                return NULL;
+        } else {
+            Py_INCREF(Py_None);
+            return Py_None;
+        }
+    }
+    Py_INCREF(op->func_doc);
+    return op->func_doc;
+}
+static int
+__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value)
+{
+    PyObject *tmp = op->func_doc;
+    if (value == NULL) {
+        value = Py_None;
+    }
+    Py_INCREF(value);
+    op->func_doc = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op)
+{
+    if (unlikely(op->func_name == NULL)) {
+#if PY_MAJOR_VERSION >= 3
+        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
+#else
+        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
+#endif
+        if (unlikely(op->func_name == NULL))
+            return NULL;
+    }
+    Py_INCREF(op->func_name);
+    return op->func_name;
+}
+static int
+__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value)
+{
+    PyObject *tmp;
+#if PY_MAJOR_VERSION >= 3
+    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
+#else
+    if (unlikely(value == NULL || !PyString_Check(value))) {
+#endif
+        PyErr_SetString(PyExc_TypeError,
+                        "__name__ must be set to a string object");
+        return -1;
+    }
+    tmp = op->func_name;
+    Py_INCREF(value);
+    op->func_name = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op)
+{
+    Py_INCREF(op->func_qualname);
+    return op->func_qualname;
+}
+static int
+__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value)
+{
+    PyObject *tmp;
+#if PY_MAJOR_VERSION >= 3
+    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
+#else
+    if (unlikely(value == NULL || !PyString_Check(value))) {
+#endif
+        PyErr_SetString(PyExc_TypeError,
+                        "__qualname__ must be set to a string object");
+        return -1;
+    }
+    tmp = op->func_qualname;
+    Py_INCREF(value);
+    op->func_qualname = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
+{
+    PyObject *self;
+    self = m->func_closure;
+    if (self == NULL)
+        self = Py_None;
+    Py_INCREF(self);
+    return self;
+}
+static PyObject *
+__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op)
+{
+    if (unlikely(op->func_dict == NULL)) {
+        op->func_dict = PyDict_New();
+        if (unlikely(op->func_dict == NULL))
+            return NULL;
+    }
+    Py_INCREF(op->func_dict);
+    return op->func_dict;
+}
+static int
+__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value)
+{
+    PyObject *tmp;
+    if (unlikely(value == NULL)) {
+        PyErr_SetString(PyExc_TypeError,
+               "function's dictionary may not be deleted");
+        return -1;
+    }
+    if (unlikely(!PyDict_Check(value))) {
+        PyErr_SetString(PyExc_TypeError,
+               "setting function's dictionary to a non-dict");
+        return -1;
+    }
+    tmp = op->func_dict;
+    Py_INCREF(value);
+    op->func_dict = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op)
+{
+    Py_INCREF(op->func_globals);
+    return op->func_globals;
+}
+static PyObject *
+__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op)
+{
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+static PyObject *
+__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op)
+{
+    PyObject* result = (op->func_code) ? op->func_code : Py_None;
+    Py_INCREF(result);
+    return result;
+}
+static int
+__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
+    int result = 0;
+    PyObject *res = op->defaults_getter((PyObject *) op);
+    if (unlikely(!res))
+        return -1;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
+    Py_INCREF(op->defaults_tuple);
+    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
+    Py_INCREF(op->defaults_kwdict);
+    #else
+    op->defaults_tuple = PySequence_ITEM(res, 0);
+    if (unlikely(!op->defaults_tuple)) result = -1;
+    else {
+        op->defaults_kwdict = PySequence_ITEM(res, 1);
+        if (unlikely(!op->defaults_kwdict)) result = -1;
+    }
+    #endif
+    Py_DECREF(res);
+    return result;
+}
+static int
+__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) {
+    PyObject* tmp;
+    if (!value) {
+        value = Py_None;
+    } else if (value != Py_None && !PyTuple_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "__defaults__ must be set to a tuple object");
+        return -1;
+    }
+    Py_INCREF(value);
+    tmp = op->defaults_tuple;
+    op->defaults_tuple = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) {
+    PyObject* result = op->defaults_tuple;
+    if (unlikely(!result)) {
+        if (op->defaults_getter) {
+            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
+            result = op->defaults_tuple;
+        } else {
+            result = Py_None;
+        }
+    }
+    Py_INCREF(result);
+    return result;
+}
+static int
+__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) {
+    PyObject* tmp;
+    if (!value) {
+        value = Py_None;
+    } else if (value != Py_None && !PyDict_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "__kwdefaults__ must be set to a dict object");
+        return -1;
+    }
+    Py_INCREF(value);
+    tmp = op->defaults_kwdict;
+    op->defaults_kwdict = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) {
+    PyObject* result = op->defaults_kwdict;
+    if (unlikely(!result)) {
+        if (op->defaults_getter) {
+            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
+            result = op->defaults_kwdict;
+        } else {
+            result = Py_None;
+        }
+    }
+    Py_INCREF(result);
+    return result;
+}
+static int
+__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) {
+    PyObject* tmp;
+    if (!value || value == Py_None) {
+        value = NULL;
+    } else if (!PyDict_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "__annotations__ must be set to a dict object");
+        return -1;
+    }
+    Py_XINCREF(value);
+    tmp = op->func_annotations;
+    op->func_annotations = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) {
+    PyObject* result = op->func_annotations;
+    if (unlikely(!result)) {
+        result = PyDict_New();
+        if (unlikely(!result)) return NULL;
+        op->func_annotations = result;
+    }
+    Py_INCREF(result);
+    return result;
+}
+static PyGetSetDef __pyx_CyFunction_getsets[] = {
+    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
+    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
+    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
+    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
+    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
+    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
+    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
+    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
+    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
+    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
+    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
+    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
+    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
+    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
+    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
+    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
+    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
+    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
+    {0, 0, 0, 0, 0}
+};
+static PyMemberDef __pyx_CyFunction_members[] = {
+    {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0},
+    {0, 0, 0,  0, 0}
+};
+static PyObject *
+__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
+{
+#if PY_MAJOR_VERSION >= 3
+    return PyUnicode_FromString(m->func.m_ml->ml_name);
+#else
+    return PyString_FromString(m->func.m_ml->ml_name);
+#endif
+}
+static PyMethodDef __pyx_CyFunction_methods[] = {
+    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
+    {0, 0, 0, 0}
+};
+#if PY_VERSION_HEX < 0x030500A0
+#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
+#else
+#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist)
+#endif
+static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
+                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
+    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
+    if (op == NULL)
+        return NULL;
+    op->flags = flags;
+    __Pyx_CyFunction_weakreflist(op) = NULL;
+    op->func.m_ml = ml;
+    op->func.m_self = (PyObject *) op;
+    Py_XINCREF(closure);
+    op->func_closure = closure;
+    Py_XINCREF(module);
+    op->func.m_module = module;
+    op->func_dict = NULL;
+    op->func_name = NULL;
+    Py_INCREF(qualname);
+    op->func_qualname = qualname;
+    op->func_doc = NULL;
+    op->func_classobj = NULL;
+    op->func_globals = globals;
+    Py_INCREF(op->func_globals);
+    Py_XINCREF(code);
+    op->func_code = code;
+    op->defaults_pyobjects = 0;
+    op->defaults = NULL;
+    op->defaults_tuple = NULL;
+    op->defaults_kwdict = NULL;
+    op->defaults_getter = NULL;
+    op->func_annotations = NULL;
+    PyObject_GC_Track(op);
+    return (PyObject *) op;
+}
+static int
+__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
+{
+    Py_CLEAR(m->func_closure);
+    Py_CLEAR(m->func.m_module);
+    Py_CLEAR(m->func_dict);
+    Py_CLEAR(m->func_name);
+    Py_CLEAR(m->func_qualname);
+    Py_CLEAR(m->func_doc);
+    Py_CLEAR(m->func_globals);
+    Py_CLEAR(m->func_code);
+    Py_CLEAR(m->func_classobj);
+    Py_CLEAR(m->defaults_tuple);
+    Py_CLEAR(m->defaults_kwdict);
+    Py_CLEAR(m->func_annotations);
+    if (m->defaults) {
+        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
+        int i;
+        for (i = 0; i < m->defaults_pyobjects; i++)
+            Py_XDECREF(pydefaults[i]);
+        PyObject_Free(m->defaults);
+        m->defaults = NULL;
+    }
+    return 0;
+}
+static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
+{
+    PyObject_GC_UnTrack(m);
+    if (__Pyx_CyFunction_weakreflist(m) != NULL)
+        PyObject_ClearWeakRefs((PyObject *) m);
+    __Pyx_CyFunction_clear(m);
+    PyObject_GC_Del(m);
+}
+static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
+{
+    Py_VISIT(m->func_closure);
+    Py_VISIT(m->func.m_module);
+    Py_VISIT(m->func_dict);
+    Py_VISIT(m->func_name);
+    Py_VISIT(m->func_qualname);
+    Py_VISIT(m->func_doc);
+    Py_VISIT(m->func_globals);
+    Py_VISIT(m->func_code);
+    Py_VISIT(m->func_classobj);
+    Py_VISIT(m->defaults_tuple);
+    Py_VISIT(m->defaults_kwdict);
+    if (m->defaults) {
+        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
+        int i;
+        for (i = 0; i < m->defaults_pyobjects; i++)
+            Py_VISIT(pydefaults[i]);
+    }
+    return 0;
+}
+static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
+{
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
+        Py_INCREF(func);
+        return func;
+    }
+    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
+        if (type == NULL)
+            type = (PyObject *)(Py_TYPE(obj));
+        return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
+    }
+    if (obj == Py_None)
+        obj = NULL;
+    return __Pyx_PyMethod_New(func, obj, type);
+}
+static PyObject*
+__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
+{
+#if PY_MAJOR_VERSION >= 3
+    return PyUnicode_FromFormat("<cyfunction %U at %p>",
+                                op->func_qualname, (void *)op);
+#else
+    return PyString_FromFormat("<cyfunction %s at %p>",
+                               PyString_AsString(op->func_qualname), (void *)op);
+#endif
+}
+#if CYTHON_COMPILING_IN_PYPY
+static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyCFunctionObject* f = (PyCFunctionObject*)func;
+    PyCFunction meth = f->m_ml->ml_meth;
+    PyObject *self = f->m_self;
+    Py_ssize_t size;
+    switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
+    case METH_VARARGS:
+        if (likely(kw == NULL || PyDict_Size(kw) == 0))
+            return (*meth)(self, arg);
+        break;
+    case METH_VARARGS | METH_KEYWORDS:
+        return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
+    case METH_NOARGS:
+        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
+            size = PyTuple_GET_SIZE(arg);
+            if (likely(size == 0))
+                return (*meth)(self, NULL);
+            PyErr_Format(PyExc_TypeError,
+                "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                f->m_ml->ml_name, size);
+            return NULL;
+        }
+        break;
+    case METH_O:
+        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
+            size = PyTuple_GET_SIZE(arg);
+            if (likely(size == 1)) {
+                PyObject *result, *arg0 = PySequence_ITEM(arg, 0);
+                if (unlikely(!arg0)) return NULL;
+                result = (*meth)(self, arg0);
+                Py_DECREF(arg0);
+                return result;
+            }
+            PyErr_Format(PyExc_TypeError,
+                "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                f->m_ml->ml_name, size);
+            return NULL;
+        }
+        break;
+    default:
+        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
+                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
+                        "longer supported!");
+        return NULL;
+    }
+    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
+                 f->m_ml->ml_name);
+    return NULL;
+}
+#else
+static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+	return PyCFunction_Call(func, arg, kw);
+}
+#endif
+static PyTypeObject __pyx_CyFunctionType_type = {
+    PyVarObject_HEAD_INIT(0, 0)
+    "cython_function_or_method",
+    sizeof(__pyx_CyFunctionObject),
+    0,
+    (destructor) __Pyx_CyFunction_dealloc,
+    0,
+    0,
+    0,
+#if PY_MAJOR_VERSION < 3
+    0,
+#else
+    0,
+#endif
+    (reprfunc) __Pyx_CyFunction_repr,
+    0,
+    0,
+    0,
+    0,
+    __Pyx_CyFunction_Call,
+    0,
+    0,
+    0,
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    0,
+    (traverseproc) __Pyx_CyFunction_traverse,
+    (inquiry) __Pyx_CyFunction_clear,
+    0,
+#if PY_VERSION_HEX < 0x030500A0
+    offsetof(__pyx_CyFunctionObject, func_weakreflist),
+#else
+    offsetof(PyCFunctionObject, m_weakreflist),
+#endif
+    0,
+    0,
+    __pyx_CyFunction_methods,
+    __pyx_CyFunction_members,
+    __pyx_CyFunction_getsets,
+    0,
+    0,
+    __Pyx_CyFunction_descr_get,
+    0,
+    offsetof(__pyx_CyFunctionObject, func_dict),
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+#if PY_VERSION_HEX >= 0x030400a1
+    0,
+#endif
+};
+static int __pyx_CyFunction_init(void) {
+#if !CYTHON_COMPILING_IN_PYPY
+    __pyx_CyFunctionType_type.tp_call = PyCFunction_Call;
+#endif
+    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
+    if (__pyx_CyFunctionType == NULL) {
+        return -1;
+    }
+    return 0;
+}
+static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    m->defaults = PyObject_Malloc(size);
+    if (!m->defaults)
+        return PyErr_NoMemory();
+    memset(m->defaults, 0, size);
+    m->defaults_pyobjects = pyobjects;
+    return m->defaults;
+}
+static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    m->defaults_tuple = tuple;
+    Py_INCREF(tuple);
+}
+static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    m->defaults_kwdict = dict;
+    Py_INCREF(dict);
+}
+static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    m->func_annotations = dict;
+    Py_INCREF(dict);
+}
 
-  /* "PETSc/DM.pyx":302
- * 
- * del DMType
- * del DMBoundaryType             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMBoundaryType) < 0) {__pyx_filename = __pyx_f[40]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* 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;
+}
 
-  /* "PETSc/DMDA.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class DMDAStencilType(object):             # <<<<<<<<<<<<<<
- *     STAR = DMDA_STENCIL_STAR
- *     BOX  = DMDA_STENCIL_BOX
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMDAStencilType, __pyx_n_s_DMDAStencilType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+/* 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
 
-  /* "PETSc/DMDA.pyx":4
- * 
- * class DMDAStencilType(object):
- *     STAR = DMDA_STENCIL_STAR             # <<<<<<<<<<<<<<
- *     BOX  = DMDA_STENCIL_BOX
- * 
- */
-  __pyx_t_8 = PyInt_FromLong(DMDA_STENCIL_STAR); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STAR, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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
 
-  /* "PETSc/DMDA.pyx":5
- * class DMDAStencilType(object):
- *     STAR = DMDA_STENCIL_STAR
- *     BOX  = DMDA_STENCIL_BOX             # <<<<<<<<<<<<<<
- * 
- * class DMDAInterpolationType(object):
- */
-  __pyx_t_8 = PyInt_FromLong(DMDA_STENCIL_BOX); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BOX, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* 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);
+}
 
-  /* "PETSc/DMDA.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class DMDAStencilType(object):             # <<<<<<<<<<<<<<
- *     STAR = DMDA_STENCIL_STAR
- *     BOX  = DMDA_STENCIL_BOX
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAStencilType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAStencilType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* 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);
+}
 
-  /* "PETSc/DMDA.pyx":7
- *     BOX  = DMDA_STENCIL_BOX
- * 
- * class DMDAInterpolationType(object):             # <<<<<<<<<<<<<<
- *     Q0 = DMDA_INTERPOLATION_Q0
- *     Q1 = DMDA_INTERPOLATION_Q1
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMDAInterpolationType, __pyx_n_s_DMDAInterpolationType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+/* 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_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);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":8
- * 
- * class DMDAInterpolationType(object):
- *     Q0 = DMDA_INTERPOLATION_Q0             # <<<<<<<<<<<<<<
- *     Q1 = DMDA_INTERPOLATION_Q1
- * 
- */
-  __pyx_t_8 = PyInt_FromLong(DMDA_Q0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Q0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_InsertMode(InsertMode value) {
+    const InsertMode neg_one = (InsertMode) -1, const_zero = (InsertMode) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(InsertMode) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(InsertMode) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(InsertMode) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(InsertMode) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(InsertMode) <= 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(InsertMode),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":9
- * class DMDAInterpolationType(object):
- *     Q0 = DMDA_INTERPOLATION_Q0
- *     Q1 = DMDA_INTERPOLATION_Q1             # <<<<<<<<<<<<<<
- * 
- * class DMDAElementType(object):
- */
-  __pyx_t_8 = PyInt_FromLong(DMDA_Q1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Q1, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ScatterMode(ScatterMode value) {
+    const ScatterMode neg_one = (ScatterMode) -1, const_zero = (ScatterMode) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(ScatterMode) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(ScatterMode) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(ScatterMode) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(ScatterMode) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(ScatterMode) <= 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(ScatterMode),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":7
- *     BOX  = DMDA_STENCIL_BOX
- * 
- * class DMDAInterpolationType(object):             # <<<<<<<<<<<<<<
- *     Q0 = DMDA_INTERPOLATION_Q0
- *     Q1 = DMDA_INTERPOLATION_Q1
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAInterpolationType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAInterpolationType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NormType(NormType value) {
+    const NormType neg_one = (NormType) -1, const_zero = (NormType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(NormType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NormType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(NormType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(NormType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NormType) <= 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(NormType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":11
- *     Q1 = DMDA_INTERPOLATION_Q1
- * 
- * class DMDAElementType(object):             # <<<<<<<<<<<<<<
- *     P1 = DMDA_ELEMENT_P1
- *     Q1 = DMDA_ELEMENT_Q1
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_DMDAElementType, __pyx_n_s_DMDAElementType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscViewerFormat(PetscViewerFormat value) {
+    const PetscViewerFormat neg_one = (PetscViewerFormat) -1, const_zero = (PetscViewerFormat) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PetscViewerFormat) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscViewerFormat) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PetscViewerFormat) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PetscViewerFormat) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscViewerFormat) <= 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(PetscViewerFormat),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":12
- * 
- * class DMDAElementType(object):
- *     P1 = DMDA_ELEMENT_P1             # <<<<<<<<<<<<<<
- *     Q1 = DMDA_ELEMENT_Q1
- * 
- */
-  __pyx_t_8 = PyInt_FromLong(DMDA_ELEMENT_P1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_P1, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscFileMode(PetscFileMode value) {
+    const PetscFileMode neg_one = (PetscFileMode) -1, const_zero = (PetscFileMode) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PetscFileMode) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscFileMode) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PetscFileMode) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PetscFileMode) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscFileMode) <= 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(PetscFileMode),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":13
- * class DMDAElementType(object):
- *     P1 = DMDA_ELEMENT_P1
- *     Q1 = DMDA_ELEMENT_Q1             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  __pyx_t_8 = PyInt_FromLong(DMDA_ELEMENT_Q1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Q1, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ISGlobalToLocalMappingType(ISGlobalToLocalMappingType value) {
+    const ISGlobalToLocalMappingType neg_one = (ISGlobalToLocalMappingType) -1, const_zero = (ISGlobalToLocalMappingType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(ISGlobalToLocalMappingType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(ISGlobalToLocalMappingType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(ISGlobalToLocalMappingType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(ISGlobalToLocalMappingType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(ISGlobalToLocalMappingType) <= 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(ISGlobalToLocalMappingType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":11
- *     Q1 = DMDA_INTERPOLATION_Q1
- * 
- * class DMDAElementType(object):             # <<<<<<<<<<<<<<
- *     P1 = DMDA_ELEMENT_P1
- *     Q1 = DMDA_ELEMENT_Q1
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAElementType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAElementType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_VecOption(VecOption value) {
+    const VecOption neg_one = (VecOption) -1, const_zero = (VecOption) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(VecOption) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(VecOption) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(VecOption) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(VecOption) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(VecOption) <= 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(VecOption),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":19
- * cdef class DMDA(DM):
- * 
- *     StencilType       = DMDAStencilType             # <<<<<<<<<<<<<<
- *     InterpolationType = DMDAInterpolationType
- *     ElementType       = DMDAElementType
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAStencilType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_StencilType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatOption(MatOption value) {
+    const MatOption neg_one = (MatOption) -1, const_zero = (MatOption) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MatOption) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatOption) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MatOption) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MatOption) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatOption) <= 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(MatOption),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":20
- * 
- *     StencilType       = DMDAStencilType
- *     InterpolationType = DMDAInterpolationType             # <<<<<<<<<<<<<<
- *     ElementType       = DMDAElementType
- * 
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAInterpolationType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_InterpolationType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatAssemblyType(MatAssemblyType value) {
+    const MatAssemblyType neg_one = (MatAssemblyType) -1, const_zero = (MatAssemblyType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MatAssemblyType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatAssemblyType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MatAssemblyType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MatAssemblyType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatAssemblyType) <= 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(MatAssemblyType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":21
- *     StencilType       = DMDAStencilType
- *     InterpolationType = DMDAInterpolationType
- *     ElementType       = DMDAElementType             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAElementType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_ElementType, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatInfoType(MatInfoType value) {
+    const MatInfoType neg_one = (MatInfoType) -1, const_zero = (MatInfoType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MatInfoType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatInfoType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MatInfoType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MatInfoType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatInfoType) <= 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(MatInfoType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":504
- * 
- *     # backward compatibility
- *     createNaturalVector = createNaturalVec             # <<<<<<<<<<<<<<
- * 
- * 
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA, __pyx_n_s_createNaturalVec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_createNaturalVector, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatStructure(MatStructure value) {
+    const MatStructure neg_one = (MatStructure) -1, const_zero = (MatStructure) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MatStructure) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatStructure) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MatStructure) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MatStructure) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatStructure) <= 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(MatStructure),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":508
- * 
- * # backward compatibility alias
- * DA = DMDA             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DA, ((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_DMDA))) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatFactorShiftType(MatFactorShiftType value) {
+    const MatFactorShiftType neg_one = (MatFactorShiftType) -1, const_zero = (MatFactorShiftType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MatFactorShiftType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatFactorShiftType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MatFactorShiftType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MatFactorShiftType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatFactorShiftType) <= 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(MatFactorShiftType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":512
- * # --------------------------------------------------------------------
- * 
- * del DMDAStencilType             # <<<<<<<<<<<<<<
- * del DMDAInterpolationType
- * del DMDAElementType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMDAStencilType) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatSORType(MatSORType value) {
+    const MatSORType neg_one = (MatSORType) -1, const_zero = (MatSORType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MatSORType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatSORType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MatSORType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MatSORType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatSORType) <= 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(MatSORType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":513
- * 
- * del DMDAStencilType
- * del DMDAInterpolationType             # <<<<<<<<<<<<<<
- * del DMDAElementType
- * 
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMDAInterpolationType) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCSide(PCSide value) {
+    const PCSide neg_one = (PCSide) -1, const_zero = (PCSide) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PCSide) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCSide) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PCSide) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PCSide) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCSide) <= 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(PCSide),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMDA.pyx":514
- * del DMDAStencilType
- * del DMDAInterpolationType
- * del DMDAElementType             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMDAElementType) < 0) {__pyx_filename = __pyx_f[41]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCASMType(PCASMType value) {
+    const PCASMType neg_one = (PCASMType) -1, const_zero = (PCASMType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PCASMType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCASMType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PCASMType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PCASMType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCASMType) <= 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(PCASMType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/DMComposite.pyx":25
- *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
- *         return toInt(n)
- *     getNumberDM = getNumber             # <<<<<<<<<<<<<<
- * 
- *     def getEntries(self):
- */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMComposite, __pyx_n_s_getNumber); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMComposite->tp_dict, __pyx_n_s_getNumberDM, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[43]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMComposite);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCGASMType(PCGASMType value) {
+    const PCGASMType neg_one = (PCGASMType) -1, const_zero = (PCGASMType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PCGASMType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCGASMType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PCGASMType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PCGASMType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCGASMType) <= 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(PCGASMType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/SF.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class SFType(object):             # <<<<<<<<<<<<<<
- *     BASIC  = S_(PETSCSFBASIC)
- *     WINDOW = S_(PETSCSFWINDOW)
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_SFType, __pyx_n_s_SFType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCMGType(PCMGType value) {
+    const PCMGType neg_one = (PCMGType) -1, const_zero = (PCMGType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PCMGType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCMGType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PCMGType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PCMGType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCMGType) <= 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(PCMGType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/SF.pyx":4
- * 
- * class SFType(object):
- *     BASIC  = S_(PETSCSFBASIC)             # <<<<<<<<<<<<<<
- *     WINDOW = S_(PETSCSFWINDOW)
- * 
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSFBASIC); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BASIC, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCCompositeType(PCCompositeType value) {
+    const PCCompositeType neg_one = (PCCompositeType) -1, const_zero = (PCCompositeType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PCCompositeType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCCompositeType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PCCompositeType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PCCompositeType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCCompositeType) <= 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(PCCompositeType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/SF.pyx":5
- * class SFType(object):
- *     BASIC  = S_(PETSCSFBASIC)
- *     WINDOW = S_(PETSCSFWINDOW)             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSFWINDOW); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_WINDOW, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCFieldSplitSchurPreType(PCFieldSplitSchurPreType value) {
+    const PCFieldSplitSchurPreType neg_one = (PCFieldSplitSchurPreType) -1, const_zero = (PCFieldSplitSchurPreType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PCFieldSplitSchurPreType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PCFieldSplitSchurPreType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCFieldSplitSchurPreType) <= 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(PCFieldSplitSchurPreType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/SF.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class SFType(object):             # <<<<<<<<<<<<<<
- *     BASIC  = S_(PETSCSFBASIC)
- *     WINDOW = S_(PETSCSFWINDOW)
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SFType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SFType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCFieldSplitSchurFactType(PCFieldSplitSchurFactType value) {
+    const PCFieldSplitSchurFactType neg_one = (PCFieldSplitSchurFactType) -1, const_zero = (PCFieldSplitSchurFactType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PCFieldSplitSchurFactType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PCFieldSplitSchurFactType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCFieldSplitSchurFactType) <= 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(PCFieldSplitSchurFactType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/SF.pyx":11
- * cdef class SF(Object):
- * 
- *     Type = SFType             # <<<<<<<<<<<<<<
- * 
- *     def __cinit__(self):
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SFType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SF);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_KSPNormType(KSPNormType value) {
+    const KSPNormType neg_one = (KSPNormType) -1, const_zero = (KSPNormType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(KSPNormType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(KSPNormType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(KSPNormType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(KSPNormType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(KSPNormType) <= 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(KSPNormType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/SF.pyx":104
- * # --------------------------------------------------------------------
- * 
- * del SFType             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SFType) < 0) {__pyx_filename = __pyx_f[45]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_KSPConvergedReason(KSPConvergedReason value) {
+    const KSPConvergedReason neg_one = (KSPConvergedReason) -1, const_zero = (KSPConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(KSPConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(KSPConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(KSPConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(KSPConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(KSPConvergedReason) <= 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(KSPConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/Partitioner.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class PartitionerType(object):             # <<<<<<<<<<<<<<
- *     CHACO    = S_(PETSCPARTITIONERCHACO)
- *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_3, __pyx_n_s_PartitionerType, __pyx_n_s_PartitionerType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SNESNormSchedule(SNESNormSchedule value) {
+    const SNESNormSchedule neg_one = (SNESNormSchedule) -1, const_zero = (SNESNormSchedule) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(SNESNormSchedule) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SNESNormSchedule) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(SNESNormSchedule) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(SNESNormSchedule) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SNESNormSchedule) <= 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(SNESNormSchedule),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/Partitioner.pyx":4
- * 
- * class PartitionerType(object):
- *     CHACO    = S_(PETSCPARTITIONERCHACO)             # <<<<<<<<<<<<<<
- *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
- *     SHELL    = S_(PETSCPARTITIONERSHELL)
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERCHACO); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHACO, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SNESConvergedReason(SNESConvergedReason value) {
+    const SNESConvergedReason neg_one = (SNESConvergedReason) -1, const_zero = (SNESConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(SNESConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SNESConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(SNESConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(SNESConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SNESConvergedReason) <= 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(SNESConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/Partitioner.pyx":5
- * class PartitionerType(object):
- *     CHACO    = S_(PETSCPARTITIONERCHACO)
- *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)             # <<<<<<<<<<<<<<
- *     SHELL    = S_(PETSCPARTITIONERSHELL)
- * 
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERPARMETIS); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PARMETIS, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSProblemType(TSProblemType value) {
+    const TSProblemType neg_one = (TSProblemType) -1, const_zero = (TSProblemType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(TSProblemType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TSProblemType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(TSProblemType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(TSProblemType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TSProblemType) <= 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(TSProblemType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/Partitioner.pyx":6
- *     CHACO    = S_(PETSCPARTITIONERCHACO)
- *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
- *     SHELL    = S_(PETSCPARTITIONERSHELL)             # <<<<<<<<<<<<<<
- * 
- * # --------------------------------------------------------------------
- */
-  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERSHELL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSEquationType(TSEquationType value) {
+    const TSEquationType neg_one = (TSEquationType) -1, const_zero = (TSEquationType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(TSEquationType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TSEquationType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(TSEquationType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(TSEquationType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TSEquationType) <= 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(TSEquationType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/Partitioner.pyx":3
- * # --------------------------------------------------------------------
- * 
- * class PartitionerType(object):             # <<<<<<<<<<<<<<
- *     CHACO    = S_(PETSCPARTITIONERCHACO)
- *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
- */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PartitionerType, __pyx_t_3, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PartitionerType, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSExactFinalTimeOption(TSExactFinalTimeOption value) {
+    const TSExactFinalTimeOption neg_one = (TSExactFinalTimeOption) -1, const_zero = (TSExactFinalTimeOption) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(TSExactFinalTimeOption) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TSExactFinalTimeOption) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(TSExactFinalTimeOption) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(TSExactFinalTimeOption) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TSExactFinalTimeOption) <= 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(TSExactFinalTimeOption),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/Partitioner.pyx":12
- * cdef class Partitioner(Object):
- * 
- *     Type = PartitionerType             # <<<<<<<<<<<<<<
- * 
- *     def __cinit__(self):
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PartitionerType); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Partitioner->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[46]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Partitioner);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSConvergedReason(TSConvergedReason value) {
+    const TSConvergedReason neg_one = (TSConvergedReason) -1, const_zero = (TSConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(TSConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TSConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(TSConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(TSConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TSConvergedReason) <= 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(TSConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/PETSc.pyx":190
- *                   int,PetscErrorType,char*,void*)
- * 
- * cdef object tracebacklist = []             # <<<<<<<<<<<<<<
- * 
- * cdef int traceback(MPI_Comm       comm,
- */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_tracebacklist);
-  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_tracebacklist, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __pyx_t_3 = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TaoConvergedReason(TaoConvergedReason value) {
+    const TaoConvergedReason neg_one = (TaoConvergedReason) -1, const_zero = (TaoConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(TaoConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TaoConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(TaoConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(TaoConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(TaoConvergedReason) <= 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(TaoConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/PETSc.pyx":269
- *     int PetscPythonRegisterAll()
- * 
- * cdef int    PyPetsc_Argc = 0             # <<<<<<<<<<<<<<
- * cdef char** PyPetsc_Argv = NULL
- * 
- */
-  __pyx_v_8petsc4py_5PETSc_PyPetsc_Argc = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMBoundaryType(DMBoundaryType value) {
+    const DMBoundaryType neg_one = (DMBoundaryType) -1, const_zero = (DMBoundaryType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(DMBoundaryType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DMBoundaryType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(DMBoundaryType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(DMBoundaryType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DMBoundaryType) <= 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(DMBoundaryType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/PETSc.pyx":270
- * 
- * cdef int    PyPetsc_Argc = 0
- * cdef char** PyPetsc_Argv = NULL             # <<<<<<<<<<<<<<
- * 
- * cdef int getinitargs(object args, int *argc, char **argv[]) except -1:
- */
-  __pyx_v_8petsc4py_5PETSc_PyPetsc_Argv = NULL;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAStencilType(DMDAStencilType value) {
+    const DMDAStencilType neg_one = (DMDAStencilType) -1, const_zero = (DMDAStencilType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(DMDAStencilType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DMDAStencilType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(DMDAStencilType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(DMDAStencilType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DMDAStencilType) <= 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(DMDAStencilType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/PETSc.pyx":365
- *     PetscClassId PETSC_PARTITIONER_CLASSID "PETSCPARTITIONER_CLASSID"
- * 
- * cdef bint registercalled = 0             # <<<<<<<<<<<<<<
- * 
- * cdef const char *citation = b"""\
- */
-  __pyx_v_8petsc4py_5PETSc_registercalled = 0;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAInterpolationType(DMDAInterpolationType value) {
+    const DMDAInterpolationType neg_one = (DMDAInterpolationType) -1, const_zero = (DMDAInterpolationType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(DMDAInterpolationType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DMDAInterpolationType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(DMDAInterpolationType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(DMDAInterpolationType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DMDAInterpolationType) <= 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(DMDAInterpolationType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/PETSc.pyx":367
- * cdef bint registercalled = 0
- * 
- * cdef const char *citation = b"""\             # <<<<<<<<<<<<<<
- * @Article{Dalcin2011,
- *   Author = {Lisandro D. Dalcin and Rodrigo R. Paz and Pablo A. Kler and Alejandro Cosimo},
- */
-  __pyx_v_8petsc4py_5PETSc_citation = __pyx_k_Article_Dalcin2011_Author_Lisan;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAElementType(DMDAElementType value) {
+    const DMDAElementType neg_one = (DMDAElementType) -1, const_zero = (DMDAElementType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(DMDAElementType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DMDAElementType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(DMDAElementType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(DMDAElementType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DMDAElementType) <= 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(DMDAElementType),
+                                     little, !is_unsigned);
+    }
+}
 
-  /* "PETSc/PETSc.pyx":416
- * # --------------------------------------------------------------------
- * 
- * def _initialize(args=None, comm=None):             # <<<<<<<<<<<<<<
- *     global tracebacklist
- *     Error._traceback_ = tracebacklist
- */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_1_initialize, NULL, __pyx_n_s_petsc4py_PETSc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_initialize, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* 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);
+    }
+}
 
-  /* "PETSc/PETSc.pyx":432
- *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD
- * 
- * def _finalize():             # <<<<<<<<<<<<<<
- *     finalize()
- *     #
- */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_3_finalize, NULL, __pyx_n_s_petsc4py_PETSc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_finalize, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+/* 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);
+    }
+}
 
-  /*--- Wrapped vars code ---*/
+/* 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);
+    }
+}
 
-  if (__Pyx_RegisterCleanup()) {__pyx_filename = __pyx_f[48]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __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_XDECREF(__pyx_t_8);
-  if (__pyx_m) {
-    if (__pyx_d) {
-      __Pyx_AddTraceback("init petsc4py.PETSc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscLogStage(PetscLogStage value) {
+    const PetscLogStage neg_one = (PetscLogStage) -1, const_zero = (PetscLogStage) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PetscLogStage) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscLogStage) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PetscLogStage) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PetscLogStage) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscLogStage) <= 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(PetscLogStage),
+                                     little, !is_unsigned);
     }
-    Py_DECREF(__pyx_m); __pyx_m = 0;
-  } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init petsc4py.PETSc");
-  }
-  __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__6);
-  Py_CLEAR(__pyx_tuple__7);
-  Py_CLEAR(__pyx_slice__8);
-  Py_CLEAR(__pyx_slice__9);
-  Py_CLEAR(__pyx_tuple__11);
-  Py_CLEAR(__pyx_tuple__12);
-  Py_CLEAR(__pyx_tuple__13);
-  Py_CLEAR(__pyx_tuple__14);
-  Py_CLEAR(__pyx_tuple__15);
-  Py_CLEAR(__pyx_tuple__16);
-  Py_CLEAR(__pyx_tuple__17);
-  Py_CLEAR(__pyx_tuple__18);
-  Py_CLEAR(__pyx_tuple__19);
-  Py_CLEAR(__pyx_tuple__20);
-  Py_CLEAR(__pyx_tuple__21);
-  Py_CLEAR(__pyx_tuple__22);
-  Py_CLEAR(__pyx_tuple__23);
-  Py_CLEAR(__pyx_tuple__24);
-  Py_CLEAR(__pyx_tuple__25);
-  Py_CLEAR(__pyx_tuple__26);
-  Py_CLEAR(__pyx_tuple__27);
-  Py_CLEAR(__pyx_tuple__28);
-  Py_CLEAR(__pyx_tuple__29);
-  Py_CLEAR(__pyx_tuple__30);
-  Py_CLEAR(__pyx_tuple__31);
-  Py_CLEAR(__pyx_tuple__33);
-  Py_CLEAR(__pyx_tuple__34);
-  Py_CLEAR(__pyx_tuple__35);
-  Py_CLEAR(__pyx_tuple__36);
-  Py_CLEAR(__pyx_tuple__37);
-  Py_CLEAR(__pyx_tuple__38);
-  Py_CLEAR(__pyx_tuple__39);
-  Py_CLEAR(__pyx_tuple__40);
-  Py_CLEAR(__pyx_tuple__41);
-  Py_CLEAR(__pyx_tuple__42);
-  Py_CLEAR(__pyx_tuple__43);
-  Py_CLEAR(__pyx_tuple__44);
-  Py_CLEAR(__pyx_tuple__45);
-  Py_CLEAR(__pyx_tuple__46);
-  Py_CLEAR(__pyx_tuple__47);
-  Py_CLEAR(__pyx_tuple__48);
-  Py_CLEAR(__pyx_tuple__49);
-  Py_CLEAR(__pyx_tuple__50);
-  Py_CLEAR(__pyx_tuple__51);
-  Py_CLEAR(__pyx_slice__52);
-  Py_CLEAR(__pyx_tuple__53);
-  Py_CLEAR(__pyx_tuple__54);
-  Py_CLEAR(__pyx_tuple__55);
-  Py_CLEAR(__pyx_tuple__56);
-  Py_CLEAR(__pyx_tuple__57);
-  Py_CLEAR(__pyx_tuple__58);
-  Py_CLEAR(__pyx_tuple__59);
-  Py_CLEAR(__pyx_slice__60);
-  Py_CLEAR(__pyx_slice__61);
-  Py_CLEAR(__pyx_tuple__62);
-  Py_CLEAR(__pyx_tuple__63);
-  Py_CLEAR(__pyx_slice__64);
-  Py_CLEAR(__pyx_tuple__65);
-  Py_CLEAR(__pyx_codeobj__66);
-  Py_CLEAR(__pyx_tuple__67);
-  Py_CLEAR(__pyx_codeobj__68);
-  Py_CLEAR(__pyx_tuple__69);
-  Py_CLEAR(__pyx_codeobj__70);
-  Py_CLEAR(__pyx_tuple__71);
-  Py_CLEAR(__pyx_codeobj__72);
-  Py_CLEAR(__pyx_tuple__73);
-  Py_CLEAR(__pyx_codeobj__74);
-  Py_CLEAR(__pyx_codeobj__75);
-  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);
-  }
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscClassId(PetscClassId value) {
+    const PetscClassId neg_one = (PetscClassId) -1, const_zero = (PetscClassId) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PetscClassId) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscClassId) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PetscClassId) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PetscClassId) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscClassId) <= 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(PetscClassId),
+                                     little, !is_unsigned);
+    }
+}
 
+static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s) {
+                  PyObject* res;
+                  PyObject* member;
+                  res = PyDict_New(); if (unlikely(!res)) return NULL;
+                  member = __Pyx_PyInt_From_int(s.count); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_count, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.flops); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_flops, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.time); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_time, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.numMessages); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_numMessages, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.messageLength); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_messageLength, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.numReductions); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_numReductions, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  return res;
+                  bad:
+                  Py_XDECREF(member);
+                  Py_DECREF(res);
+                  return NULL;
+                }
+                /* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscLogEvent(PetscLogEvent value) {
+    const PetscLogEvent neg_one = (PetscLogEvent) -1, const_zero = (PetscLogEvent) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PetscLogEvent) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscLogEvent) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PetscLogEvent) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PetscLogEvent) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscLogEvent) <= 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(PetscLogEvent),
+                                     little, !is_unsigned);
+    }
 }
-static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
-  /*--- Global cleanup code ---*/
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_tracebacklist);
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_type_registry);
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc___COMM_WORLD__);
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc___COMM_SELF__);
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc___COMM_NULL__);
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_event_registry);
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_class_registry);
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_stage_registry);
-  Py_CLEAR(__pyx_v_8petsc4py_5PETSc_PetscError);
-  __Pyx_CleanupGlobals();
-  /*--- Type import cleanup code ---*/
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_dtype);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_ndarray);
-  /*--- Builtin cleanup code ---*/
-  Py_CLEAR(__pyx_builtin_object);
-  Py_CLEAR(__pyx_builtin_RuntimeError);
-  Py_CLEAR(__pyx_builtin_ValueError);
-  Py_CLEAR(__pyx_builtin_TypeError);
-  Py_CLEAR(__pyx_builtin_KeyError);
-  Py_CLEAR(__pyx_builtin_SystemError);
-  Py_CLEAR(__pyx_builtin_Ellipsis);
-  Py_CLEAR(__pyx_builtin_NotImplementedError);
-  Py_CLEAR(__pyx_builtin_enumerate);
-  Py_CLEAR(__pyx_builtin_range);
-  Py_CLEAR(__pyx_builtin_NotImplemented);
-  Py_CLEAR(__pyx_builtin_AttributeError);
-  Py_CLEAR(__pyx_builtin_MemoryError);
-  /*--- Intern cleanup code ---*/
-  Py_CLEAR(__pyx_empty_tuple);
-  #if CYTHON_COMPILING_IN_PYPY
-  Py_CLEAR(__pyx_b);
-  #endif
-  Py_CLEAR(__pyx_d);
+
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value) {
+    const MPI_Fint neg_one = (MPI_Fint) -1, const_zero = (MPI_Fint) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MPI_Fint) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MPI_Fint) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MPI_Fint) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MPI_Fint) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MPI_Fint) <= 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(MPI_Fint),
+                                     little, !is_unsigned);
+    }
 }
 
-/* --- 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;
+/* CIntToPy */
+                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
+    const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(unsigned long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(unsigned long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(unsigned 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(unsigned long),
+                                     little, !is_unsigned);
+    }
 }
-#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);
+static PyObject* __pyx_convert__to_py_MatInfo(MatInfo s) {
+                  PyObject* res;
+                  PyObject* member;
+                  res = PyDict_New(); if (unlikely(!res)) return NULL;
+                  member = PyFloat_FromDouble(s.block_size); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_block_size, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.nz_allocated); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_nz_allocated, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.nz_used); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_nz_used, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.nz_unneeded); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_nz_unneeded, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.memory); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_memory, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.assemblies); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_assemblies, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.mallocs); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_mallocs, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.fill_ratio_given); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_fill_ratio_given, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.fill_ratio_needed); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_fill_ratio_needed, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  member = PyFloat_FromDouble(s.factor_mallocs); if (unlikely(!member)) goto bad;
+                  if (unlikely(PyDict_SetItem(res, __pyx_n_s_factor_mallocs, member) < 0)) goto bad;
+                  Py_DECREF(member);
+                  return res;
+                  bad:
+                  Py_XDECREF(member);
+                  Py_DECREF(res);
+                  return NULL;
+                }
+                /* ClassMethod */
+                static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
+#if CYTHON_COMPILING_IN_PYPY
+    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) {
+        return PyClassMethod_New(method);
+    }
 #else
-            "name '%.200s' is not defined", PyString_AS_STRING(name));
+    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));
     }
-    return result;
+    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;
 }
 
-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 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;
         }
-        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);
+        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;
 }
 
-#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;
-}
+/* 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 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;
-}
+    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
-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
-    if (likely(PyCFunction_Check(func))) {
+            {
+                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 (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* args = PyTuple_Pack(1, arg);
-    return (likely(args)) ? __Pyx_PyObject_Call(func, args, NULL) : NULL;
-}
+            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 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 (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
-    if (likely(PyCFunction_Check(func))) {
+            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
-        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
-            return __Pyx_PyObject_CallMethO(func, NULL);
+            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;
     }
-    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
+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;
 }
-#endif
 
-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);
+/* CIntFromPy */
+                static CYTHON_INLINE InsertMode __Pyx_PyInt_As_InsertMode(PyObject *x) {
+    const InsertMode neg_one = (InsertMode) -1, const_zero = (InsertMode) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(InsertMode) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(InsertMode, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (InsertMode) 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 (InsertMode) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(InsertMode, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(InsertMode) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(InsertMode) >= 2 * PyLong_SHIFT) {
+                            return (InsertMode) (((((InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(InsertMode) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(InsertMode) >= 3 * PyLong_SHIFT) {
+                            return (InsertMode) (((((((InsertMode)digits[2]) << PyLong_SHIFT) | (InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(InsertMode) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, 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(InsertMode) >= 4 * PyLong_SHIFT) {
+                            return (InsertMode) (((((((((InsertMode)digits[3]) << PyLong_SHIFT) | (InsertMode)digits[2]) << PyLong_SHIFT) | (InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)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 (InsertMode) -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(InsertMode) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(InsertMode, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(InsertMode) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(InsertMode, 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 (InsertMode) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(InsertMode, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(InsertMode,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(InsertMode) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(InsertMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (InsertMode) (((InsertMode)-1)*(((((InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(InsertMode) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(InsertMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (InsertMode) ((((((InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(InsertMode) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(InsertMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (InsertMode) (((InsertMode)-1)*(((((((InsertMode)digits[2]) << PyLong_SHIFT) | (InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(InsertMode) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(InsertMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (InsertMode) ((((((((InsertMode)digits[2]) << PyLong_SHIFT) | (InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(InsertMode) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, 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(InsertMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (InsertMode) (((InsertMode)-1)*(((((((((InsertMode)digits[3]) << PyLong_SHIFT) | (InsertMode)digits[2]) << PyLong_SHIFT) | (InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(InsertMode) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(InsertMode, 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(InsertMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (InsertMode) ((((((((((InsertMode)digits[3]) << PyLong_SHIFT) | (InsertMode)digits[2]) << PyLong_SHIFT) | (InsertMode)digits[1]) << PyLong_SHIFT) | (InsertMode)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(InsertMode) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(InsertMode, long, PyLong_AsLong(x))
+            } else if (sizeof(InsertMode) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(InsertMode, 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
+            InsertMode 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 (InsertMode) -1;
+        }
     } else {
-        PyErr_WriteUnraisable(ctx);
-        Py_DECREF(ctx);
+        InsertMode val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (InsertMode) -1;
+        val = __Pyx_PyInt_As_InsertMode(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 InsertMode");
+    return (InsertMode) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to InsertMode");
+    return (InsertMode) -1;
 }
 
-static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
-#if CYTHON_COMPILING_IN_PYPY
-    return PyObject_RichCompareBool(s1, s2, equals);
-#else
-    if (s1 == s2) {
-        return (equals == Py_EQ);
-    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
-        const char *ps1, *ps2;
-        Py_ssize_t length = PyBytes_GET_SIZE(s1);
-        if (length != PyBytes_GET_SIZE(s2))
-            return (equals == Py_NE);
-        ps1 = PyBytes_AS_STRING(s1);
-        ps2 = PyBytes_AS_STRING(s2);
-        if (ps1[0] != ps2[0]) {
-            return (equals == Py_NE);
-        } else if (length == 1) {
-            return (equals == Py_EQ);
+/* CIntFromPy */
+                static CYTHON_INLINE ScatterMode __Pyx_PyInt_As_ScatterMode(PyObject *x) {
+    const ScatterMode neg_one = (ScatterMode) -1, const_zero = (ScatterMode) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(ScatterMode) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(ScatterMode, long, PyInt_AS_LONG(x))
         } else {
-            int result = memcmp(ps1, ps2, (size_t)length);
-            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (ScatterMode) val;
         }
-    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
-        return (equals == Py_NE);
-    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
-        return (equals == Py_NE);
-    } else {
-        int result;
-        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
-        if (!py_result)
-            return -1;
-        result = __Pyx_PyObject_IsTrue(py_result);
-        Py_DECREF(py_result);
-        return result;
-    }
+    } else
 #endif
-}
-
-static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
-#if CYTHON_COMPILING_IN_PYPY
-    return PyObject_RichCompareBool(s1, s2, equals);
+    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 (ScatterMode) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(ScatterMode, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(ScatterMode) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ScatterMode) >= 2 * PyLong_SHIFT) {
+                            return (ScatterMode) (((((ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(ScatterMode) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ScatterMode) >= 3 * PyLong_SHIFT) {
+                            return (ScatterMode) (((((((ScatterMode)digits[2]) << PyLong_SHIFT) | (ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(ScatterMode) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, 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(ScatterMode) >= 4 * PyLong_SHIFT) {
+                            return (ScatterMode) (((((((((ScatterMode)digits[3]) << PyLong_SHIFT) | (ScatterMode)digits[2]) << PyLong_SHIFT) | (ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-#if PY_MAJOR_VERSION < 3
-    PyObject* owned_ref = NULL;
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (ScatterMode) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-    int s1_is_unicode, s2_is_unicode;
-    if (s1 == s2) {
-        goto return_eq;
-    }
-    s1_is_unicode = PyUnicode_CheckExact(s1);
-    s2_is_unicode = PyUnicode_CheckExact(s2);
-#if PY_MAJOR_VERSION < 3
-    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
-        owned_ref = PyUnicode_FromObject(s2);
-        if (unlikely(!owned_ref))
-            return -1;
-        s2 = owned_ref;
-        s2_is_unicode = 1;
-    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
-        owned_ref = PyUnicode_FromObject(s1);
-        if (unlikely(!owned_ref))
-            return -1;
-        s1 = owned_ref;
-        s1_is_unicode = 1;
-    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
-        return __Pyx_PyBytes_Equals(s1, s2, equals);
-    }
+            if (sizeof(ScatterMode) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ScatterMode, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(ScatterMode) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ScatterMode, 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 (ScatterMode) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(ScatterMode, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(ScatterMode,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(ScatterMode) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ScatterMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (ScatterMode) (((ScatterMode)-1)*(((((ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(ScatterMode) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ScatterMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (ScatterMode) ((((((ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(ScatterMode) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ScatterMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (ScatterMode) (((ScatterMode)-1)*(((((((ScatterMode)digits[2]) << PyLong_SHIFT) | (ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(ScatterMode) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ScatterMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (ScatterMode) ((((((((ScatterMode)digits[2]) << PyLong_SHIFT) | (ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(ScatterMode) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, 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(ScatterMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (ScatterMode) (((ScatterMode)-1)*(((((((((ScatterMode)digits[3]) << PyLong_SHIFT) | (ScatterMode)digits[2]) << PyLong_SHIFT) | (ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(ScatterMode) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ScatterMode, 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(ScatterMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (ScatterMode) ((((((((((ScatterMode)digits[3]) << PyLong_SHIFT) | (ScatterMode)digits[2]) << PyLong_SHIFT) | (ScatterMode)digits[1]) << PyLong_SHIFT) | (ScatterMode)digits[0])));
+                        }
+                    }
+                    break;
+            }
 #endif
-    if (s1_is_unicode & s2_is_unicode) {
-        Py_ssize_t length;
-        int kind;
-        void *data1, *data2;
-        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
-            return -1;
-        length = __Pyx_PyUnicode_GET_LENGTH(s1);
-        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
-            goto return_ne;
-        }
-        kind = __Pyx_PyUnicode_KIND(s1);
-        if (kind != __Pyx_PyUnicode_KIND(s2)) {
-            goto return_ne;
+            if (sizeof(ScatterMode) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ScatterMode, long, PyLong_AsLong(x))
+            } else if (sizeof(ScatterMode) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ScatterMode, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-        data1 = __Pyx_PyUnicode_DATA(s1);
-        data2 = __Pyx_PyUnicode_DATA(s2);
-        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
-            goto return_ne;
-        } else if (length == 1) {
-            goto return_eq;
-        } else {
-            int result = memcmp(data1, data2, (size_t)(length * kind));
-            #if PY_MAJOR_VERSION < 3
-            Py_XDECREF(owned_ref);
-            #endif
-            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            ScatterMode 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 (ScatterMode) -1;
         }
-    } else if ((s1 == Py_None) & s2_is_unicode) {
-        goto return_ne;
-    } else if ((s2 == Py_None) & s1_is_unicode) {
-        goto return_ne;
     } else {
-        int result;
-        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
-        if (!py_result)
-            return -1;
-        result = __Pyx_PyObject_IsTrue(py_result);
-        Py_DECREF(py_result);
-        return result;
+        ScatterMode val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (ScatterMode) -1;
+        val = __Pyx_PyInt_As_ScatterMode(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-return_eq:
-    #if PY_MAJOR_VERSION < 3
-    Py_XDECREF(owned_ref);
-    #endif
-    return (equals == Py_EQ);
-return_ne:
-    #if PY_MAJOR_VERSION < 3
-    Py_XDECREF(owned_ref);
-    #endif
-    return (equals == Py_NE);
-#endif
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to ScatterMode");
+    return (ScatterMode) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to ScatterMode");
+    return (ScatterMode) -1;
 }
 
+/* CIntFromPy */
+                static CYTHON_INLINE PetscFileMode __Pyx_PyInt_As_PetscFileMode(PyObject *x) {
+    const PetscFileMode neg_one = (PetscFileMode) -1, const_zero = (PetscFileMode) 0;
+    const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
-                        CYTHON_UNUSED PyObject *cause) {
-    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;
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PetscFileMode) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PetscFileMode, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PetscFileMode) val;
         }
+    } else
 #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_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 (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 (PetscFileMode) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PetscFileMode, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PetscFileMode) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscFileMode) >= 2 * PyLong_SHIFT) {
+                            return (PetscFileMode) (((((PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscFileMode) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscFileMode) >= 3 * PyLong_SHIFT) {
+                            return (PetscFileMode) (((((((PetscFileMode)digits[2]) << PyLong_SHIFT) | (PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscFileMode) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, 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(PetscFileMode) >= 4 * PyLong_SHIFT) {
+                            return (PetscFileMode) (((((((((PetscFileMode)digits[3]) << PyLong_SHIFT) | (PetscFileMode)digits[2]) << PyLong_SHIFT) | (PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0]));
+                        }
+                    }
+                    break;
             }
-        }
-        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;
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
             }
-        }
-    } 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) {
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PetscFileMode) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #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);
+            if (sizeof(PetscFileMode) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscFileMode, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PetscFileMode) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscFileMode, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
         } else {
-            PyErr_SetString(PyExc_TypeError,
-                            "exception causes must derive from "
-                            "BaseException");
-            goto bad;
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscFileMode) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PetscFileMode, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PetscFileMode,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PetscFileMode) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscFileMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscFileMode) (((PetscFileMode)-1)*(((((PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PetscFileMode) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscFileMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscFileMode) ((((((PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PetscFileMode) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscFileMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscFileMode) (((PetscFileMode)-1)*(((((((PetscFileMode)digits[2]) << PyLong_SHIFT) | (PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscFileMode) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscFileMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscFileMode) ((((((((PetscFileMode)digits[2]) << PyLong_SHIFT) | (PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PetscFileMode) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, 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(PetscFileMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscFileMode) (((PetscFileMode)-1)*(((((((((PetscFileMode)digits[3]) << PyLong_SHIFT) | (PetscFileMode)digits[2]) << PyLong_SHIFT) | (PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscFileMode) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscFileMode, 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(PetscFileMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscFileMode) ((((((((((PetscFileMode)digits[3]) << PyLong_SHIFT) | (PetscFileMode)digits[2]) << PyLong_SHIFT) | (PetscFileMode)digits[1]) << PyLong_SHIFT) | (PetscFileMode)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PetscFileMode) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscFileMode, long, PyLong_AsLong(x))
+            } else if (sizeof(PetscFileMode) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscFileMode, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-        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);
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #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);
-        }
+            PetscFileMode 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 (PetscFileMode) -1;
+        }
+    } else {
+        PetscFileMode val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PetscFileMode) -1;
+        val = __Pyx_PyInt_As_PetscFileMode(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-bad:
-    Py_XDECREF(owned_instance);
-    return;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PetscFileMode");
+    return (PetscFileMode) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PetscFileMode");
+    return (PetscFileMode) -1;
 }
-#endif
 
-static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
-    PyObject *local_type, *local_value, *local_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
-    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);
+/* 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
-    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (unlikely(tstate->curexc_type))
-#else
-    if (unlikely(PyErr_Occurred()))
+    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
-        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);
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    PyErr_SetExcInfo(local_type, local_value, local_tb);
+            {
+                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
-    return 0;
-bad:
-    *type = 0;
-    *value = 0;
-    *tb = 0;
-    Py_XDECREF(local_type);
-    Py_XDECREF(local_value);
-    Py_XDECREF(local_tb);
-    return -1;
-}
-
-static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
-    PyObject *tmp_type, *tmp_value, *tmp_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    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;
+            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
-    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
-    PyErr_SetExcInfo(*type, *value, *tb);
+            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
-    *type = tmp_type;
-    *value = tmp_value;
-    *tb = tmp_tb;
+            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;
 }
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
+/* CIntFromPy */
+                static CYTHON_INLINE MatAssemblyType __Pyx_PyInt_As_MatAssemblyType(PyObject *x) {
+    const MatAssemblyType neg_one = (MatAssemblyType) -1, const_zero = (MatAssemblyType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(MatAssemblyType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(MatAssemblyType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (MatAssemblyType) 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 (MatAssemblyType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(MatAssemblyType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(MatAssemblyType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatAssemblyType) >= 2 * PyLong_SHIFT) {
+                            return (MatAssemblyType) (((((MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatAssemblyType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatAssemblyType) >= 3 * PyLong_SHIFT) {
+                            return (MatAssemblyType) (((((((MatAssemblyType)digits[2]) << PyLong_SHIFT) | (MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatAssemblyType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, 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(MatAssemblyType) >= 4 * PyLong_SHIFT) {
+                            return (MatAssemblyType) (((((((((MatAssemblyType)digits[3]) << PyLong_SHIFT) | (MatAssemblyType)digits[2]) << PyLong_SHIFT) | (MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
 #if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    *type = tstate->exc_type;
-    *value = tstate->exc_value;
-    *tb = tstate->exc_traceback;
-    Py_XINCREF(*type);
-    Py_XINCREF(*value);
-    Py_XINCREF(*tb);
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    PyErr_GetExcInfo(type, value, tb);
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (MatAssemblyType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-}
-static void __Pyx_ExceptionReset(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->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);
+            if (sizeof(MatAssemblyType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatAssemblyType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(MatAssemblyType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatAssemblyType, 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 (MatAssemblyType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(MatAssemblyType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(MatAssemblyType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(MatAssemblyType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatAssemblyType) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatAssemblyType) (((MatAssemblyType)-1)*(((((MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(MatAssemblyType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatAssemblyType) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatAssemblyType) ((((((MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(MatAssemblyType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatAssemblyType) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatAssemblyType) (((MatAssemblyType)-1)*(((((((MatAssemblyType)digits[2]) << PyLong_SHIFT) | (MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatAssemblyType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatAssemblyType) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatAssemblyType) ((((((((MatAssemblyType)digits[2]) << PyLong_SHIFT) | (MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(MatAssemblyType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, 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(MatAssemblyType) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatAssemblyType) (((MatAssemblyType)-1)*(((((((((MatAssemblyType)digits[3]) << PyLong_SHIFT) | (MatAssemblyType)digits[2]) << PyLong_SHIFT) | (MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatAssemblyType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatAssemblyType, 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(MatAssemblyType) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatAssemblyType) ((((((((((MatAssemblyType)digits[3]) << PyLong_SHIFT) | (MatAssemblyType)digits[2]) << PyLong_SHIFT) | (MatAssemblyType)digits[1]) << PyLong_SHIFT) | (MatAssemblyType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(MatAssemblyType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatAssemblyType, long, PyLong_AsLong(x))
+            } else if (sizeof(MatAssemblyType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatAssemblyType, 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
-    PyErr_SetExcInfo(type, value, tb);
+            MatAssemblyType 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 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;
+            return (MatAssemblyType) -1;
         }
+    } else {
+        MatAssemblyType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (MatAssemblyType) -1;
+        val = __Pyx_PyInt_As_MatAssemblyType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-#endif
-    result = __Pyx_PyObject_CallOneArg(method, arg);
-bad:
-    Py_XDECREF(method);
-    return result;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to MatAssemblyType");
+    return (MatAssemblyType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to MatAssemblyType");
+    return (MatAssemblyType) -1;
 }
 
-static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix) {
-    PyObject *r;
-    if (unlikely(!py_ix)) return NULL;
-    r = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_pop, py_ix);
-    Py_DECREF(py_ix);
-    return r;
-}
-static PyObject* __Pyx__PyList_PopIndex(PyObject* L, Py_ssize_t ix) {
+/* CIntFromPy */
+                static CYTHON_INLINE MatInfoType __Pyx_PyInt_As_MatInfoType(PyObject *x) {
+    const MatInfoType neg_one = (MatInfoType) -1, const_zero = (MatInfoType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(MatInfoType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(MatInfoType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (MatInfoType) 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 (MatInfoType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(MatInfoType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(MatInfoType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatInfoType) >= 2 * PyLong_SHIFT) {
+                            return (MatInfoType) (((((MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatInfoType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatInfoType) >= 3 * PyLong_SHIFT) {
+                            return (MatInfoType) (((((((MatInfoType)digits[2]) << PyLong_SHIFT) | (MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatInfoType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, 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(MatInfoType) >= 4 * PyLong_SHIFT) {
+                            return (MatInfoType) (((((((((MatInfoType)digits[3]) << PyLong_SHIFT) | (MatInfoType)digits[2]) << PyLong_SHIFT) | (MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
 #if CYTHON_COMPILING_IN_CPYTHON
-    Py_ssize_t size = PyList_GET_SIZE(L);
-    if (likely(size > (((PyListObject*)L)->allocated >> 1))) {
-        Py_ssize_t cix = ix;
-        if (cix < 0) {
-            cix += size;
+            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 (MatInfoType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(MatInfoType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatInfoType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(MatInfoType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatInfoType, 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 (MatInfoType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(MatInfoType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(MatInfoType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(MatInfoType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatInfoType) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatInfoType) (((MatInfoType)-1)*(((((MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(MatInfoType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatInfoType) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatInfoType) ((((((MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(MatInfoType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatInfoType) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatInfoType) (((MatInfoType)-1)*(((((((MatInfoType)digits[2]) << PyLong_SHIFT) | (MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatInfoType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatInfoType) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatInfoType) ((((((((MatInfoType)digits[2]) << PyLong_SHIFT) | (MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(MatInfoType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, 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(MatInfoType) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatInfoType) (((MatInfoType)-1)*(((((((((MatInfoType)digits[3]) << PyLong_SHIFT) | (MatInfoType)digits[2]) << PyLong_SHIFT) | (MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatInfoType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatInfoType, 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(MatInfoType) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatInfoType) ((((((((((MatInfoType)digits[3]) << PyLong_SHIFT) | (MatInfoType)digits[2]) << PyLong_SHIFT) | (MatInfoType)digits[1]) << PyLong_SHIFT) | (MatInfoType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(MatInfoType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatInfoType, long, PyLong_AsLong(x))
+            } else if (sizeof(MatInfoType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatInfoType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-        if (likely(0 <= cix && cix < size)) {
-            PyObject* v = PyList_GET_ITEM(L, cix);
-            Py_SIZE(L) -= 1;
-            size -= 1;
-            memmove(&PyList_GET_ITEM(L, cix), &PyList_GET_ITEM(L, cix+1), (size_t)(size-cix)*sizeof(PyObject*));
-            return v;
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            MatInfoType 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 (MatInfoType) -1;
         }
+    } else {
+        MatInfoType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (MatInfoType) -1;
+        val = __Pyx_PyInt_As_MatInfoType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-#endif
-    return __Pyx__PyObject_PopIndex(L, PyInt_FromSsize_t(ix));
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to MatInfoType");
+    return (MatInfoType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to MatInfoType");
+    return (MatInfoType) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj,
-        Py_ssize_t cstart, Py_ssize_t cstop,
-        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
-        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyMappingMethods* mp;
+/* CIntFromPy */
+                static CYTHON_INLINE MatFactorShiftType __Pyx_PyInt_As_MatFactorShiftType(PyObject *x) {
+    const MatFactorShiftType neg_one = (MatFactorShiftType) -1, const_zero = (MatFactorShiftType) 0;
+    const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
-    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
-    if (likely(ms && ms->sq_slice)) {
-        if (!has_cstart) {
-            if (_py_start && (*_py_start != Py_None)) {
-                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
-                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
-            } else
-                cstart = 0;
-        }
-        if (!has_cstop) {
-            if (_py_stop && (*_py_stop != Py_None)) {
-                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
-                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
-            } else
-                cstop = PY_SSIZE_T_MAX;
-        }
-        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
-            Py_ssize_t l = ms->sq_length(obj);
-            if (likely(l >= 0)) {
-                if (cstop < 0) {
-                    cstop += l;
-                    if (cstop < 0) cstop = 0;
-                }
-                if (cstart < 0) {
-                    cstart += l;
-                    if (cstart < 0) cstart = 0;
-                }
-            } else {
-                if (PyErr_ExceptionMatches(PyExc_OverflowError))
-                    PyErr_Clear();
-                else
-                    goto bad;
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(MatFactorShiftType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
             }
+            return (MatFactorShiftType) val;
         }
-        return ms->sq_slice(obj, cstart, cstop);
-    }
+    } else
 #endif
-    mp = Py_TYPE(obj)->tp_as_mapping;
-    if (likely(mp && mp->mp_subscript))
+    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 (MatFactorShiftType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(MatFactorShiftType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(MatFactorShiftType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatFactorShiftType) >= 2 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) (((((MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatFactorShiftType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatFactorShiftType) >= 3 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) (((((((MatFactorShiftType)digits[2]) << PyLong_SHIFT) | (MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatFactorShiftType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, 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(MatFactorShiftType) >= 4 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) (((((((((MatFactorShiftType)digits[3]) << PyLong_SHIFT) | (MatFactorShiftType)digits[2]) << PyLong_SHIFT) | (MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0]));
+                        }
+                    }
+                    break;
+            }
 #endif
-    {
-        PyObject* result;
-        PyObject *py_slice, *py_start, *py_stop;
-        if (_py_slice) {
-            py_slice = *_py_slice;
-        } else {
-            PyObject* owned_start = NULL;
-            PyObject* owned_stop = NULL;
-            if (_py_start) {
-                py_start = *_py_start;
-            } else {
-                if (has_cstart) {
-                    owned_start = py_start = PyInt_FromSsize_t(cstart);
-                    if (unlikely(!py_start)) goto bad;
-                } else
-                    py_start = Py_None;
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
             }
-            if (_py_stop) {
-                py_stop = *_py_stop;
-            } else {
-                if (has_cstop) {
-                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
-                    if (unlikely(!py_stop)) {
-                        Py_XDECREF(owned_start);
-                        goto bad;
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (MatFactorShiftType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(MatFactorShiftType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatFactorShiftType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(MatFactorShiftType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatFactorShiftType, 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 (MatFactorShiftType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(MatFactorShiftType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(MatFactorShiftType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(MatFactorShiftType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatFactorShiftType) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) (((MatFactorShiftType)-1)*(((((MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0])));
+                        }
                     }
-                } else
-                    py_stop = Py_None;
+                    break;
+                case 2:
+                    if (8 * sizeof(MatFactorShiftType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatFactorShiftType) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) ((((((MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(MatFactorShiftType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatFactorShiftType) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) (((MatFactorShiftType)-1)*(((((((MatFactorShiftType)digits[2]) << PyLong_SHIFT) | (MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatFactorShiftType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatFactorShiftType) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) ((((((((MatFactorShiftType)digits[2]) << PyLong_SHIFT) | (MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(MatFactorShiftType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, 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(MatFactorShiftType) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) (((MatFactorShiftType)-1)*(((((((((MatFactorShiftType)digits[3]) << PyLong_SHIFT) | (MatFactorShiftType)digits[2]) << PyLong_SHIFT) | (MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatFactorShiftType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatFactorShiftType, 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(MatFactorShiftType) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatFactorShiftType) ((((((((((MatFactorShiftType)digits[3]) << PyLong_SHIFT) | (MatFactorShiftType)digits[2]) << PyLong_SHIFT) | (MatFactorShiftType)digits[1]) << PyLong_SHIFT) | (MatFactorShiftType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(MatFactorShiftType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatFactorShiftType, long, PyLong_AsLong(x))
+            } else if (sizeof(MatFactorShiftType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatFactorShiftType, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
-            py_slice = PySlice_New(py_start, py_stop, Py_None);
-            Py_XDECREF(owned_start);
-            Py_XDECREF(owned_stop);
-            if (unlikely(!py_slice)) goto bad;
         }
-#if CYTHON_COMPILING_IN_CPYTHON
-        result = mp->mp_subscript(obj, py_slice);
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-        result = PyObject_GetItem(obj, py_slice);
+            MatFactorShiftType 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 (!_py_slice) {
-            Py_DECREF(py_slice);
+            return (MatFactorShiftType) -1;
         }
-        return result;
+    } else {
+        MatFactorShiftType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (MatFactorShiftType) -1;
+        val = __Pyx_PyInt_As_MatFactorShiftType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    PyErr_Format(PyExc_TypeError,
-        "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name);
-bad:
-    return NULL;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to MatFactorShiftType");
+    return (MatFactorShiftType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to MatFactorShiftType");
+    return (MatFactorShiftType) -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 KSPConvergedReason __Pyx_PyInt_As_KSPConvergedReason(PyObject *x) {
+    const KSPConvergedReason neg_one = (KSPConvergedReason) -1, const_zero = (KSPConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(KSPConvergedReason) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (KSPConvergedReason) 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 (KSPConvergedReason) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(KSPConvergedReason, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(KSPConvergedReason) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPConvergedReason) >= 2 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) (((((KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(KSPConvergedReason) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPConvergedReason) >= 3 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) (((((((KSPConvergedReason)digits[2]) << PyLong_SHIFT) | (KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(KSPConvergedReason) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, 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(KSPConvergedReason) >= 4 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) (((((((((KSPConvergedReason)digits[3]) << PyLong_SHIFT) | (KSPConvergedReason)digits[2]) << PyLong_SHIFT) | (KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)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 (KSPConvergedReason) -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(KSPConvergedReason) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(KSPConvergedReason, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(KSPConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(KSPConvergedReason, 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 (KSPConvergedReason) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(KSPConvergedReason, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(KSPConvergedReason,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(KSPConvergedReason) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) (((KSPConvergedReason)-1)*(((((KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(KSPConvergedReason) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) ((((((KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(KSPConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) (((KSPConvergedReason)-1)*(((((((KSPConvergedReason)digits[2]) << PyLong_SHIFT) | (KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(KSPConvergedReason) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) ((((((((KSPConvergedReason)digits[2]) << PyLong_SHIFT) | (KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(KSPConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, 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(KSPConvergedReason) - 1 > 4 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) (((KSPConvergedReason)-1)*(((((((((KSPConvergedReason)digits[3]) << PyLong_SHIFT) | (KSPConvergedReason)digits[2]) << PyLong_SHIFT) | (KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(KSPConvergedReason) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPConvergedReason, 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(KSPConvergedReason) - 1 > 4 * PyLong_SHIFT) {
+                            return (KSPConvergedReason) ((((((((((KSPConvergedReason)digits[3]) << PyLong_SHIFT) | (KSPConvergedReason)digits[2]) << PyLong_SHIFT) | (KSPConvergedReason)digits[1]) << PyLong_SHIFT) | (KSPConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(KSPConvergedReason) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(KSPConvergedReason, long, PyLong_AsLong(x))
+            } else if (sizeof(KSPConvergedReason) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(KSPConvergedReason, 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);
-    }
+            KSPConvergedReason 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 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 int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
-    if (unlikely(!type)) {
-        PyErr_SetString(PyExc_SystemError, "Missing type object");
-        return 0;
+            return (KSPConvergedReason) -1;
+        }
+    } else {
+        KSPConvergedReason val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (KSPConvergedReason) -1;
+        val = __Pyx_PyInt_As_KSPConvergedReason(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 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");
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to KSPConvergedReason");
+    return (KSPConvergedReason) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to KSPConvergedReason");
+    return (KSPConvergedReason) -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 SNESConvergedReason __Pyx_PyInt_As_SNESConvergedReason(PyObject *x) {
+    const SNESConvergedReason neg_one = (SNESConvergedReason) -1, const_zero = (SNESConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(SNESConvergedReason) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, 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 (SNESConvergedReason) 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 (SNESConvergedReason) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(SNESConvergedReason, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(SNESConvergedReason) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESConvergedReason) >= 2 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) (((((SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(SNESConvergedReason) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESConvergedReason) >= 3 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) (((((((SNESConvergedReason)digits[2]) << PyLong_SHIFT) | (SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(SNESConvergedReason) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, 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(SNESConvergedReason) >= 4 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) (((((((((SNESConvergedReason)digits[3]) << PyLong_SHIFT) | (SNESConvergedReason)digits[2]) << PyLong_SHIFT) | (SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)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 (SNESConvergedReason) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(SNESConvergedReason) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SNESConvergedReason, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(SNESConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SNESConvergedReason, 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 (SNESConvergedReason) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(SNESConvergedReason, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(SNESConvergedReason,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(SNESConvergedReason) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) (((SNESConvergedReason)-1)*(((((SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(SNESConvergedReason) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) ((((((SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(SNESConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) (((SNESConvergedReason)-1)*(((((((SNESConvergedReason)digits[2]) << PyLong_SHIFT) | (SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(SNESConvergedReason) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) ((((((((SNESConvergedReason)digits[2]) << PyLong_SHIFT) | (SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(SNESConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, 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(SNESConvergedReason) - 1 > 4 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) (((SNESConvergedReason)-1)*(((((((((SNESConvergedReason)digits[3]) << PyLong_SHIFT) | (SNESConvergedReason)digits[2]) << PyLong_SHIFT) | (SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(SNESConvergedReason) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESConvergedReason, 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(SNESConvergedReason) - 1 > 4 * PyLong_SHIFT) {
+                            return (SNESConvergedReason) ((((((((((SNESConvergedReason)digits[3]) << PyLong_SHIFT) | (SNESConvergedReason)digits[2]) << PyLong_SHIFT) | (SNESConvergedReason)digits[1]) << PyLong_SHIFT) | (SNESConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(SNESConvergedReason) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SNESConvergedReason, long, PyLong_AsLong(x))
+            } else if (sizeof(SNESConvergedReason) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SNESConvergedReason, 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
+            SNESConvergedReason 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 (SNESConvergedReason) -1;
+        }
     } else {
-        return __Pyx_IterFinish();
+        SNESConvergedReason val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (SNESConvergedReason) -1;
+        val = __Pyx_PyInt_As_SNESConvergedReason(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 SNESConvergedReason");
+    return (SNESConvergedReason) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to SNESConvergedReason");
+    return (SNESConvergedReason) -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 TaoConvergedReason __Pyx_PyInt_As_TaoConvergedReason(PyObject *x) {
+    const TaoConvergedReason neg_one = (TaoConvergedReason) -1, const_zero = (TaoConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(TaoConvergedReason) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (TaoConvergedReason) 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 (TaoConvergedReason) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(TaoConvergedReason, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(TaoConvergedReason) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TaoConvergedReason) >= 2 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) (((((TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)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(TaoConvergedReason) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TaoConvergedReason) >= 3 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) (((((((TaoConvergedReason)digits[2]) << PyLong_SHIFT) | (TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TaoConvergedReason) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, 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(TaoConvergedReason) >= 4 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) (((((((((TaoConvergedReason)digits[3]) << PyLong_SHIFT) | (TaoConvergedReason)digits[2]) << PyLong_SHIFT) | (TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)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 (TaoConvergedReason) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(TaoConvergedReason) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TaoConvergedReason, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(TaoConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TaoConvergedReason, 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;
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (TaoConvergedReason) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(TaoConvergedReason, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(TaoConvergedReason,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(TaoConvergedReason) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TaoConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) (((TaoConvergedReason)-1)*(((((TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(TaoConvergedReason) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TaoConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) ((((((TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(TaoConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TaoConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) (((TaoConvergedReason)-1)*(((((((TaoConvergedReason)digits[2]) << PyLong_SHIFT) | (TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TaoConvergedReason) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TaoConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) ((((((((TaoConvergedReason)digits[2]) << PyLong_SHIFT) | (TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(TaoConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, 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(TaoConvergedReason) - 1 > 4 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) (((TaoConvergedReason)-1)*(((((((((TaoConvergedReason)digits[3]) << PyLong_SHIFT) | (TaoConvergedReason)digits[2]) << PyLong_SHIFT) | (TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TaoConvergedReason) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TaoConvergedReason, 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(TaoConvergedReason) - 1 > 4 * PyLong_SHIFT) {
+                            return (TaoConvergedReason) ((((((((((TaoConvergedReason)digits[3]) << PyLong_SHIFT) | (TaoConvergedReason)digits[2]) << PyLong_SHIFT) | (TaoConvergedReason)digits[1]) << PyLong_SHIFT) | (TaoConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(TaoConvergedReason) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TaoConvergedReason, long, PyLong_AsLong(x))
+            } else if (sizeof(TaoConvergedReason) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TaoConvergedReason, 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
+            TaoConvergedReason 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 (TaoConvergedReason) -1;
         }
-    }
-    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 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);
-}
-
-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;
+        TaoConvergedReason val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (TaoConvergedReason) -1;
+        val = __Pyx_PyInt_As_TaoConvergedReason(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
-    return 0;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to TaoConvergedReason");
+    return (TaoConvergedReason) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to TaoConvergedReason");
+    return (TaoConvergedReason) -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 DMBoundaryType __Pyx_PyInt_As_DMBoundaryType(PyObject *x) {
+    const DMBoundaryType neg_one = (DMBoundaryType) -1, const_zero = (DMBoundaryType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(DMBoundaryType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(DMBoundaryType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (DMBoundaryType) 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 (DMBoundaryType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(DMBoundaryType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(DMBoundaryType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMBoundaryType) >= 2 * PyLong_SHIFT) {
+                            return (DMBoundaryType) (((((DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DMBoundaryType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMBoundaryType) >= 3 * PyLong_SHIFT) {
+                            return (DMBoundaryType) (((((((DMBoundaryType)digits[2]) << PyLong_SHIFT) | (DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DMBoundaryType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, 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(DMBoundaryType) >= 4 * PyLong_SHIFT) {
+                            return (DMBoundaryType) (((((((((DMBoundaryType)digits[3]) << PyLong_SHIFT) | (DMBoundaryType)digits[2]) << PyLong_SHIFT) | (DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0]));
+                        }
+                    }
+                    break;
+            }
 #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 PyObject* __Pyx_PyDict_Keys(PyObject* d) {
-    if (PY_MAJOR_VERSION >= 3)
-        return __Pyx_PyObject_CallMethod1((PyObject*)&PyDict_Type, __pyx_n_s_keys, d);
-    else
-        return PyDict_Keys(d);
-}
-
-static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
-    PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
-}
-
-static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
-    int r;
-    if (!j) return -1;
-    r = PyObject_SetItem(o, j, v);
-    Py_DECREF(j);
-    return r;
-}
-static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, 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) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
-        if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
-            PyObject* old = PyList_GET_ITEM(o, n);
-            Py_INCREF(v);
-            PyList_SET_ITEM(o, n, v);
-            Py_DECREF(old);
-            return 1;
-        }
-    } else {
-        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
-        if (likely(m && m->sq_ass_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 -1;
-                }
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
             }
-            return m->sq_ass_item(o, i, v);
-        }
-    }
-#else
-#if CYTHON_COMPILING_IN_PYPY
-    if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) {
 #else
-    if (is_list || PySequence_Check(o)) {
-#endif
-        return PySequence_SetItem(o, i, v);
-    }
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (DMBoundaryType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
-}
-
-#if !CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values) {
-    return PyObject_CallMethodObjArgs(sep, __pyx_n_s_join, values, NULL);
-}
+            if (sizeof(DMBoundaryType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMBoundaryType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(DMBoundaryType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMBoundaryType, 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 (DMBoundaryType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(DMBoundaryType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(DMBoundaryType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(DMBoundaryType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMBoundaryType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DMBoundaryType) (((DMBoundaryType)-1)*(((((DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(DMBoundaryType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMBoundaryType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DMBoundaryType) ((((((DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(DMBoundaryType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMBoundaryType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DMBoundaryType) (((DMBoundaryType)-1)*(((((((DMBoundaryType)digits[2]) << PyLong_SHIFT) | (DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DMBoundaryType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMBoundaryType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DMBoundaryType) ((((((((DMBoundaryType)digits[2]) << PyLong_SHIFT) | (DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(DMBoundaryType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, 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(DMBoundaryType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DMBoundaryType) (((DMBoundaryType)-1)*(((((((((DMBoundaryType)digits[3]) << PyLong_SHIFT) | (DMBoundaryType)digits[2]) << PyLong_SHIFT) | (DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DMBoundaryType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMBoundaryType, 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(DMBoundaryType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DMBoundaryType) ((((((((((DMBoundaryType)digits[3]) << PyLong_SHIFT) | (DMBoundaryType)digits[2]) << PyLong_SHIFT) | (DMBoundaryType)digits[1]) << PyLong_SHIFT) | (DMBoundaryType)digits[0])));
+                        }
+                    }
+                    break;
+            }
 #endif
-
-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;
-}
-
-static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) {
-    PyObject* value;
-#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
-    value = PyDict_GetItemWithError(d, key);
-    if (unlikely(!value)) {
-        if (unlikely(PyErr_Occurred()))
-            return NULL;
-        value = default_value;
-    }
-    Py_INCREF(value);
+            if (sizeof(DMBoundaryType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMBoundaryType, long, PyLong_AsLong(x))
+            } else if (sizeof(DMBoundaryType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMBoundaryType, 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 (PyString_CheckExact(key) || PyUnicode_CheckExact(key) || PyInt_CheckExact(key)) {
-        value = PyDict_GetItem(d, key);
-        if (unlikely(!value)) {
-            value = default_value;
+            DMBoundaryType 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 (DMBoundaryType) -1;
         }
-        Py_INCREF(value);
     } else {
-        if (default_value == Py_None)
-            default_value = NULL;
-        value = PyObject_CallMethodObjArgs(
-            d, __pyx_n_s_get, key, default_value, NULL);
+        DMBoundaryType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (DMBoundaryType) -1;
+        val = __Pyx_PyInt_As_DMBoundaryType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-#endif
-    return value;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to DMBoundaryType");
+    return (DMBoundaryType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to DMBoundaryType");
+    return (DMBoundaryType) -1;
 }
 
-static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
-    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 *function = PyMethod_GET_FUNCTION(method);
-            result = __Pyx_PyObject_CallOneArg(function, self);
-            Py_DECREF(method);
-            return result;
+/* CIntFromPy */
+                static CYTHON_INLINE DMDAStencilType __Pyx_PyInt_As_DMDAStencilType(PyObject *x) {
+    const DMDAStencilType neg_one = (DMDAStencilType) -1, const_zero = (DMDAStencilType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(DMDAStencilType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(DMDAStencilType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (DMDAStencilType) val;
         }
-    }
+    } else
 #endif
-    result = __Pyx_PyObject_CallNoArg(method);
-    Py_DECREF(method);
-bad:
-    return result;
-}
-
-static CYTHON_INLINE PyObject* __Pyx__PyObject_Pop(PyObject* L) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (Py_TYPE(L) == &PySet_Type) {
-        return PySet_Pop(L);
-    }
+    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 (DMDAStencilType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(DMDAStencilType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(DMDAStencilType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAStencilType) >= 2 * PyLong_SHIFT) {
+                            return (DMDAStencilType) (((((DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DMDAStencilType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAStencilType) >= 3 * PyLong_SHIFT) {
+                            return (DMDAStencilType) (((((((DMDAStencilType)digits[2]) << PyLong_SHIFT) | (DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DMDAStencilType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, 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(DMDAStencilType) >= 4 * PyLong_SHIFT) {
+                            return (DMDAStencilType) (((((((((DMDAStencilType)digits[3]) << PyLong_SHIFT) | (DMDAStencilType)digits[2]) << PyLong_SHIFT) | (DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0]));
+                        }
+                    }
+                    break;
+            }
 #endif
-    return __Pyx_PyObject_CallMethod0(L, __pyx_n_s_pop);
-}
-static CYTHON_INLINE PyObject* __Pyx_PyList_Pop(PyObject* L) {
 #if CYTHON_COMPILING_IN_CPYTHON
-    if (likely(PyList_GET_SIZE(L) > (((PyListObject*)L)->allocated >> 1))) {
-        Py_SIZE(L) -= 1;
-        return PyList_GET_ITEM(L, PyList_GET_SIZE(L));
-    }
+            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 (DMDAStencilType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(DMDAStencilType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAStencilType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(DMDAStencilType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAStencilType, 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 (DMDAStencilType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(DMDAStencilType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(DMDAStencilType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(DMDAStencilType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAStencilType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DMDAStencilType) (((DMDAStencilType)-1)*(((((DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(DMDAStencilType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAStencilType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DMDAStencilType) ((((((DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(DMDAStencilType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAStencilType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DMDAStencilType) (((DMDAStencilType)-1)*(((((((DMDAStencilType)digits[2]) << PyLong_SHIFT) | (DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DMDAStencilType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAStencilType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DMDAStencilType) ((((((((DMDAStencilType)digits[2]) << PyLong_SHIFT) | (DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(DMDAStencilType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, 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(DMDAStencilType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DMDAStencilType) (((DMDAStencilType)-1)*(((((((((DMDAStencilType)digits[3]) << PyLong_SHIFT) | (DMDAStencilType)digits[2]) << PyLong_SHIFT) | (DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DMDAStencilType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAStencilType, 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(DMDAStencilType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DMDAStencilType) ((((((((((DMDAStencilType)digits[3]) << PyLong_SHIFT) | (DMDAStencilType)digits[2]) << PyLong_SHIFT) | (DMDAStencilType)digits[1]) << PyLong_SHIFT) | (DMDAStencilType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(DMDAStencilType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAStencilType, long, PyLong_AsLong(x))
+            } else if (sizeof(DMDAStencilType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAStencilType, 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
+            DMDAStencilType 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_PyObject_CallMethod0(L, __pyx_n_s_pop);
+            return (DMDAStencilType) -1;
+        }
+    } else {
+        DMDAStencilType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (DMDAStencilType) -1;
+        val = __Pyx_PyInt_As_DMDAStencilType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to DMDAStencilType");
+    return (DMDAStencilType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to DMDAStencilType");
+    return (DMDAStencilType) -1;
 }
 
-static CYTHON_INLINE int __Pyx_PyObject_SetSlice(PyObject* obj, PyObject* value,
-        Py_ssize_t cstart, Py_ssize_t cstop,
-        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
-        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyMappingMethods* mp;
+/* CIntFromPy */
+                static CYTHON_INLINE DMDAInterpolationType __Pyx_PyInt_As_DMDAInterpolationType(PyObject *x) {
+    const DMDAInterpolationType neg_one = (DMDAInterpolationType) -1, const_zero = (DMDAInterpolationType) 0;
+    const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
-    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
-    if (likely(ms && ms->sq_ass_slice)) {
-        if (!has_cstart) {
-            if (_py_start && (*_py_start != Py_None)) {
-                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
-                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
-            } else
-                cstart = 0;
-        }
-        if (!has_cstop) {
-            if (_py_stop && (*_py_stop != Py_None)) {
-                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
-                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
-            } else
-                cstop = PY_SSIZE_T_MAX;
-        }
-        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
-            Py_ssize_t l = ms->sq_length(obj);
-            if (likely(l >= 0)) {
-                if (cstop < 0) {
-                    cstop += l;
-                    if (cstop < 0) cstop = 0;
-                }
-                if (cstart < 0) {
-                    cstart += l;
-                    if (cstart < 0) cstart = 0;
-                }
-            } else {
-                if (PyErr_ExceptionMatches(PyExc_OverflowError))
-                    PyErr_Clear();
-                else
-                    goto bad;
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(DMDAInterpolationType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
             }
+            return (DMDAInterpolationType) val;
         }
-        return ms->sq_ass_slice(obj, cstart, cstop, value);
-    }
+    } else
 #endif
-    mp = Py_TYPE(obj)->tp_as_mapping;
-    if (likely(mp && mp->mp_ass_subscript))
+    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 (DMDAInterpolationType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(DMDAInterpolationType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAInterpolationType) >= 2 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) (((((DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DMDAInterpolationType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAInterpolationType) >= 3 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) (((((((DMDAInterpolationType)digits[2]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DMDAInterpolationType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, 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(DMDAInterpolationType) >= 4 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) (((((((((DMDAInterpolationType)digits[3]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[2]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0]));
+                        }
+                    }
+                    break;
+            }
 #endif
-    {
-        int result;
-        PyObject *py_slice, *py_start, *py_stop;
-        if (_py_slice) {
-            py_slice = *_py_slice;
-        } else {
-            PyObject* owned_start = NULL;
-            PyObject* owned_stop = NULL;
-            if (_py_start) {
-                py_start = *_py_start;
-            } else {
-                if (has_cstart) {
-                    owned_start = py_start = PyInt_FromSsize_t(cstart);
-                    if (unlikely(!py_start)) goto bad;
-                } else
-                    py_start = Py_None;
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
             }
-            if (_py_stop) {
-                py_stop = *_py_stop;
-            } else {
-                if (has_cstop) {
-                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
-                    if (unlikely(!py_stop)) {
-                        Py_XDECREF(owned_start);
-                        goto bad;
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (DMDAInterpolationType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(DMDAInterpolationType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAInterpolationType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(DMDAInterpolationType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAInterpolationType, 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 (DMDAInterpolationType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(DMDAInterpolationType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(DMDAInterpolationType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAInterpolationType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) (((DMDAInterpolationType)-1)*(((((DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0])));
+                        }
                     }
-                } else
-                    py_stop = Py_None;
+                    break;
+                case 2:
+                    if (8 * sizeof(DMDAInterpolationType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAInterpolationType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) ((((((DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(DMDAInterpolationType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAInterpolationType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) (((DMDAInterpolationType)-1)*(((((((DMDAInterpolationType)digits[2]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DMDAInterpolationType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAInterpolationType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) ((((((((DMDAInterpolationType)digits[2]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(DMDAInterpolationType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, 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(DMDAInterpolationType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) (((DMDAInterpolationType)-1)*(((((((((DMDAInterpolationType)digits[3]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[2]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DMDAInterpolationType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAInterpolationType, 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(DMDAInterpolationType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DMDAInterpolationType) ((((((((((DMDAInterpolationType)digits[3]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[2]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[1]) << PyLong_SHIFT) | (DMDAInterpolationType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(DMDAInterpolationType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAInterpolationType, long, PyLong_AsLong(x))
+            } else if (sizeof(DMDAInterpolationType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAInterpolationType, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
-            py_slice = PySlice_New(py_start, py_stop, Py_None);
-            Py_XDECREF(owned_start);
-            Py_XDECREF(owned_stop);
-            if (unlikely(!py_slice)) goto bad;
         }
-#if CYTHON_COMPILING_IN_CPYTHON
-        result = mp->mp_ass_subscript(obj, py_slice, value);
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-        result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice);
+            DMDAInterpolationType 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 (!_py_slice) {
-            Py_DECREF(py_slice);
+            return (DMDAInterpolationType) -1;
         }
-        return result;
+    } else {
+        DMDAInterpolationType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (DMDAInterpolationType) -1;
+        val = __Pyx_PyInt_As_DMDAInterpolationType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    PyErr_Format(PyExc_TypeError,
-        "'%.200s' object does not support slice %.10s",
-        Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion");
-bad:
-    return -1;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to DMDAInterpolationType");
+    return (DMDAInterpolationType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to DMDAInterpolationType");
+    return (DMDAInterpolationType) -1;
 }
 
-#if CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) {
-    Py_ssize_t start = *_start, stop = *_stop, length = *_length;
-    if (start < 0) {
-        start += length;
-        if (start < 0)
-            start = 0;
-    }
-    if (stop < 0)
-        stop += length;
-    else if (stop > length)
-        stop = length;
-    *_length = stop - start;
-    *_start = start;
-    *_stop = stop;
-}
-static CYTHON_INLINE void __Pyx_copy_object_array(PyObject** CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
-    PyObject *v;
-    Py_ssize_t i;
-    for (i = 0; i < length; i++) {
-        v = dest[i] = src[i];
-        Py_INCREF(v);
-    }
-}
-static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(
-            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
-    PyObject* dest;
-    Py_ssize_t length = PyList_GET_SIZE(src);
-    __Pyx_crop_slice(&start, &stop, &length);
-    if (unlikely(length <= 0))
-        return PyList_New(0);
-    dest = PyList_New(length);
-    if (unlikely(!dest))
-        return NULL;
-    __Pyx_copy_object_array(
-        ((PyListObject*)src)->ob_item + start,
-        ((PyListObject*)dest)->ob_item,
-        length);
-    return dest;
-}
-static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
-            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
-    PyObject* dest;
-    Py_ssize_t length = PyTuple_GET_SIZE(src);
-    __Pyx_crop_slice(&start, &stop, &length);
-    if (unlikely(length <= 0))
-        return PyTuple_New(0);
-    dest = PyTuple_New(length);
-    if (unlikely(!dest))
-        return NULL;
-    __Pyx_copy_object_array(
-        ((PyTupleObject*)src)->ob_item + start,
-        ((PyTupleObject*)dest)->ob_item,
-        length);
-    return dest;
-}
+/* CIntFromPy */
+                static CYTHON_INLINE DMDAElementType __Pyx_PyInt_As_DMDAElementType(PyObject *x) {
+    const DMDAElementType neg_one = (DMDAElementType) -1, const_zero = (DMDAElementType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(DMDAElementType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(DMDAElementType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (DMDAElementType) 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 (DMDAElementType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(DMDAElementType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(DMDAElementType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAElementType) >= 2 * PyLong_SHIFT) {
+                            return (DMDAElementType) (((((DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DMDAElementType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAElementType) >= 3 * PyLong_SHIFT) {
+                            return (DMDAElementType) (((((((DMDAElementType)digits[2]) << PyLong_SHIFT) | (DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DMDAElementType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, 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(DMDAElementType) >= 4 * PyLong_SHIFT) {
+                            return (DMDAElementType) (((((((((DMDAElementType)digits[3]) << PyLong_SHIFT) | (DMDAElementType)digits[2]) << PyLong_SHIFT) | (DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0]));
+                        }
+                    }
+                    break;
+            }
 #endif
-
-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 (DMDAElementType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-        result = __Pyx_GetBuiltinName(name);
-    }
-    return result;
-}
-
-static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
-#if PY_VERSION_HEX >= 0x02070000
-    PyObject *ob = PyCapsule_New(vtable, 0, 0);
+            if (sizeof(DMDAElementType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAElementType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(DMDAElementType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAElementType, 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 (DMDAElementType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(DMDAElementType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(DMDAElementType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(DMDAElementType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAElementType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DMDAElementType) (((DMDAElementType)-1)*(((((DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(DMDAElementType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAElementType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DMDAElementType) ((((((DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(DMDAElementType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAElementType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DMDAElementType) (((DMDAElementType)-1)*(((((((DMDAElementType)digits[2]) << PyLong_SHIFT) | (DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DMDAElementType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DMDAElementType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DMDAElementType) ((((((((DMDAElementType)digits[2]) << PyLong_SHIFT) | (DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(DMDAElementType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, 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(DMDAElementType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DMDAElementType) (((DMDAElementType)-1)*(((((((((DMDAElementType)digits[3]) << PyLong_SHIFT) | (DMDAElementType)digits[2]) << PyLong_SHIFT) | (DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DMDAElementType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DMDAElementType, 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(DMDAElementType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DMDAElementType) ((((((((((DMDAElementType)digits[3]) << PyLong_SHIFT) | (DMDAElementType)digits[2]) << PyLong_SHIFT) | (DMDAElementType)digits[1]) << PyLong_SHIFT) | (DMDAElementType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(DMDAElementType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAElementType, long, PyLong_AsLong(x))
+            } else if (sizeof(DMDAElementType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DMDAElementType, 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
-    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+            DMDAElementType 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 (!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;
+            return (DMDAElementType) -1;
+        }
+    } else {
+        DMDAElementType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (DMDAElementType) -1;
+        val = __Pyx_PyInt_As_DMDAElementType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to DMDAElementType");
+    return (DMDAElementType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to DMDAElementType");
+    return (DMDAElementType) -1;
 }
 
-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);
+/* CIntFromPy */
+                static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *x) {
+    const PetscClassId neg_one = (PetscClassId) -1, const_zero = (PetscClassId) 0;
+    const int is_unsigned = neg_one > const_zero;
 #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;
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PetscClassId) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PetscClassId, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PetscClassId) val;
         }
-        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
+#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 (PetscClassId) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PetscClassId, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PetscClassId) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscClassId) >= 2 * PyLong_SHIFT) {
+                            return (PetscClassId) (((((PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscClassId) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscClassId) >= 3 * PyLong_SHIFT) {
+                            return (PetscClassId) (((((((PetscClassId)digits[2]) << PyLong_SHIFT) | (PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscClassId) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, 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(PetscClassId) >= 4 * PyLong_SHIFT) {
+                            return (PetscClassId) (((((((((PetscClassId)digits[3]) << PyLong_SHIFT) | (PetscClassId)digits[2]) << PyLong_SHIFT) | (PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-        metaclass = &PyType_Type;
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PetscClassId) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #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;
+            if (sizeof(PetscClassId) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscClassId, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PetscClassId) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscClassId, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
             }
-            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();
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscClassId) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PetscClassId, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PetscClassId,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PetscClassId) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscClassId) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscClassId) (((PetscClassId)-1)*(((((PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PetscClassId) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscClassId) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscClassId) ((((((PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PetscClassId) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscClassId) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscClassId) (((PetscClassId)-1)*(((((((PetscClassId)digits[2]) << PyLong_SHIFT) | (PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscClassId) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscClassId) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscClassId) ((((((((PetscClassId)digits[2]) << PyLong_SHIFT) | (PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PetscClassId) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, 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(PetscClassId) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscClassId) (((PetscClassId)-1)*(((((((((PetscClassId)digits[3]) << PyLong_SHIFT) | (PetscClassId)digits[2]) << PyLong_SHIFT) | (PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscClassId) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscClassId, 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(PetscClassId) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscClassId) ((((((((((PetscClassId)digits[3]) << PyLong_SHIFT) | (PetscClassId)digits[2]) << PyLong_SHIFT) | (PetscClassId)digits[1]) << PyLong_SHIFT) | (PetscClassId)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PetscClassId) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscClassId, long, PyLong_AsLong(x))
+            } else if (sizeof(PetscClassId) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscClassId, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-    } 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 CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PetscClassId 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 (PetscClassId) -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);
+        PetscClassId val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PetscClassId) -1;
+        val = __Pyx_PyInt_As_PetscClassId(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    Py_XDECREF(owned_metaclass);
-    return result;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PetscClassId");
+    return (PetscClassId) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PetscClassId");
+    return (PetscClassId) -1;
 }
 
-static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
-    PyObject* fake_module;
-    PyTypeObject* cached_type = NULL;
-    fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
-    if (!fake_module) return NULL;
-    Py_INCREF(fake_module);
-    cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
-    if (cached_type) {
-        if (!PyType_Check((PyObject*)cached_type)) {
-            PyErr_Format(PyExc_TypeError,
-                "Shared Cython type %.200s is not a type object",
-                type->tp_name);
-            goto bad;
-        }
-        if (cached_type->tp_basicsize != type->tp_basicsize) {
-            PyErr_Format(PyExc_TypeError,
-                "Shared Cython type %.200s has the wrong size, try recompiling",
-                type->tp_name);
-            goto bad;
+/* CIntFromPy */
+                static CYTHON_INLINE PetscViewerFormat __Pyx_PyInt_As_PetscViewerFormat(PyObject *x) {
+    const PetscViewerFormat neg_one = (PetscViewerFormat) -1, const_zero = (PetscViewerFormat) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PetscViewerFormat) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PetscViewerFormat) val;
         }
-    } else {
-        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
-        PyErr_Clear();
-        if (PyType_Ready(type) < 0) goto bad;
-        if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
-            goto bad;
-        Py_INCREF(type);
-        cached_type = type;
-    }
-done:
-    Py_DECREF(fake_module);
-    return cached_type;
-bad:
-    Py_XDECREF(cached_type);
-    cached_type = NULL;
-    goto done;
-}
-
-static PyObject *
-__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
-{
-    if (unlikely(op->func_doc == NULL)) {
-        if (op->func.m_ml->ml_doc) {
-#if PY_MAJOR_VERSION >= 3
-            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
+    } 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 (PetscViewerFormat) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PetscViewerFormat, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PetscViewerFormat) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscViewerFormat) >= 2 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) (((((PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscViewerFormat) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscViewerFormat) >= 3 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) (((((((PetscViewerFormat)digits[2]) << PyLong_SHIFT) | (PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscViewerFormat) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, 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(PetscViewerFormat) >= 4 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) (((((((((PetscViewerFormat)digits[3]) << PyLong_SHIFT) | (PetscViewerFormat)digits[2]) << PyLong_SHIFT) | (PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PetscViewerFormat) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-            if (unlikely(op->func_doc == NULL))
-                return NULL;
+            if (sizeof(PetscViewerFormat) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscViewerFormat, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PetscViewerFormat) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscViewerFormat, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
         } else {
-            Py_INCREF(Py_None);
-            return Py_None;
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscViewerFormat) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PetscViewerFormat, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PetscViewerFormat,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PetscViewerFormat) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscViewerFormat) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) (((PetscViewerFormat)-1)*(((((PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PetscViewerFormat) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscViewerFormat) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) ((((((PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PetscViewerFormat) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscViewerFormat) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) (((PetscViewerFormat)-1)*(((((((PetscViewerFormat)digits[2]) << PyLong_SHIFT) | (PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscViewerFormat) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscViewerFormat) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) ((((((((PetscViewerFormat)digits[2]) << PyLong_SHIFT) | (PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PetscViewerFormat) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, 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(PetscViewerFormat) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) (((PetscViewerFormat)-1)*(((((((((PetscViewerFormat)digits[3]) << PyLong_SHIFT) | (PetscViewerFormat)digits[2]) << PyLong_SHIFT) | (PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscViewerFormat) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscViewerFormat, 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(PetscViewerFormat) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscViewerFormat) ((((((((((PetscViewerFormat)digits[3]) << PyLong_SHIFT) | (PetscViewerFormat)digits[2]) << PyLong_SHIFT) | (PetscViewerFormat)digits[1]) << PyLong_SHIFT) | (PetscViewerFormat)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PetscViewerFormat) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscViewerFormat, long, PyLong_AsLong(x))
+            } else if (sizeof(PetscViewerFormat) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscViewerFormat, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-    }
-    Py_INCREF(op->func_doc);
-    return op->func_doc;
-}
-static int
-__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp = op->func_doc;
-    if (value == NULL) {
-        value = Py_None;
-    }
-    Py_INCREF(value);
-    op->func_doc = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op)
-{
-    if (unlikely(op->func_name == NULL)) {
-#if PY_MAJOR_VERSION >= 3
-        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
+            PetscViewerFormat 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 (unlikely(op->func_name == NULL))
-            return NULL;
+            return (PetscViewerFormat) -1;
+        }
+    } else {
+        PetscViewerFormat val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PetscViewerFormat) -1;
+        val = __Pyx_PyInt_As_PetscViewerFormat(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    Py_INCREF(op->func_name);
-    return op->func_name;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PetscViewerFormat");
+    return (PetscViewerFormat) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PetscViewerFormat");
+    return (PetscViewerFormat) -1;
 }
-static int
-__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-#if PY_MAJOR_VERSION >= 3
-    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
-#else
-    if (unlikely(value == NULL || !PyString_Check(value))) {
+
+/* CIntFromPy */
+                static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {
+    const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(unsigned long) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(unsigned long, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (unsigned long) val;
+        }
+    } else
 #endif
-        PyErr_SetString(PyExc_TypeError,
-                        "__name__ must be set to a string object");
-        return -1;
-    }
-    tmp = op->func_name;
-    Py_INCREF(value);
-    op->func_name = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op)
-{
-    Py_INCREF(op->func_qualname);
-    return op->func_qualname;
-}
-static int
-__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-#if PY_MAJOR_VERSION >= 3
-    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
+    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 (unsigned long) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(unsigned long, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(unsigned long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) >= 2 * PyLong_SHIFT) {
+                            return (unsigned long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) >= 3 * PyLong_SHIFT) {
+                            return (unsigned long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) >= 4 * PyLong_SHIFT) {
+                            return (unsigned long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    if (unlikely(value == NULL || !PyString_Check(value))) {
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (unsigned long) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-        PyErr_SetString(PyExc_TypeError,
-                        "__qualname__ must be set to a string object");
-        return -1;
-    }
-    tmp = op->func_qualname;
-    Py_INCREF(value);
-    op->func_qualname = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
-{
-    PyObject *self;
-    self = m->func_closure;
-    if (self == NULL)
-        self = Py_None;
-    Py_INCREF(self);
-    return self;
-}
-static PyObject *
-__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op)
-{
-    if (unlikely(op->func_dict == NULL)) {
-        op->func_dict = PyDict_New();
-        if (unlikely(op->func_dict == NULL))
-            return NULL;
-    }
-    Py_INCREF(op->func_dict);
-    return op->func_dict;
-}
-static int
-__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-    if (unlikely(value == NULL)) {
-        PyErr_SetString(PyExc_TypeError,
-               "function's dictionary may not be deleted");
-        return -1;
-    }
-    if (unlikely(!PyDict_Check(value))) {
-        PyErr_SetString(PyExc_TypeError,
-               "setting function's dictionary to a non-dict");
-        return -1;
-    }
-    tmp = op->func_dict;
-    Py_INCREF(value);
-    op->func_dict = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op)
-{
-    Py_INCREF(op->func_globals);
-    return op->func_globals;
-}
-static PyObject *
-__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op)
-{
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-static PyObject *
-__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op)
-{
-    PyObject* result = (op->func_code) ? op->func_code : Py_None;
-    Py_INCREF(result);
-    return result;
-}
-static int
-__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
-    PyObject *res = op->defaults_getter((PyObject *) op);
-    if (unlikely(!res))
-        return -1;
-    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
-    Py_INCREF(op->defaults_tuple);
-    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
-    Py_INCREF(op->defaults_kwdict);
-    Py_DECREF(res);
-    return 0;
-}
-static int
-__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) {
-    PyObject* tmp;
-    if (!value) {
-        value = Py_None;
-    } else if (value != Py_None && !PyTuple_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "__defaults__ must be set to a tuple object");
-        return -1;
-    }
-    Py_INCREF(value);
-    tmp = op->defaults_tuple;
-    op->defaults_tuple = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) {
-    PyObject* result = op->defaults_tuple;
-    if (unlikely(!result)) {
-        if (op->defaults_getter) {
-            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
-            result = op->defaults_tuple;
+            if (sizeof(unsigned long) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
         } else {
-            result = Py_None;
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (unsigned long) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(unsigned long, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(unsigned long,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(unsigned long) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) {
+                            return (unsigned long) (((unsigned long)-1)*(((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(unsigned long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) {
+                            return (unsigned long) ((((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) {
+                            return (unsigned long) (((unsigned long)-1)*(((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) {
+                            return (unsigned long) ((((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) - 1 > 4 * PyLong_SHIFT) {
+                            return (unsigned long) (((unsigned long)-1)*(((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) - 1 > 4 * PyLong_SHIFT) {
+                            return (unsigned long) ((((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(unsigned long) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned long, long, PyLong_AsLong(x))
+            } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned long, 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
+            unsigned long 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 (unsigned long) -1;
+        }
+    } else {
+        unsigned long val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (unsigned long) -1;
+        val = __Pyx_PyInt_As_unsigned_long(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    Py_INCREF(result);
-    return result;
-}
-static int
-__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) {
-    PyObject* tmp;
-    if (!value) {
-        value = Py_None;
-    } else if (value != Py_None && !PyDict_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "__kwdefaults__ must be set to a dict object");
-        return -1;
-    }
-    Py_INCREF(value);
-    tmp = op->defaults_kwdict;
-    op->defaults_kwdict = value;
-    Py_XDECREF(tmp);
-    return 0;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to unsigned long");
+    return (unsigned long) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to unsigned long");
+    return (unsigned long) -1;
 }
-static PyObject *
-__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) {
-    PyObject* result = op->defaults_kwdict;
-    if (unlikely(!result)) {
-        if (op->defaults_getter) {
-            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
-            result = op->defaults_kwdict;
+
+/* 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 {
-            result = Py_None;
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PetscBool) val;
         }
-    }
-    Py_INCREF(result);
-    return result;
-}
-static int
-__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) {
-    PyObject* tmp;
-    if (!value || value == Py_None) {
-        value = NULL;
-    } else if (!PyDict_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "__annotations__ must be set to a dict object");
-        return -1;
-    }
-    Py_XINCREF(value);
-    tmp = op->func_annotations;
-    op->func_annotations = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) {
-    PyObject* result = op->func_annotations;
-    if (unlikely(!result)) {
-        result = PyDict_New();
-        if (unlikely(!result)) return NULL;
-        op->func_annotations = result;
-    }
-    Py_INCREF(result);
-    return result;
-}
-static PyGetSetDef __pyx_CyFunction_getsets[] = {
-    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
-    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
-    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
-    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
-    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
-    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
-    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
-    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
-    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
-    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
-    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
-    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
-    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
-    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
-    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
-    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
-    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
-    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
-    {0, 0, 0, 0, 0}
-};
-static PyMemberDef __pyx_CyFunction_members[] = {
-    {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0},
-    {0, 0, 0,  0, 0}
-};
-static PyObject *
-__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
-{
-#if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    } 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
-    return PyString_FromString(m->func.m_ml->ml_name);
+            {
+                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
-}
-static PyMethodDef __pyx_CyFunction_methods[] = {
-    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
-    {0, 0, 0, 0}
-};
-#if PY_VERSION_HEX < 0x030500A0
-#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
+            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
-#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist)
+            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
-static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
-                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
-    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
-    if (op == NULL)
-        return NULL;
-    op->flags = flags;
-    __Pyx_CyFunction_weakreflist(op) = NULL;
-    op->func.m_ml = ml;
-    op->func.m_self = (PyObject *) op;
-    Py_XINCREF(closure);
-    op->func_closure = closure;
-    Py_XINCREF(module);
-    op->func.m_module = module;
-    op->func_dict = NULL;
-    op->func_name = NULL;
-    Py_INCREF(qualname);
-    op->func_qualname = qualname;
-    op->func_doc = NULL;
-    op->func_classobj = NULL;
-    op->func_globals = globals;
-    Py_INCREF(op->func_globals);
-    Py_XINCREF(code);
-    op->func_code = code;
-    op->defaults_pyobjects = 0;
-    op->defaults = NULL;
-    op->defaults_tuple = NULL;
-    op->defaults_kwdict = NULL;
-    op->defaults_getter = NULL;
-    op->func_annotations = NULL;
-    PyObject_GC_Track(op);
-    return (PyObject *) op;
-}
-static int
-__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
-{
-    Py_CLEAR(m->func_closure);
-    Py_CLEAR(m->func.m_module);
-    Py_CLEAR(m->func_dict);
-    Py_CLEAR(m->func_name);
-    Py_CLEAR(m->func_qualname);
-    Py_CLEAR(m->func_doc);
-    Py_CLEAR(m->func_globals);
-    Py_CLEAR(m->func_code);
-    Py_CLEAR(m->func_classobj);
-    Py_CLEAR(m->defaults_tuple);
-    Py_CLEAR(m->defaults_kwdict);
-    Py_CLEAR(m->func_annotations);
-    if (m->defaults) {
-        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
-        int i;
-        for (i = 0; i < m->defaults_pyobjects; i++)
-            Py_XDECREF(pydefaults[i]);
-        PyMem_Free(m->defaults);
-        m->defaults = NULL;
-    }
-    return 0;
-}
-static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
-{
-    PyObject_GC_UnTrack(m);
-    if (__Pyx_CyFunction_weakreflist(m) != NULL)
-        PyObject_ClearWeakRefs((PyObject *) m);
-    __Pyx_CyFunction_clear(m);
-    PyObject_GC_Del(m);
-}
-static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
-{
-    Py_VISIT(m->func_closure);
-    Py_VISIT(m->func.m_module);
-    Py_VISIT(m->func_dict);
-    Py_VISIT(m->func_name);
-    Py_VISIT(m->func_qualname);
-    Py_VISIT(m->func_doc);
-    Py_VISIT(m->func_globals);
-    Py_VISIT(m->func_code);
-    Py_VISIT(m->func_classobj);
-    Py_VISIT(m->defaults_tuple);
-    Py_VISIT(m->defaults_kwdict);
-    if (m->defaults) {
-        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
-        int i;
-        for (i = 0; i < m->defaults_pyobjects; i++)
-            Py_VISIT(pydefaults[i]);
-    }
-    return 0;
-}
-static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
-{
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
-        Py_INCREF(func);
-        return func;
-    }
-    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
-        if (type == NULL)
-            type = (PyObject *)(Py_TYPE(obj));
-        return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
+            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;
     }
-    if (obj == Py_None)
-        obj = NULL;
-    return __Pyx_PyMethod_New(func, obj, type);
+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;
 }
-static PyObject*
-__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
-{
-#if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromFormat("<cyfunction %U at %p>",
-                                op->func_qualname, (void *)op);
+
+/* CIntFromPy */
+                static CYTHON_INLINE ISGlobalToLocalMappingType __Pyx_PyInt_As_ISGlobalToLocalMappingType(PyObject *x) {
+    const ISGlobalToLocalMappingType neg_one = (ISGlobalToLocalMappingType) -1, const_zero = (ISGlobalToLocalMappingType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(ISGlobalToLocalMappingType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (ISGlobalToLocalMappingType) 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 (ISGlobalToLocalMappingType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingType) >= 2 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) (((((ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingType) >= 3 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) (((((((ISGlobalToLocalMappingType)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, 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(ISGlobalToLocalMappingType) >= 4 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) (((((((((ISGlobalToLocalMappingType)digits[3]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    return PyString_FromFormat("<cyfunction %s at %p>",
-                               PyString_AsString(op->func_qualname), (void *)op);
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (ISGlobalToLocalMappingType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-}
-#if CYTHON_COMPILING_IN_PYPY
-static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
-    PyCFunctionObject* f = (PyCFunctionObject*)func;
-    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
-    PyObject *self = PyCFunction_GET_SELF(func);
-    Py_ssize_t size;
-    switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) {
-    case METH_VARARGS:
-        if (likely(kw == NULL) || PyDict_Size(kw) == 0)
-            return (*meth)(self, arg);
-        break;
-    case METH_VARARGS | METH_KEYWORDS:
-        return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
-    case METH_NOARGS:
-        if (likely(kw == NULL) || PyDict_Size(kw) == 0) {
-            size = PyTuple_GET_SIZE(arg);
-            if (size == 0)
-                return (*meth)(self, NULL);
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
-                f->m_ml->ml_name, size);
-            return NULL;
+            if (sizeof(ISGlobalToLocalMappingType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ISGlobalToLocalMappingType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(ISGlobalToLocalMappingType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ISGlobalToLocalMappingType, 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 (ISGlobalToLocalMappingType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 2 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) (((ISGlobalToLocalMappingType)-1)*(((((ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 2 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) ((((((ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 3 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) (((ISGlobalToLocalMappingType)-1)*(((((((ISGlobalToLocalMappingType)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 3 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) ((((((((ISGlobalToLocalMappingType)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, 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(ISGlobalToLocalMappingType) - 1 > 4 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) (((ISGlobalToLocalMappingType)-1)*(((((((((ISGlobalToLocalMappingType)digits[3]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(ISGlobalToLocalMappingType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingType, 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(ISGlobalToLocalMappingType) - 1 > 4 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingType) ((((((((((ISGlobalToLocalMappingType)digits[3]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(ISGlobalToLocalMappingType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ISGlobalToLocalMappingType, long, PyLong_AsLong(x))
+            } else if (sizeof(ISGlobalToLocalMappingType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ISGlobalToLocalMappingType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-        break;
-    case METH_O:
-        if (likely(kw == NULL) || PyDict_Size(kw) == 0) {
-            size = PyTuple_GET_SIZE(arg);
-            if (size == 1)
-                return (*meth)(self, PyTuple_GET_ITEM(arg, 0));
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
-                f->m_ml->ml_name, size);
-            return NULL;
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            ISGlobalToLocalMappingType 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 (ISGlobalToLocalMappingType) -1;
         }
-        break;
-    default:
-        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
-                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
-                        "longer supported!");
-        return NULL;
+    } else {
+        ISGlobalToLocalMappingType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (ISGlobalToLocalMappingType) -1;
+        val = __Pyx_PyInt_As_ISGlobalToLocalMappingType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
-                 f->m_ml->ml_name);
-    return NULL;
-}
-#else
-static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
-	return PyCFunction_Call(func, arg, kw);
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to ISGlobalToLocalMappingType");
+    return (ISGlobalToLocalMappingType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to ISGlobalToLocalMappingType");
+    return (ISGlobalToLocalMappingType) -1;
 }
-#endif
-static PyTypeObject __pyx_CyFunctionType_type = {
-    PyVarObject_HEAD_INIT(0, 0)
-    "cython_function_or_method",
-    sizeof(__pyx_CyFunctionObject),
-    0,
-    (destructor) __Pyx_CyFunction_dealloc,
-    0,
-    0,
-    0,
+
+/* CIntFromPy */
+                static CYTHON_INLINE VecOption __Pyx_PyInt_As_VecOption(PyObject *x) {
+    const VecOption neg_one = (VecOption) -1, const_zero = (VecOption) 0;
+    const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
-    0,
-#else
-    0,
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(VecOption) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(VecOption, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (VecOption) val;
+        }
+    } else
 #endif
-    (reprfunc) __Pyx_CyFunction_repr,
-    0,
-    0,
-    0,
-    0,
-    __Pyx_CyFunction_Call,
-    0,
-    0,
-    0,
-    0,
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
-    0,
-    (traverseproc) __Pyx_CyFunction_traverse,
-    (inquiry) __Pyx_CyFunction_clear,
-    0,
-#if PY_VERSION_HEX < 0x030500A0
-    offsetof(__pyx_CyFunctionObject, func_weakreflist),
+    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 (VecOption) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(VecOption, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(VecOption) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(VecOption) >= 2 * PyLong_SHIFT) {
+                            return (VecOption) (((((VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(VecOption) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(VecOption) >= 3 * PyLong_SHIFT) {
+                            return (VecOption) (((((((VecOption)digits[2]) << PyLong_SHIFT) | (VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(VecOption) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, 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(VecOption) >= 4 * PyLong_SHIFT) {
+                            return (VecOption) (((((((((VecOption)digits[3]) << PyLong_SHIFT) | (VecOption)digits[2]) << PyLong_SHIFT) | (VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    offsetof(PyCFunctionObject, m_weakreflist),
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (VecOption) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-    0,
-    0,
-    __pyx_CyFunction_methods,
-    __pyx_CyFunction_members,
-    __pyx_CyFunction_getsets,
-    0,
-    0,
-    __Pyx_CyFunction_descr_get,
-    0,
-    offsetof(__pyx_CyFunctionObject, func_dict),
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-#if PY_VERSION_HEX >= 0x030400a1
-    0,
+            if (sizeof(VecOption) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(VecOption, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(VecOption) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(VecOption, 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 (VecOption) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(VecOption, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(VecOption,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(VecOption) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(VecOption) - 1 > 2 * PyLong_SHIFT) {
+                            return (VecOption) (((VecOption)-1)*(((((VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(VecOption) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(VecOption) - 1 > 2 * PyLong_SHIFT) {
+                            return (VecOption) ((((((VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(VecOption) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(VecOption) - 1 > 3 * PyLong_SHIFT) {
+                            return (VecOption) (((VecOption)-1)*(((((((VecOption)digits[2]) << PyLong_SHIFT) | (VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(VecOption) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(VecOption) - 1 > 3 * PyLong_SHIFT) {
+                            return (VecOption) ((((((((VecOption)digits[2]) << PyLong_SHIFT) | (VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(VecOption) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, 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(VecOption) - 1 > 4 * PyLong_SHIFT) {
+                            return (VecOption) (((VecOption)-1)*(((((((((VecOption)digits[3]) << PyLong_SHIFT) | (VecOption)digits[2]) << PyLong_SHIFT) | (VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(VecOption) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(VecOption, 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(VecOption) - 1 > 4 * PyLong_SHIFT) {
+                            return (VecOption) ((((((((((VecOption)digits[3]) << PyLong_SHIFT) | (VecOption)digits[2]) << PyLong_SHIFT) | (VecOption)digits[1]) << PyLong_SHIFT) | (VecOption)digits[0])));
+                        }
+                    }
+                    break;
+            }
 #endif
-};
-static int __Pyx_CyFunction_init(void) {
-#if !CYTHON_COMPILING_IN_PYPY
-    __pyx_CyFunctionType_type.tp_call = PyCFunction_Call;
+            if (sizeof(VecOption) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(VecOption, long, PyLong_AsLong(x))
+            } else if (sizeof(VecOption) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(VecOption, 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
+            VecOption 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
-    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
-    if (__pyx_CyFunctionType == NULL) {
-        return -1;
+            return (VecOption) -1;
+        }
+    } else {
+        VecOption val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (VecOption) -1;
+        val = __Pyx_PyInt_As_VecOption(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return 0;
-}
-static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->defaults = PyMem_Malloc(size);
-    if (!m->defaults)
-        return PyErr_NoMemory();
-    memset(m->defaults, 0, size);
-    m->defaults_pyobjects = pyobjects;
-    return m->defaults;
-}
-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->defaults_tuple = tuple;
-    Py_INCREF(tuple);
-}
-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->defaults_kwdict = dict;
-    Py_INCREF(dict);
-}
-static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->func_annotations = dict;
-    Py_INCREF(dict);
-}
-
-static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) {
-    PyObject *result;
-    result = __Pyx_PyObject_GetAttrStr(nmspace, name);
-    if (!result)
-        result = __Pyx_GetModuleGlobalName(name);
-    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 VecOption");
+    return (VecOption) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to VecOption");
+    return (VecOption) -1;
 }
-#endif
 
+/* 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
-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(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;
         }
-        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;
+        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;
     }
-bad:
-    Py_XDECREF(cleanup_func);
-    Py_XDECREF(atexit);
-    Py_XDECREF(reg);
-    Py_XDECREF(args);
-    Py_XDECREF(res);
-    return ret;
+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
-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 (NormType) -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(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 {
-            return mid;
+#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;
         }
-    }
-    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;
+        NormType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (NormType) -1;
+        val = __Pyx_PyInt_As_NormType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    code_object = __pyx_code_cache.entries[pos].code_object;
-    Py_INCREF(code_object);
-    return code_object;
+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_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);
+
+/* CIntFromPy */
+                static CYTHON_INLINE MatOption __Pyx_PyInt_As_MatOption(PyObject *x) {
+    const MatOption neg_one = (MatOption) -1, const_zero = (MatOption) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(MatOption) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(MatOption, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (MatOption) val;
         }
-        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;
+    } 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 (MatOption) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(MatOption, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(MatOption) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatOption) >= 2 * PyLong_SHIFT) {
+                            return (MatOption) (((((MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatOption) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatOption) >= 3 * PyLong_SHIFT) {
+                            return (MatOption) (((((((MatOption)digits[2]) << PyLong_SHIFT) | (MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatOption) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, 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(MatOption) >= 4 * PyLong_SHIFT) {
+                            return (MatOption) (((((((((MatOption)digits[3]) << PyLong_SHIFT) | (MatOption)digits[2]) << PyLong_SHIFT) | (MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)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 (MatOption) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(MatOption) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatOption, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(MatOption) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatOption, 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 (MatOption) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(MatOption, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(MatOption,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(MatOption) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatOption) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatOption) (((MatOption)-1)*(((((MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(MatOption) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatOption) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatOption) ((((((MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(MatOption) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatOption) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatOption) (((MatOption)-1)*(((((((MatOption)digits[2]) << PyLong_SHIFT) | (MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatOption) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatOption) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatOption) ((((((((MatOption)digits[2]) << PyLong_SHIFT) | (MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(MatOption) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, 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(MatOption) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatOption) (((MatOption)-1)*(((((((((MatOption)digits[3]) << PyLong_SHIFT) | (MatOption)digits[2]) << PyLong_SHIFT) | (MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatOption) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatOption, 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(MatOption) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatOption) ((((((((((MatOption)digits[3]) << PyLong_SHIFT) | (MatOption)digits[2]) << PyLong_SHIFT) | (MatOption)digits[1]) << PyLong_SHIFT) | (MatOption)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(MatOption) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatOption, long, PyLong_AsLong(x))
+            } else if (sizeof(MatOption) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatOption, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-        __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];
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            MatOption 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 (MatOption) -1;
+        }
+    } else {
+        MatOption val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (MatOption) -1;
+        val = __Pyx_PyInt_As_MatOption(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    entries[pos].code_line = code_line;
-    entries[pos].code_object = code_object;
-    __pyx_code_cache.count++;
-    Py_INCREF(code_object);
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to MatOption");
+    return (MatOption) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to MatOption");
+    return (MatOption) -1;
 }
 
-#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);
+/* CIntFromPy */
+                static CYTHON_INLINE PCASMType __Pyx_PyInt_As_PCASMType(PyObject *x) {
+    const PCASMType neg_one = (PCASMType) -1, const_zero = (PCASMType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PCASMType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PCASMType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PCASMType) 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 (PCASMType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PCASMType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PCASMType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCASMType) >= 2 * PyLong_SHIFT) {
+                            return (PCASMType) (((((PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCASMType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCASMType) >= 3 * PyLong_SHIFT) {
+                            return (PCASMType) (((((((PCASMType)digits[2]) << PyLong_SHIFT) | (PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCASMType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, 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(PCASMType) >= 4 * PyLong_SHIFT) {
+                            return (PCASMType) (((((((((PCASMType)digits[3]) << PyLong_SHIFT) | (PCASMType)digits[2]) << PyLong_SHIFT) | (PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)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 (PCASMType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PCASMType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCASMType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PCASMType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCASMType, 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 (PCASMType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PCASMType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PCASMType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PCASMType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCASMType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCASMType) (((PCASMType)-1)*(((((PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PCASMType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCASMType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCASMType) ((((((PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PCASMType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCASMType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCASMType) (((PCASMType)-1)*(((((((PCASMType)digits[2]) << PyLong_SHIFT) | (PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCASMType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCASMType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCASMType) ((((((((PCASMType)digits[2]) << PyLong_SHIFT) | (PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PCASMType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, 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(PCASMType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCASMType) (((PCASMType)-1)*(((((((((PCASMType)digits[3]) << PyLong_SHIFT) | (PCASMType)digits[2]) << PyLong_SHIFT) | (PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCASMType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCASMType, 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(PCASMType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCASMType) ((((((((((PCASMType)digits[3]) << PyLong_SHIFT) | (PCASMType)digits[2]) << PyLong_SHIFT) | (PCASMType)digits[1]) << PyLong_SHIFT) | (PCASMType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PCASMType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCASMType, long, PyLong_AsLong(x))
+            } else if (sizeof(PCASMType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCASMType, 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
+            PCASMType 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 (PCASMType) -1;
+        }
+    } else {
+        PCASMType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PCASMType) -1;
+        val = __Pyx_PyInt_As_PCASMType(tmp);
+        Py_DECREF(tmp);
+        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 PCASMType");
+    return (PCASMType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PCASMType");
+    return (PCASMType) -1;
 }
 
-#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"
+/* CIntFromPy */
+                static CYTHON_INLINE PCGASMType __Pyx_PyInt_As_PCGASMType(PyObject *x) {
+    const PCGASMType neg_one = (PCGASMType) -1, const_zero = (PCGASMType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PCGASMType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PCGASMType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PCGASMType) 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 (PCGASMType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PCGASMType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PCGASMType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCGASMType) >= 2 * PyLong_SHIFT) {
+                            return (PCGASMType) (((((PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCGASMType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCGASMType) >= 3 * PyLong_SHIFT) {
+                            return (PCGASMType) (((((((PCGASMType)digits[2]) << PyLong_SHIFT) | (PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCGASMType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, 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(PCGASMType) >= 4 * PyLong_SHIFT) {
+                            return (PCGASMType) (((((((((PCGASMType)digits[3]) << PyLong_SHIFT) | (PCGASMType)digits[2]) << PyLong_SHIFT) | (PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)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 (PCGASMType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PCGASMType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCGASMType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PCGASMType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCGASMType, 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 (PCGASMType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PCGASMType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PCGASMType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PCGASMType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCGASMType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCGASMType) (((PCGASMType)-1)*(((((PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PCGASMType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCGASMType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCGASMType) ((((((PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PCGASMType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCGASMType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCGASMType) (((PCGASMType)-1)*(((((((PCGASMType)digits[2]) << PyLong_SHIFT) | (PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCGASMType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCGASMType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCGASMType) ((((((((PCGASMType)digits[2]) << PyLong_SHIFT) | (PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PCGASMType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, 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(PCGASMType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCGASMType) (((PCGASMType)-1)*(((((((((PCGASMType)digits[3]) << PyLong_SHIFT) | (PCGASMType)digits[2]) << PyLong_SHIFT) | (PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCGASMType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCGASMType, 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(PCGASMType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCGASMType) ((((((((((PCGASMType)digits[3]) << PyLong_SHIFT) | (PCGASMType)digits[2]) << PyLong_SHIFT) | (PCGASMType)digits[1]) << PyLong_SHIFT) | (PCGASMType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PCGASMType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCGASMType, long, PyLong_AsLong(x))
+            } else if (sizeof(PCGASMType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCGASMType, 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
+            PCGASMType 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 (PCGASMType) -1;
+        }
+    } else {
+        PCGASMType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PCGASMType) -1;
+        val = __Pyx_PyInt_As_PCGASMType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PCGASMType");
+    return (PCGASMType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PCGASMType");
+    return (PCGASMType) -1;
+}
 
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
-    const int neg_one = (int) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE PCCompositeType __Pyx_PyInt_As_PCCompositeType(PyObject *x) {
+    const PCCompositeType neg_one = (PCCompositeType) -1, const_zero = (PCCompositeType) 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(PCCompositeType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PCCompositeType, 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 (PCCompositeType) 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 (PCCompositeType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PCCompositeType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PCCompositeType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCCompositeType) >= 2 * PyLong_SHIFT) {
+                            return (PCCompositeType) (((((PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCCompositeType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCCompositeType) >= 3 * PyLong_SHIFT) {
+                            return (PCCompositeType) (((((((PCCompositeType)digits[2]) << PyLong_SHIFT) | (PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCCompositeType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, 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(PCCompositeType) >= 4 * PyLong_SHIFT) {
+                            return (PCCompositeType) (((((((((PCCompositeType)digits[3]) << PyLong_SHIFT) | (PCCompositeType)digits[2]) << PyLong_SHIFT) | (PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)digits[0]));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -256957,30 +266749,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 (PCCompositeType) -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(PCCompositeType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCCompositeType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PCCompositeType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCCompositeType, 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 (PCCompositeType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PCCompositeType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PCCompositeType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PCCompositeType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCCompositeType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCCompositeType) (((PCCompositeType)-1)*(((((PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PCCompositeType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCCompositeType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCCompositeType) ((((((PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PCCompositeType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCCompositeType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCCompositeType) (((PCCompositeType)-1)*(((((((PCCompositeType)digits[2]) << PyLong_SHIFT) | (PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCCompositeType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCCompositeType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCCompositeType) ((((((((PCCompositeType)digits[2]) << PyLong_SHIFT) | (PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PCCompositeType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, 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(PCCompositeType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCCompositeType) (((PCCompositeType)-1)*(((((((((PCCompositeType)digits[3]) << PyLong_SHIFT) | (PCCompositeType)digits[2]) << PyLong_SHIFT) | (PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCCompositeType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCCompositeType, 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(PCCompositeType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCCompositeType) ((((((((((PCCompositeType)digits[3]) << PyLong_SHIFT) | (PCCompositeType)digits[2]) << PyLong_SHIFT) | (PCCompositeType)digits[1]) << PyLong_SHIFT) | (PCCompositeType)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(PCCompositeType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCCompositeType, long, PyLong_AsLong(x))
+            } else if (sizeof(PCCompositeType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCCompositeType, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -256988,8 +266833,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);
+            PCCompositeType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -257008,129 +266853,448 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     return val;
             }
 #endif
-            return (int) -1;
+            return (PCCompositeType) -1;
         }
     } else {
-        int val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (int) -1;
-        val = __Pyx_PyInt_As_int(tmp);
+        PCCompositeType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PCCompositeType) -1;
+        val = __Pyx_PyInt_As_PCCompositeType(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 PCCompositeType");
+    return (PCCompositeType) -1;
 raise_neg_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to int");
-    return (int) -1;
+        "can't convert negative value to PCCompositeType");
+    return (PCCompositeType) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
-    const int neg_one = (int) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE PCFieldSplitSchurFactType __Pyx_PyInt_As_PCFieldSplitSchurFactType(PyObject *x) {
+    const PCFieldSplitSchurFactType neg_one = (PCFieldSplitSchurFactType) -1, const_zero = (PCFieldSplitSchurFactType) 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(PCFieldSplitSchurFactType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PCFieldSplitSchurFactType) 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 (PCFieldSplitSchurFactType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurFactType) >= 2 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) (((((PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurFactType) >= 3 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) (((((((PCFieldSplitSchurFactType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, 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(PCFieldSplitSchurFactType) >= 4 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) (((((((((PCFieldSplitSchurFactType)digits[3]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)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 (PCFieldSplitSchurFactType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PCFieldSplitSchurFactType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurFactType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurFactType, 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 (PCFieldSplitSchurFactType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurFactType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) (((PCFieldSplitSchurFactType)-1)*(((((PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurFactType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) ((((((PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurFactType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) (((PCFieldSplitSchurFactType)-1)*(((((((PCFieldSplitSchurFactType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurFactType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) ((((((((PCFieldSplitSchurFactType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, 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(PCFieldSplitSchurFactType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) (((PCFieldSplitSchurFactType)-1)*(((((((((PCFieldSplitSchurFactType)digits[3]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCFieldSplitSchurFactType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurFactType, 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(PCFieldSplitSchurFactType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurFactType) ((((((((((PCFieldSplitSchurFactType)digits[3]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurFactType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PCFieldSplitSchurFactType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurFactType, long, PyLong_AsLong(x))
+            } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurFactType, 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);
-    }
-}
-
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-    const long neg_one = (long) -1, const_zero = 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 CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PCFieldSplitSchurFactType 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 (PCFieldSplitSchurFactType) -1;
         }
     } 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);
+        PCFieldSplitSchurFactType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PCFieldSplitSchurFactType) -1;
+        val = __Pyx_PyInt_As_PCFieldSplitSchurFactType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PCFieldSplitSchurFactType");
+    return (PCFieldSplitSchurFactType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PCFieldSplitSchurFactType");
+    return (PCFieldSplitSchurFactType) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value) {
-    const PetscInt neg_one = (PetscInt) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE PCFieldSplitSchurPreType __Pyx_PyInt_As_PCFieldSplitSchurPreType(PyObject *x) {
+    const PCFieldSplitSchurPreType neg_one = (PCFieldSplitSchurPreType) -1, const_zero = (PCFieldSplitSchurPreType) 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 PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PCFieldSplitSchurPreType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PCFieldSplitSchurPreType) val;
         }
-    } 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);
+    } 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 (PCFieldSplitSchurPreType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurPreType) >= 2 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) (((((PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurPreType) >= 3 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) (((((((PCFieldSplitSchurPreType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, 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(PCFieldSplitSchurPreType) >= 4 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) (((((((((PCFieldSplitSchurPreType)digits[3]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)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 (PCFieldSplitSchurPreType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PCFieldSplitSchurPreType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurPreType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurPreType, 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 (PCFieldSplitSchurPreType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurPreType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) (((PCFieldSplitSchurPreType)-1)*(((((PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurPreType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) ((((((PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurPreType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) (((PCFieldSplitSchurPreType)-1)*(((((((PCFieldSplitSchurPreType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCFieldSplitSchurPreType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) ((((((((PCFieldSplitSchurPreType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, 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(PCFieldSplitSchurPreType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) (((PCFieldSplitSchurPreType)-1)*(((((((((PCFieldSplitSchurPreType)digits[3]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCFieldSplitSchurPreType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCFieldSplitSchurPreType, 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(PCFieldSplitSchurPreType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCFieldSplitSchurPreType) ((((((((((PCFieldSplitSchurPreType)digits[3]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[2]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[1]) << PyLong_SHIFT) | (PCFieldSplitSchurPreType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PCFieldSplitSchurPreType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurPreType, long, PyLong_AsLong(x))
+            } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurPreType, 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
+            PCFieldSplitSchurPreType 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 (PCFieldSplitSchurPreType) -1;
+        }
+    } else {
+        PCFieldSplitSchurPreType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PCFieldSplitSchurPreType) -1;
+        val = __Pyx_PyInt_As_PCFieldSplitSchurPreType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(PetscInt),
-                                     little, !is_unsigned);
-    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PCFieldSplitSchurPreType");
+    return (PCFieldSplitSchurPreType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PCFieldSplitSchurPreType");
+    return (PCFieldSplitSchurPreType) -1;
 }
 
-static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
-    const PetscInt neg_one = (PetscInt) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE PCMGType __Pyx_PyInt_As_PCMGType(PyObject *x) {
+    const PCMGType neg_one = (PCMGType) -1, const_zero = (PCMGType) 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(PCMGType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PCMGType, 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 (PCMGType) 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 (PCMGType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PCMGType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PCMGType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGType) >= 2 * PyLong_SHIFT) {
+                            return (PCMGType) (((((PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCMGType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGType) >= 3 * PyLong_SHIFT) {
+                            return (PCMGType) (((((((PCMGType)digits[2]) << PyLong_SHIFT) | (PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCMGType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, 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(PCMGType) >= 4 * PyLong_SHIFT) {
+                            return (PCMGType) (((((((((PCMGType)digits[3]) << PyLong_SHIFT) | (PCMGType)digits[2]) << PyLong_SHIFT) | (PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)digits[0]));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -257140,30 +267304,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 (PCMGType) -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(PCMGType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCMGType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PCMGType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCMGType, 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 (PCMGType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PCMGType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PCMGType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PCMGType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCMGType) (((PCMGType)-1)*(((((PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PCMGType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCMGType) ((((((PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PCMGType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCMGType) (((PCMGType)-1)*(((((((PCMGType)digits[2]) << PyLong_SHIFT) | (PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCMGType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCMGType) ((((((((PCMGType)digits[2]) << PyLong_SHIFT) | (PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PCMGType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, 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(PCMGType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCMGType) (((PCMGType)-1)*(((((((((PCMGType)digits[3]) << PyLong_SHIFT) | (PCMGType)digits[2]) << PyLong_SHIFT) | (PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCMGType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGType, 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(PCMGType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCMGType) ((((((((((PCMGType)digits[3]) << PyLong_SHIFT) | (PCMGType)digits[2]) << PyLong_SHIFT) | (PCMGType)digits[1]) << PyLong_SHIFT) | (PCMGType)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(PCMGType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCMGType, long, PyLong_AsLong(x))
+            } else if (sizeof(PCMGType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCMGType, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -257171,8 +267388,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);
+            PCMGType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -257191,124 +267408,263 @@ static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
                     return val;
             }
 #endif
-            return (PetscInt) -1;
+            return (PCMGType) -1;
         }
     } else {
-        PetscInt val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (PetscInt) -1;
-        val = __Pyx_PyInt_As_PetscInt(tmp);
+        PCMGType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PCMGType) -1;
+        val = __Pyx_PyInt_As_PCMGType(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 PCMGType");
+    return (PCMGType) -1;
 raise_neg_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to PetscInt");
-    return (PetscInt) -1;
+        "can't convert negative value to PCMGType");
+    return (PCMGType) -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 PCSide __Pyx_PyInt_As_PCSide(PyObject *x) {
+    const PCSide neg_one = (PCSide) -1, const_zero = (PCSide) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PCSide) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PCSide, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
             }
-            level = 0;
+            return (PCSide) val;
         }
-        #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
+    } 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 (PCSide) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PCSide, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PCSide) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCSide) >= 2 * PyLong_SHIFT) {
+                            return (PCSide) (((((PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCSide) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCSide) >= 3 * PyLong_SHIFT) {
+                            return (PCSide) (((((((PCSide)digits[2]) << PyLong_SHIFT) | (PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCSide) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, 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(PCSide) >= 4 * PyLong_SHIFT) {
+                            return (PCSide) (((((((((PCSide)digits[3]) << PyLong_SHIFT) | (PCSide)digits[2]) << PyLong_SHIFT) | (PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)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 (PCSide) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PCSide) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCSide, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PCSide) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCSide, 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 (PCSide) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PCSide, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PCSide,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PCSide) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCSide) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCSide) (((PCSide)-1)*(((((PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PCSide) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCSide) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCSide) ((((((PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PCSide) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCSide) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCSide) (((PCSide)-1)*(((((((PCSide)digits[2]) << PyLong_SHIFT) | (PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCSide) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCSide) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCSide) ((((((((PCSide)digits[2]) << PyLong_SHIFT) | (PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PCSide) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, 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(PCSide) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCSide) (((PCSide)-1)*(((((((((PCSide)digits[3]) << PyLong_SHIFT) | (PCSide)digits[2]) << PyLong_SHIFT) | (PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCSide) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCSide, 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(PCSide) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCSide) ((((((((((PCSide)digits[3]) << PyLong_SHIFT) | (PCSide)digits[2]) << PyLong_SHIFT) | (PCSide)digits[1]) << PyLong_SHIFT) | (PCSide)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PCSide) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCSide, long, PyLong_AsLong(x))
+            } else if (sizeof(PCSide) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCSide, 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
+            PCSide 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 (PCSide) -1;
         }
+    } else {
+        PCSide val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PCSide) -1;
+        val = __Pyx_PyInt_As_PCSide(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 PCSide");
+    return (PCSide) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PCSide");
+    return (PCSide) -1;
 }
 
-static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *x) {
-    const PetscClassId neg_one = (PetscClassId) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE KSPNormType __Pyx_PyInt_As_KSPNormType(PyObject *x) {
+    const KSPNormType neg_one = (KSPNormType) -1, const_zero = (KSPNormType) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
-        if (sizeof(PetscClassId) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(PetscClassId, long, PyInt_AS_LONG(x))
+        if (sizeof(KSPNormType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(KSPNormType, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
                 goto raise_neg_overflow;
             }
-            return (PetscClassId) val;
+            return (KSPNormType) 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(PetscClassId, digit, ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (KSPNormType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(KSPNormType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(KSPNormType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPNormType) >= 2 * PyLong_SHIFT) {
+                            return (KSPNormType) (((((KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(KSPNormType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPNormType) >= 3 * PyLong_SHIFT) {
+                            return (KSPNormType) (((((((KSPNormType)digits[2]) << PyLong_SHIFT) | (KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(KSPNormType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, 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(KSPNormType) >= 4 * PyLong_SHIFT) {
+                            return (KSPNormType) (((((((((KSPNormType)digits[3]) << PyLong_SHIFT) | (KSPNormType)digits[2]) << PyLong_SHIFT) | (KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0]));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -257318,30 +267674,83 @@ static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *x) {
             {
                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                 if (unlikely(result < 0))
-                    return (PetscClassId) -1;
+                    return (KSPNormType) -1;
                 if (unlikely(result == 1))
                     goto raise_neg_overflow;
             }
 #endif
-            if (sizeof(PetscClassId) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(PetscClassId, unsigned long, PyLong_AsUnsignedLong(x))
-            } else if (sizeof(PetscClassId) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(PetscClassId, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            if (sizeof(KSPNormType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(KSPNormType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(KSPNormType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(KSPNormType, 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(PetscClassId,  digit, +(((PyLongObject*)x)->ob_digit[0]));
-                case -1: __PYX_VERIFY_RETURN_INT(PetscClassId, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (KSPNormType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(KSPNormType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(KSPNormType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(KSPNormType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPNormType) - 1 > 2 * PyLong_SHIFT) {
+                            return (KSPNormType) (((KSPNormType)-1)*(((((KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(KSPNormType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPNormType) - 1 > 2 * PyLong_SHIFT) {
+                            return (KSPNormType) ((((((KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(KSPNormType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPNormType) - 1 > 3 * PyLong_SHIFT) {
+                            return (KSPNormType) (((KSPNormType)-1)*(((((((KSPNormType)digits[2]) << PyLong_SHIFT) | (KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(KSPNormType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(KSPNormType) - 1 > 3 * PyLong_SHIFT) {
+                            return (KSPNormType) ((((((((KSPNormType)digits[2]) << PyLong_SHIFT) | (KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(KSPNormType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, 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(KSPNormType) - 1 > 4 * PyLong_SHIFT) {
+                            return (KSPNormType) (((KSPNormType)-1)*(((((((((KSPNormType)digits[3]) << PyLong_SHIFT) | (KSPNormType)digits[2]) << PyLong_SHIFT) | (KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(KSPNormType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(KSPNormType, 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(KSPNormType) - 1 > 4 * PyLong_SHIFT) {
+                            return (KSPNormType) ((((((((((KSPNormType)digits[3]) << PyLong_SHIFT) | (KSPNormType)digits[2]) << PyLong_SHIFT) | (KSPNormType)digits[1]) << PyLong_SHIFT) | (KSPNormType)digits[0])));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
-            if (sizeof(PetscClassId) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(PetscClassId, long, PyLong_AsLong(x))
-            } else if (sizeof(PetscClassId) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(PetscClassId, PY_LONG_LONG, PyLong_AsLongLong(x))
+            if (sizeof(KSPNormType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(KSPNormType, long, PyLong_AsLong(x))
+            } else if (sizeof(KSPNormType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(KSPNormType, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -257349,8 +267758,8 @@ static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *x) {
             PyErr_SetString(PyExc_RuntimeError,
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-            PetscClassId val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            KSPNormType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -257369,209 +267778,633 @@ static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *x) {
                     return val;
             }
 #endif
-            return (PetscClassId) -1;
+            return (KSPNormType) -1;
         }
     } else {
-        PetscClassId val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (PetscClassId) -1;
-        val = __Pyx_PyInt_As_PetscClassId(tmp);
+        KSPNormType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (KSPNormType) -1;
+        val = __Pyx_PyInt_As_KSPNormType(tmp);
         Py_DECREF(tmp);
         return val;
     }
 raise_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "value too large to convert to PetscClassId");
-    return (PetscClassId) -1;
+        "value too large to convert to KSPNormType");
+    return (KSPNormType) -1;
 raise_neg_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to PetscClassId");
-    return (PetscClassId) -1;
+        "can't convert negative value to KSPNormType");
+    return (KSPNormType) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscLogStage(PetscLogStage value) {
-    const PetscLogStage neg_one = (PetscLogStage) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE SNESNormSchedule __Pyx_PyInt_As_SNESNormSchedule(PyObject *x) {
+    const SNESNormSchedule neg_one = (SNESNormSchedule) -1, const_zero = (SNESNormSchedule) 0;
     const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(PetscLogStage) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(PetscLogStage) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(PetscLogStage) <= 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(SNESNormSchedule) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (SNESNormSchedule) val;
         }
-    } else {
-        if (sizeof(PetscLogStage) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(PetscLogStage) <= 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 (SNESNormSchedule) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(SNESNormSchedule, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(SNESNormSchedule) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESNormSchedule) >= 2 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) (((((SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(SNESNormSchedule) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESNormSchedule) >= 3 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) (((((((SNESNormSchedule)digits[2]) << PyLong_SHIFT) | (SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(SNESNormSchedule) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, 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(SNESNormSchedule) >= 4 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) (((((((((SNESNormSchedule)digits[3]) << PyLong_SHIFT) | (SNESNormSchedule)digits[2]) << PyLong_SHIFT) | (SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)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 (SNESNormSchedule) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(SNESNormSchedule) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SNESNormSchedule, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(SNESNormSchedule) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SNESNormSchedule, 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 (SNESNormSchedule) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(SNESNormSchedule, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(SNESNormSchedule,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(SNESNormSchedule) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESNormSchedule) - 1 > 2 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) (((SNESNormSchedule)-1)*(((((SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(SNESNormSchedule) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESNormSchedule) - 1 > 2 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) ((((((SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(SNESNormSchedule) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESNormSchedule) - 1 > 3 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) (((SNESNormSchedule)-1)*(((((((SNESNormSchedule)digits[2]) << PyLong_SHIFT) | (SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(SNESNormSchedule) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SNESNormSchedule) - 1 > 3 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) ((((((((SNESNormSchedule)digits[2]) << PyLong_SHIFT) | (SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(SNESNormSchedule) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, 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(SNESNormSchedule) - 1 > 4 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) (((SNESNormSchedule)-1)*(((((((((SNESNormSchedule)digits[3]) << PyLong_SHIFT) | (SNESNormSchedule)digits[2]) << PyLong_SHIFT) | (SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(SNESNormSchedule) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SNESNormSchedule, 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(SNESNormSchedule) - 1 > 4 * PyLong_SHIFT) {
+                            return (SNESNormSchedule) ((((((((((SNESNormSchedule)digits[3]) << PyLong_SHIFT) | (SNESNormSchedule)digits[2]) << PyLong_SHIFT) | (SNESNormSchedule)digits[1]) << PyLong_SHIFT) | (SNESNormSchedule)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(SNESNormSchedule) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SNESNormSchedule, long, PyLong_AsLong(x))
+            } else if (sizeof(SNESNormSchedule) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SNESNormSchedule, 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(PetscLogStage),
-                                     little, !is_unsigned);
-    }
-}
-
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscClassId(PetscClassId value) {
-    const PetscClassId neg_one = (PetscClassId) -1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(PetscClassId) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(PetscClassId) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(PetscClassId) <= 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
+            SNESNormSchedule 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 (SNESNormSchedule) -1;
         }
     } else {
-        if (sizeof(PetscClassId) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(PetscClassId) <= 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(PetscClassId),
-                                     little, !is_unsigned);
+        SNESNormSchedule val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (SNESNormSchedule) -1;
+        val = __Pyx_PyInt_As_SNESNormSchedule(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to SNESNormSchedule");
+    return (SNESNormSchedule) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to SNESNormSchedule");
+    return (SNESNormSchedule) -1;
 }
 
-static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s) {
-                PyObject* res;
-                PyObject* member;
-                res = PyDict_New(); if (res == NULL) return NULL;
-                member = __Pyx_PyInt_From_int(s.count); if (member == NULL) goto bad;
-                if (PyDict_SetItem(res, __pyx_n_s_count, member) < 0) goto bad;
-                Py_DECREF(member);
-                member = PyFloat_FromDouble(s.flops); if (member == NULL) goto bad;
-                if (PyDict_SetItem(res, __pyx_n_s_flops, member) < 0) goto bad;
-                Py_DECREF(member);
-                member = PyFloat_FromDouble(s.time); if (member == NULL) goto bad;
-                if (PyDict_SetItem(res, __pyx_n_s_time, member) < 0) goto bad;
-                Py_DECREF(member);
-                member = PyFloat_FromDouble(s.numMessages); if (member == NULL) goto bad;
-                if (PyDict_SetItem(res, __pyx_n_s_numMessages, member) < 0) goto bad;
-                Py_DECREF(member);
-                member = PyFloat_FromDouble(s.messageLength); if (member == NULL) goto bad;
-                if (PyDict_SetItem(res, __pyx_n_s_messageLength, member) < 0) goto bad;
-                Py_DECREF(member);
-                member = PyFloat_FromDouble(s.numReductions); if (member == NULL) goto bad;
-                if (PyDict_SetItem(res, __pyx_n_s_numReductions, member) < 0) goto bad;
-                Py_DECREF(member);
-                return res;
-                bad:
-                Py_XDECREF(member);
-                Py_DECREF(res);
-                return NULL;
-              }
-              static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscLogEvent(PetscLogEvent value) {
-    const PetscLogEvent neg_one = (PetscLogEvent) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE TSProblemType __Pyx_PyInt_As_TSProblemType(PyObject *x) {
+    const TSProblemType neg_one = (TSProblemType) -1, const_zero = (TSProblemType) 0;
     const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(PetscLogEvent) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(PetscLogEvent) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(PetscLogEvent) <= 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(TSProblemType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(TSProblemType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (TSProblemType) val;
         }
-    } else {
-        if (sizeof(PetscLogEvent) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(PetscLogEvent) <= 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 (TSProblemType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(TSProblemType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(TSProblemType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSProblemType) >= 2 * PyLong_SHIFT) {
+                            return (TSProblemType) (((((TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TSProblemType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSProblemType) >= 3 * PyLong_SHIFT) {
+                            return (TSProblemType) (((((((TSProblemType)digits[2]) << PyLong_SHIFT) | (TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TSProblemType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, 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(TSProblemType) >= 4 * PyLong_SHIFT) {
+                            return (TSProblemType) (((((((((TSProblemType)digits[3]) << PyLong_SHIFT) | (TSProblemType)digits[2]) << PyLong_SHIFT) | (TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)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 (TSProblemType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(TSProblemType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSProblemType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(TSProblemType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSProblemType, 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 (TSProblemType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(TSProblemType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(TSProblemType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(TSProblemType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSProblemType) - 1 > 2 * PyLong_SHIFT) {
+                            return (TSProblemType) (((TSProblemType)-1)*(((((TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(TSProblemType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSProblemType) - 1 > 2 * PyLong_SHIFT) {
+                            return (TSProblemType) ((((((TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(TSProblemType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSProblemType) - 1 > 3 * PyLong_SHIFT) {
+                            return (TSProblemType) (((TSProblemType)-1)*(((((((TSProblemType)digits[2]) << PyLong_SHIFT) | (TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TSProblemType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSProblemType) - 1 > 3 * PyLong_SHIFT) {
+                            return (TSProblemType) ((((((((TSProblemType)digits[2]) << PyLong_SHIFT) | (TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(TSProblemType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, 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(TSProblemType) - 1 > 4 * PyLong_SHIFT) {
+                            return (TSProblemType) (((TSProblemType)-1)*(((((((((TSProblemType)digits[3]) << PyLong_SHIFT) | (TSProblemType)digits[2]) << PyLong_SHIFT) | (TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TSProblemType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSProblemType, 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(TSProblemType) - 1 > 4 * PyLong_SHIFT) {
+                            return (TSProblemType) ((((((((((TSProblemType)digits[3]) << PyLong_SHIFT) | (TSProblemType)digits[2]) << PyLong_SHIFT) | (TSProblemType)digits[1]) << PyLong_SHIFT) | (TSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(TSProblemType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSProblemType, long, PyLong_AsLong(x))
+            } else if (sizeof(TSProblemType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSProblemType, 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(PetscLogEvent),
-                                     little, !is_unsigned);
-    }
-}
-
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value) {
-    const MPI_Fint neg_one = (MPI_Fint) -1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(MPI_Fint) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(MPI_Fint) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(MPI_Fint) <= 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
+            TSProblemType 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 (TSProblemType) -1;
         }
     } else {
-        if (sizeof(MPI_Fint) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(MPI_Fint) <= 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(MPI_Fint),
-                                     little, !is_unsigned);
+        TSProblemType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (TSProblemType) -1;
+        val = __Pyx_PyInt_As_TSProblemType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to TSProblemType");
+    return (TSProblemType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to TSProblemType");
+    return (TSProblemType) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
-    const unsigned long neg_one = (unsigned long) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE TSEquationType __Pyx_PyInt_As_TSEquationType(PyObject *x) {
+    const TSEquationType neg_one = (TSEquationType) -1, const_zero = (TSEquationType) 0;
     const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(unsigned long) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(unsigned 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(TSEquationType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(TSEquationType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (TSEquationType) val;
         }
-    } else {
-        if (sizeof(unsigned long) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(unsigned 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 (TSEquationType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(TSEquationType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(TSEquationType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSEquationType) >= 2 * PyLong_SHIFT) {
+                            return (TSEquationType) (((((TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TSEquationType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSEquationType) >= 3 * PyLong_SHIFT) {
+                            return (TSEquationType) (((((((TSEquationType)digits[2]) << PyLong_SHIFT) | (TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TSEquationType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, 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(TSEquationType) >= 4 * PyLong_SHIFT) {
+                            return (TSEquationType) (((((((((TSEquationType)digits[3]) << PyLong_SHIFT) | (TSEquationType)digits[2]) << PyLong_SHIFT) | (TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)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 (TSEquationType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(TSEquationType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSEquationType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(TSEquationType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSEquationType, 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 (TSEquationType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(TSEquationType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(TSEquationType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(TSEquationType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSEquationType) - 1 > 2 * PyLong_SHIFT) {
+                            return (TSEquationType) (((TSEquationType)-1)*(((((TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(TSEquationType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSEquationType) - 1 > 2 * PyLong_SHIFT) {
+                            return (TSEquationType) ((((((TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(TSEquationType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSEquationType) - 1 > 3 * PyLong_SHIFT) {
+                            return (TSEquationType) (((TSEquationType)-1)*(((((((TSEquationType)digits[2]) << PyLong_SHIFT) | (TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TSEquationType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSEquationType) - 1 > 3 * PyLong_SHIFT) {
+                            return (TSEquationType) ((((((((TSEquationType)digits[2]) << PyLong_SHIFT) | (TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(TSEquationType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, 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(TSEquationType) - 1 > 4 * PyLong_SHIFT) {
+                            return (TSEquationType) (((TSEquationType)-1)*(((((((((TSEquationType)digits[3]) << PyLong_SHIFT) | (TSEquationType)digits[2]) << PyLong_SHIFT) | (TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TSEquationType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSEquationType, 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(TSEquationType) - 1 > 4 * PyLong_SHIFT) {
+                            return (TSEquationType) ((((((((((TSEquationType)digits[3]) << PyLong_SHIFT) | (TSEquationType)digits[2]) << PyLong_SHIFT) | (TSEquationType)digits[1]) << PyLong_SHIFT) | (TSEquationType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(TSEquationType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSEquationType, long, PyLong_AsLong(x))
+            } else if (sizeof(TSEquationType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSEquationType, 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
+            TSEquationType 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 (TSEquationType) -1;
+        }
+    } else {
+        TSEquationType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (TSEquationType) -1;
+        val = __Pyx_PyInt_As_TSEquationType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(unsigned long),
-                                     little, !is_unsigned);
-    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to TSEquationType");
+    return (TSEquationType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to TSEquationType");
+    return (TSEquationType) -1;
 }
 
-static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {
-    const unsigned long neg_one = (unsigned long) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE TSExactFinalTimeOption __Pyx_PyInt_As_TSExactFinalTimeOption(PyObject *x) {
+    const TSExactFinalTimeOption neg_one = (TSExactFinalTimeOption) -1, const_zero = (TSExactFinalTimeOption) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
-        if (sizeof(unsigned long) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(unsigned long, long, PyInt_AS_LONG(x))
+        if (sizeof(TSExactFinalTimeOption) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
                 goto raise_neg_overflow;
             }
-            return (unsigned long) val;
+            return (TSExactFinalTimeOption) 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(unsigned long, digit, ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (TSExactFinalTimeOption) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(TSExactFinalTimeOption) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSExactFinalTimeOption) >= 2 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) (((((TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TSExactFinalTimeOption) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSExactFinalTimeOption) >= 3 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) (((((((TSExactFinalTimeOption)digits[2]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TSExactFinalTimeOption) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, 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(TSExactFinalTimeOption) >= 4 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) (((((((((TSExactFinalTimeOption)digits[3]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[2]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0]));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -257581,30 +268414,83 @@ static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {
             {
                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                 if (unlikely(result < 0))
-                    return (unsigned long) -1;
+                    return (TSExactFinalTimeOption) -1;
                 if (unlikely(result == 1))
                     goto raise_neg_overflow;
             }
 #endif
-            if (sizeof(unsigned long) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, PyLong_AsUnsignedLong(x))
-            } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            if (sizeof(TSExactFinalTimeOption) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSExactFinalTimeOption, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(TSExactFinalTimeOption) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSExactFinalTimeOption, 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(unsigned long,  digit, +(((PyLongObject*)x)->ob_digit[0]));
-                case -1: __PYX_VERIFY_RETURN_INT(unsigned long, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (TSExactFinalTimeOption) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(TSExactFinalTimeOption) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSExactFinalTimeOption) - 1 > 2 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) (((TSExactFinalTimeOption)-1)*(((((TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(TSExactFinalTimeOption) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSExactFinalTimeOption) - 1 > 2 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) ((((((TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(TSExactFinalTimeOption) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSExactFinalTimeOption) - 1 > 3 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) (((TSExactFinalTimeOption)-1)*(((((((TSExactFinalTimeOption)digits[2]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TSExactFinalTimeOption) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSExactFinalTimeOption) - 1 > 3 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) ((((((((TSExactFinalTimeOption)digits[2]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(TSExactFinalTimeOption) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, 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(TSExactFinalTimeOption) - 1 > 4 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) (((TSExactFinalTimeOption)-1)*(((((((((TSExactFinalTimeOption)digits[3]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[2]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TSExactFinalTimeOption) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSExactFinalTimeOption, 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(TSExactFinalTimeOption) - 1 > 4 * PyLong_SHIFT) {
+                            return (TSExactFinalTimeOption) ((((((((((TSExactFinalTimeOption)digits[3]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[2]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[1]) << PyLong_SHIFT) | (TSExactFinalTimeOption)digits[0])));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
-            if (sizeof(unsigned long) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(unsigned long, long, PyLong_AsLong(x))
-            } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(unsigned long, PY_LONG_LONG, PyLong_AsLongLong(x))
+            if (sizeof(TSExactFinalTimeOption) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSExactFinalTimeOption, long, PyLong_AsLong(x))
+            } else if (sizeof(TSExactFinalTimeOption) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSExactFinalTimeOption, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -257612,8 +268498,8 @@ static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {
             PyErr_SetString(PyExc_RuntimeError,
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-            unsigned long val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            TSExactFinalTimeOption val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -257632,51 +268518,78 @@ static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {
                     return val;
             }
 #endif
-            return (unsigned long) -1;
+            return (TSExactFinalTimeOption) -1;
         }
     } else {
-        unsigned long val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (unsigned long) -1;
-        val = __Pyx_PyInt_As_unsigned_long(tmp);
+        TSExactFinalTimeOption val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (TSExactFinalTimeOption) -1;
+        val = __Pyx_PyInt_As_TSExactFinalTimeOption(tmp);
         Py_DECREF(tmp);
         return val;
     }
 raise_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "value too large to convert to unsigned long");
-    return (unsigned long) -1;
+        "value too large to convert to TSExactFinalTimeOption");
+    return (TSExactFinalTimeOption) -1;
 raise_neg_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to unsigned long");
-    return (unsigned long) -1;
+        "can't convert negative value to TSExactFinalTimeOption");
+    return (TSExactFinalTimeOption) -1;
 }
 
-static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
-    const size_t neg_one = (size_t) -1, const_zero = 0;
+/* CIntFromPy */
+                static CYTHON_INLINE TSConvergedReason __Pyx_PyInt_As_TSConvergedReason(PyObject *x) {
+    const TSConvergedReason neg_one = (TSConvergedReason) -1, const_zero = (TSConvergedReason) 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))
+        if (sizeof(TSConvergedReason) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(TSConvergedReason, 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;
+            return (TSConvergedReason) 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(size_t, digit, ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (TSConvergedReason) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(TSConvergedReason, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(TSConvergedReason) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSConvergedReason) >= 2 * PyLong_SHIFT) {
+                            return (TSConvergedReason) (((((TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TSConvergedReason) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSConvergedReason) >= 3 * PyLong_SHIFT) {
+                            return (TSConvergedReason) (((((((TSConvergedReason)digits[2]) << PyLong_SHIFT) | (TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TSConvergedReason) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, 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(TSConvergedReason) >= 4 * PyLong_SHIFT) {
+                            return (TSConvergedReason) (((((((((TSConvergedReason)digits[3]) << PyLong_SHIFT) | (TSConvergedReason)digits[2]) << PyLong_SHIFT) | (TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0]));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -257686,30 +268599,83 @@ static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
             {
                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                 if (unlikely(result < 0))
-                    return (size_t) -1;
+                    return (TSConvergedReason) -1;
                 if (unlikely(result == 1))
                     goto raise_neg_overflow;
             }
 #endif
-            if (sizeof(size_t) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(size_t, unsigned long, PyLong_AsUnsignedLong(x))
-            } else if (sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            if (sizeof(TSConvergedReason) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSConvergedReason, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(TSConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSConvergedReason, 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(size_t,  digit, +(((PyLongObject*)x)->ob_digit[0]));
-                case -1: __PYX_VERIFY_RETURN_INT(size_t, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (TSConvergedReason) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(TSConvergedReason, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(TSConvergedReason,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(TSConvergedReason) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                            return (TSConvergedReason) (((TSConvergedReason)-1)*(((((TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(TSConvergedReason) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                            return (TSConvergedReason) ((((((TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(TSConvergedReason) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                            return (TSConvergedReason) (((TSConvergedReason)-1)*(((((((TSConvergedReason)digits[2]) << PyLong_SHIFT) | (TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(TSConvergedReason) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(TSConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                            return (TSConvergedReason) ((((((((TSConvergedReason)digits[2]) << PyLong_SHIFT) | (TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(TSConvergedReason) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, 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(TSConvergedReason) - 1 > 4 * PyLong_SHIFT) {
+                            return (TSConvergedReason) (((TSConvergedReason)-1)*(((((((((TSConvergedReason)digits[3]) << PyLong_SHIFT) | (TSConvergedReason)digits[2]) << PyLong_SHIFT) | (TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(TSConvergedReason) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(TSConvergedReason, 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(TSConvergedReason) - 1 > 4 * PyLong_SHIFT) {
+                            return (TSConvergedReason) ((((((((((TSConvergedReason)digits[3]) << PyLong_SHIFT) | (TSConvergedReason)digits[2]) << PyLong_SHIFT) | (TSConvergedReason)digits[1]) << PyLong_SHIFT) | (TSConvergedReason)digits[0])));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
-            if (sizeof(size_t) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(size_t, long, PyLong_AsLong(x))
-            } else if (sizeof(size_t) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(size_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+            if (sizeof(TSConvergedReason) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSConvergedReason, long, PyLong_AsLong(x))
+            } else if (sizeof(TSConvergedReason) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(TSConvergedReason, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -257717,8 +268683,8 @@ static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
             PyErr_SetString(PyExc_RuntimeError,
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-            size_t val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            TSConvergedReason val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -257737,68 +268703,29 @@ static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
                     return val;
             }
 #endif
-            return (size_t) -1;
+            return (TSConvergedReason) -1;
         }
     } else {
-        size_t val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (size_t) -1;
-        val = __Pyx_PyInt_As_size_t(tmp);
+        TSConvergedReason val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (TSConvergedReason) -1;
+        val = __Pyx_PyInt_As_TSConvergedReason(tmp);
         Py_DECREF(tmp);
         return val;
     }
 raise_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "value too large to convert to size_t");
-    return (size_t) -1;
+        "value too large to convert to TSConvergedReason");
+    return (TSConvergedReason) -1;
 raise_neg_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to size_t");
-    return (size_t) -1;
-}
-
-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;
+        "can't convert negative value to TSConvergedReason");
+    return (TSConvergedReason) -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))) {
@@ -257815,13 +268742,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)) {
@@ -257837,24 +268790,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))
             }
         }
         {
@@ -257863,7 +268869,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;
@@ -257886,7 +268892,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);
@@ -257902,7 +268908,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());
@@ -257917,7 +268924,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 {
@@ -257953,7 +268961,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)
@@ -257999,14 +269008,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;
@@ -258017,7 +269026,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) {
@@ -258055,7 +269065,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 &&
@@ -258096,7 +269106,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);
@@ -258117,7 +269127,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;
@@ -258126,7 +269136,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) {
@@ -258166,18 +269176,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_dmda.py b/test/test_dmda.py
index e87b561..d670320 100644
--- a/test/test_dmda.py
+++ b/test/test_dmda.py
@@ -71,6 +71,13 @@ class BaseTestDA(object):
         for i,m in enumerate(procsizes):
             self.assertEqual(m, len(ownership_ranges[i]))
 
+    def testFieldName(self):
+        for i in range(self.da.getDof()):
+            self.da.setFieldName(i, "field%d" % i)
+        for i in range(self.da.getDof()):
+            name = self.da.getFieldName(i)
+            self.assertEqual(name, "field%d" % i)
+
     def testCoordinates(self):
         self.da.setUniformCoordinates(0,1,0,1,0,1)
         #
diff --git a/test/test_dmplex.py b/test/test_dmplex.py
index 1c59f7b..51f2468 100644
--- a/test/test_dmplex.py
+++ b/test/test_dmplex.py
@@ -77,20 +77,23 @@ class BaseTestPlex(object):
                 self.assertIn(p, point_closure)
 
     def testBoundaryLabel(self):
+        self.assertFalse(self.plex.hasLabel("boundary"))
         self.plex.markBoundaryFaces("boundary")
         self.assertTrue(self.plex.hasLabel("boundary"))
 
         faces = self.plex.getStratumIS("boundary", 1)
         for f in faces.getIndices():
-            for p in self.plex.getTransitiveClosure(f)[0]:
+            points, orient = self.plex.getTransitiveClosure(f, useCone=True)
+            for p in points:
                 self.plex.setLabelValue("boundary", p, 1)
+
         pStart, pEnd = self.plex.getChart()
         for p in range(pStart, pEnd):
             if self.plex.getLabelValue("boundary", p) != 1:
-                self.plex.setLabelValue("boundary", p, -1)
+                self.plex.setLabelValue("boundary", p, 2)
 
         numBoundary = self.plex.getStratumSize("boundary", 1)
-        numInterior = self.plex.getStratumSize("boundary", -1)
+        numInterior = self.plex.getStratumSize("boundary", 2)
         self.assertNotEqual(numBoundary, pEnd - pStart)
         self.assertNotEqual(numInterior, pEnd - pStart)
         self.assertEqual(numBoundary + numInterior, pEnd - pStart)
diff --git a/test/test_mat_aij.py b/test/test_mat_aij.py
index 6136bc9..6c207f7 100644
--- a/test/test_mat_aij.py
+++ b/test/test_mat_aij.py
@@ -228,6 +228,55 @@ class BaseTestMatAnyAIJ(object):
         self.A.getSubMatrix(rows, cols, S)
         S.destroy()
 
+    def testGetSubMatrices(self):
+        if 'baij' in self.A.getType(): return # XXX
+        self._preallocate()
+        self._set_values_ijv()
+        self.A.assemble()
+        #
+        rs, re = self.A.getOwnershipRange()
+        cs, ce = self.A.getOwnershipRangeColumn()
+        rows = N.array(range(rs, re), dtype=PETSc.IntType)
+        cols = N.array(range(cs, ce), dtype=PETSc.IntType)
+        rows = PETSc.IS().createGeneral(rows, comm=self.A.getComm())
+        cols = PETSc.IS().createGeneral(cols, comm=self.A.getComm())
+        #
+        (S,) = self.A.getSubMatrices(rows, cols)
+        S.zeroEntries()
+        self.A.getSubMatrices(rows, cols, submats=[S])
+        S.destroy()
+        #
+        (S1,) = self.A.getSubMatrices([rows], [cols])
+        (S2,) = self.A.getSubMatrices([rows], [cols])
+        self.assertTrue(S1.equal(S2))
+        S2.zeroEntries()
+        self.A.getSubMatrices([rows], [cols], [S2])
+        self.assertTrue(S1.equal(S2))
+        S1.destroy()
+        S2.destroy()
+        #
+        if 'seq' not in self.A.getType(): return # XXX
+        S1, S2 = self.A.getSubMatrices([rows, rows], [cols, cols])
+        self.assertTrue(S1.equal(S2))
+        S1.zeroEntries()
+        S2.zeroEntries()
+        self.A.getSubMatrices([rows, rows], [cols, cols], [S1, S2])
+        self.assertTrue(S1.equal(S2))
+        S1.destroy()
+        S2.destroy()
+
+    def testGetRedundantMatrix(self):
+        if 'aijcrl' in self.A.getType(): return # duplicate not supported
+        self._preallocate()
+        self._set_values_ijv()
+        self.A.assemble()
+        #Test the most simple case
+        sizecommA = self.A.getComm().getSize()
+        Ared = self.A.getRedundantMatrix(sizecommA)
+        sizecommAred = Ared.getComm().getSize()
+        self.assertEqual(1, sizecommAred)
+        Ared.destroy()
+
     def testCreateTranspose(self):
         self._preallocate()
         self._set_values_ijv()
diff --git a/test/test_ts.py b/test/test_ts.py
index 535820a..bdac7d3 100644
--- a/test/test_ts.py
+++ b/test/test_ts.py
@@ -65,6 +65,8 @@ class BaseTestTSNonlinear(object):
 
     def setUp(self):
         self.ts = PETSc.TS().create(PETSc.COMM_SELF)
+        eft = PETSc.TS.ExactFinalTime.STEPOVER
+        self.ts.setExactFinalTime(eft)
         ptype = PETSc.TS.ProblemType.NONLINEAR
         self.ts.setProblemType(ptype)
         self.ts.setType(self.TYPE)
diff --git a/test/test_ts_py.py b/test/test_ts_py.py
index 7872328..f2b01ac 100644
--- a/test/test_ts_py.py
+++ b/test/test_ts_py.py
@@ -70,6 +70,8 @@ class TestTSPython(unittest.TestCase):
     def setUp(self):
         self.ts = PETSc.TS()
         self.ts.createPython(MyTS(), comm=PETSc.COMM_SELF)
+        eft = PETSc.TS.ExactFinalTime.STEPOVER
+        self.ts.setExactFinalTime(eft)
         ctx = self.ts.getPythonContext()
         self.assertEqual(getrefcount(ctx),  3)
         self.assertEqual(ctx.log['create'], 1)

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



More information about the debian-science-commits mailing list